{"version":3,"file":"node.mjs","sources":["../../../../../../../packages/components/tree/src/model/node.ts"],"sourcesContent":["// @ts-nocheck\nimport { reactive } from 'vue'\nimport { hasOwn } from '@bigin/utils'\nimport { NODE_KEY, markNodeData } from './util'\nimport type TreeStore from './tree-store'\n\nimport type { Nullable } from '@bigin/utils'\nimport type {\n  FakeNode,\n  TreeKey,\n  TreeNodeChildState,\n  TreeNodeData,\n  TreeNodeLoadedDefaultProps,\n  TreeNodeOptions,\n} from '../tree.type'\n\nexport const getChildState = (node: Node[]): TreeNodeChildState => {\n  let all = true\n  let none = true\n  let allWithoutDisable = true\n  for (let i = 0, j = node.length; i < j; i++) {\n    const n = node[i]\n    if (n.checked !== true || n.indeterminate) {\n      all = false\n      if (!n.disabled) {\n        allWithoutDisable = false\n      }\n    }\n    if (n.checked !== false || n.indeterminate) {\n      none = false\n    }\n  }\n\n  return { all, none, allWithoutDisable, half: !all && !none }\n}\n\nconst reInitChecked = function (node: Node): void {\n  if (node.childNodes.length === 0 || node.loading) return\n\n  const { all, none, half } = getChildState(node.childNodes)\n  if (all) {\n    node.checked = true\n    node.indeterminate = false\n  } else if (half) {\n    node.checked = false\n    node.indeterminate = true\n  } else if (none) {\n    node.checked = false\n    node.indeterminate = false\n  }\n\n  const parent = node.parent\n  if (!parent || parent.level === 0) return\n\n  if (!node.store.checkStrictly) {\n    reInitChecked(parent)\n  }\n}\n\nconst getPropertyFromData = function (node: Node, prop: string): any {\n  const props = node.store.props\n  const data = node.data || {}\n  const config = props[prop]\n\n  if (typeof config === 'function') {\n    return config(data, node)\n  } else if (typeof config === 'string') {\n    return data[config]\n  } else if (typeof config === 'undefined') {\n    const dataProp = data[prop]\n    return dataProp === undefined ? '' : dataProp\n  }\n}\n\nlet nodeIdSeed = 0\n\nclass Node {\n  id: number\n  text: string\n  checked: boolean\n  indeterminate: boolean\n  data: TreeNodeData\n  expanded: boolean\n  parent: Node\n  visible: boolean\n  isCurrent: boolean\n  store: TreeStore\n  isLeafByUser: boolean\n  isLeaf: boolean\n  canFocus: boolean\n\n  level: number\n  loaded: boolean\n  childNodes: Node[]\n  loading: boolean\n\n  constructor(options: TreeNodeOptions) {\n    this.id = nodeIdSeed++\n    this.text = null\n    this.checked = false\n    this.indeterminate = false\n    this.data = null\n    this.expanded = false\n    this.parent = null\n    this.visible = true\n    this.isCurrent = false\n    this.canFocus = false\n\n    for (const name in options) {\n      if (hasOwn(options, name)) {\n        this[name] = options[name]\n      }\n    }\n\n    // internal\n    this.level = 0\n    this.loaded = false\n    this.childNodes = []\n    this.loading = false\n\n    if (this.parent) {\n      this.level = this.parent.level + 1\n    }\n  }\n\n  initialize() {\n    const store = this.store\n    if (!store) {\n      throw new Error('[Node]store is required!')\n    }\n    store.registerNode(this)\n\n    const props = store.props\n    if (props && typeof props.isLeaf !== 'undefined') {\n      const isLeaf = getPropertyFromData(this, 'isLeaf')\n      if (typeof isLeaf === 'boolean') {\n        this.isLeafByUser = isLeaf\n      }\n    }\n\n    if (store.lazy !== true && this.data) {\n      this.setData(this.data)\n\n      if (store.defaultExpandAll) {\n        this.expanded = true\n        this.canFocus = true\n      }\n    } else if (this.level > 0 && store.lazy && store.defaultExpandAll) {\n      this.expand()\n    }\n    if (!Array.isArray(this.data)) {\n      markNodeData(this, this.data)\n    }\n    if (!this.data) return\n\n    const defaultExpandedKeys = store.defaultExpandedKeys\n    const key = store.key\n\n    if (key && defaultExpandedKeys && defaultExpandedKeys.includes(this.key)) {\n      this.expand(null, store.autoExpandParent)\n    }\n\n    if (\n      key &&\n      store.currentNodeKey !== undefined &&\n      this.key === store.currentNodeKey\n    ) {\n      store.currentNode = this\n      store.currentNode.isCurrent = true\n    }\n\n    if (store.lazy) {\n      store._initDefaultCheckedNode(this)\n    }\n\n    this.updateLeafState()\n    if (this.parent && (this.level === 1 || this.parent.expanded === true))\n      this.canFocus = true\n  }\n\n  setData(data: TreeNodeData): void {\n    if (!Array.isArray(data)) {\n      markNodeData(this, data)\n    }\n\n    this.data = data\n    this.childNodes = []\n\n    let children\n    if (this.level === 0 && Array.isArray(this.data)) {\n      children = this.data\n    } else {\n      children = getPropertyFromData(this, 'children') || []\n    }\n\n    for (let i = 0, j = children.length; i < j; i++) {\n      this.insertChild({ data: children[i] })\n    }\n  }\n\n  get label(): string {\n    return getPropertyFromData(this, 'label')\n  }\n\n  get key(): TreeKey {\n    const nodeKey = this.store.key\n    if (this.data) return this.data[nodeKey]\n    return null\n  }\n\n  get disabled(): boolean {\n    return getPropertyFromData(this, 'disabled')\n  }\n\n  get nextSibling(): Nullable<Node> {\n    const parent = this.parent\n    if (parent) {\n      const index = parent.childNodes.indexOf(this)\n      if (index > -1) {\n        return parent.childNodes[index + 1]\n      }\n    }\n    return null\n  }\n\n  get previousSibling(): Nullable<Node> {\n    const parent = this.parent\n    if (parent) {\n      const index = parent.childNodes.indexOf(this)\n      if (index > -1) {\n        return index > 0 ? parent.childNodes[index - 1] : null\n      }\n    }\n    return null\n  }\n\n  contains(target: Node, deep = true): boolean {\n    return (this.childNodes || []).some(\n      (child) => child === target || (deep && child.contains(target))\n    )\n  }\n\n  remove(): void {\n    const parent = this.parent\n    if (parent) {\n      parent.removeChild(this)\n    }\n  }\n\n  insertChild(child?: FakeNode | Node, index?: number, batch?: boolean): void {\n    if (!child) throw new Error('InsertChild error: child is required.')\n\n    if (!(child instanceof Node)) {\n      if (!batch) {\n        const children = this.getChildren(true)\n        if (!children.includes(child.data)) {\n          if (typeof index === 'undefined' || index < 0) {\n            children.push(child.data)\n          } else {\n            children.splice(index, 0, child.data)\n          }\n        }\n      }\n      Object.assign(child, {\n        parent: this,\n        store: this.store,\n      })\n      child = reactive(new Node(child as TreeNodeOptions))\n      if (child instanceof Node) {\n        child.initialize()\n      }\n    }\n\n    ;(child as Node).level = this.level + 1\n\n    if (typeof index === 'undefined' || index < 0) {\n      this.childNodes.push(child as Node)\n    } else {\n      this.childNodes.splice(index, 0, child as Node)\n    }\n\n    this.updateLeafState()\n  }\n\n  insertBefore(child: FakeNode | Node, ref: Node): void {\n    let index\n    if (ref) {\n      index = this.childNodes.indexOf(ref)\n    }\n    this.insertChild(child, index)\n  }\n\n  insertAfter(child: FakeNode | Node, ref: Node): void {\n    let index\n    if (ref) {\n      index = this.childNodes.indexOf(ref)\n      if (index !== -1) index += 1\n    }\n    this.insertChild(child, index)\n  }\n\n  removeChild(child: Node): void {\n    const children = this.getChildren() || []\n    const dataIndex = children.indexOf(child.data)\n    if (dataIndex > -1) {\n      children.splice(dataIndex, 1)\n    }\n\n    const index = this.childNodes.indexOf(child)\n\n    if (index > -1) {\n      this.store && this.store.deregisterNode(child)\n      child.parent = null\n      this.childNodes.splice(index, 1)\n    }\n\n    this.updateLeafState()\n  }\n\n  removeChildByData(data: TreeNodeData): void {\n    let targetNode: Node = null\n\n    for (let i = 0; i < this.childNodes.length; i++) {\n      if (this.childNodes[i].data === data) {\n        targetNode = this.childNodes[i]\n        break\n      }\n    }\n\n    if (targetNode) {\n      this.removeChild(targetNode)\n    }\n  }\n\n  expand(callback?: () => void, expandParent?: boolean): void {\n    const done = (): void => {\n      if (expandParent) {\n        let parent = this.parent\n        while (parent.level > 0) {\n          parent.expanded = true\n          parent = parent.parent\n        }\n      }\n      this.expanded = true\n      if (callback) callback()\n      this.childNodes.forEach((item) => {\n        item.canFocus = true\n      })\n    }\n\n    if (this.shouldLoadData()) {\n      this.loadData((data) => {\n        if (Array.isArray(data)) {\n          if (this.checked) {\n            this.setChecked(true, true)\n          } else if (!this.store.checkStrictly) {\n            reInitChecked(this)\n          }\n          done()\n        }\n      })\n    } else {\n      done()\n    }\n  }\n\n  doCreateChildren(\n    array: TreeNodeData[],\n    defaultProps: TreeNodeLoadedDefaultProps = {}\n  ): void {\n    array.forEach((item) => {\n      this.insertChild(\n        Object.assign({ data: item }, defaultProps),\n        undefined,\n        true\n      )\n    })\n  }\n\n  collapse(): void {\n    this.expanded = false\n    this.childNodes.forEach((item) => {\n      item.canFocus = false\n    })\n  }\n\n  shouldLoadData(): boolean {\n    return this.store.lazy === true && this.store.load && !this.loaded\n  }\n\n  updateLeafState(): void {\n    if (\n      this.store.lazy === true &&\n      this.loaded !== true &&\n      typeof this.isLeafByUser !== 'undefined'\n    ) {\n      this.isLeaf = this.isLeafByUser\n      return\n    }\n    const childNodes = this.childNodes\n    if (\n      !this.store.lazy ||\n      (this.store.lazy === true && this.loaded === true)\n    ) {\n      this.isLeaf = !childNodes || childNodes.length === 0\n      return\n    }\n    this.isLeaf = false\n  }\n\n  setChecked(\n    value?: boolean | string,\n    deep?: boolean,\n    recursion?: boolean,\n    passValue?: boolean\n  ) {\n    this.indeterminate = value === 'half'\n    this.checked = value === true\n\n    if (this.store.checkStrictly) return\n\n    if (!(this.shouldLoadData() && !this.store.checkDescendants)) {\n      const { all, allWithoutDisable } = getChildState(this.childNodes)\n\n      if (!this.isLeaf && !all && allWithoutDisable) {\n        this.checked = false\n        value = false\n      }\n\n      const handleDescendants = (): void => {\n        if (deep) {\n          const childNodes = this.childNodes\n          for (let i = 0, j = childNodes.length; i < j; i++) {\n            const child = childNodes[i]\n            passValue = passValue || value !== false\n            const isCheck = child.disabled ? child.checked : passValue\n            child.setChecked(isCheck, deep, true, passValue)\n          }\n          const { half, all } = getChildState(childNodes)\n          if (!all) {\n            this.checked = all\n            this.indeterminate = half\n          }\n        }\n      }\n\n      if (this.shouldLoadData()) {\n        // Only work on lazy load data.\n        this.loadData(\n          () => {\n            handleDescendants()\n            reInitChecked(this)\n          },\n          {\n            checked: value !== false,\n          }\n        )\n        return\n      } else {\n        handleDescendants()\n      }\n    }\n\n    const parent = this.parent\n    if (!parent || parent.level === 0) return\n\n    if (!recursion) {\n      reInitChecked(parent)\n    }\n  }\n\n  getChildren(forceInit = false): TreeNodeData | TreeNodeData[] {\n    // this is data\n    if (this.level === 0) return this.data\n    const data = this.data\n    if (!data) return null\n\n    const props = this.store.props\n    let children = 'children'\n    if (props) {\n      children = props.children || 'children'\n    }\n\n    if (data[children] === undefined) {\n      data[children] = null\n    }\n\n    if (forceInit && !data[children]) {\n      data[children] = []\n    }\n\n    return data[children]\n  }\n\n  updateChildren(): void {\n    const newData = (this.getChildren() || []) as TreeNodeData[]\n    const oldData = this.childNodes.map((node) => node.data)\n\n    const newDataMap = {}\n    const newNodes = []\n\n    newData.forEach((item, index) => {\n      const key = item[NODE_KEY]\n      const isNodeExists =\n        !!key && oldData.findIndex((data) => data[NODE_KEY] === key) >= 0\n      if (isNodeExists) {\n        newDataMap[key] = { index, data: item }\n      } else {\n        newNodes.push({ index, data: item })\n      }\n    })\n\n    if (!this.store.lazy) {\n      oldData.forEach((item) => {\n        if (!newDataMap[item[NODE_KEY]]) this.removeChildByData(item)\n      })\n    }\n\n    newNodes.forEach(({ index, data }) => {\n      this.insertChild({ data }, index)\n    })\n\n    this.updateLeafState()\n  }\n\n  loadData(\n    callback: (node: Node) => void,\n    defaultProps: TreeNodeLoadedDefaultProps = {}\n  ) {\n    if (\n      this.store.lazy === true &&\n      this.store.load &&\n      !this.loaded &&\n      (!this.loading || Object.keys(defaultProps).length)\n    ) {\n      this.loading = true\n\n      const resolve = (children) => {\n        this.childNodes = []\n\n        this.doCreateChildren(children, defaultProps)\n        this.loaded = true\n        this.loading = false\n\n        this.updateLeafState()\n        if (callback) {\n          callback.call(this, children)\n        }\n      }\n\n      this.store.load(this, resolve)\n    } else {\n      if (callback) {\n        callback.call(this)\n      }\n    }\n  }\n}\n\nexport default Node\n"],"names":["all"],"mappings":";;;;;AAgBa,MAAA,aAAA,GAAgB,CAAC,IAAqC,KAAA;AACjE,EAAA,IAAI,GAAM,GAAA,IAAA,CAAA;AACV,EAAA,IAAI,IAAO,GAAA,IAAA,CAAA;AACX,EAAA,IAAI,iBAAoB,GAAA,IAAA,CAAA;AACxB,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAK,MAAQ,EAAA,CAAA,GAAI,GAAG,CAAK,EAAA,EAAA;AAC3C,IAAA,MAAM,IAAI,IAAK,CAAA,CAAA,CAAA,CAAA;AACf,IAAA,IAAI,CAAE,CAAA,OAAA,KAAY,IAAQ,IAAA,CAAA,CAAE,aAAe,EAAA;AACzC,MAAM,GAAA,GAAA,KAAA,CAAA;AACN,MAAI,IAAA,CAAC,EAAE,QAAU,EAAA;AACf,QAAoB,iBAAA,GAAA,KAAA,CAAA;AAAA,OACtB;AAAA,KACF;AACA,IAAA,IAAI,CAAE,CAAA,OAAA,KAAY,KAAS,IAAA,CAAA,CAAE,aAAe,EAAA;AAC1C,MAAO,IAAA,GAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAO,OAAA,EAAE,KAAK,IAAM,EAAA,iBAAA,EAAmB,MAAM,CAAC,GAAA,IAAO,CAAC,IAAK,EAAA,CAAA;AAC7D,EAAA;AAEA,MAAM,aAAA,GAAgB,SAAU,IAAkB,EAAA;AAChD,EAAA,IAAI,IAAK,CAAA,UAAA,CAAW,MAAW,KAAA,CAAA,IAAK,IAAK,CAAA,OAAA;AAAS,IAAA,OAAA;AAElD,EAAA,MAAM,EAAE,GAAK,EAAA,IAAA,EAAM,MAAS,GAAA,aAAA,CAAc,KAAK,UAAU,CAAA,CAAA;AACzD,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;AACf,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA,CAAA;AAAA,aACZ,IAAM,EAAA;AACf,IAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;AACf,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AAAA,aACZ,IAAM,EAAA;AACf,IAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;AACf,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA,CAAA;AAAA,GACvB;AAEA,EAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAA;AACpB,EAAI,IAAA,CAAC,MAAU,IAAA,MAAA,CAAO,KAAU,KAAA,CAAA;AAAG,IAAA,OAAA;AAEnC,EAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,aAAe,EAAA;AAC7B,IAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AAAA,GACtB;AACF,CAAA,CAAA;AAEA,MAAM,mBAAA,GAAsB,SAAU,IAAA,EAAY,IAAmB,EAAA;AACnE,EAAM,MAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,KAAA,CAAA;AACzB,EAAM,MAAA,IAAA,GAAO,IAAK,CAAA,IAAA,IAAQ,EAAC,CAAA;AAC3B,EAAA,MAAM,SAAS,KAAM,CAAA,IAAA,CAAA,CAAA;AAErB,EAAI,IAAA,OAAO,WAAW,UAAY,EAAA;AAChC,IAAO,OAAA,MAAA,CAAO,MAAM,IAAI,CAAA,CAAA;AAAA,GAC1B,MAAA,IAAW,OAAO,MAAA,KAAW,QAAU,EAAA;AACrC,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA,CAAA;AAAA,GACd,MAAA,IAAW,OAAO,MAAA,KAAW,WAAa,EAAA;AACxC,IAAA,MAAM,WAAW,IAAK,CAAA,IAAA,CAAA,CAAA;AACtB,IAAO,OAAA,QAAA,KAAa,SAAY,EAAK,GAAA,QAAA,CAAA;AAAA,GACvC;AACF,CAAA,CAAA;AAEA,IAAI,UAAa,GAAA,CAAA,CAAA;AAEjB,MAAM,IAAK,CAAA;AAAA,EAoBT,YAAY,OAA0B,EAAA;AACpC,IAAA,IAAA,CAAK,EAAK,GAAA,UAAA,EAAA,CAAA;AACV,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;AACf,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA,CAAA;AACrB,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;AAChB,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AACd,IAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;AACf,IAAA,IAAA,CAAK,SAAY,GAAA,KAAA,CAAA;AACjB,IAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;AAEhB,IAAA,KAAA,MAAW,QAAQ,OAAS,EAAA;AAC1B,MAAI,IAAA,MAAA,CAAO,OAAS,EAAA,IAAI,CAAG,EAAA;AACzB,QAAA,IAAA,CAAK,QAAQ,OAAQ,CAAA,IAAA,CAAA,CAAA;AAAA,OACvB;AAAA,KACF;AAGA,IAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AACd,IAAA,IAAA,CAAK,aAAa,EAAC,CAAA;AACnB,IAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;AAEf,IAAA,IAAI,KAAK,MAAQ,EAAA;AACf,MAAK,IAAA,CAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,CAAA;AAAA,KACnC;AAAA,GACF;AAAA,EAEA,UAAa,GAAA;AACX,IAAA,MAAM,QAAQ,IAAK,CAAA,KAAA,CAAA;AACnB,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAM,MAAA,IAAI,MAAM,0BAA0B,CAAA,CAAA;AAAA,KAC5C;AACA,IAAA,KAAA,CAAM,aAAa,IAAI,CAAA,CAAA;AAEvB,IAAA,MAAM,QAAQ,KAAM,CAAA,KAAA,CAAA;AACpB,IAAA,IAAI,KAAS,IAAA,OAAO,KAAM,CAAA,MAAA,KAAW,WAAa,EAAA;AAChD,MAAM,MAAA,MAAA,GAAS,mBAAoB,CAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AACjD,MAAI,IAAA,OAAO,WAAW,SAAW,EAAA;AAC/B,QAAA,IAAA,CAAK,YAAe,GAAA,MAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAEA,IAAA,IAAI,KAAM,CAAA,IAAA,KAAS,IAAQ,IAAA,IAAA,CAAK,IAAM,EAAA;AACpC,MAAK,IAAA,CAAA,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAA;AAEtB,MAAA,IAAI,MAAM,gBAAkB,EAAA;AAC1B,QAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAChB,QAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAAA,OAClB;AAAA,eACS,IAAK,CAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,IAAA,IAAQ,MAAM,gBAAkB,EAAA;AACjE,MAAA,IAAA,CAAK,MAAO,EAAA,CAAA;AAAA,KACd;AACA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA;AAC7B,MAAa,YAAA,CAAA,IAAA,EAAM,KAAK,IAAI,CAAA,CAAA;AAAA,KAC9B;AACA,IAAA,IAAI,CAAC,IAAK,CAAA,IAAA;AAAM,MAAA,OAAA;AAEhB,IAAA,MAAM,sBAAsB,KAAM,CAAA,mBAAA,CAAA;AAClC,IAAA,MAAM,MAAM,KAAM,CAAA,GAAA,CAAA;AAElB,IAAA,IAAI,OAAO,mBAAuB,IAAA,mBAAA,CAAoB,QAAS,CAAA,IAAA,CAAK,GAAG,CAAG,EAAA;AACxE,MAAK,IAAA,CAAA,MAAA,CAAO,IAAM,EAAA,KAAA,CAAM,gBAAgB,CAAA,CAAA;AAAA,KAC1C;AAEA,IAAA,IACE,OACA,KAAM,CAAA,cAAA,KAAmB,UACzB,IAAK,CAAA,GAAA,KAAQ,MAAM,cACnB,EAAA;AACA,MAAA,KAAA,CAAM,WAAc,GAAA,IAAA,CAAA;AACpB,MAAA,KAAA,CAAM,YAAY,SAAY,GAAA,IAAA,CAAA;AAAA,KAChC;AAEA,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAA,KAAA,CAAM,wBAAwB,IAAI,CAAA,CAAA;AAAA,KACpC;AAEA,IAAA,IAAA,CAAK,eAAgB,EAAA,CAAA;AACrB,IAAA,IAAI,KAAK,MAAW,KAAA,IAAA,CAAK,UAAU,CAAK,IAAA,IAAA,CAAK,OAAO,QAAa,KAAA,IAAA,CAAA;AAC/D,MAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAAA,GACpB;AAAA,EAEA,QAAQ,IAA0B,EAAA;AAChC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,IAAI,CAAG,EAAA;AACxB,MAAA,YAAA,CAAa,MAAM,IAAI,CAAA,CAAA;AAAA,KACzB;AAEA,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAA,IAAA,CAAK,aAAa,EAAC,CAAA;AAEnB,IAAI,IAAA,QAAA,CAAA;AACJ,IAAA,IAAI,KAAK,KAAU,KAAA,CAAA,IAAK,MAAM,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA;AAChD,MAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAA;AAAA,KACX,MAAA;AACL,MAAA,QAAA,GAAW,mBAAoB,CAAA,IAAA,EAAM,UAAU,CAAA,IAAK,EAAC,CAAA;AAAA,KACvD;AAEA,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,SAAS,MAAQ,EAAA,CAAA,GAAI,GAAG,CAAK,EAAA,EAAA;AAC/C,MAAA,IAAA,CAAK,WAAY,CAAA,EAAE,IAAM,EAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAAA,KACxC;AAAA,GACF;AAAA,EAEA,IAAI,KAAgB,GAAA;AAClB,IAAO,OAAA,mBAAA,CAAoB,MAAM,OAAO,CAAA,CAAA;AAAA,GAC1C;AAAA,EAEA,IAAI,GAAe,GAAA;AACjB,IAAM,MAAA,OAAA,GAAU,KAAK,KAAM,CAAA,GAAA,CAAA;AAC3B,IAAA,IAAI,IAAK,CAAA,IAAA;AAAM,MAAA,OAAO,KAAK,IAAK,CAAA,OAAA,CAAA,CAAA;AAChC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAI,QAAoB,GAAA;AACtB,IAAO,OAAA,mBAAA,CAAoB,MAAM,UAAU,CAAA,CAAA;AAAA,GAC7C;AAAA,EAEA,IAAI,WAA8B,GAAA;AAChC,IAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAA;AACpB,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAC5C,MAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,QAAO,OAAA,MAAA,CAAO,WAAW,KAAQ,GAAA,CAAA,CAAA,CAAA;AAAA,OACnC;AAAA,KACF;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAI,eAAkC,GAAA;AACpC,IAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAA;AACpB,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAC5C,MAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,QAAA,OAAO,KAAQ,GAAA,CAAA,GAAI,MAAO,CAAA,UAAA,CAAW,QAAQ,CAAK,CAAA,GAAA,IAAA,CAAA;AAAA,OACpD;AAAA,KACF;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,QAAA,CAAS,MAAc,EAAA,IAAA,GAAO,IAAe,EAAA;AAC3C,IAAQ,OAAA,CAAA,IAAA,CAAK,UAAc,IAAA,EAAI,EAAA,IAAA;AAAA,MAC7B,CAAC,KAAU,KAAA,KAAA,KAAU,UAAW,IAAQ,IAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA,KAC/D,CAAA;AAAA,GACF;AAAA,EAEA,MAAe,GAAA;AACb,IAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAA;AACpB,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,MAAA,CAAO,YAAY,IAAI,CAAA,CAAA;AAAA,KACzB;AAAA,GACF;AAAA,EAEA,WAAA,CAAY,KAAyB,EAAA,KAAA,EAAgB,KAAuB,EAAA;AAC1E,IAAA,IAAI,CAAC,KAAA;AAAO,MAAM,MAAA,IAAI,MAAM,uCAAuC,CAAA,CAAA;AAEnE,IAAI,IAAA,EAAE,iBAAiB,IAAO,CAAA,EAAA;AAC5B,MAAA,IAAI,CAAC,KAAO,EAAA;AACV,QAAM,MAAA,QAAA,GAAW,IAAK,CAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AACtC,QAAA,IAAI,CAAC,QAAA,CAAS,QAAS,CAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AAClC,UAAA,IAAI,OAAO,KAAA,KAAU,WAAe,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC7C,YAAS,QAAA,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA;AAAA,WACnB,MAAA;AACL,YAAA,QAAA,CAAS,MAAO,CAAA,KAAA,EAAO,CAAG,EAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,WACtC;AAAA,SACF;AAAA,OACF;AACA,MAAA,MAAA,CAAO,OAAO,KAAO,EAAA;AAAA,QACnB,MAAQ,EAAA,IAAA;AAAA,QACR,OAAO,IAAK,CAAA,KAAA;AAAA,OACb,CAAA,CAAA;AACD,MAAA,KAAA,GAAQ,QAAS,CAAA,IAAI,IAAK,CAAA,KAAwB,CAAC,CAAA,CAAA;AACnD,MAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,QAAA,KAAA,CAAM,UAAW,EAAA,CAAA;AAAA,OACnB;AAAA,KACF;AAEA,IAAA,CAAA;AAAC,IAAC,KAAA,CAAe,KAAQ,GAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,CAAA;AAEtC,IAAA,IAAI,OAAO,KAAA,KAAU,WAAe,IAAA,KAAA,GAAQ,CAAG,EAAA;AAC7C,MAAK,IAAA,CAAA,UAAA,CAAW,KAAK,KAAa,CAAA,CAAA;AAAA,KAC7B,MAAA;AACL,MAAA,IAAA,CAAK,UAAW,CAAA,MAAA,CAAO,KAAO,EAAA,CAAA,EAAG,KAAa,CAAA,CAAA;AAAA,KAChD;AAEA,IAAA,IAAA,CAAK,eAAgB,EAAA,CAAA;AAAA,GACvB;AAAA,EAEA,YAAA,CAAa,OAAwB,GAAiB,EAAA;AACpD,IAAI,IAAA,KAAA,CAAA;AACJ,IAAA,IAAI,GAAK,EAAA;AACP,MAAQ,KAAA,GAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,KACrC;AACA,IAAK,IAAA,CAAA,WAAA,CAAY,OAAO,KAAK,CAAA,CAAA;AAAA,GAC/B;AAAA,EAEA,WAAA,CAAY,OAAwB,GAAiB,EAAA;AACnD,IAAI,IAAA,KAAA,CAAA;AACJ,IAAA,IAAI,GAAK,EAAA;AACP,MAAQ,KAAA,GAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAA;AACnC,MAAA,IAAI,KAAU,KAAA,CAAA,CAAA;AAAI,QAAS,KAAA,IAAA,CAAA,CAAA;AAAA,KAC7B;AACA,IAAK,IAAA,CAAA,WAAA,CAAY,OAAO,KAAK,CAAA,CAAA;AAAA,GAC/B;AAAA,EAEA,YAAY,KAAmB,EAAA;AAC7B,IAAA,MAAM,QAAW,GAAA,IAAA,CAAK,WAAY,EAAA,IAAK,EAAC,CAAA;AACxC,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,OAAQ,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC7C,IAAA,IAAI,YAAY,CAAI,CAAA,EAAA;AAClB,MAAS,QAAA,CAAA,MAAA,CAAO,WAAW,CAAC,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAE3C,IAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,MAAA,IAAA,CAAK,KAAS,IAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AAC7C,MAAA,KAAA,CAAM,MAAS,GAAA,IAAA,CAAA;AACf,MAAK,IAAA,CAAA,UAAA,CAAW,MAAO,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAAA,KACjC;AAEA,IAAA,IAAA,CAAK,eAAgB,EAAA,CAAA;AAAA,GACvB;AAAA,EAEA,kBAAkB,IAA0B,EAAA;AAC1C,IAAA,IAAI,UAAmB,GAAA,IAAA,CAAA;AAEvB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC/C,MAAA,IAAI,IAAK,CAAA,UAAA,CAAW,CAAG,CAAA,CAAA,IAAA,KAAS,IAAM,EAAA;AACpC,QAAA,UAAA,GAAa,KAAK,UAAW,CAAA,CAAA,CAAA,CAAA;AAC7B,QAAA,MAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,IAAA,CAAK,YAAY,UAAU,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AAAA,EAEA,MAAA,CAAO,UAAuB,YAA8B,EAAA;AAC1D,IAAA,MAAM,OAAO,MAAY;AACvB,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,IAAI,SAAS,IAAK,CAAA,MAAA,CAAA;AAClB,QAAO,OAAA,MAAA,CAAO,QAAQ,CAAG,EAAA;AACvB,UAAA,MAAA,CAAO,QAAW,GAAA,IAAA,CAAA;AAClB,UAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAA;AAAA,SAClB;AAAA,OACF;AACA,MAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAChB,MAAI,IAAA,QAAA;AAAU,QAAS,QAAA,EAAA,CAAA;AACvB,MAAK,IAAA,CAAA,UAAA,CAAW,OAAQ,CAAA,CAAC,IAAS,KAAA;AAChC,QAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAAA,OACjB,CAAA,CAAA;AAAA,KACH,CAAA;AAEA,IAAI,IAAA,IAAA,CAAK,gBAAkB,EAAA;AACzB,MAAK,IAAA,CAAA,QAAA,CAAS,CAAC,IAAS,KAAA;AACtB,QAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,CAAG,EAAA;AACvB,UAAA,IAAI,KAAK,OAAS,EAAA;AAChB,YAAK,IAAA,CAAA,UAAA,CAAW,MAAM,IAAI,CAAA,CAAA;AAAA,WACjB,MAAA,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,aAAe,EAAA;AACpC,YAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,WACpB;AACA,UAAK,IAAA,EAAA,CAAA;AAAA,SACP;AAAA,OACD,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAK,IAAA,EAAA,CAAA;AAAA,KACP;AAAA,GACF;AAAA,EAEA,gBACE,CAAA,KAAA,EACA,YAA2C,GAAA,EACrC,EAAA;AACN,IAAM,KAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACtB,MAAK,IAAA,CAAA,WAAA;AAAA,QACH,OAAO,MAAO,CAAA,EAAE,IAAM,EAAA,IAAA,IAAQ,YAAY,CAAA;AAAA,QAC1C,KAAA,CAAA;AAAA,QACA,IAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,QAAiB,GAAA;AACf,IAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;AAChB,IAAK,IAAA,CAAA,UAAA,CAAW,OAAQ,CAAA,CAAC,IAAS,KAAA;AAChC,MAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;AAAA,KACjB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,cAA0B,GAAA;AACxB,IAAO,OAAA,IAAA,CAAK,MAAM,IAAS,KAAA,IAAA,IAAQ,KAAK,KAAM,CAAA,IAAA,IAAQ,CAAC,IAAK,CAAA,MAAA,CAAA;AAAA,GAC9D;AAAA,EAEA,eAAwB,GAAA;AACtB,IACE,IAAA,IAAA,CAAK,KAAM,CAAA,IAAA,KAAS,IACpB,IAAA,IAAA,CAAK,WAAW,IAChB,IAAA,OAAO,IAAK,CAAA,YAAA,KAAiB,WAC7B,EAAA;AACA,MAAA,IAAA,CAAK,SAAS,IAAK,CAAA,YAAA,CAAA;AACnB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,MAAM,aAAa,IAAK,CAAA,UAAA,CAAA;AACxB,IACE,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,IACX,IAAA,IAAA,CAAK,MAAM,IAAS,KAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,KAAW,IAC7C,EAAA;AACA,MAAA,IAAA,CAAK,MAAS,GAAA,CAAC,UAAc,IAAA,UAAA,CAAW,MAAW,KAAA,CAAA,CAAA;AACnD,MAAA,OAAA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AAAA,GAChB;AAAA,EAEA,UACE,CAAA,KAAA,EACA,IACA,EAAA,SAAA,EACA,SACA,EAAA;AACA,IAAA,IAAA,CAAK,gBAAgB,KAAU,KAAA,MAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,UAAU,KAAU,KAAA,IAAA,CAAA;AAEzB,IAAA,IAAI,KAAK,KAAM,CAAA,aAAA;AAAe,MAAA,OAAA;AAE9B,IAAA,IAAI,EAAE,IAAK,CAAA,cAAA,MAAoB,CAAC,IAAA,CAAK,MAAM,gBAAmB,CAAA,EAAA;AAC5D,MAAA,MAAM,EAAE,GAAK,EAAA,iBAAA,EAAsB,GAAA,aAAA,CAAc,KAAK,UAAU,CAAA,CAAA;AAEhE,MAAA,IAAI,CAAC,IAAA,CAAK,MAAU,IAAA,CAAC,OAAO,iBAAmB,EAAA;AAC7C,QAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;AACf,QAAQ,KAAA,GAAA,KAAA,CAAA;AAAA,OACV;AAEA,MAAA,MAAM,oBAAoB,MAAY;AACpC,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,aAAa,IAAK,CAAA,UAAA,CAAA;AACxB,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,WAAW,MAAQ,EAAA,CAAA,GAAI,GAAG,CAAK,EAAA,EAAA;AACjD,YAAA,MAAM,QAAQ,UAAW,CAAA,CAAA,CAAA,CAAA;AACzB,YAAA,SAAA,GAAY,aAAa,KAAU,KAAA,KAAA,CAAA;AACnC,YAAA,MAAM,OAAU,GAAA,KAAA,CAAM,QAAW,GAAA,KAAA,CAAM,OAAU,GAAA,SAAA,CAAA;AACjD,YAAA,KAAA,CAAM,UAAW,CAAA,OAAA,EAAS,IAAM,EAAA,IAAA,EAAM,SAAS,CAAA,CAAA;AAAA,WACjD;AACA,UAAA,MAAM,EAAE,IAAM,EAAA,GAAA,EAAAA,IAAI,EAAA,GAAI,cAAc,UAAU,CAAA,CAAA;AAC9C,UAAA,IAAI,CAACA,IAAK,EAAA;AACR,YAAA,IAAA,CAAK,OAAUA,GAAAA,IAAAA,CAAAA;AACf,YAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AAAA,WACvB;AAAA,SACF;AAAA,OACF,CAAA;AAEA,MAAI,IAAA,IAAA,CAAK,gBAAkB,EAAA;AAEzB,QAAK,IAAA,CAAA,QAAA;AAAA,UACH,MAAM;AACJ,YAAkB,iBAAA,EAAA,CAAA;AAClB,YAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,WACpB;AAAA,UACA;AAAA,YACE,SAAS,KAAU,KAAA,KAAA;AAAA,WACrB;AAAA,SACF,CAAA;AACA,QAAA,OAAA;AAAA,OACK,MAAA;AACL,QAAkB,iBAAA,EAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAEA,IAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAA;AACpB,IAAI,IAAA,CAAC,MAAU,IAAA,MAAA,CAAO,KAAU,KAAA,CAAA;AAAG,MAAA,OAAA;AAEnC,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AAAA,KACtB;AAAA,GACF;AAAA,EAEA,WAAA,CAAY,YAAY,KAAsC,EAAA;AAE5D,IAAA,IAAI,KAAK,KAAU,KAAA,CAAA;AAAG,MAAA,OAAO,IAAK,CAAA,IAAA,CAAA;AAClC,IAAA,MAAM,OAAO,IAAK,CAAA,IAAA,CAAA;AAClB,IAAA,IAAI,CAAC,IAAA;AAAM,MAAO,OAAA,IAAA,CAAA;AAElB,IAAM,MAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,KAAA,CAAA;AACzB,IAAA,IAAI,QAAW,GAAA,UAAA,CAAA;AACf,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,QAAA,GAAW,MAAM,QAAY,IAAA,UAAA,CAAA;AAAA,KAC/B;AAEA,IAAI,IAAA,IAAA,CAAK,cAAc,KAAW,CAAA,EAAA;AAChC,MAAA,IAAA,CAAK,QAAY,CAAA,GAAA,IAAA,CAAA;AAAA,KACnB;AAEA,IAAI,IAAA,SAAA,IAAa,CAAC,IAAA,CAAK,QAAW,CAAA,EAAA;AAChC,MAAA,IAAA,CAAK,YAAY,EAAC,CAAA;AAAA,KACpB;AAEA,IAAA,OAAO,IAAK,CAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,cAAuB,GAAA;AACrB,IAAA,MAAM,OAAW,GAAA,IAAA,CAAK,WAAY,EAAA,IAAK,EAAC,CAAA;AACxC,IAAA,MAAM,UAAU,IAAK,CAAA,UAAA,CAAW,IAAI,CAAC,IAAA,KAAS,KAAK,IAAI,CAAA,CAAA;AAEvD,IAAA,MAAM,aAAa,EAAC,CAAA;AACpB,IAAA,MAAM,WAAW,EAAC,CAAA;AAElB,IAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAU,KAAA;AAC/B,MAAA,MAAM,MAAM,IAAK,CAAA,QAAA,CAAA,CAAA;AACjB,MAAM,MAAA,YAAA,GACJ,CAAC,CAAC,GAAO,IAAA,OAAA,CAAQ,SAAU,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,QAAc,CAAA,KAAA,GAAG,CAAK,IAAA,CAAA,CAAA;AAClE,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,UAAA,CAAW,GAAO,CAAA,GAAA,EAAE,KAAO,EAAA,IAAA,EAAM,IAAK,EAAA,CAAA;AAAA,OACjC,MAAA;AACL,QAAA,QAAA,CAAS,IAAK,CAAA,EAAE,KAAO,EAAA,IAAA,EAAM,MAAM,CAAA,CAAA;AAAA,OACrC;AAAA,KACD,CAAA,CAAA;AAED,IAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,IAAM,EAAA;AACpB,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACxB,QAAI,IAAA,CAAC,WAAW,IAAK,CAAA,QAAA,CAAA,CAAA;AAAY,UAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA,CAAA;AAAA,OAC7D,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,EAAE,KAAA,EAAO,MAAW,KAAA;AACpC,MAAA,IAAA,CAAK,WAAY,CAAA,EAAE,IAAK,EAAA,EAAG,KAAK,CAAA,CAAA;AAAA,KACjC,CAAA,CAAA;AAED,IAAA,IAAA,CAAK,eAAgB,EAAA,CAAA;AAAA,GACvB;AAAA,EAEA,QACE,CAAA,QAAA,EACA,YAA2C,GAAA,EAC3C,EAAA;AACA,IAAA,IACE,KAAK,KAAM,CAAA,IAAA,KAAS,IACpB,IAAA,IAAA,CAAK,MAAM,IACX,IAAA,CAAC,IAAK,CAAA,MAAA,KACL,CAAC,IAAK,CAAA,OAAA,IAAW,OAAO,IAAK,CAAA,YAAY,EAAE,MAC5C,CAAA,EAAA;AACA,MAAA,IAAA,CAAK,OAAU,GAAA,IAAA,CAAA;AAEf,MAAM,MAAA,OAAA,GAAU,CAAC,QAAa,KAAA;AAC5B,QAAA,IAAA,CAAK,aAAa,EAAC,CAAA;AAEnB,QAAK,IAAA,CAAA,gBAAA,CAAiB,UAAU,YAAY,CAAA,CAAA;AAC5C,QAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AACd,QAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;AAEf,QAAA,IAAA,CAAK,eAAgB,EAAA,CAAA;AACrB,QAAA,IAAI,QAAU,EAAA;AACZ,UAAS,QAAA,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AAAA,SAC9B;AAAA,OACF,CAAA;AAEA,MAAK,IAAA,CAAA,KAAA,CAAM,IAAK,CAAA,IAAA,EAAM,OAAO,CAAA,CAAA;AAAA,KACxB,MAAA;AACL,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAAA,GACF;AACF;;;;"}