{"version":3,"file":"pages/Resources/BundleDiff/DiffContainer/assets.mjs","sources":["../../../../../src/pages/Resources/BundleDiff/DiffContainer/assets.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport {\n  Button,\n  Col,\n  Divider,\n  Row,\n  Select,\n  Space,\n  Table,\n  Tag,\n  Tooltip,\n  Typography,\n} from 'antd';\nimport { sumBy } from 'es-toolkit/compat';\nimport {\n  CheckSquareOutlined,\n  InfoCircleOutlined,\n  MinusSquareOutlined,\n  PlusSquareOutlined,\n  SortAscendingOutlined,\n  FileSearchOutlined,\n  AppstoreAddOutlined,\n} from '@ant-design/icons';\nimport { Constants, SDK, Client } from '@rsdoctor/types';\nimport { BundleDiffTableAssetsData } from './types';\nimport { formatPercent, formatSize } from '../../../../utils';\nimport { Color, Size } from '../../../../constants';\nimport { Percent, SizePercent } from '../../../../components/Card/diff';\nimport { KeywordInput } from '../../../../components/Form/keyword';\nimport { ModuleRowForAsset } from './row';\nimport { ViewChanges } from './changes';\nimport { UpdateType, SortType } from './constants';\nimport { formatDiffSize } from './utils';\nimport { Graph } from '@rsdoctor/utils/common';\n\nconst fileTypes = {\n  JS: Constants.JSExtensions,\n  CSS: [Constants.CSSExtension],\n  HTML: [Constants.HtmlExtension],\n  Imgs: Constants.ImgExtensions,\n  Fonts: Constants.FontExtensions,\n  Media: Constants.MediaExtensions,\n  Others: [],\n};\n\nconst definedExtensions = Object.values(fileTypes).flat();\n\nconst Name: React.FC<{ data: BundleDiffTableAssetsData }> = ({ data: r }) => {\n  const name = (\n    <Space>\n      <Typography.Text strong>{r.alias}</Typography.Text>\n      <Tooltip\n        title={\n          <Space style={{ color: 'inherit' }} direction=\"vertical\">\n            {r.current ? (\n              <Typography.Text style={{ color: 'inherit' }}>\n                Current realpath: {r.current.path}\n              </Typography.Text>\n            ) : null}\n            {r.baseline ? (\n              <Typography.Text style={{ color: 'inherit' }}>\n                Baseline realpath: {r.baseline.path}\n              </Typography.Text>\n            ) : null}\n          </Space>\n        }\n      >\n        <InfoCircleOutlined />\n      </Tooltip>\n    </Space>\n  );\n\n  if (r.baseline && !r.current) {\n    // deleted\n    return (\n      <Space>\n        <MinusSquareOutlined style={{ color: Color.Red }} />\n        {name}\n      </Space>\n    );\n  }\n\n  if (!r.baseline && r.current) {\n    // new\n    return (\n      <Space>\n        <PlusSquareOutlined style={{ color: Color.Green }} />\n        {name}\n      </Space>\n    );\n  }\n\n  if (r.baseline && r.current) {\n    // update\n    return (\n      <Space>\n        <CheckSquareOutlined style={{ color: Color.Yellow }} />\n        {name}\n      </Space>\n    );\n  }\n\n  return name;\n};\n\nexport const Assets: React.FC<{\n  outputFilename: string;\n  baseline: SDK.ServerAPI.ResponseTypes[SDK.ServerAPI.API.GetBundleDiffSummary];\n  current: SDK.ServerAPI.ResponseTypes[SDK.ServerAPI.API.GetBundleDiffSummary];\n}> = ({ baseline, current, outputFilename }) => {\n  const bOutPutFileName = outputFilename;\n\n  const [keyword, setKeyword] = useState<string>();\n  const [selectedFileTypes, setSelectedFileTypes] = useState<string[]>([]);\n  const [selectedUpdateTypes, setSelectedUpdateTypes] = useState<UpdateType[]>(\n    [],\n  );\n  const [selectedSortType, setSelectedSortType] = useState<SortType>(\n    SortType.Size,\n  );\n  const [selectedBAsset, setSelectedBAsset] = useState(null);\n  const [selectedCAsset, setSelectedCAsset] = useState(null);\n\n  const { assets: bAssets } = baseline.chunkGraph;\n  const { assets: cAssets } = current.chunkGraph;\n\n  const dataSource = useMemo(() => {\n    const res: Record<string, BundleDiffTableAssetsData> = {};\n    if (selectedBAsset && selectedCAsset) {\n      res.choose = {\n        alias: `${selectedBAsset} \\n ${selectedCAsset}`,\n        current: cAssets.find((c: SDK.AssetData) => c.path === selectedCAsset),\n        baseline: bAssets.find((b: SDK.AssetData) => b.path === selectedBAsset),\n      };\n      return Object.values(res);\n    }\n\n    bAssets.forEach((asset: SDK.AssetData) => {\n      const alias = Graph.formatAssetName(asset.path, bOutPutFileName);\n      if (!res[alias]) {\n        res[alias] = {\n          alias,\n          baseline: asset,\n        };\n      } else {\n        console.warn('[Baseline Asset Exists]: ', asset, res);\n      }\n    });\n\n    cAssets.forEach((asset: SDK.AssetData) => {\n      const alias = Graph.formatAssetName(asset.path, bOutPutFileName);\n      if (!res[alias]) {\n        res[alias] = { alias };\n      }\n      res[alias].current = asset;\n    });\n\n    return Object.values(res);\n  }, [bAssets, cAssets, selectedBAsset, selectedCAsset]);\n\n  const filteredDataSource = useMemo(() => {\n    let list = dataSource.slice();\n\n    if (keyword) {\n      list = list.filter((e) => e.alias.indexOf(keyword) > -1);\n    }\n\n    if (selectedFileTypes.length) {\n      const exts = selectedFileTypes\n        .map((e) => fileTypes[e as keyof typeof fileTypes])\n        .flat();\n\n      const hasOthers = selectedFileTypes.indexOf('Others') > -1;\n\n      list = list.filter((e) => {\n        const asset = e.baseline! || e.current!;\n        if (Graph.isAssetMatchExtensions(asset, exts)) {\n          return true;\n        }\n\n        if (hasOthers) {\n          return !Graph.isAssetMatchExtensions(asset, definedExtensions);\n        }\n\n        return false;\n      });\n    }\n\n    if (selectedUpdateTypes.length) {\n      list = list.filter((e) => {\n        if (e.baseline && !e.current) {\n          // deleted\n          return selectedUpdateTypes.includes(UpdateType.Deleted);\n        }\n\n        if (!e.baseline && e.current) {\n          // new\n          return selectedUpdateTypes.includes(UpdateType.New);\n        }\n\n        if (e.baseline && e.current) {\n          if (e.baseline.size === e.current.size) {\n            // not changed\n            return selectedUpdateTypes.includes(UpdateType.NotChanged);\n          }\n          // changed\n          return selectedUpdateTypes.includes(UpdateType.Changed);\n        }\n\n        return false;\n      });\n    }\n\n    if (selectedSortType) {\n      if (selectedSortType === SortType.Name) {\n        list.sort((a, b) => {\n          return a.alias.localeCompare(b.alias);\n        });\n      } else {\n        const { prev, others } = list.reduce(\n          (t, c) => {\n            if (c.current) {\n              if (c.baseline) {\n                t.prev.unshift(c);\n              } else {\n                t.prev.push(c);\n              }\n            } else {\n              t.others.push(c);\n            }\n            return t;\n          },\n          {\n            prev: [] as BundleDiffTableAssetsData[],\n            others: [] as BundleDiffTableAssetsData[],\n          },\n        );\n\n        list = [\n          ...prev.sort((a, b) => {\n            if (b.current && a.current) {\n              if (selectedSortType === SortType.Delta) {\n                const { percent: percentA } = Graph.diffAssetsByExtensions(\n                  baseline.chunkGraph,\n                  current.chunkGraph,\n                  (asset) =>\n                    Graph.formatAssetName(asset.path, bOutPutFileName) ===\n                    a.alias,\n                );\n                const { percent: percentB } = Graph.diffAssetsByExtensions(\n                  baseline.chunkGraph,\n                  current.chunkGraph,\n                  (asset) =>\n                    Graph.formatAssetName(asset.path, bOutPutFileName) ===\n                    b.alias,\n                );\n                return percentB - percentA;\n              }\n              return b.current!.size - a.current!.size;\n            }\n            return -1;\n          }),\n          ...others,\n        ];\n      }\n    }\n\n    return list;\n  }, [\n    dataSource,\n    keyword,\n    selectedFileTypes,\n    selectedUpdateTypes,\n    selectedSortType,\n  ]);\n\n  const cSize = useMemo(\n    () =>\n      sumBy(filteredDataSource, (e) => (e.current ? e.current.size : 0)) || 0,\n    [filteredDataSource],\n  );\n  const bSize = useMemo(\n    () =>\n      sumBy(filteredDataSource, (e) => (e.baseline ? e.baseline.size : 0)) || 0,\n    [filteredDataSource],\n  );\n\n  return (\n    <Row gutter={[Size.BasePadding, Size.BasePadding]}>\n      <Col span={24}>\n        <Space wrap>\n          <KeywordInput\n            icon={<FileSearchOutlined />}\n            label=\"\"\n            labelStyle={{ width: 45 }}\n            placeholder=\"Search by file name\"\n            onChange={(e) => {\n              setKeyword(e);\n            }}\n          />\n          <Select\n            mode=\"multiple\"\n            placeholder=\"Filter by file type\"\n            style={{ width: 250 }}\n            options={Object.keys(fileTypes).map((e) => ({\n              label: e,\n              value: e,\n            }))}\n            allowClear\n            onChange={(e) => {\n              setSelectedFileTypes(e);\n            }}\n          />\n          <Select\n            mode=\"multiple\"\n            placeholder=\"Filter by file changed type\"\n            style={{ width: 200 }}\n            options={Object.values(UpdateType).map((e) => ({\n              label: e,\n              value: e,\n            }))}\n            allowClear\n            onChange={(e) => {\n              setSelectedUpdateTypes(e);\n            }}\n          />\n          <Select\n            suffixIcon={<SortAscendingOutlined />}\n            // style={{ width: 150 }}\n            options={Object.values(SortType).map((e) => ({\n              label: e,\n              value: e,\n            }))}\n            value={selectedSortType}\n            onChange={(e) => {\n              setSelectedSortType(e);\n            }}\n          />\n        </Space>\n        <Row style={{ marginTop: 10 }} gutter={[6, 6]}>\n          <Col>\n            <Button>Select Baseline Asset and Current Asset to Diff </Button>\n          </Col>\n          <Col>\n            <Select\n              allowClear\n              placeholder=\"select baseline assets\"\n              showSearch\n              style={{ width: 300 }}\n              options={Object.values(baseline.chunkGraph.assets).map((e) => ({\n                label: e.path,\n                value: e.path,\n              }))}\n              onChange={(e) => setSelectedBAsset(e)}\n            />\n          </Col>\n          <Col>\n            <Select\n              allowClear\n              placeholder=\"select current assets\"\n              showSearch\n              style={{ width: 300 }}\n              options={Object.values(current.chunkGraph.assets).map((e) => ({\n                label: e.path,\n                value: e.path,\n              }))}\n              onChange={(e) => setSelectedCAsset(e)}\n            />\n          </Col>\n        </Row>\n      </Col>\n      <Col span={24}>\n        <Table\n          bordered\n          sticky={{ offsetHeader: 54 }}\n          pagination={{\n            pageSize: 20,\n            size: 'small',\n          }}\n          dataSource={filteredDataSource}\n          rowKey={(e) => e.alias}\n          expandable={{\n            expandedRowRender: (r) => {\n              return (\n                <div style={{ margin: Size.BasePadding / 3 }}>\n                  <ModuleRowForAsset\n                    data={r}\n                    baseline={baseline}\n                    current={current}\n                  />\n                </div>\n              );\n            },\n            columnTitle: (\n              <Tooltip\n                title=\"Click to expand row to see the modules which the chunk contains\"\n                placement=\"left\"\n              >\n                <AppstoreAddOutlined style={{ cursor: 'pointer' }} />\n              </Tooltip>\n            ),\n          }}\n          columns={[\n            {\n              title: (\n                <Tooltip\n                  title={\n                    <Space direction=\"vertical\">\n                      <Typography.Text style={{ color: 'inherit' }}>\n                        filtered assets is {filteredDataSource.length}\n                      </Typography.Text>\n                      <Typography.Text style={{ color: 'inherit' }}>\n                        total assets is {dataSource.length}\n                      </Typography.Text>\n                    </Space>\n                  }\n                >\n                  <Typography.Text strong>Assets</Typography.Text>\n                  <Divider type=\"vertical\" />\n                  <Typography.Text\n                    type=\"secondary\"\n                    style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n                  >\n                    {filteredDataSource.length}/{dataSource.length}\n                  </Typography.Text>\n                  <InfoCircleOutlined />\n                </Tooltip>\n              ),\n              render: (_v, r) => <Name data={r} />,\n            },\n            {\n              title: () => {\n                const cs = formatSize(cSize);\n                const diff = Graph.diffSize(bSize, cSize);\n                return (\n                  <Tooltip\n                    title={`Current size is ${cs}, Delta is ${formatPercent(diff.percent)}`}\n                  >\n                    <Typography.Text strong>Current</Typography.Text>\n                    <Divider type=\"vertical\" />\n                    <Typography.Text\n                      style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n                    >\n                      <Typography.Text\n                        style={{ fontSize: 'inherit', marginRight: 8 }}\n                      >\n                        {cs}\n                      </Typography.Text>\n                      <SizePercent\n                        fontSize={'inherit'}\n                        baseline={bSize}\n                        current={cSize}\n                      />\n                      {formatDiffSize(\n                        bSize,\n                        cSize,\n                        bSize > cSize\n                          ? Client.RsdoctorClientDiffState.Down\n                          : Client.RsdoctorClientDiffState.Up,\n                        { fontSize: 10, fontWeight: 400, marginLeft: 4 },\n                      )}\n                    </Typography.Text>\n                    <InfoCircleOutlined />\n                  </Tooltip>\n                );\n              },\n              render: (_v, r) => {\n                if (r.current) {\n                  const { percent, state } = Graph.diffAssetsByExtensions(\n                    baseline.chunkGraph,\n                    current.chunkGraph,\n                    (asset) =>\n                      Graph.formatAssetName(asset.path, bOutPutFileName) ===\n                      r.alias,\n                  );\n                  const isInitial = Graph.isInitialAsset(\n                    r.current,\n                    current.chunkGraph.chunks,\n                  );\n                  return (\n                    <Space>\n                      <Typography.Text>\n                        {formatSize(r.current.size)}\n                      </Typography.Text>\n                      <Percent percent={percent} state={state} />\n                      {isInitial ? <Tag color={Color.Blue}>initial</Tag> : null}\n                    </Space>\n                  );\n                }\n                return '-';\n              },\n            },\n            {\n              title: () => {\n                const bs = formatSize(bSize);\n                return (\n                  <Tooltip title={`Baseline size is ${bs}`}>\n                    <Typography.Text strong>Baseline</Typography.Text>\n                    <Divider type=\"vertical\" />\n                    <Typography.Text\n                      style={{ fontSize: 10, fontWeight: 400, marginRight: 4 }}\n                    >\n                      {bs}\n                    </Typography.Text>\n                    <InfoCircleOutlined />\n                  </Tooltip>\n                );\n              },\n              render: (_v, r) => {\n                if (r.baseline) {\n                  const isInitial = Graph.isInitialAsset(\n                    r.baseline,\n                    baseline.chunkGraph.chunks,\n                  );\n                  return (\n                    <Space>\n                      <Typography.Text>\n                        {formatSize(r.baseline.size)}\n                      </Typography.Text>\n                      {isInitial ? <Tag color={Color.Blue}>initial</Tag> : null}\n                    </Space>\n                  );\n                }\n                return '-';\n              },\n            },\n            {\n              title: 'Actions',\n              key: 'actions',\n              render: (_v, r) => {\n                return (\n                  <ViewChanges\n                    file={r.alias}\n                    data={[\n                      {\n                        baseline: r.baseline?.content,\n                        current: r.current?.content,\n                        group: 'assets',\n                      },\n                    ]}\n                  />\n                );\n              },\n            },\n          ]}\n        />\n      </Col>\n    </Row>\n  );\n};\n"],"names":["fileTypes","Constants","definedExtensions","Object","Name","r","name","Space","Typography","Tooltip","InfoCircleOutlined","MinusSquareOutlined","Color","PlusSquareOutlined","CheckSquareOutlined","Assets","baseline","current","outputFilename","bOutPutFileName","keyword","setKeyword","useState","selectedFileTypes","setSelectedFileTypes","selectedUpdateTypes","setSelectedUpdateTypes","selectedSortType","setSelectedSortType","SortType","selectedBAsset","setSelectedBAsset","selectedCAsset","setSelectedCAsset","bAssets","cAssets","dataSource","useMemo","res","c","b","asset","alias","Graph","console","filteredDataSource","list","e","exts","hasOthers","UpdateType","a","prev","others","t","percentA","percentB","cSize","sumBy","bSize","Row","Size","Col","KeywordInput","FileSearchOutlined","Select","SortAscendingOutlined","Button","Table","ModuleRowForAsset","AppstoreAddOutlined","Divider","_v","cs","formatSize","diff","formatPercent","SizePercent","formatDiffSize","Client","percent","state","isInitial","Percent","Tag","bs","ViewChanges"],"mappings":";;;;;;;;;;;;;;;AAmCA,MAAMA,YAAY;IAChB,IAAIC,UAAU,YAAY;IAC1B,KAAK;QAACA,UAAU,YAAY;KAAC;IAC7B,MAAM;QAACA,UAAU,aAAa;KAAC;IAC/B,MAAMA,UAAU,aAAa;IAC7B,OAAOA,UAAU,cAAc;IAC/B,OAAOA,UAAU,eAAe;IAChC,QAAQ,EAAE;AACZ;AAEA,MAAMC,oBAAoBC,OAAO,MAAM,CAACH,WAAW,IAAI;AAEvD,MAAMI,OAAsD,CAAC,EAAE,MAAMC,CAAC,EAAE;IACtE,MAAMC,OAAO,WAAPA,GACJ,KAACC,OAAKA;;0BACJ,IAACC,WAAW,IAAI;gBAAC,QAAM;0BAAEH,EAAE,KAAK;;0BAChC,IAACI,SAAOA;gBACN,qBACE,KAACF,OAAKA;oBAAC,OAAO;wBAAE,OAAO;oBAAU;oBAAG,WAAU;;wBAC3CF,EAAE,OAAO,GAAG,WAAH,GACR,KAACG,WAAW,IAAI;4BAAC,OAAO;gCAAE,OAAO;4BAAU;;gCAAG;gCACzBH,EAAE,OAAO,CAAC,IAAI;;6BAEjC;wBACHA,EAAE,QAAQ,GAAG,WAAH,GACT,KAACG,WAAW,IAAI;4BAAC,OAAO;gCAAE,OAAO;4BAAU;;gCAAG;gCACxBH,EAAE,QAAQ,CAAC,IAAI;;6BAEnC;;;0BAIR,kBAACK,oBAAkBA,CAAAA;;;;IAKzB,IAAIL,EAAE,QAAQ,IAAI,CAACA,EAAE,OAAO,EAE1B,OAAO,WAAP,GACE,KAACE,OAAKA;;0BACJ,IAACI,qBAAmBA;gBAAC,OAAO;oBAAE,OAAOC,MAAM,GAAG;gBAAC;;YAC9CN;;;IAKP,IAAI,CAACD,EAAE,QAAQ,IAAIA,EAAE,OAAO,EAE1B,OAAO,WAAP,GACE,KAACE,OAAKA;;0BACJ,IAACM,oBAAkBA;gBAAC,OAAO;oBAAE,OAAOD,MAAM,KAAK;gBAAC;;YAC/CN;;;IAKP,IAAID,EAAE,QAAQ,IAAIA,EAAE,OAAO,EAEzB,OAAO,WAAP,GACE,KAACE,OAAKA;;0BACJ,IAACO,qBAAmBA;gBAAC,OAAO;oBAAE,OAAOF,MAAM,MAAM;gBAAC;;YACjDN;;;IAKP,OAAOA;AACT;AAEO,MAAMS,SAIR,CAAC,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,cAAc,EAAE;IACzC,MAAMC,kBAAkBD;IAExB,MAAM,CAACE,SAASC,WAAW,GAAGC;IAC9B,MAAM,CAACC,mBAAmBC,qBAAqB,GAAGF,SAAmB,EAAE;IACvE,MAAM,CAACG,qBAAqBC,uBAAuB,GAAGJ,SACpD,EAAE;IAEJ,MAAM,CAACK,kBAAkBC,oBAAoB,GAAGN,SAC9CO,SAAS,IAAI;IAEf,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGT,SAAS;IACrD,MAAM,CAACU,gBAAgBC,kBAAkB,GAAGX,SAAS;IAErD,MAAM,EAAE,QAAQY,OAAO,EAAE,GAAGlB,SAAS,UAAU;IAC/C,MAAM,EAAE,QAAQmB,OAAO,EAAE,GAAGlB,QAAQ,UAAU;IAE9C,MAAMmB,aAAaC,QAAQ;QACzB,MAAMC,MAAiD,CAAC;QACxD,IAAIR,kBAAkBE,gBAAgB;YACpCM,IAAI,MAAM,GAAG;gBACX,OAAO,GAAGR,eAAe,IAAI,EAAEE,gBAAgB;gBAC/C,SAASG,QAAQ,IAAI,CAAC,CAACI,IAAqBA,EAAE,IAAI,KAAKP;gBACvD,UAAUE,QAAQ,IAAI,CAAC,CAACM,IAAqBA,EAAE,IAAI,KAAKV;YAC1D;YACA,OAAO3B,OAAO,MAAM,CAACmC;QACvB;QAEAJ,QAAQ,OAAO,CAAC,CAACO;YACf,MAAMC,QAAQC,MAAM,eAAe,CAACF,MAAM,IAAI,EAAEtB;YAChD,IAAKmB,GAAG,CAACI,MAAM,EAMbE,QAAQ,IAAI,CAAC,6BAA6BH,OAAOH;iBALjDA,GAAG,CAACI,MAAM,GAAG;gBACXA;gBACA,UAAUD;YACZ;QAIJ;QAEAN,QAAQ,OAAO,CAAC,CAACM;YACf,MAAMC,QAAQC,MAAM,eAAe,CAACF,MAAM,IAAI,EAAEtB;YAChD,IAAI,CAACmB,GAAG,CAACI,MAAM,EACbJ,GAAG,CAACI,MAAM,GAAG;gBAAEA;YAAM;YAEvBJ,GAAG,CAACI,MAAM,CAAC,OAAO,GAAGD;QACvB;QAEA,OAAOtC,OAAO,MAAM,CAACmC;IACvB,GAAG;QAACJ;QAASC;QAASL;QAAgBE;KAAe;IAErD,MAAMa,qBAAqBR,QAAQ;QACjC,IAAIS,OAAOV,WAAW,KAAK;QAE3B,IAAIhB,SACF0B,OAAOA,KAAK,MAAM,CAAC,CAACC,IAAMA,EAAE,KAAK,CAAC,OAAO,CAAC3B,WAAW;QAGvD,IAAIG,kBAAkB,MAAM,EAAE;YAC5B,MAAMyB,OAAOzB,kBACV,GAAG,CAAC,CAACwB,IAAM/C,SAAS,CAAC+C,EAA4B,EACjD,IAAI;YAEP,MAAME,YAAY1B,kBAAkB,OAAO,CAAC,YAAY;YAExDuB,OAAOA,KAAK,MAAM,CAAC,CAACC;gBAClB,MAAMN,QAAQM,EAAE,QAAQ,IAAKA,EAAE,OAAO;gBACtC,IAAIJ,MAAM,sBAAsB,CAACF,OAAOO,OACtC,OAAO;gBAGT,IAAIC,WACF,OAAO,CAACN,MAAM,sBAAsB,CAACF,OAAOvC;gBAG9C,OAAO;YACT;QACF;QAEA,IAAIuB,oBAAoB,MAAM,EAC5BqB,OAAOA,KAAK,MAAM,CAAC,CAACC;YAClB,IAAIA,EAAE,QAAQ,IAAI,CAACA,EAAE,OAAO,EAE1B,OAAOtB,oBAAoB,QAAQ,CAACyB,WAAW,OAAO;YAGxD,IAAI,CAACH,EAAE,QAAQ,IAAIA,EAAE,OAAO,EAE1B,OAAOtB,oBAAoB,QAAQ,CAACyB,WAAW,GAAG;YAGpD,IAAIH,EAAE,QAAQ,IAAIA,EAAE,OAAO,EAAE;gBAC3B,IAAIA,EAAE,QAAQ,CAAC,IAAI,KAAKA,EAAE,OAAO,CAAC,IAAI,EAEpC,OAAOtB,oBAAoB,QAAQ,CAACyB,WAAW,UAAU;gBAG3D,OAAOzB,oBAAoB,QAAQ,CAACyB,WAAW,OAAO;YACxD;YAEA,OAAO;QACT;QAGF,IAAIvB,kBACF,IAAIA,qBAAqBE,SAAS,IAAI,EACpCiB,KAAK,IAAI,CAAC,CAACK,GAAGX,IACLW,EAAE,KAAK,CAAC,aAAa,CAACX,EAAE,KAAK;aAEjC;YACL,MAAM,EAAEY,IAAI,EAAEC,MAAM,EAAE,GAAGP,KAAK,MAAM,CAClC,CAACQ,GAAGf;gBACF,IAAIA,EAAE,OAAO,EACX,IAAIA,EAAE,QAAQ,EACZe,EAAE,IAAI,CAAC,OAAO,CAACf;qBAEfe,EAAE,IAAI,CAAC,IAAI,CAACf;qBAGde,EAAE,MAAM,CAAC,IAAI,CAACf;gBAEhB,OAAOe;YACT,GACA;gBACE,MAAM,EAAE;gBACR,QAAQ,EAAE;YACZ;YAGFR,OAAO;mBACFM,KAAK,IAAI,CAAC,CAACD,GAAGX;oBACf,IAAIA,EAAE,OAAO,IAAIW,EAAE,OAAO,EAAE;wBAC1B,IAAIxB,qBAAqBE,SAAS,KAAK,EAAE;4BACvC,MAAM,EAAE,SAAS0B,QAAQ,EAAE,GAAGZ,MAAM,sBAAsB,CACxD3B,SAAS,UAAU,EACnBC,QAAQ,UAAU,EAClB,CAACwB,QACCE,MAAM,eAAe,CAACF,MAAM,IAAI,EAAEtB,qBAClCgC,EAAE,KAAK;4BAEX,MAAM,EAAE,SAASK,QAAQ,EAAE,GAAGb,MAAM,sBAAsB,CACxD3B,SAAS,UAAU,EACnBC,QAAQ,UAAU,EAClB,CAACwB,QACCE,MAAM,eAAe,CAACF,MAAM,IAAI,EAAEtB,qBAClCqB,EAAE,KAAK;4BAEX,OAAOgB,WAAWD;wBACpB;wBACA,OAAOf,EAAE,OAAO,CAAE,IAAI,GAAGW,EAAE,OAAO,CAAE,IAAI;oBAC1C;oBACA,OAAO;gBACT;mBACGE;aACJ;QACH;QAGF,OAAOP;IACT,GAAG;QACDV;QACAhB;QACAG;QACAE;QACAE;KACD;IAED,MAAM8B,QAAQpB,QACZ,IACEqB,MAAMb,oBAAoB,CAACE,IAAOA,EAAE,OAAO,GAAGA,EAAE,OAAO,CAAC,IAAI,GAAG,MAAO,GACxE;QAACF;KAAmB;IAEtB,MAAMc,QAAQtB,QACZ,IACEqB,MAAMb,oBAAoB,CAACE,IAAOA,EAAE,QAAQ,GAAGA,EAAE,QAAQ,CAAC,IAAI,GAAG,MAAO,GAC1E;QAACF;KAAmB;IAGtB,OAAO,WAAP,GACE,KAACe,KAAGA;QAAC,QAAQ;YAACC,KAAK,WAAW;YAAEA,KAAK,WAAW;SAAC;;0BAC/C,KAACC,KAAGA;gBAAC,MAAM;;kCACT,KAACvD,OAAKA;wBAAC,MAAI;;0CACT,IAACwD,cAAYA;gCACX,oBAAM,IAACC,oBAAkBA,CAAAA;gCACzB,OAAM;gCACN,YAAY;oCAAE,OAAO;gCAAG;gCACxB,aAAY;gCACZ,UAAU,CAACjB;oCACT1B,WAAW0B;gCACb;;0CAEF,IAACkB,QAAMA;gCACL,MAAK;gCACL,aAAY;gCACZ,OAAO;oCAAE,OAAO;gCAAI;gCACpB,SAAS9D,OAAO,IAAI,CAACH,WAAW,GAAG,CAAC,CAAC+C,IAAO;wCAC1C,OAAOA;wCACP,OAAOA;oCACT;gCACA,YAAU;gCACV,UAAU,CAACA;oCACTvB,qBAAqBuB;gCACvB;;0CAEF,IAACkB,QAAMA;gCACL,MAAK;gCACL,aAAY;gCACZ,OAAO;oCAAE,OAAO;gCAAI;gCACpB,SAAS9D,OAAO,MAAM,CAAC+C,YAAY,GAAG,CAAC,CAACH,IAAO;wCAC7C,OAAOA;wCACP,OAAOA;oCACT;gCACA,YAAU;gCACV,UAAU,CAACA;oCACTrB,uBAAuBqB;gCACzB;;0CAEF,IAACkB,QAAMA;gCACL,0BAAY,IAACC,uBAAqBA,CAAAA;gCAElC,SAAS/D,OAAO,MAAM,CAAC0B,UAAU,GAAG,CAAC,CAACkB,IAAO;wCAC3C,OAAOA;wCACP,OAAOA;oCACT;gCACA,OAAOpB;gCACP,UAAU,CAACoB;oCACTnB,oBAAoBmB;gCACtB;;;;kCAGJ,KAACa,KAAGA;wBAAC,OAAO;4BAAE,WAAW;wBAAG;wBAAG,QAAQ;4BAAC;4BAAG;yBAAE;;0CAC3C,IAACE,KAAGA;0CACF,kBAACK,QAAMA;8CAAC;;;0CAEV,IAACL,KAAGA;0CACF,kBAACG,QAAMA;oCACL,YAAU;oCACV,aAAY;oCACZ,YAAU;oCACV,OAAO;wCAAE,OAAO;oCAAI;oCACpB,SAAS9D,OAAO,MAAM,CAACa,SAAS,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC+B,IAAO;4CAC7D,OAAOA,EAAE,IAAI;4CACb,OAAOA,EAAE,IAAI;wCACf;oCACA,UAAU,CAACA,IAAMhB,kBAAkBgB;;;0CAGvC,IAACe,KAAGA;0CACF,kBAACG,QAAMA;oCACL,YAAU;oCACV,aAAY;oCACZ,YAAU;oCACV,OAAO;wCAAE,OAAO;oCAAI;oCACpB,SAAS9D,OAAO,MAAM,CAACc,QAAQ,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC8B,IAAO;4CAC5D,OAAOA,EAAE,IAAI;4CACb,OAAOA,EAAE,IAAI;wCACf;oCACA,UAAU,CAACA,IAAMd,kBAAkBc;;;;;;;0BAK3C,IAACe,KAAGA;gBAAC,MAAM;0BACT,kBAACM,OAAKA;oBACJ,UAAQ;oBACR,QAAQ;wBAAE,cAAc;oBAAG;oBAC3B,YAAY;wBACV,UAAU;wBACV,MAAM;oBACR;oBACA,YAAYvB;oBACZ,QAAQ,CAACE,IAAMA,EAAE,KAAK;oBACtB,YAAY;wBACV,mBAAmB,CAAC1C,IACX,WAAP,GACE,IAAC;gCAAI,OAAO;oCAAE,QAAQwD,KAAK,WAAW,GAAG;gCAAE;0CACzC,kBAACQ,mBAAiBA;oCAChB,MAAMhE;oCACN,UAAUW;oCACV,SAASC;;;wBAKjB,aAAa,WAAb,GACE,IAACR,SAAOA;4BACN,OAAM;4BACN,WAAU;sCAEV,kBAAC6D,qBAAmBA;gCAAC,OAAO;oCAAE,QAAQ;gCAAU;;;oBAGtD;oBACA,SAAS;wBACP;4BACE,OAAO,WAAP,GACE,KAAC7D,SAAOA;gCACN,qBACE,KAACF,OAAKA;oCAAC,WAAU;;sDACf,KAACC,WAAW,IAAI;4CAAC,OAAO;gDAAE,OAAO;4CAAU;;gDAAG;gDACxBqC,mBAAmB,MAAM;;;sDAE/C,KAACrC,WAAW,IAAI;4CAAC,OAAO;gDAAE,OAAO;4CAAU;;gDAAG;gDAC3B4B,WAAW,MAAM;;;;;;kDAKxC,IAAC5B,WAAW,IAAI;wCAAC,QAAM;kDAAC;;kDACxB,IAAC+D,SAAOA;wCAAC,MAAK;;kDACd,KAAC/D,WAAW,IAAI;wCACd,MAAK;wCACL,OAAO;4CAAE,UAAU;4CAAI,YAAY;4CAAK,aAAa;wCAAE;;4CAEtDqC,mBAAmB,MAAM;4CAAC;4CAAET,WAAW,MAAM;;;kDAEhD,IAAC1B,oBAAkBA,CAAAA;;;4BAGvB,QAAQ,CAAC8D,IAAInE,IAAAA,WAAAA,GAAM,IAACD,MAAIA;oCAAC,MAAMC;;wBACjC;wBACA;4BACE,OAAO;gCACL,MAAMoE,KAAKC,WAAWjB;gCACtB,MAAMkB,OAAOhC,MAAM,QAAQ,CAACgB,OAAOF;gCACnC,OAAO,WAAP,GACE,KAAChD,SAAOA;oCACN,OAAO,CAAC,gBAAgB,EAAEgE,GAAG,WAAW,EAAEG,cAAcD,KAAK,OAAO,GAAG;;sDAEvE,IAACnE,WAAW,IAAI;4CAAC,QAAM;sDAAC;;sDACxB,IAAC+D,SAAOA;4CAAC,MAAK;;sDACd,KAAC/D,WAAW,IAAI;4CACd,OAAO;gDAAE,UAAU;gDAAI,YAAY;gDAAK,aAAa;4CAAE;;8DAEvD,IAACA,WAAW,IAAI;oDACd,OAAO;wDAAE,UAAU;wDAAW,aAAa;oDAAE;8DAE5CiE;;8DAEH,IAACI,aAAWA;oDACV,UAAU;oDACV,UAAUlB;oDACV,SAASF;;gDAEVqB,eACCnB,OACAF,OACAE,QAAQF,QACJsB,OAAO,uBAAuB,CAAC,IAAI,GACnCA,OAAO,uBAAuB,CAAC,EAAE,EACrC;oDAAE,UAAU;oDAAI,YAAY;oDAAK,YAAY;gDAAE;;;sDAGnD,IAACrE,oBAAkBA,CAAAA;;;4BAGzB;4BACA,QAAQ,CAAC8D,IAAInE;gCACX,IAAIA,EAAE,OAAO,EAAE;oCACb,MAAM,EAAE2E,OAAO,EAAEC,KAAK,EAAE,GAAGtC,MAAM,sBAAsB,CACrD3B,SAAS,UAAU,EACnBC,QAAQ,UAAU,EAClB,CAACwB,QACCE,MAAM,eAAe,CAACF,MAAM,IAAI,EAAEtB,qBAClCd,EAAE,KAAK;oCAEX,MAAM6E,YAAYvC,MAAM,cAAc,CACpCtC,EAAE,OAAO,EACTY,QAAQ,UAAU,CAAC,MAAM;oCAE3B,OAAO,WAAP,GACE,KAACV,OAAKA;;0DACJ,IAACC,WAAW,IAAI;0DACbkE,WAAWrE,EAAE,OAAO,CAAC,IAAI;;0DAE5B,IAAC8E,SAAOA;gDAAC,SAASH;gDAAS,OAAOC;;4CACjCC,YAAY,WAAZA,GAAY,IAACE,KAAGA;gDAAC,OAAOxE,MAAM,IAAI;0DAAE;iDAAgB;;;gCAG3D;gCACA,OAAO;4BACT;wBACF;wBACA;4BACE,OAAO;gCACL,MAAMyE,KAAKX,WAAWf;gCACtB,OAAO,WAAP,GACE,KAAClD,SAAOA;oCAAC,OAAO,CAAC,iBAAiB,EAAE4E,IAAI;;sDACtC,IAAC7E,WAAW,IAAI;4CAAC,QAAM;sDAAC;;sDACxB,IAAC+D,SAAOA;4CAAC,MAAK;;sDACd,IAAC/D,WAAW,IAAI;4CACd,OAAO;gDAAE,UAAU;gDAAI,YAAY;gDAAK,aAAa;4CAAE;sDAEtD6E;;sDAEH,IAAC3E,oBAAkBA,CAAAA;;;4BAGzB;4BACA,QAAQ,CAAC8D,IAAInE;gCACX,IAAIA,EAAE,QAAQ,EAAE;oCACd,MAAM6E,YAAYvC,MAAM,cAAc,CACpCtC,EAAE,QAAQ,EACVW,SAAS,UAAU,CAAC,MAAM;oCAE5B,OAAO,WAAP,GACE,KAACT,OAAKA;;0DACJ,IAACC,WAAW,IAAI;0DACbkE,WAAWrE,EAAE,QAAQ,CAAC,IAAI;;4CAE5B6E,YAAY,WAAZA,GAAY,IAACE,KAAGA;gDAAC,OAAOxE,MAAM,IAAI;0DAAE;iDAAgB;;;gCAG3D;gCACA,OAAO;4BACT;wBACF;wBACA;4BACE,OAAO;4BACP,KAAK;4BACL,QAAQ,CAAC4D,IAAInE,IACJ,WAAP,GACE,IAACiF,aAAWA;oCACV,MAAMjF,EAAE,KAAK;oCACb,MAAM;wCACJ;4CACE,UAAUA,EAAE,QAAQ,EAAE;4CACtB,SAASA,EAAE,OAAO,EAAE;4CACpB,OAAO;wCACT;qCACD;;wBAIT;qBACD;;;;;AAKX"}