{"version":3,"file":"DetailsSection.mjs","sources":["../../../../../../../../web/src/adminPortal/sso/DetailsSection.tsx"],"sourcesContent":["import {\n  B2BSSOOIDCUpdateConnectionOptions,\n  B2BSSOSAMLUpdateConnectionOptions,\n  B2BSSOUpdateExternalConnectionOptions,\n  StytchSDKAPIError,\n  X509Certificate,\n} from '@stytch/core/public';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { deepEqual } from '../../utils/deepEqual';\nimport { Button } from '../components/Button';\nimport { CopyableText } from '../components/CopyableText';\nimport { FlexBox } from '../components/FlexBox';\nimport { Input } from '../components/Input';\nimport { ListEditor } from '../components/ListEditor';\nimport { Modal, useModalState } from '../components/Modal';\nimport { Select } from '../components/Select';\nimport { SettingsContainer, useSettingsContainer } from '../components/SettingsContainer';\nimport { SettingsList } from '../components/SettingsList';\nimport { SettingsListItem } from '../components/SettingsListItem';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { StateProps, useFormState } from '../utils/useFormState';\nimport {\n  useDeleteSsoConnectionCert,\n  useMutateSsoConnection,\n  useMutateSsoConnectionByUrl,\n} from '../utils/useMutateSsoConnection';\nimport { useStateSliceSetter } from '../utils/useStateSliceSetter';\nimport { DefaultAppDetails } from './AppDetails';\nimport { AttributeMappingTable } from './AttributeMappingTable';\nimport { getIdpAndConnectionInfo } from './IdpInfo';\nimport { oidcIdpSelectItems, samlIdpSelectItems } from './IdpSelect';\nimport { useSsoRouterController } from './SSORouter';\nimport { TaggedConnection } from './TaggedConnection';\n\nconst certItemRenderer: TableItemRenderer<CertificateListItem>[] = [\n  {\n    title: 'Issuer',\n    getValue: (item) => <Typography variant=\"body2\">{'issuer' in item ? item.issuer : 'Pending'}</Typography>,\n  },\n  {\n    title: 'Created',\n    getValue: (item) => (\n      <Typography variant=\"body2\">\n        {'created_at' in item ? new Date(item.created_at).toLocaleString() : 'Pending'}\n      </Typography>\n    ),\n  },\n  {\n    title: 'Expires',\n    getValue: (item) => (\n      <Typography variant=\"body2\">\n        {'expires_at' in item ? new Date(item.expires_at).toLocaleString() : 'Pending'}\n      </Typography>\n    ),\n  },\n];\n\nconst certKeyExtractor = (item: CertificateListItem): string =>\n  'certificate_id' in item ? item.certificate_id : 'new-certificate-id-pending';\n\ninterface SamlDetailsFormState {\n  identityProvider: string;\n  metadataUrl?: string;\n  ssoUrl?: string;\n  entityId?: string;\n  certificate?: string;\n  deletedCertificateIds?: string[];\n}\n\ninterface OidcDetailsFormState {\n  identityProvider: string;\n  clientId: string;\n  clientSecret: string;\n  issuer?: string;\n  issuerDerivedValue?: string;\n  authorizationUrl?: string;\n  tokenUrl?: string;\n  userInfoUrl?: string;\n  jwksUrl?: string;\n}\n\ninterface DetailsFormState extends Partial<SamlDetailsFormState>, Partial<OidcDetailsFormState> {\n  displayName: string;\n  attributeMapping: Record<string, string>;\n  manualConfiguration: boolean;\n}\n\ninterface FormSectionBody<TFormState> {\n  localState: TFormState;\n  remoteState: TFormState;\n  setLocalState: (state: React.SetStateAction<TFormState>) => void;\n}\n\ninterface DetailsSectionBodyProps extends FormSectionBody<DetailsFormState> {\n  connection: TaggedConnection;\n}\n\ntype X509CertificateListItem = X509Certificate & Record<string, unknown>;\n\ntype CertificateListItem = X509CertificateListItem | { certificate: string; isPending: true };\n\ninterface CertificateTableState {\n  certificate?: string | undefined;\n  deletedCertificateIds?: string[];\n}\n\ninterface CertificateTableProps<TState> extends StateProps<TState, X509Certificate[] | undefined> {\n  editing: boolean;\n  manualConfiguration: boolean;\n}\n\nconst CertificateTable = <TState extends CertificateTableState>({\n  editing,\n  localState,\n  manualConfiguration,\n  remoteState,\n  setLocalState,\n}: CertificateTableProps<TState>) => {\n  const certificates = useMemo<CertificateListItem[] | undefined>(() => {\n    if (!remoteState) {\n      return undefined;\n    }\n\n    const remoteCertificates = remoteState as X509CertificateListItem[];\n\n    if (!editing) {\n      return remoteCertificates;\n    }\n\n    return [\n      ...remoteCertificates.filter((cert) => !localState.deletedCertificateIds?.includes(cert.certificate_id)),\n      ...(localState.certificate\n        ? [\n            {\n              certificate: localState.certificate,\n              isPending: true,\n            } satisfies CertificateListItem,\n          ]\n        : []),\n    ];\n  }, [editing, localState, remoteState]);\n\n  const viewCertModalProps = useModalState();\n  const [viewCertificateContents, setViewCertificateContents] = useState<string>();\n\n  const persistPendingCertificate = useStateSliceSetter(setLocalState, 'certificate');\n  const addCertModalProps = useModalState(() => {\n    persistPendingCertificate(pendingCert);\n  });\n  const [pendingCert, setPendingCert] = useState('');\n\n  const remoteCertificateCount = remoteState?.length ?? 0;\n  const remoteCertificatePendingDeletionCount = localState.deletedCertificateIds?.length ?? 0;\n\n  const minimumRequiredCertificates = 1;\n  const maximumAllowedCertificates = 5;\n\n  const canDeleteCertificates =\n    remoteCertificateCount - remoteCertificatePendingDeletionCount > minimumRequiredCertificates;\n\n  const canAddCertificate =\n    editing &&\n    manualConfiguration &&\n    !localState.certificate &&\n    remoteCertificateCount - remoteCertificatePendingDeletionCount < maximumAllowedCertificates;\n\n  return (\n    <>\n      <Modal {...viewCertModalProps} title=\"View x509 Certificate\" confirmButtonText=\"Close\" noCancelButton>\n        <CopyableText whiteSpace=\"pre-wrap\">{viewCertificateContents}</CopyableText>\n      </Modal>\n      <Modal {...addCertModalProps} title=\"Add Certificate\">\n        <Input\n          label=\"x509 Certificate\"\n          multiline\n          onChange={(value) => {\n            setPendingCert(value);\n          }}\n          placeholder=\"Enter certificate\"\n          value={pendingCert}\n        />\n      </Modal>\n      <ListEditor\n        items={certificates ?? []}\n        itemRenderer={certItemRenderer}\n        rowKeyExtractor={certKeyExtractor}\n        onAdd={() => {\n          setPendingCert('');\n          addCertModalProps.open();\n        }}\n        getItemActionProps={(item) => ({\n          action: {\n            text: item.isPending ? 'Edit' : 'View',\n            onClick: () => {\n              if (item.isPending) {\n                setPendingCert(item.certificate);\n                addCertModalProps.open();\n              } else {\n                setViewCertificateContents(item.certificate);\n                viewCertModalProps.open();\n              }\n            },\n          },\n          warningAction:\n            editing && (item.isPending || canDeleteCertificates)\n              ? {\n                  text: 'Delete',\n                  onClick: () => {\n                    if (item.isPending) {\n                      persistPendingCertificate(undefined);\n                    } else if ('certificate_id' in item) {\n                      setLocalState((state) => {\n                        return {\n                          ...state,\n                          deletedCertificateIds: [...(state.deletedCertificateIds ?? []), item.certificate_id],\n                        };\n                      });\n                    }\n                  },\n                }\n              : undefined,\n        })}\n        hideAddButton={!canAddCertificate}\n      />\n    </>\n  );\n};\n\nconst DetailsSectionBody = ({\n  connection: taggedConnection,\n  localState,\n  remoteState,\n  setLocalState,\n}: DetailsSectionBodyProps) => {\n  const { editing } = useSettingsContainer();\n\n  const { displayName, identityProvider } = editing ? localState : remoteState;\n\n  const handleDisplayNameChange = useStateSliceSetter(setLocalState, 'displayName');\n  const handleIdentityProviderChange = useStateSliceSetter(setLocalState, 'identityProvider');\n\n  const handleMetadataUrlChange = useStateSliceSetter(setLocalState, 'metadataUrl');\n  const handleSsoUrlChange = useStateSliceSetter(setLocalState, 'ssoUrl');\n  const handleEntityIdChange = useStateSliceSetter(setLocalState, 'entityId');\n\n  const handleClientIdChange = useStateSliceSetter(setLocalState, 'clientId');\n  const handleClientSecretChange = useStateSliceSetter(setLocalState, 'clientSecret');\n  const handleIssuerChange = useStateSliceSetter(setLocalState, 'issuer');\n  const handleIssuerDerivedValueChange = useStateSliceSetter(setLocalState, 'issuerDerivedValue');\n  const handleAuthorizationUrlChange = useStateSliceSetter(setLocalState, 'authorizationUrl');\n  const handleTokenUrlChange = useStateSliceSetter(setLocalState, 'tokenUrl');\n  const handleUserInfoUrlChange = useStateSliceSetter(setLocalState, 'userInfoUrl');\n  const handleJwksUrlChange = useStateSliceSetter(setLocalState, 'jwksUrl');\n\n  const { connection, idp, type } = getIdpAndConnectionInfo(taggedConnection);\n\n  const idpRequiresManualConfig = type === 'saml' && idp.metadataUrlLabel === false;\n  const manualConfiguration = localState.manualConfiguration || idpRequiresManualConfig;\n  const setManualConfiguration = useStateSliceSetter(setLocalState, 'manualConfiguration');\n\n  return (\n    <FlexBox flexDirection=\"column\" gap={2}>\n      <SettingsSection title=\"Display Name\">\n        {editing ? (\n          <Input value={displayName} onChange={handleDisplayNameChange} />\n        ) : (\n          <Typography variant=\"body2\">{displayName}</Typography>\n        )}\n      </SettingsSection>\n      {connection.connectionType === 'external' && (\n        <>\n          <SettingsSection title=\"Source Organization ID\">\n            <CopyableText>{connection.external_organization_id}</CopyableText>\n          </SettingsSection>\n          <SettingsSection title=\"Connection ID\">\n            <CopyableText>{connection.connection_id}</CopyableText>\n          </SettingsSection>\n          <SettingsSection title=\"External Connection ID\">\n            <CopyableText>{connection.external_connection_id}</CopyableText>\n          </SettingsSection>\n        </>\n      )}\n      {(type === 'saml' || type === 'oidc') && (\n        <>\n          <SettingsSection title=\"IdP\">\n            {editing ? (\n              <Select\n                width={360}\n                placeholder=\"Select\"\n                selectItems={type === 'saml' ? samlIdpSelectItems : oidcIdpSelectItems}\n                value={identityProvider}\n                onChange={handleIdentityProviderChange}\n              />\n            ) : (\n              <Typography variant=\"body2\">{idp.displayName}</Typography>\n            )}\n          </SettingsSection>\n          <SettingsSection title=\"App Values\" tooltipText=\"Copy these App (Service Provider) Values into your IdP.\">\n            <SettingsList>\n              <SettingsListItem title=\"Connection ID\">\n                <CopyableText>{connection.connection_id}</CopyableText>\n              </SettingsListItem>\n              <DefaultAppDetails connection={connection} />\n            </SettingsList>\n          </SettingsSection>\n          <SettingsSection title=\"IdP Values\">\n            <SettingsList>\n              {type === 'saml' && (\n                <>\n                  {editing && !manualConfiguration ? (\n                    <SettingsListItem title={idp.metadataUrlLabel}>\n                      <Input\n                        placeholder={`Enter ${idp.metadataUrlLabel}`}\n                        value={localState.metadataUrl || ''}\n                        onChange={handleMetadataUrlChange}\n                      />\n                    </SettingsListItem>\n                  ) : (\n                    <>\n                      <SettingsListItem title={idp.idpSsoUrlLabel}>\n                        {editing ? (\n                          <Input\n                            placeholder={`Enter ${idp.idpSsoUrlLabel}`}\n                            value={localState.ssoUrl || ''}\n                            onChange={handleSsoUrlChange}\n                          />\n                        ) : (\n                          <Typography variant=\"body2\">{connection.idp_sso_url || '–'}</Typography>\n                        )}\n                      </SettingsListItem>\n                      <SettingsListItem title={idp.idpEntityIdLabel}>\n                        {editing ? (\n                          <Input\n                            placeholder={`Enter ${idp.idpEntityIdLabel}`}\n                            value={localState.entityId || ''}\n                            onChange={handleEntityIdChange}\n                          />\n                        ) : (\n                          <Typography variant=\"body2\">{connection.idp_entity_id || '–'}</Typography>\n                        )}\n                      </SettingsListItem>\n                    </>\n                  )}\n                  <SettingsListItem title={idp.x509CertificateLabel}>\n                    <CertificateTable\n                      editing={editing}\n                      remoteState={connection.verification_certificates}\n                      localState={localState}\n                      setLocalState={setLocalState}\n                      manualConfiguration={manualConfiguration}\n                    />\n                  </SettingsListItem>\n                  {editing && !idpRequiresManualConfig && (\n                    <Button\n                      compact\n                      variant=\"ghost\"\n                      onClick={() => {\n                        setManualConfiguration(!manualConfiguration);\n                      }}\n                    >\n                      {manualConfiguration ? `Configure using ${idp.metadataUrlLabel}` : 'Configure manually'}\n                    </Button>\n                  )}\n                </>\n              )}\n              {type === 'oidc' && (\n                <>\n                  <SettingsListItem title={idp.clientIdLabel}>\n                    {editing ? (\n                      <Input\n                        placeholder={`Enter ${idp.clientIdLabel}`}\n                        value={localState.clientId || ''}\n                        onChange={handleClientIdChange}\n                      />\n                    ) : (\n                      <Typography variant=\"body2\">{connection.client_id || '–'}</Typography>\n                    )}\n                  </SettingsListItem>\n                  <SettingsListItem title={idp.clientSecretLabel}>\n                    {editing ? (\n                      <Input\n                        placeholder={`Enter ${idp.clientSecretLabel}`}\n                        value={localState.clientSecret || ''}\n                        onChange={handleClientSecretChange}\n                      />\n                    ) : (\n                      <Typography variant=\"body2\">{connection.client_secret || '–'}</Typography>\n                    )}\n                  </SettingsListItem>\n                  {idp.issuerDerivedLabel ? (\n                    <SettingsListItem title={idp.issuerDerivedLabel}>\n                      {editing ? (\n                        <Input\n                          placeholder={`Enter ${idp.issuerDerivedLabel}`}\n                          value={localState.issuerDerivedValue || ''}\n                          onChange={handleIssuerDerivedValueChange}\n                        />\n                      ) : (\n                        <Typography variant=\"body2\">\n                          {idp.extractIssuerFromInput?.(connection.issuer) || '–'}\n                        </Typography>\n                      )}\n                    </SettingsListItem>\n                  ) : (\n                    <SettingsListItem title={idp.issuerLabel}>\n                      {editing ? (\n                        <Input placeholder=\"URL\" value={localState.issuer || ''} onChange={handleIssuerChange} />\n                      ) : (\n                        <Typography variant=\"body2\">{connection.issuer || '–'}</Typography>\n                      )}\n                    </SettingsListItem>\n                  )}\n                  {editing && (\n                    <>\n                      {manualConfiguration && (\n                        <>\n                          <SettingsListItem title=\"Authorization URL\">\n                            <Input\n                              placeholder=\"Enter Authorization URL\"\n                              value={localState.authorizationUrl || ''}\n                              onChange={handleAuthorizationUrlChange}\n                            />\n                          </SettingsListItem>\n                          <SettingsListItem title=\"Token URL\">\n                            <Input\n                              placeholder=\"Enter Token URL\"\n                              value={localState.tokenUrl || ''}\n                              onChange={handleTokenUrlChange}\n                            />\n                          </SettingsListItem>\n                          <SettingsListItem title=\"User info URL\">\n                            <Input\n                              placeholder=\"Enter User info URL\"\n                              value={localState.userInfoUrl || ''}\n                              onChange={handleUserInfoUrlChange}\n                            />\n                          </SettingsListItem>\n                          <SettingsListItem title=\"JWKS URL\">\n                            <Input\n                              placeholder=\"Enter JWKS URL\"\n                              value={localState.jwksUrl || ''}\n                              onChange={handleJwksUrlChange}\n                            />\n                          </SettingsListItem>\n                        </>\n                      )}\n                      <Button\n                        compact\n                        variant=\"ghost\"\n                        onClick={() => {\n                          setManualConfiguration(!manualConfiguration);\n                        }}\n                      >\n                        {manualConfiguration\n                          ? `Configure using ${idp.issuerDerivedLabel ?? idp.issuerLabel}`\n                          : 'Configure manually'}\n                      </Button>\n                    </>\n                  )}\n                </>\n              )}\n            </SettingsList>\n          </SettingsSection>\n        </>\n      )}\n      {type === 'saml' && (\n        <SettingsSection title={idp.attributeMappingLabel}>\n          <AttributeMappingTable\n            editing={editing}\n            localState={localState}\n            remoteState={remoteState}\n            setLocalState={setLocalState}\n          />\n        </SettingsSection>\n      )}\n    </FlexBox>\n  );\n};\n\nexport const DetailsSection = ({\n  canUpdateConnection,\n  connection: connectionProp,\n}: {\n  canUpdateConnection: boolean;\n  connection: TaggedConnection;\n}) => {\n  const { idp, connection, type } = getIdpAndConnectionInfo(connectionProp);\n\n  const remoteState = useMemo<DetailsFormState>(\n    () => ({\n      displayName: connection.display_name,\n      identityProvider: 'identity_provider' in connection ? connection.identity_provider : undefined,\n      attributeMapping: 'attribute_mapping' in connection ? connection.attribute_mapping : {},\n      manualConfiguration: false,\n      authorizationUrl: 'authorization_url' in connection ? connection.authorization_url : undefined,\n      clientId: 'client_id' in connection ? connection.client_id : undefined,\n      clientSecret: 'client_secret' in connection ? connection.client_secret : undefined,\n      entityId: 'idp_entity_id' in connection ? connection.idp_entity_id : undefined,\n      issuer: 'issuer' in connection ? connection.issuer : undefined,\n      issuerDerivedValue: type === 'oidc' ? idp.extractIssuerFromInput?.(connection.issuer) : undefined,\n      jwksUrl: 'jwks_url' in connection ? connection.jwks_url : undefined,\n      ssoUrl: 'idp_sso_url' in connection ? connection.idp_sso_url : undefined,\n      tokenUrl: 'token_url' in connection ? connection.token_url : undefined,\n      userInfoUrl: 'userinfo_url' in connection ? connection.userinfo_url : undefined,\n    }),\n    [connection, idp, type],\n  );\n\n  const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n\n  const { mutate } = useMutateSsoConnection(type);\n  const { mutate: deleteCertificate } = useDeleteSsoConnectionCert();\n  const { mutate: mutateByUrl } = useMutateSsoConnectionByUrl();\n\n  const handleSave = useCallback(async () => {\n    const baseOptions = {\n      connection_id: connection.connection_id,\n    };\n\n    const mutatedProperties: Partial<\n      B2BSSOOIDCUpdateConnectionOptions & B2BSSOSAMLUpdateConnectionOptions & B2BSSOUpdateExternalConnectionOptions\n    > = {};\n\n    if (remoteState.displayName !== localState.displayName) {\n      mutatedProperties.display_name = localState.displayName;\n    }\n    if (remoteState.identityProvider !== localState.identityProvider) {\n      mutatedProperties.identity_provider = localState.identityProvider;\n    }\n\n    const idpRequiresManualConfig = type === 'saml' && idp.metadataUrlLabel === false;\n    const isManualConfig = localState.manualConfiguration || idpRequiresManualConfig;\n\n    if (type === 'saml') {\n      if (localState.deletedCertificateIds?.length) {\n        for (const certificateId of localState.deletedCertificateIds) {\n          try {\n            await deleteCertificate({\n              connection_id: connection.connection_id,\n              certificate_id: certificateId,\n            });\n          } catch (e) {\n            // If certificate was not found, we can ignore the error since we\n            // were trying to delete it anyway\n            if (e instanceof StytchSDKAPIError && e.error_type === 'sso_verification_key_not_found') {\n              return;\n            }\n            throw e;\n          }\n\n          // Update local state to reflect that the certificate was deleted, in\n          // case a later operation fails\n          setLocalState((state) => {\n            return {\n              ...state,\n              deletedCertificateIds: state.deletedCertificateIds?.filter((id) => id !== certificateId),\n            };\n          });\n        }\n      }\n\n      if (isManualConfig) {\n        if (localState.ssoUrl !== remoteState.ssoUrl) {\n          mutatedProperties.idp_sso_url = localState.ssoUrl;\n        }\n        if (localState.entityId !== remoteState.entityId) {\n          mutatedProperties.idp_entity_id = localState.entityId;\n        }\n        if (localState.certificate) {\n          mutatedProperties.x509_certificate = localState.certificate;\n        }\n      } else if (localState.metadataUrl) {\n        await mutateByUrl({\n          connection_id: connection.connection_id,\n          metadata_url: localState.metadataUrl,\n        });\n      }\n\n      if (!deepEqual(remoteState.attributeMapping, localState.attributeMapping)) {\n        mutatedProperties.attribute_mapping = localState.attributeMapping;\n      }\n    } else if (type === 'oidc') {\n      if (localState.clientId !== remoteState.clientId) {\n        mutatedProperties.client_id = localState.clientId;\n      }\n      if (localState.clientSecret !== remoteState.clientSecret) {\n        mutatedProperties.client_secret = localState.clientSecret;\n      }\n\n      if (isManualConfig) {\n        if (localState.authorizationUrl !== remoteState.authorizationUrl) {\n          mutatedProperties.authorization_url = localState.authorizationUrl;\n        }\n        if (localState.tokenUrl !== remoteState.tokenUrl) {\n          mutatedProperties.token_url = localState.tokenUrl;\n        }\n        if (localState.userInfoUrl !== remoteState.userInfoUrl) {\n          mutatedProperties.userinfo_url = localState.userInfoUrl;\n        }\n        if (localState.jwksUrl !== remoteState.jwksUrl) {\n          mutatedProperties.jwks_url = localState.jwksUrl;\n        }\n      }\n\n      const getIssuer = () => {\n        if (localState.issuerDerivedValue !== undefined) {\n          // If we failed to extract derived value from the remote connection's\n          // issuer, and we the new derived value is empty, leave the field\n          // alone\n          if (!localState.issuerDerivedValue && !remoteState.issuerDerivedValue) {\n            return undefined;\n          }\n\n          return idp.transformInputToIssuer?.(localState.issuerDerivedValue);\n        }\n\n        return localState.issuer;\n      };\n      const issuer = getIssuer();\n\n      if (issuer !== undefined && issuer !== remoteState.issuer) {\n        mutatedProperties.issuer = issuer;\n      }\n    }\n\n    if (Object.keys(mutatedProperties).length > 0) {\n      await mutate({\n        ...baseOptions,\n        ...mutatedProperties,\n      });\n    }\n  }, [\n    connection.connection_id,\n    deleteCertificate,\n    idp,\n    localState.attributeMapping,\n    localState.authorizationUrl,\n    localState.certificate,\n    localState.clientId,\n    localState.clientSecret,\n    localState.deletedCertificateIds,\n    localState.displayName,\n    localState.entityId,\n    localState.identityProvider,\n    localState.issuer,\n    localState.issuerDerivedValue,\n    localState.jwksUrl,\n    localState.manualConfiguration,\n    localState.metadataUrl,\n    localState.ssoUrl,\n    localState.tokenUrl,\n    localState.userInfoUrl,\n    mutate,\n    mutateByUrl,\n    remoteState.attributeMapping,\n    remoteState.authorizationUrl,\n    remoteState.clientId,\n    remoteState.clientSecret,\n    remoteState.displayName,\n    remoteState.entityId,\n    remoteState.identityProvider,\n    remoteState.issuer,\n    remoteState.issuerDerivedValue,\n    remoteState.jwksUrl,\n    remoteState.ssoUrl,\n    remoteState.tokenUrl,\n    remoteState.userInfoUrl,\n    setLocalState,\n    type,\n  ]);\n\n  const { useBlockNavigation } = useSsoRouterController();\n\n  return (\n    <SettingsContainer\n      title=\"Details\"\n      hasCTA={canUpdateConnection}\n      onSave={handleSave}\n      useBlockNavigation={useBlockNavigation}\n      editing={editing}\n      setEditing={handleSetEditing}\n    >\n      <DetailsSectionBody\n        connection={connection}\n        localState={localState}\n        remoteState={remoteState}\n        setLocalState={setLocalState}\n      />\n    </SettingsContainer>\n  );\n};\n"],"names":["certItemRenderer","title","getValue","item","React","Typography","variant","issuer","Date","created_at","toLocaleString","expires_at","certKeyExtractor","certificate_id","CertificateTable","editing","localState","manualConfiguration","remoteState","setLocalState","certificates","useMemo","undefined","remoteCertificates","filter","cert","deletedCertificateIds","includes","certificate","isPending","viewCertModalProps","useModalState","viewCertificateContents","setViewCertificateContents","useState","persistPendingCertificate","useStateSliceSetter","addCertModalProps","pendingCert","setPendingCert","remoteCertificateCount","length","remoteCertificatePendingDeletionCount","minimumRequiredCertificates","maximumAllowedCertificates","canDeleteCertificates","canAddCertificate","Modal","confirmButtonText","noCancelButton","CopyableText","whiteSpace","Input","label","multiline","onChange","value","placeholder","ListEditor","items","itemRenderer","rowKeyExtractor","onAdd","open","getItemActionProps","action","text","onClick","warningAction","state","hideAddButton","DetailsSectionBody","connection","taggedConnection","useSettingsContainer","displayName","identityProvider","handleDisplayNameChange","handleIdentityProviderChange","handleMetadataUrlChange","handleSsoUrlChange","handleEntityIdChange","handleClientIdChange","handleClientSecretChange","handleIssuerChange","handleIssuerDerivedValueChange","handleAuthorizationUrlChange","handleTokenUrlChange","handleUserInfoUrlChange","handleJwksUrlChange","idp","type","getIdpAndConnectionInfo","idpRequiresManualConfig","metadataUrlLabel","setManualConfiguration","FlexBox","flexDirection","gap","SettingsSection","connectionType","external_organization_id","connection_id","external_connection_id","Select","width","selectItems","samlIdpSelectItems","oidcIdpSelectItems","tooltipText","SettingsList","SettingsListItem","DefaultAppDetails","metadataUrl","idpSsoUrlLabel","ssoUrl","idp_sso_url","idpEntityIdLabel","entityId","idp_entity_id","x509CertificateLabel","verification_certificates","Button","compact","clientIdLabel","clientId","client_id","clientSecretLabel","clientSecret","client_secret","issuerDerivedLabel","issuerDerivedValue","extractIssuerFromInput","issuerLabel","authorizationUrl","tokenUrl","userInfoUrl","jwksUrl","attributeMappingLabel","AttributeMappingTable","DetailsSection","canUpdateConnection","connectionProp","display_name","identity_provider","attributeMapping","attribute_mapping","authorization_url","jwks_url","token_url","userinfo_url","handleSetEditing","useFormState","mutate","useMutateSsoConnection","deleteCertificate","useDeleteSsoConnectionCert","mutateByUrl","useMutateSsoConnectionByUrl","handleSave","useCallback","baseOptions","mutatedProperties","isManualConfig","certificateId","e","StytchSDKAPIError","error_type","id","x509_certificate","metadata_url","deepEqual","getIssuer","transformInputToIssuer","Object","keys","useBlockNavigation","useSsoRouterController","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,MAAMA,gBAAAA,GAA6D;AACjE,IAAA;QACEC,KAAAA,EAAO,QAAA;QACPC,QAAAA,EAAU,CAACC,qBAASC,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;gBAAWC,OAAAA,EAAQ;eAAS,QAAA,IAAYH,IAAAA,GAAOA,IAAAA,CAAKI,MAAM,GAAG,SAAA;AACpF,KAAA;AACA,IAAA;QACEN,KAAAA,EAAO,SAAA;QACPC,QAAAA,EAAU,CAACC,qBACTC,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;gBAAWC,OAAAA,EAAQ;AACjB,aAAA,EAAA,YAAA,IAAgBH,OAAO,IAAIK,IAAAA,CAAKL,KAAKM,UAAU,CAAA,CAAEC,cAAc,EAAA,GAAK,SAAA;AAG3E,KAAA;AACA,IAAA;QACET,KAAAA,EAAO,SAAA;QACPC,QAAAA,EAAU,CAACC,qBACTC,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;gBAAWC,OAAAA,EAAQ;AACjB,aAAA,EAAA,YAAA,IAAgBH,OAAO,IAAIK,IAAAA,CAAKL,KAAKQ,UAAU,CAAA,CAAED,cAAc,EAAA,GAAK,SAAA;AAG3E;AACD,CAAA;AAED,MAAME,mBAAmB,CAACT,IAAAA,GACxB,oBAAoBA,IAAAA,GAAOA,IAAAA,CAAKU,cAAc,GAAG,4BAAA;AAqDnD,MAAMC,gBAAAA,GAAmB,CAAuC,EAC9DC,OAAO,EACPC,UAAU,EACVC,mBAAmB,EACnBC,WAAW,EACXC,aAAa,EACiB,GAAA;AAC9B,IAAA,MAAMC,eAAeC,CAAAA,CAA2C,IAAA;AAC9D,QAAA,IAAI,CAACH,WAAAA,EAAa;YAChB,OAAOI,SAAAA;AACT,QAAA;AAEA,QAAA,MAAMC,kBAAAA,GAAqBL,WAAAA;AAE3B,QAAA,IAAI,CAACH,OAAAA,EAAS;YACZ,OAAOQ,kBAAAA;AACT,QAAA;QAEA,OAAO;eACFA,kBAAAA,CAAmBC,MAAM,CAAC,CAACC,IAAAA,GAAS,CAACT,WAAWU,qBAAqB,EAAEC,QAAAA,CAASF,IAAAA,CAAKZ,cAAc,CAAA,CAAA;AAClGG,YAAAA,GAAAA,UAAAA,CAAWY,WAAW,GACtB;AACE,gBAAA;AACEA,oBAAAA,WAAAA,EAAaZ,WAAWY,WAAW;oBACnCC,SAAAA,EAAW;AACb;AACD,aAAA,GACD;AACL,SAAA;IACH,CAAA,EAAG;AAACd,QAAAA,OAAAA;AAASC,QAAAA,UAAAA;AAAYE,QAAAA;AAAY,KAAA,CAAA;AAErC,IAAA,MAAMY,kBAAAA,GAAqBC,aAAAA,EAAAA;IAC3B,MAAM,CAACC,uBAAAA,EAAyBC,0BAAAA,CAA2B,GAAGC,CAAAA,EAAAA;IAE9D,MAAMC,yBAAAA,GAA4BC,oBAAoBjB,aAAAA,EAAe,aAAA,CAAA;AACrE,IAAA,MAAMkB,oBAAoBN,aAAAA,CAAc,IAAA;QACtCI,yBAAAA,CAA0BG,WAAAA,CAAAA;AAC5B,IAAA,CAAA,CAAA;AACA,IAAA,MAAM,CAACA,WAAAA,EAAaC,cAAAA,CAAe,GAAGL,CAAAA,CAAS,EAAA,CAAA;IAE/C,MAAMM,sBAAAA,GAAyBtB,aAAauB,MAAAA,IAAU,CAAA;AACtD,IAAA,MAAMC,qCAAAA,GAAwC1B,UAAAA,CAAWU,qBAAqB,EAAEe,MAAAA,IAAU,CAAA;AAE1F,IAAA,MAAME,2BAAAA,GAA8B,CAAA;AACpC,IAAA,MAAMC,0BAAAA,GAA6B,CAAA;IAEnC,MAAMC,qBAAAA,GACJL,yBAAyBE,qCAAAA,GAAwCC,2BAAAA;IAEnE,MAAMG,iBAAAA,GACJ/B,WACAE,mBAAAA,IACA,CAACD,WAAWY,WAAW,IACvBY,yBAAyBE,qCAAAA,GAAwCE,0BAAAA;AAEnE,IAAA,qBACExC,kDACEA,EAAA,CAAA,aAAA,CAAC2C,KAAAA,EAAAA;AAAO,QAAA,GAAGjB,kBAAkB;QAAE7B,KAAAA,EAAM,uBAAA;QAAwB+C,iBAAAA,EAAkB,OAAA;QAAQC,cAAAA,EAAAA;qBACrF7C,EAAA,CAAA,aAAA,CAAC8C,YAAAA,EAAAA;QAAaC,UAAAA,EAAW;AAAYnB,KAAAA,EAAAA,uBAAAA,CAAAA,CAAAA,gBAEvC5B,EAAA,CAAA,aAAA,CAAC2C,KAAAA,EAAAA;AAAO,QAAA,GAAGV,iBAAiB;QAAEpC,KAAAA,EAAM;qBAClCG,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;QACCC,KAAAA,EAAM,kBAAA;QACNC,SAAAA,EAAAA,IAAAA;AACAC,QAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;YACTjB,cAAAA,CAAeiB,KAAAA,CAAAA;AACjB,QAAA,CAAA;QACAC,WAAAA,EAAY,mBAAA;QACZD,KAAAA,EAAOlB;uBAGXlC,EAAA,CAAA,aAAA,CAACsD,UAAAA,EAAAA;AACCC,QAAAA,KAAAA,EAAOvC,gBAAgB,EAAE;QACzBwC,YAAAA,EAAc5D,gBAAAA;QACd6D,eAAAA,EAAiBjD,gBAAAA;QACjBkD,KAAAA,EAAO,IAAA;YACLvB,cAAAA,CAAe,EAAA,CAAA;AACfF,YAAAA,iBAAAA,CAAkB0B,IAAI,EAAA;AACxB,QAAA,CAAA;QACAC,kBAAAA,EAAoB,CAAC7D,QAAU;gBAC7B8D,MAAAA,EAAQ;oBACNC,IAAAA,EAAM/D,IAAAA,CAAK0B,SAAS,GAAG,MAAA,GAAS,MAAA;oBAChCsC,OAAAA,EAAS,IAAA;wBACP,IAAIhE,IAAAA,CAAK0B,SAAS,EAAE;AAClBU,4BAAAA,cAAAA,CAAepC,KAAKyB,WAAW,CAAA;AAC/BS,4BAAAA,iBAAAA,CAAkB0B,IAAI,EAAA;wBACxB,CAAA,MAAO;AACL9B,4BAAAA,0BAAAA,CAA2B9B,KAAKyB,WAAW,CAAA;AAC3CE,4BAAAA,kBAAAA,CAAmBiC,IAAI,EAAA;AACzB,wBAAA;AACF,oBAAA;AACF,iBAAA;AACAK,gBAAAA,aAAAA,EACErD,YAAYZ,IAAAA,CAAK0B,SAAS,IAAIgB,qBAAoB,CAAA,GAC9C;oBACEqB,IAAAA,EAAM,QAAA;oBACNC,OAAAA,EAAS,IAAA;wBACP,IAAIhE,IAAAA,CAAK0B,SAAS,EAAE;4BAClBM,yBAAAA,CAA0Bb,SAAAA,CAAAA;wBAC5B,CAAA,MAAO,IAAI,oBAAoBnB,IAAAA,EAAM;AACnCgB,4BAAAA,aAAAA,CAAc,CAACkD,KAAAA,GAAAA;gCACb,OAAO;AACL,oCAAA,GAAGA,KAAK;oCACR3C,qBAAAA,EAAuB;2CAAK2C,KAAAA,CAAM3C,qBAAqB,IAAI,EAAE;AAAGvB,wCAAAA,IAAAA,CAAKU;AAAe;AACtF,iCAAA;AACF,4BAAA,CAAA,CAAA;AACF,wBAAA;AACF,oBAAA;iBACF,GACAS;aACR,CAAA;AACAgD,QAAAA,aAAAA,EAAe,CAACxB;;AAIxB,CAAA;AAEA,MAAMyB,kBAAAA,GAAqB,CAAC,EAC1BC,UAAAA,EAAYC,gBAAgB,EAC5BzD,UAAU,EACVE,WAAW,EACXC,aAAa,EACW,GAAA;IACxB,MAAM,EAAEJ,OAAO,EAAE,GAAG2D,oBAAAA,EAAAA;AAEpB,IAAA,MAAM,EAAEC,WAAW,EAAEC,gBAAgB,EAAE,GAAG7D,UAAUC,UAAAA,GAAaE,WAAAA;IAEjE,MAAM2D,uBAAAA,GAA0BzC,oBAAoBjB,aAAAA,EAAe,aAAA,CAAA;IACnE,MAAM2D,4BAAAA,GAA+B1C,oBAAoBjB,aAAAA,EAAe,kBAAA,CAAA;IAExE,MAAM4D,uBAAAA,GAA0B3C,oBAAoBjB,aAAAA,EAAe,aAAA,CAAA;IACnE,MAAM6D,kBAAAA,GAAqB5C,oBAAoBjB,aAAAA,EAAe,QAAA,CAAA;IAC9D,MAAM8D,oBAAAA,GAAuB7C,oBAAoBjB,aAAAA,EAAe,UAAA,CAAA;IAEhE,MAAM+D,oBAAAA,GAAuB9C,oBAAoBjB,aAAAA,EAAe,UAAA,CAAA;IAChE,MAAMgE,wBAAAA,GAA2B/C,oBAAoBjB,aAAAA,EAAe,cAAA,CAAA;IACpE,MAAMiE,kBAAAA,GAAqBhD,oBAAoBjB,aAAAA,EAAe,QAAA,CAAA;IAC9D,MAAMkE,8BAAAA,GAAiCjD,oBAAoBjB,aAAAA,EAAe,oBAAA,CAAA;IAC1E,MAAMmE,4BAAAA,GAA+BlD,oBAAoBjB,aAAAA,EAAe,kBAAA,CAAA;IACxE,MAAMoE,oBAAAA,GAAuBnD,oBAAoBjB,aAAAA,EAAe,UAAA,CAAA;IAChE,MAAMqE,uBAAAA,GAA0BpD,oBAAoBjB,aAAAA,EAAe,aAAA,CAAA;IACnE,MAAMsE,mBAAAA,GAAsBrD,oBAAoBjB,aAAAA,EAAe,SAAA,CAAA;IAE/D,MAAM,EAAEqD,UAAU,EAAEkB,GAAG,EAAEC,IAAI,EAAE,GAAGC,uBAAAA,CAAwBnB,gBAAAA,CAAAA;AAE1D,IAAA,MAAMoB,uBAAAA,GAA0BF,IAAAA,KAAS,MAAA,IAAUD,GAAAA,CAAII,gBAAgB,KAAK,KAAA;IAC5E,MAAM7E,mBAAAA,GAAsBD,UAAAA,CAAWC,mBAAmB,IAAI4E,uBAAAA;IAC9D,MAAME,sBAAAA,GAAyB3D,oBAAoBjB,aAAAA,EAAe,qBAAA,CAAA;AAElE,IAAA,qBACEf,EAAA,CAAA,aAAA,CAAC4F,OAAAA,EAAAA;QAAQC,aAAAA,EAAc,QAAA;QAASC,GAAAA,EAAK;qBACnC9F,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;QAAgBlG,KAAAA,EAAM;AACpBc,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;QAAMI,KAAAA,EAAOmB,WAAAA;QAAapB,QAAAA,EAAUsB;uBAErCzE,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AAASqE,KAAAA,EAAAA,WAAAA,CAAAA,CAAAA,EAGhCH,UAAAA,CAAW4B,cAAc,KAAK,UAAA,kBAC7BhG,kDACEA,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;QAAgBlG,KAAAA,EAAM;AACrB,KAAA,gBAAAG,EAAA,CAAA,aAAA,CAAC8C,YAAAA,EAAAA,IAAAA,EAAcsB,UAAAA,CAAW6B,wBAAwB,CAAA,CAAA,gBAEpDjG,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;QAAgBlG,KAAAA,EAAM;AACrB,KAAA,gBAAAG,EAAA,CAAA,aAAA,CAAC8C,YAAAA,EAAAA,IAAAA,EAAcsB,UAAAA,CAAW8B,aAAa,CAAA,CAAA,gBAEzClG,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;QAAgBlG,KAAAA,EAAM;AACrB,KAAA,gBAAAG,EAAA,CAAA,aAAA,CAAC8C,YAAAA,EAAAA,IAAAA,EAAcsB,UAAAA,CAAW+B,sBAAsB,CAAA,CAAA,CAAA,EAIrD,CAACZ,IAAAA,KAAS,MAAA,IAAUA,IAAAA,KAAS,MAAK,mBACjCvF,EAAA,CAAA,aAAA,CAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,gBACEA,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;QAAgBlG,KAAAA,EAAM;AACpBc,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACoG,MAAAA,EAAAA;QACCC,KAAAA,EAAO,GAAA;QACPhD,WAAAA,EAAY,QAAA;QACZiD,WAAAA,EAAaf,IAAAA,KAAS,SAASgB,kBAAAA,GAAqBC,kBAAAA;QACpDpD,KAAAA,EAAOoB,gBAAAA;QACPrB,QAAAA,EAAUuB;uBAGZ1E,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;OAASoF,GAAAA,CAAIf,WAAW,kBAGhDvE,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;QAAgBlG,KAAAA,EAAM,YAAA;QAAa4G,WAAAA,EAAY;AAC9C,KAAA,gBAAAzG,EAAA,CAAA,aAAA,CAAC0G,kCACC1G,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;QAAiB9G,KAAAA,EAAM;AACtB,KAAA,gBAAAG,EAAA,CAAA,aAAA,CAAC8C,YAAAA,EAAAA,IAAAA,EAAcsB,UAAAA,CAAW8B,aAAa,CAAA,CAAA,gBAEzClG,EAAA,CAAA,aAAA,CAAC4G,iBAAAA,EAAAA;QAAkBxC,UAAAA,EAAYA;wBAGnCpE,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;QAAgBlG,KAAAA,EAAM;AACrB,KAAA,gBAAAG,EAAA,CAAA,aAAA,CAAC0G,oBACEnB,IAAAA,KAAS,MAAA,kBACRvF,oCACGW,OAAAA,IAAW,CAACE,oCACXb,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAII;qBAC3B1F,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;AACCK,QAAAA,WAAAA,EAAa,CAAC,MAAM,EAAEiC,GAAAA,CAAII,gBAAgB,CAAA,CAAE;QAC5CtC,KAAAA,EAAOxC,UAAAA,CAAWiG,WAAW,IAAI,EAAA;QACjC1D,QAAAA,EAAUwB;AAId,KAAA,CAAA,CAAA,iBAAA3E,EAAA,CAAA,aAAA,CAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,gBACEA,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAIwB;AAC1BnG,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;AACCK,QAAAA,WAAAA,EAAa,CAAC,MAAM,EAAEiC,GAAAA,CAAIwB,cAAc,CAAA,CAAE;QAC1C1D,KAAAA,EAAOxC,UAAAA,CAAWmG,MAAM,IAAI,EAAA;QAC5B5D,QAAAA,EAAUyB;uBAGZ5E,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;OAASkE,UAAAA,CAAW4C,WAAW,IAAI,GAAA,CAAA,CAAA,gBAG3DhH,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAI2B;AAC1BtG,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;AACCK,QAAAA,WAAAA,EAAa,CAAC,MAAM,EAAEiC,GAAAA,CAAI2B,gBAAgB,CAAA,CAAE;QAC5C7D,KAAAA,EAAOxC,UAAAA,CAAWsG,QAAQ,IAAI,EAAA;QAC9B/D,QAAAA,EAAU0B;uBAGZ7E,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;OAASkE,UAAAA,CAAW+C,aAAa,IAAI,GAAA,CAAA,CAAA,CAAA,gBAKjEnH,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAI8B;qBAC3BpH,EAAA,CAAA,aAAA,CAACU,gBAAAA,EAAAA;QACCC,OAAAA,EAASA,OAAAA;AACTG,QAAAA,WAAAA,EAAasD,WAAWiD,yBAAyB;QACjDzG,UAAAA,EAAYA,UAAAA;QACZG,aAAAA,EAAeA,aAAAA;QACfF,mBAAAA,EAAqBA;SAGxBF,OAAAA,IAAW,CAAC8E,yCACXzF,EAAA,CAAA,aAAA,CAACsH,MAAAA,EAAAA;QACCC,OAAAA,EAAAA,IAAAA;QACArH,OAAAA,EAAQ,OAAA;QACR6D,OAAAA,EAAS,IAAA;AACP4B,YAAAA,sBAAAA,CAAuB,CAAC9E,mBAAAA,CAAAA;AAC1B,QAAA;OAECA,mBAAAA,GAAsB,CAAC,gBAAgB,EAAEyE,GAAAA,CAAII,gBAAgB,CAAA,CAAE,GAAG,oBAAA,CAAA,CAAA,EAK1EH,IAAAA,KAAS,MAAA,kBACRvF,EAAA,CAAA,aAAA,CAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,gBACEA,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAIkC;AAC1B7G,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;AACCK,QAAAA,WAAAA,EAAa,CAAC,MAAM,EAAEiC,GAAAA,CAAIkC,aAAa,CAAA,CAAE;QACzCpE,KAAAA,EAAOxC,UAAAA,CAAW6G,QAAQ,IAAI,EAAA;QAC9BtE,QAAAA,EAAU2B;uBAGZ9E,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;OAASkE,UAAAA,CAAWsD,SAAS,IAAI,GAAA,CAAA,CAAA,gBAGzD1H,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAIqC;AAC1BhH,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;AACCK,QAAAA,WAAAA,EAAa,CAAC,MAAM,EAAEiC,GAAAA,CAAIqC,iBAAiB,CAAA,CAAE;QAC7CvE,KAAAA,EAAOxC,UAAAA,CAAWgH,YAAY,IAAI,EAAA;QAClCzE,QAAAA,EAAU4B;uBAGZ/E,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AAASkE,KAAAA,EAAAA,UAAAA,CAAWyD,aAAa,IAAI,GAAA,CAAA,CAAA,EAG5DvC,GAAAA,CAAIwC,kBAAkB,iBACrB9H,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAIwC;AAC1BnH,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;AACCK,QAAAA,WAAAA,EAAa,CAAC,MAAM,EAAEiC,GAAAA,CAAIwC,kBAAkB,CAAA,CAAE;QAC9C1E,KAAAA,EAAOxC,UAAAA,CAAWmH,kBAAkB,IAAI,EAAA;QACxC5E,QAAAA,EAAU8B;uBAGZjF,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AACjBoF,KAAAA,EAAAA,GAAAA,CAAI0C,sBAAsB,GAAG5D,UAAAA,CAAWjE,MAAM,CAAA,IAAK,sBAK1DH,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;AAAiB9G,QAAAA,KAAAA,EAAOyF,IAAI2C;AAC1BtH,KAAAA,EAAAA,OAAAA,iBACCX,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;QAAMK,WAAAA,EAAY,KAAA;QAAMD,KAAAA,EAAOxC,UAAAA,CAAWT,MAAM,IAAI,EAAA;QAAIgD,QAAAA,EAAU6B;uBAEnEhF,EAAA,CAAA,aAAA,CAACC,UAAAA,EAAAA;QAAWC,OAAAA,EAAQ;AAASkE,KAAAA,EAAAA,UAAAA,CAAWjE,MAAM,IAAI,GAAA,CAAA,CAAA,EAIvDQ,yBACCX,EAAA,CAAA,aAAA,CAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EACGa,mBAAAA,kBACCb,kDACEA,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;QAAiB9G,KAAAA,EAAM;qBACtBG,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;QACCK,WAAAA,EAAY,yBAAA;QACZD,KAAAA,EAAOxC,UAAAA,CAAWsH,gBAAgB,IAAI,EAAA;QACtC/E,QAAAA,EAAU+B;uBAGdlF,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;QAAiB9G,KAAAA,EAAM;qBACtBG,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;QACCK,WAAAA,EAAY,iBAAA;QACZD,KAAAA,EAAOxC,UAAAA,CAAWuH,QAAQ,IAAI,EAAA;QAC9BhF,QAAAA,EAAUgC;uBAGdnF,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;QAAiB9G,KAAAA,EAAM;qBACtBG,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;QACCK,WAAAA,EAAY,qBAAA;QACZD,KAAAA,EAAOxC,UAAAA,CAAWwH,WAAW,IAAI,EAAA;QACjCjF,QAAAA,EAAUiC;uBAGdpF,EAAA,CAAA,aAAA,CAAC2G,gBAAAA,EAAAA;QAAiB9G,KAAAA,EAAM;qBACtBG,EAAA,CAAA,aAAA,CAACgD,KAAAA,EAAAA;QACCK,WAAAA,EAAY,gBAAA;QACZD,KAAAA,EAAOxC,UAAAA,CAAWyH,OAAO,IAAI,EAAA;QAC7BlF,QAAAA,EAAUkC;wBAKlBrF,EAAA,CAAA,aAAA,CAACsH,MAAAA,EAAAA;QACCC,OAAAA,EAAAA,IAAAA;QACArH,OAAAA,EAAQ,OAAA;QACR6D,OAAAA,EAAS,IAAA;AACP4B,YAAAA,sBAAAA,CAAuB,CAAC9E,mBAAAA,CAAAA;AAC1B,QAAA;AAECA,KAAAA,EAAAA,mBAAAA,GACG,CAAC,gBAAgB,EAAEyE,GAAAA,CAAIwC,kBAAkB,IAAIxC,GAAAA,CAAI2C,WAAW,CAAA,CAAE,GAC9D,oBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAUrB1C,IAAAA,KAAS,wBACRvF,EAAA,CAAA,aAAA,CAAC+F,eAAAA,EAAAA;AAAgBlG,QAAAA,KAAAA,EAAOyF,IAAIgD;qBAC1BtI,EAAA,CAAA,aAAA,CAACuI,qBAAAA,EAAAA;QACC5H,OAAAA,EAASA,OAAAA;QACTC,UAAAA,EAAYA,UAAAA;QACZE,WAAAA,EAAaA,WAAAA;QACbC,aAAAA,EAAeA;;AAM3B,CAAA;AAEO,MAAMyH,iBAAiB,CAAC,EAC7BC,mBAAmB,EACnBrE,UAAAA,EAAYsE,cAAc,EAI3B,GAAA;IACC,MAAM,EAAEpD,GAAG,EAAElB,UAAU,EAAEmB,IAAI,EAAE,GAAGC,uBAAAA,CAAwBkD,cAAAA,CAAAA;IAE1D,MAAM5H,WAAAA,GAAcG,CAAAA,CAClB,KAAO;AACLsD,YAAAA,WAAAA,EAAaH,WAAWuE,YAAY;AACpCnE,YAAAA,gBAAAA,EAAkB,mBAAA,IAAuBJ,UAAAA,GAAaA,UAAAA,CAAWwE,iBAAiB,GAAG1H,SAAAA;AACrF2H,YAAAA,gBAAAA,EAAkB,mBAAA,IAAuBzE,UAAAA,GAAaA,UAAAA,CAAW0E,iBAAiB,GAAG,EAAC;YACtFjI,mBAAAA,EAAqB,KAAA;AACrBqH,YAAAA,gBAAAA,EAAkB,mBAAA,IAAuB9D,UAAAA,GAAaA,UAAAA,CAAW2E,iBAAiB,GAAG7H,SAAAA;AACrFuG,YAAAA,QAAAA,EAAU,WAAA,IAAerD,UAAAA,GAAaA,UAAAA,CAAWsD,SAAS,GAAGxG,SAAAA;AAC7D0G,YAAAA,YAAAA,EAAc,eAAA,IAAmBxD,UAAAA,GAAaA,UAAAA,CAAWyD,aAAa,GAAG3G,SAAAA;AACzEgG,YAAAA,QAAAA,EAAU,eAAA,IAAmB9C,UAAAA,GAAaA,UAAAA,CAAW+C,aAAa,GAAGjG,SAAAA;AACrEf,YAAAA,MAAAA,EAAQ,QAAA,IAAYiE,UAAAA,GAAaA,UAAAA,CAAWjE,MAAM,GAAGe,SAAAA;AACrD6G,YAAAA,kBAAAA,EAAoBxC,SAAS,MAAA,GAASD,GAAAA,CAAI0C,sBAAsB,GAAG5D,UAAAA,CAAWjE,MAAM,CAAA,GAAIe,SAAAA;AACxFmH,YAAAA,OAAAA,EAAS,UAAA,IAAcjE,UAAAA,GAAaA,UAAAA,CAAW4E,QAAQ,GAAG9H,SAAAA;AAC1D6F,YAAAA,MAAAA,EAAQ,aAAA,IAAiB3C,UAAAA,GAAaA,UAAAA,CAAW4C,WAAW,GAAG9F,SAAAA;AAC/DiH,YAAAA,QAAAA,EAAU,WAAA,IAAe/D,UAAAA,GAAaA,UAAAA,CAAW6E,SAAS,GAAG/H,SAAAA;AAC7DkH,YAAAA,WAAAA,EAAa,cAAA,IAAkBhE,UAAAA,GAAaA,UAAAA,CAAW8E,YAAY,GAAGhI;AACxE,SAAA,CAAA,EACA;AAACkD,QAAAA,UAAAA;AAAYkB,QAAAA,GAAAA;AAAKC,QAAAA;AAAK,KAAA,CAAA;IAGzB,MAAM,EAAE3E,UAAU,EAAEG,aAAa,EAAEJ,OAAO,EAAEwI,gBAAgB,EAAE,GAAGC,YAAAA,CAAa;AAAEtI,QAAAA;AAAY,KAAA,CAAA;AAE5F,IAAA,MAAM,EAAEuI,MAAM,EAAE,GAAGC,sBAAAA,CAAuB/D,IAAAA,CAAAA;AAC1C,IAAA,MAAM,EAAE8D,MAAAA,EAAQE,iBAAiB,EAAE,GAAGC,0BAAAA,EAAAA;AACtC,IAAA,MAAM,EAAEH,MAAAA,EAAQI,WAAW,EAAE,GAAGC,2BAAAA,EAAAA;AAEhC,IAAA,MAAMC,aAAaC,CAAAA,CAAY,UAAA;AAC7B,QAAA,MAAMC,WAAAA,GAAc;AAClB3D,YAAAA,aAAAA,EAAe9B,WAAW8B;AAC5B,SAAA;AAEA,QAAA,MAAM4D,oBAEF,EAAC;AAEL,QAAA,IAAIhJ,WAAAA,CAAYyD,WAAW,KAAK3D,UAAAA,CAAW2D,WAAW,EAAE;YACtDuF,iBAAAA,CAAkBnB,YAAY,GAAG/H,UAAAA,CAAW2D,WAAW;AACzD,QAAA;AACA,QAAA,IAAIzD,WAAAA,CAAY0D,gBAAgB,KAAK5D,UAAAA,CAAW4D,gBAAgB,EAAE;YAChEsF,iBAAAA,CAAkBlB,iBAAiB,GAAGhI,UAAAA,CAAW4D,gBAAgB;AACnE,QAAA;AAEA,QAAA,MAAMiB,uBAAAA,GAA0BF,IAAAA,KAAS,MAAA,IAAUD,GAAAA,CAAII,gBAAgB,KAAK,KAAA;QAC5E,MAAMqE,cAAAA,GAAiBnJ,UAAAA,CAAWC,mBAAmB,IAAI4E,uBAAAA;AAEzD,QAAA,IAAIF,SAAS,MAAA,EAAQ;YACnB,IAAI3E,UAAAA,CAAWU,qBAAqB,EAAEe,MAAAA,EAAQ;AAC5C,gBAAA,KAAK,MAAM2H,aAAAA,IAAiBpJ,UAAAA,CAAWU,qBAAqB,CAAE;oBAC5D,IAAI;AACF,wBAAA,MAAMiI,iBAAAA,CAAkB;AACtBrD,4BAAAA,aAAAA,EAAe9B,WAAW8B,aAAa;4BACvCzF,cAAAA,EAAgBuJ;AAClB,yBAAA,CAAA;AACF,oBAAA,CAAA,CAAE,OAAOC,CAAAA,EAAG;;;AAGV,wBAAA,IAAIA,CAAAA,YAAaC,iBAAAA,IAAqBD,CAAAA,CAAEE,UAAU,KAAK,gCAAA,EAAkC;AACvF,4BAAA;AACF,wBAAA;wBACA,MAAMF,CAAAA;AACR,oBAAA;;;AAIAlJ,oBAAAA,aAAAA,CAAc,CAACkD,KAAAA,GAAAA;wBACb,OAAO;AACL,4BAAA,GAAGA,KAAK;AACR3C,4BAAAA,qBAAAA,EAAuB2C,MAAM3C,qBAAqB,EAAEF,MAAAA,CAAO,CAACgJ,KAAOA,EAAAA,KAAOJ,aAAAA;AAC5E,yBAAA;AACF,oBAAA,CAAA,CAAA;AACF,gBAAA;AACF,YAAA;AAEA,YAAA,IAAID,cAAAA,EAAgB;AAClB,gBAAA,IAAInJ,UAAAA,CAAWmG,MAAM,KAAKjG,WAAAA,CAAYiG,MAAM,EAAE;oBAC5C+C,iBAAAA,CAAkB9C,WAAW,GAAGpG,UAAAA,CAAWmG,MAAM;AACnD,gBAAA;AACA,gBAAA,IAAInG,UAAAA,CAAWsG,QAAQ,KAAKpG,WAAAA,CAAYoG,QAAQ,EAAE;oBAChD4C,iBAAAA,CAAkB3C,aAAa,GAAGvG,UAAAA,CAAWsG,QAAQ;AACvD,gBAAA;gBACA,IAAItG,UAAAA,CAAWY,WAAW,EAAE;oBAC1BsI,iBAAAA,CAAkBO,gBAAgB,GAAGzJ,UAAAA,CAAWY,WAAW;AAC7D,gBAAA;YACF,CAAA,MAAO,IAAIZ,UAAAA,CAAWiG,WAAW,EAAE;AACjC,gBAAA,MAAM4C,WAAAA,CAAY;AAChBvD,oBAAAA,aAAAA,EAAe9B,WAAW8B,aAAa;AACvCoE,oBAAAA,YAAAA,EAAc1J,WAAWiG;AAC3B,iBAAA,CAAA;AACF,YAAA;AAEA,YAAA,IAAI,CAAC0D,SAAAA,CAAUzJ,WAAAA,CAAY+H,gBAAgB,EAAEjI,UAAAA,CAAWiI,gBAAgB,CAAA,EAAG;gBACzEiB,iBAAAA,CAAkBhB,iBAAiB,GAAGlI,UAAAA,CAAWiI,gBAAgB;AACnE,YAAA;QACF,CAAA,MAAO,IAAItD,SAAS,MAAA,EAAQ;AAC1B,YAAA,IAAI3E,UAAAA,CAAW6G,QAAQ,KAAK3G,WAAAA,CAAY2G,QAAQ,EAAE;gBAChDqC,iBAAAA,CAAkBpC,SAAS,GAAG9G,UAAAA,CAAW6G,QAAQ;AACnD,YAAA;AACA,YAAA,IAAI7G,UAAAA,CAAWgH,YAAY,KAAK9G,WAAAA,CAAY8G,YAAY,EAAE;gBACxDkC,iBAAAA,CAAkBjC,aAAa,GAAGjH,UAAAA,CAAWgH,YAAY;AAC3D,YAAA;AAEA,YAAA,IAAImC,cAAAA,EAAgB;AAClB,gBAAA,IAAInJ,UAAAA,CAAWsH,gBAAgB,KAAKpH,WAAAA,CAAYoH,gBAAgB,EAAE;oBAChE4B,iBAAAA,CAAkBf,iBAAiB,GAAGnI,UAAAA,CAAWsH,gBAAgB;AACnE,gBAAA;AACA,gBAAA,IAAItH,UAAAA,CAAWuH,QAAQ,KAAKrH,WAAAA,CAAYqH,QAAQ,EAAE;oBAChD2B,iBAAAA,CAAkBb,SAAS,GAAGrI,UAAAA,CAAWuH,QAAQ;AACnD,gBAAA;AACA,gBAAA,IAAIvH,UAAAA,CAAWwH,WAAW,KAAKtH,WAAAA,CAAYsH,WAAW,EAAE;oBACtD0B,iBAAAA,CAAkBZ,YAAY,GAAGtI,UAAAA,CAAWwH,WAAW;AACzD,gBAAA;AACA,gBAAA,IAAIxH,UAAAA,CAAWyH,OAAO,KAAKvH,WAAAA,CAAYuH,OAAO,EAAE;oBAC9CyB,iBAAAA,CAAkBd,QAAQ,GAAGpI,UAAAA,CAAWyH,OAAO;AACjD,gBAAA;AACF,YAAA;AAEA,YAAA,MAAMmC,SAAAA,GAAY,IAAA;gBAChB,IAAI5J,UAAAA,CAAWmH,kBAAkB,KAAK7G,SAAAA,EAAW;;;;AAI/C,oBAAA,IAAI,CAACN,UAAAA,CAAWmH,kBAAkB,IAAI,CAACjH,WAAAA,CAAYiH,kBAAkB,EAAE;wBACrE,OAAO7G,SAAAA;AACT,oBAAA;AAEA,oBAAA,OAAOoE,GAAAA,CAAImF,sBAAsB,GAAG7J,UAAAA,CAAWmH,kBAAkB,CAAA;AACnE,gBAAA;AAEA,gBAAA,OAAOnH,WAAWT,MAAM;AAC1B,YAAA,CAAA;AACA,YAAA,MAAMA,MAAAA,GAASqK,SAAAA,EAAAA;AAEf,YAAA,IAAIrK,MAAAA,KAAWe,SAAAA,IAAaf,MAAAA,KAAWW,WAAAA,CAAYX,MAAM,EAAE;AACzD2J,gBAAAA,iBAAAA,CAAkB3J,MAAM,GAAGA,MAAAA;AAC7B,YAAA;AACF,QAAA;AAEA,QAAA,IAAIuK,OAAOC,IAAI,CAACb,iBAAAA,CAAAA,CAAmBzH,MAAM,GAAG,CAAA,EAAG;AAC7C,YAAA,MAAMgH,MAAAA,CAAO;AACX,gBAAA,GAAGQ,WAAW;AACd,gBAAA,GAAGC;AACL,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AACD1F,QAAAA,UAAAA,CAAW8B,aAAa;AACxBqD,QAAAA,iBAAAA;AACAjE,QAAAA,GAAAA;AACA1E,QAAAA,UAAAA,CAAWiI,gBAAgB;AAC3BjI,QAAAA,UAAAA,CAAWsH,gBAAgB;AAC3BtH,QAAAA,UAAAA,CAAWY,WAAW;AACtBZ,QAAAA,UAAAA,CAAW6G,QAAQ;AACnB7G,QAAAA,UAAAA,CAAWgH,YAAY;AACvBhH,QAAAA,UAAAA,CAAWU,qBAAqB;AAChCV,QAAAA,UAAAA,CAAW2D,WAAW;AACtB3D,QAAAA,UAAAA,CAAWsG,QAAQ;AACnBtG,QAAAA,UAAAA,CAAW4D,gBAAgB;AAC3B5D,QAAAA,UAAAA,CAAWT,MAAM;AACjBS,QAAAA,UAAAA,CAAWmH,kBAAkB;AAC7BnH,QAAAA,UAAAA,CAAWyH,OAAO;AAClBzH,QAAAA,UAAAA,CAAWC,mBAAmB;AAC9BD,QAAAA,UAAAA,CAAWiG,WAAW;AACtBjG,QAAAA,UAAAA,CAAWmG,MAAM;AACjBnG,QAAAA,UAAAA,CAAWuH,QAAQ;AACnBvH,QAAAA,UAAAA,CAAWwH,WAAW;AACtBiB,QAAAA,MAAAA;AACAI,QAAAA,WAAAA;AACA3I,QAAAA,WAAAA,CAAY+H,gBAAgB;AAC5B/H,QAAAA,WAAAA,CAAYoH,gBAAgB;AAC5BpH,QAAAA,WAAAA,CAAY2G,QAAQ;AACpB3G,QAAAA,WAAAA,CAAY8G,YAAY;AACxB9G,QAAAA,WAAAA,CAAYyD,WAAW;AACvBzD,QAAAA,WAAAA,CAAYoG,QAAQ;AACpBpG,QAAAA,WAAAA,CAAY0D,gBAAgB;AAC5B1D,QAAAA,WAAAA,CAAYX,MAAM;AAClBW,QAAAA,WAAAA,CAAYiH,kBAAkB;AAC9BjH,QAAAA,WAAAA,CAAYuH,OAAO;AACnBvH,QAAAA,WAAAA,CAAYiG,MAAM;AAClBjG,QAAAA,WAAAA,CAAYqH,QAAQ;AACpBrH,QAAAA,WAAAA,CAAYsH,WAAW;AACvBrH,QAAAA,aAAAA;AACAwE,QAAAA;AACD,KAAA,CAAA;IAED,MAAM,EAAEqF,kBAAkB,EAAE,GAAGC,sBAAAA,EAAAA;AAE/B,IAAA,qBACE7K,EAAA,CAAA,aAAA,CAAC8K,iBAAAA,EAAAA;QACCjL,KAAAA,EAAM,SAAA;QACNkL,MAAAA,EAAQtC,mBAAAA;QACRuC,MAAAA,EAAQrB,UAAAA;QACRiB,kBAAAA,EAAoBA,kBAAAA;QACpBjK,OAAAA,EAASA,OAAAA;QACTsK,UAAAA,EAAY9B;qBAEZnJ,EAAA,CAAA,aAAA,CAACmE,kBAAAA,EAAAA;QACCC,UAAAA,EAAYA,UAAAA;QACZxD,UAAAA,EAAYA,UAAAA;QACZE,WAAAA,EAAaA,WAAAA;QACbC,aAAAA,EAAeA;;AAIvB;;;;"}