{"version":3,"file":"ngx-hana-nameserver-history-viewer.mjs","sources":["../../src/nameserver-history-viewer/utils/chart-util.ts","../../src/nameserver-history-viewer/types/item.types.ts","../../src/nameserver-history-viewer/types/scale-group.types.ts","../../src/nameserver-history-viewer/types/unit.types.ts","../../src/nameserver-history-viewer/types/unit-category.types.ts","../../src/nameserver-history-viewer/types/alert.types.ts","../../src/nameserver-history-viewer/types/html-element.type.ts","../../src/nameserver-history-viewer/types/abort.types.ts","../../src/nameserver-history-viewer/utils/ui-util.ts","../../src/nameserver-history-viewer/utils/time-util.ts","../../src/nameserver-history-viewer/utils/file-util.ts","../../src/nameserver-history-viewer/services/ui.service.ts","../../src/nameserver-history-viewer/services/chart.service.ts","../../src/nameserver-history-viewer/services/file.service.ts","../../src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.html","../../src/nameserver-history-viewer/components/port-selector/port-selector.service.ts","../../src/nameserver-history-viewer/components/port-selector/port-selector.component.ts","../../src/nameserver-history-viewer/components/progress-bar/progress-bar.component.ts","../../src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.html","../../src/nameserver-history-viewer/components/nameserver-history.component.ts","../../src/nameserver-history-viewer/components/nameserver-history.component.html","../../ngx-hana-nameserver-history-viewer.ts"],"sourcesContent":["import { ColorRgba } from '../types';\r\n\r\n\r\nfunction _randomColorFactor(): number {\r\n  return Math.round(Math.random() * 255);\r\n}\r\n\r\n/**\r\n * generate random color\r\n * @param opacity alpha\r\n */\r\nexport function randomColor(opacity: number): string {\r\n  return 'rgba(' + _randomColorFactor() + ',' + _randomColorFactor() + ',' + _randomColorFactor() + ',' + (opacity || '.3') + ')';\r\n}\r\n\r\n/**\r\n * generate the rgba string from ColorRgba\r\n */\r\nexport function getColorString(rgbaColor: ColorRgba): string {\r\n  return `rgba(${rgbaColor['red']}, ${rgbaColor['green']}, ${rgbaColor['blue']}, ${rgbaColor['alpha']})`;\r\n}\r\n\r\n/**\r\n * format Number with commas\r\n */\r\nexport function getNumberWithCommas(num: number): string {\r\n  const [integerPart, decimalPart] = num.toString().split('.');\r\n  const integerWithCommas = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n  return decimalPart ? `${integerWithCommas}.${decimalPart}` : integerWithCommas;\r\n}\r\n","export enum Item {\r\n  kpi = 'KPI',\r\n  yScale = 'Y-Scale',\r\n  yScaleGroup = '_YScaleGroup',\r\n  unit = 'Unit',\r\n  max = 'Max',\r\n  average = 'Average',\r\n  sum = 'Sum',\r\n  last = 'Last',\r\n  description = 'Description',\r\n  header = 'header'\r\n}\r\n","export enum ScaleGroup {\r\n  CPU,\r\n  Memory,\r\n  Disk,\r\n  Network,\r\n  Swap,\r\n  Time,\r\n  Req,\r\n  Stmt,\r\n  WRTime,\r\n  WRSize,\r\n  Conn,\r\n  Trans,\r\n  Unknown\r\n}\r\n","export enum Unit {\r\n  PCT = '%',\r\n  MS = 'ms',\r\n  Empty = '',\r\n  GB = 'GB',\r\n  MB = 'MB',\r\n  MBPerSec = 'MB/s',\r\n  SecPerSec = 'Sec/s',\r\n  StmtPerSec = 'stm/s',\r\n  ReqPerSec = 'req/s',\r\n  ColPerSec = 'col/s'\r\n}\r\n","export enum UnitType {\r\n  TypeEA,\r\n  TypeGB,\r\n  TypeMB,\r\n  TypeSecSec,\r\n  TypeMBSec,\r\n  TypeSec\r\n}\r\n","export enum Alert {\r\n  success = 'success',\r\n  error = 'error',\r\n  info = 'info',\r\n  warning = 'warning',\r\n}\r\n","export enum HtmlElement {\r\n  chartArea,\r\n  readFileProgress,\r\n  showChartButton,\r\n  loadPortsButton,\r\n  resetChartButton\r\n}\r\n","export enum Abort {\r\n  maxLineNumReached,\r\n  maxTimeRangeReached,\r\n}\r\n","import { getRealPorts } from './file-util';\r\nimport {UnitType, Port, ChartContentData} from '../types';\r\n\r\n/**\r\n * For some reason, hana studio will abandon the last line of nameserver history trace file\r\n */\r\nconst _IGNORED_LINE_FROM_TAIL = 1;\r\n\r\n/**\r\n * None index server ports in name server history,\r\n * 01: name server; 02: preprocessor; 04: script server; 05: statistics server / diserver;\r\n * 06: web dispatcher; 07: xsengine; 10 compileserver; 11 dpserver; 12 esserver; 29 xscontroller\r\n */\r\nconst _NON_INDEX_SERVER_PORTS = ['01', '02', '04', '05', '06', '07', '10', '11', '12', '29'];\r\n\r\nconst _HANA_SERVICES = {\r\n  indexserver: 'Index Server',\r\n  nameserver: 'Name Server',\r\n  compileserver: 'Compile Server',\r\n  preprocessor: 'Preprocessor Server',\r\n  webdispatcher: 'SAP Web Dispatcher',\r\n  scriptserver: 'Script Server',\r\n  docstore: 'Document Store Server',\r\n  diserver: 'HDI Server',\r\n  xsengine: 'XS Classic Server',\r\n  esserver: 'Extended Store Server',\r\n  dpserver: 'Data Provisioning Server',\r\n  streamingserver: 'Streaming Cluster',\r\n  etsserver: 'Accelerator for SAP ASE',\r\n  xscontroller: 'SAP HANA XS Controller',\r\n  xsexecagent: 'SAP HANA XS Execution Agent',\r\n  xsuaaserver: 'SAP HANA XS UAA'\r\n};\r\n\r\nexport const getHANAServiceDisplayName = (s?: string) => (s ? (_HANA_SERVICES[s] ?? s) : \"\");\r\n\r\n/**\r\n * Get the ignored line number from tail (For some reason, hana studio will abandon the last line of nameserver history trace file).\r\n */\r\nexport function getIgnoredLineNumFromTail() {\r\n    return _IGNORED_LINE_FROM_TAIL;\r\n}\r\n\r\n/**\r\n * get the port that needs to be displayed from ports list via the selected port\r\n * @param ports overall ports list\r\n * @param port the selected port\r\n */\r\nexport function getDisplayPort(ports: string[], port: string): string {\r\n  if (ports != null && ports.length > 0) {\r\n    if (port == null || port.length === 0) {\r\n      // if no port is selected\r\n      if (ports.length === 1) {\r\n        // not mdc system, will display the only one\r\n        port = ports[0];\r\n      } else {\r\n        // select the first service (not in _NON_INDEX_SERVER_PORTS list)\r\n        port = getRealPorts(ports).find(p => _NON_INDEX_SERVER_PORTS.indexOf(p.slice(-2)) < 0);\r\n        if (port == null) {\r\n          port = getRealPorts(ports)[0];\r\n        }\r\n      }\r\n    } else {\r\n      // get real port is port is some thing like 3**03\r\n      if (port.slice(1, 3) === '**') {\r\n        port = ports.find(key => key.slice(-2) === port.slice(-2));\r\n      } else {\r\n        port = ports.find(key => key === port);\r\n      }\r\n    }\r\n  } else {\r\n    port = void 0;\r\n  }\r\n  return port;\r\n}\r\n\r\n/**\r\n * Generate the ports for ngx-select.\r\n * If the provided ports is not null and no port has been selected,\r\n * will choose the first item which is not 01 (nameserver) or 07 (xsengine)\r\n *\r\n */\r\nexport function generatePorts(ports: string[] = null, selectedPort: string = null): Port[] {\r\n  if (ports == null) {\r\n    return null;\r\n  } else {\r\n    // if no selection, choose the first item which is not 01 (nameserver) or 07 (xsengine)\r\n    if (selectedPort == null || selectedPort === '') {\r\n      const firstIndexServer = ports.find(p => _NON_INDEX_SERVER_PORTS.indexOf(p.slice(-2)) < 0);\r\n      selectedPort = firstIndexServer ? firstIndexServer : ports[0];\r\n    }\r\n\r\n    let index = ports.findIndex(port => port === selectedPort);\r\n    if (index === -1) {\r\n      // selection is not exists in the file\r\n      index = 0;\r\n    }\r\n    const newPorts: Port[] = ports.map(port => ({id: port, text: port}));\r\n    newPorts[index].selected = true;\r\n    return newPorts;\r\n  }\r\n}\r\n\r\n/**\r\n * get unit factor by unit\r\n */\r\nexport function getUnitFactor(unitType: UnitType): number {\r\n  let unitFactor = 1;\r\n  switch (unitType) {\r\n    case UnitType.TypeGB:\r\n      // BYTE to GB\r\n      unitFactor = 1024 * 1024 * 1024;\r\n      break;\r\n    case UnitType.TypeMB:\r\n    case UnitType.TypeMBSec:\r\n      // BYTE to MB\r\n      unitFactor = 1024 * 1024;\r\n      break;\r\n    case UnitType.TypeSecSec:\r\n      // micro second to second\r\n      unitFactor = 1000000;\r\n  }\r\n  return unitFactor;\r\n}\r\n/**\r\n * get value by unit (divided by the unit factor).\r\n */\r\nexport function getValueByUnit(value: number, unit: UnitType): number {\r\n  return (value / getUnitFactor(unit));\r\n}\r\n\r\n/**\r\n * get rounded value: if value >= 10, round to integer; if value < 10, round to at most 2 decimal places\r\n */\r\nexport function getRoundedValue(value: number): number {\r\n  return value >= 10 ? Math.round (value) : Math.round(value * 100) / 100;\r\n}\r\n\r\n/**\r\n * check whether unit is time related.\r\n */\r\nexport function isUnitTimeRelated (unit: UnitType): boolean {\r\n  return unit === UnitType.TypeMBSec || unit === UnitType.TypeSec || unit === UnitType.TypeSecSec;\r\n}\r\n\r\n/**\r\n * calculate YScale base on the provided value\r\n */\r\nexport function calculateYScale(value: number): number {\r\n  // round up to next 2,5,10,20,50,100,...\r\n  if (value <= 0) {\r\n    return 100;\r\n  }\r\n  const scale = Math.pow( 10, Math.floor(Math.log10(value)));\r\n  if (scale >= value) {\r\n    return scale;\r\n  }\r\n  if (2 * scale >= value) {\r\n    return 2 * scale;\r\n  }\r\n  if ( 5 * scale >= value) {\r\n    return 5 * scale;\r\n  }\r\n\r\n  return 10 * scale;\r\n}\r\n\r\nexport function isEmptyData(data: ChartContentData): boolean {\r\n  if (data) {\r\n    return Object.keys(data).findIndex(port => {\r\n      if (port != null && data[port]) {\r\n        return data[port].findIndex(row => row && row.length > 0) >= 0;\r\n      }\r\n      return false;\r\n    }) < 0;\r\n  }\r\n  return true;\r\n}\r\n\r\nexport function sleep (time: number): Promise<any> {\r\n  return new Promise((resolve) => setTimeout(resolve, time));\r\n}\r\n\r\nexport function setChartHeight(nsAll, nsContent): void {\r\n  // const item1 = (document.getElementsByClassName('nameserver-history-all') as HTMLCollectionOf<HTMLElement>)[0];\r\n  // const item2 = (document.getElementsByClassName('nameserver-history-content') as HTMLCollectionOf<HTMLElement>)[0];\r\n  if (nsAll && nsContent) {\r\n    const chartHeight = nsAll.offsetWidth * 0.75 / 2 + 10;\r\n    nsContent.style.height = `${chartHeight}px`;\r\n  }\r\n}\r\n\r\n","import { isDevMode } from '@angular/core';\r\nimport { getIgnoredLineNumFromTail } from './ui-util';\r\nimport { ChartContentTime } from '../types';\r\nimport { format } from 'date-fns';\r\nimport { TZDateMini  } from '@date-fns/tz';\r\n\r\n/**\r\n * get the time range for all ports\r\n */\r\nfunction _getTotalTimeRange(time: ChartContentTime): {startTime: number, endTime: number} {\r\n  if (time) {\r\n    let startTime = 4102358400000; // 2099/12/31\r\n    let endTime = 0;\r\n\r\n    Object.keys(time).forEach(port => {\r\n      if (time[port]) {\r\n        const timeRangeCurrent = _getTimeRange(time[port]);\r\n        startTime = startTime > timeRangeCurrent.startTime ? timeRangeCurrent.startTime : startTime;\r\n        endTime = endTime < timeRangeCurrent.endTime ? timeRangeCurrent.endTime : endTime;\r\n      }\r\n    });\r\n\r\n    return {startTime: startTime, endTime: endTime};\r\n  }\r\n  return undefined;\r\n}\r\n\r\n/**\r\n * get the time range (startTime ~ endTime) base on the time (the xScale)\r\n */\r\nfunction _getTimeRange(time: number[]): {startTime: number, endTime: number} {\r\n  const ignoredLineNumFromTail = getIgnoredLineNumFromTail();\r\n  if (time) {\r\n    let startTime = 4102358400000; // 2099/12/31\r\n    let endTime = 0;\r\n\r\n    const len = time.length;\r\n    if (len > ignoredLineNumFromTail) {\r\n      startTime = time[0] > startTime ? startTime : time[0];\r\n      endTime = time[len - ignoredLineNumFromTail - 1] > endTime ? time[len - ignoredLineNumFromTail - 1] : endTime;\r\n    }\r\n\r\n    return {startTime: startTime, endTime: endTime};\r\n  }\r\n  return {startTime: 0, endTime: 0};\r\n}\r\nexport function getEtcTimezones() {\r\n        // Add Etc timezones manually since Intl doesn't include them\r\n    const etcTimezones = [\r\n      'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6',\r\n      'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12','Etc/GMT-0',\r\n      'Etc/GMT-1', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6',\r\n      'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12',\r\n      'Etc/GMT-13', 'Etc/GMT-14'\r\n    ];\r\n\r\n    return [...etcTimezones, ...getZeroOffsetEtcZones()];\r\n  }\r\n  /**\r\n   * etc zones with 0 offset\r\n   */\r\nexport function getZeroOffsetEtcZones() {\r\n  return ['Etc/GMT', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UTC', 'Etc/UCT', 'Etc/Universal', 'Etc/Zulu']\r\n}\r\n\r\n/**\r\n * get default local time zone\r\n */\r\nexport function defaultTimezone(): string {\r\n  return Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n}\r\n\r\n/**\r\n * \r\n * @returns get supported timezones from intl\r\n */\r\nexport function supportedTimezones() {\r\n  const zones = Intl.supportedValuesOf('timeZone');\r\n  // Combine Intl zones with Etc zones\r\n  return [...zones, ...getEtcTimezones()];\r\n}\r\n\r\n/**\r\n * Get time from provided timezone, using this only because chart.js doesn't support timezone.\r\n * This function will be removed when chart.js starts to support timezone feature.\r\n * @param time time in seconds (Epoch time)\r\n * @param timezone timezone string, uses local timezone if this is null.\r\n */\r\nexport function getTimeFromTimeZone (time: number, timezone: string): number {\r\n  if (timezone == null || timezone.length === 0) {\r\n    timezone = defaultTimezone();\r\n    console.warn(`getTimeFromTimeZone - Input timezone is null, returning the local (${timezone}) time. `);\r\n  }\r\n  // Get timezone offsets in milliseconds\r\n  const utcOffset = getOffset(timezone, time * 1000);\r\n  const currentOffset = getOffset(defaultTimezone(), time * 1000); // seconds\r\n  // convert to utc and then to selected timezone\r\n  return time + utcOffset - currentOffset;\r\n}\r\n\r\n/**\r\n * get timezone offsests in seconds\r\n */\r\nexport function getOffset(timezone: string, time: number): number {\r\n  const date = new Date(time);\r\n  let offset: number;\r\n  // Handle Etc timezones specially since getTimezoneOffset doesn't support them\r\n  if (getZeroOffsetEtcZones().includes(timezone)) {\r\n    offset = 0;\r\n  } else if (timezone.startsWith('Etc/GMT')) {\r\n      // Extract the offset from the zone name\r\n      // Note: Etc/GMT+X means UTC-X (opposite sign)\r\n      const match = timezone.match(/Etc\\/GMT([+-])(\\d+)/);\r\n      if (match) {\r\n        const sign = match[1];\r\n        const hours = parseInt(match[2], 10);\r\n        offset = (sign === '+' ? -hours : +hours) * 60 * 60;\r\n      } else {\r\n        offset = 0;\r\n      }\r\n  } else {\r\n    offset = (new TZDateMini(date, timezone)).getTimezoneOffset() * -60;\r\n  }\r\n  return offset;\r\n}\r\n\r\n/**\r\n * Get time formatted with the provided timezone\r\n */\r\nexport function getTimeString (time: number): string {\r\n   return format(new Date(time), 'yyyy-MM-dd HH:mm:ss');\r\n}\r\n\r\n/**\r\n * Get the time range string by time array, eg: 2018-10-25 10:10:00 ~ 2018-10-25 12:12:00\r\n */\r\nexport function getTimeRangeString(time: any): string {\r\n  let startTimeString = 'N/A';\r\n  let endTimeString = 'N/A';\r\n  let timeRange;\r\n  if (Array.isArray(time)) {\r\n    timeRange = _getTimeRange(time);\r\n  } else {\r\n    timeRange = _getTotalTimeRange(time);\r\n  }\r\n\r\n  if (timeRange) {\r\n    if (timeRange.startTime < 4102358400000) {\r\n      startTimeString = getTimeString(timeRange.startTime);\r\n    }\r\n\r\n    if (timeRange.endTime > 0) {\r\n      endTimeString = getTimeString(timeRange.endTime);\r\n    }\r\n    return `${startTimeString} ~ ${endTimeString}`;\r\n  }\r\n  return 'N/A ~ N/A';\r\n}\r\n\r\n/**\r\n * print processed time from the provided beginTime, only works in dev mode\r\n */\r\nexport function printProcessedTime(beginTime: Date, step: string): void {\r\n  if (isDevMode()) {\r\n    // only do it in dev mode\r\n    const timeAfter = new Date();\r\n    const parsingTime = (timeAfter.getTime() - beginTime.getTime()) / 1000;\r\n    console.log(`${step}, Parsing time: ${parsingTime} seconds`);\r\n  }\r\n}\r\n","import {getTimeFromTimeZone} from './time-util';\r\n\r\nconst _DEFAULT_PORT = 'DEFAULT';\r\n\r\n/**\r\n * get the default port string (for non-MDC system)\r\n */\r\nexport function getDefaultPort(): string {\r\n  return _DEFAULT_PORT;\r\n}\r\n\r\n/**\r\n * get abbreviated file name\r\n * @param fileName\r\n */\r\nexport function getAbbreviatedFileName(fileName: string): string {\r\n  return fileName == null || fileName.length <= 22 ? fileName : `${fileName.slice(0, 11)}...${fileName.slice(-11)}`;\r\n}\r\n\r\n/**\r\n * get port if empty return default port\r\n */\r\nexport function getPort(port: string): string {\r\n  return port == null || port.length === 0 ? _DEFAULT_PORT : port;\r\n}\r\n\r\n/**\r\n * get all real ports except the default port \"default\"\r\n */\r\nexport function getRealPorts(ports: string[], includeDefault: boolean = false): string[] {\r\n  if (ports == null) {\r\n    return [];\r\n  }\r\n  if (includeDefault) {\r\n    return ports;\r\n  } else {\r\n    return ports.filter(port => port !== _DEFAULT_PORT);\r\n  }\r\n}\r\n\r\n/**\r\n * get file from <input>\r\n * @param inputTarget\r\n */\r\nexport function  getFileFromInput(inputTarget: any): File | null {\r\n  if (inputTarget && inputTarget.files && inputTarget.files.length > 0) {\r\n    return inputTarget.files[0];\r\n  }\r\n  return null;\r\n}\r\n\r\n/**\r\n * get file from drag and drop\r\n */\r\nexport function getFileFromDrop(dragEvent: any): Promise<any> {\r\n  return new Promise((resolve, reject) => {\r\n    if (dragEvent.error) {\r\n      reject(dragEvent.error);\r\n    } else {\r\n      if (dragEvent.file) {\r\n        resolve(dragEvent.file);\r\n      }\r\n    }\r\n  });\r\n}\r\n\r\n/**\r\n * Check whether the port from file is the same with the selected port.\r\n * If the selected port is empty, return true directly. This makes all ports will be selected.\r\n * @param portFromFile Port read from file\r\n * @param portFromSelection Port from selection.\r\n * @param isMDC MDC flag\r\n */\r\nexport function isSamePort(portFromFile: string, portFromSelection: string, isMDC: boolean): boolean {\r\n  // if it's MDC system, and the port From File is default port, return false\r\n  if (isMDC && portFromFile === _DEFAULT_PORT) {\r\n    return false;\r\n  }\r\n  // if selected port is empty, return true directly. This makes all ports being selected\r\n  if (portFromSelection == null || portFromSelection.length === 0) {\r\n    return true;\r\n  }\r\n\r\n  return portFromFile === portFromSelection || portFromFile.slice(-2) === portFromSelection.slice(-2);\r\n}\r\n\r\n/**\r\n * As javascript can't get the full path of file, if these two files have same\r\n * 1. lastModified, 2. name, 3. size, these two files are considered as the same file\r\n */\r\nexport function isSameFile(file1: File, file2: File): boolean {\r\n  if (file1 && file2) {\r\n    if (file1.lastModified === file2.lastModified && file1.name === file2.name && file1.size === file2.size) {\r\n      return true;\r\n    }\r\n  }\r\n  return false;\r\n}\r\n\r\n/**\r\n * Check whether the provided port is a valid port (3xxxx)\r\n */\r\nexport function isValidPort(port: string): boolean {\r\n  return port && port.length === 5 && port[0] === '3';\r\n}\r\n\r\n/**\r\n * get next value from current value base on the operator \"<\" or \">\".\r\n * Keep using current value until the \"nextValue\" is not empty.\r\n */\r\nexport function calculateValue(lastValue: number, nextValue: string): number {\r\n  // if the relative value missed, it's null.\r\n  // And if it's missed, just use current value from last line.\r\n  let newValue = lastValue;\r\n  if (nextValue != null && nextValue.length > 0) {\r\n    if (nextValue[0] === '<') {\r\n      newValue = lastValue - parseFloat(nextValue.slice(1));\r\n    } else if (nextValue[0] === '>') {\r\n      newValue = lastValue + parseFloat(nextValue.slice(1));\r\n    } else {\r\n      newValue = parseFloat(nextValue);\r\n    }\r\n  }\r\n  return newValue;\r\n}\r\n\r\n/**\r\n * get next time value from current time base on the operator \"<\" or \">\".\r\n * If nextValue is not \"<\" or \">\", returns converted time base on the timezone\r\n */\r\nexport function calculateValue4Time(lastValue: number, nextValue: string, timezone: string): number {\r\n  // if the relative value missed, it's null.\r\n  // And if it's missed, just use current value from last line.\r\n  let newValue = lastValue;\r\n  if (nextValue != null && nextValue.length > 0) {\r\n    if (nextValue[0] !== '<' && nextValue[0] !== '>') {\r\n      newValue = getTimeFromTimeZone(parseFloat(nextValue), timezone);\r\n    } else {\r\n      newValue = calculateValue(lastValue, nextValue);\r\n    }\r\n  }\r\n  return newValue;\r\n}\r\n\r\n/**\r\n * check whether the data comes from valid nameserver history file\r\n */\r\nexport function validateData(data: string[][]): boolean {\r\n  return data == null ? false : data.length >= 4 && ['host', 'time'].every(i => data[0].includes(i));\r\n}\r\n\r\n/**\r\n * convert blob to file\r\n * @param theBlob\r\n * @param fileName\r\n */\r\nexport function blobToFile (theBlob: Blob, fileName: string): File {\r\n  const blob: any = theBlob;\r\n  // A Blob() is almost a File() - it's just missing the two properties below which we will add\r\n  blob.lastModifiedDate = new Date();\r\n  blob.name = fileName;\r\n\r\n  // Cast to a File() type\r\n  return <File>theBlob;\r\n}\r\n\r\n/**\r\n * check the object is a File object or not a File(Blob)\r\n * @param obj\r\n */\r\nexport function isFile(obj): boolean {\r\n  return obj && typeof obj.name === 'string';\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { getIgnoredLineNumFromTail, isUnitTimeRelated, getValueByUnit, getRoundedValue, calculateYScale } from '../utils';\r\nimport {\r\n  ColorRgba,\r\n  LoadHistoryInfo,\r\n  LoadHistoryInfoBackup,\r\n  LoadHistoryInfoColumnStore,\r\n  LoadHistoryInfoHost,\r\n  LoadHistoryInfoIndexServer,\r\n  LoadHistoryInfoItem,\r\n  LoadHistoryInfoPersistence,\r\n  LoadHistoryInfoRowStore,\r\n  LoadHistoryInfoSessionAdmissionControl,\r\n  LoadHistoryInfoSQL,\r\n  LoadHistoryInfoSyncPrimitives,\r\n  LoadHistoryInfoThreads,\r\n  ChartContentDataItem,\r\n  ChartContentHeader,\r\n  LegendColor,\r\n  ScaleGroup,\r\n  Unit,\r\n  UnitType,\r\n  Item\r\n} from '../types';\r\n\r\n// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported\r\n// @dynamic\r\n@Injectable()\r\nexport class UIService {\r\n  private readonly _DEFAULT_DISPLAY_ITEMS: string[] = ['cpuUsed', 'indexserverMemUsed', 'mvccNum'];\r\n  private readonly _HIDED_COLUMNS: string[] = [Item.yScaleGroup, Item.description];\r\n  private readonly _MEASURE_COLUMNS: string[] = [Item.max, Item.average, Item.sum, Item.last];\r\n  private _loadHistoryInfos = {};\r\n\r\n  /**\r\n   * get the colors for legends\r\n   */\r\n  public static getColors(alpha: number = null): LegendColor {\r\n    if (alpha == null) {\r\n      alpha = 0.8;\r\n    }\r\n    return {\r\n      cpuUsed                        : this._getRgbColor(199, 21, 133, alpha), // mediumvioletred\r\n      memoryResident                 : this._getRgbColor(238, 130, 238, alpha), // violet\r\n      memoryTotalResident            : this._getRgbColor(72, 61, 139, alpha), // darkslateblue\r\n      memoryUsed                     : this._getRgbColor(0, 0, 205, alpha), // mediumblue\r\n      memoryLimit                    : this._getRgbColor(255, 105, 180, alpha), // hotpink\r\n      memorySize                     : this._getRgbColor(70, 130, 180, alpha), // steelblue\r\n      diskUsed                       : this._getRgbColor(25, 25, 112, alpha), // midnightblue\r\n      diskSize                       : this._getRgbColor(0, 255, 255, alpha), // aqua\r\n      networkIn                      : this._getRgbColor(102, 51, 153, alpha), // rebeccapurple\r\n      networkOut                     : this._getRgbColor(245, 222, 179, alpha), // wheat\r\n      swapIn                         : this._getRgbColor(47, 79, 79, alpha), // darkslategray\r\n      swapOut                        : this._getRgbColor(205, 92, 92, alpha), // indianred\r\n      indexserverCpu                 : this._getRgbColor(255, 99, 71, alpha), // tomato\r\n      indexserverCpuSys              : this._getRgbColor(255, 20, 147, alpha), // deeppink\r\n      indexserverMemUsed             : this._getRgbColor(0, 255, 0, alpha), // lime\r\n      indexserverMemLimit            : this._getRgbColor(139, 0, 0, alpha), // darkred\r\n      indexserverHandles             : this._getRgbColor(139, 0, 139, alpha), // darkmagenta\r\n      indexserverPingtime            : this._getRgbColor(189, 183, 107, alpha), // darkkhaki\r\n      indexserverSwapIn              : this._getRgbColor(112, 128, 144, alpha), // slategray\r\n      sqlConnections                 : this._getRgbColor(85, 107, 47, alpha), // darkolivegreen\r\n      internalConnections            : this._getRgbColor(46, 139, 87, alpha), // seagreen\r\n      externalConnections            : this._getRgbColor(147, 112, 219, alpha), // mediumpurple\r\n      idleConnections                : this._getRgbColor(216, 191, 216, alpha), // thistle\r\n      sqlTransactions                : this._getRgbColor(220, 20, 60, alpha), // crimson\r\n      internalTransactions           : this._getRgbColor(186, 85, 211, alpha), // mediumorchid\r\n      externalTransactions           : this._getRgbColor(221, 160, 221, alpha), // plum\r\n      userTransactions               : this._getRgbColor(210, 105, 30, alpha), // chocolate\r\n      sqlBlockedTrans                : this._getRgbColor(0, 0, 255, alpha), // blue\r\n      sqlStatements                  : this._getRgbColor(188, 143, 143, alpha), // rosybrown\r\n      cidRange                       : this._getRgbColor(32, 178, 170, alpha), // lightseagreen\r\n      tidRange                       : this._getRgbColor(124, 252, 0, alpha), // lawngreen\r\n      pendingRequestCount            : this._getRgbColor(160, 32, 240, alpha), // purple3\r\n      mvccNum                        : this._getRgbColor(65, 105, 225, alpha), // royalblue\r\n      acquiredRecordLocks            : this._getRgbColor(0, 250, 154, alpha), // mediumspringgreen\r\n      searchCount                    : this._getRgbColor(127, 255, 212, alpha), // aquamarine\r\n      indexingCount                  : this._getRgbColor(0, 191, 255, alpha), // deepskyblue\r\n      mergeCount                     : this._getRgbColor(135, 206, 235, alpha), // skyblue\r\n      unloadCount                    : this._getRgbColor(255, 165, 0, alpha), // orange\r\n      indexserverThreads             : this._getRgbColor(0, 100, 0, alpha), // darkgreen\r\n      waitingThreads                 : this._getRgbColor(176, 48, 96, alpha), // maroon3\r\n      totalThreads                   : this._getRgbColor(100, 149, 237, alpha), // cornflower\r\n      activeSqlExecutors             : this._getRgbColor(175, 238, 238, alpha), // paleturquoise\r\n      waitingSqlExecutors            : this._getRgbColor(50, 205, 50, alpha), // limegreen\r\n      totalSqlExecutors              : this._getRgbColor(240, 230, 140, alpha), // khaki\r\n      dataWriteSize                  : this._getRgbColor(102, 205, 170, alpha), // mediumaquamarine\r\n      dataWriteTime                  : this._getRgbColor(169, 169, 169, alpha), // darkgray\r\n      logWriteSize                   : this._getRgbColor(160, 82, 45, alpha), // sienna\r\n      logWriteTime                   : this._getRgbColor(128, 128, 0, alpha), // olive\r\n      dataReadSize                   : this._getRgbColor(255, 215, 0, alpha), // gold\r\n      dataReadTime                   : this._getRgbColor(95, 158, 160, alpha), // cadetblue\r\n      logReadSize                    : this._getRgbColor(255, 0, 0, alpha), // red\r\n      logReadTime                    : this._getRgbColor(184, 134, 11, alpha), // darkgoldenrod\r\n      dataBackupWriteSize            : this._getRgbColor(255, 255, 0, alpha), // yellow\r\n      dataBackupWriteTime            : this._getRgbColor(154, 205, 50, alpha), // yellowgreen\r\n      logBackupWriteSize             : this._getRgbColor(0, 0, 139, alpha), // darkblue\r\n      logBackupWriteTime             : this._getRgbColor(219, 112, 147, alpha), // palevioletred\r\n      mutexCollisionCount            : this._getRgbColor(244, 164, 96, alpha), // sandybrown\r\n      readWriteLockCollisionCount    : this._getRgbColor(233, 150, 122, alpha), // darksalmon\r\n      admissinControlAdmitCount      : this._getRgbColor(143, 188, 143, alpha), // darkseagreen\r\n      admissionControlRejectCount    : this._getRgbColor(255, 0, 255, alpha), // fuchsia\r\n      admissionControlWaitingRequests: this._getRgbColor(153, 50, 204, alpha), // darkorchid\r\n      admissionControlWaitTime       : this._getRgbColor(144, 238, 144, alpha), // lightgreen\r\n    };\r\n  }\r\n\r\n  private static get _unitType(): any {\r\n    const unitType = {};\r\n    unitType[Unit.PCT] = UnitType.TypeEA;\r\n    unitType[Unit.MS] = UnitType.TypeEA;\r\n    unitType[Unit.Empty] = UnitType.TypeEA;\r\n    unitType[Unit.GB] = UnitType.TypeGB;\r\n    unitType[Unit.MB] = UnitType.TypeMB;\r\n    unitType[Unit.MBPerSec] = UnitType.TypeMBSec;\r\n    unitType[Unit.SecPerSec] = UnitType.TypeSecSec;\r\n    unitType[Unit.StmtPerSec] = UnitType.TypeSec;\r\n    unitType[Unit.ReqPerSec] = UnitType.TypeSec;\r\n    unitType[Unit.ColPerSec] = UnitType.TypeSec;\r\n    return unitType;\r\n  }\r\n\r\n  /**\r\n   * get yScale group list from the enum ScaleGroup\r\n   */\r\n  private static get _YScaleGroupList(): any[] {\r\n    return Object.keys(ScaleGroup).filter(key => !isNaN(Number(ScaleGroup[key]))).map(key => ScaleGroup[key]);\r\n  }\r\n\r\n  /**\r\n   * Generate one item by the provided attributes and values\r\n   * @param args the dynamic parameter of [attribute, value]\r\n   */\r\n  private static _generateLoadHistoryInfoItem(...args): LoadHistoryInfoItem {\r\n    const obj = {};\r\n    if (!args || args.length <= 0) {\r\n      return obj;\r\n    }\r\n\r\n    args.forEach(item => {\r\n      if (item && item.length >= 2) {\r\n        obj[item[0]] = item[1];\r\n      }\r\n    });\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * generate the loadHistoryInfo object with default values.\r\n   */\r\n  private static _generateLoadHistoryInfo(): LoadHistoryInfo {\r\n    // minimum value for YScale of swapIn, swapOut, indexserverSwapIn is 100 (according to hana studio)\r\n    const infoItem = UIService._generateLoadHistoryInfoItem; // just for making the name shorter...\r\n    const cpuUsed                         = infoItem([Item.kpi, 'CPU'                        ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU    ], [Item.unit, Unit.PCT        ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU Used by all processes']);\r\n    const memoryResident                  = infoItem([Item.kpi, 'Database Resident Memory'   ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all HANA processes']);\r\n    const memoryTotalResident             = infoItem([Item.kpi, 'Total Resident Memory'      ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all processes']);\r\n    const memoryUsed                      = infoItem([Item.kpi, 'Database Used Memory'       ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used for all HANA processes']);\r\n    const memoryLimit                     = infoItem([Item.kpi, 'Database Allocation Limit'  ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for all processes of HANA instance']);\r\n    const memorySize                      = infoItem([Item.kpi, 'Physical Memory Size'       ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory size']);\r\n    const diskUsed                        = infoItem([Item.kpi, 'Disk Used'                  ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Disk   ], [Item.unit, Unit.GB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk used']);\r\n    const diskSize                        = infoItem([Item.kpi, 'Disk Size'                  ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Disk   ], [Item.unit, Unit.GB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk size']);\r\n    const networkIn                       = infoItem([Item.kpi, 'Network In'                 ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from network by all processes']);\r\n    const networkOut                      = infoItem([Item.kpi, 'Network Out'                ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to network by all processes']);\r\n    const swapIn                          = infoItem([Item.kpi, 'Swap In'                    ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap   ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by all processes (pswpin line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);\r\n    const swapOut                         = infoItem([Item.kpi, 'Swap Out'                   ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap   ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written To swap by all processes (pswpout line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);\r\n    const indexserverCpu                  = infoItem([Item.kpi, 'Service CPU'                ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU    ], [Item.unit, Unit.PCT        ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU used by Service']);\r\n    const indexserverCpuSys               = infoItem([Item.kpi, 'System CPU'                 ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU    ], [Item.unit, Unit.PCT        ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'OS Kernel/System CPU used by Service']);\r\n    const indexserverMemUsed              = infoItem([Item.kpi, 'Memory Used'                ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used by Service']);\r\n    const indexserverMemLimit             = infoItem([Item.kpi, 'Memory Allocation Limit'    ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for Service']);\r\n    const indexserverHandles              = infoItem([Item.kpi, 'Handles'                    ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open handles']);\r\n    const indexserverPingtime             = infoItem([Item.kpi, 'Ping Time'                  ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.MS         ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Duration of Service ping request (THREAD_METHOD=\\'__nsWatchdog\\'). This request includes the collection of service specific KPI\\'s']);\r\n    const indexserverSwapIn               = infoItem([Item.kpi, 'Service Swap In'            ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap   ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by Service (column 12(majflt) in /proc/<pid>/stat * sysconf(_SC_PAGESIZE))']);\r\n    const sqlConnections                  = infoItem([Item.kpi, 'Open Connections'           ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn   ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL connections']);\r\n    const internalConnections             = infoItem([Item.kpi, 'Internal Connections'       ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn   ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL internal connections']);\r\n    const externalConnections             = infoItem([Item.kpi, 'External Connections'       ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn   ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL external connections']);\r\n    const idleConnections                 = infoItem([Item.kpi, 'Idle Connections'           ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn   ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL idle connections']);\r\n    const sqlTransactions                 = infoItem([Item.kpi, 'Open Transactions'          ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans  ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL transactions']);\r\n    const internalTransactions            = infoItem([Item.kpi, 'Internal Transactions'      ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans  ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of internal transactions']);\r\n    const externalTransactions            = infoItem([Item.kpi, 'External Transactions'      ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans  ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of external transactions']);\r\n    const userTransactions                = infoItem([Item.kpi, 'User Transactions'          ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans  ], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of user transactions']);\r\n    const sqlBlockedTrans                 = infoItem([Item.kpi, 'Blocked Transactions'       ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of blocked SQL transactions']);\r\n    const sqlStatements                   = infoItem([Item.kpi, 'Statements'                 ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Stmt   ], [Item.unit, Unit.StmtPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of finished SQL statements']);\r\n    const cidRange                        = infoItem([Item.kpi, 'Active Commit ID Range'     ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active commit ID']);\r\n    const tidRange                        = infoItem([Item.kpi, 'Active Transaction ID Range'], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active transaction ID']);\r\n    const pendingRequestCount             = infoItem([Item.kpi, 'Pending Request Count'      ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of pending session requests']);\r\n    const mvccNum                         = infoItem([Item.kpi, 'Active Versions'            ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active MVCC versions']);\r\n    const acquiredRecordLocks             = infoItem([Item.kpi, 'Acquired Record Locks'      ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of acquired record locks']);\r\n    const searchCount                     = infoItem([Item.kpi, 'Read Requests'              ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req    ], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of read requests (select)']);\r\n    const indexingCount                   = infoItem([Item.kpi, 'Write Requests'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req    ], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of write requests (insert,update,delete)']);\r\n    const mergeCount                      = infoItem([Item.kpi, 'Merge Requests'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req    ], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of merge requests']);\r\n    const unloadCount                     = infoItem([Item.kpi, 'Column Unloads'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req    ], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of column unloads']);\r\n    const indexserverThreads              = infoItem([Item.kpi, 'Active Threads'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active threads']);\r\n    const waitingThreads                  = infoItem([Item.kpi, 'Waiting Threads'            ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting threads']);\r\n    const totalThreads                    = infoItem([Item.kpi, 'Total Threads'              ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of threads']);\r\n    const activeSqlExecutors              = infoItem([Item.kpi, 'Active SqlExecutors'        ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active SqlExecutors']);\r\n    const waitingSqlExecutors             = infoItem([Item.kpi, 'Waiting SqlExecutors'       ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting SqlExecutors']);\r\n    const totalSqlExecutors               = infoItem([Item.kpi, 'Total SqlExecutors'         ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty      ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of SqlExecutors']);\r\n    const dataWriteSize                   = infoItem([Item.kpi, 'Data Write Size'            ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data area']);\r\n    const dataWriteTime                   = infoItem([Item.kpi, 'Data Write Time'            ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data area']);\r\n    const logWriteSize                    = infoItem([Item.kpi, 'Log Write Size'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log area']);\r\n    const logWriteTime                    = infoItem([Item.kpi, 'Log Write Time'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log area']);\r\n    const dataReadSize                    = infoItem([Item.kpi, 'Data Read Size'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from data area']);\r\n    const dataReadTime                    = infoItem([Item.kpi, 'Data Read Time'             ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from data area']);\r\n    const logReadSize                     = infoItem([Item.kpi, 'Log Read Size'              ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from log area']);\r\n    const logReadTime                     = infoItem([Item.kpi, 'Log Read Time'              ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from log area']);\r\n    const dataBackupWriteSize             = infoItem([Item.kpi, 'Data Backup Write Size'     ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data backup']);\r\n    const dataBackupWriteTime             = infoItem([Item.kpi, 'Data Backup Write Time'     ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data backup']);\r\n    const logBackupWriteSize              = infoItem([Item.kpi, 'Log Backup Write Size'      ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec   ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log backup']);\r\n    const logBackupWriteTime              = infoItem([Item.kpi, 'Log Backup Write Time'      ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log backup']);\r\n    const mutexCollisionCount             = infoItem([Item.kpi, 'Mutex Collisions'           ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on mutexes']);\r\n    const readWriteLockCollisionCount     = infoItem([Item.kpi, 'Read/Write Lock Collisions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on read/write locks']);\r\n    const admissinControlAdmitCount       = infoItem([Item.kpi, 'Admitted Requests'          ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests admitted by admission control']);\r\n    const admissionControlRejectCount     = infoItem([Item.kpi, 'Rejected Requests'          ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests rejected by admission control']);\r\n    const admissionControlWaitingRequests = infoItem([Item.kpi, 'Waiting Requests'           ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests waiting in admission control queue']);\r\n    const admissionControlWaitTime        = infoItem([Item.kpi, 'Wait Time'                  ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.SecPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total wait time of session requests queued in admission control queue']);\r\n    const admissionControlEnqueueCount    = infoItem([Item.kpi, 'Enqueued Requests'          ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests enqueued by admission control']);\r\n    const admissionControlDequeueCount    = infoItem([Item.kpi, 'Dequeued Requests'          ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests dequeued by admission control']);\r\n    const admissionControlTimeoutCount    = infoItem([Item.kpi, 'Timed out Requests'          ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec  ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of timed out session requests in admission control queue']);\r\n\r\n    // generate Host\r\n    const loadHistoryInfoHost: LoadHistoryInfoHost = {\r\n      cpuUsed                         : cpuUsed            ,\r\n      memoryResident                  : memoryResident     ,\r\n      memoryTotalResident             : memoryTotalResident,\r\n      memoryUsed                      : memoryUsed         ,\r\n      memoryLimit                     : memoryLimit        ,\r\n      memorySize                      : memorySize         ,\r\n      diskUsed                        : diskUsed           ,\r\n      diskSize                        : diskSize           ,\r\n      networkIn                       : networkIn          ,\r\n      networkOut                      : networkOut         ,\r\n      swapIn                          : swapIn             ,\r\n      swapOut                         : swapOut            ,\r\n    };\r\n    // generate Index Server\r\n    const loadHistoryInfoIndexServer: LoadHistoryInfoIndexServer = {\r\n      indexserverCpu                  : indexserverCpu      ,\r\n      indexserverCpuSys               : indexserverCpuSys   ,\r\n      indexserverMemUsed              : indexserverMemUsed  ,\r\n      indexserverMemLimit             : indexserverMemLimit ,\r\n      indexserverHandles              : indexserverHandles  ,\r\n      indexserverPingtime             : indexserverPingtime ,\r\n      indexserverSwapIn               : indexserverSwapIn   ,\r\n    };\r\n    // generate SQL\r\n    const loadHistoryInfoSQL: LoadHistoryInfoSQL = {\r\n      sqlConnections                  : sqlConnections      ,\r\n      internalConnections             : internalConnections ,\r\n      externalConnections             : externalConnections ,\r\n      idleConnections                 : idleConnections     ,\r\n      sqlTransactions                 : sqlTransactions     ,\r\n      internalTransactions            : internalTransactions,\r\n      externalTransactions            : externalTransactions,\r\n      userTransactions                : userTransactions    ,\r\n      sqlBlockedTrans                 : sqlBlockedTrans     ,\r\n      sqlStatements                   : sqlStatements       ,\r\n      cidRange                        : cidRange            ,\r\n      tidRange                        : tidRange            ,\r\n      pendingRequestCount             : pendingRequestCount ,\r\n    };\r\n    // generate Row Store\r\n    const loadHistoryInfoRowStore: LoadHistoryInfoRowStore = {\r\n      mvccNum                         : mvccNum            ,\r\n      acquiredRecordLocks             : acquiredRecordLocks,\r\n    };\r\n    // generate Column Store\r\n    const loadHistoryInfoColumnStore: LoadHistoryInfoColumnStore = {\r\n      searchCount                     : searchCount  ,\r\n      indexingCount                   : indexingCount,\r\n      mergeCount                      : mergeCount   ,\r\n      unloadCount                     : unloadCount  ,\r\n    };\r\n    // generate Threads\r\n    const loadHistoryInfoThreads: LoadHistoryInfoThreads = {\r\n      indexserverThreads              : indexserverThreads ,\r\n      waitingThreads                  : waitingThreads     ,\r\n      totalThreads                    : totalThreads       ,\r\n      activeSqlExecutors              : activeSqlExecutors ,\r\n      waitingSqlExecutors             : waitingSqlExecutors,\r\n      totalSqlExecutors               : totalSqlExecutors  ,\r\n    };\r\n    // generate Persistence\r\n    const loadHistoryInfoPersistence: LoadHistoryInfoPersistence = {\r\n      dataWriteSize                   : dataWriteSize,\r\n      dataWriteTime                   : dataWriteTime,\r\n      logWriteSize                    : logWriteSize ,\r\n      logWriteTime                    : logWriteTime ,\r\n\r\n      dataReadSize                    : dataReadSize ,\r\n      dataReadTime                    : dataReadTime ,\r\n      logReadSize                     : logReadSize  ,\r\n      logReadTime                     : logReadTime  ,\r\n    };\r\n    // generate Backup\r\n    const loadHistoryInfoBackup: LoadHistoryInfoBackup = {\r\n      dataBackupWriteSize             : dataBackupWriteSize,\r\n      dataBackupWriteTime             : dataBackupWriteTime,\r\n      logBackupWriteSize              : logBackupWriteSize ,\r\n      logBackupWriteTime              : logBackupWriteTime ,\r\n    };\r\n    // generate Synchronization Primitives\r\n    const loadHistoryInfoSynchronizationPrimitives: LoadHistoryInfoSyncPrimitives = {\r\n      mutexCollisionCount             : mutexCollisionCount        ,\r\n      readWriteLockCollisionCount     : readWriteLockCollisionCount,\r\n    };\r\n    // Session Admission Control\r\n    const loadHistoryInfoSessionAdmissionControl: LoadHistoryInfoSessionAdmissionControl = {\r\n      admissinControlAdmitCount       : admissinControlAdmitCount      ,\r\n      admissionControlRejectCount     : admissionControlRejectCount    ,\r\n      admissionControlWaitingRequests : admissionControlWaitingRequests,\r\n      admissionControlWaitTime        : admissionControlWaitTime       ,\r\n      admissionControlEnqueueCount    : admissionControlEnqueueCount   ,\r\n      admissionControlDequeueCount    : admissionControlDequeueCount   ,\r\n      admissionControlTimeoutCount    : admissionControlTimeoutCount   ,\r\n    };\r\n\r\n    return {\r\n      'Host': loadHistoryInfoHost,\r\n      'Service': loadHistoryInfoIndexServer,\r\n      'SQL': loadHistoryInfoSQL,\r\n      'Row Store': loadHistoryInfoRowStore,\r\n      'Column Store': loadHistoryInfoColumnStore,\r\n      'Threads': loadHistoryInfoThreads,\r\n      'Persistence': loadHistoryInfoPersistence,\r\n      'Backup': loadHistoryInfoBackup,\r\n      'Synchronization Primitives': loadHistoryInfoSynchronizationPrimitives,\r\n      'Session Admission Control': loadHistoryInfoSessionAdmissionControl\r\n    };\r\n  }\r\n\r\n  /**\r\n   * get rgbcolor object via red, green, blue and alpha.\r\n   */\r\n  private static _getRgbColor(red: number, green: number, blue: number, alpha: number): ColorRgba {\r\n    return {red: red, green: green, blue: blue, alpha: alpha};\r\n  }\r\n\r\n  private static _getYScaleForItem(item: any, yScale: number): number {\r\n    return yScale > item[Item.yScale] ? (item[Item.unit] === Unit.PCT ? 100 : yScale) : item[Item.yScale];\r\n  }\r\n\r\n  private static _getMaxValueOfGroup(groupItems: any): number {\r\n    let max = 0;\r\n    if (groupItems) {\r\n      max = groupItems.reduce((maxValue, current) => {\r\n        return current.Max > maxValue ? current.Max : maxValue;\r\n      }, 0);\r\n    }\r\n    return max;\r\n  }\r\n\r\n  private _getLoadHistoryInfo(port: string): LoadHistoryInfo {\r\n    if (!this._loadHistoryInfos[port]) {\r\n      this._loadHistoryInfos[port] = UIService._generateLoadHistoryInfo();\r\n    }\r\n    return this._loadHistoryInfos[port];\r\n  }\r\n\r\n  private _getProcessingUnit(itemKey: string, port: string): UnitType {\r\n    const historyDetailItem: LoadHistoryInfoItem = this._getItemByKey(itemKey, port);\r\n    if (historyDetailItem) {\r\n      let unit = historyDetailItem.Unit;\r\n      if (!unit) {\r\n        unit = '';\r\n      }\r\n      return UIService._unitType[unit];\r\n    }\r\n    return UnitType.TypeEA; // default return value\r\n  }\r\n\r\n  private _setOverview (key: string, overview: LoadHistoryInfoItem, unit: UnitType, port: string) {\r\n    const historyDetailItem = this._getItemByKey(key, port);\r\n    if (historyDetailItem) {\r\n      historyDetailItem.Max = overview.Max >= 0 ? overview.Max : 0;\r\n      historyDetailItem.Average = overview.Average >= 0 ? overview.Average : 0;\r\n      // only TYPE_CONVERSION_MBSEC and TYPE_CONVERTION_SEC (eg: MB/s, req/s stmt/s...) need sum\r\n      historyDetailItem.Sum = isUnitTimeRelated(unit) ? (overview.Sum >= 0 ? overview.Sum : 0) : '-';\r\n      historyDetailItem.Last = overview.Last >= 0 ? overview.Last : 0;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg) for one row\r\n   */\r\n  private _convertUnitAndGenerateRowControlData(row: ChartContentDataItem[], key: string, unit: UnitType, port: string): Promise<void> {\r\n    return new Promise(resolve => {\r\n      if (row) {\r\n        const overview: LoadHistoryInfoItem = {Sum: 0, Max: 0, Average: 0, Last: 0};\r\n        const ignoredTailLineNum = getIgnoredLineNumFromTail();\r\n        let invalidCount = 0;\r\n        // convert unit and calculate the overview data, skip the first, and last three rows.\r\n        row.forEach((item, index, arrayData) => {\r\n          // skip ignored line(s) from tail\r\n          if (index <= row.length - ignoredTailLineNum - 1) {\r\n            if (arrayData[index].y >= 0) {\r\n              arrayData[index].y = getValueByUnit(item.y, unit);\r\n              overview.Sum += arrayData[index].y;\r\n              if (isUnitTimeRelated(unit)) {\r\n                if (index === 0) {\r\n                  // according to hana studio, for those time related column, the first value is set to 0\r\n                  arrayData[index].y = 0;\r\n                } else {\r\n                  // get value for unit like: MB/s  (value / seconds)\r\n                  const timeDiff = arrayData[index].x - arrayData[index - 1].x;\r\n                  arrayData[index].y = timeDiff !== 0 ? arrayData[index].y * 1000 / timeDiff : 0;\r\n                }\r\n              }\r\n              arrayData[index].y = getRoundedValue(arrayData[index].y);\r\n\r\n              if (arrayData[index].y > overview.Max) {\r\n                overview.Max = arrayData[index].y;\r\n              }\r\n            } else {\r\n              // set value to 0, for those points with value -1 or < 0\r\n              arrayData[index].y = 0;\r\n              // invalid count + 1, for calculating the average (not time relative)\r\n              invalidCount++;\r\n            }\r\n          }\r\n        });\r\n\r\n        if (row.length >= (ignoredTailLineNum + invalidCount)) {\r\n          if (isUnitTimeRelated(unit)) {\r\n            const timePeriod = row[row.length - ignoredTailLineNum - 1].x - row[0].x;\r\n            overview.Average = timePeriod !== 0 ? getRoundedValue(overview.Sum * 1000 / timePeriod) : 0;\r\n          } else {\r\n            const validItemCount = row.length - ignoredTailLineNum - invalidCount;\r\n            overview.Average = validItemCount > 0 ? getRoundedValue(overview.Sum / validItemCount) : 0;\r\n          }\r\n          overview.Last = row[row.length - ignoredTailLineNum - 1].y;\r\n          overview.Sum = getRoundedValue(overview.Sum);\r\n          overview.Max = getRoundedValue(overview.Max);\r\n\r\n          // remove those ignored lines\r\n          row.length = row.length - ignoredTailLineNum;\r\n        }\r\n        this._setOverview(key, overview, unit, port);\r\n      }\r\n      resolve();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Loop from all history items, put those history items which\r\n   * have the same yScaleGroup together, using yScaleGroup as key.\r\n   * eg: {__SCALE_GROUP_CPU:[item1, item2...], __SCALE_GROUP_UNKNOWN:[item3, item4...]}\r\n   */\r\n  private _getYScaleGroupWithHistoryItems(port: string): {} {\r\n    const yScaleGroup = {};\r\n    const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n\r\n    Object.keys(loadHistoryInfo).forEach(parentKey => {\r\n      Object.keys(loadHistoryInfo[parentKey]).forEach(childKey => {\r\n        const detailItem = loadHistoryInfo[parentKey][childKey];\r\n        const yScaleGroupKey = detailItem._YScaleGroup;\r\n        if (!yScaleGroup[yScaleGroupKey]) {\r\n          yScaleGroup[yScaleGroupKey] = [];\r\n        }\r\n        yScaleGroup[yScaleGroupKey].push(detailItem);\r\n      });\r\n    });\r\n    return yScaleGroup;\r\n  }\r\n\r\n  private _setYScaleOfGroup(groupItems: any, group: ScaleGroup) {\r\n    if (groupItems) {\r\n      if (group === ScaleGroup.Unknown) {\r\n        groupItems.forEach(item => item[Item.yScale] = UIService._getYScaleForItem(item, calculateYScale(item.Max)));\r\n      } else {\r\n        const yScale = calculateYScale(UIService._getMaxValueOfGroup(groupItems));\r\n        groupItems.forEach(item =>  item[Item.yScale] = UIService._getYScaleForItem(item, yScale));\r\n      }\r\n    }\r\n  }\r\n\r\n  private _getItemByKey(key: string, port: string): any {\r\n    const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n    for ( const itemKey of Object.keys(loadHistoryInfo)) {\r\n      if (key in loadHistoryInfo[itemKey]) {\r\n        return loadHistoryInfo[itemKey][key];\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * reset the load history info object, to prevent memory leak\r\n   */\r\n  public clearLoadHistoryInfos() {\r\n    this._loadHistoryInfos = {};\r\n  }\r\n\r\n  /**\r\n   * get all the data for the selection table\r\n   */\r\n  public getSelectionTableRows(headerKeys: string[], port: string, defaultDisplayItems: string[]): any[] {\r\n    const rows: any[] = [];\r\n    const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n\r\n    const defaultItems = defaultDisplayItems && defaultDisplayItems.length > 0 ? defaultDisplayItems : this._DEFAULT_DISPLAY_ITEMS;\r\n\r\n    Object.keys(loadHistoryInfo).forEach(keyParent => {\r\n      rows.push({KPI: keyParent, header: true});\r\n      const len = rows.length;\r\n      rows.push(...Object.keys(loadHistoryInfo[keyParent])\r\n        .filter(keyChild => headerKeys.includes(keyChild))\r\n        .map(keyChild => {\r\n          loadHistoryInfo[keyParent][keyChild].header = false;\r\n          loadHistoryInfo[keyParent][keyChild].checked = defaultItems.includes(keyChild);\r\n          return loadHistoryInfo[keyParent][keyChild];\r\n      }));\r\n      if (len === rows.length) {\r\n        // no sub items, remove the header\r\n        rows.pop();\r\n      }\r\n    });\r\n\r\n    return rows;\r\n  }\r\n\r\n  /**\r\n   * get all hidden columns. Those hidden columns = input hidden columns + default hidden columns\r\n   * @param hideMeasureColumns the array contains the columns list that need to be hidden.\r\n   */\r\n  public getHiddenColumns(hideMeasureColumns: string[]): string[] {\r\n    // only measure columns can be hidden\r\n    const hideColumns = hideMeasureColumns ? hideMeasureColumns.filter(column => this._MEASURE_COLUMNS.includes(column)) : [];\r\n    return hideColumns ? this._HIDED_COLUMNS.concat(hideColumns) : this._HIDED_COLUMNS;\r\n  }\r\n\r\n  /**\r\n   * get header information and format it to {headKey: key, headText: text}\r\n   */\r\n  public getHeader(keys: string[], port: string): ChartContentHeader[] {\r\n    return keys.map(key => {\r\n      const item = this._getItemByKey(key, port);\r\n      if (item != null && 'KPI' in item) {\r\n        return ({key: key, text: item.KPI});\r\n      } else {\r\n        console.warn(`${key} is not configured.`);\r\n        return null;\r\n      }\r\n    }).filter(key => key != null );\r\n  }\r\n\r\n  /**\r\n   * Get the selected items, which need to be displayed on the chart.\r\n   * @param headerKeys array that contains the keys of header\r\n   * @param port the relative port\r\n   * @param defaultDisplayItems the items list that will be displayed by default.\r\n   */\r\n  public getDisplayItems(headerKeys: string[], port: string, defaultDisplayItems: string[]): string[] {\r\n    const selectionTable = this.getSelectionTableRows(headerKeys, port, defaultDisplayItems);\r\n    return selectionTable.filter(row => row.checked).map(row => row.KPI);\r\n  }\r\n\r\n  /**\r\n   * Get the Y Scale by the keys and port\r\n   */\r\n  public getYScale(keys: string[], port: string): number[] {\r\n    const yScales = [];\r\n    if (keys) {\r\n      keys.forEach(key => {\r\n        yScales.push(this._getItemByKey(key, port)[Item.yScale]);\r\n      });\r\n    }\r\n    return yScales;\r\n  }\r\n\r\n  /**\r\n   * Generate Y Scale for the port\r\n   */\r\n  public generateYScale(port: string): void {\r\n    const yScaleGroup = this._getYScaleGroupWithHistoryItems(port);\r\n    UIService._YScaleGroupList.forEach(group => {\r\n      const historyItems = yScaleGroup[group];\r\n      if (historyItems) {\r\n        this._setYScaleOfGroup(historyItems, group);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg)\r\n   * @param data the nameserver history data\r\n   * @param header header list\r\n   * @param port selected port\r\n   */\r\n  public convertUnitAndGenerateControlData(data: ChartContentDataItem[][], header: string[], port: string): Promise<any> {\r\n    const promises = [];\r\n    if (data && header) {\r\n      data.forEach((row, index) => {\r\n        if (row) {\r\n          // get detail history item key, like indexserverCpu\r\n          const itemKey = header[index];\r\n          const unit = this._getProcessingUnit(itemKey, port);\r\n          promises.push(this._convertUnitAndGenerateRowControlData(row, itemKey, unit, port));\r\n        }\r\n      });\r\n    }\r\n    return Promise.all(promises);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n  Chart,\r\n  ChartConfiguration,\r\n  ChartDataset,\r\n  registerables,\r\n  TimeScale,\r\n  LinearScale,\r\n  CategoryScale,\r\n  PointElement,\r\n  LineElement,\r\n  Title,\r\n  Tooltip,\r\n  Legend,\r\n  Filler,\r\n  Decimation\r\n} from 'chart.js';\r\nimport 'chartjs-adapter-date-fns';\r\nimport zoomPlugin from 'chartjs-plugin-zoom';\r\nimport { getColorString, getNumberWithCommas, randomColor } from '../utils';\r\nimport { UIService } from './ui.service';\r\nimport { ChartContentDataItem, LegendColor, Item, Unit } from '../types';\r\n\r\n// Register Chart.js components and plugins\r\nChart.register(\r\n  ...registerables,\r\n  TimeScale,\r\n  LinearScale,\r\n  CategoryScale,\r\n  PointElement,\r\n  LineElement,\r\n  Title,\r\n  Tooltip,\r\n  Legend,\r\n  Filler,\r\n  Decimation,\r\n  zoomPlugin\r\n);\r\n\r\nconst MAX_POINTS_TO_RENDER = 100;\r\n\r\n@Injectable()\r\nexport class ChartService {\r\n  private _chart: Chart;\r\n\r\n  /**\r\n   * toggle the dataset status of the chart, synchronously\r\n   */\r\n  private static _toggleDataSet(dataSetIndex: number, chart: Chart, hidden: boolean): void {\r\n    // meta.hidden = false and dataset.hidden = false --> show\r\n    // meta.hidden = false and dataset.hidden = true --> show\r\n    // meta.hidden = null and dataset.hidden = false -> show\r\n    // meta.hidden = null and dataset.hidden = true -> hide\r\n    // in the first case (false, false), needs to click legend twice to\r\n    // hide the dataset, because the first click only set meta.hidden = null)\r\n    if (dataSetIndex != null && chart != null) {\r\n      const meta = chart.getDatasetMeta(dataSetIndex);\r\n      if (meta) {\r\n        if (!hidden) {\r\n          // display the item, if dataset hidden is false, set hidden of meta to null,\r\n          meta.hidden = !chart.data.datasets[dataSetIndex].hidden ? null : hidden;\r\n        } else {\r\n          meta.hidden = hidden;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  \r\n  private static _restoreDataSetStatus(chart: Chart, datasetIndex: number, status: {metaStatus: boolean, datasetStatus: boolean}): void {\r\n    if (chart && chart.data && chart.data.datasets && chart.getDatasetMeta(datasetIndex) && status) {\r\n      chart.data.datasets[datasetIndex].hidden = status.datasetStatus;\r\n      chart.getDatasetMeta(datasetIndex).hidden = status.metaStatus;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * initialize/clear the configuration for the chart\r\n   */\r\n  private static _initConfig(chart: any): void {\r\n    // init data sets\r\n    if (chart.data?.datasets) {\r\n      chart.data.datasets.length = 0;\r\n      chart.data.datasets = void 0;\r\n      chart.data = void 0;\r\n    }\r\n    // init options\r\n    if (chart.options?.scales) {\r\n      chart.options.scales = void 0;\r\n      chart.options = void 0;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Generate DataSets by the data and header information\r\n   */\r\n  private static _generateDataSets(data: ChartContentDataItem[][], header: string[], headerKey: string[], defaultItems: string[], yScale: number[]): ChartDataset<'line'>[] {\r\n    const alpha = 0.5;\r\n    const colors: LegendColor = UIService.getColors(alpha);\r\n    return data.map((item, i) => {\r\n      const color = colors[headerKey[i]] ? getColorString(colors[headerKey[i]]) : randomColor(alpha);\r\n      // only cap 100 which is percentage\r\n      if (yScale[i] === 100) {\r\n        // to save some memory, change the value directly\r\n        //   cappedData = item.map(dp =>\r\n        //     dp.y > 100 ? { ...dp, y: 100, originalY: dp.y } : dp\r\n        //   );\r\n        // }\r\n        for(let j = 0, len = item.length; j < len; j++) {\r\n          const dp: any = item[j];\r\n          if (dp.y > 100) {\r\n            dp.originalY = dp.y;\r\n            dp.y = 100;\r\n          }\r\n        }\r\n      }\r\n\r\n      return {\r\n        borderColor: color,\r\n        backgroundColor: color,\r\n        borderWidth: 1,\r\n        spanGaps: false,\r\n        label: header[i],\r\n        data: item,\r\n        fill: false,\r\n        yAxisID: `y-axis-${i}`,\r\n        hidden: !defaultItems.includes(header[i]),\r\n        pointRadius: 0,\r\n        pointHitRadius: 5,\r\n        pointHoverRadius: 5,\r\n        // Enable smooth curves for more natural line appearance\r\n        tension: 0.2,\r\n        // Enable decimation for each dataset\r\n        parsing: false,\r\n        normalized: true\r\n      };\r\n    });\r\n  }\r\n\r\n  private static _generateScales(timeArray: number[], data: ChartContentDataItem[][], yScaleArray: number[]): any {\r\n    const scales: any = {\r\n      x: {\r\n        type: 'time',\r\n        time: {\r\n          displayFormats: {\r\n            'millisecond': 'MMMdd HH:mm:ss',\r\n            'second': 'MMMdd HH:mm:ss',\r\n            'minute': 'MMMdd HH:mm',\r\n            'hour': 'MMMdd HH',\r\n            'day': 'MMMdd',\r\n            'week': 'MMMdd',\r\n            'month': 'MMM yyyy',\r\n            'quarter': 'MMM yyyy',\r\n            'year': 'MMM yyyy',\r\n          },\r\n          tooltipFormat: 'MMM dd, yyyy HH:mm:ss'\r\n        },\r\n        min: timeArray[0],\r\n        max: timeArray[timeArray.length - 1],\r\n        ticks: {\r\n          source: 'auto',\r\n          maxRotation: 0,\r\n          autoSkip: true,\r\n          autoSkipPadding: 40, // label space\r\n        },\r\n        reverse: false\r\n      }\r\n    };\r\n\r\n    // Add Y axes\r\n    data.forEach((item, i) => {\r\n      scales[`y-axis-${i}`] = {\r\n        type: 'linear',\r\n        display: false,\r\n        position: 'left',\r\n        grid: {\r\n          drawOnChartArea: i === 0, // only show grid for first axis\r\n        },\r\n        min: 0,\r\n        max: yScaleArray[i]\r\n      };\r\n    });\r\n\r\n    return scales;\r\n  }\r\n\r\n  /**\r\n   * generate configuration for chart\r\n   */\r\n  private static _generateChartConfig(time: number[],\r\n                                      data: ChartContentDataItem[][],\r\n                                      yScale: number[],\r\n                                      header: string[],\r\n                                      headerKey: string[],\r\n                                      selection: SelectionModel<any>,\r\n                                      tableSource: any,\r\n                                      title: string,\r\n                                      defaultItems: string[],\r\n                                      zoomCallback: any): ChartConfiguration<'line'> {\r\n    return {\r\n      type: 'line',\r\n      data: {\r\n        datasets: ChartService._generateDataSets(data, header, headerKey, defaultItems, yScale)\r\n      },\r\n      options: {\r\n        layout: {\r\n          padding: {\r\n            right: 25 // Add padding to the right side of the chart\r\n          }\r\n        },\r\n        interaction: {\r\n          intersect: true, // true means must actually hover over a point\r\n          axis: 'xy',\r\n          mode: 'index'    // when intersecting, show all datasets at the same index/x position\r\n        },\r\n        responsive: true,\r\n        animation: false, // must disable it otherwise zoomin will hang\r\n        onHover: (event: any, elements: any) => {\r\n          const target = event.native?.target || event.target;\r\n          if (target) {\r\n            (target as HTMLElement).style.cursor = elements?.length > 0 ? 'pointer' : 'default';\r\n          }\r\n        },\r\n        elements: {point: { radius: 0, hitRadius: 5, hoverRadius: 5 }}, // set radius to 0 not to display point\r\n        parsing: false,\r\n        normalized: true,\r\n        datasets: {line: { pointRadius: 0, pointHitRadius: 5, pointHoverRadius: 5}},\r\n        plugins: {\r\n          legend: {\r\n            position: 'bottom',\r\n            onHover: (event: any, legendItem: any) => {\r\n              const target = event.native?.target || event.target;\r\n              if (target) {\r\n                (target as HTMLElement).style.cursor = 'pointer';\r\n              }\r\n            },\r\n            labels: {\r\n              filter: (legendItem) => selection.isSelected(tableSource.find(row => legendItem.text === row.KPI))\r\n            }\r\n          },\r\n          title: {\r\n            display: true,\r\n            text: title\r\n          },\r\n          tooltip: {\r\n            mode: 'nearest',\r\n            intersect: true, // true means only show tooltip for the closest point\r\n            callbacks: {\r\n              label: function(context) {\r\n                // format numbers with commas and add unit information\r\n                const label = context.dataset.label || '';\r\n                if (label) {\r\n                  // get unit (eg: MB, GB, MB/s, % and so on)\r\n                  const rowItem = tableSource.find(controlTableRow => label === controlTableRow.KPI) || '';\r\n                  const unit = rowItem[Item.unit] && rowItem[Item.unit] !== Unit.PCT ? ` ${rowItem[Item.unit]}` : rowItem[Item.unit] || '';\r\n                  // Use original value if available, otherwise use displayed value\r\n                  const valueToShow = (context.raw as any)?.originalY ?? context.parsed.y;\r\n                  return `${label}: ${getNumberWithCommas(valueToShow)}${unit}`;\r\n                } else {\r\n                  // Use original value if available, otherwise use displayed value\r\n                  const valueToShow = (context.raw as any)?.originalY ?? context.parsed.y;\r\n                  return getNumberWithCommas(valueToShow);\r\n                }\r\n              }\r\n            }\r\n          },\r\n          // downsampling\r\n          decimation: {\r\n            enabled: true,\r\n            algorithm: 'lttb', // Largest-Triangle-Three-Buckets algorithm\r\n            samples: 600, // Increased samples for better quality\r\n            threshold: 1 // increase it may hang the ui due to swith of using/not using downsampling, disable it (set it to 0), will slowdown average zoom in.\r\n          },\r\n          zoom: {\r\n            limits: {\r\n              x: {\r\n                min: 'original',\r\n                max: 'original',\r\n                //minRange: 180000  // 3 min the min range that can be zoomed\r\n              }\r\n            },\r\n            pan: {\r\n              enabled: true,\r\n              mode: 'x',\r\n              modifierKey: 'ctrl'\r\n            },\r\n            zoom: {\r\n              // wheel: {\r\n              //   enabled: true,\r\n              //   speed: 0.02 \r\n              // },\r\n              // pinch: {\r\n              //   enabled: true\r\n              // },\r\n              drag: {\r\n                enabled: true,\r\n                threshold: 10,\r\n                drawTime: 'beforeDraw'\r\n              },\r\n              mode: 'x',\r\n              onZoom: zoomCallback,\r\n              onZoomComplete: (context => {\r\n                const chart = context?.chart;\r\n                if (!chart?.data?.datasets) {\r\n                  return;\r\n                }\r\n                // make point visible when current points are less than MAX_POINTS_TO_RENDER\r\n                const pointRadiusChangeFlag = chart.data.datasets.some(dataset => dataset.data.length <= MAX_POINTS_TO_RENDER);\r\n                const pointRadius = pointRadiusChangeFlag ? 2 : 0;\r\n                chart.data.datasets.forEach((dataset: any) => {\r\n                  dataset.pointRadius = pointRadius;\r\n                });\r\n\r\n                if (chart.options?.elements?.point) {\r\n                  chart.options.elements.point.radius = pointRadius;\r\n                }\r\n                chart.update();\r\n              })\r\n            }\r\n          }\r\n        },\r\n        scales: ChartService._generateScales(time, data, yScale)\r\n      }\r\n    };\r\n  }\r\n\r\n  private _getDataSetIndexByLabel(label: string, chart: Chart): number {\r\n    if (chart.data && chart.data.datasets) {\r\n      return chart.data.datasets.findIndex(dataset => dataset.label === label);\r\n    }\r\n    return -1;\r\n  }\r\n\r\n  /**\r\n   * WORKAROUND: Setup mousemove event listener to fix Chart.js tooltip issue\r\n   * Issue: https://github.com/chartjs/Chart.js/issues/11972\r\n   * TODO: Remove this entire method when the Chart.js bug is fixed\r\n   */\r\n  private _setupTooltipWorkaround(chart: Chart): void {\r\n    const canvas = chart.canvas;\r\n    const mouseMoveHandler = (event: MouseEvent) => {\r\n      const rect = canvas.getBoundingClientRect();\r\n      const x = event.clientX - rect.left;\r\n      const y = event.clientY - rect.top;\r\n      \r\n      // Check if mouse is within chart area\r\n      const chartArea = chart.chartArea;\r\n      if (chartArea) {\r\n        const isInChartArea = x >= chartArea.left && x <= chartArea.right && \r\n                             y <= chartArea.bottom && y >= chartArea.top;\r\n        \r\n        // Get legend area (legend is positioned at bottom)\r\n        const legendArea = chart.legend;\r\n        let isInLegendArea = false;\r\n        if (legendArea && (legendArea as any).legendHitBoxes) {\r\n          isInLegendArea = (legendArea as any).legendHitBoxes.some((hitBox: any) => \r\n            x >= hitBox.left && x <= hitBox.left + hitBox.width &&\r\n            y >= hitBox.top && y <= hitBox.top + hitBox.height\r\n          );\r\n        }\r\n        \r\n        if (!isInChartArea && !isInLegendArea) {\r\n          // Mouse is in axis area (but not legend), force hide tooltip and active points\r\n          if (chart.tooltip) {\r\n            chart.tooltip.setActiveElements([], {x: 0, y: 0});\r\n          }\r\n          // Clear active elements to hide hover points\r\n          chart.setActiveElements([]);\r\n          chart.update('none');\r\n          canvas.style.cursor = 'default';\r\n        }\r\n      }\r\n    };\r\n    \r\n    canvas.addEventListener('mousemove', mouseMoveHandler);\r\n    \r\n    // Store the handler for cleanup\r\n    (chart as any)._mouseMoveHandler = mouseMoveHandler;\r\n  }\r\n\r\n  /**\r\n   * WORKAROUND: Clean up mousemove event listener for Chart.js tooltip issue\r\n   * Issue: https://github.com/chartjs/Chart.js/issues/11972\r\n   * TODO: Remove this entire method when the Chart.js bug is fixed\r\n   */\r\n  private _cleanupTooltipWorkaround(chart: Chart): void {\r\n    const canvas = chart.canvas;\r\n    const mouseMoveHandler = (chart as any)._mouseMoveHandler;\r\n    if (canvas && mouseMoveHandler) {\r\n      canvas.removeEventListener('mousemove', mouseMoveHandler);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * destroy the chart, release the resource of the chart\r\n   */\r\n  private _destroyChart(chart: Chart): Promise<void> {\r\n    return new Promise((resolve) => {\r\n      if (chart) {\r\n        // WORKAROUND: Clean up tooltip workaround - TODO: Remove when Chart.js bug is fixed\r\n        this._cleanupTooltipWorkaround(chart);\r\n        chart.destroy();\r\n      }\r\n      resolve();\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * update/refresh the chart\r\n   */\r\n  private _updateChart(chart: Chart): Promise<void> {\r\n    return new Promise((resolve, reject) => {\r\n      if (chart) {\r\n        chart.update();\r\n        resolve();\r\n      } else {\r\n        reject('Updating chart failed, error: the chart object is empty.');\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * reset zoom of the chart\r\n   */\r\n  private _resetZoom(chart: any): Promise<{metaStatus: boolean, datasetStatus: boolean}[]> {\r\n    return new Promise((resolve, reject) => {\r\n      if (chart) {\r\n        const datasetStatusBeforeReset = [];\r\n        if (chart.data && chart.data.datasets) {\r\n          chart.data.datasets.forEach((dataset, index) => {\r\n            const meta = chart.getDatasetMeta(index);\r\n            if (meta) {\r\n              datasetStatusBeforeReset[index] = {metaStatus: meta.hidden, datasetStatus: dataset.hidden};\r\n            } else {\r\n              reject(`Internal error, can not find the meta ${index}.`);\r\n            }\r\n          });\r\n        }\r\n        // Use the zoom plugin's resetZoom method\r\n        if (chart.resetZoom) {\r\n          chart.resetZoom();\r\n        }\r\n        resolve(datasetStatusBeforeReset);\r\n      } else {\r\n        reject('Resetting chart failed, error: the chart object is empty.');\r\n      }\r\n    });\r\n  }\r\n  \r\n  /**\r\n   * Reset Chart to initial status\r\n   * If legend is already selected/unselected from the list, it wouldn't be restored.\r\n   * @param dataSourceData the data sets of the chart\r\n   * @param selection selection status list\r\n   */\r\n  public resetChart(dataSourceData: any, selection: SelectionModel<any>): Promise <any> {\r\n    return this._resetZoom(this._chart).then((datasetStatusBeforeZoom) => {\r\n      // reset the data set by the selection status\r\n      dataSourceData.filter(row => !row.header).forEach(row => {\r\n        const index = this._getDataSetIndexByLabel(row.KPI, this._chart);\r\n        if (!selection.isSelected(row)) {\r\n          ChartService._toggleDataSet(index, this._chart, true);\r\n        } else {\r\n          ChartService._restoreDataSetStatus(this._chart, index, datasetStatusBeforeZoom[index]);\r\n        }\r\n      });\r\n      return this._updateChart(this._chart);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * destroy the chart and reinitialize the configuration of the chart\r\n   */\r\n  public destroyChart(): Promise<any> {\r\n    return this._destroyChart(this._chart).then(() => {\r\n      if (this._chart) {\r\n        ChartService._initConfig(this._chart);\r\n        this._chart = void 0;\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * generate configuration for chart and create the chart object.\r\n   */\r\n  public buildChart(time: number[],\r\n                    data: ChartContentDataItem[][],\r\n                    yScale: number[],\r\n                    header: string[],\r\n                    headerKey: string[],\r\n                    selection: SelectionModel<any>,\r\n                    tableSource: any,\r\n                    title: string,\r\n                    defaultItems: string[],\r\n                    zoomCB): Promise<void> {\r\n    return new Promise((resolve, reject) => {\r\n      const ctx = (<HTMLCanvasElement> document.getElementById('chartNameServerHistory'))?.getContext('2d');\r\n      if (ctx) {\r\n        this._chart = new Chart(ctx, ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB));\r\n        // WORKAROUND: Setup tooltip workaround - TODO: Remove when Chart.js bug is fixed\r\n        this._setupTooltipWorkaround(this._chart);\r\n        resolve();\r\n      } else {\r\n        reject('Can not find the canvas.');\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * show/hide the relative data set\r\n   */\r\n  public toggleDataInChart(label: string, hide: boolean): Promise<any> {\r\n    return new Promise((resolve) => {\r\n      ChartService._toggleDataSet(this._getDataSetIndexByLabel(label, this._chart), this._chart, hide);\r\n      resolve(this._updateChart(this._chart));\r\n    });\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n  calculateValue,\r\n  calculateValue4Time,\r\n  getDefaultPort,\r\n  getPort,\r\n  getTimeFromTimeZone,\r\n  isSamePort,\r\n  isValidPort,\r\n  printProcessedTime,\r\n  validateData\r\n} from '../utils';\r\nimport {parse} from 'papaparse';\r\nimport {Abort, ChartContent, ChartContentData, ChartContentTime} from '../types';\r\n\r\n/**\r\n * prevent browser from crashing, set the max rows limitation.\r\n * This could be overwritten by the input:maxRowsLimitation of the component.\r\n */\r\nconst _DEFAULT_MAX_ROWS_IN_MEMORY = 100000;\r\n\r\n@Injectable()\r\nexport class FileService {\r\n  /**\r\n   * prevent browser from crashing, set the max rows limitation.\r\n   * @param limitation if this parameter is not null, the default value will be overwritten by this one.\r\n   */\r\n  private static _getMaxRowsLimitation(limitation: any = null) {\r\n    if (limitation == null || isNaN(limitation) || limitation.length === 0) {\r\n      return _DEFAULT_MAX_ROWS_IN_MEMORY;\r\n    }\r\n    return Number(limitation);\r\n  }\r\n\r\n  /**\r\n   * get all available ports from data\r\n   */\r\n  private static _getPorts(data: string[][], firstChunk: boolean, ports: string[]) {\r\n    let line = 0;\r\n    if (firstChunk) {\r\n      // start from line 3\r\n      line = 2;\r\n    }\r\n\r\n    for (; line < data.length; line++) {\r\n      const dataItem = data[line][1];\r\n      if (dataItem != null && dataItem.length > 0) {\r\n        if (isValidPort(dataItem) && ports.indexOf(dataItem) === -1) {\r\n          ports.push(dataItem);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * get the time column from the analyzed data\r\n   * @param data the analyzed data\r\n   * @param firstChunk whether it's first chunk or not\r\n   * @param startTime selected starting time. It's millisecond, need to be converted second.\r\n   * @param endTime selected ending time. It's millisecond, need to be converted second.\r\n   * @param lastProcessedTime last processed time form last chunk\r\n   * @param time time object which contains the time data for all ports\r\n   * @param selectedPort if the selected port is empty (did not select any port), all ports info are needed\r\n   * @param isMDC flag for MDC system\r\n   * @param timezone selected timezone\r\n   * @param maxRowsLimitation prevent browser from crashing, set the max rows limitation.\r\n   * This comes from the input: maxRowsLimitation of the component.\r\n   */\r\n  private static _getTimeColumn(data: string[][],\r\n                                firstChunk: boolean,\r\n                                startTime: number,\r\n                                endTime: number,\r\n                                lastProcessedTime: number,\r\n                                time: ChartContentTime,\r\n                                selectedPort: string,\r\n                                isMDC: boolean,\r\n                                timezone: string,\r\n                                maxRowsLimitation: any) {\r\n    // convert millisecond to second for startTime and endTime.\r\n    startTime = startTime / 1000;\r\n    endTime = endTime / 1000;\r\n    const timeColumn = 2;\r\n    let startLine = 0;\r\n    let iStart = -1;\r\n    let iEnd = -1;\r\n\r\n    let curTime = lastProcessedTime;\r\n    let lastProcessedTimeReturn;\r\n    let totalNum = 0;\r\n    let mdcFlag = isMDC;\r\n    const defaultPort = getDefaultPort();\r\n    const maxRowNum = this._getMaxRowsLimitation(maxRowsLimitation);\r\n\r\n    if (firstChunk) {\r\n      if (curTime >= startTime && curTime <= endTime) {\r\n        iStart = 1; // start from first line\r\n\r\n        /** Modified at 2018/10/10,\r\n         * in some case, eg: the nameserver history trace gets modified by Kook, Jin Young's python script,\r\n         * the port show in the first line as well, and does not like the non-mdc system, this kind of file has\r\n         * one port in it. The history for non-mdc system doesn't have port info in the port column.*/\r\n\r\n          // get port for the line 1.\r\n        const firstLinePort = getPort(data[1][1]);\r\n        // init time array for the first line.\r\n        if (!selectedPort || selectedPort.length === 0 || isSamePort(firstLinePort, selectedPort, mdcFlag)) {\r\n          // does not select any port or\r\n          // it's non-mdc (mdcFlag is false at the beginning) system and the selected port is the first line port\r\n          time[firstLinePort] = [];\r\n          time[firstLinePort][0] = curTime * 1000;\r\n        }\r\n      }\r\n      lastProcessedTimeReturn = curTime;\r\n      startLine = 2;\r\n    }\r\n\r\n    // get current total number\r\n    Object.keys(time).forEach(key => {\r\n      if (time[key]) {\r\n        totalNum += time[key].length;\r\n      }\r\n    });\r\n\r\n    if (curTime == null) {\r\n      console.error('getTimeColumn', 'Can not get the time from the file, internal error!');\r\n      return {indexStart: null, indexEnd: null, lastProcessedTime: null, isMDC: null};\r\n    }\r\n\r\n    for (let i = startLine; i < data.length; i++) {\r\n      // sometime the last line is empty, need to be skipped.\r\n      if (data[i] == null || data[i].length === 0 || (data[i].length === 1 && data[i][0].length === 0)) {\r\n        continue;\r\n      }\r\n\r\n      // get port number and initialize the relative port array in time\r\n      const port = getPort(data[i][1]); // data[i][1] == null || data[i][1].length == 0 ? __DEFAULT_PORT : data[i][1];\r\n      if (!(port in time)) {\r\n        // add undefined port to time, then we can find all ports in time\r\n        time[port] = void 0;\r\n      }\r\n      if (time[port] == null && isSamePort(port, selectedPort, mdcFlag)) {\r\n        time[port] = [];\r\n        // if other ports exists in this file, default port will be set to undefined.\r\n        if (!mdcFlag && port !== defaultPort && time[defaultPort]) {\r\n          // update the total num;\r\n          totalNum -= time[defaultPort].length;\r\n          time[defaultPort].length = 0;\r\n          time[defaultPort] = void 0;\r\n          mdcFlag = true;\r\n        }\r\n      }\r\n      curTime = calculateValue4Time(curTime, data[i][timeColumn], timezone);\r\n      if (curTime > endTime) {\r\n        if (iEnd < 0) {\r\n          iEnd = i - 1;\r\n        }\r\n        break;\r\n      }\r\n      if (iStart >= 0) {\r\n        if (time[port]) {\r\n          // not null means it's the selected port\r\n          time[port][time[port].length] = curTime * 1000;\r\n          totalNum ++;\r\n        }\r\n      } else {\r\n        if (curTime >= startTime && curTime <= endTime) {\r\n          if (time[port]) {\r\n            // only selected port counted in\r\n            if (iStart < 0) {\r\n              iStart = i;\r\n            }\r\n            time[port][time[port].length] = curTime * 1000;\r\n            totalNum ++;\r\n          }\r\n        }\r\n      }\r\n      // last processed time need to be recorded anyway\r\n      lastProcessedTimeReturn = curTime;\r\n\r\n      if (totalNum >= maxRowNum) {\r\n        iEnd = i;\r\n        break;\r\n      }\r\n    }\r\n    return {indexStart: iStart, indexEnd: iEnd, lastProcessedTime: lastProcessedTimeReturn, isMDC: mdcFlag};\r\n  }\r\n\r\n  /**\r\n   * Get data for all columns\r\n   * @param columnNum the total number of columns. For mdc system,\r\n   *                  the length of each row is different. Host relative data does not exist in tenant line.\r\n   *                  Needs to use column number from the first line.\r\n   * @param data      data parsed by papa\r\n   * @param firstChunk the flag which identifies whether it's the first chunk or not.\r\n   * @param time\r\n   * @param indexStart\r\n   * @param indexEnd\r\n   * @param lastProcessedLine\r\n   * @param resultData   the result data after analyzed\r\n   * @param selectedPort\r\n   * @param isMDC\r\n   */\r\n  private static _getDataColumns(columnNum: number,\r\n                                 data: string[][],\r\n                                 firstChunk: boolean,\r\n                                 time: ChartContentTime,\r\n                                 indexStart: number,\r\n                                 indexEnd: number,\r\n                                 lastProcessedLine: number[],\r\n                                 resultData: ChartContentData,\r\n                                 selectedPort: string,\r\n                                 isMDC: boolean) {\r\n    let startLine = 0;\r\n    // for mdc system, the length is not correct (host relative data only exists in the \"empty\" port line).\r\n    // Needs to use header from the first line.\r\n    // const columnNum = data[0].length;\r\n\r\n    if (firstChunk) {\r\n      /**\r\n       * Modified at 2018/10/10,\r\n       * in some case, eg: the nameserver history trace gets modified by Kook, Jin Young's python script,\r\n       * the port show in the first line as well, and does not like the non-mdc system, this kind of file has\r\n       * one port in it. The history for non-mdc system doesn't have port info in the port column.\r\n       */\r\n\r\n      // get port for the line 1.\r\n      const firstLinePort = getPort(data[1][1]);\r\n      // Initialize data column with default 'DEFAULT' port if it's not MDC system. MDC system, 'DEFAULT' gets ignored\r\n      if (!isMDC && time[firstLinePort]) {\r\n        resultData[firstLinePort] = [];\r\n        // removed below logic, because first line is the real number, do not need to do the convert.\r\n        // curLine = data[1].slice(3).map(Number);\r\n        for (let j = 3; j < columnNum; j++) {\r\n          const index = j - 3;\r\n\r\n          // initialize data array for all columns of the default '0000' port\r\n          resultData[firstLinePort][index] = [];\r\n          // get the first line data of the column if it's included\r\n          if (indexStart === 1) {\r\n            resultData[firstLinePort][index][0] = {x: time[firstLinePort][0], y: lastProcessedLine[index]};\r\n          }\r\n        }\r\n      }\r\n      startLine = 2;\r\n    }\r\n\r\n    for (let j = 3; j < columnNum; j++) {\r\n      const index = j - 3;\r\n      for (let i = startLine; i < data.length; i++) {\r\n        // sometime the last line is empty, need to be skipped.\r\n        if (data[i] == null || data[i].length === 0 || (data[i].length === 1 && data[i][0].length === 0)) {\r\n          continue;\r\n        }\r\n\r\n        // get port number and initialize the relative port array in data\r\n        const port = getPort(data[i][1]);\r\n        if (resultData[port] == null && isSamePort(port, selectedPort, isMDC)) {\r\n          resultData[port] = [];\r\n        }\r\n        if (resultData[port] && resultData[port][index] == null) {\r\n          resultData[port][index] = [];\r\n        }\r\n\r\n        lastProcessedLine[index] = calculateValue(lastProcessedLine[index], data[i][j]);\r\n        if (i >= indexStart && (i <= indexEnd || indexEnd < 0) && indexStart >= 0) {\r\n          if (resultData[port]) {\r\n            const length = resultData[port][index].length;\r\n            resultData[port][index][length] = {x: time[port][length], y: lastProcessedLine[index]};\r\n          }\r\n        } else if (indexEnd > 0 && i > indexEnd) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get Chart data from provided file.\r\n   * @param file the nameserver history file\r\n   * @param startTime\r\n   * @param endTime\r\n   * @param port\r\n   * @param timezone\r\n   * @param maxRowsLimitation prevent browser from crashing, set the max rows limitation.\r\n   * @param progress call back function for updating progress\r\n   */\r\n  public getChartContentFromFile(file: File,\r\n                                 startTime: number,\r\n                                 endTime: number,\r\n                                 port: string,\r\n                                 timezone: string,\r\n                                 maxRowsLimitation: any,\r\n                                 progress: any): Promise<ChartContent> {\r\n    // load done, beginning parsing\r\n    const beginTime = new Date();\r\n    let firstChunk = true;\r\n    // save last processed data just for the later calculation\r\n    let lastProcessedData;\r\n    // save last processed time just for the later calculation\r\n    let lastProcessedTime;\r\n    // save last processed cursor position for progress calculation.\r\n    // let lastProcessedCursor = 0;\r\n    let indexStart = -1, indexEnd = -1;\r\n    const time: ChartContentTime = {};\r\n    const data: ChartContentData = {};\r\n    let header;\r\n    let host;\r\n    let isMDC = false;\r\n    let columnNum;\r\n    let abortType: Abort;\r\n\r\n    const rejectAndAbort = (reject, parser) => {\r\n      if (progress) {\r\n        progress(100);\r\n      }\r\n      reject(`${file.name} is empty or the format is not correct.`);\r\n      parser.abort();\r\n    };\r\n    return new Promise((resolve, reject) => {\r\n      parse(file, {\r\n        chunk: (results, parser) => {\r\n          // the progress increment of this step\r\n          // let analyzeStepProgress = (results.meta.cursor - lastProcessedCursor) / file.size * 100;\r\n          printProcessedTime(beginTime, 'step1');\r\n          if (indexEnd >= 0) {\r\n            // already finished, quite.\r\n            return;\r\n          } else {\r\n            // reset start point\r\n            indexStart = -1;\r\n          }\r\n\r\n          // get time column\r\n          if (firstChunk) {\r\n            if (!validateData(results.data)) {\r\n              return rejectAndAbort(reject, parser);\r\n            }\r\n\r\n            // initialize the header\r\n            header = results.data[0].slice(3);\r\n            // get column number\r\n            columnNum = results.data[0].length;\r\n            // get host name\r\n            host = results.data[1][0];\r\n            // get the first line time info from first line, it is a real number, do not need to do the convert with \">,<\".\r\n            lastProcessedTime = getTimeFromTimeZone(parseFloat(results.data[1][2]), timezone);\r\n            // get the first line data info from first line, it is a real number, do not need to do the convert with \">,<\".\r\n            lastProcessedData = results.data[1].slice(3).map(Number);\r\n          }\r\n\r\n          printProcessedTime(beginTime, 'step2');\r\n\r\n          if (!lastProcessedData) {\r\n            return rejectAndAbort(reject, parser);\r\n          }\r\n\r\n          // get time column\r\n          ({indexStart, indexEnd, lastProcessedTime, isMDC} = FileService._getTimeColumn(\r\n            results.data, firstChunk, startTime, endTime, lastProcessedTime, time, port, isMDC, timezone, maxRowsLimitation));\r\n          printProcessedTime(beginTime, 'step3');\r\n\r\n          if (indexStart == null && indexEnd == null && lastProcessedTime == null && isMDC == null) {\r\n            return rejectAndAbort(reject, parser);\r\n          }\r\n\r\n          // get all other data columns\r\n          FileService._getDataColumns(\r\n            columnNum, results.data, firstChunk, time, indexStart, indexEnd, lastProcessedData, data, port, isMDC);\r\n\r\n          if (firstChunk) {\r\n            firstChunk = false;\r\n          }\r\n\r\n          printProcessedTime(beginTime, 'step4');\r\n\r\n          if (indexEnd >= 0) {\r\n            // do not need to process the left parts, manually trigger complete\r\n            const processedLines = Object.keys(time).reduce((total, curKey) => time[curKey] ? total + time[curKey].length : total, 0);\r\n            if (processedLines >= FileService._getMaxRowsLimitation(maxRowsLimitation)) {\r\n              abortType = Abort.maxLineNumReached;\r\n            } else {\r\n              abortType = Abort.maxTimeRangeReached;\r\n            }\r\n\r\n            if (progress) {\r\n              progress(100);\r\n            }\r\n            parser.abort();\r\n            return;\r\n          } else {\r\n            // the overall progress if this step is finished\r\n            if (progress) {\r\n              progress(Math.round(results.meta.cursor / file.size * 100));\r\n            }\r\n            // lastProcessedCursor = results.meta.cursor;\r\n          }\r\n        },\r\n        complete: () => {\r\n          printProcessedTime(beginTime, 'step_complete');\r\n          resolve ({header: header, host: host, time: time, data: data, aborted: abortType});\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Get all ports from the name server history file\r\n   * @param file the name server history file\r\n   * @param progress call back for updating the progress\r\n   */\r\n  public getPortsFromFile(file: File, progress: any): Promise<string[]> {\r\n    const beginTime = new Date();\r\n    let firstChunk = true;\r\n    const ports = [];\r\n    const defaultPort = getDefaultPort();\r\n    return new Promise((resolve, reject) => {\r\n      parse(file, {\r\n        chunk: (results, parser) => {\r\n          // get time column\r\n          if (firstChunk) {\r\n            if (!validateData(results.data)) {\r\n              if (progress) {\r\n                progress(100);\r\n              }\r\n              reject(`${file.name} is empty or the format is not correct.`);\r\n              parser.abort();\r\n              return;\r\n            }\r\n          }\r\n          printProcessedTime(beginTime, 'port.step1');\r\n          FileService._getPorts(results.data, firstChunk, ports);\r\n          if (firstChunk) {\r\n            firstChunk = false;\r\n          }\r\n          if (progress) {\r\n            progress(Math.round(results.meta.cursor / file.size * 100));\r\n          }\r\n        },\r\n        complete: () => {\r\n          // parsing done\r\n          printProcessedTime(beginTime, 'step_complete');\r\n          if (ports.length === 0) {\r\n            ports[0] = defaultPort;\r\n          }\r\n          resolve (ports);\r\n        }\r\n      });\r\n    });\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'file-drop-input',\r\n  template: `\r\n    <div class=\"file-drop-input\" [class.file-drop-dropping]=\"droppingFlag\" (drop)=\"onDropFiles($event)\"\r\n         (dragover)=\"onDragOver($event)\" (dragleave)=\"onDragLeave($event)\">\r\n      <div class=\"drop-content\">\r\n        <label class=\"input-button\">\r\n          <input type=\"file\" (change)=\"browseFiles($event)\" accept=\".trc\"/> {{inputAreaText}}&nbsp;\r\n        </label>{{dropAreaText}}\r\n      </div>\r\n    </div>\r\n  `,\r\n  styleUrls: ['./file-drop-input.component.scss']\r\n})\r\n\r\nexport class FileDropInputComponent {\r\n\r\n  @Input()\r\n  dropAreaText = '';\r\n  @Input()\r\n  inputAreaText = '';\r\n  @Output()\r\n  public fileDrop: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output()\r\n  public fileInput: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  droppingFlag = false;\r\n\r\n  private static _stopAndPrevent(event) {\r\n    event.stopPropagation(); // Stops some browsers from redirecting.\r\n    event.preventDefault();  // Stops some browsers' default action, like open the file directly\r\n  }\r\n\r\n  public browseFiles(event: Event): void {\r\n    this.fileInput.emit(event);\r\n  }\r\n\r\n  public onDragOver(event: Event): void {\r\n    FileDropInputComponent._stopAndPrevent(event);\r\n    if (!this.droppingFlag) {\r\n        this.droppingFlag = true;\r\n      }\r\n  }\r\n\r\n  public onDragLeave(event: Event): void {\r\n    FileDropInputComponent._stopAndPrevent(event);\r\n    if (this.droppingFlag) {\r\n        this.droppingFlag = false;\r\n      }\r\n  }\r\n\r\n  public onDropFiles(event: any) {\r\n    FileDropInputComponent._stopAndPrevent(event);\r\n    this.droppingFlag = false;\r\n    let length = 0;\r\n    if (event.dataTransfer.items) {\r\n      length = event.dataTransfer.items.length;\r\n    } else {\r\n      length = event.dataTransfer.files.length;\r\n    }\r\n\r\n    if (length > 1) {\r\n      event.error = 'Multiple files/folders are not supported';\r\n      this.fileDrop.emit(event);\r\n      return;\r\n    }\r\n\r\n    if (length === 1) {\r\n      let fileEntry;\r\n      if (event.dataTransfer.items) {\r\n        if (event.dataTransfer.items[0].webkitGetAsEntry) {\r\n          fileEntry = event.dataTransfer.items[0].webkitGetAsEntry();\r\n        }\r\n      } else {\r\n        if (event.dataTransfer.files[0].webkitGetAsEntry) {\r\n          fileEntry = event.dataTransfer.files[0].webkitGetAsEntry();\r\n        }\r\n      }\r\n      if (fileEntry) {\r\n        if (fileEntry.isFile) {\r\n          event.error = void 0;\r\n        } else if (fileEntry.isDirectory) {\r\n          event.error = `Folder (${fileEntry.name}) is not supported.`;\r\n        } else {\r\n          event.error = `Internal error, can not get the type of the dropped item (${fileEntry.name}).`;\r\n        }\r\n      }\r\n\r\n      const file: File = event.dataTransfer.files && event.dataTransfer.files.length > 0 ? event.dataTransfer.files[0] : null;\r\n      if (file) {\r\n        event.file = file;\r\n      } else {\r\n        event.error = 'Internal error, can not get the dropped file.';\r\n      }\r\n      this.fileDrop.emit(event);\r\n      return;\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'instruction',\r\n  templateUrl: './instruction.component.html',\r\n  styleUrls: ['./instruction.component.scss'],\r\n  imports: [ CommonModule ]\r\n})\r\n\r\nexport class InstructionComponent {\r\n  @Input()\r\n  step1Finished = false;\r\n  @Input()\r\n  step2Finished = false;\r\n  @Input()\r\n  step3Finished = false;\r\n  @Input()\r\n  step4Finished = false;\r\n  @Input()\r\n  step5Finished = false;\r\n  @Input()\r\n  show = true;\r\n  /**\r\n   * Output event bind to (show)\r\n   */\r\n  @Output() showChange = new EventEmitter<boolean>();\r\n  onClose() {\r\n    this.show = false;\r\n    this.showChange.emit(this.show);\r\n  }\r\n}\r\n","<div class=\"instruction\" *ngIf=\"show\">\r\n  <div class=\"close\" (click)=\"onClose()\">&times;</div>\r\n  <div class=\"mandatory\" [class.completed]=\"step1Finished\">\r\n    <label>Select nameserver history file <span class=\"flag\">*</span></label> <br>\r\n    <ul>\r\n      <li>Click the \"Browse\" </li>\r\n      <li>Drag and drop your file to \"Drop File Here\"</li>\r\n    </ul>\r\n  </div>\r\n  <div class=\"optional\" [class.completed]=\"step2Finished\">\r\n    <label>Select time range and timezone <span class=\"flag\">(optional)</span></label> <br>\r\n    <ul>\r\n      <li>If you do not select time range, this tool will read from the beginning until it reaches the configured maxRowsLimitation. </li>\r\n      <li>If you do not select time zone, this tool will use your local default timezone.</li>\r\n    </ul>\r\n  </div>\r\n  <div class=\"optional\" [class.completed]=\"step3Finished\">\r\n    <label>Select ports <span class=\"flag\">(optional)</span></label> <br>\r\n    <ul>\r\n      <li>If you do not choose any port, this tool will try to load data for all ports until it reaches the configured maxRowsLimitation.</li>\r\n      <li>After choosing one port, this tool will only try to load data for the selected port until it reaches the configured maxRowsLimitation.</li>\r\n      <li>If you do not know any port information, you can click \"Load\" to load all ports from the nameserver history file.</li>\r\n    </ul>\r\n  </div>\r\n  <div class=\"mandatory\" [class.completed]=\"step4Finished\">\r\n    <label>Load the data from nameserver history file and show the chart <span class=\"flag\">*</span></label> <br>\r\n    <ul><li>Click button \"Show\"</li></ul>\r\n  </div>\r\n  <div class=\"optional\" [class.completed]=\"step5Finished\">\r\n    <label>Reset the chart <span class=\"flag\">(optional)</span></label> <br>\r\n    <ul><li>If you zoomed in, you can go back to original status by clicking \"Reset Chart\"</li></ul>\r\n  </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { Port } from '../../types';\r\n\r\n@Injectable()\r\nexport class PortSelectorService {\r\n\r\n  private _defaultPorts: Port[];\r\n  /**\r\n   * generate the default ports from 3**01 to 3**99\r\n   * the ports which used (3**01, 3**03, 3**07, 3**40, 3**43, 3*46， 3**49, 3**52, 3**55, 3*58, 3**61 ...)\r\n   * by hana normally will be put in the first places\r\n   */\r\n  private _getDefaultPorts(): Port[] {\r\n    if (this._defaultPorts) {\r\n      return this._defaultPorts;\r\n    }\r\n    // name server, default index server and xsengine\r\n    this._defaultPorts = [\r\n      {id: '3**01', text: '3**01'},\r\n      {id: '3**03', text: '3**03'},\r\n      {id: '3**07', text: '3**07'}\r\n    ];\r\n    // tenant index servers\r\n    for (let i = 40; i < 100; i += 3) {\r\n      this._defaultPorts.push({id: `3**${i}`, text: `3**${i}`});\r\n    }\r\n    // others\r\n    for (let i = 1; i < 100; i++) {\r\n      const port = i > 9 ? `3**${i}` : `3**0${i}`;\r\n      if (this._defaultPorts.findIndex(item => item.id === port) < 0) {\r\n        this._defaultPorts.push({id: port, text: port});\r\n      }\r\n    }\r\n    return this._defaultPorts;\r\n  }\r\n\r\n  getPorts(ports: Port[] = null): Port[] {\r\n    return ports != null && ports.length > 0 ? ports : this._getDefaultPorts();\r\n  }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\r\nimport { PortSelectorService } from './port-selector.service';\r\nimport { Port } from '../../types';\r\nimport { DropdownListComponent } from 'ngx-dropdown-list';\r\n\r\n@Component({\r\n  selector: 'port-selector',\r\n  template: `\r\n    <label style=\"width: 100%\">\r\n      <ngx-dropdown-list (selectionChange)=\"onChange($event)\"\r\n                         [items]=\"displayPorts\"\r\n                         [multiSelection]=\"false\"\r\n                         [placeHolder]=\"'Ports'\"\r\n                         [(selectedValue)]=\"port\"\r\n                         [filterBox]=\"true\"\r\n                         [disabled]=\"disabled\">\r\n      </ngx-dropdown-list>\r\n    </label>\r\n  `,\r\n  providers: [ PortSelectorService ],\r\n  imports: [ DropdownListComponent ],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PortSelectorComponent {\r\n  /**\r\n   * Input: boolean (optional) bind to [disabled]\r\n   */\r\n  @Input() disabled = false;\r\n\r\n  /**\r\n   * Output event bind to (port)\r\n   */\r\n  @Output() portChange = new EventEmitter<string>();\r\n\r\n  /**\r\n   * Input: string (required) bind to [port]\r\n   */\r\n  @Input() port: string;\r\n\r\n  /**\r\n   * Input: array (required) bind to [ports]\r\n   */\r\n  @Input() ports: Port[];\r\n\r\n  get displayPorts() {\r\n    return this.service.getPorts(this.ports);\r\n  }\r\n\r\n  constructor(private service: PortSelectorService) {}\r\n\r\n  /**\r\n   * onChange function called by the \"ngx-select\" element\r\n   */\r\n  onChange(event: any) {\r\n    this.portChange.emit(event);\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'progress-bar',\r\n  styleUrls: ['./progress-bar.component.scss'],\r\n  template: `\r\n    <div class=\"progress-content\">\r\n      <div class=\"progress\">\r\n        <span class=\"bar\" [style.width]=\"progress + '%'\" [class.is-done]=\"progress == 100\"></span>\r\n      </div>\r\n    </div>\r\n    <div class=\"progress-text-content\">\r\n        <span class=\"progress-text\" [class.is-done]=\"progress === 100\">\r\n          <span>{{ progress }}% </span>\r\n          <span *ngIf=\"progress < 100\">Parsing...</span> <!--{{file?.name}}-->\r\n          <span *ngIf=\"progress === 100\">Done</span>\r\n        </span>\r\n    </div>\r\n  `,\r\n  imports: [ CommonModule ]\r\n})\r\n\r\nexport class ProgressBarComponent {\r\n\r\n  @Input()\r\n  public progress: number;\r\n\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from 'nshviewer-angular-datetime-picker';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'time-range-selector',\r\n  template: `\r\n    <div class=\"time-range\">\r\n      <div class=\"time-range-from\">\r\n        <input placeholder=\"Date Time Range From:\"\r\n               [disabled]=\"disabled\"\r\n               [(ngModel)]=\"dateTimeRange\"\r\n               [selectMode]=\"'rangeFrom'\"\r\n               [owlDateTimeTrigger]=\"dtRange2\" [owlDateTime]=\"dtRange2\" #dateTime2=\"ngModel\" readonly>\r\n        <owl-date-time #dtRange2 (afterPickerClosed)=\"afterPickerClosed()\"></owl-date-time>\r\n      </div>\r\n      <div class=\"time-range-to\">\r\n        <input placeholder=\"Date Time Range To:\"\r\n               [disabled]=\"disabled\"\r\n               [(ngModel)]=\"dateTimeRange\"\r\n               [selectMode]=\"'rangeTo'\"\r\n               [owlDateTimeTrigger]=\"dtRange3\" [owlDateTime]=\"dtRange3\" #dateTime3=\"ngModel\" readonly>\r\n        <owl-date-time #dtRange3 (afterPickerClosed)=\"afterPickerClosed()\"></owl-date-time>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styleUrls: [ './time-range-selector.component.scss' ],\r\n  standalone: true,\r\n  imports: [ CommonModule, FormsModule, OwlDateTimeModule, OwlNativeDateTimeModule ],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimeRangeSelectorComponent {\r\n\r\n  @Input() disabled = false;\r\n  /**\r\n   * selected time range\r\n   */\r\n  @Input() dateTimeRange: Date[];\r\n  /**\r\n   * for two way binding.\r\n   */\r\n  @Output() dateTimeRangeChange = new EventEmitter<Date[]>();\r\n\r\n  /**\r\n   * triggered when picker closed\r\n   */\r\n  afterPickerClosed() {\r\n    this.dateTimeRangeChange.emit(this.dateTimeRange);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { defaultTimezone, supportedTimezones, getOffset } from '../../utils';\r\n\r\n\r\nexport interface Timezone {\r\n  region: string;\r\n  zones: string[];\r\n}\r\n\r\n@Injectable()\r\nexport class TimezoneSelectorService {\r\n\r\n  /**\r\n   * get the default timezone\r\n   */\r\n  get defaultTimezone(): string {\r\n    return defaultTimezone();\r\n  }\r\n\r\n  /**\r\n   * Get all the timezones for each region\r\n   */\r\n  getZones(): Timezone[] {\r\n    const timezones: Timezone[] = [];\r\n    const zones = supportedTimezones();\r\n    \r\n    zones.forEach(zone => {\r\n      // get region\r\n      let region;\r\n      if (zone.indexOf('/') > 0) {\r\n        region = zone.slice(0, zone.indexOf('/'));\r\n        this._buildTimezones(timezones, region, zone);\r\n      }\r\n    });\r\n    return timezones;\r\n  }\r\n\r\n  getFormattedZone(region, zone) {\r\n    return `${region} - ${this._formatTimezone(zone)} ${this._getOffset(zone)}`;\r\n  }\r\n\r\n  private _getOffset(zone: string): string {\r\n    const offsetMinutes = getOffset(zone, Date.now()) / 60;\r\n    const absOffset = Math.abs(offsetMinutes);\r\n    const hours = Math.floor(absOffset / 60);\r\n    const minutes = absOffset % 60;\r\n    \r\n    return `(GMT${offsetMinutes < 0 ? '-' : '+'}${this._formatNumber(hours)}:${this._formatNumber(minutes)})`;\r\n  }\r\n\r\n  /**\r\n   * build timezone lists\r\n   */\r\n  private _buildTimezones(timezones: Timezone[], region: string, zone: string): void {\r\n    if (timezones) {\r\n      let timezoneRegion =  timezones.find(tz => tz.region === region);\r\n      if (!timezoneRegion) {\r\n        timezoneRegion = {region: region, zones: []};\r\n        timezones.push(timezoneRegion);\r\n      }\r\n      timezoneRegion.zones.push(zone);\r\n    }\r\n  }\r\n\r\n  private _formatTimezone(zone: string): string {\r\n    const tz = zone.split('/');\r\n    return tz[tz.length - 1].replace('_', ' ');\r\n  }\r\n\r\n  private _formatNumber(number): string {\r\n    return number < 10 || !number ? `0${number}` : `${number}`;\r\n  }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { TimezoneSelectorService } from './timezone-selector.service';\r\nimport { DropdownListComponent } from 'ngx-dropdown-list';\r\n\r\n\r\n@Component({\r\n  selector: 'timezone-selector',\r\n  template: `\r\n    <ngx-dropdown-list (selectionChange)=\"onChange($event)\"\r\n                       [items]=\"timezones\"\r\n                       [multiSelection]=\"false\"\r\n                       [placeHolder]=\"'Timezones'\"\r\n                       [(selectedValue)]=\"timezone\"\r\n                       [filterBox]=\"true\"\r\n                       [disabled]=\"disabled\"\r\n                       [allowClear]=\"false\">\r\n    </ngx-dropdown-list>\r\n  `,\r\n  providers: [ TimezoneSelectorService ],\r\n  imports: [ DropdownListComponent ],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimezoneSelectorComponent implements OnChanges {\r\n\r\n  @Input() disabled = false;\r\n  @Input() timezone: string;\r\n  @Output() timezoneChange = new EventEmitter<string>();\r\n\r\n  /**\r\n   * all time zones for each region\r\n   */\r\n  timezones: any[];\r\n\r\n  constructor(private service: TimezoneSelectorService) {\r\n    const defaultTZ = this.service.defaultTimezone;\r\n    this.timezones = this.service.getZones().map(tz => ({group: tz.region, items: tz.zones.map(zone =>\r\n        ({id: zone, value: zone, text: this.service.getFormattedZone(tz.region, zone), selected: zone === defaultTZ}))}));\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['timezone'] && changes['timezone'].currentValue) {\r\n      if (this.timezones) {\r\n        this.timezones = this.service.getZones().map(tz => ({group: tz.region, items: tz.zones.map(zone =>\r\n            ({id: zone, value: zone, text: this.service.getFormattedZone(tz.region, zone), selected: zone === changes['timezone'].currentValue}))}));\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * onChange function called by the \"ngx-select\" element\r\n   * @param selectedTimezone The timezone string selected\r\n   */\r\n  onChange(selectedTimezone: string) {\r\n    this.timezone = selectedTimezone;\r\n    this.timezoneChange.emit(this.timezone);\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n    selector: 'alert',\r\n    templateUrl: './alert.component.html',\r\n    styleUrls: ['./alert.component.scss'],\r\n    standalone: true,\r\n    imports: [CommonModule]\r\n})\r\n\r\nexport class AlertComponent implements OnChanges {\r\n  @Input() alertMessage: string;\r\n  @Input() alertType: string;\r\n  @Input() alertTimeout: number;\r\n  @Output() alertMessageChange = new EventEmitter<string>();\r\n\r\n  message: string;\r\n  private _timeout: any;\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['alertMessage']) {\r\n      this._setMessage(changes['alertMessage'].currentValue);\r\n    }\r\n  }\r\n\r\n  private _setMessage(msgString: string) {\r\n    this.message = void 0;\r\n    if (msgString && msgString.length > 0) {\r\n      this._showMessage(msgString);\r\n      this._setTimeout();\r\n    }\r\n  }\r\n\r\n  private _showMessage(msgString: string) {\r\n    setTimeout(() => this.message = msgString, 100);\r\n  }\r\n\r\n  private _setTimeout() {\r\n    if (this.alertTimeout > 0) {\r\n      // clear time out first, it doesn't matter whether the _timeout is undefined or not.\r\n      clearTimeout(this._timeout);\r\n      this._timeout = setTimeout(() => this.clearAlert(), this.alertTimeout);\r\n    }\r\n  }\r\n\r\n  clearAlert() {\r\n    this.alertMessage = void 0;\r\n    this.alertType = void 0;\r\n    this.alertMessageChange.emit(this.alertMessage);\r\n    clearTimeout(this._timeout);\r\n  }\r\n\r\n  /**\r\n   * get css class base on the alert type\r\n   */\r\n  get alertClassType(): string {\r\n    if (this.alertType) {\r\n      switch (this.alertType.toLowerCase()) {\r\n        case 'success':\r\n          return 'alert-success';\r\n        case 'error':\r\n          return 'alert-error';\r\n        case 'info':\r\n          return 'alert-info';\r\n        case 'warning':\r\n          return 'alert-warning';\r\n        default:\r\n          return '';\r\n      }\r\n    }\r\n    return '';\r\n  }\r\n}\r\n","<div class=\"alert-container\" *ngIf=\"message\">\r\n  <div [ngClass]=\"alertClassType\">\r\n    {{message}}\r\n    <a class=\"close\" (click)=\"clearAlert()\">&times;</a>\r\n  </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n","import {AfterViewInit, Component, ElementRef, Input, Output, OnChanges, EventEmitter, SimpleChanges, ViewChild} from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n  setChartHeight,\r\n  sleep,\r\n  isEmptyData,\r\n  getDisplayPort,\r\n  getFileFromInput,\r\n  isSameFile,\r\n  getAbbreviatedFileName,\r\n  getFileFromDrop,\r\n  getRealPorts,\r\n  getTimeString,\r\n  printProcessedTime,\r\n  getTimeRangeString,\r\n  generatePorts,\r\n  defaultTimezone,\r\n  blobToFile,\r\n  isFile,\r\n  getHANAServiceDisplayName\r\n} from '../utils';\r\nimport { Abort, Alert, HtmlElement, Item, ChartContentData, ChartContentHeader, ChartContentTime, Port } from '../types';\r\nimport { FileService, ChartService, UIService } from '../services';\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from 'nshviewer-angular-datetime-picker';\r\nimport { SelectionTableComponent } from 'ngx-selection-table';\r\nimport { FileDropInputComponent } from './file-drop-input';\r\nimport { InstructionComponent } from './instruction';\r\nimport { PortSelectorComponent } from './port-selector';\r\nimport { ProgressBarComponent } from './progress-bar';\r\nimport { TimeRangeSelectorComponent } from './time-range-selector';\r\nimport { TimezoneSelectorComponent } from './timezone-selector';\r\nimport { AlertComponent } from './alert';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nenum SearchType {\r\n  searchWithSubHeader = 'searchWithSubHeader',\r\n  searchAll = 'searchAll',\r\n  searchInChildren = 'searchInChildren'\r\n}\r\n\r\n@Component({\r\n  selector: 'ngx-hana-nameserver-history-viewer',\r\n  templateUrl: './nameserver-history.component.html',\r\n  styleUrls: [ './nameserver-history.component.scss' ],\r\n  providers: [ FileService, ChartService, UIService ],\r\n  standalone: true,\r\n  imports: [ CommonModule, AlertComponent, TimezoneSelectorComponent, TimeRangeSelectorComponent, ProgressBarComponent, PortSelectorComponent, InstructionComponent, FileDropInputComponent, SelectionTableComponent, OwlDateTimeModule, OwlNativeDateTimeModule ]\r\n})\r\nexport class NameServerHistoryComponent implements OnChanges, AfterViewInit {\r\n  @ViewChild('nameserverHistoryAll', { read: ElementRef }) nameserverHistoryAllRef: ElementRef;\r\n  @ViewChild('nameserverHistoryContent', { read: ElementRef }) nameserverHistoryContentRef: ElementRef;\r\n\r\n  /**\r\n   * Input (optional) bind to [defaultSelectedItems]\r\n   */\r\n  @Input() defaultSelectedItems: string[];\r\n\r\n  /**\r\n   * Input (optional) bind to [hideMeasureColumns]\r\n   */\r\n  @Input() hideMeasureColumns: string[];\r\n\r\n  /**\r\n   * Input (optional) bind to [maxRowsLimitation]\r\n   */\r\n  @Input() maxRowsLimitation: number;\r\n\r\n  /**\r\n   * Input (optional) bind to [showInstruction]\r\n   */\r\n  @Input() showInstruction = true;\r\n\r\n  /**\r\n   * Input (optional) bind to [timezone]\r\n   */\r\n  @Input() timezone: string;\r\n\r\n  /**\r\n   * file buffer, use this for stream mode\r\n   */\r\n  @Input() fileBuffer: Blob;\r\n\r\n  /**\r\n   * file name for stream mode\r\n   */\r\n  @Input() streamModeFileName: string;\r\n\r\n  /**\r\n   * auto display the chart in stream mode\r\n   */\r\n  @Input() autoDisplay: boolean;\r\n\r\n  /**\r\n   * service port info\r\n   */\r\n  @Input() servicePortInfo: any;\r\n\r\n  /**\r\n   * update timezone value\r\n   */\r\n  @Output() timezoneChange = new EventEmitter<string>();\r\n\r\n\r\n  /**\r\n   * selected name server history file\r\n   */\r\n  file: File;\r\n\r\n  /**\r\n   * time info of the name server history file\r\n   */\r\n  time: ChartContentTime = {};\r\n\r\n  /**\r\n   * data of the name server history file\r\n   */\r\n  data: ChartContentData = {};\r\n\r\n  /**\r\n   * header of the name server history file\r\n   */\r\n  header: ChartContentHeader[] = [];\r\n\r\n  /**\r\n   * host of the name server history file\r\n   */\r\n  host = 'nameserver history file';\r\n\r\n  /**\r\n   * alert message content\r\n   */\r\n  alertMessage: string;\r\n\r\n  /**\r\n   * alert message type\r\n   */\r\n  alertType: Alert;\r\n\r\n  /**\r\n   * selected port\r\n   */\r\n  port: string;\r\n\r\n  /**\r\n   * all the ports from the nameserver history file\r\n   */\r\n  ports: Port[];\r\n\r\n  /**\r\n   * selected time range\r\n   */\r\n  dateTimeRange: Date[];\r\n\r\n  /**\r\n   * data source for the selection table (right part of the chart)\r\n   */\r\n  tableSource: any[];\r\n\r\n  /**\r\n   * the progress for reading file\r\n   */\r\n  readProgress = 0;\r\n\r\n  /**\r\n   * selected/dropped file name (abbreviation), full file name will be shown via the tooltips\r\n   */\r\n  abbreviatedFileName = 'or Drop File Here';\r\n\r\n  /**\r\n   * for the instruction step 4\r\n   */\r\n  stepShowChart = false;\r\n\r\n  /**\r\n   * control flag for showing the name server history chart\r\n   */\r\n  showChartFlag: boolean;\r\n\r\n  /**\r\n   * control flag for showing the file reading progress\r\n   */\r\n  showReadFileProgress: boolean;\r\n\r\n  /**\r\n   * control flag for \"Load\" ports button\r\n   */\r\n  enableLoadPortsButton: boolean;\r\n\r\n  /**\r\n   * control flag for enabling \"Show\" chart button\r\n   */\r\n  enableShowChartButton: boolean;\r\n\r\n  /**\r\n   * control flag for \"Reset\" chart button\r\n   */\r\n  enableResetChartButton: boolean;\r\n\r\n  searchType = SearchType.searchAll;\r\n\r\n  /**\r\n   * selection information for the selection table\r\n   */\r\n  private _selection: SelectionModel<any>;\r\n\r\n  /**\r\n   * current displaying port\r\n   */\r\n  private _currentChartPort: string;\r\n\r\n  constructor(private fileService: FileService,\r\n              private chartService: ChartService,\r\n              private uiService: UIService) {}\r\n\r\n  async ngOnChanges(changes: SimpleChanges) {\r\n    const fbc = changes['fileBuffer'];\r\n    // !isFile(fbc.currentValue) --> only show chart when it's not a file -> it's a file, means the object has already been processed\r\n    if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue && !isFile(fbc.currentValue)) {\r\n      // simulate selecting file\r\n      const simulatedEvent = {target: {files: [blobToFile(fbc.currentValue, this.streamModeFileName)]}};\r\n      await this.fileSelected(simulatedEvent);\r\n      this.port = undefined; // clear the port selection\r\n      if (this.autoDisplay) {\r\n        this.onResize(); // ngAfterViewInit/resize won't work in electron\r\n        this.showChart();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // init items' status\r\n    // reset chart button will be disable by default later, only be enabled after zoomed\r\n    this._toggleItems([\r\n      {id: HtmlElement.chartArea, status: false},\r\n      {id: HtmlElement.readFileProgress, status: false},\r\n      {id: HtmlElement.showChartButton, status: false},\r\n      {id: HtmlElement.loadPortsButton, status: true},\r\n      {id: HtmlElement.resetChartButton, status: false}]);\r\n    this.onResize(); // update the size, otherwise there may have a scrollbar (because of the toast) if auto display is set to true\r\n  }\r\n\r\n  /**\r\n   * Reset Chart to initial status\r\n   * If legend is already selected/unselected from the list, it wouldn't be restored.\r\n   */\r\n  resetChart(): void {\r\n    this._toggleItems([{id: HtmlElement.resetChartButton, status: false}]);\r\n\r\n    if (this.tableSource && this._selection) {\r\n      this.chartService.resetChart(this.tableSource, this._selection)\r\n        .catch(e => this._showMessage(Alert.error, e));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * read the file and display the chart\r\n   */\r\n  showChart(): void {\r\n    // after click, this button and reset button needs to be disabled\r\n    this._toggleItems([\r\n      {id: HtmlElement.resetChartButton, status: false},\r\n      {id: HtmlElement.showChartButton, status: false}]);\r\n\r\n    this.stepShowChart = true;\r\n\r\n    this._initChartEnv().then(() => {\r\n      const selectedTime = this._selectedTimeRange;\r\n      if (selectedTime.startTime > selectedTime.endTime) {\r\n        this._showMessage(Alert.error, 'Time range is not correct.');\r\n        return Promise.resolve();\r\n      }\r\n      if (this.file) {\r\n        // it's time for displaying the reading progress bar\r\n        this._toggleItems([{id: HtmlElement.readFileProgress, status: true}]);\r\n        return this._buildChartFromDataFile(this.file, selectedTime.startTime, selectedTime.endTime, this.port);\r\n      }\r\n      return Promise.resolve();\r\n    }).catch(e => {\r\n      this._showMessage(Alert.error, e);\r\n      this._toggleItems([{id: HtmlElement.readFileProgress, status: false}]);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * load all ports from file\r\n   */\r\n  loadPorts(): void {\r\n    // do confirmation actions\r\n    if (this.file) {\r\n      // before start loading ports from file, display progress bar and disable the show chart button\r\n      this._toggleItems([\r\n        {id: HtmlElement.readFileProgress, status: true},\r\n        {id: HtmlElement.showChartButton, status: false}\r\n      ]);\r\n      this._readPortsFromFile(this.file);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * select name server history file, currently only supports 1 file.\r\n   */\r\n  async fileSelected(event: any) {\r\n    const selectedFile = getFileFromInput(event.target);\r\n    if (selectedFile) {\r\n      if (!isSameFile(this.file, selectedFile)) {\r\n        // init port selector\r\n        await this._initPortSelector().catch(e => this._showMessage(Alert.error, e));\r\n\r\n        this.file = selectedFile;\r\n        this.abbreviatedFileName = getAbbreviatedFileName(this.file.name);\r\n        // after file has been selected, the show chart button needs to be enabled\r\n        this._toggleItems([{id: HtmlElement.showChartButton, status: true}]);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * drop name server history file, currently only supports 1 file.\r\n   */\r\n  fileDropped(event: any) {\r\n    getFileFromDrop(event)\r\n      .then(file => {\r\n        if (!isSameFile(this.file, file)) {\r\n          // init port selector\r\n          this.file = file;\r\n          if (this.file) {\r\n            this.abbreviatedFileName = getAbbreviatedFileName(this.file.name);\r\n            // after file has been dropped, the show chart button needs to be enabled\r\n            this._toggleItems([{id: HtmlElement.showChartButton, status: true}]);\r\n          }\r\n        }})\r\n      .then(() =>  {\r\n        return this._initPortSelector();\r\n      })\r\n      .catch(e => this._showMessage(Alert.error, e));\r\n  }\r\n\r\n  /**\r\n   * Select one item from selection table, relative dataset will be shown or hidden\r\n   */\r\n  selectItem(event: any) {\r\n    if (event && event.tableRow) {\r\n      const row = event.tableRow;\r\n      this._selection.toggle(row);\r\n      this.chartService.toggleDataInChart(row.KPI, !this._selection.isSelected(row))\r\n        .catch(e => this._showMessage(Alert.error, e));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * recalculating chart height when resizing\r\n   */\r\n  onResize() {\r\n    const nameserverHistoryAllElement = this.nameserverHistoryAllRef ? this.nameserverHistoryAllRef.nativeElement : null;\r\n    const nameserverHistoryContentElement = this.nameserverHistoryContentRef ? this.nameserverHistoryContentRef.nativeElement : null;\r\n    setChartHeight(nameserverHistoryAllElement, nameserverHistoryContentElement);\r\n  }\r\n\r\n  /**\r\n   * Handle timezone change from timezone-selector\r\n   * @param newTimezone the new timezone value\r\n   */\r\n  onTimezoneChange(newTimezone: string): void {\r\n    this.timezone = newTimezone;\r\n    this.timezoneChange.emit(newTimezone);\r\n  }\r\n\r\n  /**\r\n   * Switch port and reinitialize chart, triggered by changing the port\r\n   * @param port the selected port\r\n   */\r\n  switchPortForChart(port: string): void {\r\n    if (port === this._currentChartPort) {\r\n      // not to switch port, because the relative port is displaying, no need to render twice.\r\n      return;\r\n    }\r\n    if (!this.file || !port || port.length === 0 || port.slice(1, 3) === '**') {\r\n      return;\r\n    } else if (Object.keys(this.time).length > 1 && !getRealPorts(Object.keys(this.time).filter(key => this.time[key])).includes(port)) {\r\n      this._showMessage(Alert.info, `Data of port:${port} is not loaded, please load the data first by clicking the \"Show\" button.`);\r\n      return;\r\n    }\r\n\r\n    // only do switch ports when available ports number > 1\r\n    if (Object.keys(this.time).filter(key => this.time[key]).length > 1) {\r\n      // disable the \"show chart\" and \"reset chart\" button first\r\n      this._toggleItems([\r\n        {id: HtmlElement.showChartButton, status: false},\r\n        {id: HtmlElement.resetChartButton, status: false}]);\r\n      // init the environment with switch flag\r\n      this._initChartEnv(true).then(() => {\r\n        return this._buildChart(port, null, this.servicePortInfo?.[this.host]?.[port], true);\r\n      }).catch(e => this._showMessage(Alert.error, e));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * get the columns which need to be hidden from the selection table\r\n   */\r\n  get hiddenColumns(): string[] {\r\n    return this.uiService.getHiddenColumns(this.hideMeasureColumns);\r\n  }\r\n\r\n  /**\r\n   * get default timezone\r\n   */\r\n  get defaultTimezone(): string {\r\n    return defaultTimezone();\r\n  }\r\n\r\n  /**\r\n   * get the key column (KPI)\r\n   */\r\n  get kpiColumn(): Item {\r\n    return Item.kpi;\r\n  }\r\n\r\n  /**\r\n   * get the key column (KPI)\r\n   */\r\n  get descColumn(): Item {\r\n    return Item.description;\r\n  }\r\n\r\n  /**\r\n   * get the selected time range, set second and millisecond part to 0\r\n   */\r\n  private get _selectedTimeRange(): {startTime: number, endTime: number} {\r\n    let startTime = 0;\r\n    let endTime = 4102358400000; // 2099/12/31\r\n    if (this.dateTimeRange != null) {\r\n      if (this.dateTimeRange.length >= 1) {\r\n        // get start time\r\n        if (this.dateTimeRange[0]) {\r\n          startTime = this.dateTimeRange[0].setSeconds(0, 0);\r\n        }\r\n        if (this.dateTimeRange[1]) {\r\n          endTime = this.dateTimeRange[1].setSeconds(0, 0);\r\n        }\r\n      }\r\n    }\r\n    return {startTime: startTime, endTime: endTime};\r\n  }\r\n\r\n  /**\r\n   * get the time range string, eg: 2018-10-25 10:25 ~ 2018-10-26 10:26\r\n   */\r\n  private get _selectedTimeRangeString(): string {\r\n    const selectedTimeRangeString = this._selectedTimeRange;\r\n    return `${getTimeString(selectedTimeRangeString.startTime)} ~ ${getTimeString(selectedTimeRangeString.endTime)}`;\r\n  }\r\n\r\n  /**\r\n   * get array of header key\r\n   */\r\n  private get _headerKey(): string[] {\r\n    if (this.header) {\r\n      return this.header.map(headerItem => headerItem.key);\r\n    }\r\n    return [];\r\n  }\r\n\r\n  /**\r\n   * get array of header text\r\n   */\r\n  private get _headerText(): string[] {\r\n    return this.header.map(headerItem => headerItem.text);\r\n  }\r\n\r\n  /**\r\n   * read ports from the selected nameserver history file\r\n   * @param file nameserver history file\r\n   */\r\n  private _readPortsFromFile(file: File): void {\r\n    this.fileService.getPortsFromFile(file, (progress) => {\r\n      this.readProgress = progress;\r\n    }).then(ports => {\r\n      return sleep(100).then(() => {\r\n        return this._initPortSelector(ports);\r\n      });\r\n    }).catch(e => this._showMessage(Alert.error, e));\r\n  }\r\n\r\n  /**\r\n   * build chart from the selected nameserver history file\r\n   * @param file the nameserver history file\r\n   * @param startTime start time\r\n   * @param endTime end time\r\n   * @param selectedPort selected port for nameserver history file (MDC system)\r\n   */\r\n  private _buildChartFromDataFile(file: File, startTime: number, endTime: number, selectedPort: string): Promise<any> {\r\n    return this.fileService.getChartContentFromFile(\r\n      file,\r\n      startTime,\r\n      endTime,\r\n      selectedPort,\r\n      this.timezone,\r\n      this.maxRowsLimitation, progress => this.readProgress = progress)\r\n      .then(result => {\r\n        // parsing done\r\n        const beginTime = new Date();\r\n        const promises = [];\r\n        const ports = getRealPorts(Object.keys(result.time), true);\r\n        ports.forEach(port => {\r\n          // convert the unit and generate controlling data for all ports\r\n          promises.push(this.uiService.convertUnitAndGenerateControlData(result.data[port], result.header, port));\r\n        });\r\n\r\n        return Promise.all(promises)\r\n          .then(() => {\r\n\r\n            // get all ports from the analyzed data(time)\r\n            // get the port that will be shown in the page\r\n            const port = getDisplayPort(ports, selectedPort);\r\n\r\n            printProcessedTime(beginTime, 'converting step');\r\n            ports.forEach( portItem => this.uiService.generateYScale(portItem));\r\n            printProcessedTime(beginTime, 'generating YScale step');\r\n            this.data = result.data;\r\n            this.time = result.time;\r\n            this.header = this.uiService.getHeader(result.header, port);\r\n            this.host = result.host;\r\n            if (result.aborted === Abort.maxLineNumReached) {\r\n              this._showMessage(\r\n                Alert.warning, `Maximum number of lines reached. Processed time range is: ${getTimeRangeString(this.time)}.`);\r\n            } else {\r\n              if (isEmptyData(this.data)) {\r\n                this._showMessage(Alert.info, `Cannot find any data for the selected time period: ${this._selectedTimeRangeString}`);\r\n              } else {\r\n                this._showMessage(Alert.success, `Processed time range is: ${getTimeRangeString(this.time)}.`);\r\n              }\r\n            }\r\n            return sleep(100).then(() => {\r\n              return this._buildChart(port, ports, this.servicePortInfo?.[this.host]?.[port]);\r\n            });\r\n          });\r\n      });\r\n  }\r\n\r\n  /**\r\n   * reinitialize the port selector with the ports\r\n   */\r\n  private _initPortSelector(ports: string[] = null, selectedPort: string = null): Promise<void> {\r\n    return new Promise(resolve => {\r\n      // initialization for ngx-select\r\n      if (ports != null && ports.length > 1) {\r\n        // MDC, remove default '0000' port\r\n        this.ports = generatePorts(getRealPorts(ports), selectedPort);\r\n      } else {\r\n        this.ports = generatePorts(ports);\r\n      }\r\n\r\n      if (ports != null && selectedPort === null) {\r\n        // reset status when doing:\r\n        // 1. loading ports\r\n        // 2. the file doesn't contain the selected Port\r\n        this.readProgress = 0;\r\n        // hide the progress bar and enable the \"show chart\" button\r\n        this._toggleItems([\r\n          {id: HtmlElement.readFileProgress, status: false},\r\n          {id: HtmlElement.showChartButton, status: true}\r\n        ]);\r\n      }\r\n      resolve();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * build and display the chart on page\r\n   * @param port the selected port\r\n   * @param ports all available ports\r\n   * @param service service name\r\n   * @param switchFlag indicates whether this function is triggered from switching ports (no init port selector needed)\r\n   */\r\n  private _buildChart(port: string, ports: string[], service: string, switchFlag = false): Promise<any> {\r\n    const beginTime = new Date();\r\n    if (port) {\r\n      return Promise.resolve(this._loadSettingsForSelectionsTable(port, service))\r\n        .then( () => {\r\n          // get the config\r\n          return this.chartService.buildChart(\r\n            this.time[port],\r\n            this.data[port],\r\n            this.uiService.getYScale(this._headerKey, port),\r\n            this._headerText,\r\n            this._headerKey,\r\n            this._selection,\r\n            this.tableSource,\r\n            this._getHostTitle(port),\r\n            this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems),\r\n            this._onZoom.bind(this))\r\n            .then(() => {\r\n              this.readProgress = 0;\r\n              // after chart has been created, show the chart area, hide progress bar and enable the \"show chart\" button\r\n              this._toggleItems([\r\n                {id: HtmlElement.chartArea, status: true},\r\n                {id: HtmlElement.readFileProgress, status: false},\r\n                {id: HtmlElement.showChartButton, status: true}\r\n              ]);\r\n              // set port to current displaying port\r\n              this._currentChartPort = port;\r\n              printProcessedTime(beginTime, 'step_build_chart');\r\n              if (ports && ports.length > 0) {\r\n                if (!switchFlag) {\r\n                  // initialize port selector. Do not need to do it when switching port.\r\n                  return this._initPortSelector(ports, port);\r\n                }\r\n              }\r\n              return Promise.resolve();\r\n            });\r\n        });\r\n    } else {\r\n      if (ports && ports.length > 0) {\r\n        this._showMessage(\r\n          Alert.warning,\r\n          'The selected port does not exist in the name server history file. Please choose a correct port and have a try again.');\r\n        if (!switchFlag) {\r\n          // initialize port selector. Do not need to do it when switching port.\r\n          return this._initPortSelector(ports, port);\r\n        }\r\n      }\r\n    }\r\n    return Promise.resolve();\r\n  }\r\n\r\n  /**\r\n   * get the string that will be displayed on the title area of the chart\r\n   * eg: host1 - 30040 (2018-09-05 15:32:32 ~ 2018-09-07 15:32:15)\r\n   * @param port selected port\r\n   */\r\n  private _getHostTitle(port: string): string {\r\n    if (this.host) {\r\n      return  `${this.host} - ${port} ( ${getTimeRangeString(this.time[port])} )`;\r\n    }\r\n    return '';\r\n  }\r\n\r\n  /**\r\n   * after zoom, enable the reset button.\r\n   */\r\n  private _onZoom(): void {\r\n    this._toggleItems([{id: HtmlElement.resetChartButton, status: true}]);\r\n  }\r\n\r\n  /**\r\n   * initialize chart, including: destroy current chart, initialize config, initialize all relative data\r\n   */\r\n  private _initChartEnv(switchFlag: boolean = false): Promise<any> {\r\n    return this.chartService.destroyChart().then(() => {\r\n      {\r\n        // cleanup other data\r\n        this._toggleItems([{id: HtmlElement.chartArea, status: false}]);\r\n\r\n        if (!switchFlag) {\r\n          Object.keys(this.time).forEach(key => {\r\n            if (this.time[key]) {\r\n              this.time[key].length = 0;\r\n            }});\r\n          this.time = {};\r\n          Object.keys(this.data).forEach(key => {\r\n            if (this.data[key]) {\r\n              this.data[key].length = 0;\r\n            }});\r\n          this.data = {};\r\n          this.header.length = 0;\r\n          this.host = 'nameserver history file';\r\n          this.tableSource = void 0;\r\n          this.readProgress = 0;\r\n          this.uiService.clearLoadHistoryInfos();\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Load settings for the selection table (the right part of the chart)\r\n   * @param port the selected port\r\n   */\r\n  private _loadSettingsForSelectionsTable(port: string, service: string): void {\r\n    this.tableSource = this.uiService.getSelectionTableRows(this._headerKey, port, this.defaultSelectedItems);\r\n    this._updateServiceHeader(port, service);\r\n    this._selection = new SelectionModel(true, []);\r\n    this.tableSource.forEach(row => {\r\n      if (this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems).includes(row.KPI)) {\r\n        this._selection.select(row);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Replace confusing service type, issue: https://github.com/ckyycc/ngx-hana-nameserver-history-viewer/issues/14\r\n   * by default will replaced it with Service (port), eg: Service (30015)\r\n   *if topology is imported, it will be: Name Server (30001) or Index Server (30040), and so on...\r\n   */\r\n  private _updateServiceHeader(port: string, service: string) {\r\n    const serviceHeader = this.tableSource.find(ts=> ts[this.kpiColumn] === 'Service' && ts.header);\r\n    if (serviceHeader) {\r\n      serviceHeader[this.kpiColumn] = `${getHANAServiceDisplayName(service) || 'Service'} (${port})`;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Show messages\r\n   * @param type type of the message\r\n   * @param message message text\r\n   */\r\n  private _showMessage(type: Alert, message: string): void {\r\n    if (type) {\r\n      switch (type) {\r\n        case Alert.success:\r\n        case Alert.info:\r\n          break;\r\n        case Alert.warning:\r\n          console.warn(message);\r\n          break;\r\n        case Alert.error:\r\n          console.error(message);\r\n      }\r\n    }\r\n    if (this.alertMessage === message) {\r\n      // try trigger the change event of the alert.\r\n      this.alertMessage = void 0;\r\n      setTimeout(() => this.alertMessage = message, 100);\r\n    } else {\r\n      this.alertMessage = message;\r\n    }\r\n    this.alertType = type;\r\n  }\r\n\r\n  /**\r\n   * toggle items with the provided status (show or hide the relative element on the page)\r\n   * @param items items with the relative id and status.\r\n   */\r\n  private _toggleItems(items: {id: HtmlElement, status: boolean}[]) {\r\n    const getVariableNameByTypeId = (id: HtmlElement) => {\r\n      switch (id) {\r\n        case HtmlElement.chartArea: return 'showChartFlag';\r\n        case HtmlElement.readFileProgress: return 'showReadFileProgress';\r\n        case HtmlElement.showChartButton: return 'enableShowChartButton';\r\n        case HtmlElement.loadPortsButton: return 'enableLoadPortsButton';\r\n        case HtmlElement.resetChartButton: return 'enableResetChartButton';\r\n      }\r\n    };\r\n    if (items) {\r\n      items.forEach(item => {\r\n        this[getVariableNameByTypeId(item.id)] = item.status;\r\n      });\r\n    }\r\n  }\r\n}\r\n","<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n  <div class=\"toolbar-chart\">\r\n    <div class=\"upload-box-content\">\r\n      <div *ngIf=\"!showReadFileProgress\">\r\n        <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n                         [dropAreaText]= \"abbreviatedFileName\"\r\n                         [inputAreaText]=\"'Browse'\"\r\n                         [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n                         *ngIf=\"!fileBuffer\">\r\n        </file-drop-input>\r\n        <p *ngIf=\"fileBuffer\" class=\"box-stream-mode-text\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n      </div>\r\n      <div *ngIf=\"showReadFileProgress\">\r\n        <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n      </div>\r\n    </div>\r\n    <div class=\"input-time\">\r\n     <div class=\"input-time-range\">\r\n       <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n     </div>\r\n      <div class=\"timezone-selector\">\r\n        <timezone-selector [(timezone)]=\"timezone\" (timezoneChange)=\"onTimezoneChange($event)\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"port-selection\">\r\n      <div class=\"port-selector\">\r\n        <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n      </div>\r\n      <div class=\"port-load-button\">\r\n        <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"chart-operation\">\r\n      <div class=\"left\">\r\n        <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n      </div>\r\n      <div class=\"right\">\r\n        <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n    <div class=\"nameserver-history-content-chart\">\r\n      <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n                   [step1Finished]=\"!!file\"\r\n                   [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n                   [step3Finished]=\"!!port\"\r\n                   [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n                   [step5Finished]=\"false\">\r\n      </instruction>\r\n      <canvas id=\"chartNameServerHistory\" ></canvas>\r\n    </div>\r\n    <div class=\"nameserver-history-content-controller\" >\r\n      <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n                           [filter]=\"true\"\r\n                           [checkbox]=\"true\"\r\n                           [tableSource]=\"tableSource\"\r\n                           [keyColumn]=\"kpiColumn\"\r\n                           [hiddenColumns]=\"hiddenColumns\"\r\n                           [tooltipColumn]=\"descColumn\"\r\n                           [searchStyle]=\"searchType\"\r\n                           [searchColumn]=\"kpiColumn\"\r\n                           [multiSelection]=\"true\">\r\n      </ngx-selection-table>\r\n    </div>\r\n  </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n  <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PortSelectorService","i1","i1.TimezoneSelectorService","i1.FileService","i1.ChartService","i1.UIService","i2"],"mappings":";;;;;;;;;;;;;;;;;;AAGA,SAAS,kBAAkB,GAAA;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;AACxC;AAEA;;;AAGG;AACG,SAAU,WAAW,CAAC,OAAe,EAAA;IACzC,OAAO,OAAO,GAAG,kBAAkB,EAAE,GAAG,GAAG,GAAG,kBAAkB,EAAE,GAAG,GAAG,GAAG,kBAAkB,EAAE,GAAG,GAAG,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG;AACjI;AAEA;;AAEG;AACG,SAAU,cAAc,CAAC,SAAoB,EAAA;IACjD,OAAO,CAAA,KAAA,EAAQ,SAAS,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,SAAS,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAA,EAAA,EAAK,SAAS,CAAC,OAAO,CAAC,CAAA,CAAA,CAAG;AACxG;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,GAAW,EAAA;AAC7C,IAAA,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5D,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;AAC3E,IAAA,OAAO,WAAW,GAAG,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,GAAG,iBAAiB;AAChF;;AC7BA,IAAY,IAWX;AAXD,CAAA,UAAY,IAAI,EAAA;AACd,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,SAAkB;AAClB,IAAA,IAAA,CAAA,aAAA,CAAA,GAAA,cAA4B;AAC5B,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,IAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,IAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAXW,IAAI,KAAJ,IAAI,GAAA,EAAA,CAAA,CAAA;;ACAhB,IAAY,UAcX;AAdD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAK;AACL,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAO;AACT,CAAC,EAdW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;ACAtB,IAAY,IAWX;AAXD,CAAA,UAAY,IAAI,EAAA;AACd,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,GAAS;AACT,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,IAAA,CAAA,OAAA,CAAA,GAAA,EAAU;AACV,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,MAAiB;AACjB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,OAAmB;AACnB,IAAA,IAAA,CAAA,YAAA,CAAA,GAAA,OAAoB;AACpB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,OAAmB;AACnB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,OAAmB;AACrB,CAAC,EAXW,IAAI,KAAJ,IAAI,GAAA,EAAA,CAAA,CAAA;;ACAhB,IAAY,QAOX;AAPD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACV,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACT,CAAC,EAPW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;ACApB,IAAY,KAKX;AALD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,KAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,KAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EALW,KAAK,KAAL,KAAK,GAAA,EAAA,CAAA,CAAA;;ACAjB,IAAY,WAMX;AAND,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,WAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAgB;AAChB,IAAA,WAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe;AACf,IAAA,WAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe;AACf,IAAA,WAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAgB;AAClB,CAAC,EANW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;ACAvB,IAAY,KAGX;AAHD,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,KAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAiB;AACjB,IAAA,KAAA,CAAA,KAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAmB;AACrB,CAAC,EAHW,KAAK,KAAL,KAAK,GAAA,EAAA,CAAA,CAAA;;ACGjB;;AAEG;AACH,MAAM,uBAAuB,GAAG,CAAC;AAEjC;;;;AAIG;AACH,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAE5F,MAAM,cAAc,GAAG;AACrB,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,aAAa,EAAE,gBAAgB;AAC/B,IAAA,YAAY,EAAE,qBAAqB;AACnC,IAAA,aAAa,EAAE,oBAAoB;AACnC,IAAA,YAAY,EAAE,eAAe;AAC7B,IAAA,QAAQ,EAAE,uBAAuB;AACjC,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,mBAAmB;AAC7B,IAAA,QAAQ,EAAE,uBAAuB;AACjC,IAAA,QAAQ,EAAE,0BAA0B;AACpC,IAAA,eAAe,EAAE,mBAAmB;AACpC,IAAA,SAAS,EAAE,yBAAyB;AACpC,IAAA,YAAY,EAAE,wBAAwB;AACtC,IAAA,WAAW,EAAE,6BAA6B;AAC1C,IAAA,WAAW,EAAE;CACd;AAEM,MAAM,yBAAyB,GAAG,CAAC,CAAU,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAE5F;;AAEG;SACa,yBAAyB,GAAA;AACrC,IAAA,OAAO,uBAAuB;AAClC;AAEA;;;;AAIG;AACG,SAAU,cAAc,CAAC,KAAe,EAAE,IAAY,EAAA;IAC1D,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACrC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;;AAErC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAEtB,gBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACjB;iBAAO;;gBAEL,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACtF,gBAAA,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/B;YACF;QACF;aAAO;;YAEL,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;gBAC7B,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D;iBAAO;AACL,gBAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC;YACxC;QACF;IACF;SAAO;QACL,IAAI,GAAG,KAAK,CAAC;IACf;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;AAKG;SACa,aAAa,CAAC,QAAkB,IAAI,EAAE,eAAuB,IAAI,EAAA;AAC/E,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,IAAI;IACb;SAAO;;QAEL,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,KAAK,EAAE,EAAE;YAC/C,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1F,YAAA,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/D;AAEA,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,YAAY,CAAC;AAC1D,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;;YAEhB,KAAK,GAAG,CAAC;QACX;QACA,MAAM,QAAQ,GAAW,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;AACpE,QAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI;AAC/B,QAAA,OAAO,QAAQ;IACjB;AACF;AAEA;;AAEG;AACG,SAAU,aAAa,CAAC,QAAkB,EAAA;IAC9C,IAAI,UAAU,GAAG,CAAC;IAClB,QAAQ,QAAQ;QACd,KAAK,QAAQ,CAAC,MAAM;;AAElB,YAAA,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;YAC/B;QACF,KAAK,QAAQ,CAAC,MAAM;QACpB,KAAK,QAAQ,CAAC,SAAS;;AAErB,YAAA,UAAU,GAAG,IAAI,GAAG,IAAI;YACxB;QACF,KAAK,QAAQ,CAAC,UAAU;;YAEtB,UAAU,GAAG,OAAO;;AAExB,IAAA,OAAO,UAAU;AACnB;AACA;;AAEG;AACG,SAAU,cAAc,CAAC,KAAa,EAAE,IAAc,EAAA;IAC1D,QAAQ,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;AACrC;AAEA;;AAEG;AACG,SAAU,eAAe,CAAC,KAAa,EAAA;IAC3C,OAAO,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;AACzE;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAE,IAAc,EAAA;AAC/C,IAAA,OAAO,IAAI,KAAK,QAAQ,CAAC,SAAS,IAAI,IAAI,KAAK,QAAQ,CAAC,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC,UAAU;AACjG;AAEA;;AAEG;AACG,SAAU,eAAe,CAAC,KAAa,EAAA;;AAE3C,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,QAAA,OAAO,GAAG;IACZ;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,IAAA,IAAI,KAAK,IAAI,KAAK,EAAE;AAClB,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE;QACtB,OAAO,CAAC,GAAG,KAAK;IAClB;AACA,IAAA,IAAK,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE;QACvB,OAAO,CAAC,GAAG,KAAK;IAClB;IAEA,OAAO,EAAE,GAAG,KAAK;AACnB;AAEM,SAAU,WAAW,CAAC,IAAsB,EAAA;IAChD,IAAI,IAAI,EAAE;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;YACxC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;YAChE;AACA,YAAA,OAAO,KAAK;QACd,CAAC,CAAC,GAAG,CAAC;IACR;AACA,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,KAAK,CAAE,IAAY,EAAA;AACjC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5D;AAEM,SAAU,cAAc,CAAC,KAAK,EAAE,SAAS,EAAA;;;AAG7C,IAAA,IAAI,KAAK,IAAI,SAAS,EAAE;QACtB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE;QACrD,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,WAAW,IAAI;IAC7C;AACF;;ACxLA;;AAEG;AACH,SAAS,kBAAkB,CAAC,IAAsB,EAAA;IAChD,IAAI,IAAI,EAAE;AACR,QAAA,IAAI,SAAS,GAAG,aAAa,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC;QAEf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;AAC/B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,MAAM,gBAAgB,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,gBAAA,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC,SAAS,GAAG,gBAAgB,CAAC,SAAS,GAAG,SAAS;AAC3F,gBAAA,OAAO,GAAG,OAAO,GAAG,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,GAAG,OAAO;YACnF;AACF,QAAA,CAAC,CAAC;QAEF,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAC;IACjD;AACA,IAAA,OAAO,SAAS;AAClB;AAEA;;AAEG;AACH,SAAS,aAAa,CAAC,IAAc,EAAA;AACnC,IAAA,MAAM,sBAAsB,GAAG,yBAAyB,EAAE;IAC1D,IAAI,IAAI,EAAE;AACR,QAAA,IAAI,SAAS,GAAG,aAAa,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC;AAEf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;AACvB,QAAA,IAAI,GAAG,GAAG,sBAAsB,EAAE;AAChC,YAAA,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;YACrD,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,sBAAsB,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,sBAAsB,GAAG,CAAC,CAAC,GAAG,OAAO;QAC/G;QAEA,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAC;IACjD;IACA,OAAO,EAAC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAC;AACnC;SACgB,eAAe,GAAA;;AAE3B,IAAA,MAAM,YAAY,GAAG;QACnB,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;QACzF,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAC,WAAW;QAC3F,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW;QAC5E,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY;AAC/E,QAAA,YAAY,EAAE;KACf;IAED,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,qBAAqB,EAAE,CAAC;AACtD;AACA;;AAEG;SACW,qBAAqB,GAAA;AACnC,IAAA,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC;AACpG;AAEA;;AAEG;SACa,eAAe,GAAA;IAC7B,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;AACzD;AAEA;;;AAGG;SACa,kBAAkB,GAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;;IAEhD,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,eAAe,EAAE,CAAC;AACzC;AAEA;;;;;AAKG;AACG,SAAU,mBAAmB,CAAE,IAAY,EAAE,QAAgB,EAAA;IACjE,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7C,QAAQ,GAAG,eAAe,EAAE;AAC5B,QAAA,OAAO,CAAC,IAAI,CAAC,sEAAsE,QAAQ,CAAA,QAAA,CAAU,CAAC;IACxG;;IAEA,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;AAClD,IAAA,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;;AAEhE,IAAA,OAAO,IAAI,GAAG,SAAS,GAAG,aAAa;AACzC;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,QAAgB,EAAE,IAAY,EAAA;AACtD,IAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAC3B,IAAA,IAAI,MAAc;;IAElB,IAAI,qBAAqB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC9C,MAAM,GAAG,CAAC;IACZ;AAAO,SAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;;;QAGvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC;QACnD,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;YACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE;QACrD;aAAO;YACL,MAAM,GAAG,CAAC;QACZ;IACJ;SAAO;AACL,QAAA,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,EAAE;IACrE;AACA,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACG,SAAU,aAAa,CAAE,IAAY,EAAA;IACxC,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC;AACvD;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAAC,IAAS,EAAA;IAC1C,IAAI,eAAe,GAAG,KAAK;IAC3B,IAAI,aAAa,GAAG,KAAK;AACzB,IAAA,IAAI,SAAS;AACb,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,QAAA,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC;IACjC;SAAO;AACL,QAAA,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC;IACtC;IAEA,IAAI,SAAS,EAAE;AACb,QAAA,IAAI,SAAS,CAAC,SAAS,GAAG,aAAa,EAAE;AACvC,YAAA,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC;QACtD;AAEA,QAAA,IAAI,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE;AACzB,YAAA,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC;QAClD;AACA,QAAA,OAAO,CAAA,EAAG,eAAe,CAAA,GAAA,EAAM,aAAa,EAAE;IAChD;AACA,IAAA,OAAO,WAAW;AACpB;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAAC,SAAe,EAAE,IAAY,EAAA;IAC9D,IAAI,SAAS,EAAE,EAAE;;AAEf,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;AAC5B,QAAA,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI;QACtE,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAA,gBAAA,EAAmB,WAAW,CAAA,QAAA,CAAU,CAAC;IAC9D;AACF;;ACvKA,MAAM,aAAa,GAAG,SAAS;AAE/B;;AAEG;SACa,cAAc,GAAA;AAC5B,IAAA,OAAO,aAAa;AACtB;AAEA;;;AAGG;AACG,SAAU,sBAAsB,CAAC,QAAgB,EAAA;AACrD,IAAA,OAAO,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,GAAA,EAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;AACnH;AAEA;;AAEG;AACG,SAAU,OAAO,CAAC,IAAY,EAAA;AAClC,IAAA,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,aAAa,GAAG,IAAI;AACjE;AAEA;;AAEG;SACa,YAAY,CAAC,KAAe,EAAE,iBAA0B,KAAK,EAAA;AAC3E,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;IACA,IAAI,cAAc,EAAE;AAClB,QAAA,OAAO,KAAK;IACd;SAAO;AACL,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,CAAC;IACrD;AACF;AAEA;;;AAGG;AACG,SAAW,gBAAgB,CAAC,WAAgB,EAAA;AAChD,IAAA,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,QAAA,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACG,SAAU,eAAe,CAAC,SAAc,EAAA;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,IAAI,SAAS,CAAC,KAAK,EAAE;AACnB,YAAA,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACzB;aAAO;AACL,YAAA,IAAI,SAAS,CAAC,IAAI,EAAE;AAClB,gBAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;YACzB;QACF;AACF,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;;AAMG;SACa,UAAU,CAAC,YAAoB,EAAE,iBAAyB,EAAE,KAAc,EAAA;;AAExF,IAAA,IAAI,KAAK,IAAI,YAAY,KAAK,aAAa,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;;IAEA,IAAI,iBAAiB,IAAI,IAAI,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/D,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,YAAY,KAAK,iBAAiB,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrG;AAEA;;;AAGG;AACG,SAAU,UAAU,CAAC,KAAW,EAAE,KAAW,EAAA;AACjD,IAAA,IAAI,KAAK,IAAI,KAAK,EAAE;QAClB,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;AACvG,YAAA,OAAO,IAAI;QACb;IACF;AACA,IAAA,OAAO,KAAK;AACd;AAEA;;AAEG;AACG,SAAU,WAAW,CAAC,IAAY,EAAA;AACtC,IAAA,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AACrD;AAEA;;;AAGG;AACG,SAAU,cAAc,CAAC,SAAiB,EAAE,SAAiB,EAAA;;;IAGjE,IAAI,QAAQ,GAAG,SAAS;IACxB,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,QAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACxB,YAAA,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD;AAAO,aAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC/B,YAAA,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD;aAAO;AACL,YAAA,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;QAClC;IACF;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA;;;AAGG;SACa,mBAAmB,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAA;;;IAGxF,IAAI,QAAQ,GAAG,SAAS;IACxB,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,QAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAChD,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;QACjE;aAAO;AACL,YAAA,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC;QACjD;IACF;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA;;AAEG;AACG,SAAU,YAAY,CAAC,IAAgB,EAAA;AAC3C,IAAA,OAAO,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpG;AAEA;;;;AAIG;AACG,SAAU,UAAU,CAAE,OAAa,EAAE,QAAgB,EAAA;IACzD,MAAM,IAAI,GAAQ,OAAO;;AAEzB,IAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE;AAClC,IAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;;AAGpB,IAAA,OAAa,OAAO;AACtB;AAEA;;;AAGG;AACG,SAAU,MAAM,CAAC,GAAG,EAAA;IACxB,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;AAC5C;;ACnJA;AACA;MAEa,SAAS,CAAA;AADtB,IAAA,WAAA,GAAA;QAEmB,IAAA,CAAA,sBAAsB,GAAa,CAAC,SAAS,EAAE,oBAAoB,EAAE,SAAS,CAAC;QAC/E,IAAA,CAAA,cAAc,GAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;AAC/D,QAAA,IAAA,CAAA,gBAAgB,GAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;QACnF,IAAA,CAAA,iBAAiB,GAAG,EAAE;AAyjB/B,IAAA;AAvjBC;;AAEG;AACI,IAAA,OAAO,SAAS,CAAC,KAAA,GAAgB,IAAI,EAAA;AAC1C,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,KAAK,GAAG,GAAG;QACb;QACA,OAAO;AACL,YAAA,OAAO,EAA0B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,cAAc,EAAmB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACtE,YAAA,UAAU,EAAuB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AACpE,YAAA,WAAW,EAAsB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,UAAU,EAAuB,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,QAAQ,EAAyB,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACtE,YAAA,QAAQ,EAAyB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACtE,YAAA,SAAS,EAAwB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,UAAU,EAAuB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,MAAM,EAA2B,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;AACrE,YAAA,OAAO,EAA0B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,cAAc,EAAmB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,iBAAiB,EAAgB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,kBAAkB,EAAe,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACpE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpE,YAAA,kBAAkB,EAAe,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AACtE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,iBAAiB,EAAgB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,cAAc,EAAmB,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,eAAe,EAAkB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,eAAe,EAAkB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,oBAAoB,EAAa,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,oBAAoB,EAAa,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,gBAAgB,EAAiB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;AACvE,YAAA,eAAe,EAAkB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AACpE,YAAA,aAAa,EAAoB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,QAAQ,EAAyB,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,QAAQ,EAAyB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACtE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,OAAO,EAA0B,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACtE,YAAA,WAAW,EAAsB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,aAAa,EAAoB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACtE,YAAA,UAAU,EAAuB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,WAAW,EAAsB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACtE,YAAA,kBAAkB,EAAe,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACpE,YAAA,cAAc,EAAmB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,YAAY,EAAqB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,kBAAkB,EAAe,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,iBAAiB,EAAgB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,aAAa,EAAoB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,aAAa,EAAoB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,YAAY,EAAqB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;AACtE,YAAA,YAAY,EAAqB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACtE,YAAA,YAAY,EAAqB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACtE,YAAA,YAAY,EAAqB,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,WAAW,EAAsB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AACpE,YAAA,WAAW,EAAsB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;AACvE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;AACtE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;AACvE,YAAA,kBAAkB,EAAe,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AACpE,YAAA,kBAAkB,EAAe,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,mBAAmB,EAAc,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC;AACvE,YAAA,2BAA2B,EAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,yBAAyB,EAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AACxE,YAAA,2BAA2B,EAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AACtE,YAAA,+BAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC;AACvE,YAAA,wBAAwB,EAAS,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;SACzE;IACH;AAEQ,IAAA,WAAW,SAAS,GAAA;QAC1B,MAAM,QAAQ,GAAG,EAAE;QACnB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM;QACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM;QACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM;QACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM;QACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM;QACnC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS;QAC5C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,UAAU;QAC9C,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,OAAO;QAC5C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO;QAC3C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO;AAC3C,QAAA,OAAO,QAAQ;IACjB;AAEA;;AAEG;AACK,IAAA,WAAW,gBAAgB,GAAA;AACjC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3G;AAEA;;;AAGG;AACK,IAAA,OAAO,4BAA4B,CAAC,GAAG,IAAI,EAAA;QACjD,MAAM,GAAG,GAAG,EAAE;QACd,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;YAClB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ;AAEA;;AAEG;AACK,IAAA,OAAO,wBAAwB,GAAA;;AAErC,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,4BAA4B,CAAC;AACxD,QAAA,MAAM,OAAO,GAA2B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAyB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;AAC5S,QAAA,MAAM,cAAc,GAAoB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,CAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,6CAA6C,CAAC,CAAC;AAC9T,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC;AACzT,QAAA,MAAM,UAAU,GAAwB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;AACrT,QAAA,MAAM,WAAW,GAAuB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,2BAA2B,CAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,4DAA4D,CAAC,CAAC;AAC7U,QAAA,MAAM,UAAU,GAAwB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;AACvS,QAAA,MAAM,QAAQ,GAA0B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAC5R,QAAA,MAAM,QAAQ,GAA0B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAC5R,QAAA,MAAM,SAAS,GAAyB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAkB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;AAC3T,QAAA,MAAM,UAAU,GAAwB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAiB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,2CAA2C,CAAC,CAAC;AAC5T,QAAA,MAAM,MAAM,GAA4B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAqB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,6FAA6F,CAAC,CAAC;AAC9W,QAAA,MAAM,OAAO,GAA2B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAoB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,+FAA+F,CAAC,CAAC;AAChX,QAAA,MAAM,cAAc,GAAoB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAiB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;AACtS,QAAA,MAAM,iBAAiB,GAAiB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAkB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;AACvT,QAAA,MAAM,kBAAkB,GAAgB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAiB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AACzS,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,yBAAyB,CAAK,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;AACtT,QAAA,MAAM,kBAAkB,GAAgB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAqB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AACzS,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,oIAAoI,CAAC,CAAC;AACrZ,QAAA,MAAM,iBAAiB,GAAiB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAa,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iGAAiG,CAAC,CAAC;AAClX,QAAA,MAAM,cAAc,GAAoB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAY,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;AACjT,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;AAC1T,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;AAC1T,QAAA,MAAM,eAAe,GAAmB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAY,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;AACtT,QAAA,MAAM,eAAe,GAAmB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,CAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;AAClT,QAAA,MAAM,oBAAoB,GAAc,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,CAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;AAClT,QAAA,MAAM,oBAAoB,GAAc,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,CAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;AAClT,QAAA,MAAM,gBAAgB,GAAkB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,CAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;AAC9S,QAAA,MAAM,eAAe,GAAmB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;AACrT,QAAA,MAAM,aAAa,GAAqB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAkB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;AACpT,QAAA,MAAM,QAAQ,GAA0B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,kDAAkD,CAAC,CAAC;AACnU,QAAA,MAAM,QAAQ,GAA0B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,uDAAuD,CAAC,CAAC;AACxU,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;AACrT,QAAA,MAAM,OAAO,GAA2B,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAa,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;AACjT,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;AAClT,QAAA,MAAM,WAAW,GAAuB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAe,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC;AACnT,QAAA,MAAM,aAAa,GAAqB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iDAAiD,CAAC,CAAC;AAClU,QAAA,MAAM,UAAU,GAAwB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AAC3S,QAAA,MAAM,WAAW,GAAuB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AAC3S,QAAA,MAAM,kBAAkB,GAAgB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AAC3S,QAAA,MAAM,cAAc,GAAoB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAa,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;AAC5S,QAAA,MAAM,YAAY,GAAsB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAe,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;AAC1S,QAAA,MAAM,kBAAkB,GAAgB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAS,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;AAChT,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;AACjT,QAAA,MAAM,iBAAiB,GAAiB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAU,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;AAC/S,QAAA,MAAM,aAAa,GAAqB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAa,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAC;AAC7S,QAAA,MAAM,aAAa,GAAqB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAa,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;AACrT,QAAA,MAAM,YAAY,GAAsB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;AAC5S,QAAA,MAAM,YAAY,GAAsB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;AACpT,QAAA,MAAM,YAAY,GAAsB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;AAC5S,QAAA,MAAM,YAAY,GAAsB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;AACvT,QAAA,MAAM,WAAW,GAAuB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAe,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AAC3S,QAAA,MAAM,WAAW,GAAuB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAe,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;AACtT,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;AAC/S,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;AACvT,QAAA,MAAM,kBAAkB,GAAgB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;AAC9S,QAAA,MAAM,kBAAkB,GAAgB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;AACtT,QAAA,MAAM,mBAAmB,GAAe,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAY,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;AAClT,QAAA,MAAM,2BAA2B,GAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,4BAA4B,CAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;AAC3T,QAAA,MAAM,yBAAyB,GAAS,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0DAA0D,CAAC,CAAC;AAC3U,QAAA,MAAM,2BAA2B,GAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0DAA0D,CAAC,CAAC;AAC3U,QAAA,MAAM,+BAA+B,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAY,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,+DAA+D,CAAC,CAAC;AAChV,QAAA,MAAM,wBAAwB,GAAU,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,uEAAuE,CAAC,CAAC;AACxV,QAAA,MAAM,4BAA4B,GAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0DAA0D,CAAC,CAAC;AAC3U,QAAA,MAAM,4BAA4B,GAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,0DAA0D,CAAC,CAAC;AAC3U,QAAA,MAAM,4BAA4B,GAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,iEAAiE,CAAC,CAAC;;AAGnV,QAAA,MAAM,mBAAmB,GAAwB;AAC/C,YAAA,OAAO,EAA2B,OAAO;AACzC,YAAA,cAAc,EAAoB,cAAc;AAChD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,UAAU,EAAwB,UAAU;AAC5C,YAAA,WAAW,EAAuB,WAAW;AAC7C,YAAA,UAAU,EAAwB,UAAU;AAC5C,YAAA,QAAQ,EAA0B,QAAQ;AAC1C,YAAA,QAAQ,EAA0B,QAAQ;AAC1C,YAAA,SAAS,EAAyB,SAAS;AAC3C,YAAA,UAAU,EAAwB,UAAU;AAC5C,YAAA,MAAM,EAA4B,MAAM;AACxC,YAAA,OAAO,EAA2B,OAAO;SAC1C;;AAED,QAAA,MAAM,0BAA0B,GAA+B;AAC7D,YAAA,cAAc,EAAoB,cAAc;AAChD,YAAA,iBAAiB,EAAiB,iBAAiB;AACnD,YAAA,kBAAkB,EAAgB,kBAAkB;AACpD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,kBAAkB,EAAgB,kBAAkB;AACpD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,iBAAiB,EAAiB,iBAAiB;SACpD;;AAED,QAAA,MAAM,kBAAkB,GAAuB;AAC7C,YAAA,cAAc,EAAoB,cAAc;AAChD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,eAAe,EAAmB,eAAe;AACjD,YAAA,eAAe,EAAmB,eAAe;AACjD,YAAA,oBAAoB,EAAc,oBAAoB;AACtD,YAAA,oBAAoB,EAAc,oBAAoB;AACtD,YAAA,gBAAgB,EAAkB,gBAAgB;AAClD,YAAA,eAAe,EAAmB,eAAe;AACjD,YAAA,aAAa,EAAqB,aAAa;AAC/C,YAAA,QAAQ,EAA0B,QAAQ;AAC1C,YAAA,QAAQ,EAA0B,QAAQ;AAC1C,YAAA,mBAAmB,EAAe,mBAAmB;SACtD;;AAED,QAAA,MAAM,uBAAuB,GAA4B;AACvD,YAAA,OAAO,EAA2B,OAAO;AACzC,YAAA,mBAAmB,EAAe,mBAAmB;SACtD;;AAED,QAAA,MAAM,0BAA0B,GAA+B;AAC7D,YAAA,WAAW,EAAuB,WAAW;AAC7C,YAAA,aAAa,EAAqB,aAAa;AAC/C,YAAA,UAAU,EAAwB,UAAU;AAC5C,YAAA,WAAW,EAAuB,WAAW;SAC9C;;AAED,QAAA,MAAM,sBAAsB,GAA2B;AACrD,YAAA,kBAAkB,EAAgB,kBAAkB;AACpD,YAAA,cAAc,EAAoB,cAAc;AAChD,YAAA,YAAY,EAAsB,YAAY;AAC9C,YAAA,kBAAkB,EAAgB,kBAAkB;AACpD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,iBAAiB,EAAiB,iBAAiB;SACpD;;AAED,QAAA,MAAM,0BAA0B,GAA+B;AAC7D,YAAA,aAAa,EAAqB,aAAa;AAC/C,YAAA,aAAa,EAAqB,aAAa;AAC/C,YAAA,YAAY,EAAsB,YAAY;AAC9C,YAAA,YAAY,EAAsB,YAAY;AAE9C,YAAA,YAAY,EAAsB,YAAY;AAC9C,YAAA,YAAY,EAAsB,YAAY;AAC9C,YAAA,WAAW,EAAuB,WAAW;AAC7C,YAAA,WAAW,EAAuB,WAAW;SAC9C;;AAED,QAAA,MAAM,qBAAqB,GAA0B;AACnD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,kBAAkB,EAAgB,kBAAkB;AACpD,YAAA,kBAAkB,EAAgB,kBAAkB;SACrD;;AAED,QAAA,MAAM,wCAAwC,GAAkC;AAC9E,YAAA,mBAAmB,EAAe,mBAAmB;AACrD,YAAA,2BAA2B,EAAO,2BAA2B;SAC9D;;AAED,QAAA,MAAM,sCAAsC,GAA2C;AACrF,YAAA,yBAAyB,EAAS,yBAAyB;AAC3D,YAAA,2BAA2B,EAAO,2BAA2B;AAC7D,YAAA,+BAA+B,EAAG,+BAA+B;AACjE,YAAA,wBAAwB,EAAU,wBAAwB;AAC1D,YAAA,4BAA4B,EAAM,4BAA4B;AAC9D,YAAA,4BAA4B,EAAM,4BAA4B;AAC9D,YAAA,4BAA4B,EAAM,4BAA4B;SAC/D;QAED,OAAO;AACL,YAAA,MAAM,EAAE,mBAAmB;AAC3B,YAAA,SAAS,EAAE,0BAA0B;AACrC,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,WAAW,EAAE,uBAAuB;AACpC,YAAA,cAAc,EAAE,0BAA0B;AAC1C,YAAA,SAAS,EAAE,sBAAsB;AACjC,YAAA,aAAa,EAAE,0BAA0B;AACzC,YAAA,QAAQ,EAAE,qBAAqB;AAC/B,YAAA,4BAA4B,EAAE,wCAAwC;AACtE,YAAA,2BAA2B,EAAE;SAC9B;IACH;AAEA;;AAEG;IACK,OAAO,YAAY,CAAC,GAAW,EAAE,KAAa,EAAE,IAAY,EAAE,KAAa,EAAA;AACjF,QAAA,OAAO,EAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC;IAC3D;AAEQ,IAAA,OAAO,iBAAiB,CAAC,IAAS,EAAE,MAAc,EAAA;AACxD,QAAA,OAAO,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACvG;IAEQ,OAAO,mBAAmB,CAAC,UAAe,EAAA;QAChD,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,UAAU,EAAE;YACd,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAI;AAC5C,gBAAA,OAAO,OAAO,CAAC,GAAG,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,QAAQ;YACxD,CAAC,EAAE,CAAC,CAAC;QACP;AACA,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,mBAAmB,CAAC,IAAY,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,wBAAwB,EAAE;QACrE;AACA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IACrC;IAEQ,kBAAkB,CAAC,OAAe,EAAE,IAAY,EAAA;QACtD,MAAM,iBAAiB,GAAwB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;QAChF,IAAI,iBAAiB,EAAE;AACrB,YAAA,IAAI,IAAI,GAAG,iBAAiB,CAAC,IAAI;YACjC,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,EAAE;YACX;AACA,YAAA,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;QAClC;AACA,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB;AAEQ,IAAA,YAAY,CAAE,GAAW,EAAE,QAA6B,EAAE,IAAc,EAAE,IAAY,EAAA;QAC5F,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;QACvD,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;AAC5D,YAAA,iBAAiB,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC;;AAExE,YAAA,iBAAiB,CAAC,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG;AAC9F,YAAA,iBAAiB,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC;QACjE;IACF;AAEA;;AAEG;AACK,IAAA,qCAAqC,CAAC,GAA2B,EAAE,GAAW,EAAE,IAAc,EAAE,IAAY,EAAA;AAClH,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;YAC3B,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,QAAQ,GAAwB,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAC;AAC3E,gBAAA,MAAM,kBAAkB,GAAG,yBAAyB,EAAE;gBACtD,IAAI,YAAY,GAAG,CAAC;;gBAEpB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,KAAI;;oBAErC,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC,EAAE;wBAChD,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC3B,4BAAA,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;4BACjD,QAAQ,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,4BAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAC3B,gCAAA,IAAI,KAAK,KAAK,CAAC,EAAE;;AAEf,oCAAA,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;gCACxB;qCAAO;;AAEL,oCAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;oCAC5D,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC;gCAChF;4BACF;AACA,4BAAA,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BAExD,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;gCACrC,QAAQ,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;4BACnC;wBACF;6BAAO;;AAEL,4BAAA,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;;AAEtB,4BAAA,YAAY,EAAE;wBAChB;oBACF;AACF,gBAAA,CAAC,CAAC;gBAEF,IAAI,GAAG,CAAC,MAAM,KAAK,kBAAkB,GAAG,YAAY,CAAC,EAAE;AACrD,oBAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;wBAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACxE,QAAQ,CAAC,OAAO,GAAG,UAAU,KAAK,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC;oBAC7F;yBAAO;wBACL,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,GAAG,kBAAkB,GAAG,YAAY;wBACrE,QAAQ,CAAC,OAAO,GAAG,cAAc,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC;oBAC5F;AACA,oBAAA,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC1D,QAAQ,CAAC,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC5C,QAAQ,CAAC,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;;oBAG5C,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,kBAAkB;gBAC9C;gBACA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;YAC9C;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;AACK,IAAA,+BAA+B,CAAC,IAAY,EAAA;QAClD,MAAM,WAAW,GAAG,EAAE;QACtB,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAEtD,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;AAC/C,YAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;gBACzD,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;AACvD,gBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE;AAChC,oBAAA,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE;gBAClC;gBACA,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;IACpB;IAEQ,iBAAiB,CAAC,UAAe,EAAE,KAAiB,EAAA;QAC1D,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,KAAK,KAAK,UAAU,CAAC,OAAO,EAAE;AAChC,gBAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9G;iBAAO;gBACL,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBACzE,UAAU,CAAC,OAAO,CAAC,IAAI,IAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5F;QACF;IACF;IAEQ,aAAa,CAAC,GAAW,EAAE,IAAY,EAAA;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACtD,KAAM,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACnD,YAAA,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;AACnC,gBAAA,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;YACtC;QACF;IACF;AAEA;;AAEG;IACI,qBAAqB,GAAA;AAC1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA;;AAEG;AACI,IAAA,qBAAqB,CAAC,UAAoB,EAAE,IAAY,EAAE,mBAA6B,EAAA;QAC5F,MAAM,IAAI,GAAU,EAAE;QACtB,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAEtD,QAAA,MAAM,YAAY,GAAG,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAAC,sBAAsB;QAE9H,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;iBAChD,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBAChD,GAAG,CAAC,QAAQ,IAAG;gBACd,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,KAAK;AACnD,gBAAA,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC9E,gBAAA,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;YAC/C,CAAC,CAAC,CAAC;AACH,YAAA,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE;;gBAEvB,IAAI,CAAC,GAAG,EAAE;YACZ;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;AACI,IAAA,gBAAgB,CAAC,kBAA4B,EAAA;;QAElD,MAAM,WAAW,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;AACzH,QAAA,OAAO,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,cAAc;IACpF;AAEA;;AAEG;IACI,SAAS,CAAC,IAAc,EAAE,IAAY,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAG;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;YAC1C,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACjC,gBAAA,QAAQ,EAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAC;YACpC;iBAAO;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA,mBAAA,CAAqB,CAAC;AACzC,gBAAA,OAAO,IAAI;YACb;AACF,QAAA,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAE;IAChC;AAEA;;;;;AAKG;AACI,IAAA,eAAe,CAAC,UAAoB,EAAE,IAAY,EAAE,mBAA6B,EAAA;AACtF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,EAAE,mBAAmB,CAAC;QACxF,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;IACtE;AAEA;;AAEG;IACI,SAAS,CAAC,IAAc,EAAE,IAAY,EAAA;QAC3C,MAAM,OAAO,GAAG,EAAE;QAClB,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1D,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,OAAO;IAChB;AAEA;;AAEG;AACI,IAAA,cAAc,CAAC,IAAY,EAAA;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC;AAC9D,QAAA,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,IAAG;AACzC,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC;YACvC,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC;YAC7C;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;AACI,IAAA,iCAAiC,CAAC,IAA8B,EAAE,MAAgB,EAAE,IAAY,EAAA;QACrG,MAAM,QAAQ,GAAG,EAAE;AACnB,QAAA,IAAI,IAAI,IAAI,MAAM,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;gBAC1B,IAAI,GAAG,EAAE;;AAEP,oBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC;AACnD,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrF;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9B;8GA5jBW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAT,SAAS,EAAA,CAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB;;;ACHD;AACA,KAAK,CAAC,QAAQ,CACZ,GAAG,aAAa,EAChB,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,CACX;AAED,MAAM,oBAAoB,GAAG,GAAG;MAGnB,YAAY,CAAA;AAGvB;;AAEG;AACK,IAAA,OAAO,cAAc,CAAC,YAAoB,EAAE,KAAY,EAAE,MAAe,EAAA;;;;;;;QAO/E,IAAI,YAAY,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;YAC/C,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,MAAM,EAAE;;oBAEX,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM;gBACzE;qBAAO;AACL,oBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;gBACtB;YACF;QACF;IACF;AAEQ,IAAA,OAAO,qBAAqB,CAAC,KAAY,EAAE,YAAoB,EAAE,MAAqD,EAAA;QAC5H,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,MAAM,EAAE;AAC9F,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa;YAC/D,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU;QAC/D;IACF;AAEA;;AAEG;IACK,OAAO,WAAW,CAAC,KAAU,EAAA;;AAEnC,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AAC9B,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC5B,YAAA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACrB;;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;AACzB,YAAA,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;AAC7B,YAAA,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB;IACF;AAEA;;AAEG;IACK,OAAO,iBAAiB,CAAC,IAA8B,EAAE,MAAgB,EAAE,SAAmB,EAAE,YAAsB,EAAE,MAAgB,EAAA;QAC9I,MAAM,KAAK,GAAG,GAAG;QACjB,MAAM,MAAM,GAAgB,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAC1B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;;AAE9F,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;;;;;;AAMrB,gBAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9C,oBAAA,MAAM,EAAE,GAAQ,IAAI,CAAC,CAAC,CAAC;AACvB,oBAAA,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE;AACd,wBAAA,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AACnB,wBAAA,EAAE,CAAC,CAAC,GAAG,GAAG;oBACZ;gBACF;YACF;YAEA,OAAO;AACL,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,CAAA,OAAA,EAAU,CAAC,CAAA,CAAE;gBACtB,MAAM,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzC,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,cAAc,EAAE,CAAC;AACjB,gBAAA,gBAAgB,EAAE,CAAC;;AAEnB,gBAAA,OAAO,EAAE,GAAG;;AAEZ,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,UAAU,EAAE;aACb;AACH,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,OAAO,eAAe,CAAC,SAAmB,EAAE,IAA8B,EAAE,WAAqB,EAAA;AACvG,QAAA,MAAM,MAAM,GAAQ;AAClB,YAAA,CAAC,EAAE;AACD,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE;AACJ,oBAAA,cAAc,EAAE;AACd,wBAAA,aAAa,EAAE,gBAAgB;AAC/B,wBAAA,QAAQ,EAAE,gBAAgB;AAC1B,wBAAA,QAAQ,EAAE,aAAa;AACvB,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,MAAM,EAAE,OAAO;AACf,wBAAA,OAAO,EAAE,UAAU;AACnB,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,MAAM,EAAE,UAAU;AACnB,qBAAA;AACD,oBAAA,aAAa,EAAE;AAChB,iBAAA;AACD,gBAAA,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;gBACjB,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,gBAAA,KAAK,EAAE;AACL,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,QAAQ,EAAE,IAAI;oBACd,eAAe,EAAE,EAAE;AACpB,iBAAA;AACD,gBAAA,OAAO,EAAE;AACV;SACF;;QAGD,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACvB,YAAA,MAAM,CAAC,CAAA,OAAA,EAAU,CAAC,CAAA,CAAE,CAAC,GAAG;AACtB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE;AACJ,oBAAA,eAAe,EAAE,CAAC,KAAK,CAAC;AACzB,iBAAA;AACD,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,GAAG,EAAE,WAAW,CAAC,CAAC;aACnB;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACK,OAAO,oBAAoB,CAAC,IAAc,EACd,IAA8B,EAC9B,MAAgB,EAChB,MAAgB,EAChB,SAAmB,EACnB,SAA8B,EAC9B,WAAgB,EAChB,KAAa,EACb,YAAsB,EACtB,YAAiB,EAAA;QACnD,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE;AACJ,gBAAA,QAAQ,EAAE,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM;AACvF,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE;wBACP,KAAK,EAAE,EAAE;AACV;AACF,iBAAA;AACD,gBAAA,WAAW,EAAE;oBACX,SAAS,EAAE,IAAI;AACf,oBAAA,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,OAAO;AACd,iBAAA;AACD,gBAAA,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,KAAK;AAChB,gBAAA,OAAO,EAAE,CAAC,KAAU,EAAE,QAAa,KAAI;oBACrC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM;oBACnD,IAAI,MAAM,EAAE;AACT,wBAAA,MAAsB,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS;oBACrF;gBACF,CAAC;AACD,gBAAA,QAAQ,EAAE,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAC;AAC9D,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,QAAQ,EAAE,EAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAC,EAAC;AAC3E,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE;AACN,wBAAA,QAAQ,EAAE,QAAQ;AAClB,wBAAA,OAAO,EAAE,CAAC,KAAU,EAAE,UAAe,KAAI;4BACvC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM;4BACnD,IAAI,MAAM,EAAE;AACT,gCAAA,MAAsB,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;4BAClD;wBACF,CAAC;AACD,wBAAA,MAAM,EAAE;4BACN,MAAM,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC;AAClG;AACF,qBAAA;AACD,oBAAA,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,IAAI;AACb,wBAAA,IAAI,EAAE;AACP,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,SAAS;wBACf,SAAS,EAAE,IAAI;AACf,wBAAA,SAAS,EAAE;4BACT,KAAK,EAAE,UAAS,OAAO,EAAA;;gCAErB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;gCACzC,IAAI,KAAK,EAAE;;AAET,oCAAA,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe,IAAI,KAAK,KAAK,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE;AACxF,oCAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;AAExH,oCAAA,MAAM,WAAW,GAAI,OAAO,CAAC,GAAW,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;oCACvE,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,mBAAmB,CAAC,WAAW,CAAC,CAAA,EAAG,IAAI,CAAA,CAAE;gCAC/D;qCAAO;;AAEL,oCAAA,MAAM,WAAW,GAAI,OAAO,CAAC,GAAW,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;AACvE,oCAAA,OAAO,mBAAmB,CAAC,WAAW,CAAC;gCACzC;4BACF;AACD;AACF,qBAAA;;AAED,oBAAA,UAAU,EAAE;AACV,wBAAA,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,MAAM;wBACjB,OAAO,EAAE,GAAG;wBACZ,SAAS,EAAE,CAAC;AACb,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,MAAM,EAAE;AACN,4BAAA,CAAC,EAAE;AACD,gCAAA,GAAG,EAAE,UAAU;AACf,gCAAA,GAAG,EAAE,UAAU;;AAEhB;AACF,yBAAA;AACD,wBAAA,GAAG,EAAE;AACH,4BAAA,OAAO,EAAE,IAAI;AACb,4BAAA,IAAI,EAAE,GAAG;AACT,4BAAA,WAAW,EAAE;AACd,yBAAA;AACD,wBAAA,IAAI,EAAE;;;;;;;;AAQJ,4BAAA,IAAI,EAAE;AACJ,gCAAA,OAAO,EAAE,IAAI;AACb,gCAAA,SAAS,EAAE,EAAE;AACb,gCAAA,QAAQ,EAAE;AACX,6BAAA;AACD,4BAAA,IAAI,EAAE,GAAG;AACT,4BAAA,MAAM,EAAE,YAAY;AACpB,4BAAA,cAAc,GAAG,OAAO,IAAG;AACzB,gCAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK;AAC5B,gCAAA,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;oCAC1B;gCACF;;gCAEA,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAC;gCAC9G,MAAM,WAAW,GAAG,qBAAqB,GAAG,CAAC,GAAG,CAAC;gCACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAY,KAAI;AAC3C,oCAAA,OAAO,CAAC,WAAW,GAAG,WAAW;AACnC,gCAAA,CAAC,CAAC;gCAEF,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;oCAClC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;gCACnD;gCACA,KAAK,CAAC,MAAM,EAAE;AAChB,4BAAA,CAAC;AACF;AACF;AACF,iBAAA;gBACD,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM;AACxD;SACF;IACH;IAEQ,uBAAuB,CAAC,KAAa,EAAE,KAAY,EAAA;QACzD,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;AACrC,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;QAC1E;QACA,OAAO,CAAC,CAAC;IACX;AAEA;;;;AAIG;AACK,IAAA,uBAAuB,CAAC,KAAY,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,gBAAgB,GAAG,CAAC,KAAiB,KAAI;AAC7C,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;YAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;YACnC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;;AAGlC,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;YACjC,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,aAAa,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK;oBAC5C,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG;;AAGhE,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM;gBAC/B,IAAI,cAAc,GAAG,KAAK;AAC1B,gBAAA,IAAI,UAAU,IAAK,UAAkB,CAAC,cAAc,EAAE;oBACpD,cAAc,GAAI,UAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAW,KACnE,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK;AACnD,wBAAA,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CACnD;gBACH;AAEA,gBAAA,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE;;AAErC,oBAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,wBAAA,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC;oBACnD;;AAEA,oBAAA,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;AAC3B,oBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACpB,oBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;gBACjC;YACF;AACF,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC;;AAGrD,QAAA,KAAa,CAAC,iBAAiB,GAAG,gBAAgB;IACrD;AAEA;;;;AAIG;AACK,IAAA,yBAAyB,CAAC,KAAY,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,gBAAgB,GAAI,KAAa,CAAC,iBAAiB;AACzD,QAAA,IAAI,MAAM,IAAI,gBAAgB,EAAE;AAC9B,YAAA,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,CAAC;QAC3D;IACF;AAEA;;AAEG;AACK,IAAA,aAAa,CAAC,KAAY,EAAA;AAChC,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,KAAK,EAAE;;AAET,gBAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;gBACrC,KAAK,CAAC,OAAO,EAAE;YACjB;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,KAAY,EAAA;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,OAAO,EAAE;YACX;iBAAO;gBACL,MAAM,CAAC,0DAA0D,CAAC;YACpE;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACK,IAAA,UAAU,CAAC,KAAU,EAAA;QAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI,KAAK,EAAE;gBACT,MAAM,wBAAwB,GAAG,EAAE;gBACnC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;AACrC,oBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;wBAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;wBACxC,IAAI,IAAI,EAAE;AACR,4BAAA,wBAAwB,CAAC,KAAK,CAAC,GAAG,EAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAC;wBAC5F;6BAAO;AACL,4BAAA,MAAM,CAAC,CAAA,sCAAA,EAAyC,KAAK,CAAA,CAAA,CAAG,CAAC;wBAC3D;AACF,oBAAA,CAAC,CAAC;gBACJ;;AAEA,gBAAA,IAAI,KAAK,CAAC,SAAS,EAAE;oBACnB,KAAK,CAAC,SAAS,EAAE;gBACnB;gBACA,OAAO,CAAC,wBAAwB,CAAC;YACnC;iBAAO;gBACL,MAAM,CAAC,2DAA2D,CAAC;YACrE;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;IACI,UAAU,CAAC,cAAmB,EAAE,SAA8B,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB,KAAI;;AAEnE,YAAA,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACtD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBAC9B,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;gBACvD;qBAAO;AACL,oBAAA,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC,CAAC;gBACxF;AACF,YAAA,CAAC,CAAC;YACF,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACI,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAK;AAC/C,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACtB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,UAAU,CAAC,IAAc,EACd,IAA8B,EAC9B,MAAgB,EAChB,MAAgB,EAChB,SAAmB,EACnB,SAA8B,EAC9B,WAAgB,EAChB,KAAa,EACb,YAAsB,EACtB,MAAM,EAAA;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,GAAG,GAAwB,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAE,EAAE,UAAU,CAAC,IAAI,CAAC;YACrG,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;;AAE3J,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,gBAAA,OAAO,EAAE;YACX;iBAAO;gBACL,MAAM,CAAC,0BAA0B,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACI,iBAAiB,CAAC,KAAa,EAAE,IAAa,EAAA;AACnD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;YAChG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,QAAA,CAAC,CAAC;IACJ;8GAzdW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAZ,YAAY,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;AC3BD;;;AAGG;AACH,MAAM,2BAA2B,GAAG,MAAM;MAG7B,WAAW,CAAA;AACtB;;;AAGG;AACK,IAAA,OAAO,qBAAqB,CAAC,UAAA,GAAkB,IAAI,EAAA;AACzD,QAAA,IAAI,UAAU,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACtE,YAAA,OAAO,2BAA2B;QACpC;AACA,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B;AAEA;;AAEG;AACK,IAAA,OAAO,SAAS,CAAC,IAAgB,EAAE,UAAmB,EAAE,KAAe,EAAA;QAC7E,IAAI,IAAI,GAAG,CAAC;QACZ,IAAI,UAAU,EAAE;;YAEd,IAAI,GAAG,CAAC;QACV;QAEA,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,gBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAC3D,oBAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtB;YACF;QACF;IACF;AAEA;;;;;;;;;;;;;AAaG;IACK,OAAO,cAAc,CAAC,IAAgB,EAChB,UAAmB,EACnB,SAAiB,EACjB,OAAe,EACf,iBAAyB,EACzB,IAAsB,EACtB,YAAoB,EACpB,KAAc,EACd,QAAgB,EAChB,iBAAsB,EAAA;;AAElD,QAAA,SAAS,GAAG,SAAS,GAAG,IAAI;AAC5B,QAAA,OAAO,GAAG,OAAO,GAAG,IAAI;QACxB,MAAM,UAAU,GAAG,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC;AACjB,QAAA,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,IAAI,OAAO,GAAG,iBAAiB;AAC/B,QAAA,IAAI,uBAAuB;QAC3B,IAAI,QAAQ,GAAG,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK;AACnB,QAAA,MAAM,WAAW,GAAG,cAAc,EAAE;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC;QAE/D,IAAI,UAAU,EAAE;YACd,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,EAAE;AAC9C,gBAAA,MAAM,GAAG,CAAC,CAAC;AAEX;;;AAG8F;;AAG9F,gBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEzC,gBAAA,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;;;AAGlG,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;oBACxB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI;gBACzC;YACF;YACA,uBAAuB,GAAG,OAAO;YACjC,SAAS,GAAG,CAAC;QACf;;QAGA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAC9B,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;AACb,gBAAA,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;YAC9B;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,qDAAqD,CAAC;AACrF,YAAA,OAAO,EAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC;QACjF;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE5C,YAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;gBAChG;YACF;;AAGA,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE;;AAEnB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACrB;AACA,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;AACjE,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;AAEf,gBAAA,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;;AAEzD,oBAAA,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM;AACpC,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;AAC5B,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;oBAC1B,OAAO,GAAG,IAAI;gBAChB;YACF;AACA,YAAA,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;AACrE,YAAA,IAAI,OAAO,GAAG,OAAO,EAAE;AACrB,gBAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,oBAAA,IAAI,GAAG,CAAC,GAAG,CAAC;gBACd;gBACA;YACF;AACA,YAAA,IAAI,MAAM,IAAI,CAAC,EAAE;AACf,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;;AAEd,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI;AAC9C,oBAAA,QAAQ,EAAG;gBACb;YACF;iBAAO;gBACL,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,EAAE;AAC9C,oBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;;AAEd,wBAAA,IAAI,MAAM,GAAG,CAAC,EAAE;4BACd,MAAM,GAAG,CAAC;wBACZ;AACA,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI;AAC9C,wBAAA,QAAQ,EAAG;oBACb;gBACF;YACF;;YAEA,uBAAuB,GAAG,OAAO;AAEjC,YAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;gBACzB,IAAI,GAAG,CAAC;gBACR;YACF;QACF;AACA,QAAA,OAAO,EAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAC;IACzG;AAEA;;;;;;;;;;;;;;AAcG;IACK,OAAO,eAAe,CAAC,SAAiB,EACjB,IAAgB,EAChB,UAAmB,EACnB,IAAsB,EACtB,UAAkB,EAClB,QAAgB,EAChB,iBAA2B,EAC3B,UAA4B,EAC5B,YAAoB,EACpB,KAAc,EAAA;QAC3C,IAAI,SAAS,GAAG,CAAC;;;;QAKjB,IAAI,UAAU,EAAE;AACd;;;;;AAKG;;AAGH,YAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAEzC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE;AACjC,gBAAA,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE;;;AAG9B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAClC,oBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC;;oBAGnB,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;;AAErC,oBAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,wBAAA,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAC;oBAChG;gBACF;YACF;YACA,SAAS,GAAG,CAAC;QACf;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC;AACnB,YAAA,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE5C,gBAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;oBAChG;gBACF;;AAGA,gBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE;AACrE,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE;gBACvB;AACA,gBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;oBACvD,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC9B;AAEA,gBAAA,iBAAiB,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,gBAAA,IAAI,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,QAAQ,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE;AACzE,oBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;wBACpB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM;AAC7C,wBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,EAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAC;oBACxF;gBACF;qBAAO,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE;oBACvC;gBACF;YACF;QACF;IACF;AAEA;;;;;;;;;AASG;AACI,IAAA,uBAAuB,CAAC,IAAU,EACV,SAAiB,EACjB,OAAe,EACf,IAAY,EACZ,QAAgB,EAChB,iBAAsB,EACtB,QAAa,EAAA;;AAE1C,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;QAC5B,IAAI,UAAU,GAAG,IAAI;;AAErB,QAAA,IAAI,iBAAiB;;AAErB,QAAA,IAAI,iBAAiB;;;QAGrB,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAqB,EAAE;QACjC,MAAM,IAAI,GAAqB,EAAE;AACjC,QAAA,IAAI,MAAM;AACV,QAAA,IAAI,IAAI;QACR,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,IAAI,SAAS;AACb,QAAA,IAAI,SAAgB;AAEpB,QAAA,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,KAAI;YACxC,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,GAAG,CAAC;YACf;AACA,YAAA,MAAM,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,uCAAA,CAAyC,CAAC;YAC7D,MAAM,CAAC,KAAK,EAAE;AAChB,QAAA,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,KAAK,CAAC,IAAI,EAAE;AACV,gBAAA,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;;;AAGzB,oBAAA,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC;AACtC,oBAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;;wBAEjB;oBACF;yBAAO;;wBAEL,UAAU,GAAG,CAAC,CAAC;oBACjB;;oBAGA,IAAI,UAAU,EAAE;wBACd,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC/B,4BAAA,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;wBACvC;;AAGA,wBAAA,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;wBAEjC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;;wBAElC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEzB,wBAAA,iBAAiB,GAAG,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;;AAEjF,wBAAA,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC1D;AAEA,oBAAA,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC;oBAEtC,IAAI,CAAC,iBAAiB,EAAE;AACtB,wBAAA,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;oBACvC;;AAGA,oBAAA,CAAC,EAAC,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAC,GAAG,WAAW,CAAC,cAAc,CAC5E,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC;AAClH,oBAAA,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC;AAEtC,oBAAA,IAAI,UAAU,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;AACxF,wBAAA,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;oBACvC;;oBAGA,WAAW,CAAC,eAAe,CACzB,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;oBAExG,IAAI,UAAU,EAAE;wBACd,UAAU,GAAG,KAAK;oBACpB;AAEA,oBAAA,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC;AAEtC,oBAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;;AAEjB,wBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;wBACzH,IAAI,cAAc,IAAI,WAAW,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EAAE;AAC1E,4BAAA,SAAS,GAAG,KAAK,CAAC,iBAAiB;wBACrC;6BAAO;AACL,4BAAA,SAAS,GAAG,KAAK,CAAC,mBAAmB;wBACvC;wBAEA,IAAI,QAAQ,EAAE;4BACZ,QAAQ,CAAC,GAAG,CAAC;wBACf;wBACA,MAAM,CAAC,KAAK,EAAE;wBACd;oBACF;yBAAO;;wBAEL,IAAI,QAAQ,EAAE;AACZ,4BAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;wBAC7D;;oBAEF;gBACF,CAAC;gBACD,QAAQ,EAAE,MAAK;AACb,oBAAA,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;oBAC9C,OAAO,CAAE,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC;gBACpF;AACD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACI,gBAAgB,CAAC,IAAU,EAAE,QAAa,EAAA;AAC/C,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;QAC5B,IAAI,UAAU,GAAG,IAAI;QACrB,MAAM,KAAK,GAAG,EAAE;AAChB,QAAA,MAAM,WAAW,GAAG,cAAc,EAAE;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,KAAK,CAAC,IAAI,EAAE;AACV,gBAAA,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAI;;oBAEzB,IAAI,UAAU,EAAE;wBACd,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;4BAC/B,IAAI,QAAQ,EAAE;gCACZ,QAAQ,CAAC,GAAG,CAAC;4BACf;AACA,4BAAA,MAAM,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,CAAA,uCAAA,CAAyC,CAAC;4BAC7D,MAAM,CAAC,KAAK,EAAE;4BACd;wBACF;oBACF;AACA,oBAAA,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC;oBAC3C,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;oBACtD,IAAI,UAAU,EAAE;wBACd,UAAU,GAAG,KAAK;oBACpB;oBACA,IAAI,QAAQ,EAAE;AACZ,wBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;oBAC7D;gBACF,CAAC;gBACD,QAAQ,EAAE,MAAK;;AAEb,oBAAA,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC;AAC9C,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,wBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW;oBACxB;oBACA,OAAO,CAAE,KAAK,CAAC;gBACjB;AACD,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;8GA1aW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAX,WAAW,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB;;;MCJY,sBAAsB,CAAA;AAfnC,IAAA,WAAA,GAAA;QAkBE,IAAA,CAAA,YAAY,GAAG,EAAE;QAEjB,IAAA,CAAA,aAAa,GAAG,EAAE;AAEX,QAAA,IAAA,CAAA,QAAQ,GAAsB,IAAI,YAAY,EAAO;AAErD,QAAA,IAAA,CAAA,SAAS,GAAsB,IAAI,YAAY,EAAO;QAE7D,IAAA,CAAA,YAAY,GAAG,KAAK;AAwErB,IAAA;IAtES,OAAO,eAAe,CAAC,KAAK,EAAA;AAClC,QAAA,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB;AAEO,IAAA,WAAW,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEO,IAAA,UAAU,CAAC,KAAY,EAAA;AAC5B,QAAA,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;IACJ;AAEO,IAAA,WAAW,CAAC,KAAY,EAAA;AAC7B,QAAA,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAC3B;IACJ;AAEO,IAAA,WAAW,CAAC,KAAU,EAAA;AAC3B,QAAA,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,MAAM,GAAG,CAAC;AACd,QAAA,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;YAC5B,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM;QAC1C;aAAO;YACL,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM;QAC1C;AAEA,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;AACd,YAAA,KAAK,CAAC,KAAK,GAAG,0CAA0C;AACxD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB;QACF;AAEA,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AAChB,YAAA,IAAI,SAAS;AACb,YAAA,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE;gBAC5B,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE;AAChD,oBAAA,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE;gBAC5D;YACF;iBAAO;gBACL,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE;AAChD,oBAAA,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE;gBAC5D;YACF;YACA,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,SAAS,CAAC,MAAM,EAAE;AACpB,oBAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACtB;AAAO,qBAAA,IAAI,SAAS,CAAC,WAAW,EAAE;oBAChC,KAAK,CAAC,KAAK,GAAG,CAAA,QAAA,EAAW,SAAS,CAAC,IAAI,qBAAqB;gBAC9D;qBAAO;oBACL,KAAK,CAAC,KAAK,GAAG,CAAA,0DAAA,EAA6D,SAAS,CAAC,IAAI,IAAI;gBAC/F;YACF;AAEA,YAAA,MAAM,IAAI,GAAS,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACvH,IAAI,IAAI,EAAE;AACR,gBAAA,KAAK,CAAC,IAAI,GAAG,IAAI;YACnB;iBAAO;AACL,gBAAA,KAAK,CAAC,KAAK,GAAG,+CAA+C;YAC/D;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB;QACF;IACF;8GAlFW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbvB,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8gBAAA,CAAA,EAAA,CAAA,CAAA;;2FAIU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAflC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,QAAA,EACjB,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,8gBAAA,CAAA,EAAA;;sBAMA;;sBAEA;;sBAEA;;sBAEA;;;MCfU,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;QASE,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,aAAa,GAAG,KAAK;QAErB,IAAA,CAAA,IAAI,GAAG,IAAI;AACX;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;AAKnD,IAAA;IAJC,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;8GApBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVjC,87DAiCA,EAAA,MAAA,EAAA,CAAA,qpBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1Ba,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGZ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACE,aAAa,EAAA,OAAA,EAGd,CAAE,YAAY,CAAE,EAAA,QAAA,EAAA,87DAAA,EAAA,MAAA,EAAA,CAAA,qpBAAA,CAAA,EAAA;;sBAIxB;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAKA;;;MEtBU,mBAAmB,CAAA;AAG9B;;;;AAIG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,IAAI,CAAC,aAAa;QAC3B;;QAEA,IAAI,CAAC,aAAa,GAAG;AACnB,YAAA,EAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAC;AAC5B,YAAA,EAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAC;AAC5B,YAAA,EAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;SAC5B;;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,CAAA,GAAA,EAAM,CAAC,CAAA,CAAE,EAAE,IAAI,EAAE,CAAA,GAAA,EAAM,CAAC,CAAA,CAAE,EAAC,CAAC;QAC3D;;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAA,GAAA,EAAM,CAAC,EAAE,GAAG,CAAA,IAAA,EAAO,CAAC,EAAE;AAC3C,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE;AAC9D,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;YACjD;QACF;QACA,OAAO,IAAI,CAAC,aAAa;IAC3B;IAEA,QAAQ,CAAC,QAAgB,IAAI,EAAA;QAC3B,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;IAC5E;8GAlCW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCoBY,qBAAqB,CAAA;AAqBhC,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C;AAEA,IAAA,WAAA,CAAoB,OAA4B,EAAA;QAA5B,IAAA,CAAA,OAAO,GAAP,OAAO;AAxB3B;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEzB;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;IAgBE;AAEnD;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;8GAhCW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAJrB,CAAE,mBAAmB,CAAE,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZxB,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEU,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGrB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,EAAA,CAAA;oBACD,SAAS,EAAE,CAAE,mBAAmB,CAAE;oBAClC,OAAO,EAAE,CAAE,qBAAqB,CAAE;oBAClC,eAAe,EAAE,uBAAuB,CAAC;AAC1C,iBAAA;;sBAKE;;sBAKA;;sBAKA;;sBAKA;;;MCnBU,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBrB,CAAA;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ysBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACU,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGZ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,QAAA,EAEd,CAAA;;;;;;;;;;;;;GAaT,EAAA,OAAA,EACQ,CAAE,YAAY,CAAE,EAAA,MAAA,EAAA,CAAA,ysBAAA,CAAA,EAAA;;sBAKxB;;;MCOU,0BAA0B,CAAA;AA3BvC,IAAA,WAAA,GAAA;QA6BW,IAAA,CAAA,QAAQ,GAAG,KAAK;AAKzB;;AAEG;AACO,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAU;AAQ3D,IAAA;AANC;;AAEG;IACH,iBAAiB,GAAA;QACf,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;IACnD;8GAjBW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzB3B,CAAA;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yiIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGU,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,+zBAAE,uBAAuB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGrE,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA3BtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,QAAA,EACrB,CAAA;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,UAAA,EAEW,IAAI,EAAA,OAAA,EACP,CAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,uBAAuB,CAAE,EAAA,eAAA,EACjE,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,yiIAAA,CAAA,EAAA;;sBAI9C;;sBAIA;;sBAIA;;;MChCU,uBAAuB,CAAA;AAElC;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,eAAe,EAAE;IAC1B;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,MAAM,SAAS,GAAe,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,kBAAkB,EAAE;AAElC,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;;AAEnB,YAAA,IAAI,MAAM;YACV,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACzB,gBAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;YAC/C;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IAClB;IAEA,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAA;AAC3B,QAAA,OAAO,GAAG,MAAM,CAAA,GAAA,EAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;IAC7E;AAEQ,IAAA,UAAU,CAAC,IAAY,EAAA;AAC7B,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,SAAS,GAAG,EAAE;QAE9B,OAAO,CAAA,IAAA,EAAO,aAAa,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA,CAAA,CAAG;IAC3G;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,SAAqB,EAAE,MAAc,EAAE,IAAY,EAAA;QACzE,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,cAAc,GAAI,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC;YAChE,IAAI,CAAC,cAAc,EAAE;gBACnB,cAAc,GAAG,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAC;AAC5C,gBAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;YAChC;AACA,YAAA,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC;IACF;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1B,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;IAC5C;AAEQ,IAAA,aAAa,CAAC,MAAM,EAAA;AAC1B,QAAA,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,EAAE,GAAG,CAAA,EAAG,MAAM,EAAE;IAC5D;8GA7DW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;MCaY,yBAAyB,CAAA;AAWpC,IAAA,WAAA,CAAoB,OAAgC,EAAA;QAAhC,IAAA,CAAA,OAAO,GAAP,OAAO;QATlB,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEf,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAQnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAC1F,EAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,KAAK,SAAS,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;IACvH;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE;AAC3D,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAC1F,EAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;YAC9I;QACF;IACF;AAGA;;;AAGG;AACH,IAAA,QAAQ,CAAC,gBAAwB,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB;QAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;8GAlCW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAJzB,CAAE,uBAAuB,CAAE,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAX5B,CAAA;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEU,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGrB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAjBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUT,EAAA,CAAA;oBACD,SAAS,EAAE,CAAE,uBAAuB,CAAE;oBACtC,OAAO,EAAE,CAAE,qBAAqB,CAAE;oBAClC,eAAe,EAAE,uBAAuB,CAAC;AAC1C,iBAAA;;sBAGE;;sBACA;;sBACA;;;MCfU,cAAc,CAAA;AAR3B,IAAA,WAAA,GAAA;AAYY,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAU;AAyD1D,IAAA;AArDC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC;QACxD;IACF;AAEQ,IAAA,WAAW,CAAC,SAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEQ,IAAA,YAAY,CAAC,SAAiB,EAAA;AACpC,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,SAAS,EAAE,GAAG,CAAC;IACjD;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;;AAEzB,YAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;QACxE;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7B;AAEA;;AAEG;AACH,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,QAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAClC,gBAAA,KAAK,SAAS;AACZ,oBAAA,OAAO,eAAe;AACxB,gBAAA,KAAK,OAAO;AACV,oBAAA,OAAO,aAAa;AACtB,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,YAAY;AACrB,gBAAA,KAAK,SAAS;AACZ,oBAAA,OAAO,eAAe;AACxB,gBAAA;AACE,oBAAA,OAAO,EAAE;;QAEf;AACA,QAAA,OAAO,EAAE;IACX;8GA5DW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECX3B,uNAUA,EAAA,MAAA,EAAA,CAAA,qwCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGb,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,OAAO,EAAA,UAAA,EAGL,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,uNAAA,EAAA,MAAA,EAAA,CAAA,qwCAAA,CAAA,EAAA;;sBAIxB;;sBACA;;sBACA;;sBACA;;;AEmBH,IAAK,UAIJ;AAJD,CAAA,UAAK,UAAU,EAAA;AACb,IAAA,UAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,UAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACvC,CAAC,EAJI,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;MAcF,0BAA0B,CAAA;AAkKrC,IAAA,WAAA,CAAoB,WAAwB,EACxB,YAA0B,EAC1B,SAAoB,EAAA;QAFpB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,SAAS,GAAT,SAAS;AAjJ7B;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,IAAI;AA2B/B;;AAEG;AACO,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAQrD;;AAEG;QACH,IAAA,CAAA,IAAI,GAAqB,EAAE;AAE3B;;AAEG;QACH,IAAA,CAAA,IAAI,GAAqB,EAAE;AAE3B;;AAEG;QACH,IAAA,CAAA,MAAM,GAAyB,EAAE;AAEjC;;AAEG;QACH,IAAA,CAAA,IAAI,GAAG,yBAAyB;AAgChC;;AAEG;QACH,IAAA,CAAA,YAAY,GAAG,CAAC;AAEhB;;AAEG;QACH,IAAA,CAAA,mBAAmB,GAAG,mBAAmB;AAEzC;;AAEG;QACH,IAAA,CAAA,aAAa,GAAG,KAAK;AA2BrB,QAAA,IAAA,CAAA,UAAU,GAAG,UAAU,CAAC,SAAS;IAcU;IAE3C,MAAM,WAAW,CAAC,OAAsB,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;;QAEjC,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,KAAK,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;;YAElG,MAAM,cAAc,GAAG,EAAC,MAAM,EAAE,EAAC,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAC,EAAC;AACjG,YAAA,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;AACvC,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AACtB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE;YAClB;QACF;IACF;IAEA,eAAe,GAAA;;;QAGb,IAAI,CAAC,YAAY,CAAC;YAChB,EAAC,EAAE,EAAE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAC;YAC1C,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAC;YACjD,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAC;YAChD,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAC;YAC/C,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK;AAAE,SAAA,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB;AAEA;;;AAGG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;QAEtE,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU;AAC3D,iBAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD;IACF;AAEA;;AAEG;IACH,SAAS,GAAA;;QAEP,IAAI,CAAC,YAAY,CAAC;YAChB,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAC;YACjD,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK;AAAE,SAAA,CAAC;AAEpD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAK;AAC7B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB;YAC5C,IAAI,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE;gBACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,4BAA4B,CAAC;AAC5D,gBAAA,OAAO,OAAO,CAAC,OAAO,EAAE;YAC1B;AACA,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;;AAEb,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;YACzG;AACA,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AAC1B,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAG;YACX,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;AACxE,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,SAAS,GAAA;;AAEP,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;;YAEb,IAAI,CAAC,YAAY,CAAC;gBAChB,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAC;gBAChD,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK;AAChD,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC;IACF;AAEA;;AAEG;IACH,MAAM,YAAY,CAAC,KAAU,EAAA;QAC3B,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;QACnD,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;;gBAExC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAE5E,gBAAA,IAAI,CAAC,IAAI,GAAG,YAAY;gBACxB,IAAI,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEjE,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;YACtE;QACF;IACF;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,eAAe,CAAC,KAAK;aAClB,IAAI,CAAC,IAAI,IAAG;YACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;;AAEhC,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,gBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,IAAI,CAAC,mBAAmB,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEjE,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;gBACtE;YACF;AAAC,QAAA,CAAC;aACH,IAAI,CAAC,MAAK;AACT,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;AACjC,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC3B,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;AAC1E,iBAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD;IACF;AAEA;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,MAAM,2BAA2B,GAAG,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,GAAG,IAAI;AACpH,QAAA,MAAM,+BAA+B,GAAG,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC,aAAa,GAAG,IAAI;AAChI,QAAA,cAAc,CAAC,2BAA2B,EAAE,+BAA+B,CAAC;IAC9E;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,WAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACvC;AAEA;;;AAGG;AACH,IAAA,kBAAkB,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,iBAAiB,EAAE;;YAEnC;QACF;QACA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;YACzE;QACF;aAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAA,yEAAA,CAA2E,CAAC;YAC9H;QACF;;QAGA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEnE,IAAI,CAAC,YAAY,CAAC;gBAChB,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAC;gBAChD,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK;AAAE,aAAA,CAAC;;YAErD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAK;gBACjC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC;AACtF,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD;IACF;AAEA;;AAEG;AACH,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACjE;AAEA;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,eAAe,EAAE;IAC1B;AAEA;;AAEG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,GAAG;IACjB;AAEA;;AAEG;AACH,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA;;AAEG;AACH,IAAA,IAAY,kBAAkB,GAAA;QAC5B,IAAI,SAAS,GAAG,CAAC;AACjB,QAAA,IAAI,OAAO,GAAG,aAAa,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YAC9B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;;AAElC,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;AACzB,oBAAA,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpD;AACA,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;AACzB,oBAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClD;YACF;QACF;QACA,OAAO,EAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAC;IACjD;AAEA;;AAEG;AACH,IAAA,IAAY,wBAAwB,GAAA;AAClC,QAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,kBAAkB;AACvD,QAAA,OAAO,CAAA,EAAG,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAA,GAAA,EAAM,aAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAClH;AAEA;;AAEG;AACH,IAAA,IAAY,UAAU,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC;QACtD;AACA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;AACH,IAAA,IAAY,WAAW,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC;IACvD;AAEA;;;AAGG;AACK,IAAA,kBAAkB,CAAC,IAAU,EAAA;QACnC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,QAAQ,KAAI;AACnD,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC9B,QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAG;YACd,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAK;AAC1B,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACtC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClD;AAEA;;;;;;AAMG;AACK,IAAA,uBAAuB,CAAC,IAAU,EAAE,SAAiB,EAAE,OAAe,EAAE,YAAoB,EAAA;AAClG,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAC7C,IAAI,EACJ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,iBAAiB,EAAE,QAAQ,IAAI,IAAI,CAAC,YAAY,GAAG,QAAQ;aAC/D,IAAI,CAAC,MAAM,IAAG;;AAEb,YAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;YAC5B,MAAM,QAAQ,GAAG,EAAE;AACnB,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AAC1D,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;;gBAEnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iCAAiC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACzG,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ;iBACxB,IAAI,CAAC,MAAK;;;gBAIT,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC;AAEhD,gBAAA,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAChD,gBAAA,KAAK,CAAC,OAAO,CAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACnE,gBAAA,kBAAkB,CAAC,SAAS,EAAE,wBAAwB,CAAC;AACvD,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3D,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;gBACvB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,iBAAiB,EAAE;AAC9C,oBAAA,IAAI,CAAC,YAAY,CACf,KAAK,CAAC,OAAO,EAAE,CAAA,0DAAA,EAA6D,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;gBACjH;qBAAO;AACL,oBAAA,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC1B,wBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA,mDAAA,EAAsD,IAAI,CAAC,wBAAwB,CAAA,CAAE,CAAC;oBACtH;yBAAO;AACL,wBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA,yBAAA,EAA4B,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;oBAChG;gBACF;gBACA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAK;oBAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACjF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,KAAA,GAAkB,IAAI,EAAE,eAAuB,IAAI,EAAA;AAC3E,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;;YAE3B,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAErC,gBAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;YAC/D;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;YACnC;YAEA,IAAI,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE;;;;AAI1C,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC;;gBAErB,IAAI,CAAC,YAAY,CAAC;oBAChB,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAC;oBACjD,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI;AAC/C,iBAAA,CAAC;YACJ;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;AAMG;IACK,WAAW,CAAC,IAAY,EAAE,KAAe,EAAE,OAAe,EAAE,UAAU,GAAG,KAAK,EAAA;AACpF,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;QAC5B,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,EAAE,OAAO,CAAC;iBACvE,IAAI,CAAE,MAAK;;AAEV,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAC/C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EACxB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAChF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;qBACtB,IAAI,CAAC,MAAK;AACT,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC;;oBAErB,IAAI,CAAC,YAAY,CAAC;wBAChB,EAAC,EAAE,EAAE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAC;wBACzC,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAC;wBACjD,EAAC,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI;AAC/C,qBAAA,CAAC;;AAEF,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,oBAAA,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC;oBACjD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7B,IAAI,CAAC,UAAU,EAAE;;4BAEf,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;wBAC5C;oBACF;AACA,oBAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AAC1B,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;aAAO;YACL,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,IAAI,CAAC,YAAY,CACf,KAAK,CAAC,OAAO,EACb,sHAAsH,CAAC;gBACzH,IAAI,CAAC,UAAU,EAAE;;oBAEf,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;gBAC5C;YACF;QACF;AACA,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;IAC1B;AAEA;;;;AAIG;AACK,IAAA,aAAa,CAAC,IAAY,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAQ,GAAG,IAAI,CAAC,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,GAAA,EAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI;QAC7E;AACA,QAAA,OAAO,EAAE;IACX;AAEA;;AAEG;IACK,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAC,EAAE,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;IACvE;AAEA;;AAEG;IACK,aAAa,CAAC,aAAsB,KAAK,EAAA;QAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAK;YAChD;;AAEE,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAC,EAAE,EAAE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;gBAE/D,IAAI,CAAC,UAAU,EAAE;AACf,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACnC,wBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;4BAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;wBAC3B;AAAC,oBAAA,CAAC,CAAC;AACL,oBAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACnC,wBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;4BAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;wBAC3B;AAAC,oBAAA,CAAC,CAAC;AACL,oBAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACtB,oBAAA,IAAI,CAAC,IAAI,GAAG,yBAAyB;AACrC,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,oBAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE;gBACxC;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACK,+BAA+B,CAAC,IAAY,EAAE,OAAe,EAAA;AACnE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC;AACzG,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,IAAG;YAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACtG,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACK,oBAAoB,CAAC,IAAY,EAAE,OAAe,EAAA;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM,CAAC;QAC/F,IAAI,aAAa,EAAE;AACjB,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAA,EAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,SAAS,CAAA,EAAA,EAAK,IAAI,GAAG;QAChG;IACF;AAEA;;;;AAIG;IACK,YAAY,CAAC,IAAW,EAAE,OAAe,EAAA;QAC/C,IAAI,IAAI,EAAE;YACR,QAAQ,IAAI;gBACV,KAAK,KAAK,CAAC,OAAO;gBAClB,KAAK,KAAK,CAAC,IAAI;oBACb;gBACF,KAAK,KAAK,CAAC,OAAO;AAChB,oBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;oBACrB;gBACF,KAAK,KAAK,CAAC,KAAK;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;;QAE5B;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;;AAEjC,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,GAAG,CAAC;QACpD;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;QAC7B;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACvB;AAEA;;;AAGG;AACK,IAAA,YAAY,CAAC,KAA2C,EAAA;AAC9D,QAAA,MAAM,uBAAuB,GAAG,CAAC,EAAe,KAAI;YAClD,QAAQ,EAAE;AACR,gBAAA,KAAK,WAAW,CAAC,SAAS,EAAE,OAAO,eAAe;AAClD,gBAAA,KAAK,WAAW,CAAC,gBAAgB,EAAE,OAAO,sBAAsB;AAChE,gBAAA,KAAK,WAAW,CAAC,eAAe,EAAE,OAAO,uBAAuB;AAChE,gBAAA,KAAK,WAAW,CAAC,eAAe,EAAE,OAAO,uBAAuB;AAChE,gBAAA,KAAK,WAAW,CAAC,gBAAgB,EAAE,OAAO,wBAAwB;;AAEtE,QAAA,CAAC;QACD,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM;AACtD,YAAA,CAAC,CAAC;QACJ;IACF;8GA5rBW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAJ1B,CAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAE,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAKR,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACN,UAAU,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClD3D,k/HAwEA,kuHD1Ba,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,yBAAyB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,+EAAE,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,8BAAE,uBAAuB,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEnP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBARtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oCAAoC,EAAA,SAAA,EAGnC,CAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAE,EAAA,UAAA,EACvC,IAAI,EAAA,OAAA,EACP,CAAE,YAAY,EAAE,cAAc,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,uBAAuB,CAAE,EAAA,QAAA,EAAA,k/HAAA,EAAA,MAAA,EAAA,CAAA,2qHAAA,CAAA,EAAA;;sBAG/P,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBACtD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,0BAA0B,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAK1D;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;sBAKA;;;AEpGH;;AAEG;;;;"}