{"version":3,"sources":["api/recursos/authenticate/authenticate.store.tsx","api/recursos/users/users.store.tsx","api/recursos/catalogs/catalogs.store.tsx","api/recursos/proposals/proposals.store.tsx","api/recursos/notifications/notifications.store.tsx","api/recursos/decisions/decisions.store.tsx","api/recursos/ptCatalogs/ptCatalogs.store.tsx","api/recursos/files/files.store.tsx","api/recursos/analysis/analysis.store.tsx","api/recursos/dashboard/dashboard.store.tsx","api/recursos/configurations/configurations.store.tsx","stores/menu.store.tsx","componentes/generaVentana/VentanaObjErrorAPI.tsx","vistas/autenticar/Presentacion.tsx","api/recursos/authenticate/authenticate.servicio.tsx","vistas/autenticar/Autenticacion.tsx","vistas/autenticar/Autenticar.tsx","componentes/CargandoSpin.tsx","imagenes/proyecto/INEGI_SSC_logo.png","imagenes/lineaTraining.png","componentes/generaMenu/GeneraMenuSSC.tsx","api/recursos/users/users.servicio.tsx","vistas/paginaSSC/encabezado/PerfilUsuario.tsx","imagenes/user-icon.png","api/recursos/notifications/notifications.servicio.tsx","vistas/paginaSSC/encabezado/Notificaciones.tsx","vistas/paginaSSC/encabezado/Encabezado.tsx","vistas/paginaSSC/contenido/Contenido.Titulo.tsx","api/recursos/proposals/proposals.servicio.tsx","vistas/paginaSSC/contenido/propuesta/Propuesta.Contenido.tsx","api/recursos/catalogs/catalogs.servicio.tsx","vistas/paginaSSC/contenido/propuesta/Propuesta.tsx","api/recursos/decisions/decisions.servicio.tsx","api/recursos/files/files.servicio.tsx","vistas/paginaSSC/contenido/responsableDeProceso/RP.Contenido.VerRegistrar.tsx","vistas/paginaSSC/contenido/responsableDeProceso/RP.Contenido.tsx","api/recursos/ptCatalogs/ptCatalogs.servicio.tsx","vistas/paginaSSC/contenido/responsableDeProceso/RP.tsx","vistas/paginaSSC/contenido/responsableDeDiseno/RD.Documentar.Propuesta.tsx","vistas/paginaSSC/contenido/responsableDeDiseno/RD.Documentar.Evidencias.tsx","api/recursos/analysis/analysis.servicio.tsx","vistas/paginaSSC/contenido/responsableDeDiseno/RD.Documentar.tsx","vistas/paginaSSC/contenido/responsableDeDiseno/RD.tsx","api/recursos/dashboard/dashboard.servicio.tsx","vistas/paginaSSC/contenido/tableroDeControl/TC.ListaPFC.Detalles.tsx","vistas/paginaSSC/contenido/tableroDeControl/TC.ListaPFC.tsx","vistas/paginaSSC/contenido/tableroDeControl/TC.tsx","vistas/paginaSSC/contenido/configuracion/Configuracion.Panel.Editar.LDAP.tsx","api/recursos/configurations/configurations.servicio.tsx","vistas/paginaSSC/contenido/configuracion/Configuracion.Panel.EditarUP.tsx","vistas/paginaSSC/contenido/configuracion/Configuracion.Panel.EditarUN.tsx","vistas/paginaSSC/contenido/configuracion/Configuracion.Panel.tsx","vistas/paginaSSC/contenido/configuracion/Configuracion.tsx","vistas/paginaSSC/contenido/Contenido.tsx","vistas/paginaSSC/pie/Pie.tsx","vistas/paginaSSC/PaginaSSC.tsx","componentes/generaMenuVertical/solicitud.png","componentes/generaMenuVertical/ParteContenidoIzq.tsx","componentes/generaMenuVertical/ParteMenuIzq.tsx","componentes/generaMenuVertical/GeneraMenuVerticalIzq.tsx","vistas/paginaSSC/Ayuda.tsx","stores/tuplacatalogoStore.tsx","componentes/ConvierteTuplaACatalogo.tsx","componentes/ConvierteCatalogoATupla.tsx","vistas/componentes/tuplasCatalogo/Ejemplo.tsx","componentes/generaMenu/GeneraMenu.tsx","vistas/componentes/generaMenu/PaginaMenu1.tsx","vistas/componentes/generaMenu/PaginaMenu2.tsx","vistas/componentes/generaMenu/PaginaMenu3.tsx","vistas/componentes/generaMenu/PaginaMenu4.tsx","vistas/componentes/generaMenu/PaginaMenu5.tsx","vistas/componentes/generaMenu/Ejemplo.tsx","componentes/generaComboFecha/calendar.png","componentes/generaComboFecha/GeneraComboFecha.tsx","vistas/componentes/generaComboFecha/Ejemplo.tsx","componentes/generaMenuVertical/menu2.png","componentes/generaMenuVertical/ParteContenido.tsx","componentes/generaMenuVertical/ParteMenu.tsx","componentes/generaMenuVertical/GeneraMenuVertical.tsx","vistas/componentes/generaMenuVertical/Ejemplo.tsx","componentes/DivLoading.tsx","componentes/generaDropZone/GeneraDropzone.tsx","vistas/componentes/generaDropzone/Ejemplo.tsx","api/index.tsx","stores/filesStore.tsx","componentes/generaDropZone/GeneraDropzoneUnArchivo.tsx","vistas/componentes/generaDropzone/Ejemplo2.tsx","vistas/componentes/generaSlidingPanel/EjemploContenido.tsx","vistas/componentes/generaSlidingPanel/Ejemplo.tsx","stores/ruta.store.tsx","componentes/generaRuta/GeneraRuta.tsx","vistas/componentes/generaRuta/Ejemplo.tsx","vistas/componentes/cuestionario/Ejemplo.tsx","componentes/generaStepper/HorizontalLinearStepper.tsx","componentes/generaStepper/Stepper1.tsx","componentes/generaStepper/Stepper2.tsx","vistas/componentes/generaStepper/Ejemplo.tsx","api/cargaAPI/CargaAPI.tsx","vistas/componentes/cargaAPI/Ejemplo.tsx","componentes/generaSemaforo/GeneraSemaforo.tsx","vistas/componentes/generaSemaforo/Ejemplo.tsx","componentes/generaCorreo/validaEmails.ts","componentes/generaCorreo/validaEspBlanco.ts","componentes/generaCorreo/GeneraCorreo1.tsx","vistas/componentes/generaCorreo/Ejemplo.tsx","componentes/generaExportacionExcel/exportar.png","componentes/generaExportacionExcel/GeneraExporacionExcel.tsx","componentes/generaExportacionExcel/bullet1.png","componentes/generaExportacionExcel/aceptar.png","vistas/componentes/generaExportacionExcel/Ejemplo.tsx","componentes/generaExportacionExcel/bullet2.png","componentes/generaDropZone/GeneraDropzoneOriginal.tsx","vistas/componentes/generaDropzone/Ejemplo3.tsx","validaciones.ts","App.tsx","index.tsx"],"names":["authenticateStore","create","set","get","objErrorAuthenticateStore","hasError","url","body","recurso","componente","idresul","desresul","menu","limpiaobjErrorAuthenticateStore","generaobjErrorAuthenticateStore","responseAPI","h","h2","b","c","m","a","paso","undefined","config","data","ret","msjerror","status","statusText","console","log","authStore","usuarioStore","tokenStore","rolsStore","cnnStore","guardaAuthStore","u","value","rols","length","cnn","valor","usersStore","objErrorUsersStore","limpiaObjErrorUsersStore","generaObjErrorUsersStore","e","temp","getUserAuthStore","guardaGetUserAuthStore","usuariosLDAPStore","guardaSearchUserLDAPStore","item","pos","dato","correo","map","indexU","email","indexOf","substr","toUpperCase","generaObjErroUsersStore","catalogsStore","objErrorCatalogsStore","limpiaObjErrorCatalogsStore","generaObjErrorCatalogsStore","catOrigenesStore","guardaGetAllOriginStore","activo","disabled","specification","catProcesosStore","guardaGetAllProcessByFrequencyStore","_","require","catPaso","i","p","processname","trim","replace","title","assignedroles","ordena","t_userxrol","clasexEstatus","state_process","estatusProceso","pt_state_description","clasexEstatusIcono","pt_state","catPaso2","sortBy","catDecisionesStore","guardaGetAllDecisionStore","d","visible","id","articulo","commentary","files","cycle","name","state_cycle","pt_md","catPrincipiosStore","guardaGetAllQualityStore","hitId","hitName","hit","hitOpciones","catCiclosStore","guardaGetAllCyclesStore","catPruebasStore","guardaGetAllProofStore","nombreCorto","substring","descripcion","proposalsStore","objErrorProposalsStore","limpiaObjErrorProposalsStore","generaObjErrorProposalsStore","propuestasStore","limpiaPropuestasStore","guardaGetSummarybyUserStore","propuestaDetalles","index","folio","description","createdAt","sentAt","sent","user","origin","processxfrequency","abierto","fecha","estatusTexto","btnGuardar","btnEnviar","btnEliminar","miCatOrigenes","miCatProcesos","eliminado","propuestaNvaStore","agregaPropuestaNvaStore","catO","catP","date","Date","day","getDate","month","getMonth","year","getFullYear","propuestaDetallesVacia","propuestaDetallesStore","guardaGetDetailbyUserStore","dondeViene","activaBtnEnviar","o","pasoCatO","pluck","po","indexCatO","pasoCatP","pp","indexCatP","cambiaPropuestasStore","x","sp","detalle","paso2","co","disable","push","cp","insertbyUserStore","guardaInsertbyUserStore","bodyAPI","pasoProcessxfrequency","rep","createdat","unshift","cambiaPropuestaDetallesStore","updatebyUserStore","guardaUpdatebyUserStore","deletebyUserStore","guardaDeletebyUserStore","eliminaPropuestasStore","sendbyUserStore","guardaSendbyUser","cierraPropuestaStore","notificationsStore","objErrorNotificationsStore","limpiaObjErrorNotificationsStore","generaObjErrorNotificationsStore","notificacionesStore","notAvisosStore","notPendientesStore","notTotalStore","notTotalAvisosStore","notTotalPendienteStore","ads","pending","na","notice","np","guardaTotalNotificacionesStore","deleteNoticebyUsertore","guardaDeleteNoticebyUserStore","activaDesactivaNotAvisosStore","idnews","activaDesactivaTodosNotAvisosStore","opcion","sendEmailStore","guardaSendEmailStore","decisionsStore","objErrorDecisionsStore","limpiaObjErrorDecisionsStore","generaObjErrorDecisionsStore","pxfStore","guardaGetSummaryPxFStore","catPtCiclos","pxf","indexpxf","pxfNombre","acronym","frequencyname","totalPropuestas","inprocess","accepted","idxOrdAnt","ColOrd","AscDes","misCiclos","ciclosDelProceso","filter","cy","idpf","hash","ciclosNoRepetidos","indexc","opcCiclos","misPropuestas","actualizaCiclosStore","idpxf","pxfPropuestasStore","guardaGetDetailbyProcessStore","indexp","sentOrden","miPropuestaDetalle","decisionOrden","decision","cycleOrden","cambiapxfStore","idprop","indexpxf1","indexpxf2","mp","indexmp2","indexp2","send","indexpxf3","indexmp3","indexpxf4","indexmp4","indexpxf5","indexmp5","proposal","pxfPropuestaDetalleStore","pxfPropuestaDetalleVacia","frequencyformat","frequencyregexp","evidence","quality","onwaiting","leftdays","guardaGetRateProposalStore","tipo","catD","catC","catE","dec","decId","decCiclo","decCicloId","decCicloName","process","f","indexCatDF","descarga","path","originalfullname","miCatDecisiones","miCatPrincipios","miCatCiclos","miCatAnios","indexCatE","miCatEvidencias","swEnviar","indexCatD","action","otroCiclo","indexC","catCO","Array","catCOhh","catCOhhmm","catCOAA","catCOMM","catCODD","aaIni","aaFin","swActivo","frecuenciaHH","frecuenciaHHMM","frecuenciaUND","cuenta","swActivoHH","swActivoHHMM","swActivoAA","swActivoMM","swActivoDD","miFrecuencia","toString","j","kTotal","k","decCicloHH","cadena","JSON","parse","stringify","decCicloNameHHhh","decCicloNameHH","decCicloHHMM","cadena1","decCicloNameMMmm","decCicloNameHHMM","cuenta2","cadena2","decCicloNameAA","decCicloNameMM","decCicloNameDD","frecUNDStore","frecUNDSelecStore","cuentaMM","cuentaDD","pasoAA","pasoMM","pasoDD","miCatCiclosOtros","miCatCiclosOtrosHH","miCatCiclosOtrosHHMM","miCatCiclosOtrosAA","miCatCiclosOtrosMM","miCatCiclosOtrosDD","swCatP","indexcatP2","ho","indexho","swCatE","pasoCatE","indexE","pe","updateRateProposalStore","guardaUpdateRateProposalStore","sendRateProposalStore","guardaSendRateProposalStore","cambiafrecUNDStore","indexF","reiniciafrecUNDStore","ptCatalogsStore","objErrorPtCatalogsStore","limpiaObjErrorPtCatalogsStore","generaObjErrorPtCatalogsStore","catPTEvidenciasStore","guardaGetAllEvidenceStore","catPTCiclosStore","guardaPTGetAllCyclesStore","met","combinaCatalogosCiclosStore","catPt","ar","catPTCaracteristicasStore","guardaPTGetAllFeaturesStore","catEC","features","catEC_C","filesStore","objErrorFilesStore","limpiaObjErrorFilesStore","generaObjErrorFilesStore","uploadFilesDecisionStore","guardaUploadFilesDecisionStore","guardaUploadFilesAnalysisStore","uploadFilesAnalysis","analysisStore","objErrorAnalysisStore","limpiaObjErrorAnalysisStore","generaObjErrorAnalysisStore","pfcStore","pfcPaso","fil","pfc","indexPFC","pfcNombre","cyclename","nproposals","cambiaPFCStore","idpfc","pfcDetallesStore","pfcDetalleVacia","classified","feature","proof","allowtext","other","misArchivos","pfcMisArchivosVacia","idTipo","art","archivos","nrArchivosStore","crArchivosStore","proofArchivosStore","justifyArchivosStore","apiArchivosStore","nrPaso","crPaso","proofPaso","justifyPaso","apiPaso","ma","indexMa","pasoD","decisionTexto","pD","indexpD","decisionTextoTodos","indexD","pasoEV","ev","indexEV","swEviCatCaracteristicas","swEviCatPruebas","swEviCatPruebasOtro","copiaCatP","indexCopiaCatP","otraTexto","indexPasoCatP","miCatPruebas","copiaCatEC","catPasoC","idActivas","indexcatEC","indexCatEC_C","idAct","indexIdAct","miCatCaracteristicas","totalDecision","uniq","pasoSP","cambiaPFCDetalleStore","idEvi","swActiva","pfcEvi","indexPfcEvi","swCatSel","swUnaEvidencia","swEviNinguno","swEviOtrasPruebas","guardaSendbyUserStore","dashboardStore","objErrorDashboardStore","limpiaObjErrorDashboardStore","generaObjErrorDashboardStore","pfcDominioStore","numEvidence","swPrevista","swNoPrevista","swDecision","indexDec","textoSent","generaPfcDominioStore","pfcArreglo","pfcPasoD","groupBy","claves","Object","keys","pfcArray","pfcArrayElem","clave","pfcArregloFiltradoPaso","arregloFiltrado","arregloElemFiltrado","clavesFiltrado","claveF","indexPfc","arreglo","swDecisionPaso","objDecisionPaso","objD","indexobjD","pfcAgrupado","contE","contC","arr","indexArr","t","pfcF","indexpfcF","pfcFArreglo","indexPfcFArreglo","pasoE","pasoC","pfcAgr","indexPfcAgr","pfcAgrupadoE","pfcAgrupadoC","indexAgrupado","pfcAgrupadoT","cambiaIndiceStore","opc","pfcAgrC","indexAgrupadoC","pfcAgrE","indexAgrE","filtraPFC","cambiaPfcDominioStore","idpfcD","idpfcA","datos","pfcD","pfcIndex","pfcA","indexpfcA","IndexpfcD","arregloDetalles","pfcAgrupadoDetallesStore","pfcTStore","pfcDStore","pfcCStore","limpiaPfcAgrupadoDetallesStore","pfcDetallesVaciaStore","domainid","domainname","domainacronym","idD","idA","textoDecision","textoDecisionExcel","numEvidencias","swProof","swJustify","radioFiltroStore","texto","radioFiltroSelStore","cambiaRadioFiltroStore","rf","indexRF","recargaStore","configurationsStore","objErrorConfigurationsStore","limpiaObjErrorConfigurationsStore","generaObjErrorConfigurationsStore","panelStore","cierraPanelStore","pc","indexPC","cambiaPanelStore","idPanel","catalogoPermisosUsuariosStore","permisosUsuariosStore","permisos","idCatalogoPermisosUsuario","usuariosProponentesStore","guardaGetSummaryProponentUserStore","upPaso","pasoCatPer","up","indexUP","swUsuariosEspecificos","setting","right_propose","catPermisos","specificuser","su","indexSu","account","misUsuEspecificos","misUsuEspecificosOrigen","pt_state_descripcion","cambiaUsuariosProponentesStore","idCat","objeto","alert","canceloUsuarioProponenteStore","swUsu","catPermisosOrigen","misUsuariosEspecificosOrigen","canceloUsuariosNotificiacionesStore","clear","usuariosNotificacionesStore","un","indexUN","misNoAceptadas","rejectprop","okprop","misAceptadas","okanalyse","misConcluidas","UpdateProponentUserStore","guardaUpdateProponentUserStore","guardaGetSummaryUserNotificationbyEmailStore","unPaso","cambiaUsuariosNotificacionesStore","UpdateUserNotificationbyEmailStore","guardaUpdateUserNotificationbyEmailStore","menuStore","cveA","pagina","errorPagina","desc","clavesRol","menuxRolStore","paginaActivaStore","generaMenuxRolStore","roles","menus","pasoMenu","elemMenu","key","swRP","swRD","swUS","r","cambiaMenu","menuSel","cambiaErrorPagina","datoError","indexM","quitaErrorPagina","VentanaObjError","props","state","objErrOmision","hearder","useState","objErr","setObjErr","useEffect","window","scrollTo","top","objError","className","color","dismissible","onClose","Presentacion","eti","etiquetasSSC","text","API_URL","authenticateService","cargaAuth","datosUsuario","axios","post","headers","cargaAuthLDAP","Autenticar","Autenticacion","APP_ENV","pestanaActiva","setPestanaActiva","claseActiva","claseInActiva","history","useHistory","claseIS","setClaseIS","setClaseUSP","cambiaEntradaUsuario","option","toLowerCase","includes","dangerouslySetInnerHTML","__html","initialValues","usuario","password","onSubmit","values","API_BODY","autenticateServicio","then","response","catch","ex","validationSchema","Yup","required","API_APP","href","onClick","htmlFor","type","placeholder","mensaje","target","location","sessionStorage","localStorage","removeItem","onbeforeunload","CargandoSpin","DivLoadingReact","height","width","GeneraMenu","Navbar","expand","bg","Container","Toggle","Collapse","Nav","Link","fluid","Brand","msj","style","maxHeight","navbarScroll","usersService","cargaGetUserAuth","token","cargaSearchUserLDAP","PerfilUsuario","generaobjErrorUsersStore","usersServicio","zIndex","src","alt","Etiquetas","PerfilDelUsuario","etiquetas","icon","faEnvelope","fontSize","faPhone","rotation","phoneNumber","ext","size","areaName","departament","Roles","display","position","notificationsService","cargaGetSummarybyUser","cargaDeleteNoticebyUser","cargaSendEmail","Notificaciones","swRecarga","setSwRecarga","cargandoSpin","setCargandoSpin","swRecargaNotificaciones","setSwRecargaNotificaciones","swCargaNotificaciones","setSwCargaNotificaciones","swRecargaAvisos","setSwRecargaAvisos","swRecargaPendientes","setSwRecargaPendientes","seleccionarTodos","setSeleccionarTodos","setNotAvisosFront","setNotPendientesFront","setTotalAvisos","setTotalPendientes","toggle1","document","getElementById","classList","toggle","dia","mes","activeTab","setActiveTab","cambiaNotAvisosStore","miCheckId","posP","notAvisoId","setTimeout","aviso1","list","add","remove","Row","Col","xs","checked","onChange","elem","idEliminar","swal2","fire","confirmButtonText","confirmButtonColor","showDenyButton","denyButtonText","result","isConfirmed","isDenied","Encabezado","shallow","eti_Eti","swRecargaEncabezado","setSwRecargaEncabezado","abreSP","setAbreSP","abreVta","setAbreVta","recargaPaginaSSC_Not","abreVentanaSlidingPanel","vta","botonCierraSlidingPanel","anchorEl","Boolean","collapseOnSelect","variant","LogoProyecto","LineaT","marginTop","paddingLeft","Button","hostname","isOpen","closeClick","ContenidoTitulo","titulo","subtitulo","nota","proposalsService","cargaGetDetailbyUser","cargaInsertbyUser","datosPropuesta","cargaUpdatebyUser","cargaDeletebyUser","cargaSendbyUser","PropuestaContenido","x1","x2","x3","x4","x5","etiGlobal","Global","botones","Propuesta","x6","noPasa","notifica","cuentaCatO","cuentaCatP","IdNuevo","catOrigenesFrontCopia","catProcesosFrontCopia","swRecargaPropuestaContenido","setSwRecargaPropuestaContenido","swRecargaPropuestaDetalles","propuestaNva","propuestaNvaFront","setPropuestaNvaFront","idPropuesta","idPropuestaFront","setIdPropuestaFront","propuestaDetallesFront","setPropuestaDetallesFront","desCambioFront","setDesCambioFront","catOrigenesFront","setCatOrigenesFront","catProcesosFront","setCatProcesosFront","swBotonGuardar","setSwBotonGuardar","swBotonEnviar","setSwBotonEnviar","swBotonEliminar","setSwBotonEliminar","isChecked","setIsChecked","limpiaPlantilla","proposalsServicio","recargaPaginaSSC","recargaPropuesta","recargaPropuestaContenido","botonGuardar","botonGuardarValidaPlantilla","mensajes","showCancelButton","showConfirmButton","imageUrl","cancelButtonText","cancelButtonColor","html","botonGuardarEnAPI","filtro","mensajesErrores","pasoO","number","bodyOrigin","insertbyUserFront","recargaPropuestaNva","abreNotifica","updatebyUserFront","botonEnviar","sendbyUserFront","bodyAPINot","idproposal","notificationsServicio","sendEmailFront","botonCerrar","botonCierraPropuesta","armaCatOrigenes","posC","catalogoId","armaCatOrigenesEspecifica","armaCatProcesos","busqueda","setBusqueda","catProcesosFiltro","setCatProcesosFiltro","filtrar","terminoBusqueda","resultadosBusqueda","elemento","sm","contenido","text2","place","multiline","articulos","articles","ch","marginLeft","cajaInput","deletebyUserFront","catalogsService","cargaGetAllOrigin","cargaGetAllProcessByFrequency","cargaGetAllDecision","cargaGetAllQuality","cargaGetAllCycles","cargaGetAllProof","x0","x1a","currentItems","setCurrentItems","pageCount","setPageCount","itemOffset","setItemOffset","swRecargaPropuesta","setSwRecargaPropuesta","swPropuestaNva","setSwPropuestaNva","bandera","setBandera","catalogsServicio","endOffset","slice","Math","ceil","idProp","PanelGroup","accordion","Panel","header","collapsible","swAbierto","breakClassName","nextLabel","verticalAlign","pageRangeDisplayed","previousLabel","renderOnZeroPageCount","containerClassName","pageLinkClassName","previousLinkClassName","nextLinkClassName","activeClassName","disabledLinkClassName","onPageChange","event","newOffset","selected","decisionService","cargaGetSummaryPxF","cargaGetDetailbyProcess","cargaGetRateProposal","cargaUpdateRateProposal","cargaSendRateProposal","filesService","cargaUploadFilesDecision","formData","cargaUploadFilesAnalysis","VerRegistrar","x7","x8","bodyAPIGuardar","etiRP","RP","x9","msjError","msjAdvertencia","verificaCiclo","filesNuevos","bodyArchAPI","swRecargaRPContenidoVerRegistrar","setSwRecargaRPContenidoVerRegistrar","miPropuestaDetalleFront","miPDProposalFront","miCatDecisionesFront","miCatCiclosFront","miCatCiclosOtrosFront","miCatCiclosOtrosFrontHH","miCatCiclosOtrosFrontHHMM","miCatCiclosOtrosFrontAA","miCatCiclosOtrosFrontMM","miCatCiclosOtrosFrontDD","miCatEvidenciasFront","miCatPrincipiosFront","comentarioFront","setComentarioFront","misArchivosDropzone","miDecisionFront","setMiDecisionFront","hhFront","hhmmFront","undFront","miCicloSelFront","setMiCicloSelFront","miCicloOtroSelFront","setMiCicloOtroSelFront","miCicloOtroSelFrontHH","setMiCicloOtroSelFrontHH","miCicloOtroSelFrontHHMM","setMiCicloOtroSelFrontHHMM","miCicloOtroSelFrontAA","setMiCicloOtroSelFrontAA","miCicloOtroSelFrontMM","setMiCicloOtroSelFrontMM","miCicloOtroSelFrontDD","setMiCicloOtroSelFrontDD","miDatoHH","setMiDatoHH","miDatoHHMM","setMiDatoHHMM","setMiDatoAA","setMiDatoMM","setMiDatoDD","swBotonGuardarFront","setSwBotonGuardarFront","swBotonEnviarFront","setSwBotonEnviarFront","swOtroCicloFront","setSwOtroCicloFront","setSwOtroCicloFrontHH","setSwOtroCicloFrontHHMM","abreDivPropuestaCompleta","setAbreDivPropuestaCompleta","swCambio","setSwCambio","swDropzoneAdvertencia","setSwDropzoneAdvertencia","setErrorFiles","recargaRPContenido","recargaRPContenidoVerRegistrar","armaComentario","armaVerificaCiclo","swPaso","cc","indexCC1","ventanaMensaje","botonGuardarAnalisis","armaBodyGuardarEnAPI","decisionsServicio","pasoDecision","pasoCiclo","pasoDetalle","idPxF","pasoEvidencias","indexCo","pasoPrincipios","pasoPrincipiosElem","idhit","indexCp","validaPlantilla","validaCiclo","validaCicloOtro","validaCicloOtroHH","validaCicloOtroHHMM","validaCicloOtroAA","validaCicloOtroMM","validaCicloOtroDD","validaEvidencias","validaPrincipios","filesUpload","ce","indexCe","indexCP","cambiaCheckEvidencias","cambiaCheckPrincipios","indexCp2","cambiaCiclo","indexCC","indexCO","indexCO2","indexCO3","cambiaCicloOtro","pxfId","cco","indexCCO","cambiaCicloOtroHH","pasoHH","ccohh","indexCCOhh","cambiaCicloOtroHHMM","pasoHHMM","ccomm","indexCCOmm","cambiaCicloOtroAA","ccoaa","indexCCOAA","cambiaCicloOtroMM","indexCCOMM","cambiaCicloOtroDD","ccodd","indexCCODD","cambiaRadioDecision","indexCO4","cd","indexCd","cambiaRadioPrincipiosHit","posD","indexCd2","ligaPropuestaDeCambioCompleta","cambiaRadioFrecuenciaUND","frec","filesIn","myFileCopia","myFiles","setMyFiles","setFilesInvalid","MyDropzone","onDrop","useCallback","acceptedFiles","acceptedFilesTemp","aft","indexAft","findIndex","mf","splice","useDropzone","getRootProps","getInputProps","removeFile","file","dropZone","newFiles","indexFiles","faTrashAlt","idx","filesUploadContinue","archAPI","archDrop","archNvo","swBaja","indexA","n","indexN","armaBodyArchivosAPI","indexO","pf","text3","label","indexFUND","indexCCAA","indexCCMM","indexCCDD","indexCChh","indexCCmm","indexP","indexHO","FormData","append","filesServicio","uploadFilesDecisionFront","bodyAPIEnviar","sendRateProposalFront","recargaRP","recargaCiclos","RPContenido","swRecargaRPContenido","setSwRecargaRPContenido","swPxF","setSwPxF","pxfPropuestaDetalleFront","setPxfPropuestaDetalleFront","dataMisPropuesta","updateData","setStatus","botonVerRegistrar","pasoCatD","pasoCatC","pxfPropuestaDetalleF","leePropuestaPorId","propuestaDetallesF","origenes","procStatus","procesos","background","opcBtnAcepReg","onSort","sortKey","tempData","sort","localeCompare","hybridArticles","recargaCiclosStore","ptCatalogsService","cargaGetAllEvidence","cargaGetAllFeatures","otroAnios","swRecargaRP","setSwRecargaRP","setPropuestasxFrecuencia","setPxfId","swRecargaCiclos","setSwRecargaCiclos","swRecargaPxF","setSwRecargaPxF","catDecisionesFront","catPrincipiosFront","ptCatalogsServicio","catPTEvidenciasFront","catPTCiclosFront","catCiclosFront","pxfPropuestasFront","abreCierraPxF","RDPropuesta","RD","propuesta","indexPropuesta","RDEvidencias","swRecargaRDDocumentarEvidencias","setSwRecargaRDDocumentarEvidencias","recargaRDDocumentar","cambiaCheckCaracteristicas","copiaMiCatCaracteristicas","pfcId","activaBotonGuardar","cambiaCheckPruebas","miCheckValor","copiaMiCatPruebas","cambiaTextoPruebasOtro","evId","analysisService","RDDocumentar","guardaGetDetailbyUserPStore","guardaGetDetailbyUserAStore","dateStr","getHours","getMinutes","getSeconds","archivosNR","archivosCR","archivosPROOF","archivosJUSTIFY","archivosAPI","swRecargaRDDocumentar","setSwRecargaRDDocumentar","swPFC","setSwPFC","totalEvidencias","setTotalEvidencias","setTotalDecision","pfcDetallesFront","setPfcDetallesFront","nrMyFiles","setNrMyFiles","crMyFiles","setCrMyFiles","proofMyFiles","setProofMyFiles","justifyMyFiles","setJustifyMyFiles","apiMyFiles","setApiMyFiles","setIndexPropuesta","swAbrePropuesta","setSwAbrePropuesta","analysisServicio","catDecisiones","catPruebas","catPTCaracteristicas","recargaRD","activaBotonEnviar","swPasoC","swPasoP","swPasoPO","msjPasoC","msjPasoP","msjPasoPO","evi","indexEvi","swPasoA","msjPasoA","detectaArchABorrar","arch","indexArch","botonGuardarUploadFilesAnalysis","swGuardaNvos","nrFilesNuevos","crFilesNuevos","proofFilesNuevos","justifyFilesNuevos","apiFilesNuevos","uploadFilesAnalysisFront","botonGuardarUpdatebyUser","bodyUpdatebyUser","elemEvidence","elemProof","elemFiles","desactivaBotonGuardarEnviar","nrFilesIn","nrMyFileCopia","setnrFilesInvalid","NrMyDropzone","nrFilesUpload","nrFilesUploadContinue","nrGeneraAltasYBajas","archivosEnDropzone","archivosNvos","swSigue","idArchivosDropzone","indexidD","crFilesIn","crMyFileCopia","setcrFilesInvalid","CrMyDropzone","crFilesUpload","crFilesUploadContinue","crGeneraAltasYBajas","proofFilesIn","proofMyFileCopia","setproofFilesInvalid","ProofMyDropzone","proofFilesUpload","proofFilesUploadContinue","proofGeneraAltasYBajas","justifyFilesIn","justifyMyFileCopia","setjustifyFilesInvalid","JustifyMyDropzone","justifyFilesUpload","justifyFilesUploadContinue","justifyGeneraAltasYBajas","apiFilesIn","apiMyFileCopia","setapiFilesInvalid","ApiMyDropzone","apiFilesUpload","apiFilesUploadContinue","apiGeneraAltasYBajas","dt","indexdT","indexEv","abreCierraEvidenciaDetalles","indexMA","idanalyseunit","swRecargaRD","setSwRecargaRD","setpfcId","abreSlidingPanelconDetalles","dashboardService","Detalles","tableRef","useRef","TC","nomArch","nomArchivo","nomHoja","APP_IMG","APP_NAS","swRecarga2","setSwRecarga2","swRecargaTCListaPFCDetalles","setSwRecargaTCListaPFCDetalles","recargaTCListaPFCDetalles","pfcArregloLength","pfcDId","pfcAId","dashboardServicio","filename","sheet","currentTableRef","current","backgroundColor","border","textAlign","rowSpan","colSpan","description2","pfcAD","indexPfcAD","fontWeight","prop","indexProp","car","indexCarac","pru","ref","TCListaPFC","swRecargaListaPFC","setSwRecargaListaPFC","pfcAgrupadoBusqueda","setPfcAgrupadoBusqueda","dominio","setDominio","cargaBusqueda","buscador","recargaTC","recargaTCListaPFC","filtered","abreCierraPFC","dataPfcStore","pfcAgrupadoPaginado","setPfcAgrupadoPaginado","contaE","contaC","indexpfcAgrupadoBusqueda","element","scrollIntoView","swRecargaTC","setSwRecargaTC","setBuscador","abreCierraDominio","pfcIdD","cambiaRadioFiltro","limpiarInputBuscador","espejo","swBusqueda","setSwBusqueda","busca","indexpfcD","onKeyDown","valorInputBuscador","valorInputBuscador1","rd","indexRD","pfcDDominio","EditarLDAP","swRecargaConfiguracionPanelEditarLDAP","setSwRecargaConfiguracionPanelEditarLDAP","swBotonBuscarFront","setSwBotonBuscarFront","swBotonAgregarFront","setSwBotonAgregarFront","swActivaListaLDAP","setSwActivaListaLDAP","usuariosLDAPFront","setUsuariosLDAPFront","valorInput","setValorInput","listaUsuarios","listaUsuariosFront","setListaUsuariosFront","usuariosSeleccionado","setUsuariosSeleccionado","recargaConfiguracionPanel","recargaConfiguracionPanelEditar","boteBasura","arrPaso","arrPaso2","cambiaListaUsuarios","usuTipo","activaSwBotonGuardar","bodyAPIBuscar","regUsu","swExiste","usu","indexUsu","datosUsu","configurationsService","cargaGetSummaryProponentUser","cargaGetSummaryUserNotificationbyEmail","cargaUpdateProponentUser","cargaUpdateUserNotificationbyEmail","EditarUP","sync","swRecargaConfiguracionPanelEditarUP","setSwRecargaConfiguracionPanelEditarUP","upSwUsuariosEspecificos","upSwUsuariosEspecificosOrigen","upMisUsuEspecificosOrigen","upUsuariosEspecificos","upUsuariosEspecificosFront","setUpUsuariosEspecificosFront","swUsuarioEspecifico","setSwUsuarioEspecifico","setSwContinuar","upCatPermisos","recargaConfiguracionPanelEditarUP","cambiaCatPermisos","checkCat","upId","preguntaTodosProcesos","guardaAPI","configurationsServicio","updateProponentUserFront","usuArreglo","upAcronimo","upProceso","cpu","indexCPU","upCatPermisosOrigen","EditarUN","bodyApiGuardar","swRecargaConfiguracionPanelEditarUN","setSwRecargaConfiguracionPanelEditarUN","swUsuNoAceptadas","setSwUsuNoAceptadas","swUsuAceptadas","setSwUsuAceptadas","swUsuConcluidas","setSwUsuConcluidas","unUsuNoAceptadas","unUsuNoAceptadasFront","setUnUsuNoAceptadasFront","unUsuAceptadas","unUsuAceptadasFront","setUnUsuAceptadasFront","unUsuConcluidas","unUsuConcluidasFront","setUnUsuConcluidasFront","setUsuSeleccionado","unId","recargaConfiguracionPanelEditarUN","clicInputCheck","unAcronimo","unProceso","Configuracion","swRecargaConfiguracionPanel","setSwRecargaConfiguracionPanel","setUpId","setUpAcronimo","setUpProceso","setUpCatPermisos","setUpCatPermisosOrigen","setUpUsuariosEspecificos","setUpSwUsuariosEspecificos","setUpMisUsuEspecificosOrigen","misNoAceptadasOrigen","setMisNoAceptadasOrigen","misAceptadasOrigen","setMisAceptadasOrigen","misConcluidasOrigen","setMisConcluidasOrigen","setUnId","setUnAcronimo","setUnProceso","setUnUsuNoAceptadas","setUnUsuAceptadas","setUnUsuConcluidas","catPer","indexMiCatPer","indexDes","botonEditarUP","indexNA","botonEditarUN","unMisNoAceptadasOrigen","unMisAceptadasOrigen","unMisConcluidasOrigen","swRecargaConfiguracion","setSwRecargaConfiguracion","Contenido","menusStore","swRecargaContenido","setSwRecargaContenido","Pie","eti_Lig","ligas","acercaSit","RREACT_APP_NAS","setToggle","faBars","swapOpacity","faDesktop","faSitemap","desc1","PaginaSSC","swRecargaPaginaSSC","setSwRecargaPaginaSSC","swRecargaNotifications","setSwRecargaNotifications","$","on","which","keyCode","preventDefault","ParteContenido","rutaNAS","Tab","Content","Pane","eventKey","img","archivo","rel","bordered","PreFrecuentes","s","ques","q","ParteMenu","isOpened","setIsOpened","step","setStep","Item","Navnav","isDisabled","stepId","subm","stepAnt","Number","subMenu","itemS","styled","div","show","defaultActiveKey","marginRight","icontenido","Ayuda","menuArch","imginegi","tuplacatalogoStore","tupla","catalogo","function","resultado","setTuplaCatalogo","cat","setCatalogoTupla","tup","ConvierteTuplaACatalogo","tuplacatalogo","keysT","catalogoTemp","kt","ConvierteCatalogoATupla","tuplaTemp","valuesC","Ejemplo","tuplaArch","catalogoArch","opcMenu","msjTipo2","PaginaMenu1","PaginaMenu2","PaginaMenu3","PaginaMenu4","PaginaMenu5","paginaActiva","GeneraComboFecha","fechaNombre","separar","setDate","handleChange","wrapperClassName","locale","es","dateFormat","icono","fecha2","fechaNombre2","lado","setShow","imemu","setLado","DivLoading","GeneraDropzone","myLabels","openDivLoading","setOpenDivLoading","filesCarg","toast","success","Swal","getAll","typeStyle","apiCall","method","fetch","json","Promise","reject","uploadFilesbyTopic","isLoading","filesDropzone","store","setGuardaFiles","posicion","fiDr","infoFile","posi","error","setObjError","setEliminaFiles","objErrorInt","setUploadFilesDefault","getUploadFilesbyTopic","filesSel","API_TASK","APITaskMethod","methods","task","API_PARAMS","uploadResult","GeneraDropzoneUnArchivo","multiple","EjemploContenido","incompletaSP","rutaStore","rutaArray","opcRuta","desError","generaObjError","setGeneraRuta","ruta","ra","GeneraRuta","ru","indexru","nameOptions","nombre","numero","industry","checkb1","checkb2","radiob","letras","numeros","min","max","select","oneOf","setFieldValue","as","maxlength","options","steps","HorizontalLinearStepper","React","activeStep","setActiveStep","Set","skipped","setSkipped","isStepOptional","isStepSkipped","has","Box","sx","Stepper","stepProps","labelProps","optional","Typography","completed","Step","StepLabel","mt","mb","flexDirection","pt","flex","prevActiveStep","mr","Error","prevSkipped","newSkipped","delete","Stepper1","alternativeLabel","Fragment","currenStep","Stepper2","setCompleted","totalSteps","completedSteps","allStepsCompleted","handleNext","newActiveStep","nonLinear","StepButton","py","newCompleted","CargaAPI","setData","setMsj","myAPI","lenght","obtenerData","myUrl","GeneraSemaforo","estado","validarEmail2","test","EspacioBlanco","trimmedArr","val","GeneraCorreo1","mensajepp","mensajecc","para","asunto","setDatos","countpp","countcc","amensajepp","amensajecc","handleInputChange","content","setContent","link","modeClassName","openInNewTabCheckbox","noFollowCheckbox","buttons","activeButtonsInReadOnly","theme","saveModeInCookie","textIcons","tabIndex","toolbar","showXPathInStatusbar","showCharsCounter","showWordsCounter","toolbarAdaptive","language","debugLanguage","newContent","datospp","datoscc","split","trimmed","espaciobco","trimmed1","amensajepp1","indice","amensajecc1","ppPara","ccCC","valida","DatosEnviar","concat","isDismissed","useMemo","GeneraExcel","tablaHtml","tabla","onDownload","useDownloadExcel","nomA","nomH","exp","cargaExcel","acp","StrictMode","this","primeraLetra","lastIndexOf","RegExp","App","routes","component","exact","Ejemplo1","Ejemplo2","Ejemplo3","Ejemplo4","Ejemplo15","Ejemplo5","Ejemplo6","Ejemplo7","Ejemplo8","Ejemplo9","Ejemplo10","Ejemplo11","Ejemplo12","Ejemplo13","basename","REACT_APP_BASE_NAME","route","ReactDOM","render"],"mappings":"g2mEAkFeA,EAvEWC,KAAO,SAACC,EAASC,GAAV,MAAuB,CAEtDC,0BAA2B,CAAEC,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,eAAgBC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAGhIC,gCAAiC,WAE7BX,EAAK,CAAEE,0BADI,CAAEC,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,eAAgBC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMvHE,gCAAgC,WAAD,4BAAE,WAAOC,EAAiBC,EAAOC,EAAQC,EAAOC,EAAOC,GAArD,eAAAC,EAAA,sDAIzBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKW,EAAGV,QAAQ,eAAgBC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QAE5FG,GAAbR,GAAuC,wBAAbA,GAC1BO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,gEAGfW,EAAKhB,IAAIS,EAAYS,OAAOlB,IACN,IAAlBS,EAAYU,MACdH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,WAG9BL,EAAKZ,QAASK,EAAYa,OACF,KAApBb,EAAYa,OACZN,EAAKX,SAAU,uBAEfW,EAAKX,SAAUI,EAAYc,aAGvC3B,EAAK,CAAEE,0BAA2BkB,IAClCQ,QAAQC,IAAI,6FAA8F5B,IAAMC,2BAzBnF,2CAAF,6DAAC,GA4BpC4B,UAAW,GACXC,aAAc,GACdC,WAAY,GACZC,UAAW,GACXC,SAAS,GAGLC,gBAAgB,WAAD,4BAAE,WAAOtB,EAAiBuB,GAAxB,eAAAjB,EAAA,sDAKfnB,EAAK,CAAE8B,UAAWjB,EAAYU,OAC9BvB,EAAK,CAAEgC,WAAY,UAAYnB,EAAYU,KAAKc,QAChDrC,EAAK,CAAE+B,aAAcK,IACgB,GAAhCvB,EAAYU,KAAKe,KAAKC,OACzBvC,EAAK,CAAEiC,UAAW,CAAC,KAEnBjC,EAAK,CAAEiC,UAAWhC,IAAM6B,UAAUQ,OAChClB,EAAOP,EAAYU,KAAKiB,IAAI,GAAGC,MACnCzC,EAAK,CAAEkC,SAAUd,IAMjBQ,QAAQC,IAAK,UAAW5B,IAAMiC,UAnBf,2CAAF,qDAAC,OC4CPQ,EA3FI3C,KAAO,SAACC,EAASC,GAAV,MAAuB,CAE/C0C,mBAAoB,CAAExC,UAAU,EAAQC,IAAK,GAAKC,KAAK,GAAKC,QAAQ,QAASC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAGxHkC,yBAA0B,WAGtB5C,EAAK,CAAE2C,mBADI,CAAExC,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,QAASC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMhHmC,yBAAyB,WAAD,4BAAE,WAAOhC,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAEtBS,QAAQC,IAAI,sCAAuChB,GACnDe,QAAQC,IAAI,yCAA0Cf,EAAI,QAAUC,EAAK,OAAQ+B,EAAI,OAAQ7B,GACzFG,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,QAASC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QACrFG,GAAbR,GAAwC,wBAAbA,EALT,gBAMpBe,QAAQC,IAAI,KACZT,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DARK,0BAUA,kCAAbI,EAVa,iBAWpBO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAZM,2BAehBgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAjBpB,iBAoBhBH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SArBhB,wBAyBhBL,EAAKZ,QAASK,EAAYa,OAzBV,KA0BTb,EAAYa,OA1BH,OA4BT,MA5BS,QA6BT,MA7BS,gCA4BHN,EAAKX,SAAU,gBA5BZ,oCA6BHW,EAAKX,SAAU,0DA7BZ,oCA8BLW,EAAKX,SAAUI,EAAYc,WA9BtB,6BAkCtB3B,EAAK,CAAE2C,mBAAoBvB,IAC3BQ,QAAQC,IAAI,0DAA2D5B,IAAM0C,oBAnCvD,4CAAF,6DAAC,GAsC3BK,iBAAkB,GAKhBC,uBAAuB,WAAD,4BAAE,WAAOpC,GAAP,SAAAM,EAAA,sDAEtBnB,EAAK,CAAEgD,iBAAkBnC,EAAYU,OAFf,2CAAF,mDAAC,GAMzB2B,kBAAmB,GAIjBC,0BAA0B,WAAD,4BAAE,WAAOtC,GAAP,mBAAAM,EAAA,yDACH,GAAjBN,EAAYW,IADQ,uBAEvBxB,EAAK,CAAEkD,kBAAmBrC,EAAYuC,OAClCC,EAAM,EACNC,EAAO,GACPC,EAAS,GACbtD,IAAMiD,kBAAkBM,KAAI,SAACpB,EAAOqB,GAC/BF,EAAS,GACTD,EAAO,GACPA,EAAOlB,EAAEsB,MACTL,EAAMC,EAAKK,QAAQ,KACnBJ,EAASnB,EAAEsB,MAAME,OAAO,EAAGP,GAC3BjB,EAAEsB,MAAQH,EAAOM,iBAZC,kBAgBhB5D,IAAMiD,mBAhBU,OAmBvBjD,IAAM6D,wBAAwB,iCAAkCjD,EAAYW,IAAKX,EAAYY,SAAU,KAAK,yCAnBrF,4CAAF,mDAAC,OC8JfsC,EA7NOhE,KAAO,SAACC,EAASC,GAAV,MAAuB,CAElD+D,sBAAuB,CAAE7D,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAKC,QAAQ,WAAYC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAG5HuD,4BAA6B,WAE3BjE,EAAK,CAAEgE,sBADI,CAAE7D,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,WAAYC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMjHwD,4BAA4B,WAAD,4BAAE,WAAOrD,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAGvBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,WAAYC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QACxFG,GAAbR,GAAwC,wBAAbA,EAJJ,gBAKvBO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DANQ,0BAQL,kCAAbI,EARkB,iBASzBO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAVW,2BAarBgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAff,iBAgBrBH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SAjBX,wBAoBrBL,EAAKZ,QAASK,EAAYa,OApBL,KAqBdb,EAAYa,OArBE,OAuBd,MAvBc,QAwBd,MAxBc,gCAuBRN,EAAKX,SAAU,gBAvBP,oCAwBRW,EAAKX,SAAU,0DAxBP,oCAyBVW,EAAKX,SAAUI,EAAYc,WAzBjB,6BA6B3B3B,EAAK,CAAEgE,sBAAuB5C,IAC9BQ,QAAQC,IAAI,iFAAkF5B,IAAM+D,uBA9BzE,4CAAF,6DAAC,GAiC9BG,iBAAkB,GAGhBC,wBAAwB,WAAD,4BAAE,WAAOvD,GAAP,SAAAM,EAAA,6DAEvBnB,EAAM,CAAEmE,iBAAkBtD,IAE1BZ,IAAMkE,iBAAiBX,KAAI,SAACvC,GACxBA,EAAEoD,QAAO,EACTpD,EAAEqD,UAAS,EACXrD,EAAEsD,cAAc,MAPG,kBAUhBtE,IAAMkE,kBAVU,2CAAF,mDAAC,GAa1BK,iBAAkB,GAGhBC,oCAAoC,WAAD,4BAAE,WAAO5D,GAAP,qBAAAM,EAAA,6DAE7BuD,EAAIC,EAAQ,IACZC,EAAc,GAIdC,EAAI,GAHRD,EAAU/D,GAIF2C,KAAI,SAACsB,GAMT,GALAA,EAAEC,YAAcD,EAAEC,YAAYC,OAAOC,QAAQ,SAAU,KACvDH,EAAET,QAAO,EACTS,EAAER,UAAS,EACXQ,EAAEI,MAAQ,GAEoB,GAA1BJ,EAAEK,cAAc5C,OAAeuC,EAAEM,OAAS,MACzC,CACH,IAAKP,EAAE,EAAGA,EAAIC,EAAEO,WAAW9C,OAAQsC,IAC/B,OAAQC,EAAEO,WAAWR,IACnB,IAAK,KACHC,EAAEM,OAAS,EACXN,EAAEI,MAAO,4CACTJ,EAAEQ,cAAgB,+BAClB,MACF,IAAK,KACHR,EAAEM,OAAS,EACXN,EAAEI,MAAQ,8CACVJ,EAAEQ,cAAgB,+BAClB,MACF,IAAK,KACHR,EAAEM,OAAS,EACXN,EAAEI,MAAQ,4CACV,MACF,IAAK,KAGL,QACEJ,EAAEM,OAAS,EACXN,EAAEI,MAAQ,gCAGdJ,EAAEO,WAAW9C,OAAS,EACtBuC,EAAEI,MAAO,wEAETJ,EAAEQ,cAAgB,QAClBR,EAAEI,MAAO,iCAGf,IAAI9D,EAAO0D,EAAES,cAGb,OAFAT,EAAEU,eAAiBpE,EAAKqE,qBACxBX,EAAEY,mBAAqB,GACdZ,EAAES,cAAcI,UACvB,KAAK,EAAGb,EAAEY,mBAAqB,+BAAgC,MAC/D,KAAK,EAAGZ,EAAEY,mBAAqB,+BAAgC,MAC/D,KAAK,EAAGZ,EAAEY,mBAAqB,+BAAgCZ,EAAER,UAAS,EAAM,MAChF,KAAK,EAAGQ,EAAEY,mBAAqB,+BAAgC,MAC/D,QAASZ,EAAEY,mBAAoB,mCAGjCE,EAAYlB,EAAEmB,OAAOjB,EAAS,UAClC5E,EAAM,CAAEwE,iBAAkBoB,IA3DO,kBA6D1B3F,IAAMuE,kBA7DoB,2CAAF,mDAAC,GAgEtCsB,mBAAoB,GAGlBC,0BAA0B,WAAD,4BAAE,WAAOlF,GAAP,SAAAM,EAAA,6DAEzBnB,EAAM,CAAE8F,mBAAoBjF,IAE5BZ,IAAM6F,mBAAmBtC,KAAI,SAACwC,GAI1B,OAHAA,EAAE3B,QAAO,EACT2B,EAAE1B,UAAS,EACX0B,EAAEC,SAAQ,EACHD,EAAEE,IACP,KAAK,EACDF,EAAEG,SAAS,GACXH,EAAEI,WAAW,GACbJ,EAAEK,MAAM,KACRL,EAAEM,MAAM,KACV,MACF,KAAK,EACDN,EAAEG,SAAS,WACXH,EAAEI,WAAW,KACbJ,EAAEK,MAAM,KACRL,EAAEM,MAAM,CAAEJ,GAAI,EAAGK,KAAM,GAAIC,YAAa,KAAMC,MAAO,MACvD,MACF,KAAK,EACDT,EAAEG,SAAS,YACXH,EAAEI,WAAW,KACbJ,EAAEK,MAAM,GACRL,EAAEM,MAAM,CAAEJ,GAAI,EAAGK,KAAM,GAAIC,YAAa,KAAMC,MAAO,UAzBtC,kBA8BlBxG,IAAM6F,oBA9BY,2CAAF,mDAAC,GAiC5BY,mBAAoB,GAGlBC,yBAAyB,WAAD,4BAAE,WAAO9F,GAAP,SAAAM,EAAA,6DAExBnB,EAAM,CAAE0G,mBAAoB7F,IAE5BZ,IAAMyG,mBAAmBlD,KAAI,SAACsB,GAC1BA,EAAET,QAAO,EACTS,EAAER,UAAS,EACXQ,EAAEmB,SAAQ,EACVnB,EAAE8B,MAAM,EACR9B,EAAE+B,QAAQ,GACV/B,EAAEgC,IAAK,CAAE,GAAM,EAAG,KAAQ,IAC1BhC,EAAEiC,YAAa,CACb,CAAE,GAAM,EAAI,KAAQ,aAAc,QAAS,GAC3C,CAAE,IAAO,EAAG,KAAQ,aAAc,QAAS,OAbzB,kBAiBjB9G,IAAMyG,oBAjBW,2CAAF,mDAAC,GAoB3BM,eAAgB,GAGdC,wBAAwB,WAAD,4BAAE,WAAOpG,GAAP,SAAAM,EAAA,6DAEvBnB,EAAM,CAAEgH,eAAgBnG,IACd,GACRZ,IAAM+G,eAAexD,KAAI,SAACsB,GACxBA,EAAET,QAAO,EACTS,EAAER,UAAS,EACXQ,EAAEmB,SAAQ,KAPS,kBAUhBhG,IAAM+G,gBAVU,2CAAF,mDAAC,GAa1BE,gBAAiB,GAGfC,uBAAuB,WAAD,4BAAE,WAAOtG,GAAP,SAAAM,EAAA,6DAEtBnB,EAAM,CAAEkH,gBAAiBrG,IACzBZ,IAAMiH,gBAAgB1D,KAAI,SAACsB,GACvBA,EAAET,QAAO,EACTS,EAAEsC,YAActC,EAAEyB,KAAKhE,OAAS,GAAMuC,EAAEyB,KAAKc,UAAU,EAAE,IAAM,MAAQvC,EAAEyB,KACzEzB,EAAEwC,YAAc,MANE,kBAUfrH,IAAMiH,iBAVS,2CAAF,mDAAC,OCqQZK,EAldQxH,KAAO,SAACC,EAASC,GAAV,MAAuB,CAEnDuH,uBAAwB,CAAErH,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,YAAaC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAG1H+G,6BAA8B,WAE5BzH,EAAK,CAAEwH,uBADI,CAAErH,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,YAAaC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMlHgH,6BAA6B,WAAD,4BAAE,WAAO7G,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAIxBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,YAAaC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QACzFG,GAAbR,GAAwC,wBAAbA,EALH,gBAM1BO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DAPW,0BASN,kCAAbI,EATmB,iBAU1BO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAXY,2BActBgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAhBd,iBAiBxBH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SAlBR,wBAqBtBL,EAAKZ,QAASK,EAAYa,OArBJ,KAsBfb,EAAYa,OAtBG,OAwBf,MAxBe,QAyBf,MAzBe,gCAwBTN,EAAKX,SAAU,gBAxBN,oCAyBTW,EAAKX,SAAU,0DAzBN,oCA0BXW,EAAKX,SAAUI,EAAYc,WA1BhB,6BA8B5B3B,EAAK,CAAEwH,uBAAwBpG,IAC/BQ,QAAQC,IAAI,yEAA0E5B,IAAMuH,wBA/BhE,4CAAF,6DAAC,GAkCjCG,gBAAiB,GAEbC,sBAAsB,WAAD,4BAAE,WAAO/G,GAAP,SAAAM,EAAA,sDACrBnB,EAAK,CAAE2H,gBAAiB,KADH,2CAAF,mDAAC,GAMtBE,4BAA4B,WAAD,4BAAE,WAAOhH,GAAP,eAAAM,EAAA,6DAE3BnB,EAAK,CAAE2H,gBAAiB,KACxB3H,EAAK,CAAE2H,gBAAiB9G,IACpBiH,EAAyB,GAG3B7H,IAAM0H,gBAAgBnE,KAAI,SAACsB,EAAOiD,GAC5BD,EAAoB,CAClB5B,GAAI,EAAG8B,MAAM,GAAIC,YAAY,GAAIC,UAAU,GAAIC,OAAO,KAAMC,MAAK,EAAOC,KAAK,GAAIC,OAAO,GAAIC,kBAAmB,GAC/GC,SAAS,EAAOlE,UAAS,EAAOmE,MAAM,GAAIC,aAAc,GACxDC,YAAW,EAAMC,WAAU,EAAQC,aAAY,EAC/CC,cAAe,GACfC,cAAe,IAEjBjE,EAAE0D,SAAU,EACZ1D,EAAER,WAAYQ,EAAEsD,KAChBtD,EAAEkE,WAAY,EACdlE,EAAE4D,aAAgB5D,EAAEsD,KAAQ,UAAY,aACxCtD,EAAE2D,MAAQ3D,EAAEoD,UAAUb,UAAU,EAAE,IAClCvC,EAAEsC,YAActC,EAAEmD,YAAY1F,OAAS,GAAMuC,EAAEmD,YAAYZ,UAAU,EAAE,IAAM,MAAQvC,EAAEmD,YAEvFnD,EAAEgD,kBAAoBA,KAtBH,kBA0BlB7H,IAAM0H,iBA1BY,2CAAF,mDAAC,GA6BhCsB,kBAAmB,GAGfC,wBAAyB,SAACC,EAAUC,GAElC,IAAIC,EAAO,IAAIC,KACXC,EAAMF,EAAKG,UACXC,EAAQJ,EAAKK,WAAa,EAC1BC,EAAON,EAAKO,cACZnB,EAAQ,GACMA,EAAdgB,EAAQ,GAAY,GAAD,OAAKE,EAAL,aAAcF,EAAd,YAAuBF,GACjC,GAAD,OAAKI,EAAL,YAAaF,EAAb,YAAsBF,GAClCtJ,IAAMgJ,kBAAmB,CACnB/C,GAAI,EAAI8B,MAAM,QAASC,YAAa,GAAIC,UAAWmB,EAAMlB,OAAQ,KAAMC,MAAM,EAC7EI,SAAS,EAAMlE,UAAS,EAAO0E,WAAW,EAAQN,aAAc,aAAcD,MAAOA,EAAOrB,YAAa,GACzGU,kBAAkB,CAChB5B,GAAI,EAAG8B,MAAM,QAASC,YAAa,GAAIC,UAAWmB,EAAMlB,OAAQ,KAAMC,MAAM,EAAOC,KAAK,GAAIC,OAAQ,GAAIC,kBAAmB,GAC3HC,SAAS,EAAMlE,UAAS,EAAOmE,MAAMA,EAAOC,aAAc,aAC1DC,YAAW,EAAMC,WAAU,EAAQC,aAAY,EAC/CC,cAAeK,EACfJ,cAAeK,KAM7BS,uBAAwB,CACtB3D,GAAI,EAAG8B,MAAM,GAAIC,YAAY,GAAIC,UAAU,GAAIC,OAAO,KAAMC,MAAK,EAAOC,KAAK,GAAIC,OAAO,GAAIC,kBAAmB,GAC/GC,SAAS,EAAOlE,UAAS,EAAOmE,MAAM,GAAIC,aAAc,aACxDC,YAAW,EAAMC,WAAU,EAAOC,aAAY,EAC9CC,cAAe,GACfC,cAAe,IAGjBe,uBAAwB,GAGpBC,2BAA2B,WAAD,4BAAE,WAAOlJ,EAAiBqF,EAAQiD,EAAUC,EAAUY,GAApD,2BAAA7I,EAAA,yDAGtBuD,EAAIC,EAAQ,IACZsF,GAAkB,EAED,GAAjBpJ,EAAYW,IANU,iBAOxBxB,EAAK,CAAE8J,uBAAyB7J,IAAM4J,yBACtC7J,EAAK,CAAE8J,uBAAwBjJ,EAAYuC,OARnB,KAShB4G,EATgB,OAUjB,cAViB,OAmGjB,gBAnGiB,MAoGjB,iBApGiB,+BAaZlC,EAAoB7H,IAAM4J,wBAC9B/B,EAAqBjH,EAAYuC,MAEVgF,MACnB6B,GAAkB,EAElBnC,EAAkBgB,cAAgBhB,EAAkBQ,OACpDR,EAAkBgB,cAActF,KAAI,SAAC0G,GACjCA,EAAE7F,QAAS,EACX6F,EAAE5F,UAAW,KAGjBwD,EAAkBiB,cAAgBjB,EAAkBS,kBACpDT,EAAkBiB,cAAcvF,KAAI,SAACsB,GACjCA,EAAET,QAAS,EACXS,EAAER,UAAW,OAKjB2F,GAAkB,EAGqB,MAAjCnC,EAAkBG,aAAuD,IAAhCH,EAAkBG,cAAoBgC,GAAkB,GAErGnC,EAAkBgB,cAAgBK,EAC9BgB,EAAe,IACnBA,EAAWzF,EAAE0F,MAAMtC,EAAkBQ,OAAQ,OAGhC/F,OAAS,EAClBuF,EAAkBgB,cAActF,KAAI,SAAC0G,GACjCA,EAAE3F,cAAgB,GAClB4F,EAAS3G,KAAI,SAAC6G,EAAQC,GAChBJ,EAAEhE,IAAImE,IACNH,EAAE7F,QAAS,EACX6F,EAAE5F,UAAW,EACb4F,EAAE3F,cAAgBuD,EAAkBQ,OAAOgC,GAAW/F,cAC/B,MAAnB2F,EAAE3F,eAA2C,IAAlB2F,EAAE3F,gBAAsB0F,GAAkB,WAMnFnC,EAAkBgB,cAAgBK,EAClCc,GAAkB,GAKtBnC,EAAkBiB,cAAgBK,EAC9BmB,EAAe,IACnBA,EAAW7F,EAAE0F,MAAMtC,EAAkBS,kBAAmB,OAG3ChG,OAAS,EAClBuF,EAAkBiB,cAAcvF,KAAI,SAACsB,GACjCyF,EAAS/G,KAAI,SAACgH,EAAQC,GAChB3F,EAAEoB,IAAIsE,IACN1F,EAAET,QAAS,EACXS,EAAER,UAAW,SAKpB2F,GAAkB,EAOqB,GAA5CnC,EAAkBS,kBAAkBhG,QAAwD,MAA3CuF,EAAkBS,kBAAkB,GAAGrC,KAAa+D,GAAkB,IAK/HnC,EAAkBa,aAAgBb,EAAkBM,MAAS,KAC7DN,EAAkBc,UAAad,EAAkBM,KAAQ,KAAO6B,EAChEnC,EAAkBe,aAAgBf,EAAkBM,MAAS,KAI7DpI,EAAK,CAAE8J,uBAAwBhC,IAC/B7H,IAAMyK,sBAAuBxE,GAAI,EAAMjG,IAAM6J,uBAAwB,8BAjGrD,oCAsGZa,EAAI1K,IAAM6J,uBAAuB5B,UACrCjI,IAAM6J,uBAAuBrB,MAAQkC,EAAEtD,UAAU,EAAE,KAE/CjG,EAAOnB,IAAM6J,wBACZvB,kBAAkB/E,KAAI,SAACoH,GAC1B,OAAQA,EAAGjF,UACT,KAAK,EAAGiF,EAAGlF,mBAAqB,+BAAgC,MAChE,KAAK,EAAGkF,EAAGlF,mBAAqB,+BAAgC,MAChE,KAAK,EAAGkF,EAAGlF,mBAAqB,+BAAgC,MAChE,KAAK,EAAGkF,EAAGlF,mBAAqB,+BAAgC,MAChE,QAASkF,EAAGlF,mBAAoB,mCAGpC1F,EAAK,CAAE8J,uBAAwB1I,IAnHf,sDAuHjBnB,IAAM6J,wBAvHW,QA0HxB7J,IAAMyH,6BAA6B,iCAAkC7G,EAAYW,IAAKX,EAAYY,SAAU,KAAK,8CA1HzF,4CAAF,2DAAC,GA8H3BiJ,sBAAuB,SAAExE,EAAQsC,EAAaqC,EAAab,GAGzD,OAAQA,GACJ,IAAK,oBACChK,EAAK,CAAE8J,uBAAwB,KACrC,MACA,IAAK,6BACG7J,IAAM0H,gBAAgBnE,KAAI,SAACsB,GACrBA,EAAEoB,IAAIA,IACNpB,EAAEgD,kBAAoB+C,EACtB/F,EAAE0D,QAAUA,EACZ1D,EAAEmD,YAAa4C,EAAQ5C,gBAGrC,MACA,IAAK,sBAML,IAAK,uBACGhI,IAAM0H,gBAAgBnE,KAAI,SAACsB,GACrBA,EAAEoB,IAAIA,IACNpB,EAAE0D,QAAUA,MAE1B,MACA,IAAK,cAaG,GAXAvI,IAAM0H,gBAAgBnE,KAAI,SAACsB,GACrBA,EAAEoB,IAAIA,IACNpB,EAAEsD,MAAO,EACTtD,EAAE4D,aAAe,UACjB5D,EAAE6D,WAAa,KACf7D,EAAE8D,UAAY,KACd9D,EAAE+D,YAAc,KAEhB/D,EAAER,UAAW,MAGT,GAAN4B,EAAU,CACVjG,IAAM0H,gBAAgB,GAAGS,MAAO,EAChCnI,IAAM0H,gBAAgB,GAAGe,aAAe,UACxCzI,IAAM0H,gBAAgB,GAAGgB,WAAa,KACtC1I,IAAM0H,gBAAgB,GAAGiB,UAAY,KACrC3I,IAAM0H,gBAAgB,GAAGkB,YAAc,KACvC5I,IAAM0H,gBAAgB,GAAGrD,UAAW,EAEpC,IAAIlD,EAAOnB,IAAM4J,wBACjBzI,EAAOnB,IAAM0H,gBAAgB,GAAGG,mBAC3BM,MAAO,EACZhH,EAAKuH,WAAa,KAClBvH,EAAKwH,UAAY,KACjBxH,EAAKyH,YAAc,KACnB,IAAIiC,EAAY,GAChB1J,EAAK0H,cAActF,KAAI,SAACuH,GAClBA,EAAG1G,SACH0G,EAAGC,SAAU,EACbF,EAAMG,KAAKF,OAGjBD,EAAQ,GACR1J,EAAK2H,cAAcvF,KAAI,SAAC0H,GAClBA,EAAG7G,SACH6G,EAAGF,SAAU,EACbF,EAAMG,KAAKC,OAGjB9J,EAAK2H,cAAgB+B,EACrB7K,IAAM0H,gBAAgB,GAAGG,kBAAoB1G,EAEnD,MACN,IAAK,sBACGnB,IAAMgJ,kBAAkBT,SAAU,EAClCvI,IAAM0H,gBAAgB,GAAGa,SAAU,IAOrD2C,kBAAkB,GAGdC,wBAAwB,WAAD,4BAAE,WAAOvK,EAAiBwK,EAAaC,EAA2BnC,EAAUC,GAA1E,uBAAAjI,EAAA,yDACvBS,QAAQC,IAAI,gDAAiD5B,IAAM0H,iBAK7C,GAAjB9G,EAAYW,IANM,wBAOnBxB,EAAK,CAAEmL,kBAAmBtK,EAAY0K,MAGlClC,EAAO,IAAIC,KACXC,EAAMF,EAAKG,UACXC,EAAQJ,EAAKK,WAAa,EAC1BC,EAAON,EAAKO,cACZnB,EAAQ,GACMA,EAAdgB,EAAQ,GAAY,GAAD,OAAKE,EAAL,aAAcF,EAAd,YAAuBF,GACjC,GAAD,OAAKI,EAAL,YAAaF,EAAb,YAAsBF,GAElCtJ,IAAMgJ,kBAAmB,CACvB/C,GAAIjG,IAAMkL,kBAAkBjF,GAAI8B,MAAO/H,IAAMkL,kBAAkBnD,MAAOC,YAAaoD,EAAQpD,YAAaC,UAAWjI,IAAMkL,kBAAkBK,UAAWrD,OAAQ,KAAMC,MAAM,EAC1KI,SAAS,EAAMQ,WAAW,EAAQN,aAAc,aAAcD,MAAMA,EAAOrB,YAAa,GACxFU,kBAAkB,CAChB5B,GAAIjG,IAAMkL,kBAAkBjF,GAAI8B,MAAO/H,IAAMkL,kBAAkBnD,MAAOC,YAAaoD,EAAQpD,YAAaC,UAAWjI,IAAMkL,kBAAkBK,UAAWrD,OAAQ,KAAMC,MAAM,EAC1KC,KAAK,GAAIC,OAAQ+C,EAAQ/C,OAAQC,kBAAmB+C,EACpD3C,YAAW,EAAOC,WAAU,EAAQC,aAAY,EAAOJ,MAAOA,EAAOC,aAAc,aACnFI,cAAeK,EACfJ,cAAeK,IAGnBnJ,IAAMgJ,kBAAkB7B,YAAeiE,EAAQpD,YAAY1F,OAAS,GAAM8I,EAAQpD,YAAYZ,UAAU,EAAE,IAAM,MAAQgE,EAAQpD,YAEhIhI,IAAM0H,gBAAgB8D,QAAQxL,IAAMgJ,mBA/BjB,kBAqCZhJ,IAAMkL,mBArCM,QAwCnBlL,IAAMyH,6BAA6B,iCAAkC7G,EAAYW,IAAKX,EAAYY,SAAU,KAAK,2CAxC9F,4CAAF,2DAAC,GA4CxBiK,6BAA8B,SAAExF,EAAQ2E,EAAab,GAGnD,OAAQA,GACJ,IAAK,oBACC/J,IAAM6J,uBAA0Be,IAMhDc,kBAAkB,GAIdC,wBAAwB,WAAD,4BAAE,WAAO/K,EAAiBwK,EAAalC,EAAUC,GAA/C,SAAAjI,EAAA,yDACD,GAAjBN,EAAYW,IADM,uBAEnBxB,EAAK,CAAE2L,kBAAmB9K,IAG1BZ,IAAM0H,gBAAgBnE,KAAI,SAACsB,GACnBA,EAAEoB,IAAImF,EAAQnF,KACdpB,EAAEmD,YAAcoD,EAAQpD,YACxBnD,EAAEgD,kBAAkBG,YAAcoD,EAAQpD,YAC1CnD,EAAEgD,kBAAkBa,YAAa,EACjC7D,EAAEgD,kBAAkBgB,cAAgBK,EACpCrE,EAAEgD,kBAAkBiB,cAAgBK,MAXzB,kBAeZnJ,IAAM0L,mBAfM,OAkBrB1L,IAAMyH,6BAA6B,iCAAkC7G,EAAYW,IAAKX,EAAYY,SAAU,KAAK,2CAlB5F,2CAAF,yDAAC,GAsB5BoK,kBAAkB,GAIdC,wBAAwB,WAAD,4BAAE,WAAOjL,GAAP,SAAAM,EAAA,yDACvBnB,EAAK,CAAE6L,kBAAmBhL,IACQ,GAA7BZ,IAAM4L,kBAAkBrK,IAFN,yCAIZvB,IAAM4L,mBAJM,OAOrB5L,IAAMyH,6BAA6B,iCAAkC7G,EAAYW,IAAKX,EAAYY,SAAU,KAAK,2CAP5F,2CAAF,mDAAC,GAYxBsK,uBAAwB,SAAE7F,GAGxBjG,IAAM0H,gBAAgBnE,KAAI,SAACsB,GACrBA,EAAEoB,IAAIA,IACNpB,EAAEkE,WAAY,MAEpBpH,QAAQC,IAAK,gDAAiD5B,IAAM0H,kBAG1EqE,gBAAgB,GAGZC,iBAAiB,WAAD,4BAAE,WAAOpL,GAAP,SAAAM,EAAA,yDAChBS,QAAQC,IAAI,2BAA4BhB,GACxCb,EAAK,CAAEgM,gBAAiBnL,IACQ,GAA3BZ,IAAM+L,gBAAgBxK,IAHX,yCAKLvB,IAAM+L,iBALD,OAQd/L,IAAMyH,6BAA6B,iCAAkC7G,EAAYW,IAAKX,EAAYY,SAAU,KAAK,oCARnG,2CAAF,mDAAC,GAcjByK,qBAAqB,WAAD,4BAAE,WAAOhG,GAAP,SAAA/E,EAAA,sDAEpBlB,IAAM0H,gBAAgBnE,KAAI,SAACsB,GACrBA,EAAEoB,IAAMA,IACVpB,EAAE0D,SAAU,MAJI,2CAAF,mDAAC,OCvTZ2D,EAnJYpM,KAAO,SAACC,EAASC,GAAV,MAAuB,CAEvDmM,2BAA4B,CAAEjM,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAIC,QAAQ,gBAAiBC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAGnI2L,iCAAkC,WAG9BrM,EAAK,CAAEoM,2BADI,CAAEjM,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,gBAAiBC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMxH4L,iCAAiC,WAAD,4BAAE,WAAOzL,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,sDAI1BC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,gBAAiBC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QAC7FG,GAAbR,GAAwC,wBAAbA,GAC7BO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,+DAEK,kCAAbI,GACPO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,IAGVgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,MACtCH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,WAG9BL,EAAKZ,QAASK,EAAYa,OACF,KAApBb,EAAYa,OACZN,EAAKX,SAAU,uBAEfW,EAAKX,SAAUI,EAAYc,aAGrC3B,EAAK,CAAEoM,2BAA4BhL,IACnCQ,QAAQC,IAAI,0DAA2D5B,IAAMmM,4BA7B/C,2CAAF,6DAAC,GAgCrCG,oBAAqB,GACrBC,eAAgB,GAChBC,mBAAoB,GACpBC,cAAc,EACdC,oBAAoB,EACpBC,uBAAuB,EAInB/E,4BAA4B,WAAD,4BAAE,WAAOhH,GAAP,eAAAM,EAAA,yDAEN,GAAjBN,EAAYW,IAFW,wBAIzBxB,EAAK,CAAEuM,oBAAqB1L,EAAYuC,OAExCpD,EAAK,CAAEwM,eAAgB3L,EAAYuC,KAAKyJ,MACxC7M,EAAK,CAAE2M,oBAAsB9L,EAAYuC,KAAKyJ,IAAItK,SAElDvC,EAAK,CAAEyM,mBAAqBxM,IAAMsM,oBAAoBO,UACtD9M,EAAK,CAAE4M,uBAAyB/L,EAAYuC,KAAK0J,QAAQvK,SAEzDvC,EAAK,CAAE0M,cAAe7L,EAAYuC,KAAKyJ,IAAItK,OAAS1B,EAAYuC,KAAK0J,QAAQvK,SAGzEc,EAAM,EACVpD,IAAMuM,eAAehJ,KAAI,SAACuJ,EAAQhF,GAChCgF,EAAG1I,QAAS,EACZhB,EAAM0J,EAAGC,OAAOrJ,QAAQ,KACxBoJ,EAAGzF,YAAcyF,EAAGC,OAAOpJ,OAAQ,EAAGP,MAExCpD,IAAMwM,mBAAmBjJ,KAAI,SAACyJ,EAAQlF,GACpC1E,EAAM4J,EAAGD,OAAOrJ,QAAQ,KACxBsJ,EAAG3F,YAAc2F,EAAGD,OAAOpJ,OAAQ,EAAGP,MAvBf,kBA4BlBpD,IAAMsM,qBA5BY,QA+B3BtM,IAAMqM,iCAAiC,iCAAkCzL,EAAYW,IAAKX,EAAYY,SAAU,KAAK,oDA/B1F,4CAAF,mDAAC,GAqC5ByL,+BAA+B,WAAD,4BAAE,WAAOrM,GAAP,SAAAM,EAAA,sDAE9BnB,EAAK,CAAE0M,cAAe7L,EAAYuC,OAFJ,2CAAF,mDAAC,GAMnC+J,uBAAuB,GAGnBC,8BAA8B,WAAD,4BAAE,WAAOvM,GAAP,SAAAM,EAAA,yDACR,GAAjBN,EAAYW,IADa,uBAEzBxB,EAAK,CAAEmN,uBAAwBtM,IAFN,kBAIlBZ,IAAMkN,wBAJY,OAO3BlN,IAAMqM,iCAAiC,iCAAkCzL,EAAYW,IAAKX,EAAYY,SAAU,KAAK,sDAP1F,2CAAF,mDAAC,GAa9B4L,8BAA8B,WAAD,4BAAE,WAAOnH,GAAP,SAAA/E,EAAA,sDAE7BlB,IAAMuM,eAAehJ,KAAI,SAACuJ,GACpBA,EAAGO,QAAQpH,IACX6G,EAAG1I,QAAU0I,EAAG1I,WAJO,2CAAF,mDAAC,GAW9BkJ,mCAAmC,WAAD,4BAAE,WAAOC,GAAP,SAAArM,EAAA,sDAClClB,IAAMuM,eAAehJ,KAAI,SAACuJ,GACxBA,EAAG1I,QAAUmJ,KAFmB,2CAAF,mDAAC,GAOvCC,eAAe,GAGXC,qBAAqB,WAAD,4BAAE,WAAO7M,GAAP,SAAAM,EAAA,yDACC,GAAjBN,EAAYW,IADI,uBAElBxB,EAAK,CAAEyN,eAAgB5M,IAFL,kBAIXZ,IAAMwN,gBAJK,OAOlBxN,IAAMqM,iCAAiC,iCAAkCzL,EAAYW,IAAKX,EAAYY,SAAU,KAAK,6CAPnG,2CAAF,mDAAC,OCq1BZkM,EAz9BQ5N,KAAO,SAACC,EAASC,GAAV,MAAuB,CAEnD2N,uBAAwB,CAAEzN,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAKC,QAAQ,YAAaC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAG9HmN,6BAA8B,WAE5B7N,EAAK,CAAE4N,uBADI,CAAEzN,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,YAAaC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMlHoN,6BAA6B,WAAD,4BAAE,WAAOjN,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAGxBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,YAAaC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QACzFG,GAAbR,GAAwC,wBAAbA,EAJH,gBAKxBO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DANS,0BAQN,kCAAbI,EARmB,iBAS1BO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAVY,2BAatBgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAfd,iBAgBtBH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SAjBV,wBAoBtBL,EAAKZ,QAASK,EAAYa,OApBJ,KAqBfb,EAAYa,OArBG,OAuBf,MAvBe,QAwBf,MAxBe,gCAuBTN,EAAKX,SAAU,gBAvBN,oCAwBTW,EAAKX,SAAU,0DAxBN,oCAyBXW,EAAKX,SAAUI,EAAYc,WAzBhB,6BA6B5B3B,EAAK,CAAE4N,uBAAwBxM,IAC/BQ,QAAQC,IAAI,oFAAqF5B,IAAM2N,wBA9B3E,4CAAF,6DAAC,GAiC/BG,SAAS,GAGPC,yBAAyB,WAAD,4BAAE,WAAOnN,EAAiBoN,GAAxB,eAAA9M,EAAA,yDAGxBS,QAAQC,IAAI,sDAAuDoM,GAC/DvJ,EAAIC,EAAQ,IACK,GAAjB9D,EAAYW,IALQ,uBAMtBxB,EAAM,CAAE+N,SAAUlN,EAAYuC,OAC9BnD,IAAM8N,SAASvK,KAAI,SAAC0K,EAASC,GACzBD,EAAI1F,SAAU,EACd0F,EAAIE,UAAYF,EAAIG,QAAU,MAAQH,EAAII,cAC1CJ,EAAIK,gBAAkBL,EAAIM,UAAYN,EAAIO,SAC1CP,EAAIQ,WAAW,EACfR,EAAIS,OAAO,QACXT,EAAIU,QAAO,EAEX,IAAIxN,EAAO8M,EAAI3I,cAGf,OAFA2I,EAAI1I,eAAiBpE,EAAKqE,qBAC1ByI,EAAIxI,mBAAqB,GAChBtE,EAAKuE,UACZ,KAAK,EAAGuI,EAAIxI,mBAAqB,+BAAgC,MACjE,KAAK,EAAGwI,EAAIxI,mBAAqB,+BAAgC,MACjE,KAAK,EAAGwI,EAAIxI,mBAAqB,+BAAgC,MACjE,KAAK,EAAGwI,EAAIxI,mBAAqB,+BAAgC,MACjE,QAASwI,EAAIxI,mBAAoB,+BAKnCwI,EAAIW,UAAU,GAEdjN,QAAQC,IAAI,sBAAuBqM,EAAIhI,IAEvC,IAAI4I,EAAmBpK,EAAEqK,OAAOd,GAAa,SAASe,GAAU,OAAOA,EAAGC,MAAOf,EAAIhI,MAErFtE,QAAQC,IAAI,gCAAiCiN,GAE7C,IAAII,EAAW,GACXC,EAAwBzK,EAAEqK,OAAOD,GAAkB,SAAS5E,GAAS,OAAOgF,EAAKhF,EAAEhE,MAAcgJ,EAAKhF,EAAEhE,KAAM,MAClHtE,QAAQC,IAAK,kBAAmBqN,GAChCtN,QAAQC,IAAK,+BAAgCsN,GAC7CA,EAAkB3L,KAAI,SAACvC,EAAOmO,GAC5BnO,EAAEoD,QAAO,EACTpD,EAAEqD,UAAS,EACXrD,EAAEgF,SAAQ,KAEZiI,EAAIW,UAAYM,EAChBvN,QAAQC,IAAK,2BAA4BqM,EAAIW,WAC7CX,EAAIW,UAAUpD,QAAS,CAAC,KAAQ,KAAM,GAAK,EAAG,KAAQ,cAAepH,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,IAC3GiI,EAAIW,UAAU5D,KAAM,CAAC,KAAQ,KAAK,GAAK,MAAO,KAAQ,OAAS,YAAe,GAAI5G,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,IACxHrE,QAAQC,IAAK,2BAA4BqM,EAAIW,WAC7CX,EAAImB,UAAYnB,EAAIW,UAAU,GAE9BX,EAAIoB,cAAc,MAGtB1N,QAAQC,IAAK,gBAAiB5B,IAAM8N,UAvDd,kBAwDf9N,IAAM8N,UAxDS,OA2DtB9N,IAAM6N,6BAA6B,iCAAkCjN,EAAYW,IAAKX,EAAYY,SAAU,KAAK,4CA3D3F,4CAAF,qDAAC,GAiEzB8N,qBAAqB,WAAD,4BAAE,WAAOC,EAAWvB,GAAlB,eAAA9M,EAAA,sDAEhBuD,EAAIC,EAAQ,IAChB1E,IAAM8N,SAASvK,KAAI,SAAC0K,EAASC,GAC3B,GAAID,EAAIhI,IAAMsJ,EAAO,CACnBtB,EAAIW,UAAU,GACd,IAAIC,EAAmBpK,EAAEqK,OAAOd,GAAa,SAASe,GAAU,OAAOA,EAAGC,MAAOf,EAAIhI,MACjFgJ,EAAW,GACXC,EAAwBzK,EAAEqK,OAAOD,GAAkB,SAAS5E,GAAS,OAAOgF,EAAKhF,EAAEhE,MAAcgJ,EAAKhF,EAAEhE,KAAM,MAGlHiJ,EAAkB3L,KAAI,SAACvC,EAAOmO,GAC5BnO,EAAEoD,QAAO,EACTpD,EAAEqD,UAAS,EACXrD,EAAEgF,SAAQ,KAEZiI,EAAIW,UAAYM,EAEhBjB,EAAIW,UAAUpD,QAAS,CAAC,KAAQ,KAAM,GAAK,EAAG,KAAQ,cAAepH,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,IAC3GiI,EAAIW,UAAU5D,KAAM,CAAC,KAAQ,KAAK,GAAK,MAAO,KAAQ,OAAS,YAAe,GAAI5G,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,IAExHiI,EAAImB,UAAYnB,EAAIW,UAAU,OArBd,2CAAF,qDAAC,GA4BvBY,mBAAmB,GAGjBC,8BAA8B,WAAD,4BAAE,WAAO7O,EAAiB2O,GAAxB,SAAArO,EAAA,yDACR,GAAjBN,EAAYW,IADa,uBAE3BxB,EAAM,CAAEyP,mBAAoB5O,EAAYuC,OACxCnD,IAAMwP,mBAAmBjM,KAAI,SAACsB,EAAO6K,GACjC7K,EAAE0D,SAAU,EACR1D,EAAEsD,KAAQtD,EAAE8K,UAAY,IACrB9K,EAAE8K,UAAY,IACrB9K,EAAE+K,mBAAqB,GACvB/K,EAAEgL,cAAkC,MAAjBhL,EAAEiL,SAASxJ,KAAczB,EAAEiL,SAASxJ,KAAO,GAC9DzB,EAAEkL,WAAqC,MAAvBlL,EAAEiL,SAASzJ,MAAMC,KAAczB,EAAEiL,SAASzJ,MAAMC,KAAO,MAG3EtG,IAAMgQ,eAAgBT,EAAO,MAAM,EAAMvP,IAAMwP,mBAAoB,iCAZxC,kBAgBpBxP,IAAMwP,oBAhBc,OAmB3BxP,IAAM6N,6BAA6B,iCAAkCjN,EAAYW,IAAKX,EAAYY,SAAU,KAAK,iDAnBtF,2CAAF,qDAAC,GAuB9BwO,eAAe,WAAD,4BAAE,WAAQT,EAAWU,EAAa1H,EAAaqC,EAAab,GAA1D,eAAA7I,EAAA,2DAIN6I,EAJM,OAKL,kCALK,OAaL,+BAbK,OAuBL,kBAvBK,OA6BL,gBA7BK,OAqCL,oBArCK,QAqDL,mBArDK,QAiEL,gCAjEK,+BAMF/J,IAAM8N,SAASvK,KAAI,SAAC0K,EAASiC,GACvBjC,EAAIhI,IAAIsJ,IACRtB,EAAIoB,cAAgBzE,EACpBqD,EAAI1F,QAAUA,MATlB,mCAcFvI,IAAM8N,SAASvK,KAAI,SAAC0K,EAASkC,GACvBlC,EAAIhI,IAAIsJ,GACNtB,EAAIoB,cAAc9L,KAAI,SAAC6M,EAAQC,GAC3BD,EAAGnK,IAAIgK,IACPG,EAAGR,mBAAqBhF,SAlBlC,mCAwBF5K,IAAM8N,SAASvK,KAAI,SAACsB,EAAO6K,GACrB7K,EAAEoB,IAAIsJ,IACN1K,EAAE0D,QAAUA,MA1BhB,mCA8BFvI,IAAM8N,SAASvK,KAAI,SAACsB,EAAOyL,GACrBzL,EAAEoB,IAAIsJ,IACN1K,EAAE0L,MAAO,EACT1L,EAAE0D,SAAU,MAjChB,oCAsCApH,EAAW,GACfnB,IAAM8N,SAASvK,KAAI,SAAC0K,EAASuC,GACvBvC,EAAIhI,IAAIsJ,GACRtB,EAAIoB,cAAc9L,KAAI,SAAC6M,EAAQK,GACzBL,EAAGnK,IAAIgK,IACPG,EAAGN,SAAWlF,EACdwF,EAAGP,cAAiBjF,EAAQtE,KAEhB,OADZnF,EAAOyJ,EAAQvE,SAEX+J,EAAGL,WAAa5O,EAAKmF,aA/CjC,oCAsDJtG,IAAM8N,SAASvK,KAAI,SAAC0K,EAASyC,GACvBzC,EAAIhI,IAAIsJ,GACRtB,EAAIoB,cAAc9L,KAAI,SAAC6M,EAAQO,GACzBP,EAAGnK,IAAIgK,IACPG,EAAGjI,MAAO,EACViI,EAAGT,UAAY/E,EAAQ+E,iBA3D/B,oCAkEF3P,IAAM8N,SAASvK,KAAI,SAAC0K,EAAS2C,GACvB3C,EAAIhI,IAAIsJ,GACRtB,EAAIoB,cAAc9L,KAAI,SAAC6M,EAAQS,GACvBT,EAAGnK,IAAIgK,IACIG,EAAGR,mBACTkB,SAASnI,WAAY,SAvEtC,iEAAF,2DAAC,GAqFjBoI,yBAAyB,GACzBC,yBAAyB,CACvB/K,GAAI,EAAGmI,QAAS,GAAItJ,YAAa,GAAIuJ,cAAe,GAAI4C,gBAAiB,GAAIC,gBAAiB,GAC9FJ,SAAU,CAAE7K,GAAI,EAAG8B,MAAO,GAAIC,YAAa,GAAIG,MAAM,EAAOgJ,SAAU,GAAIC,QAAU,GAClFtB,SAAU,CAAE7J,GAAI,EAAGK,KAAM,GAAIF,MAAO,GAAID,WAAY,GAAIE,MAAO,CAAEJ,GAAI,KAAMK,KAAM,KAAMC,YAAa,KAAMC,MAAO,QAEnHlB,cAAe,CAAEI,SAAU,EAAGF,qBAAsB,SAAU6L,WAAW,EAAOC,SAAU,MAC1F/K,YAAa,CAAEb,SAAU,KAAMF,qBAAsB,KAAM6L,UAAW,MACtE7K,MAAO,IAKP+K,2BAA2B,WAAD,4BAAE,WAAO3Q,EAAiB2O,EAAWU,EAAYuB,EAAUC,EAAUtI,EAAUuI,EAAUC,GAAvF,wJAAAzQ,EAAA,yDAC1BS,QAAQC,IAAI,cAAc8P,GAGtBjN,EAAIC,EAAQ,IAEK,GAAjB9D,EAAYW,IANU,kBAOtBxB,EAAM,CAAEgR,yBAA0B/Q,IAAMgR,2BACxCjR,EAAM,CAAEgR,yBAA0BnQ,EAAYuC,OAI5CnD,IAAM+Q,yBAAyBD,SAASvI,SAAU,EAClDvI,IAAM+Q,yBAAyBD,SAASpI,aAAa1I,IAAM+Q,yBAAyB5I,MAAO,KAC3FnI,IAAM+Q,yBAAyBD,SAASnI,YAAa3I,IAAM+Q,yBAAyB5I,MAAO,KAGvFhH,EAAOnB,IAAM+Q,yBAAyBzL,cAE1CtF,IAAM+Q,yBAAyBxL,eAAiBpE,EAAKqE,qBACrDxF,IAAM+Q,yBAAyBtL,mBAAqB,GApBhC,KAqBXtE,EAAKuE,SArBM,OAsBb,IAtBa,QAuBb,IAvBa,QAwBb,IAxBa,QAyBb,IAzBa,gCAsBV1F,IAAM+Q,yBAAyBtL,mBAAqB,+BAtB1C,oCAuBVzF,IAAM+Q,yBAAyBtL,mBAAqB,+BAvB1C,oCAwBVzF,IAAM+Q,yBAAyBtL,mBAAqB,+BAxB1C,oCAyBVzF,IAAM+Q,yBAAyBtL,mBAAqB,+BAzB1C,oCA0BTzF,IAAM+Q,yBAAyBtL,mBAAoB,+BA1B1C,gCA8BlBqL,EAAW9Q,IAAM+Q,yBAAyBD,SAC1Cc,EAAMd,EAAShB,SACf+B,EAAQD,EAAI3L,GACZ6L,EAAWF,EAAIvL,MACf0L,EAAaH,EAAIvL,MAAMJ,GACvB+L,EAAeJ,EAAIvL,MAAMC,KAG7BmL,EAAKI,EAAM,GAAKD,EAChBH,EAAKI,EAAM,GAAGzN,QAAS,EACvBqN,EAAKI,EAAM,GAAGxN,UAAW,EACzBoN,EAAKI,EAAM,GAAG7L,SAAU,EAIb,OAANwL,IAEHC,EAAKI,EAAM,GAAGxN,UAAW,EAGZ,GAATwN,IACcI,gDACdR,EAAKI,EAAM,GAAGzL,MAAM7C,KAAI,SAAC2O,EAAOC,GAC5BD,EAAEE,SAFQH,gDAEaC,EAAEG,KAAO,IAAMH,EAAEI,qBAIhDtS,IAAM+Q,yBAAyBD,SAASyB,gBAAkBd,GAG1DtI,EAAOnJ,IAAM+Q,yBAAyBD,SAASM,SAC1C7N,KAAI,SAACsB,EAAO2F,GACb3F,EAAET,QAAS,EACXS,EAAER,UAAW,EACbQ,EAAEmB,SAAU,EACZnB,EAAE8B,MAAQ9B,EAAEgC,IAAIZ,GAChBpB,EAAE+B,QAAU/B,EAAEgC,IAAIP,QAEtBtG,IAAM+Q,yBAAyBD,SAAS0B,gBAAkBrJ,EAG1DnJ,IAAM+Q,yBAAyBD,SAAS2B,YAAcf,EAItD1R,IAAM+Q,yBAAyBD,SAAS4B,WAAa,MAGrDf,EAAO3R,IAAM+Q,yBAAyBD,SAASK,UAC1C5N,KAAI,SAACV,EAAO8P,GACb9P,EAAEuB,QAAS,EACXvB,EAAEwB,UAAW,EACbxB,EAAEmD,SAAU,KAEhBhG,IAAM+Q,yBAAyBD,SAAS8B,gBAAkBjB,GAKjD,aAANH,EAzFiB,qBA2FhBqB,GAAW,EAGXpB,EAAKlO,KAAI,SAACwC,EAAO+M,GACf/M,EAAE1B,UAAW,EACb0B,EAAEC,SAAU,KAGD,GAAT6L,IACoB,MAAlBD,EAAIzL,YAAwC,IAAlByL,EAAIzL,aAC9B0M,GAAW,IAIJ,GAAThB,IACEJ,EAAKI,EAAM,GAAGzL,MAAM9D,OAAS,EAC7BmP,EAAKI,EAAM,GAAGzL,MAAM7C,KAAI,SAAC2O,EAAOC,GAC5BD,EAAEa,OAAS,KAGZF,GAAW,GAGxB7S,IAAM+Q,yBAAyBD,SAASyB,gBAAkBd,EAK3C,GAATI,IACA7R,IAAM+Q,yBAAyBD,SAASkC,WAAY,EAGlC,MAAdjB,GAAsC,MAAhBC,IACxBN,EAAK,GAAGtN,QAAS,EACjByO,GAAW,GAIK,MAAdd,GAAsC,MAAhBC,GACtBN,EAAKnO,KAAI,SAACvC,EAAOiS,GACbjS,EAAEgF,SAAU,EACRhF,EAAEiF,IAAI8L,IAAc/Q,EAAEoD,QAAS,MAKzB,MAAd2N,GAAsC,MAAhBC,IACtBN,EAAKA,EAAKpP,OAAO,GAAG8B,QAAS,EAC7BpE,IAAM+Q,yBAAyBD,SAASkC,WAAY,IAK9DhT,IAAM+Q,yBAAyBD,SAAS2B,YAAcf,EAMlDwB,EAAQ,IAAIC,MACZC,EAAU,IAAID,MACdE,EAAY,IAAIF,MAChBG,EAAU,IAAIH,MACdI,EAAU,IAAIJ,MACdK,EAAU,IAAIL,MAEd/J,EAAO,IAAIC,KACXoK,EAAS,KACTC,EAAStK,EAAKO,cAAgB,GAC9BxI,EAAW,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GAEnCuP,GAAW,EACf3T,IAAM+Q,yBAAyB6C,cAAe,EAC9C5T,IAAM+Q,yBAAyB8C,gBAAiB,EAChD7T,IAAM+Q,yBAAyB+C,eAAgB,EAC3CC,EAAS,EACTC,GAAa,EACbC,GAAe,EACfC,GAAa,EACbC,GAAa,EACbC,GAAa,EAGbC,EAAe,GACA,GAAf3C,EAAKpP,SACL+R,EAAerU,IAAM+Q,yBAAyBE,iBAGI,qCAAlDjR,IAAM+Q,yBAAyBE,gBAnLf,sBAoLZS,EAAKpP,QAAU,GApLH,iBAqLRoI,EAAIgH,EAAK,GAAGpL,KArLJ,KAsLJoE,EAAEpI,OAtLE,OAuLL,IAvLK,QAwLL,IAxLK,QAyLL,KAzLK,gCAuLD+R,EAAe,OAvLd,oCAwLDA,EAAe,UAxLd,oCAyLDA,EAAe,aAzLd,qDA4LTA,EAAerU,IAAM+Q,yBAAyBE,gBA5LrC,gCA8LboD,EAAerU,IAAM+Q,yBAAyBE,gBA9LjC,QAgMpBtP,QAAQC,IAAI,yBAA0ByS,GAhMlB,KAiMZA,EAjMY,OAkMb,SAlMa,QAoNb,YApNa,QAyOb,YAzOa,QA4Pb,YA5Pa,SA+Qb,YA/Qa,SAmSb,YAnSa,SAuTb,WAvTa,SA0Ub,YA1Ua,SA8Vb,eA9Va,SAiYb,kBAjYa,SAubb,qBAvba,SAifb,sCAjfa,2BAqMZ,IAFAV,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,KAC5BzD,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAGlB5S,EAAKmF,KAAO1B,EAAE0P,WACTnT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GAjNH,qCAwNZ,IAHAQ,QAAQC,IAAI,aACZ+R,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,IAC5B,IAAS2P,EAAI,EAAGA,GAAK,EAAGA,KACpBpT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAO1B,EAAE0P,WAAa,IAAf,WAAyBC,GAChCpT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GApOP,qCA4OZ,IAFAwS,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,IAC5B,IAAS2P,EAAI,EAAGA,GAAK,EAAGA,KACpBpT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAO1B,EAAE0P,WAAa,IAAf,WAAyBC,GAChCpT,EAAKmF,MAAOwL,EAASxL,MACtBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GAxPP,sCA+PZ,IAFAwS,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,IAC5B,IAAS2P,EAAI,EAAGA,GAAK,EAAGA,KACpBpT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAO1B,EAAE0P,WAAa,IAAf,WAAyBC,GAChCpT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GA3QP,sCAkRZ,IAFAwS,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,IAC5B,IAAS2P,EAAI,EAAGA,GAAK,GAAIA,KACrBpT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAQiO,EAAE,GAAM3P,EAAE0P,WAAa,IAAf,WAAyBC,GACzB3P,EAAE0P,WAAa,IAAf,UAAwBC,GACxCpT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GA/RP,sCAsSZ,IAFAwS,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,IAC5B,IAAS2P,EAAI,EAAGA,GAAK,GAAIA,KACrBpT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAQiO,EAAE,GAAM3P,EAAE0P,WAAa,IAAf,WAAyBC,GAC1B3P,EAAE0P,WAAa,IAAf,UAAwBC,GACvCpT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GAnTP,sCA0Td,IAFAwS,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,IAC5B,IAAS2P,EAAI,EAAGA,GAAK,EAAGA,KACpBpT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAO1B,EAAE0P,WAAa,IAAf,WAAyBC,GAChCpT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GAtUL,sCA6UZ,IAFAwS,GAAW,EACXI,EAAS,EACAnP,EAAI6O,EAAO7O,GAAK8O,EAAO9O,IAC5B,IAAS2P,EAAI,EAAGA,GAAK,GAAIA,KACrBpT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAQiO,EAAE,GAAM3P,EAAE0P,WAAa,IAAf,WAAyBC,GAC1B3P,EAAE0P,WAAa,IAAf,UAAwBC,GACvCpT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GA1VP,sCAiWZ,IAFAwS,GAAW,EACXI,EAAS,EACAnP,EAAE6O,EAAO7O,GAAG8O,EAAO9O,IACxB,IAAS2P,EAAE,EAAGA,GAAG,GAAIA,IASjB,IARIC,EAAS,GACI,EACR,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,GAAc,IAAJA,IAAWC,EAAS,IAC9D,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,IAAWC,EAAS,IACpD,GAAJD,IAEDC,EADc5P,EAAI,MAAQ,GAAaA,EAAI,MAAQ,GAAaA,EAAI,IAAM,EAClD,GAAK,IAExB6P,EAAI,EAAIA,GAAKD,EAAQC,KAC1BtT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAGlB5S,EAAKmF,KAAQiO,EAAE,GAAOE,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,UAAwCE,GAChDA,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,UAAwCE,GAEjEtT,EAAKmF,MAAQwL,EAASxL,MACvBnF,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GA3XX,sCA6YZ,IAXAnB,IAAM+Q,yBAAyB6C,cAAe,EAC9C5T,IAAM+Q,yBAAyB8C,gBAAiB,EAC5Ca,EAAa,CAACzO,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GACrCuQ,EAASC,KAAKC,MAAMD,KAAKE,UAAUlD,EAAIvL,MAAMC,OACjDoO,EAAWpO,KAAOqO,EAAOvN,UAAUuN,EAAOrS,OAAS,GAC/CyS,EAAmBL,EAAWpO,KAC9B0O,EAAiBL,EAAOvN,UAAU,EAAGuN,EAAOrS,OAAS,GAGzDqR,GAAW,EACXI,EAAS,EACAnP,EAAE6O,EAAO7O,GAAG8O,EAAO9O,IACxB,IAAS2P,EAAE,EAAGA,GAAG,GAAIA,IASjB,IARIC,EAAS,GACI,EACR,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,GAAc,IAAJA,IAAWC,EAAS,IAC9D,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,IAAWC,EAAS,IACpD,GAAJD,IAEDC,EADc5P,EAAI,MAAQ,GAAaA,EAAI,MAAQ,GAAaA,EAAI,IAAM,EAClD,GAAK,IAExB6P,EAAI,EAAIA,GAAKD,EAAQC,KAC1BtT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAElB5S,EAAKmF,KAAQiO,EAAE,GAAOE,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,UAAwCE,GAChDA,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,UAAwCE,GAElEtT,EAAKmF,MAAQ0O,GAEb7T,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GAKvB,IAASN,EAAE,EAAIA,GAAG,GAAIA,KAClBM,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAC1B6B,GAAKpF,EACVM,EAAKmF,KAASzF,EAAE,GAAH,WAAaA,GAAb,UAAsBA,GAE9BM,EAAKmF,MAAQyO,GAAqB5T,EAAKiD,QAAO,EAAO4P,GAAa,GAChE7S,EAAKiD,QAAO,EACnBgP,EAAQpI,KAAK7J,GAnbL,sCAmcZ,IAXAnB,IAAM+Q,yBAAyB6C,cAAe,EAC9C5T,IAAM+Q,yBAAyB8C,gBAAiB,EAC5CoB,EAAe,CAAChP,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GACvC8Q,EAAUN,KAAKC,MAAMD,KAAKE,UAAUlD,EAAIvL,MAAMC,OAClD2O,EAAa3O,KAAO4O,EAAQ9N,UAAU8N,EAAQ5S,OAAS,GACnD6S,EAAmBF,EAAa3O,KAChC8O,GAAmBF,EAAQ9N,UAAU,EAAG8N,EAAQ5S,OAAS,GAG7DqR,GAAW,EACXI,EAAS,EACAnP,EAAE6O,EAAO7O,GAAG8O,EAAO9O,IACxB,IAAS2P,EAAE,EAAGA,GAAG,GAAIA,IASjB,IARIC,GAAS,GACI,EACR,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,GAAc,IAAJA,IAAWC,GAAS,IAC9D,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,IAAWC,GAAS,IACpD,GAAJD,IAEDC,GADc5P,EAAI,MAAQ,GAAaA,EAAI,MAAQ,GAAaA,EAAI,IAAM,EAClD,GAAK,IAExB6P,EAAI,EAAIA,GAAKD,GAAQC,KAC1BtT,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADL8N,GAAkB,EAGlB5S,EAAKmF,KAAQiO,EAAE,GAAOE,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,UAAwCE,GAChDA,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,UAAwCE,GACjEtT,EAAKmF,MAAQ8O,IACdjU,EAAKiD,QAAO,EACZuP,GAAW,GAGXxS,EAAKiD,QAAO,EAChB8O,EAAMlI,KAAK7J,GAMvB,IADIkU,GAAU,EACLxU,GAAE,EAAIA,IAAG,GAAIA,KACpB,IAASI,GAAE,EAAIA,IAAG,GAAIA,MAClBE,EAAO,CAAC8E,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADLoP,IAAoB,EAEpBlU,EAAKmF,KAASzF,GAAE,GAAOI,GAAE,GAAM,WAAIJ,GAAJ,gBAAeI,IAAM,WAAIJ,GAAJ,eAAaI,IAC1CA,GAAE,GAAM,UAAGJ,GAAH,gBAAeI,IAAM,UAAGJ,GAAH,eAAYI,IAE3DE,EAAKmF,MAAQ6O,GAAoBhU,EAAKiD,QAAO,EAAO6P,GAAe,GACjE9S,EAAKiD,QAAO,EACnBiP,EAAUrI,KAAK7J,GA5eT,yCAkfZQ,QAAQC,IAAI,yBAEZ5B,IAAM+Q,yBAAyB+C,eAAgB,EAC9B,CAAC7N,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GACxB,CAAC6B,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GACxB,CAAC6B,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GACrCkR,GAA6B,MAAlB1D,EAAIvL,MAAMC,KAAgBsO,KAAKC,MAAMD,KAAKE,UAAUlD,EAAIvL,MAAMC,OAAS,GAClFiP,GAAiB,GACjBC,GAAiB,GACjBC,GAAiB,KACjBH,GAAQhT,OAAS,GA5fT,uBA6fHgT,GAAQhT,OA7fL,OA8fH,IA9fG,SA+fH,IA/fG,SAggBH,KAhgBG,mCA8fCiT,GAAiBD,GAAStV,IAAM0V,aAAa,GAAGtR,QAAQ,EAAMpE,IAAM2V,kBAAoB,QA9fzF,sCA+fCH,GAAiBF,GAAStV,IAAM0V,aAAa,GAAGtR,QAAQ,EAAMpE,IAAM2V,kBAAoB,UA/fzF,sCAggBCF,GAAiBH,GAAStV,IAAM0V,aAAa,GAAGtR,QAAQ,EAAMpE,IAAM2V,kBAAoB,SAhgBzF,+BA6gBZ,IAVAhU,QAAQC,IAAI,SAAS2T,GAAgB,SAASC,GAAgB,SAASC,IACvE9B,GAAW,EAEPiC,GAAW,EACXC,GAAW,EACXC,GAAa,CAAC7P,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GACrC2R,GAAa,CAAC9P,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GACrC4R,GAAa,CAAC/P,GAAG,GAAIK,KAAK,GAAIlC,QAAO,GAGhCQ,EAAE6O,EAAO7O,GAAG8O,EAAO9O,IAUtB,KATAkR,GAAS,CAAC7P,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAC1B6B,GAAMrB,EAAE6O,EAAO,EAEtBqC,GAAOxP,KAAO1B,EAAE0P,WACXwB,GAAOxP,MAAQiP,IAAmBO,GAAO1R,QAAO,EAAO8P,GAAa,GAClE4B,GAAO1R,QAAO,EACrBkP,EAAQtI,KAAK8K,IAGJvB,EAAE,EAAGA,GAAG,GAAIA,IAoBf,KAnBFwB,GAAS,CAAC9P,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADP2P,IAAsB,EAEtBG,GAAOzP,KAAQiO,EAAE,GAAM3P,EAAE0P,WAAa,IAAf,WAAyBC,GACzB3P,EAAE0P,WAAa,IAAf,UAAwBC,GAC1CwB,GAAOzP,MAAQkP,IAAmBO,GAAO3R,QAAO,EAAO+P,GAAa,GAClE4B,GAAO3R,QAAO,EAErBmP,EAAQvI,KAAK+K,IAGPvB,GAAS,GACI,EACR,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,GAAc,IAAJA,IAAWC,GAAS,IAC9D,GAAJD,GAAa,GAAJA,GAAa,GAAJA,GAAa,GAAJA,GAAa,IAAJA,IAAWC,GAAS,IACpD,GAAJD,IAEDC,GADc5P,EAAI,MAAQ,GAAaA,EAAI,MAAQ,GAAaA,EAAI,IAAM,EAClD,GAAK,IAExB6P,EAAI,EAAIA,GAAKD,GAAQC,KAC1BuB,GAAS,CAAC/P,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAE1B6B,GADP4P,IAAsB,EAGtBG,GAAO1P,KAAQiO,EAAE,GAAOE,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,WAAyBC,GAAM,IAA/B,UAAwCE,GAChDA,EAAE,GAAM7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,WAAyCE,GACzC7P,EAAE0P,WAAa,IAAf,UAAwBC,GAAM,IAA9B,UAAwCE,GACnEuB,GAAO1P,MAAQmP,IAAmBO,GAAO5R,QAAO,EAAOgQ,GAAa,GAClE4B,GAAO5R,QAAO,EAErBoP,EAAQxI,KAAKgL,IAvjBjB,sCAikBN,GAAVrC,GAAgC,GAAT9B,IAAegB,GAAW,GAErDK,EAAM1H,QAAS,CAAC,GAAK,EAAG,KAAQ,cAAepH,QAAQuP,IACnD3T,IAAM+Q,yBAAyB6C,cAAgBR,EAAQ5H,QAAS,CAAC,GAAK,EAAG,KAAQ,cAAepH,OAAO4P,IACvGhU,IAAM+Q,yBAAyB8C,gBAAkBR,EAAU7H,QAAS,CAAC,GAAK,EAAG,KAAQ,cAAepH,OAAO6P,IAC3GjU,IAAM+Q,yBAAyB+C,gBAC/BR,EAAQ9H,QAAS,CAAC,GAAK,EAAG,KAAQ,cAAepH,OAAO8P,IACxDX,EAAQ/H,QAAS,CAAC,GAAK,EAAG,KAAQ,cAAepH,OAAO+P,IACxDX,EAAQhI,QAAS,CAAC,GAAK,EAAG,KAAQ,cAAepH,OAAOgQ,KAE5DpU,IAAM+Q,yBAAyBD,SAASmF,iBAAmB/C,EAC3DlT,IAAM+Q,yBAAyBD,SAASoF,mBAAqB9C,EAC7DpT,IAAM+Q,yBAAyBD,SAASqF,qBAAuB9C,EAC/DrT,IAAM+Q,yBAAyBD,SAASsF,mBAAqB9C,EAC7DtT,IAAM+Q,yBAAyBD,SAASuF,mBAAqB9C,EAC7DvT,IAAM+Q,yBAAyBD,SAASwF,mBAAqB9C,EAQvD+C,IAAS,EACTzF,EAASM,QAAQ9O,OAAS,IACtBgI,GAAe,GACnBA,GAAW7F,EAAE0F,MAAM2G,EAASM,QAAS,MACrCjI,EAAK5F,KAAI,SAACsB,EAAO2R,GACb3R,EAAEmB,SAAU,EACZsE,GAAS/G,KAAI,SAACgH,EAAQC,GAMD,IAAD,EALd3F,EAAEoB,IAAIsE,IACN1F,EAAET,QAAS,EACXS,EAAEgC,IAAMiK,EAASM,QAAQ5G,GAAW3D,IACpChC,EAAE8B,MAAQmK,EAASM,QAAQ5G,GAAW3D,IAAIZ,GAC1CpB,EAAE+B,QAAUkK,EAASM,QAAQ5G,GAAW3D,IAAIP,KAClC,GAANzB,EAAEoB,GACF,UAAApB,EAAEiC,mBAAF,SAAevD,KAAI,SAACkT,EAAQC,GAEpB7R,EAAE8B,OAAQ8P,EAAGxQ,IACbwQ,EAAGrS,QAAS,EACZmS,IAAS,GAGTE,EAAGrS,QAAS,KAGjBmS,IAAS,UAMhCvW,IAAM+Q,yBAAyBD,SAAS0B,gBAAkBrJ,EAE3C,GAAT0I,GAAwB,GAAV0E,KAAmB1D,GAAW,GAG5C8D,IAAS,EACT7F,EAASK,SAAS7O,OAAS,IACvBsU,GAAe,GACnBA,GAAWnS,EAAE0F,MAAM2G,EAASK,SAAU,MACtCQ,EAAKpO,KAAI,SAACV,EAAOgU,GACbhU,EAAEmD,SAAU,EACZ4Q,GAASrT,KAAI,SAACuT,EAAQnE,GAChB9P,EAAEoD,IAAI6Q,IACNjU,EAAEuB,QAAS,EACXuS,IAAS,UAKT,GAAT9E,GAAuB,GAAT8E,KAAkB9D,GAAW,GAClD7S,IAAM+Q,yBAAyBD,SAAS8B,gBAAkBjB,EAE1D3R,IAAM+Q,yBAAyBD,SAAS+B,SAAWA,EA3oB/B,gBAgpBtB7S,IAAMgQ,eAAgBT,EAAOU,GAAQ,EAAMjQ,IAAM+Q,yBAA0B,8BAC3EpP,QAAQC,IAAK,wDAAyD5B,IAAM+Q,0BAjpBtD,kBAopBjB/Q,IAAM+Q,0BAppBW,SAupBvB/Q,IAAM6N,6BAA6B,iCAAkCjN,EAAYW,IAAKX,EAAYY,SAAU,KAAK,8CAvpB1F,6CAAF,iEAAC,GA2pB7BuV,wBAAwB,GAGtBC,8BAA8B,WAAD,4BAAE,WAAOpW,GAAP,SAAAM,EAAA,yDAEP,GAAjBN,EAAYW,IAFY,uBAGzBxB,EAAK,CAAEgX,wBAAyBnW,IAHP,kBAKlBZ,IAAM+W,yBALY,OAQ1B/W,IAAM6N,6BAA6B,iCAAkCjN,EAAYW,IAAKX,EAAYY,SAAU,KAAK,gDARvF,2CAAF,mDAAC,GAYhCyV,sBAAsB,GAGpBC,4BAA4B,WAAD,4BAAE,WAAOtW,GAAP,SAAAM,EAAA,yDAEL,GAAjBN,EAAYW,IAFU,uBAGzBxB,EAAK,CAAEkX,sBAAuBrW,IAHL,kBAKlBZ,IAAMiX,uBALY,OAQzBjX,IAAM6N,6BAA6B,iCAAkCjN,EAAYW,IAAKX,EAAYY,SAAU,KAAK,8CARxF,2CAAF,mDAAC,GAY9BkU,aAAc,CAAE,CAACzP,GAAG,EAAGK,KAAK,QAASlC,QAAO,GAAS,CAAC6B,GAAG,EAAGK,KAAK,UAAWlC,QAAO,GAAS,CAAC6B,GAAG,EAAGK,KAAK,SAAUlC,QAAO,IAEzHuR,kBAAmB,KAEnBwB,mBAAmB,WAAD,4BAAE,WAAQlR,GAAR,SAAA/E,EAAA,sDAElBlB,IAAM2V,kBAAoB,KAC1B3V,IAAM0V,aAAanS,KAAI,SAAC2O,EAAOkF,GACvBlF,EAAEjM,IAAMA,GAAMiM,EAAE9N,QAAS,EAAMpE,IAAM2V,kBAAoBzD,EAAE5L,MACxD4L,EAAE9N,QAAS,KALJ,2CAAF,mDAAC,GASnBiT,qBAAqB,WAAD,4BAAE,WAAQpR,GAAR,SAAA/E,EAAA,sDAEpBlB,IAAM2V,kBAAoB,KAC1B3V,IAAM0V,aAAanS,KAAI,SAAC2O,EAAOkF,GAC3BlF,EAAE9N,QAAS,KAJK,2CAAF,mDAAC,OCj1BRkT,EA/HSxX,KAAO,SAACC,EAASC,GAAV,MAAuB,CAEpDuX,wBAAyB,CAAErX,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAKC,QAAQ,aAAcC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAGhI+W,8BAA+B,WAE7BzX,EAAK,CAAEwX,wBADI,CAAErX,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,aAAcC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMnHgX,8BAA8B,WAAD,4BAAE,WAAO7W,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAGzBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,aAAcC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QAC1FG,GAAbR,GAAwC,wBAAbA,EAJF,gBAK3BO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DANY,0BAQP,kCAAbI,EARoB,iBAS3BO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAVa,2BAavBgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAfb,iBAgBvBH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SAjBT,wBAoBvBL,EAAKZ,QAASK,EAAYa,OApBH,KAqBhBb,EAAYa,OArBI,OAuBhB,MAvBgB,QAwBhB,MAxBgB,gCAuBVN,EAAKX,SAAU,gBAvBL,oCAwBVW,EAAKX,SAAU,0DAxBL,oCAyBZW,EAAKX,SAAUI,EAAYc,WAzBf,6BA6B7B3B,EAAK,CAAEwX,wBAAyBpW,IAChCQ,QAAQC,IAAI,uFAAwF5B,IAAMuX,yBA9B7E,4CAAF,6DAAC,GAiChCG,qBAAsB,GAGpBC,0BAA0B,WAAD,4BAAE,WAAO/W,GAAP,SAAAM,EAAA,6DAEzBnB,EAAM,CAAE2X,qBAAsB9W,IAE9BZ,IAAM0X,qBAAqBnU,KAAI,SAACV,GAC5BA,EAAEuB,QAAO,EACTvB,EAAEwB,UAAS,EACXxB,EAAEmD,SAAQ,KAPW,kBAUlBhG,IAAM0X,sBAVY,2CAAF,mDAAC,GAa5BE,iBAAkB,GAGhBC,0BAA0B,WAAD,4BAAE,WAAOjX,GAAP,eAAAM,EAAA,6DAEzBnB,EAAM,CAAE6X,iBAAkBhX,IAGpBkX,EAAM,GACV9X,IAAM4X,iBAAiBrU,KAAI,SAACvC,GAC1B8W,EAAM,GACN9W,EAAEwF,MAAOjD,KAAI,SAACtC,GACI,MAAVA,EAAEqF,OAAkBwR,EAAMA,EAAM,KAAO7W,EAAEqF,KAAO,UAExDtF,EAAEsF,KAAOtF,EAAEsF,KAAOwR,EAAI1Q,UAAU,EAAG0Q,EAAIxV,OAAO,GAC9CtB,EAAE8W,IAAMA,KAZa,kBAehB9X,IAAM4X,kBAfU,2CAAF,mDAAC,GAoB1BG,4BAA4B,WAAD,4BAAE,WAAOrG,GAAP,mBAAAxQ,EAAA,6DACvBuD,EAAIC,EAAQ,IAGhBgN,EAAKnO,KAAI,SAACvC,GAAYhB,IAAM4X,iBAAiB5M,KAAKhK,MAE9C8W,EAAM,GAEV9X,IAAM4X,iBAAiBrU,KAAI,SAACyU,GACxBF,EAAM,GACNE,EAAMxR,MAAMjD,KAAI,SAACtC,GACC,MAAVA,EAAEqF,OAAgBwR,EAAMA,EAAM,KAAO7W,EAAEqF,KAAO,UAEtD0R,EAAM1R,KAAO0R,EAAM1R,KAAOwR,EAAI1Q,UAAU,EAAG0Q,EAAIxV,OAAO,MAE1DX,QAAQC,IAAI,oDAAqD5B,IAAM4X,kBACnEzW,EAAOsD,EAAEqK,OAAO9O,IAAM4X,kBAAkB,SAASK,GAAU,MAA+C,WAAxCA,EAAG1R,YAAYf,wBAErFzF,EAAM,CAAE6X,iBAAkBzW,IAC1BQ,QAAQC,IAAI,oDAAqD5B,IAAM4X,kBAnB5C,kBAoBpB5X,IAAM4X,kBApBc,2CAAF,mDAAC,GAuB9BM,0BAA2B,GAGzBC,4BAA4B,WAAD,4BAAE,WAAOvX,GAAP,SAAAM,EAAA,6DAE3BnB,EAAM,CAAEmY,0BAA2BtX,IAGjCZ,IAAMkY,0BAA0B3U,KAAI,SAAC6U,GACnCA,EAAMC,SAAS9U,KAAI,SAAC+U,GAClBA,EAAQlU,QAAO,EACfkU,EAAQnR,YAAcmR,EAAQhS,KAAKhE,OAAS,GAAMgW,EAAQhS,KAAKc,UAAU,EAAE,IAAM,MAAQkR,EAAQhS,WAR5E,kBAYpBtG,IAAMkY,2BAZc,2CAAF,mDAAC,OCzCjBK,EAvEIzY,KAAO,SAACC,EAASC,GAAV,MAAuB,CAE/CwY,mBAAoB,CAAEtY,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAIC,QAAQ,QAASC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAGnHgY,yBAA0B,WAEtB1Y,EAAK,CAAEyY,mBADI,CAAEtY,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,QAASC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMhHiY,yBAAyB,WAAD,4BAAE,WAAO9X,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,sDAGlBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,QAASC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QACrFG,GAAbR,GAAwC,wBAAbA,GAC7BO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,+DAEK,kCAAbI,GACPO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,IAGVgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,MACtCH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,WAG9BL,EAAKZ,QAASK,EAAYa,OACF,KAApBb,EAAYa,OACZN,EAAKX,SAAU,uBAEfW,EAAKX,SAAUI,EAAYc,aAGrC3B,EAAK,CAAEyY,mBAAoBrX,IAC3BQ,QAAQC,IAAI,kDAAmD5B,IAAMwY,oBA5B/C,2CAAF,6DAAC,GA+B5BG,yBAAyB,GAGtBC,+BAA+B,WAAD,4BAAE,WAAOhY,GAAP,SAAAM,EAAA,yDACT,GAAjBN,EAAYW,IADc,uBAE1BxB,EAAK,CAAE4Y,yBAA0B/X,IAFP,kBAInBZ,IAAM2Y,0BAJa,OAO1B3Y,IAAM0Y,yBAAyB,iCAAkC9X,EAAYW,IAAKX,EAAYY,SAAU,KAAK,8CAPnF,2CAAF,mDAAC,GAY/BqX,+BAA+B,WAAD,4BAAE,WAAOjY,GAAP,SAAAM,EAAA,yDACT,GAAjBN,EAAYW,IADc,uBAE1BxB,EAAK,CAAE+Y,oBAAqBlY,IAFF,kBAInBZ,IAAM8Y,qBAJa,OAO1B9Y,IAAM0Y,yBAAyB,iCAAkC9X,EAAYW,IAAKX,EAAYY,SAAU,KAAK,+CAPnF,2CAAF,mDAAC,OCsbtBuX,EA9eOjZ,KAAO,SAACC,EAASC,GAAV,MAAuB,CAElDgZ,sBAAuB,CAAE9Y,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAKC,QAAQ,GAAIC,WAAW,WAAYC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAGxHwY,4BAA6B,WAG3BlZ,EAAK,CAAEiZ,sBADI,CAAE9Y,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,GAAIC,WAAW,WAAYC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMjHyY,4BAA4B,WAAD,4BAAE,WAAOtY,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAIvBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,WAAYC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QACxFG,GAAbR,GAAwC,wBAAbA,EALJ,gBAMvBO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DAPQ,0BASL,kCAAbI,EATkB,iBAUzBO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAXW,2BAcrBgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAhBf,iBAiBvBK,QAAQC,IAAI,SACVT,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SAnBX,wBAsBrBL,EAAKZ,QAASK,EAAYa,OAtBL,KAuBdb,EAAYa,OAvBE,OAyBd,MAzBc,QA0Bd,MA1Bc,gCAyBRN,EAAKX,SAAU,gBAzBP,oCA0BRW,EAAKX,SAAU,0DA1BP,oCA2BVW,EAAKX,SAAUI,EAAYc,WA3BjB,6BAgC3B3B,EAAK,CAAEiZ,sBAAuB7X,IAC9BQ,QAAQC,IAAI,iFAAkF5B,IAAMgZ,uBAjCzE,4CAAF,6DAAC,GAoClCG,SAAS,GAGLvR,4BAA4B,WAAD,4BAAE,WAAOhH,EAAiBoN,GAAxB,iBAAA9M,EAAA,yDAIvBuD,EAAIC,EAAQ,IACK,GAAjB9D,EAAYW,IALW,uBAQrB6X,EAAU3U,EAAEqK,OAAOlO,EAAYuC,MAAM,SAASkW,GAAW,OAAiB,GAAVA,EAAIlR,QAExEpI,EAAM,CAAEoZ,SAAUC,IAEG,MAAjBpZ,IAAMmZ,UACNnZ,IAAMmZ,SAAS5V,KAAI,SAAC+V,EAASC,GACzBD,EAAI/Q,SAAU,EACd+Q,EAAIE,UAAYF,EAAIlL,QAAU,MAAQkL,EAAIjL,cAAgB,MAAQiL,EAAIG,UACtEH,EAAI7Q,aAAgB6Q,EAAInR,KAAQ,UAAY,aAC5CmR,EAAIhL,gBAAkBgL,EAAII,WAGxB,IAAIvY,EAAOmY,EAAIhU,cAGf,OAFAgU,EAAI/T,eAAiBpE,EAAKqE,qBAC1B8T,EAAI7T,mBAAqB,GAChBtE,EAAKuE,UACZ,KAAK,EAAG4T,EAAI7T,mBAAqB,+BAAgC,MACjE,KAAK,EAAG6T,EAAI7T,mBAAqB,+BAAgC,MACjE,KAAK,EAAG6T,EAAI7T,mBAAqB,+BAAgC,MACjE,KAAK,EAAG6T,EAAI7T,mBAAqB,+BAAgC,MACjE,QAAS6T,EAAI7T,mBAAoB,mCAK7C9D,QAAQC,IAAK,gBAAiB5B,IAAMmZ,UAjCX,kBAkClBnZ,IAAMmZ,UAlCY,OAqCzBnZ,IAAMkZ,4BAA4B,iCAAkCtY,EAAYW,IAAKX,EAAYY,SAAU,KAAK,8CArCvF,4CAAF,qDAAC,GAyC5BmY,eAAe,WAAD,4BAAE,WAAQC,EAAWrR,EAAaqC,EAAab,GAA7C,SAAA7I,EAAA,2DAGN6I,EAHM,OAIP,+BAJO,6BAKN/J,IAAMmZ,SAAS5V,KAAI,SAAC+V,EAASC,GACvBD,EAAIrT,IAAI2T,EAASN,EAAI/Q,SAAU,EAC5B+Q,EAAI/Q,SAAU,KAPjB,+DAAF,yDAAC,GAanBsR,iBAAkB,GAClBC,gBAAiB,CACb7T,GAAI,EAAGnB,YAAa,GAAIsJ,QAAS,GAAIC,cAAe,GAAIoL,UAAW,GAAKtR,MAAM,EAAMuR,WAAY,EAAG5J,SAAU,GAC7GxK,cAAe,CAAGI,SAAU,EAAGF,qBAAsB,GAAI6L,WAAW,EAAMC,SAAU,GACpF/K,YAAa,CAAEb,SAAU,EAAGF,qBAAsB,GAAI6L,WAAW,GACjE7K,MAAO,CAAE,CAAEF,KAAM,GAAI0B,YAAa,GAAI5F,MAAO,KAC7C0O,SAAU,CAAE,CAAE7K,GAAI,EAAG8B,MAAO,KAC5B3B,MAAO,CAAE,CAAEH,GAAI,EAAG8T,WAAY,GAAI1H,KAAM,GAAI/L,KAAM,GAAIgM,iBAAkB,GAAIrK,UAAW,KACvFkJ,SAAU,CAAE,CAAElL,GAAI,EAAGK,KAAM,GAAI0T,QAAS,CAAE,CAAE/T,GAAI,EAAGK,KAAM,KAAQ2T,MAAO,CAAE,CAAChU,GAAI,EAAIK,KAAM,GAAI4T,WAAW,EAAOC,MAAO,OACtHC,YAAY,IAEhBC,oBAAqB,CACnB,CAAEC,OAAO,KAAWlW,QAAO,EAAOiD,YAAY,8BAA4BkT,IAAI,GAAKC,SAAU,IAC7F,CAAEF,OAAO,KAAWlW,QAAO,EAAOiD,YAAY,0BAAwBkT,IAAI,GAAIC,SAAU,IACxF,CAAEF,OAAO,QAAWlW,QAAO,EAAOiD,YAAY,wCAAyCkT,IAAI,GAAIC,SAAU,IACzG,CAAEF,OAAO,UAAWlW,QAAO,EAAOiD,YAAY,2CAAyCkT,IAAI,GAAIC,SAAU,IACzG,CAAEF,OAAO,MAAWlW,QAAO,EAAOiD,YAAY,qBAAmBkT,IAAI,GAAIC,SAAU,KAGrFC,gBAAiB,GACjBC,gBAAiB,GACjBC,mBAAoB,GACpBC,qBAAsB,GACtBC,iBAAkB,GAGd/Q,2BAA2B,WAAD,4BAAE,WAAOlJ,EAAiBgZ,EAAWnI,EAAUtI,EAAUiP,GAAvD,iCAAAlX,EAAA,yDAItBuD,EAAIC,EAAQ,IAEhB3E,EAAM,CAAE8Z,iBAAkB7Z,IAAM8Z,kBAChC/Z,EAAM,CAAE8Z,iBAAkBjZ,EAAYuC,OAClC2X,EAAa,GACbC,EAAa,GACbC,EAAgB,GAChBC,EAAkB,GAClBC,EAAc,GACdlR,GAAkB,EAED,GAAjBpJ,EAAYW,IAfU,iBAkBpBvB,IAAM6Z,iBAAiBO,YAAc,GACrCpa,IAAM6Z,iBAAiBO,YAAc,CACnC,CAAEE,OAAO,KAAWlW,QAAO,EAAOiD,YAAY,8BAA4BkT,IAAI,GAAKC,SAAU,IAC7F,CAAEF,OAAO,KAAWlW,QAAO,EAAOiD,YAAY,0BAAwBkT,IAAI,GAAIC,SAAU,IACxF,CAAEF,OAAO,QAAWlW,QAAO,EAAOiD,YAAY,wCAAyCkT,IAAI,GAAIC,SAAU,IACzG,CAAEF,OAAO,UAAWlW,QAAO,EAAOiD,YAAY,2CAAyCkT,IAAI,GAAIC,SAAU,IACzG,CAAEF,OAAO,MAAWlW,QAAO,EAAOiD,YAAY,oBAAkBkT,IAAI,GAAIC,SAAU,KAGtEvI,gDAGZ6I,EAAS,GACTC,EAAS,GACTC,EAAY,GACZC,EAAc,GACdC,EAAU,GAC0B,MAAhClb,IAAM6Z,iBAAiBzT,OAAiBpG,IAAM6Z,iBAAiBzT,MAAM9D,OAAS,GAC9EtC,IAAM6Z,iBAAiBzT,MAAM7C,KAAI,SAAC2O,EAAOkF,GAInC,OAHAlF,EAAEE,SAVAH,gDAUsBC,EAAEG,KAAO,IAAMH,EAAEI,iBACzCJ,EAAEa,OAAS,EAEHb,EAAE6H,YACR,IAAK,KAAWe,EAAO9P,KAAKkH,GAASlS,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASxP,KAAKkH,GAAI,MAC7F,IAAK,KAAW6I,EAAO/P,KAAKkH,GAASlS,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASxP,KAAKkH,GAAI,MAC7F,IAAK,QAAW8I,EAAUhQ,KAAKkH,GAAMlS,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASxP,KAAKkH,GAAIlS,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASpW,QAAO,EAAM,MACzJ,IAAK,UAAW6W,EAAYjQ,KAAKkH,GAAIlS,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASxP,KAAKkH,GAAIlS,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASpW,QAAO,EAAM,MACzJ,IAAK,MAAW8W,EAAQlQ,KAAKkH,GAAQlS,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASxP,KAAKkH,OAIjGlS,IAAM6Z,iBAAiBO,YAAY7W,KAAI,SAAC4X,EAAQC,GACpB,GAApBD,EAAGX,SAASlY,QAAa6Y,EAAG/W,SAAU4F,GAAkB,OAG7DA,GAAkB,EACzBjK,EAAM,CAAE0a,gBAAiBK,IACzB/a,EAAM,CAAE2a,gBAAiBK,IACzBhb,EAAM,CAAE4a,mBAAoBK,IAC5Bjb,EAAM,CAAE6a,qBAAsBK,IAC9Blb,EAAM,CAAE8a,iBAAkBK,KAIxBG,EAAQrb,IAAM6Z,iBAAiB/J,SAAShB,QAAO,SAAC3L,EAAS2E,GACzD,OAAO9H,IAAM6Z,iBAAiB/J,SAASpM,QAAQP,KAAU2E,MAEnDxF,OAAO,GACftC,IAAM6Z,iBAAiByB,cAAgB,GACvCD,EAAM9X,KAAI,SAACgY,EAAQC,GACf/J,EAAKlO,KAAI,SAACwC,EAAO+M,GAAwByI,GAAMxV,EAAEE,IAAMjG,IAAM6Z,iBAAiByB,cAActQ,KAAKjF,EAAEO,aAGlGtG,IAAM6Z,iBAAiByB,cAAgB,KAE9Ctb,IAAM6Z,iBAAiB4B,mBAAqB,GAC5Czb,IAAM6Z,iBAAiB/J,SAASvM,KAAI,SAACwC,EAAO2V,GAC/B,GAAL3V,GAAU/F,IAAM6Z,iBAAiB4B,mBAAmBzQ,KAAK,YACpD,GAALjF,GAAU/F,IAAM6Z,iBAAiB4B,mBAAmBzQ,KAAK,mBAI7D2Q,EAAS3b,IAAM6Z,iBAAiB1I,UAC7B5N,KAAI,SAACqY,EAASC,GACjBD,EAAGrT,SAAU,EACbqT,EAAGE,yBAA0B,EAC7BF,EAAGG,iBAAkB,EACrBH,EAAGI,qBAAsB,EAIzB,IAAIC,EAAWrH,KAAKC,MAAMD,KAAKE,UAAU3L,IACzC,GAAIyS,EAAG3B,MAAM3X,OAAS,EAAG,CACrB,IAAIgI,EAAe,GACnBA,EAAW7F,EAAE0F,MAAMyR,EAAG3B,MAAO,MAE7BgC,EAAU1Y,KAAI,SAAC4F,EAAU+S,GACrB/S,EAAKgT,UAAY,GACjB7R,EAAS/G,KAAI,SAACgH,EAAQ6R,GAChBjT,EAAKlD,IAAMsE,IACXpB,EAAK/E,QAAS,EAEG,QAAb+E,EAAK7C,OACL6C,EAAKgT,UAAYP,EAAG3B,MAAMmC,GAAejC,MACJ,MAAjCyB,EAAG3B,MAAMmC,GAAejC,OAAkD,IAAjCyB,EAAG3B,MAAMmC,GAAejC,QACjEyB,EAAGI,qBAAsB,EACzBhS,GAAkB,KAIb,WAAbb,EAAK7C,MAAqB6C,EAAK/E,SACjCpE,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,EAC5B,GAAfuX,EAAOrZ,SAAatC,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,IAExD,WAAb+E,EAAK7C,MAAqB6C,EAAK/E,SAC/BpE,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,EAC5B,GAAfuX,EAAOrZ,SAAatC,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,GACV,GAAzDpE,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAASlY,SAAe0H,GAAkB,eAM9F4R,EAAGG,iBAAkB,EACrBH,EAAGI,qBAAsB,EACzBhS,GAAkB,EAEtB4R,EAAGS,aAAeJ,EAIlB,IAAIK,EAAY1H,KAAKC,MAAMD,KAAKE,UAAUsD,IACtCmE,EAAe,GACnB,GAAIX,EAAG5B,QAAQ1X,OAAS,EAAG,CACzB,IAAIka,EAAgB,GACpBA,EAAY/X,EAAE0F,MAAMyR,EAAG5B,QAAS,MAEhCsC,EAAW/Y,KAAI,SAAC6U,EAAWqE,GACnBb,EAAG3V,IAAMmS,EAAMnS,KACfsW,EAAW,GACXnE,EAAMC,SAAS9U,KAAI,SAAC+U,EAAaoE,GAC7BpE,EAAQlU,QAAS,EACjBoY,EAAUjZ,KAAI,SAACoZ,EAAWC,GAClBtE,EAAQrS,IAAI0W,IAAUrE,EAAQlU,QAAS,SAGnDmY,EAAWnE,EAAMC,kBAKvBuD,EAAGE,yBAA0B,EAC7B9R,GAAkB,EAClBsS,EAAW/Y,KAAI,SAAC6U,EAAWqE,GACrBb,EAAG3V,IAAMmS,EAAMnS,KACfsW,EAAW,GACXnE,EAAMC,SAAS9U,KAAI,SAAC+U,EAAaoE,GAAuBpE,EAAQlU,QAAS,KACzEmY,EAAWnE,EAAMC,aAK3BuD,EAAGiB,qBAAuBN,KAG9Bvc,IAAM6Z,iBAAiB1I,SAAWwK,EAGlC3b,IAAM6Z,iBAAiBtR,SAAU,EACjCvI,IAAM6Z,iBAAiBnR,aAAa1I,IAAM6Z,iBAAiB1R,MAAO,KAClEnI,IAAM6Z,iBAAiBlR,UAAa3I,IAAM6Z,iBAAiB1R,KAAO,KAAO6B,EAEzEhK,IAAM6Z,iBAAiBiD,cAAgBrY,EAAEsY,KAAK/c,IAAM6Z,iBAAiB/J,UAGjEkN,EAAShd,IAAM6Z,iBAAiBvU,cACpCtF,IAAM6Z,iBAAiBtU,eAAiByX,EAAOxX,qBACL,GAAtCxF,IAAM6Z,iBAAiBiD,gBACvB9c,IAAM6Z,iBAAiBO,YAAY,GAAG/S,YAAc,gCACpDrH,IAAM6Z,iBAAiBO,YAAY,GAAGG,IAAM,IAIhDva,IAAM6Z,iBAAiBpU,mBAAqB,GArLxB,KAsLXuX,EAAOtX,SAtLI,OAuLb,IAvLa,QAwLb,IAxLa,QAyLb,IAzLa,QA0Lb,IA1La,gCAuLT1F,IAAM6Z,iBAAiBpU,mBAAqB,+BAvLnC,oCAwLTzF,IAAM6Z,iBAAiBpU,mBAAqB,+BAxLnC,oCAyLTzF,IAAM6Z,iBAAiBpU,mBAAqB,+BAzLnC,oCA0LTzF,IAAM6Z,iBAAiBpU,mBAAqB,+BA1LnC,oCA2LTzF,IAAM6Z,iBAAiBpU,mBAAqB,+BA3LnC,oCA+LpB9D,QAAQC,IAAK,4BAA6B5B,IAAM6Z,kBAShD7Z,IAAM2Z,eAAgBC,GAAO,EAAM,KAAM,8BAxMrB,kBA2MjB5Z,IAAM6Z,kBA3MW,QA8MrB7Z,IAAMkZ,4BAA4B,iCAAkCtY,EAAYW,IAAKX,EAAYY,SAAU,KAAK,6CA9M3F,4CAAF,2DAAC,GAkN3Byb,sBAAsB,WAAD,4BAAE,WAAQrD,EAAWsD,EAAWtS,EAAauS,EAAepT,GAA1D,qBAAA7I,EAAA,2DAGb6I,EAHa,OAId,+BAJc,OAYd,gBAZc,OAwBd,+BAxBc,QAkCd,uBAlCc,QA0Fd,kBA1Fc,QA8Fd,kBA9Fc,QAkGd,qBAlGc,QAsGd,uBAtGc,QA0Gd,mBA1Gc,+BAKb/J,IAAMmZ,SAAS5V,KAAI,SAAC+V,EAASC,GACvBD,EAAIrT,IAAI2T,EACRN,EAAI/Q,SAAU,EAEd+Q,EAAI/Q,SAAU,KATP,mCAabvI,IAAMmZ,SAAS5V,KAAI,SAAC+V,EAASC,GACvBD,EAAIrT,IAAI2T,IACRN,EAAI/Q,SAAU,EACd+Q,EAAInR,MAAO,MAGjBnI,IAAM6Z,iBAAiBnR,WAAa,KACpC1I,IAAM6Z,iBAAiBlR,UAAW,KAClC3I,IAAM6Z,iBAAiBtJ,MAAO,EArBjB,oCAyBbvQ,IAAM6Z,iBAAiB1I,SAAS5N,KAAI,SAAC6Z,EAAYC,GAC3CD,EAAOnX,IAAMiX,IACbE,EAAOP,qBAAuBjS,EAC9BwS,EAAOtB,wBAA0BqB,EAEK,GAAlCC,EAAOtB,0BAAoC9b,IAAM6Z,iBAAiBlR,WAAY,OA9B3E,oCAmCT2U,GAAW,EACftd,IAAM6Z,iBAAiB1I,SAAS5N,KAAI,SAAC6Z,EAAYC,GACzCD,EAAOnX,IAAMiX,IACbE,EAAOf,aAAezR,EACtBwS,EAAOrB,gBAAkBoB,GAEb,GAAZA,IAAqBnd,IAAM6Z,iBAAiBlR,WAAY,GAExDyU,EAAOf,aAAa,GAAGjY,OAAUgZ,EAAOpB,qBAAsB,EAC5DoB,EAAOpB,qBAAsB,EACnCoB,EAAOf,aAAa9Y,KAAI,SAAC4F,EAAUqB,GAC3BrB,EAAK/E,SAAUkZ,GAAW,SAKxB,GAAVA,IAAmBtd,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,GAIlEmZ,GAAiB,EACuB,GAAxCvd,IAAM6Z,iBAAiB1I,SAAS7O,SAAaib,GAAiB,GAE9DC,GAAe,EACfC,GAAoB,EACxBzd,IAAM6Z,iBAAiB1I,SAAS5N,KAAI,SAAC6Z,EAAYC,GAAqB,IAAD,EACjE,UAAAD,EAAOf,oBAAP,SAAqB9Y,KAAI,SAAC0H,EAAQT,GACjB,WAAXS,EAAG3E,MAAqB2E,EAAG7G,SAAUqZ,GAAkB,GAC5C,WAAXxS,EAAG3E,MAAqB2E,EAAG7G,SAAUoZ,GAAa,SAGxDC,GACAzd,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,EAC3CmZ,IAAkBvd,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,IAElEpE,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,EAClDoZ,GACAxd,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,EAC3CmZ,IAAkBvd,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,IAElEpE,IAAM6Z,iBAAiBO,YAAY,GAAGhW,QAAS,EAEtDzC,QAAQC,IAAK,qCAAsC5B,IAAM6Z,kBA7E5C,oCA2Fb7Z,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAAW5P,EACjD5K,IAAMya,gBAAkB7P,EA5FX,oCA+Fb5K,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAAW5P,EACjD5K,IAAM0a,gBAAkB9P,EAhGX,oCAmGb5K,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAAW5P,EACjD5K,IAAM2a,mBAAqB/P,EApGd,oCAuGb5K,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAAW5P,EACjD5K,IAAM4a,qBAAuBhQ,EAxGhB,oCA2Gb5K,IAAM6Z,iBAAiBO,YAAY,GAAGI,SAAW5P,EACjD5K,IAAM6a,iBAAmBjQ,EA5GZ,iEAAF,2DAAC,GAsH1Bc,kBAAkB,GAIdC,wBAAwB,WAAD,4BAAE,WAAO/K,GAAP,SAAAM,EAAA,yDAED,GAAjBN,EAAYW,IAFM,uBAGrBxB,EAAK,CAAE2L,kBAAmB9K,IAHL,kBAKdZ,IAAM0L,mBALQ,OAQrB1L,IAAMkZ,4BAA4B,iCAAkCtY,EAAYW,IAAKX,EAAYY,SAAU,KAAK,0CAR3F,2CAAF,mDAAC,GAY5BuK,gBAAgB,GAIZ2R,sBAAsB,WAAD,4BAAE,WAAO9c,GAAP,SAAAM,EAAA,yDAEC,GAAjBN,EAAYW,IAFI,uBAGnBxB,EAAK,CAAEgM,gBAAiBnL,IAHL,kBAKZZ,IAAM+L,iBALM,OAQnB/L,IAAM6N,6BAA6B,iCAAkCjN,EAAYW,IAAKX,EAAYY,SAAU,KAAK,wCAR9F,2CAAF,mDAAC,OCrBbmc,EA5cQ7d,KAAO,SAACC,EAASC,GAAV,MAAuB,CAEnD4d,uBAAwB,CAAE1d,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAKC,QAAQ,YAAaC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAG9Hod,6BAA8B,WAE5B9d,EAAK,CAAE6d,uBADI,CAAE1d,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,YAAaC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMlHqd,6BAA6B,WAAD,4BAAE,WAAOld,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAGxBC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,YAAaC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QACzFG,GAAbR,GAAwC,wBAAbA,EAJH,gBAKxBO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DANS,0BAQN,kCAAbI,EARmB,iBAS1BO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAVY,2BAatBgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAfd,iBAiBtBH,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SAlBV,wBAqBtBL,EAAKZ,QAASK,EAAYa,OArBJ,KAsBfb,EAAYa,OAtBG,OAwBf,MAxBe,QAyBf,MAzBe,gCAwBTN,EAAKX,SAAU,gBAxBN,oCAyBTW,EAAKX,SAAU,0DAzBN,oCA0BXW,EAAKX,SAAUI,EAAYc,WA1BhB,6BA8B5B3B,EAAK,CAAE6d,uBAAwBzc,IA9BH,4CAAF,6DAAC,GAkC/BgY,SAAU,GACV4E,gBAAiB,GAGbnW,4BAA4B,WAAD,4BAAE,WAAOhH,GAAP,eAAAM,EAAA,yDAInBwD,EAAQ,IACK,GAAjB9D,EAAYW,IALW,uBAOnB6X,EAAUxY,EAAYuC,MAElBI,KAAI,SAAC+V,GACTA,EAAI/Q,SAAU,EACd+Q,EAAIE,UAAYF,EAAIlL,QAAU,MAAQkL,EAAIjL,cAAgB,MAAQiL,EAAIG,UACtEH,EAAI0E,YAAc1E,EAAInI,SAAS7O,OAE/B,IAAInB,EAAOmY,EAAIhU,cAGf,OAFAgU,EAAI/T,eAAiBpE,EAAKqE,qBAC1B8T,EAAI7T,mBAAqB,GAChBtE,EAAKuE,UACZ,KAAK,EAAG4T,EAAI7T,mBAAqB,+BAAgC,MACjE,KAAK,EAAG6T,EAAI7T,mBAAqB,+BAAgC,MACjE,KAAK,EAAG6T,EAAI7T,mBAAqB,+BAAgC,MACjE,KAAK,EAAG6T,EAAI7T,mBAAqB,+BAAgC,MACjE,QAAS6T,EAAI7T,mBAAoB,+BAMjC,IAAIwY,GAAa,EACbC,GAAe,EACQ,GAAvB5E,EAAIxJ,SAASxN,OAAegX,EAAI6E,WAAa7E,EAAIxJ,SAAS,IAE1DwJ,EAAIxJ,SAASvM,KAAI,SAACqO,EAASwM,GACZ,GAAPxM,IAAYqM,GAAa,GAClB,GAAPrM,IAAYsM,GAAe,MAE/BD,IAAgB3E,EAAI6E,WAAa,GACjCD,IAAgB5E,EAAI6E,WAAa,IAErCF,GAAcC,IAAgB5E,EAAI6E,WAAa,IAGjD7E,EAAInR,KAASmR,EAAI+E,UAAY,YAC1B/E,EAAI+E,UAAY,oCAI3Bte,EAAM,CAAEoZ,SAAUC,IAGlBpZ,IAAMse,sBAAuBlF,GAlDN,kBAoDhBpZ,IAAM+d,iBApDU,OAuDvB/d,IAAM8d,6BAA6B,iCAAkCld,EAAYW,IAAKX,EAAYY,SAAU,KAAK,+CAvD1F,4CAAF,mDAAC,GA2D5B8c,sBAAsB,WAAD,4BAAE,WAAQC,GAAR,yCAAArd,EAAA,sDASnB,IANIuD,EAAIC,EAAQ,IACZ8Z,EAAY/Z,EAAEga,QAAQF,EAAY,cAClCG,EAASC,OAAOC,KAAKJ,GACrBK,EAAW,GACXC,EAAmB,CAAE,GAAK,EAAG,QAAU,GAAI,SAAU,EAAM,QAAU,GAAI,EAAI,EAAG,EAAI,EAAG,EAAI,GAC3FC,EAAQ,GACHna,EAAI,EAAGA,EAAI8Z,EAAOpc,OAAQsC,IAC/Bka,EAAe,CAAE,GAAK,EAAG,QAAU,GAAI,SAAU,EAAM,QAAU,GAAI,EAAI,EAAG,EAAI,EAAG,EAAI,GACvFC,EAAQL,EAAO9Z,GACfka,EAAe,CAAE,GAAMla,EAAG,QAAUma,EAAO,SAAU,EAAM,QAAWP,EAASO,GAAQ,EAAI,EAAG,EAAI,EAAG,EAAI,GACzGF,EAAS7T,KAAK8T,GAGlB9e,IAAM+d,gBAAkBc,EAGpBG,EAA6B,GAC7BC,EAAsB,GACC,GACA,GACvBC,EAA0B,CAAE,GAAK,EAAG,UAAY,GAAI,SAAU,EAAO,QAAU,GAAI,gBAAkB,GAAG,EAAI,EAAG,EAAI,EAAG,EAAI,GAC1HC,EAAqB,GACrBC,EAAS,GAEfpf,IAAM+d,gBAAgBxa,KAAI,SAAC+V,EAAS+F,GAElCL,EAAyB,GACzBA,EAAyBva,EAAEga,QAAQnF,EAAIgG,QAAS,aAChDH,EAAiBR,OAAOC,KAAKI,GAC7BC,EAAkB,GACC,GACA,GACnB,IAAIM,EAAiB,EACjBC,EAAkB,GACtB,GAAIL,EAAe7c,OAAS,EAAG,CAC3Bid,EAAiB,EACjBC,EAAkB,GAClB,IAAK,IAAI5a,EAAE,EAAGA,EAAIua,EAAe7c,OAAQsC,IACrCsa,EAAsB,CAAE,GAAK,EAAG,UAAY,GAAI,SAAU,EAAO,QAAU,GAAI,gBAAkB,GAAIf,WAAW,KAAM,EAAI,EAAG,EAAI,EAAG,EAAI,GACxIiB,EAASD,EAAeva,GAGM,IAF9B4a,EAAkBR,EAAuBI,IAErB9c,OAAcid,EAAiBC,EAAgB,GAAGrB,WAElEqB,EAAgBjc,KAAI,SAACkc,EAAUC,GACL,GAAnBD,EAAKtB,aAAqBoB,EAAiBE,EAAKtB,YAC7B,IAAnBsB,EAAKtB,aAAqBoB,EAAiB,IACxB,GAAnBE,EAAKtB,YAAqC,GAAlBoB,IAAuBA,EAAiB,IAC7C,GAAnBE,EAAKtB,YAAqC,GAAlBoB,IAAuBA,EAAiB,OAM3EL,EAAsB,CAAE,GAAKta,EAAG,UAAYwa,EAAQ,SAAU,EAAO,QAAUJ,EAAuBI,GAAS,gBAAkB,GAAKjB,WAAWoB,EAAiB,EAAI,EAAG,EAAI,EAAG,EAAI,GACpLN,EAAgBjU,KAAKkU,GAEzB5F,EAAIqG,YAAcV,EAGtB,IAAIW,EAAQ,EACRC,EAAQ,EAEZvG,EAAIgG,QAAQ/b,KAAI,SAACuc,EAASC,GAClBD,EAAI3X,KAAQ0X,GAAgB,EACzBD,GAAgB,KAE3BtG,EAAIzW,EAAI+c,EACRtG,EAAItY,EAAI6e,EACRvG,EAAI0G,EAAI1G,EAAIgG,QAAQhd,OAIpBgX,EAAIqG,YAAYpc,KAAI,SAAC0c,EAAUC,GAC7BN,EAAQ,EACRC,EAAQ,EACRI,EAAKX,QAAQ/b,KAAI,SAAC4c,EAAiBC,GAC7BD,EAAYhY,KAAQ0X,GAAgB,EACjCD,GAAgB,KAEzBK,EAAKjf,EAAI6e,EACTI,EAAKpd,EAAI+c,EACTK,EAAKD,EAAIH,EAAQD,QAIjBS,EAAY,GACZC,EAAY,GAChBtgB,IAAM+d,gBAAgBxa,KAAI,SAAC+V,EAAS+F,GAClCgB,EAAQ,GACRC,EAAQ,GACRhH,EAAIqG,YAAYpc,KAAI,SAACgd,EAAYC,GAE7BD,EAAOjB,QAAQ/b,KAAI,SAACuc,EAASC,GACrBD,EAAI3X,KAAQmY,EAAMtV,KAAKuV,GACnBF,EAAMrV,KAAKuV,SAG3BjH,EAAImH,aAAgBhc,EAAEsY,KAAKsD,GAC3B/G,EAAIoH,aAAgBjc,EAAEsY,KAAKuD,GAE3BhH,EAAIqG,YAAYpc,KAAI,SAACgd,EAAYI,GAAwBJ,EAAOta,GAAK0a,KAGrErH,EAAIsH,aAAetH,EAAIqG,eA3GJ,4CAAF,mDAAC,GAmHtBkB,kBAAkB,WAAD,4BAAE,WAAOC,GAAP,SAAA5f,EAAA,sDAEjBlB,IAAM+d,gBAAgBxa,KAAI,SAAC+V,EAAS+F,GACzB,KAALyB,IAAYxH,EAAIqG,YAAYpc,KAAI,SAACgd,EAAYI,GAAwBJ,EAAOta,GAAK0a,KAAmBrH,EAAIsH,aAAetH,EAAIqG,aACtH,KAALmB,GAAWxH,EAAIoH,aAAand,KAAI,SAACwd,EAAaC,GAAyBD,EAAQ9a,GAAK+a,KAC/E,KAALF,GAAWxH,EAAImH,aAAald,KAAI,SAAC0d,EAAaC,GAAoBD,EAAQhb,GAAKib,QALpE,2CAAF,mDAAC,GAWlBC,UAAU,WAAD,4BAAE,WAAOL,GAAP,yBAAA5f,EAAA,sDACLuD,EAAIC,EAAQ,IAEF,EACA,EAGRsa,EAA6B,GAC7BC,EAAsB,GACtBC,EAA0B,CAAC,GAAK,EAAG,UAAY,GAAI,SAAU,EAAO,QAAU,GAAI,gBAAkB,GAAG,EAAI,EAAG,EAAI,EAAG,EAAI,GACzHC,EAAqB,GACrBC,EAAS,GAEbpf,IAAM+d,gBAAgBxa,KAAI,SAAC+V,EAAS+F,GAMlC,GAJAL,EAAyB,GACzBA,EAAyBva,EAAEga,QAAQnF,EAAIqG,YAAa,aACpDR,EAAiBR,OAAOC,KAAKI,GAC7BC,EAAkB,GACdE,EAAe7c,OAAS,EAAG,CAC3B,IAAK,IAAIsC,EAAE,EAAGA,EAAIua,EAAe7c,OAAQsC,IACrCsa,EAAsB,CAAE,GAAK,EAAG,UAAY,GAAI,SAAU,EAAO,QAAU,GAAI,gBAAkB,GAAI,EAAI,EAAG,EAAI,EAAG,EAAI,GACvHE,EAASD,EAAeva,GACxBsa,EAAsB,CAAE,GAAKta,EAAG,UAAYwa,EAAQ,SAAU,EAAO,QAAUJ,EAAuBI,GAAS,gBAAkB,GAAI,EAAI,EAAG,EApB1I,EAoBqJ,EAnBrJ,GAoBFH,EAAgBjU,KAAKkU,GAEhB,MAAL4B,IAAaxH,EAAIqG,YAAcV,GAC1B,KAAL6B,IAAaxH,EAAImH,aAAexB,GAC3B,KAAL6B,IAAaxH,EAAIoH,aAAezB,OA5BnC,2CAAF,mDAAC,GAmCVmC,sBAAsB,WAAD,4BAAE,WAAQC,EAAYC,EAAaC,EAAWxX,GAA5C,mBAAA7I,EAAA,sDAIjBuD,EAAIC,EAAQ,IAJK,KAKbqF,EALa,OAMd,sBANc,OAWd,uBAXc,OAmBd,kBAnBc,OA4Bd,uBA5Bc,QAwCd,sBAxCc,+BAOb/J,IAAM+d,gBAAgBxa,KAAI,SAACie,EAAUC,GAC/BD,EAAKvb,IAAIob,IAAUG,EAAKjZ,SAAWiZ,EAAKjZ,YARjC,mCAYbvI,IAAM+d,gBAAgBxa,KAAI,SAACie,EAAUC,GACnCD,EAAK7B,YAAYpc,KAAI,SAACme,EAAUC,GAC9BD,EAAKnZ,SAAU,QAdN,mCAoBbvI,IAAM+d,gBAAgBxa,KAAI,SAACie,EAAUC,GAC/BD,EAAKvb,IAAIob,GACTG,EAAK7B,YAAYpc,KAAI,SAACme,EAAUC,GAC1BD,EAAKzb,IAAIqb,IAAUI,EAAKnZ,SAAWmZ,EAAKnZ,eAvBvC,oCA6BfvI,IAAM+d,gBAAgBxa,KAAI,SAACie,EAAUI,GAC/BJ,EAAKvb,IAAIob,GACTG,EAAK7B,YAAYpc,KAAI,SAACme,EAAUC,GAC1BD,EAAKzb,IAAIqb,IACTI,EAAKnZ,SAAWmZ,EAAKnZ,QACrBmZ,EAAKG,gBAAkB7hB,IAAM8hB,gCAlC1B,kCA2CPP,EA3CO,OA4CR,MA5CQ,QAgDR,MAhDQ,QAsDR,MAtDQ,gCA6CTvhB,IAAM+hB,WAAU,EAAQ/hB,IAAMgiB,WAAW,EAAQhiB,IAAMiiB,WAAY,EACnEjiB,IAAMse,sBAAsBte,IAAMmZ,UA9CzB,oCAiDTnZ,IAAM+hB,WAAU,EAAO/hB,IAAMgiB,WAAW,EAAOhiB,IAAMiiB,WAAY,EACrD,GACZ5G,EAAQ5W,EAAEqK,OAAO9O,IAAMmZ,UAAU,SAASnY,GAAO,OAAQA,EAAEmH,QAC3DnI,IAAMse,sBAAsBjD,GApDnB,mCAuDO,GAChBrb,IAAM+hB,WAAU,EAAO/hB,IAAMgiB,WAAW,EAAOhiB,IAAMiiB,WAAY,EACjE3B,EAAQ7b,EAAEqK,OAAO9O,IAAMmZ,UAAU,SAASnY,GAAO,OAAOA,EAAEmH,QAC1DnI,IAAMse,sBAAsBgC,GA1DnB,oCA6DTtgB,IAAM+hB,WAAU,EAAQ/hB,IAAMgiB,WAAW,EAAQhiB,IAAMiiB,WAAY,EACnEjiB,IAAMse,sBAAsBte,IAAMmZ,UA9DzB,qGAAF,yDAAC,GAsE1B2I,yBAAyB,GAErBI,+BAA+B,WAAD,4BAAE,WAAOthB,GAAP,SAAAM,EAAA,sDAC9BnB,EAAM,CAAE+hB,yBAA0B,KADJ,2CAAF,mDAAC,GAInCjI,iBAAiB,GACjBsI,sBAAsB,CAAEha,MAAM,EAAOlC,GAAI,EAAGwT,UAAW,GACrD3J,SAAU,GACVgB,SAAU,GACV1K,MAAO,GACP+K,SAAU,GACV/C,QAAS,GACTC,cAAe,GACfvJ,YAAa,GACbsd,SAAU,EACVC,WAAY,GACZ/c,cAAe,CAAEI,SAAU,EAAGF,qBAAsB,GAAI6L,WAAW,EAAMC,SAAU,GACnFgR,cAAe,IAGbxY,2BAA2B,WAAD,4BAAE,WAAOlJ,EAAiB2hB,EAASC,EAAS/Q,GAA1C,eAAAvQ,EAAA,yDAIlBwD,EAAQ,IACK,GAAjB9D,EAAYW,IALU,iBAMtBxB,EAAM,CAAE8Z,iBAAkB7Z,IAAMmiB,wBAChCpiB,EAAM,CAAE8Z,iBAAkBjZ,EAAYuC,OAGpCnD,IAAM6Z,iBAAiBtR,SAAU,EAE7BpH,EAAOnB,IAAM6Z,iBAAiBvU,cAElCtF,IAAM6Z,iBAAiBtU,eAAiBpE,EAAKqE,qBAC7CxF,IAAM6Z,iBAAiBpU,mBAAqB,GAfxB,KAgBXtE,EAAKuE,SAhBM,OAiBb,IAjBa,QAkBb,IAlBa,QAmBb,IAnBa,QAoBb,IApBa,gCAiBV1F,IAAM6Z,iBAAiBpU,mBAAqB,+BAjBlC,oCAkBVzF,IAAM6Z,iBAAiBpU,mBAAqB,+BAlBlC,oCAmBVzF,IAAM6Z,iBAAiBpU,mBAAqB,+BAnBlC,oCAoBVzF,IAAM6Z,iBAAiBpU,mBAAqB,+BApBlC,oCAqBTzF,IAAM6Z,iBAAiBpU,mBAAoB,+BArBlC,oCAwBpBzF,IAAM6Z,iBAAiB4I,cAAgB,GACvCziB,IAAM6Z,iBAAiB6I,mBAAqB,GAC5C1iB,IAAM6Z,iBAAiB/J,SAASvM,KAAI,SAACqO,EAASwM,GAC1C3M,EAAKlO,KAAI,SAACkO,EAAUqB,GACdlB,GAAOH,EAAKxL,KACZjG,IAAM6Z,iBAAiB4I,cAAgBziB,IAAM6Z,iBAAiB4I,cAAgB,kEAAoEhR,EAAKnL,KAAO,IAC9JtG,IAAM6Z,iBAAiB6I,mBAAqB1iB,IAAM6Z,iBAAiB6I,mBAAqBjR,EAAKnL,KAAO,WAI9GtG,IAAM6Z,iBAAiB8I,cAAgB3iB,IAAM6Z,iBAAiB1I,SAAS7O,OAGvEtC,IAAM6Z,iBAAiB+I,SAAU,EACjC5iB,IAAM6Z,iBAAiBgJ,WAAY,EAC/B7iB,IAAM6Z,iBAAiBzT,MAAM9D,OAAQ,GACvCtC,IAAM6Z,iBAAiBzT,MAAM7C,KAAI,SAAC2O,EAAOkF,GACrClF,EAAEG,KAAQH,EAAEG,KAAQ,KACR,MAARH,EAAE5L,MAAuB,IAAT4L,EAAE5L,OAClB4L,EAAE/K,YAAe+K,EAAE5L,KAAKhE,OAAS,EAAM4P,EAAE5L,KAAKc,UAAU,EAAE,GAAK,MAAQ8K,EAAE5L,KACvD,SAAd4L,EAAE6H,aAAuB/Z,IAAM6Z,iBAAiB+I,SAAQ,GAC1C,WAAd1Q,EAAE6H,aAAyB/Z,IAAM6Z,iBAAiBgJ,WAAU,OAK1E7iB,IAAM8hB,yBAAyB9W,KAAMhL,IAAM6Z,kBAE3C7Z,IAAM+d,gBAAgBwE,GAAK5C,YAAY6C,GAAKX,gBAAgB7W,KAAMhL,IAAM6Z,kBAQ1ElY,QAAQC,IAAK,kCAAoC5B,IAAM+d,iBA5DjC,kBA8DjB/d,IAAM6Z,kBA9DW,QAiEtB7Z,IAAM6N,6BAA6B,iCAAkCjN,EAAYW,IAAKX,EAAYY,SAAU,KAAK,8CAjE3F,4CAAF,yDAAC,GAqE/BshB,iBAAkB,CAChB,CAAC7c,GAAG,IAAK8c,MAAM,QAAS3e,QAAO,GAC/B,CAAC6B,GAAG,IAAK8c,MAAM,iCAA+B3e,QAAO,GACrD,CAAC6B,GAAG,IAAK8c,MAAM,YAAa3e,QAAO,IAErC4e,oBAAqB,IAEnBC,uBAAuB,WAAD,4BAAE,WAAQnC,GAAR,SAAA5f,EAAA,sDACtBnB,EAAM,CAAEijB,oBAAqBlC,IAC7B9gB,IAAM8iB,iBAAiBvf,KAAI,SAAC2f,EAAQC,GAC9BD,EAAGjd,IAAM6a,EAAOoC,EAAG9e,QAAS,EACzB8e,EAAG9e,QAAS,KAGrBpE,IAAM+d,gBAAgBxa,KAAI,SAAC+V,EAAS+F,GACvB,KAALyB,IAAYxH,EAAIqG,YAAcrG,EAAIsH,cAC7B,KAALE,IAAYxH,EAAIqG,YAAcrG,EAAImH,cAC7B,KAALK,IAAYxH,EAAIqG,YAAcrG,EAAIoH,iBAVpB,2CAAF,mDAAC,GAkBvB0C,aAAa,WAAD,4BAAE,WAAQtC,GAAR,SAAA5f,EAAA,sDACZS,QAAQC,IAAI,mBADA,2CAAF,mDAAC,OC3DFyhB,EA5YavjB,KAAO,SAACC,EAASC,GAAV,MAAuB,CAExDsjB,4BAA6B,CAAEpjB,UAAU,EAAOC,IAAK,GAAIC,KAAK,GAAKC,QAAQ,iBAAkBC,WAAW,GAAIC,QAAS,EAAGC,SAAS,GAAIC,KAAK,IAGxI8iB,kCAAmC,WAEjCxjB,EAAK,CAAEujB,4BADI,CAAEpjB,UAAU,EAAOC,IAAI,GAAIC,KAAK,GAAIC,QAAQ,iBAAkBC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,GAAIC,KAAK,OAMvH+iB,kCAAkC,WAAD,4BAAE,WAAO5iB,EAAiBC,EAAOC,EAAQ+B,EAAO7B,EAAOC,GAArD,iBAAAC,EAAA,yDAG7BC,EAAO,CAAEjB,SAAUW,EAAGV,IAAI,GAAIC,KAAKyC,EAAGxC,QAAQ,iBAAkBC,WAAWU,EAAGT,QAAQ,EAAGC,SAAS,GAAIC,KAAKQ,QAC9FG,GAAbR,GAAwC,wBAAbA,EAJE,gBAK7BO,EAAKZ,SAAS,EACdY,EAAKX,SAAU,8DANc,0BAQX,kCAAbI,EARwB,iBAS/BO,EAAKX,SAAUK,EACfM,EAAKZ,QAASO,EAViB,2BAa3BgC,EAAOlC,EAAYS,OACvBF,EAAKhB,IAAM2C,EAAK3C,IACM,IAAlBS,EAAYU,MAA8B,MAAlBV,EAAYU,KAfT,iBAgB7BK,QAAQC,IAAI,SACVT,EAAKZ,QAAQK,EAAYU,KAAKC,IAC9BJ,EAAKX,SAAUI,EAAYU,KAAKE,SAlBL,wBAqB3BL,EAAKZ,QAASK,EAAYa,OArBC,KAsBpBb,EAAYa,OAtBQ,OAwBpB,MAxBoB,QAyBpB,MAzBoB,gCAwBdN,EAAKX,SAAU,gBAxBD,oCAyBdW,EAAKX,SAAU,0DAzBD,oCA0BhBW,EAAKX,SAAUI,EAAYc,WA1BX,6BA+BjC3B,EAAK,CAAEujB,4BAA6BniB,IACpCQ,QAAQC,IAAI,mGAAoG5B,IAAMsjB,6BAhCrF,4CAAF,6DAAC,GAmCpCG,WAAY,CACV,CAACxd,GAAG,EAAGsC,SAAQ,EAAOwa,MAAM,gCAC5B,CAAC9c,GAAG,EAAGsC,SAAQ,EAAOwa,MAAM,wEAG1BW,iBAAiB,WAAD,4BAAE,sBAAAxiB,EAAA,sDAEhBlB,IAAMyjB,WAAWlgB,KAAI,SAACogB,EAAQC,GAAmBD,EAAGpb,SAAU,KAF9C,2CAAF,kDAAC,GAMjBsb,iBAAiB,WAAD,4BAAE,WAAQC,GAAR,SAAA5iB,EAAA,sDAEhBlB,IAAMyjB,WAAWlgB,KAAI,SAACogB,EAAQC,GACxBD,EAAG1d,IAAM6d,IACTH,EAAGpb,SAAYob,EAAGpb,YAJR,2CAAF,mDAAC,GASrBwb,8BAA8B,CAC5B,CAAE9d,GAAG,EAAGoB,YAAY,kBAAmBjD,QAAO,EAAMC,UAAS,EAAM2B,SAAQ,GAC3E,CAAEC,GAAG,EAAGoB,YAAY,SAAUjD,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,GACpE,CAAEC,GAAG,EAAGoB,YAAY,SAAUjD,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,GACpE,CAAEC,GAAG,EAAGoB,YAAY,4BAA6BjD,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,GACvF,CAAEC,GAAG,EAAGoB,YAAY,8CAA4CjD,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,GACtG,CAAEC,GAAG,EAAGoB,YAAY,0BAAwBjD,QAAO,EAAOC,UAAS,EAAO2B,SAAQ,IAGpFge,sBAAsB,CACpB,CAAE/d,GAAG,EAAIge,SAAS,EAAIC,0BAA0B,CAAC,IACjD,CAAEje,GAAG,EAAIge,SAAS,EAAIC,0BAA0B,CAAC,IACjD,CAAEje,GAAG,EAAIge,SAAS,EAAIC,0BAA0B,CAAC,IACjD,CAAEje,GAAG,EAAIge,SAAS,EAAIC,0BAA0B,CAAC,IACjD,CAAEje,GAAG,EAAIge,SAAS,GAAIC,0BAA0B,CAAC,IACjD,CAAEje,GAAG,EAAIge,SAAS,EAAIC,0BAA0B,CAAC,IACjD,CAAEje,GAAG,EAAIge,SAAS,EAAIC,0BAA0B,CAAC,EAAE,IACnD,CAAEje,GAAG,EAAIge,SAAS,GAAIC,0BAA0B,CAAC,EAAE,IACnD,CAAEje,GAAG,EAAIge,SAAS,GAAIC,0BAA0B,CAAC,EAAE,IACnD,CAAEje,GAAG,EAAIge,SAAS,GAAIC,0BAA0B,CAAC,EAAE,EAAE,IACrD,CAAEje,GAAG,GAAIge,SAAS,GAAIC,0BAA0B,CAAC,EAAE,KAGrDC,yBAA0B,GAGtBC,mCAAmC,WAAD,4BAAE,WAAOxjB,GAAP,iBAAAM,EAAA,yDAElCS,QAAQC,IAAI,oDAAqDhB,GAG5C,GAAjBA,EAAYW,IALkB,wBAO1B8iB,EAAUzjB,EAAYuC,KACtBmhB,EAAgB,GACpBD,EAAO9gB,KAAI,SAACghB,EAAQC,GAChBD,EAAGhc,SAAU,EACbgc,EAAGE,uBAAwB,EAEvBH,EAAa1P,KAAKC,MAAMD,KAAKE,UAAU9U,IAAM+jB,gCAGf,GAA1BQ,EAAGG,QAAQC,eAA8C,GAA1BJ,EAAGG,QAAQC,eAA8C,IAA1BJ,EAAGG,QAAQC,eAA+C,IAA1BJ,EAAGG,QAAQC,eAA+C,IAA1BJ,EAAGG,QAAQC,eAA+C,IAA1BJ,EAAGG,QAAQC,gBAAsBL,EAAW,GAAGlgB,QAAS,GAE5L,GAA1BmgB,EAAGG,QAAQC,gBAAsBL,EAAW,GAAGlgB,QAAS,GAE9B,GAA1BmgB,EAAGG,QAAQC,gBAAsBL,EAAW,GAAGlgB,QAAS,GAE7B,GAA1BmgB,EAAGG,QAAQC,eAA8C,GAA1BJ,EAAGG,QAAQC,gBAAqBL,EAAW,GAAGlgB,QAAS,GAE5D,GAA1BmgB,EAAGG,QAAQC,eAA8C,IAA1BJ,EAAGG,QAAQC,eAA+C,IAA1BJ,EAAGG,QAAQC,gBAAsBL,EAAW,GAAGlgB,QAAS,GAE9F,IAA1BmgB,EAAGG,QAAQC,eAA+C,IAA1BJ,EAAGG,QAAQC,eAA+C,IAA1BJ,EAAGG,QAAQC,eAA+C,IAA1BJ,EAAGG,QAAQC,gBAC3GL,EAAW,GAAGlgB,QAAS,EACvBmgB,EAAGE,uBAAwB,GAEjCF,EAAGK,YAAcN,EAGbC,EAAGG,QAAQG,aAAaviB,OAAS,GACjCiiB,EAAGG,QAAQG,aAAathB,KAAI,SAACuhB,EAAQC,GACnCD,EAAGxe,KAAOwe,EAAGxe,KAAK1C,cAClBkhB,EAAGE,QAAUF,EAAGE,QAAQphB,iBAIhC2gB,EAAGU,kBAAoBV,EAAGG,QAAQG,aAClCN,EAAGW,wBAA2BX,EAAGU,kBAG/B,IAAI9jB,EAAOojB,EAAGjf,cAGd,OAFAif,EAAGhf,eAAiBpE,EAAKgkB,qBACzBZ,EAAG9e,mBAAqB,GACftE,EAAKuE,UACZ,KAAK,EAAI6e,EAAG9e,mBAAqB,+BAAgC,MACjE,KAAK,EAAI8e,EAAG9e,mBAAqB,+BAAgC,MACjE,KAAK,EAAI8e,EAAG9e,mBAAqB,+BAAgC,MACjE,KAAK,EAAI8e,EAAG9e,mBAAqB,+BAAgC,MACjE,QAAS8e,EAAG9e,mBAAqB,+BAExB,SAAT8e,EAAGje,OAAiBie,EAAGte,GAAG,EAAGse,EAAGje,KAAK,oCAE7CvG,EAAM,CAAEokB,yBAA0BE,IAClC1iB,QAAQC,IAAI,uCAAwC5B,IAAMmkB,0BAzD5B,kBA0DvBnkB,IAAMmkB,0BA1DiB,QA6D9BnkB,IAAMwjB,kCAAkC,iCAAkC5iB,EAAYW,IAAKX,EAAYY,SAAU,KAAK,2DA7DxF,4CAAF,mDAAC,GAmEnC4jB,+BAA+B,WAAD,4BAAE,WAAQnf,EAAQof,EAAWC,EAAYvb,GAAvC,SAAA7I,EAAA,2DAGtB6I,EAHsB,OAIvB,uCAJuB,OAmBvB,sBAnBuB,OA4CvB,0BA5CuB,OAuDvB,iBAvDuB,QAyEvB,wBAzEuB,+BAKtB/J,IAAMmkB,yBAAyB5gB,KAAI,SAACghB,EAAQC,GACxB,IAAD,EAAbD,EAAGte,IAAMA,IACT,UAAAse,EAAGK,mBAAH,SAAgBrhB,KAAI,SAAC4F,EAAUqB,GACzBrB,EAAKlD,IAAMof,IACXlc,EAAK/E,QAAS,EAEdmgB,EAAGE,uBAAwB,UAXjB,mCAoBtBzkB,IAAMmkB,yBAAyB5gB,KAAI,SAACghB,EAAQC,GACxB,IAAD,EAAbD,EAAGte,IAAMA,IACT,UAAAse,EAAGK,mBAAH,SAAgBrhB,KAAI,SAAC4F,EAAUqB,GACzBrB,EAAKlD,IAAMof,IACXlc,EAAK/E,QAAU+E,EAAK/E,OACL,GAAX+E,EAAKlD,IAAWkD,EAAK/E,SACrBmgB,EAAGK,YAAY,GAAGxgB,QAAS,EAC3BmgB,EAAGK,YAAY,GAAGxgB,QAAS,GAEhB,GAAX+E,EAAKlD,IAAWkD,EAAK/E,SAAUmgB,EAAGK,YAAY,GAAGxgB,QAAS,GAC/C,GAAX+E,EAAKlD,IAAWkD,EAAK/E,SACrBmgB,EAAGK,YAAY,GAAGxgB,QAAS,EAC3BmgB,EAAGE,uBAAwB,GAEhB,GAAXtb,EAAKlD,IAAwB,GAAbkD,EAAK/E,SAErBmgB,EAAGE,uBAAwB,WApCrB,mCA6CtBc,MAAM,YAAYF,GAClB1jB,QAAQC,IAAI,2BAA2B0jB,GACvCtlB,IAAMmkB,yBAAyB5gB,KAAI,SAACghB,EAAQC,GACtCD,EAAGte,IAAMA,IACTse,EAAGK,YAAcU,EAEjBf,EAAGE,sBAAwBY,MAnDX,oCAyDd,GAAJpf,EACAjG,IAAMmkB,yBAAyB5gB,KAAI,SAACghB,EAAQC,GAEtCD,EAAGU,kBAAoBK,KAI7BtlB,IAAMmkB,yBAAyB5gB,KAAI,SAACghB,EAAQC,GACtCD,EAAGte,IAAMA,IACTse,EAAGU,kBAAoBK,MAlEX,oCA2EtBtlB,IAAMmkB,yBAAyB5gB,KAAI,SAACghB,EAAQC,GACpCD,EAAGte,IAAMA,IACTse,EAAGG,QAAQG,aAAeS,EAC1Bf,EAAGU,kBAAoBK,MA9ET,yEAAF,yDAAC,GAsF/BE,8BAA8B,WAAD,4BAAE,WAAQvf,EAAQwf,EAAWC,EAAuBC,GAAlD,SAAAzkB,EAAA,sDAG7BlB,IAAMmkB,yBAAyB5gB,KAAI,SAACghB,EAAQC,GACtCD,EAAGte,IAAMA,IACTse,EAAGK,YAAcc,EACjBnB,EAAGU,kBAAoBU,EACvBpB,EAAGE,sBAAwBgB,MAPJ,2CAAF,yDAAC,GAY9BG,oCAAoC,WAAD,4BAAE,WAAQ3f,GAAR,SAAA/E,EAAA,sDACnCS,QAAQkkB,QACRlkB,QAAQC,IAAI,0CAA2CqE,GAEvDjG,IAAM8lB,4BAA4BviB,KAAI,SAACwiB,EAAQC,GACzCD,EAAG9f,IAAMA,IACXtE,QAAQC,IAAI,OAAQmkB,EAAGE,gBACrBF,EAAGG,WAAaH,EAAGE,eACnBF,EAAGI,OAASJ,EAAGK,aACfL,EAAGM,UAAYN,EAAGO,kBAIxB3kB,QAAQC,IAAI,mCAAoC5B,IAAM8lB,6BAbnB,2CAAF,mDAAC,GAgBxCS,yBAAyB,GAIrBC,+BAA+B,WAAD,4BAAE,WAAO5lB,GAAP,SAAAM,EAAA,yDAER,GAAjBN,EAAYW,IAFa,uBAG1BxB,EAAK,CAAEwmB,yBAA0B3lB,IAHP,kBAKnBZ,IAAMumB,0BALa,OAQ3BvmB,IAAMwjB,kCAAkC,iCAAkC5iB,EAAYW,IAAKX,EAAYY,SAAU,KAAK,uDAR3F,2CAAF,mDAAC,GAYnCskB,4BAA6B,GAIzBW,6CAA6C,WAAD,4BAAE,WAAO7lB,GAAP,eAAAM,EAAA,yDAGvB,GAAjBN,EAAYW,IAH4B,uBAItCmlB,EAAU9lB,EAAYuC,KACN,GACpBujB,EAAOnjB,KAAI,SAACwiB,EAAQC,GAChBD,EAAGxd,SAAU,EAEX,IAAIpH,EAAO4kB,EAAGzgB,cAGd,OAFAygB,EAAGxgB,eAAiBpE,EAAKgkB,qBACzBY,EAAGtgB,mBAAqB,GACftE,EAAKuE,UACZ,KAAK,EAAIqgB,EAAGtgB,mBAAqB,+BAAgC,MACjE,KAAK,EAAIsgB,EAAGtgB,mBAAqB,+BAAgC,MACjE,KAAK,EAAIsgB,EAAGtgB,mBAAqB,+BAAgC,MACjE,KAAK,EAAIsgB,EAAGtgB,mBAAqB,+BAAgC,MACjE,QAASsgB,EAAGtgB,mBAAqB,+BAI/BsgB,EAAGG,WAAW5jB,OAAS,GAEvByjB,EAAGG,WAAW3iB,KAAI,SAACuhB,EAAQC,GACzBD,EAAGxe,KAAOwe,EAAGxe,KAAK1C,cAClBkhB,EAAGE,QAAUF,EAAGE,QAAQphB,iBAI9BmiB,EAAGE,eAAiBrR,KAAKC,MAAMD,KAAKE,UAAUiR,EAAGG,aAE7CH,EAAGI,OAAO7jB,OAAS,GACnByjB,EAAGI,OAAO5iB,KAAI,SAACuhB,EAAQC,GACrBD,EAAGxe,KAAOwe,EAAGxe,KAAK1C,cAClBkhB,EAAGE,QAAUF,EAAGE,QAAQphB,iBAG9BmiB,EAAGK,aAAgBxR,KAAKC,MAAMD,KAAKE,UAAUiR,EAAGI,SAE5CJ,EAAGM,UAAU/jB,OAAS,GACtByjB,EAAGM,UAAU9iB,KAAI,SAACuhB,EAAQC,GACxBD,EAAGxe,KAAOwe,EAAGxe,KAAK1C,cAClBkhB,EAAGE,QAAUF,EAAGE,QAAQphB,iBAG9BmiB,EAAGO,cAAiB1R,KAAKC,MAAMD,KAAKE,UAAUiR,EAAGM,YAGtC,SAATN,EAAGzf,OAAiByf,EAAG9f,GAAG,EAAG8f,EAAGzf,KAAK,oCAE7CvG,EAAM,CAAE+lB,4BAA6BY,IACrC/kB,QAAQC,IAAI,mCAAoC5B,IAAM8lB,6BAnDZ,kBAoDnC9lB,IAAM8lB,6BApD6B,OAuDxC9lB,IAAMwjB,kCAAkC,iCAAkC5iB,EAAYW,IAAKX,EAAYY,SAAU,KAAK,qEAvD9E,4CAAF,mDAAC,GA2D7CmlB,kCAAkC,WAAD,4BAAE,WAAQ1gB,EAAQqf,EAAYvb,GAA5B,SAAA7I,EAAA,2DAEzB6I,EAFyB,OAG1B,iBAH0B,6BAIjB,GAAJ9D,EACAjG,IAAM8lB,4BAA4BviB,KAAI,SAACwiB,EAAQvB,GAC3CuB,EAAGG,WAAaZ,EAAOY,WACvBH,EAAGI,OAASb,EAAOa,OACnBJ,EAAGM,UAAYf,EAAOe,aAI1BrmB,IAAM8lB,4BAA4BviB,KAAI,SAACwiB,EAAQvB,GACvCuB,EAAG9f,IAAMA,IACT8f,EAAGG,WAAaZ,EAAOY,WACvBH,EAAGI,OAASb,EAAOa,OACnBJ,EAAGM,UAAYf,EAAOe,cAhBT,sEAAF,uDAAC,GAyBtCO,mCAAmC,GAG/BC,yCAAyC,WAAD,4BAAE,WAAOjmB,GAAP,SAAAM,EAAA,yDAElB,GAAjBN,EAAYW,IAFuB,uBAGpCxB,EAAK,CAAE6mB,mCAAoChmB,IAHP,kBAK7BZ,IAAM4mB,oCALuB,OAQpC5mB,IAAMwjB,kCAAkC,iCAAkC5iB,EAAYW,IAAKX,EAAYY,SAAU,KAAK,iEARlF,2CAAF,mDAAC,OCnQhCslB,EAnIGhnB,KAAQ,SAACC,EAAKC,GAAN,MAAmB,CAGzC8mB,UAAU,CACN,CAAE7gB,GAAI,EAAG8gB,KAAK,IAAMC,OAAQ,IAAMC,aAAa,EAAOC,KAAK,YAAaC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,IAC3F,CAAElhB,GAAI,EAAG8gB,KAAK,KAAMC,OAAQ,KAAMC,aAAa,EAAOC,KAAK,yBAA0BC,UAAU,CAAC,IAChG,CAAElhB,GAAI,EAAG8gB,KAAK,KAAMC,OAAQ,KAAMC,aAAa,EAAOC,KAAK,2BAA0BC,UAAU,CAAC,IAChG,CAAElhB,GAAI,EAAG8gB,KAAK,KAAMC,OAAQ,KAAMC,aAAa,EAAOC,KAAK,qBAAsBC,UAAU,CAAC,EAAE,EAAE,IAChG,CAAElhB,GAAI,EAAG8gB,KAAK,IAAMC,OAAQ,IAAMC,aAAa,EAAOC,KAAK,mBAAiBC,UAAU,CAAC,KAI3FC,cAAe,GAGfC,kBAAmB,GAEnBC,oBAAoB,WAAD,4BAAE,WAAOC,GAAP,6BAAArmB,EAAA,sDAEnBS,QAAQkkB,QACRlkB,QAAQC,IAAI,yCAA0C2lB,GAElDC,EAAQxnB,IAAM8mB,UACdW,EAAS,GAEPC,EAAW,CAAEC,IAAI,EAAG1hB,GAAIuhB,EAAM,GAAGvhB,GAAI8gB,KAAMS,EAAM,GAAGT,KAAMG,KAAMM,EAAM,GAAGN,KAAM9iB,QAAO,EAAO4iB,OAAOQ,EAAM,GAAGR,QACjHS,EAASzc,KAAK0c,GAGI,GAAhBH,EAAMjlB,QAA0B,GAAVilB,EAAM,IAAmB,GAAVA,EAAM,IAKrCK,GAAO,EACPC,GAAO,EACPC,GAAO,EACXP,EAAMhkB,KAAI,SAACwkB,EAAOjgB,GACd,IAAI4C,EAAM,GAEV,OADAA,EAAK,CAAEid,IAAII,EAAG9hB,GAAIuhB,EAAMO,GAAG9hB,GAAI8gB,KAAKS,EAAMO,GAAGhB,KAAMG,KAAKM,EAAMO,GAAGb,KAAM9iB,QAAO,EAAO4iB,OAAOQ,EAAMO,GAAGf,QAC9Fe,GACH,KAAK,EAAGH,GAAK,EAAO,MACpB,KAAK,EAAGC,GAAK,EAAO,MACpB,KAAK,EAAGC,GAAK,EAEL,GAARpd,EAAEzE,KACQ,GAANyE,EAAEzE,KACFyE,EAAEtG,QAAS,EACXrE,EAAI,CAAEsnB,kBAAmB,QAEnB,GAAN3c,EAAEzE,IAAe,GAAN2hB,IACXld,EAAEtG,QAAS,EACXrE,EAAI,CAAEsnB,kBAAmB,QAEnB,GAAN3c,EAAEzE,IAAgB,GAAN2hB,GAAqB,GAANC,IAC3Bnd,EAAEtG,QAAS,EACXrE,EAAI,CAAEsnB,kBAAmB,QAE7BI,EAASzc,KAAKN,OAItB/I,QAAQC,IAAI,WAAYgmB,EAAM,OAAQC,EAAM,OAAQC,GAExC,GAARA,IACIF,GAAQC,KACRH,EAAW,CAAEC,IAAI,EAAG1hB,GAAIuhB,EAAM,GAAGvhB,GAAI8gB,KAAMS,EAAM,GAAGT,KAAMG,KAAMM,EAAM,GAAGN,KAAM9iB,QAAO,EAAO4iB,OAAOQ,EAAM,GAAGR,QACjHS,EAASzc,KAAK0c,IAIdE,IACGF,EAAW,CAAEC,IAAI,EAAG1hB,GAAIuhB,EAAM,GAAGvhB,GAAI8gB,KAAMS,EAAM,GAAGT,KAAMG,KAAMM,EAAM,GAAGN,KAAM9iB,QAAO,EAAO4iB,OAAOQ,EAAM,GAAGR,QACjHS,EAASzc,KAAK0c,MA3CjBD,EAAS,GAAGrjB,QAAS,EACrBrE,EAAI,CAAEsnB,kBAAmB,OA8C/BtnB,EAAI,CAAEqnB,cAAeK,IAIrB9lB,QAAQkkB,QAhEW,2CAAF,mDAAC,GAmEpBmC,WAAW,WAAD,4BAAE,WAAOC,GAAP,eAAA/mB,EAAA,uDAIJsmB,EAAQxnB,IAAMonB,eAER9kB,OAAS,GACbklB,EAAMjkB,KAAI,SAACtC,EAAO6G,GAEd7G,EAAEmD,QAAS,EACP6jB,EAAQ9kB,KAAK8C,IAAMhF,EAAEgF,KACrBhF,EAAEmD,QAAS,EACXrE,EAAI,CAAEsnB,kBAAmBpmB,EAAE+lB,aAIzCjnB,EAAI,CAAEqnB,cAAeI,IAhBb,2CAAF,mDAAC,GAsBXU,kBAAkB,WAAD,4BAAE,WAAOD,EAAaE,GAApB,eAAAjnB,EAAA,uDAGXsmB,EAAQxnB,IAAM8mB,WACZvjB,KAAI,SAACtC,EAAOmnB,GACVnnB,EAAE+lB,QAAUiB,IACZhnB,EAAEgmB,YAAckB,MAExBpoB,EAAI,CAAE+mB,UAAWU,IARF,2CAAF,qDAAC,GAYlBa,iBAAiB,WAAD,4BAAE,4BAAAnnB,EAAA,uDAEVsmB,EAAQxnB,IAAM8mB,WACZvjB,KAAI,SAACtC,EAAOmnB,GACdnnB,EAAEgmB,aAAc,KAEpBlnB,EAAI,CAAE+mB,UAAWU,IANH,2CAAF,kDAAC,O,OCpFJ,SAASc,EAAgBC,GAEpC,IAAQ7nB,EAAoCb,GAAkB,SAAC2oB,GAAD,MAAgB,CAAE9nB,gCAAiC8nB,EAAM9nB,oCAA/GA,gCACA0L,EAAqCF,GAAmB,SAACsc,GAAD,MAAgB,CAAEpc,iCAAkCoc,EAAMpc,qCAAlHA,iCACAzJ,EAA6BF,GAAW,SAAC+lB,GAAD,MAAgB,CAAE7lB,yBAA0B6lB,EAAM7lB,6BAA1FA,yBACAqB,EAAgCF,GAAc,SAAC0kB,GAAD,MAAgB,CAAExkB,4BAA6BwkB,EAAMxkB,gCAAnGA,4BACAwD,EAAiCF,GAAe,SAACkhB,GAAD,MAAgB,CAAEhhB,6BAA8BghB,EAAMhhB,iCAAtGA,6BAEAgQ,GADiC9J,GAAe,SAAC8a,GAAD,MAAgB,CAAE5a,6BAA8B4a,EAAM5a,iCAAtGA,6BACkC0J,GAAgB,SAACkR,GAAD,MAAgB,CAAEhR,8BAA+BgR,EAAMhR,kCAAzGA,+BACAiB,EAA6BF,GAAW,SAACiQ,GAAD,MAAgB,CAAE/P,yBAA0B+P,EAAM/P,6BAA1FA,yBACAQ,EAAgCF,GAAc,SAACyP,GAAD,MAAgB,CAAEvP,4BAA6BuP,EAAMvP,gCAAnGA,4BACA4E,EAAiCF,GAAe,SAAC6K,GAAD,MAAgB,CAAE3K,6BAA8B2K,EAAM3K,iCAAtGA,6BACA0F,EAAsCF,GAAoB,SAACmF,GAAD,MAAgB,CAAEjF,kCAAmCiF,EAAMjF,sCAArHA,kCAGA2E,EAAuBpB,GAAU,SAAC0B,GAAD,MAAgB,CAAGN,kBAAmBM,EAAMN,sBAA7EA,kBAGHO,EAAe,CAAEvoB,UAAS,EAAOC,IAAI,GAAIuoB,QAAQ,GAAIroB,QAAQ,GAAIC,WAAW,GAAIC,QAAQ,EAAGC,SAAS,IAGxG,EAA4BmoB,mBAASF,GAArC,mBAAOG,EAAP,KAAeC,EAAf,KAYD,OATAC,qBAAU,WAERC,OAAOC,SAAS,CAACC,IAAI,IACrBJ,EAAUN,EAAMW,YAGhB,IAIA,mCACE,qBAAKC,UAAU,sBAAf,SAEE,eAAC,IAAD,CAEQC,MAAM,OACNC,aAAW,EACXC,QAAU,WACR,IAAInoB,EAAOonB,EAAMW,SAASzoB,KAE1B,OADAynB,EAAkB/mB,GAAM,GACjBonB,EAAMloB,SACX,IAAK,eAAgBK,IAAmC,MACxD,IAAK,WAAYuY,IAAgC,MACjD,IAAK,WAAYjV,IAAgC,MACjD,IAAK,iBAAkBuf,IAAsC,MAC7D,IAAK,YAAa1F,IAAiC,MACnD,IAAK,YAAazR,IAAqC,MACvD,IAAK,QAASqM,IAA6B,MAC3C,IAAK,gBAAiBrM,IAAqC,MAC3D,IAAK,YAAa5E,IAAgC,MAClD,IAAK,aAAcgQ,IAAkC,MACrD,IAAK,QAAS7U,IAEhBkmB,EAAUJ,IApBpB,UAuB2B,KAAvBF,EAAMW,SAASzoB,KACZ,qCACA,6BAAI,SAAS,KAAE,uBAAK,IAAC,uBACrB,8BAAG,eAAa8nB,EAAMW,SAAS1oB,eAG/B,qCACC,6BAAI,kBAAkB,KAAE,uBAAK,IAAC,uBAC9B,wBAAO2oB,UAAU,yBAAjB,UACI,+BAAI,IAAC,oBAAIA,UAAU,qBAAd,SAAmC,YACnC,oBAAIA,UAAU,oBAAd,SAAmCP,EAAOroB,aAE/C,+BAAI,IAAC,oBAAI4oB,UAAU,qBAAd,SAAmC,qBACnC,oBAAIA,UAAU,qBAAd,SAAoCP,EAAOpoB,cAEhD,+BAAI,IAAC,oBAAI2oB,UAAU,qBAAd,SAAmC,UACnC,oBAAIA,UAAU,qBAAd,SAAoCP,EAAOzoB,SAShD,+BAAI,IAAC,oBAAIgpB,UAAU,oBAAd,SAAkC,kBAClC,oBAAIA,UAAU,oBAAd,SAAmCP,EAAOvoB,aAE/C,+BAAI,IAAC,oBAAI8oB,UAAU,oBAAd,SAAkC,iBAClC,oBAAIA,UAAU,oBAAd,SAAmCP,EAAOtoB,sBAKzD,8B,mBCzGG,SAASipB,IAMpB,IAAIC,EAAMC,EAAaF,aAYrB,OACE,mCACE,qBAAKJ,UAAU,aAAf,SACI,sBAAKA,UAAU,IAAf,UACI,oBAAIA,UAAU,OAAd,SAEI,qBAAKA,UAAU,iBAEnB,mBAAGA,UAAU,eAAb,SACA,qBAAKA,UAAU,eAAf,SACI,sBAAKA,UAAU,cAAf,UACI,uBAAMA,UAAU,iBAAhB,UAAiC,IAAEK,EAAI,GAAGE,KAAK,WAC/C,uBAAMP,UAAU,iBAAhB,UAAiC,IAAEK,EAAI,GAAGE,KAAK,qB,qCC9CnEC,EAAU1X,qDAyBH2X,EANa,CACxBC,UAjBe,uCAAG,WAAOC,GAAP,SAAA5oB,EAAA,sEAED6oB,IAAMC,KAAKL,EAAU,OAAQG,EACtC,CAACG,QAAS,CAAE,eAAgB,eAHlB,mFAAH,sDAkBfC,cAZmB,uCAAE,WAAOJ,GAAP,SAAA5oB,EAAA,sEACJ6oB,IAAMC,KAAKL,EAAU,WAAYG,EAC1C,CAACG,QAAS,CAAE,eAAgB,eAFf,mFAAF,uDCMN,SAASE,IAGpB,MACEtqB,GAAkB,SAAC2oB,GAAD,MAAgB,CAChCtmB,gBAAiBsmB,EAAMtmB,gBACvBvB,gCAAiC6nB,EAAM7nB,gCACvCV,0BAA2BuoB,EAAMvoB,8BAJ9BiC,EAAP,EAAOA,gBAAiBvB,EAAxB,EAAwBA,gCAQpB6oB,GARJ,EAAyDvpB,0BAQ/CwpB,EAAaW,eAGjBC,EAAQpY,oBAOd,EAA0C0W,mBAAuE,iBAAjH,mBAAO2B,EAAP,KAAsBC,EAAtB,KAEIC,EAAc,YACdC,EAAgB,cAEhBC,EAAUC,cAId,EAA8BhC,mBAAyB,iBAAf2B,EAAkCE,EAAcC,GAAxF,mBAAOG,EAAP,KAAgBC,EAAhB,KACA,EAAgClC,mBAAyB,mBAAf2B,EAAoCE,EAAcC,GAA5F,mBAAiBK,GAAjB,WAKMC,EAAqB,SAACC,GACxB,OAAOA,GACL,IAAK,gBACHH,EAAWL,GACXM,EAAYL,GACd,MACA,IAAK,kBACHI,EAAWJ,GACXK,EAAYN,GAGhBD,EAAiBS,IAIrB,OACE,mCACE,qBAAK7B,UAAU,aAAf,SACE,sBAAKA,UAAU,wBAAf,UAEE,qBAAKA,UAAWkB,EAASY,cAAcC,SAAS,YAAc,6CAA6C,OAAQC,wBAAyB,CAACC,OAAQ5B,EAAI,GAAGE,QAC5J,qBAAKP,UAAU,eACf,cAAC,IAAD,CAAQkC,cAAe,CACjBC,QAAQ,GACRC,SAAS,IAETC,SAAQ,uCAAG,WAAMC,GAAN,iBAAAvqB,EAAA,sDAWHoqB,EAASG,EAAOH,QAEH,GAEjBI,EAAS,CAAC,KAAOD,EAAOH,QAAQ,KAAOG,EAAOF,UAG3B,mBAAjBjB,EACIqB,EAAoB9B,UAAU6B,GAC7BE,MAAK,SAACC,GACH,GAAsB,MAAlBA,EAASpqB,OAAc,CACzBS,EAAgB2pB,EAAUP,GAMHO,EAASvqB,KAAKc,MAUnCsoB,EAAQ1f,KAAK,kBAIpB8gB,OAAM,SAACC,GACJ,IAAI3rB,EAAO,WAAaqrB,EAAOH,QAApB,kBAGX3pB,QAAQC,IAAK,oBAAqBmqB,GAClCprB,EAAgCorB,EAAGF,UAAU,EAAM,GAAIzrB,EAAM,gBAAiB,QAGlFurB,EAAoBzB,cAAcwB,GACjCE,MAAK,SAACC,GACH,GAAsB,MAAlBA,EAASpqB,OAAc,CACzBS,EAAgB2pB,EAAUP,GAMHO,EAASvqB,KAAKc,MAUnCsoB,EAAQ1f,KAAK,kBAGpB8gB,OAAM,SAACC,GACJ,IAAI3rB,EAAO,WAAaqrB,EAAOH,QAApB,kBAGX3pB,QAAQC,IAAK,oBAAqBmqB,GAClCprB,EAAgCorB,EAAGF,UAAU,EAAM,GAAIzrB,EAAM,gBAAiB,QA7EjF,2CAAH,sDAmFR4rB,iBAAkBC,IAAW,CAC3BX,QAASW,MAAaC,SAAS,mBAC/BX,SAAUU,MAAaC,SAAS,qBAzFxC,SA4FE,cAAC,IAAD,UACE,sBAAK/C,UAAU,cAAf,UAEM,sBAAKljB,GAAG,aAAR,WAEIkmB,EACF,qBAAIhD,UAAU,OAAd,UACE,oBAAIA,UAAWyB,EAAf,SACE,oBAAGwB,KAAK,IAAIC,QAAS,kBAAItB,EAAqB,kBAA9C,UAAiE,IAAEvB,EAAI,GAAGE,KAAK,WAG/EyC,QAeN,uBAAOG,QAAQ,UAAf,SAA0B9C,EAAI,GAAGE,OACjC,cAAC,IAAD,CAAO6C,KAAK,OAAOjmB,KAAK,UAAW6iB,UAAU,gCAAgCqD,YAAahD,EAAI,GAAGE,OACjG,cAAC,IAAD,CAAcpjB,KAAK,UAAnB,SACK,SAAAmmB,GAAO,OACN,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,WAOzC,uBAAOH,QAAQ,WAAf,SAA2B9C,EAAI,GAAGE,OAClC,cAAC,IAAD,CAAO6C,KAAK,WAAWjmB,KAAK,WAAW6iB,UAAU,gCAAgCqD,YAAahD,EAAI,GAAGE,OACrG,cAAC,IAAD,CAAcpjB,KAAK,WAAnB,SAA+B,SAAAmmB,GAAO,OAClC,sBAAMtD,UAAU,GAAhB,SAAmB,qBAAKA,UAAU,+BAAf,SACf,qBAAKA,UAAU,eAAf,SAA+BsD,WAIvC,wBAAQF,KAAM,SAASpD,UAAU,sBAAjC,SAAuD,uBAGvD,qBAAKA,UAAU,OAAOgC,wBAAyB,CAACC,OAAQ5B,EAAI,GAAGE,QAI/D,qBAAKP,UAAU,gBACf,4BAAG,mBAAGuD,OAAO,SAASN,KA3LxBna,qEA2LwCkX,UAAU,uBAA7C,SAAoE,uDC3M9E,SAASgB,IAEpB,IAAQlqB,EACJJ,GAAkB,SAAC2oB,GAAD,MAAgB,CAChCvoB,0BAA2BuoB,EAAMvoB,8BAF/BA,0BA+BR,OAZG8oB,OAAO4D,SAASP,KAAK1oB,QAAQ,eAAe,QAA6BtC,GAAxBwrB,eAAetB,UACjEuB,aAAaC,WAAW,WACxBF,eAAeE,WAAW,WAC1BF,eAAe/G,QACfgH,aAAahH,SAEhBkD,OAAOgE,eAAiB,YAC8B,GAA7ChE,OAAO4D,SAASP,KAAK1oB,QAAQ,eAA2C,IAAtBqlB,OAAO4D,SAASP,MACpES,aAAahH,SAKf,qCACE,sBAAKsD,UAAU,eAAf,UACE,sBAAKA,UAAU,YAAf,UAA2B,KAAE,cAACI,EAAD,OAC7B,sBAAKJ,UAAU,cAAf,UAA6B,IAAC,cAAC,EAAD,UAG9BlpB,EAA0BC,UACtB,cAACooB,EAAD,CAAoBjoB,QAAQ,eAAgB6oB,SAAUjpB,O,mEClEzD,SAAS+sB,IAaxB,IAAMC,EAAkB,kBACpB,cAAC,IAAD,CAAcV,KAAM,OAAQnD,MAAO,UAAW8D,OAAQ,IAAKC,MAAO,OAErE,OACG,qBAAKhE,UAAU,aAAf,SACI,qBAAKA,UAAU,gBAAf,SAA+B,cAAC8D,EAAD,Q,yDCpBxB,w1RCAA,guH,iBCoBE,SAASG,GAAW7E,GAIjC,MACEzB,GAAU,SAAC0B,GAAD,MAAgB,CACxBpB,cAAeoB,EAAMpB,cACrBY,WAAYQ,EAAMR,eAHdZ,EAAR,EAAQA,cAAeY,EAAvB,EAAuBA,WASnBvnB,EAAO2mB,EAOX,OACE,mCACE,sBAAKnhB,GAAG,OAAR,UAEe,GAAZsiB,EAAM/W,KACF,qCAAE,uBACD,cAAC6b,EAAA,EAAD,CAAQC,OAAO,KAAKnE,UAAU,+BAA+BoE,GAAG,QAAhE,SACE,eAACC,GAAA,EAAD,WACE,cAACH,EAAA,EAAOI,OAAR,CAAe,gBAAc,qBAC7B,cAACJ,EAAA,EAAOK,SAAR,CAAiBznB,GAAG,mBAApB,SACE,cAAC0nB,EAAA,EAAD,CAAKxE,UAAU,UAAf,SACG1oB,EAAK8C,KAAI,SAACJ,GAAD,OACR,mCACkB,GAAfA,EAAKiB,OACA,cAACupB,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIrE,EAAW,CAAC7kB,UAAQgmB,UAAU,SAArD,SAA+DhmB,EAAK+jB,OACpE,cAACyG,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIrE,EAAW,CAAC7kB,UAAnC,SAA6CA,EAAK+jB,wBASrE,6BAIQ,GAAZqB,EAAM/W,KACF,qCACC,qBAAK2X,UAAU,SAAf,SACC1oB,EAAK8C,KAAI,SAACJ,GAAD,OACR,4BAAkBA,EAAK+jB,MAAf/jB,EAAK8C,SAGf,cAAConB,EAAA,EAAD,CAAQE,GAAG,QAAQD,OAAO,KAA1B,SACE,eAACE,GAAA,EAAD,CAAWK,OAAK,EAAhB,UACE,cAACR,EAAA,EAAOS,MAAR,CAAc1B,KAAK,IAAnB,SAAwB7D,EAAMwF,MAC9B,cAACV,EAAA,EAAOI,OAAR,CAAe,gBAAc,iBAC7B,cAACJ,EAAA,EAAOK,SAAR,CAAiBznB,GAAG,eAApB,SACE,cAAC0nB,EAAA,EAAD,CACExE,UAAU,uBACV6E,MAAO,CAAEC,UAAW,SACpBC,cAAY,EAHd,SAKGztB,EAAK8C,KAAI,SAACJ,GAAD,OACR,eAACwqB,EAAA,EAAIC,KAAL,CAAUxB,KAAK,WAAf,UAA2BjpB,EAAK+jB,KAAhC,sBAOZ,kC,kDCrFRyC,GAAU1X,8CAsBDkc,GALM,CACjBC,iBAdsB,uCAAG,WAAOC,GAAP,SAAAntB,EAAA,sEAER6oB,IAAMC,KAAKL,GAAU,eAAgB,eAC9C,CAAEM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHzC,mFAAH,sDAetBC,oBAR0B,uCAAI,WAAOD,EAAWjuB,GAAlB,SAAAc,EAAA,sEAEb6oB,IAAMC,KAAKL,GAAU,iBAAkBvpB,EAChD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHnC,mFAAJ,yD,UCmBb,SAASE,GAAchG,GAGlC,MAEE9lB,GAAW,SAAC+lB,GAAD,MAAiB,CAC1BxlB,uBAAwBwlB,EAAMxlB,uBAC9BD,iBAAkBylB,EAAMzlB,iBACxByrB,yBAA0BhG,EAAMgG,6BAL5BxrB,EAAR,EAAQA,uBAAwBD,EAAhC,EAAgCA,iBACxByrB,EADR,EACQA,yBA6BV,OAhBE1F,qBAAU,WAER2F,GACGL,iBAAiB7F,EAAMxmB,YACrB6pB,MAAK,SAACC,GACkB,KAAnBA,EAASpqB,QACTuB,EAAuB6oB,MAI5BC,OAAM,SAACC,GACNpqB,QAAQC,IAAI,qCAAsCmqB,GAClDyC,EAAyBzC,EAAGF,UAAU,EAAM,GAAI,GAAI,gBAAgB,UAEzE,IAGH,qCAEE,sBAAK1C,UAAU,YAAYljB,GAAG,UAAU+nB,MAAO,CAACU,OAAO,QAAvD,UACE,qBAAKvF,UAAU,MAAf,SACE,qBAAKA,UAAU,eAAf,SAA8B,qBAAKwF,IC5EhC,qjKD4E8CC,IAAI,UAAUzF,UAAU,oBACrE,uBACN,qBAAKA,UAAU,MAAf,SACE,qBAAKA,UAAU,+CAAf,SAA+DpmB,EAAiBuD,SAElF,qBAAK6iB,UAAU,MAAf,SACE,sBAAKA,UAAU,cAAf,cAA+B0F,EAAUC,iBAAiBC,UAAU,GAAGrF,UACnE,uBACN,sBAAKP,UAAU,MAAf,UACE,sBAAKA,UAAU,SAAf,UAAwB,cAAC,KAAD,CACd6F,KAAMC,KACN9F,UAAU,aACV+F,SAAU,KAHpB,OAIiBL,EAAUC,iBAAiBC,UAAU,GAAGrF,QACzD,sBAAKP,UAAU,mBAAf,cAAoCpmB,EAAiBU,SACrD,qBAAK0lB,UAAU,aACX,uBACN,sBAAKA,UAAU,MAAf,UACE,sBAAKA,UAAU,QAAf,UAAuB,cAAC,KAAD,CACb6F,KAAMG,KACNC,SAAU,GACVjG,UAAU,aACV+F,SAAU,KAJpB,OAMeL,EAAUC,iBAAiBC,UAAU,GAAGrF,KANvD,UAOA,sBAAKP,UAAU,QAAf,cAAwB,uBAAMA,UAAU,sBAAhB,UACb,IACApmB,EAAiBssB,eACZ,IAHhB,OAKQ,uBAAMlG,UAAU,sBAAhB,UACG,IACApmB,EAAiBusB,UAE5B,qBAAKnG,UAAU,WACX,uBACN,sBAAKA,UAAU,MAAf,UACE,sBAAKA,UAAU,QAAf,UAAuB,cAAC,KAAD,CAAoBA,UAAU,aAAaoG,KAAM,KAAxE,OACeV,EAAUC,iBAAiBC,UAAU,GAAGrF,KAC/C,0BACR,sBAAKP,UAAU,QAAf,cAAwB,uBAAMA,UAAU,cAAhB,UACbpmB,EAAiBysB,SADJ,WAEbzsB,EAAiB0sB,YAFJ,aAIxB,qBAAKtG,UAAU,WAEjB,uBACA,sBAAKA,UAAU,MAAf,UACE,sBAAKA,UAAU,QAAf,UAAuB,cAAC,KAAD,CAAmBA,UAAU,aAAaoG,KAAM,KAAvE,OACeV,EAAUC,iBAAiBC,UAAU,GAAGrF,QAGvD,qBAAKP,UAAU,oBAAf,SAAoCuG,GAAMnI,MAAMhkB,KAAI,SAACjC,EAAMqmB,GACjDhmB,QAAQC,IAAI+lB,GACZhmB,QAAQC,IAAIN,EAAK4lB,MACjB,IAAK,IAAItiB,EAAI,EAAGA,EAAI2jB,EAAMvmB,UAAUM,OAAQsC,IAC1C,GAAI2jB,EAAMvmB,UAAU4C,KAAO+iB,EAEzB,OADAhmB,QAAQC,IAAIN,EAAK4lB,MAEf,qBACE8G,MAAO,CACLb,MAAO,kBACPwC,QAAS,OACTC,SAAU,YAJd,SAQGtuB,EAAK4lB,MAFDS,QAQvB,qBAAKwB,UAAU,WACX,0BAoDR,uBAAK,uBAAK,uBAAK,0B,8DEjMjBQ,GAAU1X,sDAwCD4d,GAPgB,CACzBC,sBA7ByB,uCAAG,WAAOzB,GAAP,SAAAntB,EAAA,sEAEb6oB,IAAMC,KAAKL,GAAU,mBAAoB,eACnD,CAAEM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHnC,mFAAH,sDA+BzB0B,wBAhB2B,uCAAG,WAAO1B,EAAWjuB,GAAlB,SAAAc,EAAA,sEAEjB6oB,IAAMC,KAAKL,GAAU,qBAAsBvpB,EACtD,CAAE6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAH9B,mFAAH,wDAiB3B2B,eAVsB,SAAC3B,EAAWjuB,GAElC,OADAuB,QAAQC,IAAK,WAAa+nB,GAAU,YAAc,CAACM,QAAS,CAAE,eAAgB,eACtEF,IAAMC,KAAKL,GAAU,YAAavpB,EACxC,CAAE6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,OCPjD,SAAS4B,GAAe1H,GAGnC,MAOErc,GAAmB,SAACsc,GAAD,MAAiB,CAC9B5gB,4BAA6B4gB,EAAM5gB,4BACnC2E,eAAgBic,EAAMjc,eACtBC,mBAAoBgc,EAAMhc,mBAC1BY,8BAA+Bob,EAAMpb,8BACrCE,mCAAoCkb,EAAMlb,mCAC1CZ,oBAAqB8b,EAAM9b,oBAC3BC,uBAAuB6b,EAAM7b,uBAC7BQ,8BAA+Bqb,EAAMrb,8BACrCd,iCAAkCmc,EAAMnc,qCAhBxCzE,EAAR,EAAQA,4BACA2E,EADR,EACQA,eAAgBC,EADxB,EACwBA,mBAChBY,EAFR,EAEQA,8BACAE,EAHR,EAGQA,mCACAZ,EAJR,EAIQA,oBAAqBC,EAJ7B,EAI6BA,uBACrBQ,EALR,EAKQA,8BACAd,EANR,EAMQA,iCAiBR,EAAmCsc,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAwCxH,oBAAS,GAAjD,mBAAOyH,EAAP,KAAqBC,EAArB,KACA,EAA+D1H,oBAAS,GAAxE,mBAAO2H,EAAP,KAAgCC,EAAhC,KAEA,EAA2D5H,oBAAS,GAApE,mBAAO6H,EAAP,KAA8BC,EAA9B,KACA,EAA+C9H,oBAAS,GAAxD,mBAAO+H,EAAP,KAAwBC,EAAxB,KACA,EAAuDhI,oBAAS,GAAhE,mBAAOiI,EAAP,KAA4BC,EAA5B,KAEA,EAAiDlI,oBAAS,GAA1D,mBAAOmI,EAAP,KAAyBC,EAAzB,KAEA,EAA8CpI,mBAAS,IAAvD,mBAAwBqI,GAAxB,WACA,EAAsDrI,mBAAS,IAA/D,mBAA4BsI,GAA5B,WACA,EAAwCtI,mBAAS,GAAjD,mBAAqBuI,GAArB,WACA,GAAgDvI,mBAAS,GAAzD,qBAAyBwI,IAAzB,aACA,GAAkCxI,oBAAS,GAA3C,iCAGAG,qBAAU,WACRuH,GAAgB,GAChBR,GAAqBC,sBAAsBvH,EAAMxmB,YAC9C6pB,MAAK,SAASC,GAEU,KAAjBA,EAASpqB,QACTmG,EAA4BikB,EAASvqB,MAAMsqB,MAAM,SAASrK,OAI9DoP,GAAoBD,GACpBG,GAAwBD,GACxBP,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,yCAA0CmqB,GAC/B,KAApBA,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZyK,EAAiC0f,EAAGF,UAAU,EAAM,GAAI,GAAI,iBAAiB,KACjFwE,GAAgB,QAErB,CAACG,IAEJ1H,qBAAU,WAEPmI,EAAsBzkB,GAEtB2kB,GAAmB3kB,EAAmBlK,UACrC,CAACsuB,IAEJ9H,qBAAU,WAETkI,EAAkBzkB,GAClB2kB,EAAe3kB,EAAejK,UAC7B,CAACouB,IAEJ5H,qBAAU,WACRyH,GAA4BD,KAC3B,CAACJ,IAKJ,IAAMkB,GAAU,SAACzJ,GACuB0J,SAASC,eAAe3J,GACpD4J,UAAUC,OAAkB,YAGxC,GAA4B7I,oBAAS,GAArC,iCASA,SAASngB,GAAMY,GACb,IAAMZ,EAAQ,IAAIa,KAAKD,GACjBqoB,EAAMjpB,EAAMe,UACZmoB,EAAMlpB,EAAMiB,WAAa,EAG/B,OAFajB,EAAMmB,cAEL,IAAM+nB,EAAM,IAAMD,EAIlC,OAAkC9I,mBAAS,cAA3C,qBAAOgJ,GAAP,MAAkBC,GAAlB,MA0CMC,GAAuB,SAAChvB,GAC5B,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GACrB8rB,EAAOD,EAAUpuB,QAAQ,KACzBsuB,EAAaF,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAE5D3kB,EAA8B4kB,GAC9BC,YAAW,WAAQtB,GAAoBD,KAAoB,KAE3D,IAAIwB,EAAa,GACH,OAAd3lB,QAAc,IAAdA,KAAgBhJ,KAAI,SAACjC,EAAWqmB,GAC9BuK,EAAOlnB,KAAK1J,EAAK8C,WAGnB,cAAkB8tB,EAAlB,eAAyB,CACvB,IADY,KAGV,YADAnB,GAAoB,GAGpBA,GAAoB,KAsF1B,OACE,mCACC,sBAAK5H,UAAU,iBAAf,UAMK,qBAAIA,UAAU,2DAAd,UACE,qBACEljB,GAAG,OACHomB,QA5KO,WAAQuF,GAAa,eA6K5BzI,UAAyB,eAAdwI,GAA6B,WAAa,GAHvD,UAKGlI,EAAawG,eAAelB,UAAU,GAAGrF,KAAK,KAAG/c,EAAuB,OAE3E,qBACE1G,GAAG,OACHomB,QAjLO,WAASuF,GAAa,WAkL7BzI,UAAyB,WAAdwI,GAAyB,WAAa,GAHnD,UAKGlI,EAAawG,eAAelB,UAAU,GAAGrF,KAAK,IAAEhd,EAAoB,OAGvE,oBACE2f,QAzKG,WACC,OAAd9f,QAAc,IAAdA,KAAgBhJ,KAAI,SAACjC,EAAWqmB,GAAc,IAAD,EACrCwK,EAAI,UAAGd,SAASC,eAAehwB,EAAK+L,eAAhC,aAAG,EAAsCkkB,UAC/C,OAAJY,QAAI,IAAJA,KAAMC,IAAI,cAEM,OAAlB5lB,QAAkB,IAAlBA,KAAoBjJ,KAAI,SAACjC,EAAWqmB,GAAc,IAAD,EACzCwK,EAAI,UAAGd,SAASC,eAAehwB,EAAK+L,eAAhC,aAAG,EAAsCkkB,UAC/C,OAAJY,QAAI,IAAJA,KAAMC,IAAI,eAmKFjJ,UAAU,oBACVlkB,MAAM,iCAHR,SAIC,eAGD,oBACEonB,QArKI,WACA,OAAd9f,QAAc,IAAdA,KAAgBhJ,KAAI,SAACjC,EAAWqmB,GAAc,IAAD,EACrCwK,EAAI,UAAGd,SAASC,eAAehwB,EAAK+L,eAAhC,aAAG,EAAsCkkB,UAC/C,OAAJY,QAAI,IAAJA,KAAME,OAAO,cAEG,OAAlB7lB,QAAkB,IAAlBA,KAAoBjJ,KAAI,SAACjC,EAAWqmB,GAAc,IAAD,EACzCwK,EAAI,UAAGd,SAASC,eAAehwB,EAAK+L,eAAhC,aAAG,EAAsCkkB,UAC/C,OAAJY,QAAI,IAAJA,KAAME,OAAO,eA+JLlJ,UAAU,oBACVlkB,MAAM,kCAHR,SAIC,mBAKH,uBACA,qBAAKkkB,UAAU,SAAf,SACiB,eAAdwI,GAEG,qCACE,8BAAMlI,EAAawG,eAAelB,UAAU,GAAGrF,OAC/C,qBAAKzjB,GAAG,mBAAR,SACE,qBAAKkjB,UAAU,6BAAf,SACE,qBAAKA,UAAU,iDAAf,SACE,qBAAKA,UAAU,qBAAf,SACE,sBAAKA,UAAU,kBAAf,UACE,uBADF,OAEG3c,QAFH,IAEGA,OAFH,EAEGA,EAAoBjJ,KAAI,SAACjC,EAAWqmB,GACnC,OACE,qCACE,sBAAKwB,UAAU,cAAf,UACE,qBAAKA,UAAU,WAAf,SACE,+BACE,cAAC,KAAD,CAAkBoG,KAAM,IACvB,MACA/mB,GAAMlH,EAAKiK,gBAGhB,qBAAK4d,UAAU,WAAWljB,GAAG,UAA7B,SACE,qBAAIomB,QAAS,kBAAM+E,GAAQ9vB,EAAK+L,SAAhC,UACG/L,EAAK+F,YACN,sBAAM8hB,UAAU,MAAhB,SACE,cAAC,KAAD,cAKR,qBAAKA,UAAU,MAAf,SACE,mBAAGA,UAAU,kBAAkBljB,GAAI3E,EAAK+L,OAAxC,SACG/L,EAAKyL,+BAc5B,qCACE,8BAAM0c,EAAawG,eAAelB,UAAU,GAAGrF,OAE/C,qBAAKzjB,GAAG,mBAAR,SAEM,sBAAKkjB,UAAU,YAAf,UACE,qBAAKA,UAAU,YAAf,SAEM,qBAAKA,UAAU,QAAf,SACE,cAACqE,GAAA,EAAD,CAAWK,OAAK,EAAhB,SACE,eAACyE,GAAA,EAAD,CAAKnJ,UAAY,mBAAjB,UACE,eAACoJ,GAAA,EAAD,CAAKC,GAAI,EAAT,UACE,qBAAKrJ,UAAU,iBAAf,SACA,uBACEljB,GAAG,oBACHsmB,KAAK,WACLkG,QAAS3B,EACT4B,SAxLX,SAAC7vB,GAG5B,IAAI8vB,EAAO9vB,EAAE6pB,OAAO+F,QAGhB1B,IADA4B,GAKJrlB,EAAmCwjB,GACnCmB,YAAW,WAAQtB,GAAoBD,KAAoB,UA+KzB,sBAAK1C,MAAO,CAAC2B,QAAQ,gBAArB,UAAuClG,EAAawG,eAAelB,UAAU,GAAGrF,KAAK,YAErF,eAAC6I,GAAA,EAAD,CAAKC,GAAI,EAAInG,QA7K1B,SAACxpB,GACtB,IAAI+vB,EAAiB,GACP,OAAdrmB,QAAc,IAAdA,KAAgBhJ,KAAI,SAACjC,EAAWqmB,GAE9B,IAAI1hB,EAAK3E,EAAK+L,OACV/L,EAAK8C,SACPwuB,EAAU,uBAAOA,GAAP,CAAmB3sB,QAGP,IAAtB2sB,EAAWtwB,OACbuwB,KAAMC,KAAK,CACT7tB,MAAO,kCACP8tB,kBAAmB,SACnBC,mBAAoB,YAGxBH,KAAMC,KAAK,CACT7tB,MAAO,0CACPguB,gBAAgB,EAChBF,kBAAmB,WACnBG,eAAgB,gBACftH,MAAK,SAACuH,GAEHA,EAAOC,aACT/C,GAAgB,GACdR,GAAqBE,wBAAwBxH,EAAMxmB,WAAY6wB,GAC5DhH,MAAK,SAASC,GACU,KAAjBA,EAASpqB,QACT0L,EAA8B0e,EAASvqB,MAAMsqB,MAAM,SAASrK,GAE1DkP,GAA0BD,GAC1BO,GAAoB,GACpBZ,GAAcD,MAIpBG,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,yCAA0CmqB,GAC/B,KAApBA,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZyK,EAAiC0f,EAAGF,UAAU,EAAM,GAAI,GAAI,iBAAiB,KACjFwE,GAAgB,MAEpBwC,KAAMC,KAAK,CACT7tB,MAAO,wBACP8tB,kBAAmB,SACnBC,mBAAoB,YAEtB7C,GAAcD,IACTiD,EAAOE,UACdR,KAAMC,KAAK,CACT7tB,MAAO,2BACP8tB,kBAAmB,SACnBC,mBAAoB,gBAqH4C7J,UAAU,kCAAkClkB,MAAM,+BAAxF,UACE,cAAC,KAAD,IAAoB,IAAEwkB,EAAawG,eAAelB,UAAU,GAAGrF,iBAO7E,uBAxBF,OAyBGnd,QAzBH,IAyBGA,OAzBH,EAyBGA,EAAgBhJ,KAAI,SAACjC,EAAWqmB,GAC/B,OACE,qCACE,sBAAKwB,UAAU,cAAf,UACE,sBAAKA,UAAU,WAAf,UACE,qBAAKA,UAAU,UAAf,SACE,uBACEoD,KAAK,WAELtmB,GAAE,gBAAW3E,EAAK+L,QAClBolB,QAASnxB,EAAK8C,OACdsuB,SAAUb,IALZ,gBAEgBvwB,EAAK+L,WAMvB,sBAAKpH,GAAE,eAAU3E,EAAK+L,QAAU8b,UAAU,gCAA1C,UACG,IACA3gB,GAAMlH,EAAKiK,iBAGhB,qBAAK4d,UAAU,WAAWljB,GAAG,UAA7B,SACE,qBAAIomB,QAAS,kBAAM+E,GAAQ9vB,EAAK+L,SAAhC,UACG/L,EAAK+F,YACN,sBAAM8hB,UAAU,MAAhB,SACE,cAAC,KAAD,cAKR,qBAAKA,UAAU,MAAf,SACE,mBAAGA,UAAU,kBAAkBljB,GAAI3E,EAAK+L,OAAxC,SACG/L,EAAKyL,2BAe9BqjB,EAAe,cAACpD,EAAD,IAAmB,UCpZjC,SAASsG,GAAW/K,GACzB7jB,EAAQ,IAAhB,IAGE,EACE7E,GAAkB,SAAC2oB,GAAD,MAAiB,CAC/B1mB,aAAc0mB,EAAM1mB,aACpBE,UAAWwmB,EAAMxmB,aACnBuxB,KAJIzxB,EAAR,EAAQA,aAAcE,EAAtB,EAAsBA,UAOdslB,EACPR,GAAU,SAAC0B,GAAD,MAAiB,CACvBlB,oBAAqBkB,EAAMlB,wBAFxBA,oBAMF+C,EAAUpY,oBAEZyY,EAAUC,cAEV6I,EAAU/J,EAAa6J,WAAWvE,UAGtC,EAAmCpG,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAuDxH,oBAAS,GAAhE,mBAAO8K,EAAP,KAA4BC,EAA5B,KACA,EAAwC/K,oBAAS,GAAjD,mBAAOyH,EAAP,KAEA,GAFA,KAE4BzH,oBAAS,IAArC,mBAAOgL,EAAP,KAAeC,EAAf,KACA,EAA6BjL,mBAAS,IAAtC,mBAAOkL,EAAP,KAAeC,EAAf,KASAhL,qBAAU,WAERxB,EAAoBtlB,KAEnB,IAEH8mB,qBAAU,WAER4K,GAAwBD,GACxBM,MACA,CAAC7D,IAGH,IAKM6D,EAAuB,WAAQxL,EAAMwL,wBAErCC,EAA0B,SAACC,GACtB,KAALA,GAAYH,EAAW,KAClB,KAALG,GAAYH,EAAW,KAC3BF,GAAU,IAGNM,EAA0B,WAC9BN,GAAU,GAZVzD,GAAcD,IAkChB,EAAwBvH,oBAAS,GAAjC,mBAUA,GAVA,UAUgCA,mBAA6B,OAA7D,mBAAOwL,EAAP,UACaC,QAAQD,GAYvB,OACE,qCAEI,sBAAKluB,GAAG,UAAR,UAGI,eAAConB,EAAA,EAAD,CAAQgH,kBAAgB,EAACC,QAAQ,OAAOnL,UAAU,0CAA0CmE,OAAO,KAAnG,UAGI,cAACD,EAAA,EAAOS,MAAR,CAAc3E,UAAU,iBAAxB,SACE,sBAAKA,UAAU,eAAf,UACE,qBAAKwF,IAAK4F,GAAc3F,IAAI,iBAAiB3oB,GAAG,YAChD,uBAAMkjB,UAAYkB,EAASY,cAAcC,SAAS,YAAc,QAAU,OAA1E,UACE,qBAAKyD,IAAK6F,KAAU,IAAEhB,EAAQ,GAAG9J,QAEnC,uBAAMP,UAAYkB,EAASY,cAAcC,SAAS,wBAA0B,QAAU,OAAtF,UACE,qBAAKyD,IAAK6F,KAAU,kCAEtB,sBAAMrL,UAAuC,UAA3BkB,EAASY,cAA4B,QAAU,OAAjE,SACE,uBAAM+C,MAAO,CAAEyG,UAAW,OAAStL,UAAwC,UAA3BkB,EAASY,cAA4B,QAAU,OAA/F,UACI,qBAAK0D,IAAK6F,GAAQvuB,GAAG,aAAa,IAAC,sBAAMA,GAAG,UAAT,SAAoButB,EAAQ,GAAG9J,iBAM5E,cAAC2D,EAAA,EAAOI,OAAR,CAAe,gBAAc,qBAG7B,qBAAKxnB,GAAG,WAAR,SACE,cAAConB,EAAA,EAAOK,SAAR,CAAiBvE,UAAU,sBAA3B,SACE,eAACwE,EAAA,EAAD,WACE,eAACA,EAAA,EAAIC,KAAL,CAAUI,MAAO,CAAC0G,YAAY,OAAQzvB,MAAM,iBAAiBkkB,UAAgC,GAArBZ,EAAM9b,cAAmB,SAAY,aAA7G,UAEE,uBAAO0c,UAAU,+CAA+CkD,QAAS,kBAAM2H,EAAwB,MAAvG,UAA8GzL,EAAM9b,cAAc,OAClI,cAAC,KAAD,CAAQ8iB,KAAM,GAAIlD,QAAS,kBAAM2H,EAAwB,MAAO/uB,MAAM,iBAAiBkkB,UAAU,cACxF,OAEX,cAACwE,EAAA,EAAIC,KAAL,CAAU3oB,MAAM,qBAAhB,SACE,qBAAKgB,GAAG,QAAR,SACE,eAAC0uB,EAAA,EAAD,CACE1uB,GAAG,eAGHomB,QAAS,kBAAM2H,EAAwB,MAJzC,UAME,cAAC,KAAD,CAAczE,KAAM,GAAKtpB,GAAG,YAAY,IAAC,qBAAKkjB,UAAU,SAAf,SAAyBrnB,kBAO/E,8BAEA,cAAC,KAAD,CAAQytB,KAAM,GAAInG,MAAM,QAAQnkB,MAAM,mBAAgBonB,QA/F5C,WAEnBQ,aAAaC,WAAW,WACxBF,eAAeE,WAAW,WAC1BD,aAAahH,QACb+G,eAAe/G,QAMK5T,oCACpB8W,OAAO4D,SAASiI,SACd7L,OAAO4D,SAAS3nB,QAHHiN,6CAIZyY,EAAQ1f,KAAK,MAiFsEme,UAAU,iBAI5F,uBAAK,uBAGH,cAACiE,GAAD,CAAY5b,KAAM,EAAGuc,IAAK,QAKlB,KAAT8F,GAAgBF,GACd,mCACG,cAAC,eAAD,CAAckB,OAAQlB,EAAQpH,KAAK,QAAQgD,KAAM,GAC/CtqB,MAAM,iBACN6vB,WAAY,kBAAIZ,KAFlB,SAGM,cAACjE,GAAD,CAAgBluB,WAAYwmB,EAAMxmB,iBAIpC,KAAT8xB,GAAgBF,GACd,mCACG,cAAC,eAAD,CAAckB,OAAQlB,EAAQpH,KAAK,QAAQgD,KAAM,GAC/CtqB,MAAM,qBACN6vB,WAAY,kBAAIZ,KAFlB,SAGI,cAAC,GAAD,CAAQnyB,WAAYwmB,EAAMxmB,WAAYD,aAAcA,EAAeE,UAAWA,QAMxFouB,EAAc,cAACpD,EAAD,IAAmB,Q,MCzN5B,SAAS+H,GAAgBxM,GAStC,OACE,mCACE,gCACE,oBAAIY,UAAU,+BAAd,SAA8CZ,EAAMyM,SAChC,MAAnBzM,EAAM0M,WACJ,mCACC,sBAAM9L,UAAU,YAAhB,SAA6BZ,EAAM0M,cAGxB,MAAd1M,EAAM2M,MACJ,mCACC,oBAAG/L,UAAU,oBAAb,UACE,mBAAGA,UAAU,4CACZ,IACD,sBAAMljB,GAAG,WAAaklB,wBAAyB,CAAGC,OAAQ7C,EAAM2M,kB,+DCrC1EvL,GAAU1X,kDAuDDkjB,GATU,CACrBrF,sBA1C2B,uCAAG,WAAOzB,GAAP,SAAAntB,EAAA,sEAEb6oB,IAAMC,KAAKL,GAAU,sBAAuB,eACrD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHnC,mFAAH,sDA2C3B+G,qBApC0B,uCAAG,WAAO/G,EAAWpoB,GAAlB,SAAA/E,EAAA,sEAEd6oB,IAAMC,KAAKL,GAAU,sBAAsB1jB,EAAI,eACxD,CAACgkB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHlC,mFAAH,wDAqC1BgH,kBA9BuB,uCAAG,WAAOhH,EAAWiH,GAAlB,SAAAp0B,EAAA,sEAEX6oB,IAAMC,KAAKL,GAAU,kBAAmB2L,EACjD,CAACrL,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHrC,mFAAH,wDA+BvBkH,kBAxBuB,uCAAG,WAAOlH,EAAWiH,GAAlB,SAAAp0B,EAAA,sEAEX6oB,IAAMC,KAAKL,GAAU,kBAAmB2L,EACjD,CAACrL,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHrC,mFAAH,wDAyBvBmH,kBAlBwB,uCAAG,WAAOnH,EAAWpoB,GAAlB,SAAA/E,EAAA,sEAEZ6oB,IAAMC,KAAKL,GAAU,gBAAgB1jB,EAAK,eACnD,CAACgkB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHpC,mFAAH,wDAmBxBoH,gBAZ0B,SAACpH,EAAWiH,GAEpC,OADA3zB,QAAQC,IAAK,WAAa+nB,GAAU,gBAAiB2L,EAAiB,CAACrL,QAAS,CAAE,eAAgB,eAC1FF,IAAMC,KAAKL,GAAU,gBAAiB2L,EAC1C,CAACrL,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,O,SCVhD,SAASqH,GAAmBnN,GAEvC,IAoCIoN,EAAGC,EAAGC,EAAGC,EAAGC,EApChB,EASIzuB,GAAe,SAACkhB,GAAD,MAAgB,CAC3Bxf,kBAAmBwf,EAAMxf,kBACzBc,2BAA4B0e,EAAM1e,2BAClCD,uBAAwB2e,EAAM3e,uBAC9BsB,wBAAyBqd,EAAMrd,wBAC/BQ,wBAAyB6c,EAAM7c,wBAC/BE,wBAAyB2c,EAAM3c,wBAC/BG,iBAAkBwc,EAAMxc,iBACxBvB,sBAAuB+d,EAAM/d,sBAC7BqB,uBAAwB0c,EAAM1c,uBAC9BrE,6BAA8B+gB,EAAM/gB,iCAnBpCuB,EAAR,EAAQA,kBACAc,EADR,EACQA,2BAA4BD,EADpC,EACoCA,uBAC5BsB,EAFR,EAEQA,wBACAQ,EAHR,EAGQA,wBACAE,EAJR,EAIQA,wBACAG,EALR,EAKQA,iBACAvB,EANR,EAMQA,sBACAqB,EAPR,EAOQA,uBACArE,EARR,EAQQA,6BAcR,EAEIyE,GAAmB,SAACsc,GAAD,MAAgB,CAC/B/a,qBAAsB+a,EAAM/a,qBAC5BD,eAAgBgb,EAAMhb,eACtBnB,iCAAkCmc,EAAMnc,qCALxCoB,EAAR,EAAQA,qBACApB,GADR,EAA8BmB,eAA9B,EACQnB,kCAWJ2pB,EAAYvM,EAAawM,OAAOC,QAChC1M,EAAMC,EAAa0M,UACJC,EAAK,GACpBC,EAAS,GACTC,EAAW,GACXC,EAAW,EACXC,EAAW,EACXC,EAAU,EACVC,EAA0B,GAC1BC,EAA0B,GAG9B,EAAiChO,oBAAS,GAA1C,mBAAOuH,EAAP,KAAiBC,EAAjB,KACA,EAAqExH,oBAAS,GAA9E,mBAAOiO,EAAP,KAAmCC,EAAnC,KACA,EAAoElO,oBAAS,GAA7E,mBAAOmO,EAAP,KACA,GADA,KACuCnO,oBAAS,IAAhD,mBAAOyH,EAAP,KAAoBC,EAApB,KAEA,EAAwC1H,mBAASJ,EAAMwO,cAAvD,oBAAOA,GAAP,MACA,IADA,MACkDpO,mBAASJ,EAAMwO,eAAjE,qBAAOC,GAAP,MAA0BC,GAA1B,MAEA,GAAgDtO,mBAASJ,EAAM2O,aAA/D,qBAAOC,GAAP,MAAyBC,GAAzB,MAEA,GAA4DzO,mBAAS9e,GAArE,qBAAOwtB,GAAP,MAA+BC,GAA/B,MACA,GAA4C3O,mBAAS9e,EAAuB7B,aAA5E,qBAAOuvB,GAAP,MAAuBC,GAAvB,MACA,GAAgD7O,mBAAS9e,EAAuBhB,eAAhF,qBAAO4uB,GAAP,MAAyBC,GAAzB,MACA,GAAgD/O,mBAAS9e,EAAuBf,eAAhF,qBAAO6uB,GAAP,MAAyBC,GAAzB,MACA,GAA4CjP,mBAAS9e,EAAuBnB,YAA5E,qBAAOmvB,GAAP,MAAuBC,GAAvB,MACA,GAA0CnP,mBAAS9e,EAAuBlB,WAA1E,qBAAOovB,GAAP,MAAsBC,GAAtB,MACA,GAA8CrP,mBAAS9e,EAAuBjB,aAA9E,qBAAOqvB,GAAP,MAAwBC,GAAxB,MACA,GAAkCvP,oBAAS,GAA3C,qBAAOwP,GAAP,MAAkBC,GAAlB,MAIAtP,qBAAU,WACNnnB,QAAQC,IAAI,8BACZD,QAAQC,IAAI,6BAA8B2mB,EAAMwO,cAChDsB,KAEC9P,EAAMrkB,iBAAiBX,KAAI,SAAC0G,GACzBA,EAAE7F,QAAO,EACT6F,EAAE5F,UAAS,EACX4F,EAAE3F,cAAc,MAEpBikB,EAAMhkB,iBAAiBhB,KAAI,SAAC0G,GACxBA,EAAE7F,QAAO,EACT6F,EAAE5F,UAAS,OAEjB,IAEFykB,qBAAU,WACW,GAAdiO,IACCK,GAAoB7O,EAAM2O,aAC1B7G,GAAgB,GAChBiI,GAAkBlD,qBAAqB7M,EAAMxmB,WAAYo1B,IACxDvL,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTqI,EAA2B+hB,EAASvqB,KAAMinB,EAAM2O,YAAa3O,EAAMrkB,iBAAkBqkB,EAAMhkB,iBAAiB,aAAaqnB,MAAM,SAASrK,GACpI+V,GAA0B/V,GAC1BiW,GAAkBjW,EAAMvZ,aACxB0vB,GAAoBnW,EAAM1Y,eAC1B+uB,GAAoBrW,EAAMzY,eAC1BgvB,GAAkBvW,EAAM7Y,YACxBsvB,GAAiBzW,EAAM5Y,WACvBuvB,GAAmB3W,EAAM3Y,aAEzBunB,GAAcD,MAGtBG,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,wCAAyCmqB,EAAGF,SAASpqB,QAC1C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZ6F,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,sCAAsC,KAClGwE,GAAgB,GAChBkI,UAKJ7B,EAAuB9hB,KAAKC,MAAMD,KAAKE,UAAUyT,EAAMrkB,mBACvDyyB,EAAuB/hB,KAAKC,MAAMD,KAAKE,UAAUyT,EAAMhkB,mBACvD+yB,GAA0BtuB,GAC1BwuB,GAAkB,IAClBE,GAAoBhB,GACpBkB,GAAoBjB,GACpBmB,GAAkBT,GAAuB3uB,YACzCsvB,GAAiBX,GAAuB1uB,WACxCuvB,GAAmBb,GAAuBzuB,aAC1CunB,GAAcD,MAEpB,CAAC4G,IAEHhO,qBAAU,WACNnnB,QAAQC,IAAI,gEAER2mB,EAAMwO,aAAgBmB,IAAmB,GACtCA,IAAmB,GAC1Bv2B,QAAQC,IAAI,sBAAuBq2B,IAEnCpB,GAAgCD,KASlC,CAAC1G,IAIH,IAAMqI,GAAmB,WAAQhQ,EAAMgQ,oBAEjCC,GAAmB,WAASjQ,EAAMiQ,oBAGlCC,GAA4B,WAC/BtI,GAAcD,IAGXwI,GAAe,WACjBrC,EAAS,GACTC,EAAS,GAKTqC,GAA4B,GACb,IAAVtC,EACDxD,KACCC,KAAK,CACF7tB,MAAOukB,EAAIoP,SAAS,GAAGlP,KACvBsF,KAAM,QACN6J,kBAAkB,EAClBC,mBAAkB,EAClBC,SAAU,0BACVC,iBAAkB,SAClBC,kBAAmB,OACnB9L,MAAO,MACP+L,KAAM,QAAU7C,EAAS,YAI7BsC,GAA4B,GAC5BQ,OAIFR,GAA8B,SAACS,GAEjC,GAAY,GAARA,EAAW,CAGe,IAAjB7B,KAAuBlB,EAAU7M,EAAI6P,gBAAgB,GAAG3P,KAAO,UAGpE6M,EAAW,EACX,IAAI+C,EAAQ,GAEZ7B,GAAiBl0B,KAAI,SAAC0G,GACdA,EAAE7F,SACFmyB,GAA0B,GAC1BtsB,EAAE7F,QAA2B,IAAjB6F,EAAE3F,gBAEVg1B,EADO,IAAPA,EACS9P,EAAI6P,gBAAgB,GAAG3P,KAAvBF,iCAAsEvf,EAAE3D,KAAM,kBAE/EgzB,EAAQ,4BAA6BrvB,EAAE3D,KAAM,sBAIrD,IAARgzB,IAAcjD,EAASA,EAAS,SAAYiD,GAEtC,IAAVjD,IAAgBA,EAAS,+BAAiCA,GAEtD,GAAR+C,IACA9C,EAAW,GACK,GAAZC,IAEAD,GADAA,EAAW9M,EAAI6P,gBAAgB,GAAG3P,KAAO,cACnB,gBAAiBF,EAAI6P,gBAAgB,GAAG3P,KAAO,cAEzE8M,EAAW,EACXmB,GAAiBp0B,KAAI,SAACsB,GACdA,EAAET,SAAUoyB,GAA0B,MAE9B,GAAZA,IACgB,IAAZF,IAAkBA,EAAW9M,EAAI6P,gBAAgB,GAAG3P,KAAO,cAC/D4M,EAAWA,EAAW,gBAAkB9M,EAAI6P,gBAAgB,GAAG3P,KAAO,cAE1D,IAAZ4M,IAEAA,GADAA,EAAWA,EAAW9M,EAAI6P,gBAAgB,GAAG3P,KAAO,cAC9BF,EAAI6P,gBAAgB,GAAG3P,KAAO,gBAK1DyP,GAAoB,WAEtB,IAAI/tB,EAAS,CAAEnF,GAAGszB,IAAQvxB,YAAY,GAAIK,OAAO,GAAKC,kBAAmB,IACrE8C,EAAQnF,GAAKsiB,EAAM2O,YACnB9rB,EAAQpD,YAAcuvB,GAC1B,IAAIrtB,EAAgB,GAChBsvB,EAAY,CAACvzB,GAAG,EAAGK,KAAM,GAAIhC,cAAe,IAC5CgG,EAAgB,GAGhBisB,EAAa,IACbkB,GAAiBl0B,KAAI,SAAC0G,GAClBuvB,EAAY,CAACvzB,GAAG,EAAGK,KAAM,GAAIhC,cAAe,IACxC2F,EAAE7F,SACFo1B,EAAWvzB,GAAIgE,EAAEhE,GACjBuzB,EAAWlzB,KAAO2D,EAAE3D,KACpBkzB,EAAWl1B,cAAe2F,EAAE3F,cAE5B4F,EAASc,KAAKwuB,OAGtBpuB,EAAQ/C,OAAS6B,GAGrB,IAAImB,EAA4B,GAC5BmrB,EAAa,IACbmB,GAAiBp0B,KAAI,SAACsB,GACdA,EAAET,SACFkG,EAASU,KAAKnG,EAAEoB,IAChBoF,EAAsBL,KAAKnG,OAGnCuG,EAAQ9C,kBAAoBgC,GAS5B0sB,IAEA3G,GAAgB,GAChBiI,GAAkBjD,kBAAkB9M,EAAMxmB,WAAYqJ,GACjDwgB,MAAK,SAACC,GAEkB,KAAjBA,EAASpqB,QACT0J,EAAwB0gB,EAASvqB,KAAM8J,EAASC,EAAuBosB,GAAkBE,IACxF/L,MAAM,SAAS6N,GACZ93B,QAAQC,IAAI,qCAAsC63B,GAElDxC,IAAqB,GAErBR,EAAUgD,EAAkBxzB,GAC5BmxB,GAAoBX,GACpByB,IAAmB,GACnBv2B,QAAQC,IAAI,8CAA8C60B,GA1I7ClO,EAAMmR,sBA6InBlB,KACAC,KACAkB,QAGRtJ,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DgG,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,4CAA4C,KACpGwE,GAAgB,GAChBkI,UAKRlI,GAAgB,GAChBiI,GAAkB/C,kBAAkBhN,EAAMxmB,WAAYqJ,GACjDwgB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTkK,EAAwBkgB,EAASvqB,KAAM8J,EAASqsB,GAAkBE,IAAkB/L,MAAM,SAASgO,GAC/Fj4B,QAAQC,IAAI,qCAAsCg4B,GAI9C9B,IAAkB,GAClBW,KACAD,KACAmB,QAIZtJ,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DgG,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,4CAA4C,KACpGwE,GAAgB,GAChBkI,UAMVoB,GAAe,WAEjBh4B,QAAQC,IAAI,+CAA+C60B,GAC3D90B,QAAQC,IAAI,wDAAyDu1B,IAEtD,IAAVb,GACDzD,KAAMC,KAAK,CACP7tB,MAAOukB,EAAIoP,SAAS,GAAGlP,KACvBsF,KAAM,UACN8J,mBAAmB,EACnBD,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,yCACnBiG,iBAAkB,SAElB7L,MAAO,MACP+L,KAAM,QAAU1P,EAAIoP,SAAS,GAAGlP,KAAO,WACxCkC,MAAK,SAACuH,GACDA,EAAOC,aAAgByG,QAI/B/B,IAAkB,GAClBE,IAAiB,IAGjBnF,KAAMC,KAAK,CACH7tB,MAAOukB,EAAIoP,SAAS,GAAGlP,KACvBsF,KAAM,UAEN+D,kBAAmB,SACnBC,mBAAoB,UACpB7F,MAAO,MACP+L,KAAM,sCAAwC5C,EAAW,WAGrEkC,MAGEqB,GAAc,WAEhBl4B,QAAQC,IAAI,+CAA+C60B,GAC3D90B,QAAQC,IAAI,wDAAyDu1B,IACrEx1B,QAAQC,IAAI,yDAA0Do1B,IAEtE,IAAI5rB,EAAS,CAAEnF,GAAG,EAAGsK,MAAK,GAC1BnF,EAAQnF,GAAyB,GAAnB+wB,GAA4BG,GAAmBV,EAC7DrrB,EAAQmF,MAAO,EACf5O,QAAQC,IAAI,+CAAgDwJ,GAC1C,GAAdA,EAAQnF,IACRoqB,GAAgB,GAEhBiI,GAAkB7C,gBAAgBlN,EAAMxmB,WAAYqJ,GACnDwgB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTuK,EAAiB6f,EAASvqB,MAAMsqB,MAAM,SAASkO,GAC3Cn4B,QAAQC,IAAI,uBAAwBk4B,GACpCrvB,EAAsB8d,EAAM2O,aAAa,EAAO,KAAM,eACtD7G,GAAgB,GAChBwC,KAAMC,KAAK,CACP7tB,MAAOukB,EAAIoP,SAAS,GAAGlP,KACvBsF,KAAM,UACN+D,kBAAmB,SACnBC,mBAAoB,UACpB7F,MAAO,QAEX5E,EAAMmR,sBACNlB,KACAV,GAAkB,MAClBE,GAAiB,MACjB7H,GAAcD,GACd,IAAI6J,EAAgB,CAAEC,WAAWT,KAC7BQ,EAAWC,WAAa5uB,EAAQnF,GAEpCoqB,GAAgB,GAChB4J,GAAsBjK,eAAezH,EAAMxmB,WAAYg4B,GAClDnO,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTgM,EAAqBoe,EAASvqB,MAAMsqB,MAAM,SAASsO,GAC/Cv4B,QAAQC,IAAI,sBAAsBs4B,MAI1C7J,GAAgB,MAGnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/D4K,EAAiC0f,EAAGF,UAAU,EAAM,GAAI,GAAI,6CAA6C,KACzGwE,GAAgB,GAChBkI,QAERC,KAxRiBjQ,EAAMwL,6BA8RlCjI,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DgG,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,2CAA2C,KACnGwE,GAAgB,GAChBkI,SAIJhT,MAAM,6BAwCR4U,GAAc,WACZtC,GACAhF,KAAMC,KAAK,CACP7tB,MAAOukB,EAAIoP,SAAS,GAAGlP,KACvBA,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,mBAAqB1P,EAAIoP,SAAS,GAAGlP,KAAO,WACnDkC,MAAK,SAACuH,GACDA,EAAOC,aAAgB7K,EAAM6R,qBAAqB7R,EAAM2O,gBAIhE3O,EAAM6R,qBAAqB7R,EAAM2O,aAErCmB,MAGEA,GAAkB,WACpBf,GAA0BtuB,GAC1BwuB,GAAkB,IAElBE,GAAoBhB,GACpBkB,GAAoBjB,GAEpBmB,IAAkB,GAClBE,IAAiB,GACjBE,GAAmB,MACnBO,MAYE4B,GAAkB,SAACx3B,GAGrB,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GAErB8rB,EAAOD,EAAUpuB,QAAQ,KAEzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAGlDuI,EAAOn5B,EAAKuC,QAAQ,KAGpB62B,GADcp5B,EAAKwC,OAAQ,EAAG22B,GACjBn5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,IAItD7C,GAAiBl0B,KAAI,SAAC0G,GACdA,EAAEhE,IAAMs0B,IACRtwB,EAAE7F,QAAU6F,EAAE7F,WAEtBg0B,IAAcD,IACdL,IAAkB,GAClBE,IAAiB,IAIfwC,GAA4B,SAAC33B,GAKnC,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GAErB8rB,EAAOD,EAAUpuB,QAAQ,KAEzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAGlDuI,EAAOn5B,EAAKuC,QAAQ,KAGpB62B,GADcp5B,EAAKwC,OAAQ,EAAG22B,GACjBn5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,IAGtD7C,GAAiBl0B,KAAI,SAAC0G,GACdA,EAAEhE,IAAMs0B,IACRtwB,EAAE3F,cAAgBzB,EAAE6pB,OAAOtqB,UAEnCg2B,IAAcD,IACdL,IAAkB,GAClBE,IAAiB,IAIXyC,GAAkB,SAAC53B,GAGzB,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GAErB8rB,EAAOD,EAAUpuB,QAAQ,KAEzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAGlDuI,EAAOn5B,EAAKuC,QAAQ,KAGpB62B,GADcp5B,EAAKwC,OAAQ,EAAG22B,GACjBn5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,IAGtD3C,GAAiBp0B,KAAI,SAACsB,GACdA,EAAEoB,IAAMs0B,IACR11B,EAAET,QAAUS,EAAET,WAEtBg0B,IAAcD,IACdL,IAAkB,GAClBE,IAAiB,IAKjB,GAAgCrP,mBAAS,IAAzC,qBAAO+R,GAAP,MAAiBC,GAAjB,MACA,GAAkDhS,mBAAS,IAA3D,qBAAOiS,GAAP,MAA0BC,GAA1B,MAMMC,GAAU,SAACC,GAEbp5B,QAAQC,IAAI,8BAA8B+1B,IAC1C,IAAIqD,EAAmBrD,GAAiB7oB,QAAO,SAACmsB,GAC5C,GAAIA,EAAS7sB,QAAQkG,WAAW2W,cAAcC,SAAS6P,EAAgB9P,gBACpEgQ,EAAS5sB,cAAciG,WAAW2W,cAAcC,SAAS6P,EAAgB9P,gBACzEgQ,EAASn2B,YAAYwP,WAAW2W,cAAcC,SAAS6P,EAAgB9P,eAG1E,OAAOgQ,KAIXJ,GAAqBG,IAazB,OACA,qCAEUzS,EAAMwO,cACH,mCACG,qBAAK5N,UAAU,kBAAf,SACI,eAACmJ,GAAA,EAAD,CAAKnJ,UAAU,kDAAf,UACI,eAACoJ,GAAA,EAAD,CAAK2I,GAAI,GAAT,UACI,6BAAK1R,EAAI0M,QAAQ,GAAGxM,OAEpB,uBAAMzjB,GAAG,UAAUkjB,UAAU,QAA7B,UACI,cAAC,KAAD,CAAiBoG,KAAK,OAAOnG,MAAM,YAAY,IAAEiO,GAAuB7uB,SACrE,QAGP,uBAAMvC,GAAG,UAAUkjB,UAAU,oBAA7B,UAAiD,WAASkO,GAAuBtvB,MAAM,OAAQ,OAG/F,sBAAM9B,GAAG,YAAT,SACI,cAAC,KAAD,CAAYspB,KAAK,OAAOnG,MAAM,cAElC,uBAAMnjB,GAAG,WAAT,UAAoB,IAAEoxB,GAAuB5uB,gBAAoB,OAGrE,eAAC8pB,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,gCAClBkD,QAAS8N,GADb,UAC2B,IACvB,mBAAGhR,UAAU,oCAQjC,qBAAKA,UAAU,YAAf,SACI,qBAAKA,UAAU,YAAf,SACI,sBAAKA,UAAU,aAAf,UAGI,gCACI,oBAAGA,UAAU,YAAb,UAA0BK,EAAI2R,UAAU,GAAGzR,KAAK,QAC5C,uBAAMP,UAAU,cAAhB,UACI,yBAAQ,cAAS,WAAS,eAA1B,UAAyC,KAAGK,EAAI2R,UAAU,GAAGC,MAAM,QACnE,eAAC,KAAD,CAAcn1B,GAAG,eAAesmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAApE,UACKC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAK,uBAAK,cAC1B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,uBAAK,uBAAK,eACnD,uBAAOuzB,GAAUC,SAAS,IAAIxzB,YAAY,gCAIlE,0BACI/B,GAAE,qBAAgBsiB,EAAM2O,aACxB/N,UAAU,oBACVuJ,SAjLN,SAAC7vB,GAEnB20B,GAAkB30B,EAAE6pB,OAAOtqB,OAC3Bg2B,IAAcD,IACdL,IAAkB,GAClBE,IAAiB,IA6KO51B,MAAQm1B,GACRlzB,WAAUgzB,GAAuBlvB,UAMzC,gCACI,oBAAGghB,UAAU,YAAb,UAAyB,IAAEK,EAAI2R,UAAU,GAAGzR,KAAK,QAC7C,uBAAMP,UAAU,cAAhB,UACI,yBAAQ,cAAS,WAAS,gBAA1B,UAA0C,IAAEK,EAAI2R,UAAU,GAAGC,MAAM,OACnE,eAAC,KAAD,CAAcn1B,GAAG,gBAAgBsmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAArE,UACCC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAK,uBAAK,cACtB,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,uBAAK,uBAAK,eACnD,uBAAOuzB,GAAUC,SAAS,IAAIxzB,YAAY,gCAIlE,qBAAKmhB,UAAWkO,GAAuBlvB,KAAO,sBAAuB,cAArE,gBACEsvB,SADF,IACEA,QADF,EACEA,GAAkBl0B,KAAI,SAAC2F,EAAUpB,GAAX,OACpB6tB,EAAG,aAAD,OAAcpN,EAAM2O,YAApB,YAAmChuB,EAAKjD,IAC1C2vB,EAAG,aAAD,OAAcrN,EAAM2O,YAApB,YAAmChuB,EAAKjD,IAC1C4vB,EAAG,cAAD,OAAetN,EAAM2O,YAArB,YAAoChuB,EAAKjD,IAC3C6vB,EAAG,aAAD,OAAcvN,EAAM2O,YAApB,YAAmChuB,EAAKjD,IAC1C8vB,EAAG,aAAD,OAAcxN,EAAM2O,YAApB,YAAmChuB,EAAKjD,IAC1CmwB,EAAG,mBAAD,OAAoB7N,EAAM2O,YAA1B,YAAyChuB,EAAKjD,IAEhD,mCACA,sBAAKA,GAAI0vB,EAAT,UAAc,MACV,qBAAK1vB,GAAI2vB,EAAIzM,UAAU,UAAvB,SACI,uBACIoD,KAAK,WAELtmB,GAAI4vB,EAAIvvB,KAAMuvB,EACdpD,QAASvpB,EAAK9E,OACdsuB,SAAU2H,GACVh2B,SAAU6E,EAAK7E,UAJVwxB,KAQb,sBAAK5vB,GAAI6vB,EAAI3M,UAAU,gCAAvB,UACK,IACAjgB,EAAK5C,QAEV,qBAAKL,GAAI8vB,EAAI5M,UAAWjgB,EAAK9E,OAAS,gBAAgB,eAAtD,SACI,0BACI6B,GAAImwB,EACJjN,UAAU,uCACVqD,YAActjB,EAAKlB,YACnB5F,MAAO8G,EAAK5E,cACZouB,SAAU8H,GACVn2B,WAAUgzB,GAAuBlvB,sBAUrD,gCAGI,oBAAGghB,UAAU,QAAb,UAAsBK,EAAI2R,UAAU,GAAGzR,KAAK,QACxC,uBAAMP,UAAU,cAAhB,UACI,yBAAQ,cAAS,WAAS,gBAA1B,UAA0C,IAAEK,EAAI2R,UAAU,GAAGC,MAAM,OACnE,eAAC,KAAD,CAAcn1B,GAAG,gBAAgBsmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAArE,UACKC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAK,uBAAK,cAC1B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,uBAAK,uBAAM,eACpD,uBAAOuzB,GAAUC,SAAS,IAAIxzB,YAAY,gCAMlC,GAA/BqvB,GAAuBlvB,MACpB,oBAAGghB,UAAU,OAAb,UACI,uBAAMA,UAAU,mBAAhB,UACKK,EAAI2R,UAAU,GAAGzR,KAAK,4BACtBF,EAAI2R,UAAU,GAAGzR,KAAK,QACvB,uBACI6C,KAAK,OACLtmB,GAAG,qBACHK,KAAK,qBACL6iB,UAAU,gBACVqD,YAAahD,EAAIuF,UAAU,GAAGrF,KAC9BsE,MAAO,CAAE2B,QAAS,UAClBvtB,MAAOs4B,GACPhI,SA9KrB,SAAC7vB,GAChB83B,GAAY93B,EAAE6pB,OAAOtqB,OACrBT,QAAQC,IAAI,aAAaiB,EAAE6pB,OAAOtqB,OAClC04B,GAAQj4B,EAAE6pB,OAAOtqB,aA8KW,sBAAM4rB,MAAO,CAAC0N,WAAW,SAASvS,UAAU,yBAAyBkD,QA7JxE,WACzBwO,GAAqB,IAGrB,IAAIc,EAAgBtK,SAASC,eAAe,aACxCqK,IAAYA,EAAUv5B,MAAO,IACjCu4B,GAAY,IACZlC,MAsJ4B,SAAqG,SAK7G,qBAAKtP,UAAYkO,GAAuBlvB,KAAO,sBAAwB,6BAAvE,SACGyyB,GAAkBt4B,OAAO,EACrB,0CACEs4B,SADF,IACEA,QADF,EACEA,GAAmBr3B,KAAI,SAAE4F,EAAWrB,GAAb,OACnB6tB,EAAE,qBAAiBpN,EAAM2O,YAAvB,YAAsC/tB,EAAKlD,IAC7C2vB,EAAE,qBAAiBrN,EAAM2O,YAAvB,YAAsC/tB,EAAKlD,IAC7C4vB,EAAE,sBAAkBtN,EAAM2O,YAAxB,YAAuC/tB,EAAKlD,IAC9C6vB,EAAE,qBAAiBvN,EAAM2O,YAAvB,YAAsC/tB,EAAKlD,IAC7C,mCACG,sBAAKA,GAAI0vB,EAAT,UACK,IAED,sBAAK1vB,GAAI2vB,EAAIzM,UAA0B,GAAdhgB,EAAKhE,OAAe,qCAAuC,cAAeF,MAAOkE,EAAKlE,MAA/G,UACI,qBAAKkkB,UAAU,UAAf,SACI,uBACIoD,KAAK,WAELtmB,GAAI4vB,EACJvvB,KAAMuvB,EACNpD,QAAStpB,EAAK/E,OACdsuB,SAAU+H,GACVp2B,SAAU8E,EAAK9E,UALVwxB,KAQb,sBAAK5vB,GAAI6vB,EAAI3M,UAAU,gCAAvB,UAEI,uBAAMA,UAAU,cAAhB,UAA8B,KAAGhgB,EAAKiF,QAAQ,UAE9C,uBAAM+a,UAAU,GAAhB,UAAmB,IAAEhgB,EAAKrE,YAAY,oBAEtC,uBAAMqkB,UAAU,cAAhB,UAA8B,IAAEhgB,EAAKkF,cAAc,gBAEnD,uBAAM8a,UAAWhgB,EAAK1D,mBAAtB,UAA0C,IAAE0D,EAAK5D,eAAe,uBAOrF,0CACEoyB,SADF,IACEA,QADF,EACEA,GAAkBp0B,KAAI,SAAE4F,EAAWrB,GAAb,OAClB6tB,EAAE,oBAAgBpN,EAAM2O,YAAtB,YAAqC/tB,EAAKlD,IAC5C2vB,EAAE,oBAAgBrN,EAAM2O,YAAtB,YAAqC/tB,EAAKlD,IAC5C4vB,EAAE,qBAAiBtN,EAAM2O,YAAvB,YAAsC/tB,EAAKlD,IAC7C6vB,EAAE,oBAAgBvN,EAAM2O,YAAtB,YAAqC/tB,EAAKlD,IAC3C,mCACE,sBAAKA,GAAI0vB,EAAT,UACK,IAID,sBAAK1vB,GAAI2vB,EAAIzM,UAA0B,GAAdhgB,EAAKhE,OAAe,qCAAuC,cAAgBF,MAAOkE,EAAKlE,MAAhH,UACI,qBAAKkkB,UAAU,UAAf,SACI,uBACIoD,KAAK,WAELtmB,GAAI4vB,EACJvvB,KAAMuvB,EACNpD,QAAStpB,EAAK/E,OACdsuB,SAAU+H,GACVp2B,SAAU8E,EAAK9E,UALVwxB,KAQb,sBAAM5vB,GAAI6vB,EAAI3M,UAAU,gCAAxB,UAEI,uBAAMA,UAAU,cAAhB,UAA8B,IAAEhgB,EAAKiF,QAAQ,SAE7C,uBAAM+a,UAAU,GAAhB,UAAmB,IAAEhgB,EAAKrE,YAAY,mBAEtC,uBAAMqkB,UAAU,cAAhB,UAA8B,IAAEhgB,EAAKkF,cAAc,gBAEnD,uBAAM8a,UAAWhgB,EAAK1D,mBAAtB,UAA0C,IAAE0D,EAAK5D,eAAe,4BAYhG,sBAAK4jB,UAAU,wBAAf,UACqC,GAA/BkO,GAAuBlvB,MACtB,qCACG0vB,GACK,qCAAE,IAAC,yBAAQxL,QAASqM,GAAcvP,UAAU,iBAAzC,UAA0D,KAAE,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAU,GAAGtM,WAA0B,UAC/I,qCAAE,IAAC,yBAAQ2C,QAASqM,GAAcvP,UAAU,mBAAmB9kB,UAAQ,EAApE,UAAqE,KAAE,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAU,GAAGtM,QAAiB,OAAU,UAEhKqO,GACK,qCAAE,IAAC,yBAAQ1L,QAASwN,GAAa1Q,UAAU,iBAAxC,UAAyD,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAU,GAAGtM,QAAiB,OAAU,UAC9I,qCAAE,IAAC,yBAAQ2C,QAASwN,GAAa1Q,UAAU,mBAAmB9kB,UAAQ,EAAnE,UAAoE,IAAC,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAU,GAAGtM,QAAiB,OAAU,UAE9JuO,IACM,qCAAE,IAAC,yBAAQ5L,QA1bzB,WAElBgE,GAAgB,GAEhBiI,GAAkB9C,kBAAkBjN,EAAMxmB,WAAYwmB,EAAM2O,aAC3DtL,MAAK,SAACC,GAEkB,KAAjBA,EAASpqB,QACToK,EAAwBggB,EAASvqB,MAAMsqB,MAAM,SAASgQ,GACvB,GAAvBA,EAAkBr6B,MAClBuK,EAAuByc,EAAM2O,aAC7BsB,KACAnI,GAAgB,GAChBwC,KAAMC,KAAK,CACP9D,KAAM,UAEN+D,kBAAmB,SACnBC,mBAAoB,UACpB7F,MAAO,MACPloB,MAAOukB,EAAIoP,SAAS,GAAGlP,WAOvC2G,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DgG,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,4CAA4C,KACpGwE,GAAgB,GAChBkI,SA0Z+DpP,UAAU,qBAA1C,UAA+D,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAU,GAAGtM,QAAiB,OAAU,aAIhK,yBAAQ2C,QAAS8N,GAAchR,UAAU,mBAAzC,UAA4D,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAU,GAAGtM,QAAiB,OAAU,iBAQ5J0G,GAAgB,cAACpD,EAAD,OC16BlC,IAAMrD,GAAU1X,iDAgDD4pB,GATS,CACpBC,kBArCuB,uCAAG,WAAOzN,GAAP,SAAAntB,EAAA,sEAET6oB,IAAMC,KAAKL,GAAU,kBAAmB,eACjD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHvC,mFAAH,sDAsCvB0N,8BAhCmC,uCAAE,WAAO1N,GAAP,SAAAntB,EAAA,sEAEpB6oB,IAAMC,KAAKL,GAAU,8BAA+B,eAC7D,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAH5B,mFAAF,sDAiCnC2N,oBA3ByB,uCAAE,WAAO3N,GAAP,SAAAntB,EAAA,sEAEV6oB,IAAMC,KAAKL,GAAU,iBAAkB,eAChD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHtC,mFAAF,sDA4BzB4N,mBAtBwB,uCAAE,WAAO5N,GAAP,SAAAntB,EAAA,sEAET6oB,IAAMC,KAAKL,GAAU,gBAAiB,eAC/C,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHvC,mFAAF,sDAuBxB6N,kBAjBuB,uCAAG,WAAO7N,GAAP,SAAAntB,EAAA,sEAET6oB,IAAMC,KAAKL,GAAU,kBAAmB,eACjD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHvC,mFAAH,sDAkBvB8N,iBAZsB,uCAAG,WAAO9N,GAAP,SAAAntB,EAAA,sEAER6oB,IAAMC,KAAKL,GAAU,cAAe,eAC7C,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHxC,mFAAH,uDCDT,SAAS8H,GAAU5N,GAI9B,IAoCI6T,EAAIzG,EAAI0G,EAAKzG,EApCjB,EAGI9xB,GAAc,SAAC0kB,GAAD,MAAgB,CAC1BrkB,wBAAyBqkB,EAAMrkB,wBAC/BD,iBAAkBskB,EAAMtkB,iBACxBM,oCAAqCgkB,EAAMhkB,oCAC3CD,iBAAkBikB,EAAMjkB,iBACxBN,4BAA6BukB,EAAMvkB,4BACnCF,sBAAuBykB,EAAMzkB,0BAT7BI,EAAR,EAAQA,wBAAyBD,EAAjC,EAAiCA,iBACzBM,EADR,EACQA,oCAAqCD,EAD7C,EAC6CA,iBACrCN,EAFR,EAEQA,4BAUR,EAIIqD,GAAe,SAACkhB,GAAD,MAAgB,CAC3B5gB,4BAA6B4gB,EAAM5gB,4BACnCD,sBAAuB6gB,EAAM7gB,sBAC7BD,gBAAiB8gB,EAAM9gB,gBACvB+C,sBAAuB+d,EAAM/d,sBAC7BxB,wBAAyBuf,EAAMvf,wBAC/BD,kBAAmBwf,EAAMxf,kBACzBc,2BAA4B0e,EAAM1e,2BAClCD,uBAAwB2e,EAAM3e,uBAC9BpC,6BAA8B+gB,EAAM/gB,iCAbpCG,EAAR,EAAQA,4BAA8BD,EAAtC,EAAsCA,sBAAuBD,EAA7D,EAA6DA,gBACrD+C,EADR,EACQA,sBACAxB,EAFR,EAEQA,wBACAxB,GAHR,EAEiCuB,kBAFjC,EAGQvB,8BAoBJ+hB,GAHI9kB,EAAQ,IAGN+kB,EAAa0M,WAIjB70B,EAAYoG,EAChB,EAAwCihB,mBAAS,IAAjD,mBAAO2T,EAAP,KAAqBC,EAArB,KACA,EAAkC5T,mBAAS,GAA3C,mBAAO6T,EAAP,KAAkBC,EAAlB,KACA,EAAoC9T,mBAAS,GAA7C,mBAAO+T,EAAP,KAAmBC,EAAnB,KAIF,EAAmChU,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAqDxH,oBAAS,GAA9D,mBAAOiU,EAAP,KAA2BC,EAA3B,KACA,EAAuClU,oBAAS,GAAhD,mBAAOyH,EAAP,KAAoBC,EAApB,KAEA,EAA4C1H,oBAAS,GAArD,mBAAOmU,GAAP,KAAuBC,GAAvB,KAEA,GAA6BpU,oBAAS,GAAtC,qBAAOqU,GAAP,MAAeC,GAAf,MAIAnU,qBAAU,WAERP,EAAMF,mBACN1gB,IACAhG,QAAQkkB,UACR,IAEFiD,qBAAU,WACRuH,GAAgB,GAChB6M,GAAiBpB,kBAAkBvT,EAAMxmB,YACtC6pB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACT0C,EAAwB0nB,EAASvqB,MAAMsqB,MAAM,SAASrK,OAI1D8O,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,GACnD9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,kCAAkC,KACzFwE,GAAgB,GAChBkI,UAEN,IAEFzP,qBAAU,WACRuH,GAAgB,GAChB6M,GAAiBnB,8BAA8BxT,EAAMxmB,YAClD6pB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACT+C,EAAoCqnB,EAASvqB,MAAMsqB,MAAM,SAASrK,GAEhE4O,GAAcD,MAGpBG,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,iDAAkDmqB,GAC/D9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,8CAA8C,KACrGwE,GAAgB,GAChBkI,UAEN,IAEFzP,qBAAU,WACRmU,IAAW,GACX5M,GAAgB,GAChBiI,GAAkBxI,sBAAsBvH,EAAMxmB,YAC3C6pB,MAAK,SAASC,GACU,KAAjBA,EAASpqB,QACTmG,EAA4BikB,EAASvqB,MAAMsqB,MAAM,SAASrK,GAExD0b,IAAW,MAGjB5M,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,yCAA0CmqB,EAAGF,SAASpqB,QAC3C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,mDAEZ6F,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,IAAK,uCAAuC,KAChG0M,MAEJlI,GAAgB,MAEpBF,GAAcD,KAChB,IAEFpH,qBAAU,WAGNxnB,EAAKoG,EACLm1B,GAAuBD,KACzB,CAAC1M,IAEHpH,qBAAU,WAER,IAAMqU,EAAYT,EA9FG,GA+FrBH,EAAgBj7B,EAAK87B,MAAMV,EAAYS,IACvCV,EAAaY,KAAKC,KAAKh8B,EAAKgB,OAhGP,KAiGrB6tB,GAAcD,KAEb,CAACwM,EAnGmB,GAmGOp7B,IAE9BwnB,qBAAU,WACPC,OAAOC,SAAS,CAACC,IAAI,MACtB,CAACqT,IAIH,IAAM/D,GAAmB,WAAQhQ,EAAMgQ,oBACjCxE,GAAuB,WAAQxL,EAAMwL,wBAErCyE,GAAmB,WAEvBrI,GAAcD,IAGVwJ,GAAsB,SAACzzB,GAG3B02B,EAAc,IACdA,EAAc,GACdI,IAAkB,GAClBE,IAAW,GACX9M,GAAcD,IASVkK,GAAuB,SAACmD,GAEhB,GAARA,EACAR,IAAkB,GAGlBtyB,EAAsB8yB,GAAQ,EAAO,KAAM,wBAE/CpN,GAAcD,IAmBhB,OACC,qCAEwC,GAAhC3H,EAAMzB,UAAU,GAAGG,aAClB,qCAAE,IAAC,uBAAOkC,UAAU,YAAjB,SAA6B,iHAAiH,OAIrJ,qBAAKA,UAAU,aAAf,SACI,yBAAQkD,QAzBoB,WACpC,IAAIniB,EAAU0K,KAAKC,MAAMD,KAAKE,UAAU5Q,IACpCoG,EAAUsK,KAAKC,MAAMD,KAAKE,UAAUvQ,IACxC0E,EAAwBiB,EAAUI,GAClCuyB,GAAuB3M,GACvB6M,IAAkB,IAoBsC5T,UAAU,gBAAgBljB,GAAG,SAA7E,UAAsF,IAAEujB,EAAI0M,QAAQ,GAAGxM,KAAK,SAIhH,8BACGoT,IACE,mCACG,qBAAK3T,UAAU,YAAf,SACM,cAACuM,GAAD,CAEE3zB,WAAYwmB,EAAMxmB,WAClBg1B,cAAc,EACdG,YAAa,EACbhzB,iBAAkBA,EAClBK,iBAAkBA,EAClB61B,qBAAsBA,GACtB5B,iBAAoBA,GACpBkB,oBAAuBA,GACvBnB,iBAAoBA,GACpBxE,qBAAyBA,IAVpB,SAiBc,KACnC,qCAGIuI,QAHJ,IAGIA,OAHJ,EAGIA,EAAc/4B,KAAI,SAACsB,EAAOiD,GAAR,OACjBs0B,EAAE,kCAA+Bv3B,EAAE2D,MAAjC,2EACgC3D,EAAEkD,MADlC,uBAEF4tB,EAAE,gCAA6B9wB,EAAE4D,aAA/B,WACF4zB,EAAG,gCAA4Bx3B,EAAE4D,aAA9B,WAGHmtB,EACC,mCACE,sBAAK3vB,GAAE,mBAAcpB,EAAEoB,IAAvB,UAEE,uBAAMA,GAAG,WAAT,UACE,sBAAMkjB,UAAU,qCAAhB,SAAsDtkB,EAAEmD,cACxD,cAAC,KAAD,CAAiBunB,KAAK,OAAOnG,MAAM,eAIrC,sBAAM+B,wBAAyB,CAAEC,OAAQgR,KAGzC,+BACsB,YAAnBv3B,EAAE4D,aACE,qCACC,cAAC,KAAD,CAAY8mB,KAAK,OAAOnG,MAAM,YAC9B,sBAAM+B,wBAAyB,CAAEC,OAAQuK,QAE1C,qCACC,cAAC,KAAD,CAAYpG,KAAK,OAAOnG,MAAM,YAC9B,sBAAM+B,wBAAyB,CAAEC,OAAQiR,eAOtD,mCACe,GAAbx3B,EAAEkE,WACA,qCACC,uBACA,eAACy0B,GAAA,EAAD,CAAYC,WAAS,EAArB,UACE,cAACC,GAAA,EAAD,CACEC,OAAQ/H,EAGR3vB,GAAIpB,EAAEoB,GACN23B,YAAa/4B,EAAE0D,QACf8jB,QAAS,kBAtHAkR,EAsH0B14B,EAAEoB,GAtHhB43B,EAsHoBh5B,EAAE0D,QApH7DkC,EAAsB8yB,GAASM,EAAW,KAAM,4BAChD1N,GAAcD,GAHY,IAACqN,EAAYM,IAmHhBh5B,EAAE8iB,KAMJqV,IACC,mCACGn4B,EAAE0D,SACC,cAACmtB,GAAD,CAEI3zB,WAAYwmB,EAAMxmB,WAClBg1B,cAAc,EACdG,YAAaryB,EAAEoB,GACf/B,iBAAkBA,EAClBK,iBAAkBA,EAElB61B,qBAAsBA,GACtB5B,iBAAoBA,GACpBkB,oBAAuBA,GACvBnB,iBAAoBA,GACpBxE,qBAAyBA,IAXpBlvB,EAAEoB,mBAuBrC,uBAAK,uBAGDu2B,EAAY,GACX,mCACG,cAAC,KAAD,CAEEsB,eAAe,MACfC,UACA,cAAC,KAAD,CAAuB/P,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAUtC,WAAY,WAE/FuC,mBAAoB,EACpBzB,UAAWA,EACX0B,cACE,cAAC,KAAD,CAAqBlQ,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAWtC,WAAY,UAEhGyC,sBAAuB,KACvBC,mBAAmB,aACnBC,kBAAkB,WAClBC,sBAAsB,WACtBC,kBAAkB,WAClBC,gBAAgB,SAChBC,sBAAsB,OACtBC,aAlJU,SAACC,GACvB,IAAMC,EAvJe,GAuJFD,EAAME,SAA2Bv9B,EAAKgB,OAEzDq6B,EAAciC,GACdzO,GAAcD,QAqJRE,GAAgB,cAACpD,EAAD,O,sBC/XxBrD,GAAU1X,kDAsDD6sB,GATS,CACpBC,mBAzCwB,uCAAG,WAAO1Q,GAAP,SAAAntB,EAAA,sEAEV6oB,IAAMC,KAAKL,GAAU,mBAAoB,eAClD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHtC,mFAAH,sDA0CxB2Q,wBAnC6B,uCAAG,WAAO3Q,EAAWpoB,GAAlB,SAAA/E,EAAA,sEAEf6oB,IAAMC,KAAKL,GAAU,yBAAyB1jB,EAAK,eAC5D,CAACgkB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHjC,mFAAH,wDAoC7B4Q,qBA7B0B,uCAAI,WAAO5Q,EAAWjuB,GAAlB,SAAAc,EAAA,sEAEb6oB,IAAMC,KAAKL,GAAU,qBAAsBvpB,EACpD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHnC,mFAAJ,wDA8B1B6Q,wBAvB6B,uCAAI,WAAO7Q,EAAWjuB,GAAlB,SAAAc,EAAA,sEAEhB6oB,IAAMC,KAAKL,GAAU,wBAAyBvpB,EACvD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHhC,mFAAJ,wDAwB7B8Q,sBAjB2B,uCAAI,WAAO9Q,EAAWjuB,GAAlB,SAAAc,EAAA,sEAEd6oB,IAAMC,KAAKL,GAAU,mBAAoBvpB,EAClD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHlC,mFAAJ,yDCrCzB1E,GAAU1X,8CAyBDmtB,GALQ,CACjBC,yBAhB4B,uCAAG,WAAOhR,EAAWiR,GAAlB,SAAAp+B,EAAA,sEAGlB6oB,IAAMC,KAAKL,GAAU,sBAAuB2V,EACvD,CAAErV,QAAS,CAAE,cAAgBoE,KAJA,mFAAH,wDAiB5BkR,yBAT4B,uCAAG,WAAOlR,EAAWiR,GAAlB,SAAAp+B,EAAA,sEAGlB6oB,IAAMC,KAAKL,GAAU,sBAAuB2V,EACvD,CAAErV,QAAS,CAAE,cAAgBoE,KAJA,mFAAH,yDCmCnB,SAASmR,GAAajX,GAA0B,IAAD,IA8CtD6T,EAAQzG,EAAQC,EAAQC,EAAgBE,EAAQK,EAAQqJ,EAASC,EA7CnEj7B,EAAIC,EAAQ,IAGZ,EAKIgJ,GAAe,SAAC8a,GAAD,MAAgB,CAC3BxR,8BAA+BwR,EAAMxR,8BACrCE,4BAA6BsR,EAAMtR,4BACnClH,eAAgBwY,EAAMxY,eACtB0F,aAAc8S,EAAM9S,aACpByB,mBAAoBqR,EAAMrR,mBAC1BxB,kBAAmB6S,EAAM7S,kBACzB0B,qBAAsBmR,EAAMnR,qBAC5BxJ,6BAA8B2a,EAAM3a,iCAbpCmJ,EAAR,EAAQA,8BACAE,EADR,EACQA,4BACAlH,EAFR,EAEQA,eACA0F,EAHR,EAGQA,aAAcyB,EAHtB,EAGsBA,mBAAoBxB,EAH1C,EAG0CA,kBAAmB0B,EAH7D,EAG6DA,qBACrDxJ,EAJR,EAIQA,6BAYR,EAEI3B,GAAmB,SAACsc,GAAD,MAAgB,CAC/B/a,qBAAsB+a,EAAM/a,qBAC5BpB,iCAAkCmc,EAAMnc,qCAJxCoB,EAAR,EAAQA,qBACApB,EADR,EACQA,iCAMR,EAEIkM,GAAW,SAACiQ,GAAD,MAAgB,CACvB5P,+BAAgC4P,EAAM5P,+BACtCF,yBAA0B8P,EAAM9P,yBAChCF,mBAAoBgQ,EAAMhQ,uBAL1BI,EAAR,EAAQA,+BACAF,EADR,EACQA,yBAUNinB,GAXF,EACkCnnB,mBAUX,CACvB,GAAK,EACL,SAAW,CAAE,GAAK,EAAI,SAAW,KAAO,QAAU,KAAM,SAAW,CAAE,GAAK,KAAM,KAAO,KAAM,WAAa,KAAM,MAAQ,KAAM,MAAQ,SAIpIonB,EAAQnW,EAAaoW,GACrB7J,EAAYvM,EAAawM,OACgD6J,EAAU,GACnFC,EAAW,GACXC,EAAiB,GACjBC,EAAgB,CAACh6B,GAAI,KAAMK,KAAM,IAEjC45B,EAAkB,GAClBC,EAAkB,GAGtB,EAAmCxX,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAiFxH,oBAAS,GAA1F,mBAAOyX,EAAP,KAAyCC,EAAzC,KACA,EAAuC1X,oBAAS,GAAhD,mBAAoB0H,IAApB,WAEA,GAA4B1H,oBAAS,GAArC,qBACA,IADA,YAC+DA,mBAASJ,EAAM3Y,qBAA9E,qBAAO0wB,GAAP,MACA,IADA,MACmD3X,mBAASJ,EAAM3Y,mBAAmBkB,WAArF,qBAAOyvB,GAAP,MAGA,IAHA,MAGyD5X,mBAASJ,EAAM3Y,mBAAmBkB,SAASyB,kBAApG,qBAAOiuB,GAAP,MACA,IADA,MACyD7X,mBAASJ,EAAM3Y,mBAAmBkB,SAAS2B,cAApG,qBAAOguB,GAAP,MACA,IADA,MACyD9X,mBAASJ,EAAM3Y,mBAAmBkB,SAASmF,mBAApG,qBAAOyqB,GAAP,MACA,IADA,MAC6D/X,mBAASJ,EAAM3Y,mBAAmBkB,SAASoF,qBAAxG,qBAAOyqB,GAAP,MACA,IADA,MACiEhY,mBAASJ,EAAM3Y,mBAAmBkB,SAASqF,uBAA5G,qBAAOyqB,GAAP,MACA,IADA,MAC6DjY,mBAASJ,EAAM3Y,mBAAmBkB,SAASsF,qBAAxG,qBAAOyqB,GAAP,MACA,IADA,MAC6DlY,mBAASJ,EAAM3Y,mBAAmBkB,SAASuF,qBAAxG,qBAAOyqB,GAAP,MACA,IADA,MAC6DnY,mBAASJ,EAAM3Y,mBAAmBkB,SAASwF,qBAAxG,qBAAOyqB,GAAP,MACA,IADA,MACyDpY,mBAASJ,EAAM3Y,mBAAmBkB,SAAS8B,kBAApG,qBAAOouB,GAAP,MACA,IADA,MACyDrY,mBAASJ,EAAM3Y,mBAAmBkB,SAAS0B,kBAApG,qBAAOyuB,GAAP,MAGA,IAHA,MAG8CtY,mBAAS6X,GAAqB,GAAGr6B,aAA/E,qBAAO+6B,GAAP,MAAwBC,GAAxB,MACA,GAAsDxY,mBAASJ,EAAM3Y,mBAAmBkB,SAAShB,SAAS1J,OAA1G,qBAAOg7B,GAAP,MAEA,IAFA,MAE8CzY,mBAASJ,EAAM3Y,mBAAmBkB,SAAShB,WAAzF,qBAAOuxB,GAAP,MAAwBC,GAAxB,MACA,GAA8B3Y,mBAASJ,EAAM3Y,mBAAmBgE,cAAhE,qBAAO2tB,GAAP,MACA,IADA,MACkC5Y,mBAASJ,EAAM3Y,mBAAmBiE,iBAApE,qBAAO2tB,GAAP,MACA,IADA,MAC+B7Y,mBAASJ,EAAM3Y,mBAAmBkE,gBAAjE,qBAAO2tB,GAAP,MACA,IADA,MAC8B9Y,oBAAS,IAAvC,qBACA,IADA,YAC8BA,oBAAS,IAAvC,qBACA,IADA,YAC8BA,oBAAS,IAAvC,qBACA,IADA,YAC8CA,mBAAS0Y,GAAgBh7B,QAAvE,qBAAOq7B,GAAP,MAAwBC,GAAxB,MACA,GAAsDhZ,mBAAS0Y,GAAgBh7B,OAA/E,qBAAOu7B,GAAP,MAA4BC,GAA5B,MACA,GAA0DlZ,mBAAS0Y,GAAgBh7B,OAAnF,qBAAOy7B,GAAP,MAA8BC,GAA9B,MACA,GAA8DpZ,mBAAS0Y,GAAgBh7B,OAAvF,qBAAO27B,GAAP,MAAgCC,GAAhC,MACA,GAA0DtZ,mBAAS,CAAC1iB,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAA3F,qBAAO89B,GAAP,MAA8BC,GAA9B,MACA,GAA0DxZ,mBAAS,CAAC1iB,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAA3F,qBAAOg+B,GAAP,MAA8BC,GAA9B,MACA,GAA0D1Z,mBAAS,CAAC1iB,GAAG,GAAIK,KAAK,GAAIlC,QAAO,IAA3F,qBAAOk+B,GAAP,MAA8BC,GAA9B,MACA,GAAgC5Z,mBAAS,IAAzC,qBAAO6Z,GAAP,MAAiBC,GAAjB,MACA,GAAoC9Z,mBAAS,IAA7C,qBAAO+Z,GAAP,MAAmBC,GAAnB,MACA,GAAgCha,mBAAS,IAAzC,qBAAiBia,IAAjB,aACA,GAAgCja,mBAAS,IAAzC,qBAAiBka,IAAjB,aACA,GAAgCla,mBAAS,IAAzC,qBAAiBma,IAAjB,aAEA,GAAuDna,mBAASJ,EAAM3Y,mBAAmBkB,SAASpI,YAAlG,qBAAOq6B,GAAP,MAA6BC,GAA7B,MACA,GAAqDra,mBAASJ,EAAM3Y,mBAAmBkB,SAAS+B,UAAhG,qBAAOowB,GAAP,MAA4BC,GAA5B,MACA,GAAiDva,mBAASJ,EAAM3Y,mBAAmBkB,SAASkC,WAA5F,qBAAOmwB,GAAP,MAA0BC,GAA1B,MACA,GAAqDza,mBAASJ,EAAM3Y,mBAAmBgE,cAAvF,qBAA4ByvB,IAA5B,aACA,GAAyD1a,mBAASJ,EAAM3Y,mBAAmBiE,gBAA3F,qBAA8ByvB,IAA9B,aACA,GAAuD3a,mBAASJ,EAAM3Y,mBAAmBkE,eAAzF,qBAEA,IAFA,YAEgE6U,oBAAS,IAAzE,qBAAO4a,GAAP,MAAiCC,GAAjC,MACA,GAAgC7a,oBAAS,GAAzC,qBAAO8a,GAAP,MAAiBC,GAAjB,MACA,GAA0D/a,oBAAS,GAAnE,qBAAOgb,GAAP,MAA8BC,GAA9B,MAEA,GAAoCjb,oBAAS,GAA7C,qBAAmBkb,IAAnB,aAGA/a,qBAAU,WACRnnB,QAAQC,IAAI,oCACZD,QAAQC,IAAI,4CAA4C2mB,EAAM8O,wBAG9D,IAAM3sB,EAAIkK,KAAKC,MAAMD,KAAKE,UAAUusB,KACpC,GAAI9Y,EAAM3Y,mBAAmBgE,aAAa,CACtC,IAAIe,EAASjK,EAAErE,MAAMC,KACjBnF,EAAOwT,EAAOvN,UAAUuN,EAAOrS,OAAS,GAC5CmgC,GAAYthC,GAEZQ,QAAQC,IAAI,kCAAmCggC,IAC/CjgC,QAAQC,IAAI,0BAA2B4gC,IAE3C,GAAIja,EAAM3Y,mBAAmBiE,eAAe,CACxC,IAAIc,EAAS0sB,GAAgBh7B,MAAMC,KAC/BnF,EAAOwT,EAAOvN,UAAUuN,EAAOrS,OAAS,GAC5CqgC,GAAcxhC,GAEdQ,QAAQC,IAAI,kCAAmCggC,IAC/CjgC,QAAQC,IAAI,4BAA6B8gC,OAY7C,IAEF5Z,qBAAU,WACRnnB,QAAQC,IAAI,4CACZy+B,GAAqCD,KACpC,CAAClQ,IAGJ,IAAMqI,GAAmB,WAAQhQ,EAAMgQ,oBACjCxE,GAAuB,WAAQxL,EAAMwL,wBAErC+P,GAAqB,WAAQvb,EAAMub,sBAEnCC,GAAiC,WACnC5T,GAAcD,GACd4T,MAGEE,GAAiB,SAACnhC,GAEtBs+B,GAAmBt+B,EAAE6pB,OAAOtqB,OAC5BshC,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,IAIlBe,GAAoB,WAExBhE,EAAgB,CAACh6B,GAAI,KAAMK,KAAM,IACjC,IAAI49B,GAAO,EACX,GAAwB,OAApBxC,GAAgBz7B,IAAiC,MAApBy7B,GAAgBz7B,GAG7C,GAFDtE,QAAQC,IAAI,MAEN6/B,GAkBD,OAAQ9rB,GACN,IAAK,QAAWsqB,EAAc35B,KAAO47B,GAAsB57B,KAAM,MACjE,IAAK,UAAW25B,EAAc35B,KAAO87B,GAAsB97B,KAAM,MACjE,IAAK,SAAW25B,EAAc35B,KAAOg8B,GAAsBh8B,UApB7C,OAAhBm6B,SAAgB,IAAhBA,OAAkBl9B,KAAI,SAAC4gC,EAAQC,GACzBD,EAAG79B,MAAQs7B,GAAoBt7B,OAC/B49B,GAAO,EACPjE,EAAch6B,GAAKk+B,EAAGl+B,GACtBg6B,EAAc35B,KAAO69B,EAAG79B,SAGhB,GAAV49B,IAEAjE,EAAc35B,KAAO,GAChBiiB,EAAM3Y,mBAAmBgE,cAAiB2U,EAAM3Y,mBAAmBiE,iBAAkBosB,EAAc35B,KAAOs7B,GAAoBt7B,MAC/HiiB,EAAM3Y,mBAAmBgE,eAAgBqsB,EAAc35B,KAAOs7B,GAAoBt7B,KAAO,IAAMw7B,GAAsBx7B,MACrHiiB,EAAM3Y,mBAAmBiE,iBAAkBosB,EAAc35B,KAAOs7B,GAAoBt7B,KAAO,IAAM07B,GAAwB17B,YAavI25B,EAAch6B,GAAKy7B,GAAgBz7B,GACnCg6B,EAAc35B,KAAOo7B,GAAgBp7B,KAGvC3E,QAAQC,IAAI,2CAA4Cq+B,IA2KpDoE,GAAiB,WACI,IAAlBrE,EACHnN,KACGC,KAAK,CACJ9D,KAAM,OACNiK,kBAAmB,UACnBD,iBAAkB,SAClBH,kBAAkB,EAClBC,mBAAkB,EAClB3L,MAAO,MACPloB,MAAO,4CACPi0B,KAAM,oCAAsC8G,EAAiB,WAKjEnN,KACCC,KAAK,CACJ9D,KAAM,OACNiK,kBAAmB,UACnBD,iBAAkB,SAClBH,kBAAkB,EAClBC,mBAAkB,EAClB3L,MAAO,MACPloB,MAAO,4CACPi0B,KAAM,QAAU0G,EAAMhH,SAAS,IAAIlP,KAAO,YAO5C4a,GAAuB,WAC3BC,KACAlU,IAAgB,GAEdmU,GAAkBtF,wBAAwB3W,EAAMxmB,WAAY49B,GAC3D/T,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTuV,EAA8B6U,EAASvqB,MAAMsqB,MAAM,SAASgO,GAG1D,IAAI6K,EAAe9E,EAAe7uB,SAAShB,SACvC40B,EAAYD,EAAap+B,MACzBlF,EAAW,GAEXA,EADa,MAAbujC,EACO,CAAEz+B,GAAIy+B,EAAUz+B,GAAIK,KAAMo+B,EAAUp+B,MAEpC,KACX,IAAIq+B,EAAc,CAAE1+B,GAAIw+B,EAAax+B,GAAKK,KAAMm+B,EAAan+B,KAAMD,MAAOlF,GAC1E6hC,IAAuB,GAEvBhzB,EAAeuY,EAAMqc,MAAOrE,GAAkBt6B,GAAI,KAAM0+B,EAAa,mBAC9C,IAAlB3E,GAAyBkD,IAAsB,MAI1D7S,IAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DoM,EAA6Bke,EAAGF,UAAU,EAAM,GAAI,GAAI,4CAA4C,MACpGwE,IAAgB,GAChBkI,SAOEgM,GAAuB,WAU3B5E,EAAe15B,GAAKsiB,EAAMqc,MAC1BjF,EAAe7uB,SAAS7K,GAAIs6B,GAAkBt6B,GAG5Cg+B,KAGA,IAMIY,EAAqB,GACL,OAApB7D,SAAoB,IAApBA,OAAsBz9B,KAAI,SAACuH,EAAQg6B,GAC7Bh6B,EAAG1G,QAAUygC,EAAe75B,KAAKF,EAAG7E,OAI1C,IAAI8+B,EAAqB,GACrBC,EAAoB,CAAC/+B,GAAI,KAAMg/B,MAAO,GAW5C,OAVsB,OAApBhE,SAAoB,IAApBA,OAAsB19B,KAAI,SAAC0H,EAAQi6B,GACjCF,EAAoB,CAAC/+B,GAAI,KAAMg/B,MAAO,GAClCh6B,EAAG7G,SACH4gC,EAAmB/+B,GAAKgF,EAAGhF,GAC3B++B,EAAmBC,MAAQh6B,EAAGtE,MAC9Bo+B,EAAe/5B,KAAKg6B,OAKpB3D,GAAgBp7B,IACtB,KAAK,EACCo7B,GAAgBl7B,WAAa+6B,GAC7BG,GAAgBh7B,MAAQ,KACxBg7B,GAAgBj7B,MAAQ,KAC1B,MACJ,KAAK,EACCi7B,GAAgBl7B,WAAa,KAC7Bk7B,GAAgBh7B,MAAQ45B,EACxBoB,GAAgBj7B,MAAQ,KACxBu5B,EAAe7uB,SAASM,QAAS2zB,EACnC,MACJ,KAAK,EACC1D,GAAgBl7B,WAAa,KAC7Bk7B,GAAgBh7B,MAAQ45B,EACxBoB,GAAgBj7B,MAAS+5B,EAGjCR,EAAe7uB,SAAShB,SAAUuxB,GAClC1B,EAAe7uB,SAASK,SAAU0zB,EAElCljC,QAAQC,IAAI,0DAA0D+9B,IAiCtEwF,GAAkB,WAMtB,OAJApF,EAAS,GACTC,EAAe,GACW,MAAtBqB,GAAgBp7B,SAAoC7E,GAAtBigC,GAAgBp7B,KAC9C85B,EAAWA,EAAWH,EAAMhH,SAAS,GAAGlP,KAAO,SAC3C2X,GAAgBp7B,IAClB,KAAK,EACuB,MAAlBi7B,IAA4C,IAAlBA,KAC1BlB,EAAiBA,EAAiBJ,EAAMhH,SAAS,GAAGlP,KAAO,SACjE,MACJ,KAAK,EACC0b,KACAC,KACAC,KACAC,KACI9D,KACA+D,KACAC,KACAC,MAEJC,KACAC,KACF,MACJ,KAAK,EAECR,KACAC,KACAC,KACAC,KACI9D,KACF+D,KACAC,KACAC,MAEFC,KAEAE,KAGZxV,IAAgB,IAKZ+U,GAAc,WAGd3E,GAAiB,GAAGr8B,SACpB27B,EAAYA,EAAWH,EAAMhH,SAAS,GAAGlP,KAAO,UAKhD2b,GAAkB,WAElB5E,GAAiBA,GAAiBn+B,OAAO,GAAG8B,SAGvCq9B,GAKsB,MAArB9rB,IACAoqB,EAAWA,EAAWH,EAAMhH,SAAS,GAAGlP,KAAO,SAL7CgX,GAAsB,GAAGt8B,SACzB27B,EAAWA,EAAWH,EAAMhH,SAAS,GAAGlP,KAAO,WAUvD4b,GAAoB,WAEpB/D,IACId,GAAiBA,GAAiBn+B,OAAO,GAAG8B,QAC1Cu8B,GAAwB,GAAGv8B,SAC3B27B,EAAWA,EAAYH,EAAMhH,SAAS,IAAIlP,KAAO,UAIvD6b,GAAsB,WACtB/D,IACIf,GAAiBA,GAAiBn+B,OAAO,GAAG8B,QAC1Cw8B,GAA0B,GAAGx8B,SAC7B27B,EAAWA,EAAWH,EAAMhH,SAAS,IAAIlP,KAAO,UAKtD8b,GAAoB,WAED,SAAnB7vB,GACI8qB,GAAiBA,GAAiBn+B,OAAO,GAAG8B,QAC1Cy8B,GAAwB,GAAGz8B,SAC3B27B,EAAWA,EAAYH,EAAMhH,SAAS,IAAIlP,KAAO,UAIvD+b,GAAoB,WAED,WAAnB9vB,GACI8qB,GAAiBA,GAAiBn+B,OAAO,GAAG8B,QAC1C08B,GAAwB,GAAG18B,SAC3B27B,EAAWA,EAAYH,EAAMhH,SAAS,IAAIlP,KAAO,UAIvDgc,GAAoB,WAED,UAAnB/vB,GACI8qB,GAAiBA,GAAiBn+B,OAAO,GAAG8B,QAC1C28B,GAAwB,GAAG38B,SAC3B27B,EAAWA,EAAYH,EAAMhH,SAAS,IAAIlP,KAAO,UAKvDic,GAAmB,WACvB,IAAIhyB,GAAW,EACfqtB,GAAqBz9B,KAAI,SAACuiC,EAAQC,GAE5BD,EAAG1hC,SACHuP,GAAW,MAEH,GAAVA,IACAqsB,EAAiBA,EAAiBJ,EAAMhH,SAAS,GAAGlP,KAAO,UAG3Dkc,GAAmB,WAEnB,IAAIjyB,GAAW,EACXoa,EAAM6R,EAAMhH,SAAS,GAAGlP,KAE5BuX,GAAqB19B,KAAI,SAAC0H,EAAQ+6B,GAC5B/6B,EAAG7G,SAEHuP,GAAW,EACmB,GAA1B1I,EAAGnE,YAAY,GAAG1C,QAA2C,GAA1B6G,EAAGnE,YAAY,GAAG1C,QAA4B,GAAX4hC,IACtEjY,EAAMA,EAAM,qCAAuC9iB,EAAG3E,KAAO,iBAIvD,GAAZqN,IACFqsB,EAAiBA,EAAiBJ,EAAMhH,SAAS,GAAGlP,KAAO,SACzDqE,GAAO6R,EAAMhH,SAAS,GAAGlP,OAC3BsW,EAAiBA,EAAiBjS,EAAM,UAG1CkY,GAAwB,SAACpjC,GAK7B,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GAErB8rB,EAAOD,EAAUpuB,QAAQ,KAEzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAGlDuI,EAAOn5B,EAAKuC,QAAQ,KAGpB62B,GADQp5B,EAAKwC,OAAQ,EAAG22B,GACXn5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,IAItD0G,GAAqBz9B,KAAI,SAACuiC,EAAQC,GAC5BD,EAAG7/B,IAAMs0B,IACTuL,EAAG1hC,QAAU0hC,EAAG1hC,WAEtBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,IAIlBgD,GAAwB,SAACrjC,GAE7BlB,QAAQkkB,QAGR,IAAIrjB,EAAQK,EAAE6pB,OAAOtqB,MAEjB0vB,EAAYjvB,EAAE6pB,OAAOzmB,GAErB8rB,EAAOD,EAAUpuB,QAAQ,KAEzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAGlDuI,EAAOn5B,EAAKuC,QAAQ,KAGpB62B,GADQp5B,EAAKwC,OAAQ,EAAG22B,GACXn5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,IAGtD2G,GAAqB19B,KAAI,SAAC0H,EAAQi6B,GAC5Bj6B,EAAGhF,IAAMs0B,IACXtvB,EAAG7G,QAAU6G,EAAG7G,OACD,GAAX6G,EAAG7G,SACH6G,EAAGnE,YAAY,GAAG1C,QAAS,EAC3B6G,EAAGnE,YAAY,GAAG1C,QAAS,EAC3B6G,EAAGtE,MAAM,OAIC,GAAd4zB,GAAmB/3B,EACnBy+B,GAAqB19B,KAAI,SAAC0H,EAAQk7B,GAC5Bl7B,EAAGhF,IAAMs0B,IACTtvB,EAAG7G,QAAS,EACZ6G,EAAGnE,YAAY,GAAG1C,QAAS,EAC3B6G,EAAGnE,YAAY,GAAG1C,QAAS,EAC3B6G,EAAGtE,MAAM,MAIZs6B,GAAqB,GAAG78B,QAAS,EAExCs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,IAIlBkD,GAAa,SAACvjC,GAKlB,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GACrB8rB,EAAOD,EAAUpuB,QAAQ,KACzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAClDuI,EAAOn5B,EAAKuC,QAAQ,KAEpB62B,GADQp5B,EAAKwC,OAAQ,EAAG22B,GACXz3B,EAAE6pB,OAAOtqB,OAI1By/B,GAAuB,CAAC57B,GAAI,KAAMK,KAAM,KAAMC,YAAa,KAAMC,MAAO,OACxEi6B,GAAiBl9B,KAAI,SAAC4gC,EAAQkC,GACxBlC,EAAGl+B,IAAMs0B,GACT4J,EAAG//B,QAAS,EACZu9B,GAAmBwC,IAGnBA,EAAG//B,QAAS,KAEF,OAAZm2B,GACAmG,GAAsBn9B,KAAI,SAACuH,EAAQw7B,GAAkBx7B,EAAG1G,QAAS,KACjEs8B,GAAsB,GAAGt8B,QAAS,EAClCg/B,IAAoB,GAChB7a,EAAM3Y,mBAAmBgE,eACzB+sB,GAAwBp9B,KAAI,SAACuH,EAAQy7B,GAAmBz7B,EAAG1G,QAAS,KACpEu8B,GAAwB,GAAGv8B,QAAS,EACpCi/B,IAAsB,IAEtB9a,EAAM3Y,mBAAmBiE,iBAC3B+sB,GAA0Br9B,KAAI,SAACuH,EAAQ07B,GAAmB17B,EAAG1G,QAAS,KACtEw8B,GAA0B,GAAGx8B,QAAS,EACtCk/B,IAAwB,MAK1BF,IAAoB,GACpBC,IAAsB,GACtBC,IAAwB,IAE5BI,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,IAIlBuD,GAAiB,SAAC5jC,GACtBlB,QAAQC,IAAI,aAAaiB,EAAE6pB,QAI3B,IAAIoF,EAAYjvB,EAAE6pB,OAAOzmB,GACrB8rB,EAAOD,EAAUpuB,QAAQ,KACzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAClDuI,EAAOn5B,EAAKuC,QAAQ,KACpBgjC,EAAQvlC,EAAKwC,OAAQ,EAAG22B,GACxBC,EAAa13B,EAAE6pB,OAAOtqB,MAC1BT,QAAQC,IAAI,wBAAyB8kC,GACrC/kC,QAAQC,IAAI,uBAAwB24B,GAEpCmG,GAAsBn9B,KAAI,SAACojC,EAASC,GAClCjlC,QAAQC,IAAK,SAAU+kC,EAAI1gC,GAAI,iBAAiB2gC,EAAW,OAAOre,EAAM3Y,mBAAmBqB,iBAEvF01B,EAAI1gC,IAAMs0B,GACV54B,QAAQC,IAAK,MACb+kC,EAAIviC,QAAS,EACby9B,GAAuB,CAAC57B,GAAI,KAAMK,KAAMqgC,EAAIrgC,KAAMC,YAAa,KAAMC,MAAO,QAEzEmgC,EAAIviC,QAAS,KAItBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,GACtBvhC,QAAQC,IAAI,qBAAsB8+B,KAG9BmG,GAAmB,SAAChkC,GACxB,IAAIikC,EAAS,CAAC7gC,GAAI,KAAMK,KAAM,KAAMlC,QAAO,GAC3Cq+B,GAAY,IACZV,GAAyB+E,GACzBnG,GAAwBp9B,KAAI,SAACwjC,EAAWC,GAClCD,EAAM9gC,IAAMpD,EAAE6pB,OAAOtqB,OACrB2kC,EAAM3iC,QAAS,EACf0iC,EAAO7gC,GAAK8gC,EAAM9gC,GAClB6gC,EAAOxgC,KAAOygC,EAAMzgC,KACpBy7B,GAAyB+E,IAEtBC,EAAM3iC,QAAS,KAExBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,GAEtBa,MAGIkD,GAAqB,SAACpkC,GAC1B,IAAIqkC,EAAW,CAACjhC,GAAI,KAAMK,KAAM,KAAMlC,QAAO,GAC7Cu+B,GAAc,IACdV,GAA2BiF,GAC3BtG,GAA0Br9B,KAAI,SAAC4jC,EAAWC,GACpCD,EAAMlhC,IAAMpD,EAAE6pB,OAAOtqB,OACrB+kC,EAAM/iC,QAAS,EACf8iC,EAASjhC,GAAKkhC,EAAMlhC,GACpBihC,EAAS5gC,KAAO6gC,EAAM7gC,KACtBy7B,GAAyBmF,IAEtBC,EAAM/iC,QAAS,KAExBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,GAEtBa,MAGIsD,GAAmB,SAACxkC,GACxB,IAAIiT,EAAa,CAAC7P,GAAI,KAAMK,KAAM,KAAMlC,QAAO,GAC/Cw+B,GAAY,IACZT,GAAyBrsB,GACzB+qB,GAAwBt9B,KAAI,SAAC+jC,EAAWC,GAClCD,EAAMrhC,IAAMpD,EAAE6pB,OAAOtqB,OACrBklC,EAAMljC,QAAS,EACf0R,EAAO7P,GAAKqhC,EAAMrhC,GAClB6P,EAAOxP,KAAOghC,EAAMhhC,KACpB67B,GAAyBrsB,IAEtBwxB,EAAMljC,QAAS,KAExBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,GACtBa,MAIIyD,GAAmB,SAAC3kC,GACxB,IAAIkT,EAAa,CAAC9P,GAAI,KAAMK,KAAM,KAAMlC,QAAO,GAC/Cy+B,GAAY,IACZR,GAAyBtsB,GACzB+qB,GAAwBv9B,KAAI,SAAC4jC,EAAWM,GAClCN,EAAMlhC,IAAMpD,EAAE6pB,OAAOtqB,OACrB+kC,EAAM/iC,QAAS,EACf2R,EAAO9P,GAAKkhC,EAAMlhC,GAClB8P,EAAOzP,KAAO6gC,EAAM7gC,KACpB+7B,GAAyBtsB,IAEtBoxB,EAAM/iC,QAAS,KAExBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,GAEtBa,KACApiC,QAAQC,IAAI,6BAA8Bk/B,KAEtC4G,GAAmB,SAAC7kC,GACxB,IAAImT,EAAa,CAAC/P,GAAI,KAAMK,KAAM,KAAMlC,QAAO,GAC/C0+B,GAAY,IACZP,GAAyBvsB,GACzB+qB,GAAwBx9B,KAAI,SAACokC,EAAWC,GAClCD,EAAM1hC,IAAMpD,EAAE6pB,OAAOtqB,OACrBT,QAAQC,IAAK,MACb+lC,EAAMvjC,QAAS,EACf4R,EAAO/P,GAAK0hC,EAAM1hC,GAClB+P,EAAO1P,KAAOqhC,EAAMrhC,KACpB+7B,GAAyBrsB,IAEtB2xB,EAAMvjC,QAAS,KAExBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,GAEtBa,MAGI8D,GAAsB,SAAChlC,GAM3BugC,IAAoB,GACpBC,IAAsB,GACtBC,IAAwB,GACxBjsB,IACA,IAAIya,EAAYjvB,EAAE6pB,OAAOzmB,GAErB8rB,EAAOD,EAAUpuB,QAAQ,KAEzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAGlDuI,EAAOn5B,EAAKuC,QAAQ,KAGpB62B,GADQp5B,EAAKwC,OAAQ,EAAG22B,GACXn5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,IAIpDmG,GAAiBl9B,KAAI,SAAC4gC,EAAQmC,GAAkBnC,EAAG//B,QAAS,KAC5Ds8B,GAAsBn9B,KAAI,SAACuH,EAAQy7B,GAAmBz7B,EAAG1G,QAAS,KAClEu8B,GAAwBp9B,KAAI,SAACuH,EAAQ07B,GAAmB17B,EAAG1G,QAAS,KACpEw8B,GAA0Br9B,KAAI,SAACuH,EAAQg9B,GAAmBh9B,EAAG1G,QAAS,KACtEq8B,GAAiB,GAAGr8B,QAAS,EAC7Bs8B,GAAsB,GAAGt8B,QAAS,EAC9BmkB,EAAM8O,uBAAuBzjB,eAAgB+sB,GAAwB,GAAGv8B,QAAS,GACjFmkB,EAAM8O,uBAAuBxjB,iBAAkB+sB,GAA0B,GAAGx8B,QAAS,GACzFu9B,GAAmB,CAAC17B,GAAI,KAAMK,KAAM,KAAMC,YAAa,KAAMC,MAAO,OACpEq7B,GAAuB,CAAC57B,GAAI,KAAMK,KAAM,KAAMC,YAAa,KAAMC,MAAO,OACpE+hB,EAAM8O,uBAAuBzjB,eAC7B+sB,GAAwB,GAAGv8B,QAAS,EACpC29B,GAAyB,CAAC97B,GAAI,KAAMK,KAAM,KAAMC,YAAa,KAAMC,MAAO,QAE1E+hB,EAAM8O,uBAAuBxjB,iBAC7B+sB,GAA0B,GAAGx8B,QAAS,EACtC69B,GAA2B,CAACh8B,GAAI,KAAMK,KAAM,KAAMC,YAAa,KAAMC,MAAO,QAEhFk9B,IAAaD,IAEfjD,GAAqBj9B,KAAI,SAACwkC,EAAQC,GAC5BD,EAAG9hC,IAAMs0B,GACTwN,EAAG3jC,QAAS,EACZk9B,GAAmByG,IAInBA,EAAG3jC,QAAS,KAElBs/B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,IAIlB+E,GAA2B,SAACplC,GAKhC,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GAErB8rB,EAAOD,EAAUpuB,QAAQ,KAEzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAGlDuI,EAAOn5B,EAAKuC,QAAQ,KAEpBmH,EAAQ1J,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,GAG7C4N,EAAOr9B,EAAMnH,QAAQ,KAGrB62B,GADQp5B,EAAKwC,OAAQ,EAAG22B,GACXzvB,EAAMlH,OAAO,EAAGukC,IAC7BvhC,EAAQkE,EAAMlH,OAAOukC,EAAK,EAAGr9B,EAAMvI,OAAO,GAI9C2+B,GAAqB19B,KAAI,SAACwkC,EAAQI,GAC5BJ,EAAG9hC,IAAMs0B,IACE,GAAT5zB,GACEohC,EAAGjhC,YAAY,GAAG1C,QAAS,EAC3B2jC,EAAGjhC,YAAY,GAAG1C,QAAS,EAC3B2jC,EAAGphC,MAAQ,IAGZohC,EAAGjhC,YAAY,GAAG1C,QAAS,EAC3B2jC,EAAGjhC,YAAY,GAAG1C,QAAS,EAC3B2jC,EAAGphC,OAAS,OAIrB+8B,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,IAIlBkF,GAAgC,WACpC5E,IAA6BD,KA6BzB8E,GAA2B,SAACxlC,GAEhC,IAAIylC,EAAOzlC,EAAE6pB,OAAOzmB,GACpBkR,EAAmBmxB,GACnB5E,IAAaD,IACbT,IAAuB,GACvBE,IAAsB,GACtBa,MAMMwE,GAAU,GACVC,GAAc,GAGlB,GAA8B7f,mBAASyY,IAAvC,qBAAOqH,GAAP,MAAgBC,GAAhB,MACA,GAAwC/f,mBAAS,IAAjD,qBAAqBggB,IAArB,aAGA,SAASC,KAEP,IAAMC,EAASC,uBACb,SAACC,GACC,IAAIC,EAAyB,GAgB7B,GAdAA,EAAiB,uBAAOA,GAAP,aAA6BD,IAE9C/F,IAAuB,GAEvBY,IAAyB,GAEzBoF,EAAkBzlC,KAAI,SAAC0lC,EAASC,GAC9BD,EAAIl2B,OAAO,EACXk2B,EAAIhjC,GAAKijC,EACTD,EAAIl2B,OAAS,EAEbk2B,EAAIlvB,WAAa,MAGG,GAAlB0uB,GAAQnmC,OAAa,CACvB4gC,IAAsB,GAGtB,IAJuB,eAIdt+B,GAEL6jC,GAAQU,WACN,SAACC,GAAD,OACEA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEmB,EACxB8d,EAAcM,OACZN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAXGA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAiBX8jC,GAAW,GAAD,oBAAKD,IAAL,aAAiBM,OAE7B,CAACN,KAGH,EAAwCa,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAEhBC,EAAa,SAACC,GAAD,OAAe,WAEhC1G,IAAuB,GACfhN,EAAU2T,SAAS,IAAIziB,KAC/B2L,KAAMC,KAAK,CACTpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUlD,EAAU2T,SAAS,IAAIziB,KAAO,WAC7C0E,MAAK,SAACuH,GACP,GAAIA,EAAOC,YAAa,CACtB,IAAMwW,EAAQ,aAAOnB,IACrBmB,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxChB,GAAWkB,GAEY,GAAnBA,EAAStnC,SAGXshC,IAAyB,GACzBV,IAAsB,UAOxB98B,EAAQqiC,GAAQllC,KAAI,SAACmmC,EAAWG,GAAZ,OACxB,6BACE,eAACvX,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,gBAAvB,SACGugB,EAAKpjC,OAER,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACE,wBAASj2B,MAAO+wB,EAAU2T,SAAS,GAAGziB,KAAQmF,QAASod,EAAWC,GAAQvgB,UAAU,oBAApF,SACE,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,eAAgB6E,MAAO,CAAEkB,SAAU,kBAP/Ewa,EAAKpjC,SAchB,OACE,mCACE,qBAAK6iB,UAAU,uBAAf,SACE,0BAASA,UAAU,6BAAnB,UACE,kDACMogB,EAAa,CAAEpgB,UAAW,cADhC,IAEEA,UAAU,WAFZ,UAIE,sCAAWqgB,MACX,qBAAKrgB,UAAU,QAAf,SACE,8BAAO6M,EAAU2T,SAAS,GAAGziB,SAE/B,2BAGF,uBAAOiC,UAAU,mBAAjB,SAEE,oBAAIljB,GAAG,QAAP,SAAgBG,aAO5B,IAAMy/B,GAAc,WAClB0C,GAAU,GACVC,GAAc,GACdG,GAAgB,IAGS,KAFzBH,GAAW,aAAOC,KAEFnmC,QACZ09B,EAAiBA,EAAiBhK,EAAU2T,SAAS,IAAIziB,KAAO,QAChE0c,IAAyB,IAIvB2E,GAAQjmC,OAAS,EAEnBuwB,KAAMC,KAAK,CACTpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KACA,QACAlD,EAAU2T,SAAS,GAAGziB,KACtB,YACAqhB,GAAQjmC,OACR,YACA0zB,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,WACC0E,MAAK,SAACuH,GACP,GAAIA,EAAOC,YAAX,CAEE,IAAK,IAAIlhB,EAAIq2B,GAAQjmC,OAAS,EAAG4P,GAAK,EAAGA,IACvCs2B,GAAYa,OAAOd,GAAQr2B,GAAG63B,IAAK,GAErCrB,GAAWF,IACXG,GAAgBJ,IAChByB,KACA7Z,GAAcD,OARhB,CAUE,IAAK,IAAIhe,EAAIq2B,GAAQjmC,OAAS,EAAG4P,GAAK,EAAGA,IACvCs2B,GAAYa,OAAOd,GAAQr2B,GAAG63B,IAAK,GAErCrB,GAAWF,SAQfE,GAAWF,IACXG,GAAgBJ,IAChByB,KACA7Z,EAAaD,KAIb8Z,GAAsB,WACD,IAArBxB,GAAYlmC,OACZ09B,EAAiBA,EAAiBhK,EAAU2T,SAAS,IAAIziB,KAAO,SAGhEqhB,GAAU,GACVA,GAAQC,GACR7mC,QAAQC,IAAI,0BAA0B2mC,IACtC5mC,QAAQC,IAAI,oCAAoCw/B,IAChC,aAAQqH,IACxBvI,EAAcz7B,EAAEqK,OAAOy5B,IAAS,SAASr2B,GAAS,OAAmB,GAAZA,EAAEa,UAC3DpR,QAAQC,IAAI,oCAAoCs+B,GAlP9B,SAAE+J,EAAcC,EAAeC,GAKzD,IAAIC,GAAS,EAETH,EAAQ3nC,OAAO,GACf2nC,EAAQ1mC,KAAI,SAACrC,EAAOmpC,GAChBD,GAAS,EACTF,EAAS3mC,KAAI,SAACwC,EAAO2V,GAAqBxa,EAAE+E,IAAMF,EAAEE,KAAOmkC,GAAS,MAChEA,IAAUlpC,EAAE6R,OAAS,MAIjC,IAAMV,EAAOkW,EAAMqc,MAAQ,IAAMrE,GAAkBt6B,GAC7B,GAAlBkkC,EAAQ7nC,QACV6nC,EAAQ5mC,KAAI,SAAC+mC,EAAOC,GAClBN,EAAQj/B,KAAM,CAAE,GAAMu/B,EAAS,KAAQl4B,EAAM,KAAQi4B,EAAEhkC,KAAM,WAAa,GAAI,OAAS,OAK3F65B,EAAc8J,EA4NNO,CAAoBpJ,GAAqBmH,GAASrI,GAClDv+B,QAAQC,IAAI,oCAAoCu+B,GAChDhQ,GAAcD,KAMxB,OACC,qCAEG,gCACI,+BAAKoQ,GAAwBlyB,QAAQ,MAAIkyB,GAAwBjyB,iBACjE,qBAAI8a,UAAU,cAAd,UAA6BmX,GAAwBx7B,YAAY,QAC/D,uBAAMqkB,UAAWmX,GAAwB76B,mBAAzC,UACK66B,GAAwB/6B,eAAe,UAE9C,0BAIJ,sBAAKU,GAAG,yBAAR,UAUI,gCACE,oBAAGomB,QAAS,kBAAM+b,MAAkCnjC,MAAM,uCAAuCkkB,UAAU,oBAA3G,UAAgIyW,EAAMzE,UAAU,IAAIzR,KACpJ,mBAAGP,UAAU,qDACb,uBACCoa,IACI,mCACC,sBAAKpa,UAAU,uBAAf,UACE,qBAAKA,UAAU,aAAf,SACE,oBAAGkD,QAAS,kBAAM+b,MAAkCjf,UAAU,4BAA9D,UAA0F,IAAC,mBAAGA,UAAU,8BAE1G,8BAAG,uBAAMA,UAAU,cAAhB,UAA8B,IAAEyW,EAAM7Q,UAAU,GAAGrF,KAAK,OAAQ,QACjE,iCAAM,IAAEnB,EAAM8O,uBAAuBtvB,MAAM,OAAQ,cACnD,uBAAMohB,UAAU,cAAhB,UAA8B,IAAEyW,EAAM7Q,UAAU,GAAGrF,KAAK,OAAQ,QAChE,iCAAM,IAAEnB,EAAM8O,uBAAuB7uB,MAAM,UAE7C,8BAAG,uBAAM2gB,UAAU,cAAhB,UAA8B,IAAEyW,EAAM7Q,UAAU,GAAGrF,KAAK,OAAQ,IAAC,uBAChE,uBAAMP,UAAU,eAAhB,UAA+B,IAAEZ,EAAM8O,uBAAuBjvB,KAAK9B,KAAK,OAAQ,IAAC,uBACjF,uBAAM6iB,UAAU,eAAhB,UAA+B,IAAEZ,EAAM8O,uBAAuBjvB,KAAK3E,MAAM,OAAQ,iBAErF,8BAAG,uBAAM0lB,UAAU,cAAhB,UAA8B,IAAEyW,EAAM7Q,UAAU,GAAGrF,KAAK,OAAQ,IAAC,uBAClE,uBAAMP,UAAU,eAAhB,UAAgCZ,EAAM8O,uBAAuBrvB,YAAY,UAE3E,8BACE,uBAAMmhB,UAAU,cAAhB,UAA8B,IAAEyW,EAAM7Q,UAAU,GAAGrF,KAAK,OAAQ,IAAC,uBADnE,UAEInB,EAAM8O,uBAAuBhvB,cAFjC,aAEI,EAAqC9E,KAAI,SAAC0G,EAAOwgC,GAAR,OACvC,qCACE,uBAAMthB,UAAU,eAAhB,UAA+B,mBAAGA,UAAU,qDAAuD,OAChGlf,EAAE3D,QAAY,uBACjB,uBAAM6iB,UAAU,eAAhB,UAAgClf,EAAE3F,cAAc,OAAQ,gCAKhE,8BAAG,uBAAM6kB,UAAU,cAAhB,UAA8B,IAAEyW,EAAM7Q,UAAU,GAAGrF,KAAK,OAAQ,IAAC,uBAApE,UAEInB,EAAM8O,uBAAuB/uB,yBAFjC,aAEI,EAAgD/E,KAAI,SAACmnC,EAAQD,GAAT,OAClD,qCACE,uBAAMthB,UAAU,eAAhB,UAA+B,mBAAGA,UAAU,qDAAuD,OAChGuhB,EAAGt8B,QAAQ,YAAcs8B,EAAG5lC,eAC/B,uBAAMqkB,UAAWuhB,EAAGjlC,mBAApB,UAAyCilC,EAAGplC,cAAcE,qBAAqB,OAAQ,qCAOvG,0BAIF,gCACE,mBAAG2jB,UAAU,kBAAb,SAAgCyW,EAAMzE,UAAU,IAAIzR,OACpD,qBAAKP,UAAU,kBAAf,gBAEIqX,SAFJ,IAEIA,QAFJ,EAEIA,GAAsBj9B,KAAI,SAACwkC,EAAQ0C,GAAT,aACzBrO,EAAE,eAAYmE,GAAkBt6B,GAA9B,YAAoC8hC,EAAG9hC,IACzC0vB,EAAE,gBAAa4K,GAAkBt6B,GAA/B,YAAqC8hC,EAAG9hC,IAC1C2vB,EAAE,iBAAc2K,GAAkBt6B,GAAhC,YAAsC8hC,EAAG9hC,IAC3C4vB,EAAE,iBAAc0K,GAAkBt6B,GAAhC,YAAsC8hC,EAAG9hC,IACzC,kBAAes6B,GAAkBt6B,GAAjC,YAAuC8hC,EAAG9hC,IAC5C8vB,EAAE,mBAAgBwK,GAAkBt6B,GAAlC,YAAwC8hC,EAAG9hC,IAC7CmwB,EAAE,qBAAkBmK,GAAkBt6B,GAApC,YAA0C8hC,EAAG9hC,IAC/Cw5B,EAAE,mBAAgBc,GAAkBt6B,GAAlC,YAAwC8hC,EAAG9hC,IAC7Cy5B,EAAE,mBAAgBa,GAAkBt6B,GAAlC,YAAwC8hC,EAAG9hC,IAC7C65B,EAAE,mBAAgBS,GAAkBt6B,GAAlC,YAAwC8hC,EAAG9hC,IAC7C,mCACG8hC,EAAG/hC,SACF,qCAEK,qBAAKmjB,UAAU,aAAf,SACE,uBACIoD,KAAK,QACLtmB,GAAIm2B,EACJ/P,QAAUwb,GACVpV,QAASsV,EAAG3jC,OACZC,SAAU0jC,EAAG1jC,aAEnB,sBAAK2pB,MAAO,CAAC2B,QAAQ,gBAArB,UACI,uBAAMxG,UAAU,gCAAhB,UAAgD,IAAE4e,EAAGzhC,KAAK,OAE/C,GAATyhC,EAAG9hC,IACF,mCACC,uBAAMkjB,UAAU,cAAhB,UACE,yBAAQ,cAAS,WAAS,YAAYA,UAAU,SAAhD,UAAyD,IAAEyW,EAAMzE,UAAU,IAAIC,MAAM,OACrF,eAAC,KAAD,CAAcn1B,GAAG,YAAYsmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAK,uBAAK,cAC1B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,uBAAM,+BAKxD,GAAT+/B,EAAG9hC,IACF,mCACC,uBAAMkjB,UAAU,cAAhB,UACE,yBAAQ,cAAS,WAAS,aAAaA,UAAU,SAAjD,UAA0D,IAAEyW,EAAMzE,UAAU,IAAIwP,SAChF,eAAC,KAAD,CAAc1kC,GAAG,aAAasmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAK,uBAAK,eACzB,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,uBAAM,kCAM3E,uBAKc,GAAT+/B,EAAG9hC,IAAW8hC,EAAG3jC,QACf,mCACG,sBAAK+kB,UAAU,kBAAf,UACI,4BAAIyW,EAAMzE,UAAU,IAAIzR,OACxB,0BACIzjB,GAAE,wBAAmB8hC,EAAG9hC,IACxBkjB,UAAU,oBACVuJ,SAAWsR,GACX5hC,MAAQ8+B,GAER78B,SAAU0jC,EAAG1jC,WAGjB,uBAAK,4BAML,GAAT0jC,EAAG9hC,IAAW8hC,EAAG3jC,QACf,mCACC,sBAAK+kB,UAAU,kBAAf,UAEI,qBAAKA,UAAU,YAAf,SACE,qBAAKA,UAAU,MAAf,SACE,sBAAKA,UAAU,SAAf,UACE,gCAAO,kBACNoX,GAAkBp4B,KACd,wBAAOghB,UAAU,oCAAjB,UAAqD,IAAE4e,EAAG1hC,MAAMC,KAAK,QACrE,qCACC,qBAAK6iB,UAAU,YAAf,SACE,wBAAQljB,GAAI0vB,EAAIjD,SAAW0T,GAA3B,gBACI3F,SADJ,IACIA,QADJ,EACIA,GAAkBl9B,KAAI,SAAC4gC,EAAQkC,GAAT,OACtB,wBACEuE,MAAOzG,EAAG79B,KACVlE,MAAO+hC,EAAGl+B,GACV44B,SAAUsF,EAAG//B,gBAOrB,uBAAK,iCAQf++B,IACE,mCACE,qBAAKha,UAAU,YAAf,SACI,sBAAKA,UAAU,MAAf,UACI,qBAAKA,UAAU,WAAf,SAC0C,GAAxCZ,EAAM3Y,mBAAmBkE,cACtB,qCACC,gCAAO,gBACP,sBAAKqV,UAAU,cAAf,UACI,wBAASljB,GAAI2vB,EAAIlD,SAAW+T,GAA5B,gBACI/F,SADJ,IACIA,QADJ,EACIA,GAAuBn9B,KAAI,SAACojC,EAASN,GAAV,OAC3B,wBACIuE,MAAOjE,EAAIrgC,KACXlE,MAAOukC,EAAI1gC,GACX44B,SAAU8H,EAAIviC,cAIb,aAGd,qCAEG,gCAAO,gBAAmB,IAAC,uBAF9B,OAGKsR,QAHL,IAGKA,OAHL,EAGKA,EAAcnS,KAAI,SAAC2O,EAAO24B,GAAR,OAClB,qCACE,qBAAK1hB,UAAU,aAAf,SACE,uBACIoD,KAAK,QACLtmB,GAAI4kC,EACJpY,QAASvgB,EAAE9N,OACXioB,QAAUgc,OAEhB,qBAAKra,MAAO,CAAC2B,QAAQ,gBAAiBxG,UAAU,OAAhD,SACE,uBAAMA,UAAU,eAAhB,UAA+B,IAAEjX,EAAE5L,KAAK,uBAI1B,SAAnBqP,GACG,mCACE,sBAAKwT,UAAU,cAAf,UACI,wBAAQljB,GAAIw5B,EAAI/M,SAAW2U,GAA3B,gBACIxG,SADJ,IACIA,QADJ,EACIA,GAAyBt9B,KAAI,SAAC+jC,EAAWwD,GAAZ,OAC7B,wBACIF,MAAOtD,EAAMhhC,KACblE,MAAOklC,EAAMrhC,GACb44B,SAAUyI,EAAMljC,cAGf,YAIC,WAAnBuR,GACG,mCACC,sBAAKwT,UAAU,cAAf,UACK,wBAAQljB,GAAIy5B,EAAIhN,SAAW8U,GAA3B,gBACI1G,SADJ,IACIA,QADJ,EACIA,GAAyBv9B,KAAI,SAAC4jC,EAAW4D,GAAZ,OAC7B,wBACIH,MAAOzD,EAAM7gC,KACblE,MAAO+kC,EAAMlhC,GACb44B,SAAUsI,EAAM/iC,cAGf,YAIC,UAAnBuR,GACG,mCACC,sBAAKwT,UAAU,cAAf,UACK,wBAAQljB,GAAI65B,EAAIpN,SAAWgV,GAA3B,gBACI3G,SADJ,IACIA,QADJ,EACIA,GAAyBx9B,KAAI,SAACokC,EAAWqD,GAAZ,OAC7B,wBACIJ,MAAOjD,EAAMrhC,KACblE,MAAOulC,EAAM1hC,GACb44B,SAAU8I,EAAMvjC,cAGf,iBAQzBmkB,EAAM3Y,mBAAmBgE,cACxB,mCACC,sBAAKuV,UAAU,WAAf,UACE,gCAAO,gBACP,sBAAKA,UAAU,cAAf,UACI,wBAAQljB,GAAI8vB,EAAIrD,SAAWmU,GAA3B,gBACIlG,SADJ,IACIA,QADJ,EACIA,GAAyBp9B,KAAI,SAACwjC,EAAWkE,GAAZ,OAC7B,wBACIL,MAAO7D,EAAMzgC,KACblE,MAAO2kC,EAAM9gC,GACb44B,SAAUkI,EAAM3iC,cAGf,eAMjBmkB,EAAM3Y,mBAAmBiE,gBACxB,mCACC,sBAAKsV,UAAU,WAAf,UACE,gCAAO,gBACP,sBAAKA,UAAU,cAAf,UACE,wBAAQljB,GAAImwB,EAAI1D,SAAWuU,GAA3B,gBACIrG,SADJ,IACIA,QADJ,EACIA,GAA2Br9B,KAAI,SAAC4jC,EAAW+D,GAAZ,OAC/B,wBACIN,MAAOzD,EAAM7gC,KACblE,MAAO+kC,EAAMlhC,GACb44B,SAAUsI,EAAM/iC,cAGf,2BAc9B,GAAT2jC,EAAG9hC,IAAW8hC,EAAG3jC,QACf,mCACE,sBAAK+kB,UAAU,kBAAf,UAEI,qBAAKA,UAAU,YAAf,SACE,qBAAKA,UAAU,MAAf,SACE,sBAAKA,UAAU,SAAf,UACE,gCAAO,kBACLoX,GAAkBp4B,KACf,qCACC,wBAAOghB,UAAU,oCAAjB,UAAqD,KAAG4e,EAAG1hC,MAAMC,KAAK,QAGtE,4BAAIs5B,EAAMzE,UAAU,IAAIzR,OAGxB,wBAAOP,UAAU,8CAAjB,UACGyW,EAAMzE,UAAU,IAAIzR,KAAK,UAAS,uBADrC,UAEGqe,EAAG3hC,aAFN,aAEG,EAAU7C,KAAI,SAAC2O,EAAOkF,GAAR,OACX,qCACE,mBAAGgV,KAAMla,EAAEE,SAAUsa,OAAO,SAASvD,UAAU,uBAA/C,SACI,uBAAMA,UAAU,0BAAhB,UACE,mBAAGA,UAAU,qDACZjX,EAAE5L,UAEL,mCAKb,mCACC,qBAAK6iB,UAAU,YAAf,SACE,wBAAQljB,GAAI4vB,EAAInD,SAAW0T,GAA3B,gBACI3F,SADJ,IACIA,QADJ,EACIA,GAAkBl9B,KAAI,SAAC4gC,EAAQkC,GAAT,OACtB,wBACEuE,MAAOzG,EAAG79B,KACVlE,MAAO+hC,EAAGl+B,GACV44B,SAAUsF,EAAG//B,yBAa/B++B,IACC,mCACE,qBAAKha,UAAU,YAAf,SACG,sBAAKA,UAAU,MAAf,UACI,qBAAKA,UAAU,WAAf,SAC0C,GAAxCZ,EAAM3Y,mBAAmBkE,cACpB,qCACC,gCAAO,aACP,qBAAKqV,UAAU,cAAf,SACI,wBAAQljB,GAAI2vB,EAAIlD,SAAW+T,GAA3B,gBACI/F,SADJ,IACIA,QADJ,EACIA,GAAuBn9B,KAAI,SAACojC,EAASN,GAAV,OAC3B,wBACIuE,MAAOjE,EAAIrgC,KACXlE,MAAOukC,EAAI1gC,GACX44B,SAAU8H,EAAIviC,mBAM3B,qCAEG,gCAAO,gBAAmB,IAAC,uBAF9B,OAGKsR,QAHL,IAGKA,OAHL,EAGKA,EAAcnS,KAAI,SAAC2O,EAAO24B,GAAR,OAClB,qCACE,qBAAK1hB,UAAU,aAAf,SACE,uBACIoD,KAAK,QACLtmB,GAAI4kC,EACJpY,QAASvgB,EAAE9N,OACXioB,QAAUgc,OAEhB,qBAAKra,MAAO,CAAC2B,QAAQ,gBAAiBxG,UAAU,OAAhD,SACE,uBAAMA,UAAU,eAAhB,UAA+B,IAAEjX,EAAE5L,KAAK,eAI1B,SAAnBqP,GACG,mCACE,sBAAKwT,UAAU,cAAf,UACI,wBAAQljB,GAAIw5B,EAAI/M,SAAW2U,GAA3B,gBACIxG,SADJ,IACIA,QADJ,EACIA,GAAyBt9B,KAAI,SAAC+jC,EAAWwD,GAAZ,OAC7B,wBACIF,MAAOtD,EAAMhhC,KACblE,MAAOklC,EAAMrhC,GACb44B,SAAUyI,EAAMljC,cAGf,YAIC,WAAnBuR,GACG,mCACC,sBAAKwT,UAAU,cAAf,UACK,wBAAQljB,GAAIy5B,EAAIhN,SAAW8U,GAA3B,gBACI1G,SADJ,IACIA,QADJ,EACIA,GAAyBv9B,KAAI,SAAC4jC,EAAW4D,GAAZ,OAC7B,wBACIH,MAAOzD,EAAM7gC,KACblE,MAAO+kC,EAAMlhC,GACb44B,SAAUsI,EAAM/iC,cAGf,YAIC,UAAnBuR,GACG,mCACC,sBAAKwT,UAAU,cAAf,UACK,wBAAQljB,GAAI65B,EAAIpN,SAAWgV,GAA3B,gBACI3G,SADJ,IACIA,QADJ,EACIA,GAAyBx9B,KAAI,SAACokC,EAAWqD,GAAZ,OAC7B,wBACIJ,MAAOjD,EAAMrhC,KACblE,MAAOulC,EAAM1hC,GACb44B,SAAU8I,EAAMvjC,cAGf,iBAQ3BmkB,EAAM3Y,mBAAmBgE,cACxB,mCACC,sBAAKuV,UAAU,WAAf,UACE,gCAAO,gBACP,sBAAKA,UAAU,cAAf,UACE,wBAAQljB,GAAImwB,EAAI1D,SAAWuU,GAA3B,gBACMrG,SADN,IACMA,QADN,EACMA,GAA2Br9B,KAAI,SAAC4jC,EAAW+D,GAAZ,OAC/B,wBACIN,MAAOzD,EAAM7gC,KACblE,MAAO+kC,EAAMlhC,GACb44B,SAAUsI,EAAM/iC,cAGjB,eAKfmkB,EAAM3Y,mBAAmBiE,gBACxB,mCACC,sBAAKsV,UAAU,WAAf,UACE,gCAAO,gBACP,sBAAKA,UAAU,cAAf,UACE,wBAAQljB,GAAI8vB,EAAIrD,SAAWmU,GAA3B,gBACIjG,SADJ,IACIA,QADJ,EACIA,GAA2Br9B,KAAI,SAAC4jC,EAAW+D,GAAZ,OAC/B,wBACIN,MAAOzD,EAAM7gC,KACblE,MAAO+kC,EAAMlhC,GACb44B,SAAUsI,EAAM/iC,cAGf,sBAYF,GAA1Bm8B,GAAkBp4B,MACf,qCACI,4BAAKy3B,EAAMzE,UAAU,IAAIzR,OACzB,cAACkf,GAAD,OAGR,yCAc1B,qBAAKzf,UAAU,kBAAf,UAC2B,GAAtBkY,GAAgBp7B,IAAiC,GAAtBo7B,GAAgBp7B,KACxC,qCACA,oBAAGkjB,UAAU,kBAAb,UAA+B,IAAEyW,EAAMzE,UAAU,IAAIzR,KAAK,QACtD,uBAAMP,UAAU,cAAhB,UACE,yBAAQ,cAAS,WAAS,aAAaA,UAAU,SAAjD,UAA0D,IAAEyW,EAAMzE,UAAU,IAAIC,MAAM,OACtF,eAAC,KAAD,CAAcn1B,GAAG,aAAasmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAK,uBAAK,cAC1B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,uBAAM,gCAInE,qBAAKmhB,UAAU,uBAAf,gBACI6X,SADJ,IACIA,QADJ,EACIA,GAAsBz9B,KAAI,SAACuiC,EAAQ2E,GAAT,OACzB1U,EAAE,eAAYwK,GAAkBt6B,GAA9B,YAAoC6/B,EAAG7/B,IACzC,qCACC,qBAAKkjB,UAAU,cAAf,SACE,uBACIoD,KAAK,WACLtmB,GAAI8vB,EACJ1J,QAAU4Z,GACVxT,QAASqT,EAAG1hC,OACZC,SAAUyhC,EAAGzhC,aAEnB,sBAAK2pB,MAAO,CAAC2B,QAAQ,gBAArB,UAAsC,uBAAMxG,UAAU,qBAAqBlkB,MAAO6gC,EAAGx/B,KAA/C,UAAqD,IAAEw/B,EAAGx/B,KAAK,OAAQ,OAC7G,oCASd,qBAAK6iB,UAAU,iBAAf,SAC0B,GAAtBkY,GAAgBp7B,IACV,qCACA,oBAAGkjB,UAAU,kBAAb,UAAgCyW,EAAMzE,UAAU,IAAIzR,KAAK,QACrD,uBAAMP,UAAU,cAAhB,UACE,yBAAQ,cAAS,WAAS,aAAaA,UAAU,SAAjD,UAA0D,IAAEyW,EAAMzE,UAAU,IAAIC,MAAM,OACtF,eAAC,KAAD,CAAcn1B,GAAG,aAAasmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,IAAIC,GAAG,IAAC,uBAAK,uBAAK,eAC1B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,uBAAM,gCAIrE,qBAAKmhB,UAAU,uBAAf,gBACI8X,SADJ,IACIA,QADJ,EACIA,GAAsB19B,KAAI,SAAC0H,EAAQkgC,GAAT,aACzB/U,EAAE,eAAYmK,GAAkBt6B,GAA9B,YAAoCgF,EAAGhF,IACzC,qCACC,qBAAKkjB,UAAU,cAAf,SACE,uBACIoD,KAAK,WACLtmB,GAAImwB,EACJ/J,QAAU6Z,GACVzT,QAASxnB,EAAG7G,OACZC,SAAU4G,EAAG5G,aAEnB,sBAAK2pB,MAAO,CAAC2B,QAAQ,gBAArB,UAAsC,uBAAMxG,UAAU,qBAAqBlkB,MAAOgG,EAAG3E,KAA/C,UAAqD,IAAE2E,EAAG3E,KAAK,OAAQ,OAG7G,qBAAK6iB,UAAU,uBAAf,SACIoX,GAAkBp4B,KACf,qCACc,GAAZ8C,EAAGtE,OACC,qCAAE,IAAEsE,EAAGrE,QAAQ,gCAEP,GAAZqE,EAAGtE,OACC,qCAAE,mBAAGwiB,UAAU,uCAAyC,MAAIle,EAAGrE,YAEtD,GAAbqE,EAAGtE,OACC,qCAAE,mBAAGwiB,UAAU,yCAA2C,IAAEle,EAAGrE,cAGrE,mCACIqE,EAAG7G,QAAmB,GAAT6G,EAAGhF,IACb,6CACAgF,EAAGnE,mBADH,aACA,EAAgBvD,KAAI,SAACkT,EAAQ20B,GAAT,OACnB3L,EAAE,kBAAec,GAAkBt6B,GAAjC,YAAuCgF,EAAGhF,GAA1C,YAAgDwQ,EAAGxQ,IACrD,qCACC,qBAAKkjB,UAAU,cAAf,SACE,uBACIoD,KAAK,QACLtmB,GAAIw5B,EACJpT,QAAU4b,GACVxV,QAAShc,EAAGrS,OACZC,SAAU4G,EAAG5G,aAGnB,qBAAK2pB,MAAO,CAAC2B,QAAQ,gBAArB,SACE,sBAAMxG,UAAU,oBAAoBlkB,MAAOwR,EAAGnQ,KAA9C,SACc,GAAX8kC,EACG,qCAAE,mBAAGjiB,UAAU,uCAAyC,MAAI1S,EAAGnQ,QAC/D,qCAAE,mBAAG6iB,UAAU,yCAA2C,IAAE1S,EAAGnQ,YAGjE,oCAcxC,0BAIF,uBACA,qBAAKL,GAAG,mBAAR,SACE,sBAAKkjB,UAAU,+BAAf,UAC8B,GAA1BoX,GAAkBp4B,MACjB,qCACG46B,GACI,qCAAE,IAAC,yBAAQ1W,QAxmDR,WAInB,GAFAtD,OAAOC,SAAS,CAACC,IAAI,IACrBkc,KACiB,IAAZpF,EACHlN,KACGC,KAAK,CACJ9D,KAAM,QACNiK,kBAAmB,UACnBD,iBAAkB,SAClBH,kBAAkB,EAClBC,mBAAkB,EAClB3L,MAAO,MACPloB,MAAO,cACPi0B,KAAM,QAAU6G,EAAW,eAG5B,CAID,GAFAmD,IAAsB,GAEE,GAApB7B,GAAgBp7B,IAAgC,GAAvB09B,GAA8B,CAEvD,IAAIrE,EAAW,IAAI+L,SACnB/L,EAASgM,OAAO,QAAS/iB,EAAMqc,OAC/BtF,EAASgM,OAAO,SAAU/K,GAAkBt6B,IAC5Ci6B,EAAY38B,KAAI,SAAC2O,EAAOkF,GAAiBkoB,EAASgM,OAAO,QAASp5B,MAE9DguB,EAAY59B,OAAS,GACrB+tB,IAAgB,GAEhBwT,IAAc,GACd0H,GAAclM,yBAAyB9W,EAAMxmB,WAAYu9B,GACtD1T,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTmX,EAA+BiT,EAASvqB,MAAMsqB,MAAM,SAAS4f,GAG3DlH,KACAt0B,EAAeuY,EAAMqc,MAAOrE,GAAkBt6B,GAAI,KAAM,KAAM,+BAC9D69B,KAEAO,QAGNhU,IAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DiX,EAAyBqT,EAAGF,UAAU,EAAM,GAAI,GAAI,wCAAwC,MAC5FkY,KACAxL,KACAlI,IAAgB,QAIxBiU,KACAt0B,EAAeuY,EAAMqc,MAAOrE,GAAkBt6B,GAAI,KAAM,KAAM,+BAC9D69B,WAKJQ,KACAt0B,EAAeuY,EAAMqc,MAAOrE,GAAkBt6B,GAAI,KAAM,KAAM,+BAC9D69B,KAEAO,KAEFN,KACAD,OAkiD8C3a,UAAU,iBAAzC,UAA0D,KAAE,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,WAA0B,UACvJ,qCAAE,IAAC,yBAAQP,UAAU,mBAAmB9kB,UAAQ,EAA7C,UAA8C,KAAE,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,UAEhJuZ,GACI,qCAAE,IAAC,yBAAQ5W,QA1sDT,WAClB,IAAIof,EAAe,CAACxlC,GAAI,EAAG6K,SAAU,CAACP,MAAM,EAAMtK,GAAI,IAGtDwlC,EAAcxlC,GAAKsiB,EAAMqc,MACzB6G,EAAc36B,SAAS7K,GAAIs6B,GAAkBt6B,GAE7CoqB,IAAgB,GAEhBmU,GAAkBrF,sBAAsB5W,EAAMxmB,WAAY0pC,GACvD7f,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACXyV,EAA4B2U,EAASvqB,MAAMsqB,MAAM,SAAS8f,GAGxD17B,EAAeuY,EAAMqc,MAAOrE,GAAkBt6B,GAAI,KADlC,EACqD,kBAGrEu6B,GAAqBj9B,KAAI,SAACwkC,EAAQC,GAChCD,EAAG1jC,UAAW,EACG,GAAb0jC,EAAG3jC,SACH2jC,EAAG/hC,SAAU,MAEnBg7B,GAAqBz9B,KAAI,SAACuiC,EAAQC,GAChCD,EAAGzhC,UAAW,EACG,GAAbyhC,EAAG1hC,SACH0hC,EAAG9/B,SAAU,MAEnBi7B,GAAqB19B,KAAI,SAAC0H,EAAQi6B,GAChCj6B,EAAG5G,UAAW,EACG,GAAb4G,EAAG7G,SACH6G,EAAGjF,SAAU,MAEnBg9B,IAAuB,GACvBE,IAAsB,GACtBY,KA5Fcvb,EAAMojB,YAgGpB,IAAI5R,EAAY,CAACC,WAAW,EAAGhrB,KAAK,GACpC+qB,EAAWC,WAAauG,GAAkBt6B,GAC1C8zB,EAAW/qB,KAAOuZ,EAAMqc,MACxBvU,IAAgB,GAChB4J,GAAsBjK,eAAezH,EAAMxmB,WAAYg4B,GACpDnO,MAAK,SAACC,GAEkB,KAAjBA,EAASpqB,QACTgM,EAAqBoe,EAASvqB,MAAMsqB,MAAM,SAASsO,GAE/C4J,KACA/P,QAIR1D,IAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,kCAAmCmqB,EAAGF,SAASpqB,QAC5D4K,EAAiC0f,EAAGF,UAAU,EAAM,GAAI,GAAI,sCAAsC,MAClGwE,IAAgB,GAChBkI,QAIN0L,KACsB,MAAlBhE,EAAch6B,IAAiC,IAArBg6B,EAAc35B,MACxCiiB,EAAMqjB,gBAGV/Y,KACGC,KAAK,CACJ9D,KAAM,OACNiK,kBAAmB,UACnBD,iBAAkB,SAClBH,kBAAkB,EAClBC,mBAAkB,EAClB3L,MAAO,MACPloB,MAAO,+GAET6+B,QAGNzT,IAAgB,GAEhB0D,QAEHjI,OAAM,SAACC,GACJpqB,QAAQC,IAAK,yCAA0CmqB,EAAGF,SAASpqB,QACnEoM,EAA6Bke,EAAGF,UAAU,EAAM,GAAI,GAAI,0CAA0C,MAClGwE,IAAgB,GAChBkI,SAgnD2CpP,UAAU,iBAAxC,UAAyD,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,UACtJ,qCAAE,IAAC,yBAAQP,UAAU,mBAAmB9kB,UAAQ,EAA7C,UAA8C,IAAC,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,aAIrJ,yBAAQ2C,QAh6CI,WAEd0W,GACFlQ,KAAMC,KAAK,CACTpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,QAAU0G,EAAMhH,SAAS,GAAGlP,KAAO,WACxCkC,MAAK,SAACuH,GACHA,EAAOC,cACP0Q,KACAvb,EAAM2L,wBAAwB,SAQpC4P,KACAvb,EAAM2L,wBAAwB,MAu4CK/K,UAAU,mBAAzC,UAA4D,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,eC16DlJ,SAASmiB,GAAYtjB,GAE7B,MAEIjhB,GAAe,SAACkhB,GAAD,MAAgB,CAC3B1e,2BAA4B0e,EAAM1e,2BAClCD,uBAAwB2e,EAAM3e,uBAC9BpC,6BAA8B+gB,EAAM/gB,6BACpCF,uBAAwBihB,EAAMjhB,2BAN9BuC,EAAR,EAAQA,2BACArC,GADR,EAAoCoC,uBAApC,EACQpC,8BAQR,GATA,EACsCF,uBAUlCmG,GAAe,SAAC8a,GAAD,MAAgB,CAC3BjX,2BAA4BiX,EAAMjX,2BAClC/B,mBAAoBgZ,EAAMhZ,mBAC1B3B,6BAA8B2a,EAAM3a,kCALpC0D,EAAR,EAAQA,2BACA1D,GADR,EAAoC2B,mBAApC,EACQ3B,8BAaJ+xB,EAAQnW,EAAaoW,GAGzB,EAAmClX,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAyDxH,oBAAS,GAAlE,mBAAOmjB,EAAP,KAA6BC,EAA7B,KACA,EAAuCpjB,oBAAS,GAAhD,mBAAOyH,EAAP,KAAoBC,EAApB,KAEA,EAA0B1H,oBAAS,GAAnC,mBAAOqjB,EAAP,KAAcC,EAAd,KACA,EAA4BtjB,oBAAS,GAArC,mBAAOgL,EAAP,KAAeC,EAAf,KAEA,EAA4DjL,mBAAS,IAArE,mBAAO0O,EAAP,KAA+BC,EAA/B,KACA,EAAgE3O,mBAAS,IAAzE,mBAAOujB,EAAP,KAAiCC,EAAjC,KAEMC,EAAoB7jB,EAAMlZ,cAChC,EAA2BsZ,mBAASJ,EAAMlZ,eAA1C,mBAAO/N,EAAP,KAAa+qC,EAAb,KACA,EAA4B1jB,oBAAS,GAArC,mBAAOlnB,EAAP,KAAe6qC,EAAf,KAGAxjB,qBAAU,WACNnnB,QAAQC,IAAI,qDACZyqC,EAAW9jB,EAAMlZ,eACjB08B,GAAyBD,KAC3B,CAAC5b,IAEHpH,qBAAU,WACNnnB,QAAQC,IAAI,qDACZmqC,GAAyBD,KAC3B,CAAC5b,IAEHpH,qBAAU,WACNnnB,QAAQC,IAAI,iCACZyqC,EAAWD,GACXjc,GAAcD,KACb,CAACkc,IAIN,IAAM7T,EAAmB,WAAQhQ,EAAMgQ,oBAajCgU,GAAoB,SAACh9B,EAAWguB,EAAY/rB,GAE9C,IAAIg7B,EAAU53B,KAAKC,MAAMD,KAAKE,UAAUyT,EAAM1iB,qBAC1CyE,EAAiB,OAANkH,EAAe,KAAOoD,KAAKC,MAAMD,KAAKE,UAAUyT,EAAM9hB,qBACjEgmC,EAAiB,OAANj7B,EAAe,KAAOoD,KAAKC,MAAMD,KAAKE,UAAUyT,EAAM3Z,YACjEgI,EAAiB,OAANpF,EAAe,KAAOoD,KAAKC,MAAMD,KAAKE,UAAUyT,EAAM7Q,uBACjEtX,EAAW,CAAC,GAAM,EAAG,SAAY,CAAE,GAAM,IAC7CA,EAAK6F,GAAKsJ,EACVnP,EAAK0Q,SAAS7K,GAAKs3B,EAGnBlN,GAAgB,GAChBmU,GAAkBvF,qBAAqB1W,EAAMxmB,WAAY3B,GACpDwrB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACT8P,EAA2Bsa,EAASvqB,KAAMiO,EAAOguB,EAAQ/rB,EAAMg7B,EAAUliC,EAAUmiC,EAAU71B,GAAUgV,MAAM,SAAS8gB,GACtHP,EAA4BO,GAC5BC,GAAkBpP,EAAQ,kBAC1B0O,GAAUD,GACVpY,GAAU,MAGdvD,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,wCAAyCmqB,EAAGF,SAASpqB,QAC1C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZiM,EAA6Bke,EAAGF,UAAU,EAAM,GAAI,GAAI,wCAAwC,MACpGwE,GAAgB,GAChBkI,QAINoU,GAAoB,SAAC1mC,EAAQsH,GAC/B8iB,GAAgB,GAChBiI,GAAkBlD,qBAAqB7M,EAAMxmB,WAAYkE,GACtD2lB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTqI,EAA2B+hB,EAASvqB,KAAM2E,EAAI,KAAM,KAAM,eAAe2lB,MAAM,SAASghB,GAAyB,IAAD,IAE5GtV,EAA0BsV,GAC1B,IAAIC,EAAS,GACb,UAAAD,EAAmBvkC,cAAnB,SAA2B9E,KAAI,SAAC0G,EAAOnC,GAAR,OAC5B+kC,EAAYA,+HAIM5iC,EAAE3D,KAJRumC,2CAKmC5iC,EAAE3F,cALrCuoC,wBASf,IACIC,EADWF,EAAmBtkC,kBAAkB,GAC1BhD,cACtBynC,EAAS,GACb,UAAAH,EAAmBtkC,yBAAnB,SAAsC/E,KAAI,SAAC0G,EAAOnC,GAAR,OACtCilC,EAAYA,+HAIM9iC,EAAEmE,QAAU,MAAYnE,EAAEnF,YAJhCioC,sBAKyB9iC,EAAExE,mBAAqB,KACvCwE,EAAE3E,cAAcE,qBANzBunC,oCAchB,OAASD,EAAWpnC,UAClB,KAAK,EAAwB,+BAAgC,MAC7D,KAAK,EAAwB,+BAAgC,MAC7D,KAAK,EAAwB,+BAAgC,MAC7D,KAAK,EAAwB,+BAAgC,MAC7D,QAA6B,+BAEnB,yBAAR6H,GACAslB,KAAMC,KAAK,CAGPC,kBAAmB,SACnBC,mBAAoB,UACpB5J,MAAO,OACP4jB,WAAY,UACZ7f,MAAO,MACPloB,MAAO,sBACPi0B,KACA,sCACqC0G,EAAM7Q,UAAU,GAAGrF,KAAO,UAAYkjB,EAAmB7kC,MAD9F,qCAEqC63B,EAAM7Q,UAAU,GAAGrF,KAAO,UAAYkjB,EAAmBpkC,MAF9F,qCAGqCo3B,EAAM7Q,UAAU,GAAGrF,KAHxD,0GAKckjB,EAAmBxkC,KAAK9B,KALtC,wGAOcsmC,EAAmBxkC,KAAK3E,MAPtC,6CAQqCm8B,EAAM7Q,UAAU,GAAGrF,KARxD,2CAS0CkjB,EAAmB5kC,YAT7D,6CAUqC43B,EAAM7Q,UAAU,GAAGrF,KAVxD,qCAW0CmjB,EAX1C,6CAYqCjN,EAAM7Q,UAAU,GAAGrF,KAZxD,qCAakCqjB,EAblC,0BAmBhB1c,GAAgB,MAEjBvE,OAAM,SAACC,GAGJpqB,QAAQC,IAAK,wCAAyCmqB,EAAGF,SAASpqB,QAC1C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZ6F,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,wCAAwC,MACpGwE,GAAgB,GAChBkI,OAEJlI,GAAgB,IAGhB6D,GAA0B,SAAC+Y,GAAwBrZ,GAAU,IAGzDsZ,GAAS,SAACvO,EAAYwO,GACxB,IAAMC,EAAQ,aAAO7kB,EAAMlZ,eAC3Bi9B,GAAW7qC,GAEP4qC,EADA5qC,EAEA2rC,EAASC,MAAK,SAACnsC,EAAQH,GAAT,OAAoBG,EAAEisC,GAASG,cAAcvsC,EAAEosC,OAI7DC,EAASC,MAAK,SAACnsC,EAAQH,GAAT,OAAoBA,EAAEosC,GAASG,cAAcpsC,EAAEisC,SAU5E,OAJO5kB,EAAMlZ,cAAcg+B,MAAK,SAACnsC,EAAMH,GAAP,OAAiBA,EAAEgH,MAAMulC,cAAcpsC,EAAE6G,UAKrE,mCAGG,sBAAKohB,UAAU,YAAf,UACI,qBAAKA,UAAU,aAAf,SACE,sBAAKA,UAAU,aAAf,UAEE,qBAAKA,UAAU,mBAAf,SACI,wBAAOA,UAAU,oDAAjB,UACE,uBAAOljB,GAAG,eAAV,SACE,qBAAIkjB,UAAU,uDAAd,UACI,qBAAIkD,QAAS,SAACxpB,GAAD,OAAOqqC,GAAOrqC,EAAG,cAAcsmB,UAAU,kBAAtD,UACI,mBAAGA,UAAU,wCAAwClkB,MAAO26B,EAAMzE,UAAU,GAAGzR,OAC9EkW,EAAMzE,UAAU,GAAGzR,QAExB,qBAAI2C,QAAS,SAACxpB,GAAD,OAAOqqC,GAAOrqC,EAAG,gBAAgBsmB,UAAU,aAAxD,UACQ,mBAAGA,UAAU,wCAAwClkB,MAAO26B,EAAMzE,UAAU,GAAGzR,OAC9EkW,EAAMzE,UAAU,GAAGzR,KAAK,uBACzB,iCACI,yBAASzjB,GAAG,QAAS,cAAS,WAAS,cAAvC,UAAqD,IAAE25B,EAAMzE,UAAU,GAAGC,MAAM,OAC5E,eAAC,KAAD,CAAen1B,GAAG,cAAcsmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAApE,UACKC,GAAUgS,eAAe,GAAG9R,GAAG,IAAC,uBAAK,uBAAK,cAC5B,uBAAM,IAAEF,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,uBAAK,uBAAM,eACjE,uBAAOuzB,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,gCAI1F,qBAAImhB,UAAU,WAAd,UAA0ByW,EAAMzE,UAAU,GAAGzR,KAAK,uBAC9C,uBAAMP,UAAU,cAAhB,UACQ,yBAAQljB,GAAG,SAAS,cAAS,WAAS,eAAtC,UAAqD,IAAE25B,EAAMzE,UAAU,GAAGC,MAAM,OAC5E,eAAC,KAAD,CAAen1B,GAAG,eAAesmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAArE,UACKC,GAAUgS,eAAe,GAAG9R,GAAG,IAAC,uBAAK,uBAAK,cAC5B,uBAAM,IAAEF,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,uBAAK,uBAAM,eACjE,uBAAOuzB,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,gCAI1F,qBAAIqkB,QAAS,SAACxpB,GAAD,OAAOqqC,GAAOrqC,EAAG,UAAUsmB,UAAU,kBAAlD,UACI,mBAAGA,UAAU,wCAAyClkB,MAAO26B,EAAMzE,UAAU,GAAGzR,OAC/EkW,EAAMzE,UAAU,GAAGzR,QAExB,qBAAK2C,QAAS,SAACxpB,GAAD,OAAOqqC,GAAOrqC,EAAG,kBAAkBsmB,UAAU,kBAA3D,UACI,mBAAGA,UAAU,wCAAyClkB,MAAO26B,EAAMzE,UAAU,GAAGzR,OAC/EkW,EAAMzE,UAAU,GAAGzR,QAExB,qBAAI2C,QAAS,SAACxpB,GAAD,OAAOqqC,GAAOrqC,EAAG,eAAesmB,UAAU,kBAAvD,UACI,mBAAIA,UAAU,wCAAwClkB,MAAO26B,EAAMzE,UAAU,GAAGzR,OAC/EkW,EAAMzE,UAAU,GAAGzR,aAI9B,uCAGIpoB,QAHJ,IAGIA,OAHJ,EAGIA,EAAMiC,KAAI,SAACsB,EAAOiD,GAAR,OAER,qBAAKqhB,UAAU,4BAAf,UAGI,oBAAIA,UAAU,kCAAd,SACI,qBAAKA,UAAU,aAAf,SAG8B,KAAzB7nB,EAAKwG,GAAO6H,UACT,mCAEA,yBAAQ1J,GAAG,wBAAwBomB,QAAS,kBAAMkgB,GAAkBhkB,EAAMme,MAAO7hC,EAAEoB,GAAI,cAAesmB,KAAK,SAASpD,UAAU,eAA9H,UACI,mBAAGA,UAAU,iCAAmC,OAAOyW,EAAM1J,QAAQ,GAAGxM,UAG7E,mCAEC,yBAAQzjB,GAAG,wBAAwBomB,QAAS,kBAAMkgB,GAAkBhkB,EAAMme,MAAO7hC,EAAEoB,GAAI,QAASsmB,KAAK,SAAUpD,UAAU,UAAUlkB,MAAO26B,EAAMzE,UAAU,GAAGzR,KAA7J,UACA,mBAAGP,UAAU,8BAAgC,OAAOyW,EAAM1J,QAAQ,GAAGxM,cAUjF,oBAAI,aAAW,0BAA4BP,UAAU,gBAArD,SACK7nB,EAAKwG,GAAOE,cAIjB,oBAAImhB,UAAU,4BAAd,SACK7nB,EAAKwG,GAAOO,OAAO9E,KAAI,SAAC0G,EAAQnC,GAAT,OACpB,qCACI,uBAAMqhB,UAAU,aAAhB,UACA,mBAAGA,UAAU,oDAAsD,OAAOlf,EAAE3D,QACrE,uBAEP,sBAAM6iB,UAAU,eAAhB,SAAiClf,EAAE3F,gBAAqB,+BAMpE,oBAAI,aAAW,oBAAf,SACI,oBAAG6kB,UAAU,4BAA6BkD,QAAU,kBAAMsgB,GAAkB9nC,EAAEoB,GAAI,0BAAlF,UACK25B,EAAMzE,UAAU,GAAGzR,KAAK,uBAAM,WACtBpoB,EAAKwG,GAAOC,MAAM,SAKnC,oBAAI,aAAW,4BAA4BohB,UAAU,wBAArD,SACkC,IAA7B7nB,EAAKwG,GAAO+H,eACR,sCACIvO,EAAKwG,GAAO6H,UACL,mBAAGwZ,UAAU,4DAGpB7nB,EAAKwG,GAAO+H,mBAMzB,oBAAIsZ,UAAU,wBAAyB,aAAW,yBAAlD,SAC+B,IAA1B7nB,EAAKwG,GAAOiI,YAAoB,mCAAGzO,EAAKwG,GAAOiI,4BAUpE,cAAC,eAAD,CAAc8kB,OAAQlB,EAAQpH,KAAK,QAAQgD,KAAM,GAC7CtqB,MAAO26B,EAAMzE,UAAU,GAAGzR,KAC1BoL,WAAY,kBAAIZ,MAFpB,SAGQ,cAAC,GAAD,CACInyB,WAAcwmB,EAAMxmB,WACpB6iC,MAASrc,EAAMme,MACf92B,mBAAoBs8B,EACpB7U,uBAAyBA,EACzBnD,wBAAyBA,GACzB0X,cAvSF,WAElBrjB,EAAMilB,sBAsSc1J,mBA5SG,WACvB3T,GAAcD,IA4SMyb,UA/SN,WAAQpjB,EAAMojB,aAgTRpT,iBAAoBA,EACpBxE,qBAlTK,WAAQxL,EAAMwL,iCA2TjC3D,GAAgB,cAACpD,EAAD,SChalC,IAAMrD,GAAU1X,mDA4BDw7B,GANe,CACtBC,oBAnBqB,uCAAE,WAAOrf,GAAP,SAAAntB,EAAA,sEAEV6oB,IAAMC,KAAKL,GAAU,iBAAkB,eAChD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHtC,mFAAF,sDAoBrB6N,kBAdmB,uCAAG,WAAO7N,GAAP,SAAAntB,EAAA,sEAET6oB,IAAMC,KAAKL,GAAU,kBAAmB,eACjD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHvC,mFAAH,sDAenBsf,oBATqB,uCAAG,WAAOtf,GAAP,SAAAntB,EAAA,sEAEX6oB,IAAMC,KAAKL,GAAU,iBAAkB,eAChD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHrC,mFAAH,uDCkBZ,SAASwR,GAAGtX,GAGvB,IA8CI6T,EAAaxG,EA9CjB,EAII9xB,GAAc,SAAC0kB,GAAD,MAAgB,CAC1B1iB,0BAA2B0iB,EAAM1iB,0BACjCD,mBAAoB2iB,EAAM3iB,mBAC1Ba,yBAA0B8hB,EAAM9hB,yBAChCD,mBAAoB+hB,EAAM/hB,mBAC1BO,wBAAyBwhB,EAAMxhB,wBAC/B/C,4BAA6BukB,EAAMvkB,gCAVnC6B,EAAR,EAAQA,0BAA2BD,EAAnC,EAAmCA,mBAC3Ba,EADR,EACQA,yBAA0BD,EADlC,EACkCA,mBAC1BO,EAFR,EAEQA,wBACA/C,EAHR,EAGQA,4BAUR,EAIIqT,GAAgB,SAACkR,GAAD,MAAgB,CAC5B7Q,0BAA2B6Q,EAAM7Q,0BACjCD,qBAAsB8Q,EAAM9Q,qBAC5BG,0BAA2B2Q,EAAM3Q,0BACjCE,4BAA6ByQ,EAAMzQ,4BACnCN,8BAA+B+Q,EAAM/Q,kCATrCE,EAAR,EAAQA,0BAA2BD,EAAnC,EAAmCA,qBAC3BG,EADR,EACQA,0BACAE,EAFR,EAEQA,4BACAN,EAHR,EAGQA,8BASR,EAKI/J,GAAe,SAAC8a,GAAD,MAAgB,CAC3Bza,yBAA0Bya,EAAMza,yBAChCD,SAAU0a,EAAM1a,SAChB2B,8BAA+B+Y,EAAM/Y,8BACrCO,eAAgBwY,EAAMxY,eACtBV,qBAAsBkZ,EAAMlZ,qBAC5BzB,6BAA8B2a,EAAM3a,iCAXpCE,EAAR,EAAQA,yBAA0BD,EAAlC,EAAkCA,SAC1B2B,EADR,EACQA,8BACAO,EAFR,EAEQA,eACAV,EAHR,EAGQA,qBACAzB,EAJR,EAIQA,6BAgBJ2b,GAHI9kB,EAAQ,IAGN+kB,EAAaoW,IAEnB+N,EAAY,GAERtsC,EAAQwM,EACd,EAAwC6a,mBAAS,IAAjD,mBAAO2T,EAAP,KAAqBC,EAArB,KACA,EAAkC5T,mBAAS,GAA3C,mBAAO6T,EAAP,KAAkBC,EAAlB,KACA,EAAoC9T,mBAAS,GAA7C,mBAAO+T,EAAP,KAAmBC,EAAnB,KAIF,EAAmChU,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAuCxH,oBAAS,GAAhD,mBAAOklB,EAAP,KAAoBC,GAApB,KACA,GAAuCnlB,oBAAS,GAAhD,qBAAOyH,GAAP,MAAoBC,GAApB,MAEA,GAA0D1H,mBAAS,IAAnE,qBAA8BolB,IAA9B,aAEA,GAA0BplB,mBAAS,GAAnC,qBAAO+d,GAAP,MAAcsH,GAAd,MAEA,GAA8CrlB,oBAAS,GAAvD,qBAAOslB,GAAP,MAAwBC,GAAxB,MACA,GAAwCvlB,oBAAS,GAAjD,qBAAOwlB,GAAP,MAAqBC,GAArB,MACA,GAA0BzlB,oBAAS,GAAnC,qBAAOqjB,GAAP,MAAcC,GAAd,MAIAnjB,qBAAU,WACRnnB,QAAQC,IAAI,cACZ2mB,EAAMF,mBACN1mB,QAAQkkB,UACR,IAEFiD,qBAAU,WACRuH,IAAgB,GAChB6M,GAAiBlB,oBAAoBzT,EAAMxmB,YACxC6pB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTqE,EAA0B+lB,EAASvqB,MAAMsqB,MAAM,SAASyiB,OAI5Dhe,IAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,kCAAmCmqB,GAChD9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,6BAA6B,MACpFwE,IAAgB,GAChBkI,UAEN,IAEFzP,qBAAU,WACRuH,IAAgB,GAChB6M,GAAiBjB,mBAAmB1T,EAAMxmB,YACvC6pB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTiF,EAAyBmlB,EAASvqB,MAAMsqB,MAAM,SAAS0iB,OAI3Dje,IAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,sCAAuCmqB,GACpD9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,4BAA4B,MACnFwE,IAAgB,GAChBkI,UAEN,IAEFzP,qBAAU,WACRuH,IAAgB,GAChBke,GAAmBb,oBAAoBnlB,EAAMxmB,YAC1C6pB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACPkW,EAA0BkU,EAASvqB,MAAMsqB,MAAM,SAAS4iB,OAI9Dne,IAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,gCAAiCmqB,GAC9CtU,EAA8BsU,EAAGF,UAAU,EAAM,GAAI,GAAI,+BAA+B,MACxFwE,IAAgB,GAChBkI,UAEN,IAKFzP,qBAAU,WAERuH,IAAgB,GAChBke,GAAmBrS,kBAAkB3T,EAAMxmB,YACxC6pB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACPoW,EAA0BgU,EAASvqB,MAAMsqB,MAAM,SAAS6iB,GAIxDpe,IAAgB,GAChB6M,GAAiBhB,kBAAkB3T,EAAMxmB,YACtC6pB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,SACTuF,EAAwB6kB,EAASvqB,MAAMsqB,MAAM,SAAS8iB,GAGpD32B,EAA4B22B,GAAgB9iB,MAAM,SAAS6iB,GAIrDN,IACA9d,IAAgB,GAChBmU,GAAkBzF,mBAAmBxW,EAAMxmB,YACxC6pB,MAAK,SAASC,GACU,KAAjBA,EAASpqB,SACTsM,EAAyB8d,EAASvqB,KAAMmtC,GAAmB7iB,MAAM,SAASrK,GAExE6sB,IAAgB,MAElB/d,IAAgB,OAGvBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,yCAA0CmqB,EAAGF,SAASpqB,QAC3C,KAApBsqB,EAAGF,SAASpqB,OACdE,QAAQC,IAAI,kDAEZiM,EAA6Bke,EAAGF,UAAU,EAAM,GAAI,GAAI,6BAA6B,MACvFwE,IAAgB,GAChBkI,SAIRjpB,EAAqBo3B,GAAO+H,SAIlCpe,IAAgB,OAGrBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,gCAAiCmqB,GAC9C9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,2BAA2B,MAClFwE,IAAgB,GAChBkI,WAKZlI,IAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,gCAAiCmqB,GAC9CtU,EAA8BsU,EAAGF,UAAU,EAAM,GAAI,GAAI,6BAA6B,MACtFwE,IAAgB,GAChBkI,QAEJlI,IAAgB,KAClB,CAAC4d,KAEHnlB,qBAAU,WACR8kB,EAAU5iC,KAAK,eACf,IAAIpG,EAAE,EACN,IAAIA,EAAE,IAAMA,EAAE,KAAMA,IAClBgpC,EAAU5iC,KAAKpG,EAAE0P,cAEnB,IAEFwU,qBAAU,WACRnnB,QAAQC,IAAI,gCACZyuB,IAAgB,GAChB0d,GAAyBjgC,GACzBggC,IAAgBD,KAChB,CAAC3d,IAGDpH,qBAAU,WACRnnB,QAAQC,IAAI,mCACZ,IAAMu7B,EAAYT,EA5KC,GA6KnBH,EAAgBj7B,EAAK87B,MAAMV,EAAYS,IACvCV,EAAaY,KAAKC,KAAKh8B,EAAKgB,OA9KT,KA+KnB6tB,GAAcD,GACdvuB,QAAQC,IAAI,SAAUN,KACrB,CAACo7B,EAjLiB,GAiLSp7B,IAE9BwnB,qBAAU,WAAMC,OAAOC,SAAS,CAACC,IAAI,MAAQ,CAACqT,IAKhD,IAAM/D,GAAmB,WAAQhQ,EAAMgQ,oBAEjCxE,GAAuB,WAAQxL,EAAMwL,wBAErC4X,GAAY,WACZxb,GAAcD,IAGdsd,GAAqB,SAACvnC,GAE1BioC,IAAoBD,KAmDtB,OACA,qCAGuC,GAAhC1lB,EAAMzB,UAAU,GAAGG,aACjB,qCAAE,IAAC,uBAAOkC,UAAU,YAAjB,SAA6B,iHAAiH,uBAAK,uBAAK,OAIhK,6BAAI,yBAIJ,qCAKImT,QALJ,IAKIA,OALJ,EAKIA,EAAc/4B,KAAI,SAAC0K,EAASnG,GAAV,OACjBs0B,EAAE,+BAA4BnuB,EAAIM,UAAhC,YAA6Cib,EAAIuF,UAAU,GAAGrF,KAA9D,sEAC4Bzb,EAAIO,SADhC,aAC6Cgb,EAAIuF,UAAU,GAAGrF,KAD9D,wBAIFkM,EACE,mCACC,sBAAK3vB,GAAE,mBAAcgI,EAAIhI,IAAzB,UAEE,uBAAMA,GAAG,WAAT,UACE,uBAAMkjB,UAAU,sBAAhB,UAAsC,IAAElb,EAAIE,UAAU,OACtD,uBAAMgb,UAAU,kBAAhB,UAAkC,KAAGlb,EAAIK,mBAAuB,OAChE,uBAAM6a,UAAU,iBAAhB,UAAiC,IAAEK,EAAIuF,UAAU,GAAGrF,QACpD,uBACA,uBAAMP,UAAU,KAAhB,UAAsBlb,EAAInJ,YAAY,OAAQ,QAC9C,sBAAMqkB,UAAWlb,EAAIxI,mBAArB,SAA0CwI,EAAI1I,iBAC9C,0BAIF,sBAAM4lB,wBAAyB,CAAEC,OAAQgR,UAI9C,qCACG,uBACA,eAACoB,GAAA,EAAD,CAAYC,WAAS,EAArB,UACE,cAACC,GAAA,EAAD,CACEC,OAAQ/H,EAGR3vB,GAAIgI,EAAIhI,GACR23B,YAAa3vB,EAAI1F,QACjB8jB,QAAS,kBAnGH,SAACpe,GAGrBtM,QAAQC,IAAI,OAAOqM,GACnB+/B,GAAS//B,EAAIhI,IACM,GAAfgI,EAAI1F,SACJ5G,QAAQC,IAAI,2BAA4BqM,EAAIoB,cAAc/M,QAC1B,GAA5B2L,EAAIoB,cAAc/M,QAClB+tB,IAAgB,GAChBmU,GAAkBxF,wBAAwBzW,EAAMxmB,WAAYkM,EAAIhI,IAC7D2lB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTgO,EAA8Boc,EAASvqB,KAAM2M,EAAIhI,IAAI2lB,MAAM,SAAS+iB,GAChE1C,IAAUD,OAIlB3b,IAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,wCAAyCmqB,EAAGF,SAASpqB,QAC1C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZiM,EAA6Bke,EAAGF,UAAU,EAAM,GAAI,GAAI,kCAAkC,MAC9FwE,IAAgB,GAChBkI,SAGHvoB,EAAe/B,EAAIhI,GAAI,MAAM,EAAM,KAAM,mBAIlD+J,EAAe/B,EAAIhI,GAAI,MAAM,EAAO,KAAM,iBAC1CoqB,IAAgB,IAGlBF,GAAcD,GA8De0e,CAAc3gC,KAHxBA,EAAI0Z,KAMV1Z,EAAI1F,SACA,cAACsjC,GAAD,CAEG9pC,WAAYwmB,EAAMxmB,WAClB2kC,MAASz4B,EAAIhI,GACboJ,cAAepB,EAAIoB,cACnBT,UAAaX,EAAIW,UACjB/I,mBAAsBA,EACtBY,mBAAsBA,EACtBiR,qBAAwBA,EACxB81B,mBAAsBA,GACtB7B,UAAaA,GACbpT,iBAAoBA,GACpBxE,qBAAyBA,IAXpB9lB,EAAIhI,eAmB7B,uBAAK,IAAC,uBAGDu2B,EAAY,GACZ,mCACG,cAAC,KAAD,CAEEsB,eAAe,MACfC,UACA,cAAC,KAAD,CAAsB/P,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAUtC,WAAY,WAC9FuC,mBAAoB,EACpBzB,UAAWA,EACX0B,cACE,cAAC,KAAD,CAAqBlQ,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAWtC,WAAY,UAChGyC,sBAAuB,KACvBC,mBAAmB,aACnBC,kBAAkB,WAClBC,sBAAsB,WACtBC,kBAAkB,WAClBC,gBAAgB,SAChBC,sBAAsB,OACtBC,aAxGY,SAACC,GACvB,IAAMC,EA9Oe,GA8OFD,EAAME,SAA2Bv9B,EAAKgB,OAEzDq6B,EAAciC,GACdzO,GAAcD,QA4GTE,IAAgB,cAACpD,EAAD,OC7ab,SAAS6hB,GAAYtmB,GAA0B,IAAD,IAKlDiB,EAAMC,EAAaqlB,GAM1B,OACI,mCAEG,sBAAK3lB,UAAU,QAAf,UAEI,sBAAKA,UAAU,OAAf,UACI,qBAAKA,UAAU,WAAf,SAA0B,kCAAO,sBAAMA,UAAU,cAAhB,SAA+BK,EAAIuF,UAAU,GAAGrF,OAAvD,OAA0EnB,EAAMwmB,UAAUhnC,WACpH,qBAAKohB,UAAU,WAAf,SAA0B,kCAAO,sBAAMA,UAAU,cAAhB,SAA+BK,EAAIuF,UAAU,GAAGrF,OAAvD,OAA0EnB,EAAMwmB,UAAUvmC,WACpH,qBAAK2gB,UAAU,WAAf,SAA0B,kCAAO,sBAAMA,UAAU,cAAhB,SAA+BK,EAAIuF,UAAU,GAAGrF,OAAvD,OACtB,mBAAGP,UAAU,qDAAwDZ,EAAM9M,mBAAmB8M,EAAMymB,wBAI5G,qBAAK7lB,UAAU,oBAAf,SACI,sBAAKA,UAAU,wBAAf,UACKK,EAAIuF,UAAU,GAAGrF,KAAK,uBACvB,wBAAOP,UAAU,oBAAjB,UACI,mBAAGA,UAAU,iCADjB,OAC2DZ,EAAMwmB,UAAU3mC,KAAK9B,KAAK,uBACjF,mBAAG6iB,UAAU,6CAFjB,OAEuEZ,EAAMwmB,UAAU3mC,KAAK3E,cAKpG,qBAAK0lB,UAAU,oBAAf,SACI,sBAAKA,UAAU,wBAAf,UACKK,EAAIuF,UAAU,GAAGrF,KAAK,uBACvB,uBAAOP,UAAU,qBAAjB,SAAuCZ,EAAMwmB,UAAU/mC,mBAI/D,qBAAKmhB,UAAU,oBAAf,SACI,sBAAKA,UAAU,wBAAf,UACKK,EAAIuF,UAAU,GAAGrF,KAClB,iCACI,yBAASzjB,GAAG,SAAU,cAAS,WAAS,cAAxC,cAAwDujB,EAAIuF,UAAU,GAAGqM,MAAzE,OACA,eAAC,KAAD,CAAen1B,GAAG,cAAcsmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAApE,UACKC,GAAUgS,eAAe,GAAG9R,GADjC,IACqC,uBAAK,uBAD1C,cAEmB,uBAFnB,IAE2BF,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,uBAAK,uBAF/E,eAGoB,uBAAOuzB,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,6BAG9E,uBAVJ,UAWMugB,EAAMwmB,UAAU1mC,cAXtB,aAWM,EAAwB9E,KAAI,SAAC0G,EAAOkhC,GAAR,OACzB,mCACG,wBAAOhiB,UAAU,oBAAjB,UACI,mBAAGA,UAAU,8BADjB,OACwDlf,EAAE3D,kBAO1E,qBAAK6iB,UAAU,oBAAf,SACI,sBAAKA,UAAU,wBAAf,UACKK,EAAIuF,UAAU,GAAGrF,KAClB,iCACI,yBAASzjB,GAAG,SAAU,cAAS,WAAS,eAAxC,cAAyDujB,EAAIuF,UAAU,GAAGqM,MAA1E,OACA,eAAC,KAAD,CAAen1B,GAAG,eAAesmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAArE,UACKC,GAAUgS,eAAe,GAAG9R,GADjC,IACqC,uBAAK,uBAD1C,cAEmB,uBAFnB,IAE2BF,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,uBAAK,uBAF/E,eAGoB,uBAAOuzB,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,6BAG9E,uBAVJ,UAWMugB,EAAMwmB,UAAUzmC,yBAXtB,aAWM,EAAmC/E,KAAI,SAACmnC,EAAQS,GAAT,OACpC,mCACG,wBAAOhiB,UAAU,oBAAjB,UACI,mBAAGA,UAAU,8BADjB,OACwDuhB,EAAGt8B,QAD3D,MACuEs8B,EAAG5lC,8BC3D1F,SAASmqC,GAAa1mB,GAA2B,IAAD,IAapD6T,EAVInf,EACJlE,GAAc,SAACyP,GAAD,MAAgB,CAC1BvL,sBAAuBuL,EAAMvL,0BAF7BA,sBASJuM,EAAMC,EAAaqlB,GAChBnZ,EAAK,GAGZ,EAAmChN,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAA+ExH,oBAAS,GAAxF,mBAAOumB,EAAP,KAAwCC,EAAxC,KAGArmB,qBAAU,WAGPqH,GAAcD,GACd3H,EAAM6mB,wBACP,IAEFtmB,qBAAU,WAENqmB,GAAoCD,KACtC,CAAChf,IAKH,IASMmf,EAA6B,SAACxsC,GAKhC,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GACrB8rB,EAAOD,EAAUpuB,QAAQ,KACzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAClDuI,EAAOn5B,EAAKuC,QAAQ,KACpBwZ,EAAQ/b,EAAKwC,OAAQ,EAAG22B,GACxBC,EAAap5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,GAI9Cnd,GAAW,EACfoL,EAAM1L,qBAAqBtZ,KAAI,SAACuiC,GACxBA,EAAG7/B,IAAMs0B,IAAeuL,EAAG1hC,QAAU0hC,EAAG1hC,QACxC0hC,EAAG1hC,SAAW+Y,GAAS,MAG/B,IAAImyB,EAA2B16B,KAAKC,MAAMD,KAAKE,UAAUyT,EAAM1L,uBAC/DI,EAAsBsL,EAAMgnB,MAAOryB,EAAOoyB,EAA2BnyB,EAAU,8BACnFoL,EAAMinB,qBACNrf,GAAcD,IAIZuf,EAAqB,SAAC5sC,GAKxB,IAAIivB,EAAYjvB,EAAE6pB,OAAOzmB,GACrBypC,EAAgB7sC,EAAE6pB,OAAO+F,QACzBV,EAAOD,EAAUpuB,QAAQ,KACzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAClDuI,EAAOn5B,EAAKuC,QAAQ,KACpBwZ,EAAQ/b,EAAKwC,OAAQ,EAAG22B,GACxBC,EAAap5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,GAKlDnd,GAAW,EACG,GAAdod,GACApd,EAAWuyB,EACXnnB,EAAMlM,aAAa9Y,KAAI,SAAC0H,GACL,WAAXA,EAAG3E,KAAsB2E,EAAG7G,QAAS,EAClC6G,EAAG7G,QAAU6G,EAAG7G,UAE3BmkB,EAAMlM,aAAa,GAAGF,UAAU,IAGhCoM,EAAMlM,aAAa9Y,KAAI,SAAC0H,GAChBA,EAAGhF,IAAMs0B,IAAetvB,EAAG7G,QAAU6G,EAAG7G,QAC7B,WAAX6G,EAAG3E,OAAqB2E,EAAG7G,QAAS,GACpC6G,EAAG7G,SAAW+Y,GAAS,GACZ,QAAXlS,EAAG3E,MAAkB2E,EAAG7G,QAAwB,IAAd6G,EAAGkR,YAAmBgB,GAAS,MAsB7E,IAAIwyB,EAAmB/6B,KAAKC,MAAMD,KAAKE,UAAUyT,EAAMlM,eACvDY,EAAsBsL,EAAMgnB,MAAOryB,EAAOyyB,EAAmBxyB,EAAU,sBArFvCoL,EAAM6mB,sBAuFtC7mB,EAAMinB,qBACNrf,GAAcD,IAKZ0f,EAAyB,SAAC/sC,GAE5BlB,QAAQC,IAAI,2BAA4BiB,EAAE6pB,OAAOtqB,OACjD,IAAI0vB,EAAYjvB,EAAE6pB,OAAOzmB,GACrB8rB,EAAOD,EAAUpuB,QAAQ,KACzBvC,EAAO2wB,EAAUnuB,OAAQouB,EAAK,EAAGD,EAAUxvB,OAAOyvB,GAClDuI,EAAOn5B,EAAKuC,QAAQ,KACpBwZ,EAAQ/b,EAAKwC,OAAQ,EAAG22B,GACXn5B,EAAKwC,OAAO22B,EAAK,EAAGn5B,EAAKmB,OAAOg4B,EAAK,GAIlD/R,EAAMlM,aAAa,GAAGF,UAAYtZ,EAAE6pB,OAAOtqB,MAE3C,IAAI+a,GAAW,EACwB,IAAnCoL,EAAMlM,aAAa,GAAGF,YAAmBgB,GAAW,GAExD,IAAIwyB,EAAmB/6B,KAAKC,MAAMD,KAAKE,UAAUyT,EAAMlM,eACvDY,EAAsBsL,EAAMgnB,MAAOryB,EAAOyyB,EAAmBxyB,EAAU,0BAC3EoL,EAAMinB,qBACNrf,GAAcD,IAMrB,OACI,mCAEG,qBAAK/G,UAAU,iBAAf,SACI,eAACmJ,GAAA,EAAD,CAAKnJ,UAAU,WAAf,UAGK,eAACoJ,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,2BAAtB,UACG,qBAAKA,UAAU,gDAAf,SACI,sBAAKA,UAAU,cAAf,UAEQ,gCACI,4BAAIK,EAAIuF,UAAU,IAAIrF,OACtB,iCACI,yBAAQP,UAAU,SAAU,cAAS,WAAS,aAA9C,UAA2D,IAAEK,EAAIuF,UAAU,IAAIqM,MAAM,OACrF,eAAC,KAAD,CAAen1B,GAAG,aAAasmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAAnE,UACKC,GAAUgS,eAAe,GAAG9R,GAAG,IAAC,uBAAK,uBAAK,eAC3B,uBAAM,IAAEF,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,uBAAK,gCARhG,UAaUugB,EAAM1L,4BAbhB,aAaU,EAA4BtZ,KAAI,SAACvC,EAAOiS,GAAR,OAC7BmpB,EAAE,gBAAa7T,EAAMsnB,KAAnB,YAA2B7uC,EAAEiF,IAC/B,qCACG,qBAAKkjB,UAAU,cAAf,SACI,uBACIoD,KAAK,WACLtmB,GAAIm2B,EACJ/P,QAAUgjB,EACV5c,QAASzxB,EAAEoD,WAGnB,sBAAK4pB,MAAO,CAAC2B,QAAQ,gBAArB,UAAsC,uBAAMxG,UAAU,4CAA4ClkB,MAAOjE,EAAEsF,KAArE,UAA2E,IAAEtF,EAAEmG,YAAY,OAAQ,OACzI,kCAKpB,0BAIH,cAACorB,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,iBAAtB,SACG,qBAAKA,UAAU,gDAAf,SACI,sBAAKA,UAAU,cAAf,UAEM,gCACM,4BAAIK,EAAIuF,UAAU,IAAIrF,OACtB,iCACI,yBAAQP,UAAU,SAAS,cAAS,WAAS,aAA7C,UAA0D,IAAEK,EAAIuF,UAAU,IAAIqM,MAAM,OACpF,eAAC,KAAD,CAAen1B,GAAG,aAAasmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAAnE,UACKC,GAAUgS,eAAe,GAAG9R,GAAG,IAAC,uBAAK,uBAAK,eAC3B,uBAAM,IAAEF,GAAUgS,eAAe,GAAGhzB,IAAI,GAAGvS,YAAY,uBAAK,gCARhG,UAaUugB,EAAMlM,oBAbhB,aAaU,EAAoB9Y,KAAI,SAACsB,EAAOoO,GAAR,OACrBmpB,EAAE,gBAAa7T,EAAMsnB,KAAnB,YAA2BhrC,EAAEoB,IAC/B0vB,EAAE,mBAAgBpN,EAAMsnB,KAAtB,YAA8BhrC,EAAEoB,IAClC,qCACG,qBAAKkjB,UAAU,cAAf,SACI,uBACIoD,KAAK,WACLtmB,GAAIm2B,EACJ/P,QAAUojB,EACVhd,QAAS5tB,EAAET,WAGnB,sBAAK4pB,MAAO,CAAC2B,QAAQ,gBAArB,UAAsC,uBAAMxG,UAAU,4CAA4ClkB,MAAOJ,EAAEyB,KAArE,UAA2E,IAAEzB,EAAEsC,YAAY,OAAQ,OACzI,uBAEc,GAARtC,EAAEoB,IAAWpB,EAAET,QACZ,mCACG,8BAAK,uBAAO6B,GAAI0vB,EAAIpJ,KAAK,OAAOpD,UAAU,aAAa/mB,MAAOyC,EAAEsX,UAAYuW,SAAWkd,4BCvQ/I,IAAMjmB,GAAU1X,iDAsCD69B,GARS,CACpBhgB,sBA5B2B,uCAAG,WAAOzB,GAAP,SAAAntB,EAAA,sEAEb6oB,IAAMC,KAAKL,GAAU,sBAAuB,eACrD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHnC,mFAAH,sDA6B3B+G,qBAtB0B,uCAAI,WAAO/G,EAAWjuB,GAAlB,SAAAc,EAAA,sEAEb6oB,IAAMC,KAAKL,GAAU,qBAAsBvpB,EACpD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHnC,mFAAJ,wDAuB1BkH,kBAhBuB,uCAAG,WAAOlH,EAAWjuB,GAAlB,SAAAc,EAAA,sEAET6oB,IAAMC,KAAKL,GAAU,kBAAmBvpB,EACjD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHvC,mFAAH,wDAiBvBoH,gBAVqB,uCAAI,WAAOpH,EAAWjuB,GAAlB,SAAAc,EAAA,sEAER6oB,IAAMC,KAAKL,GAAU,cAAevpB,EAC7C,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHxC,mFAAJ,yDCsBT,SAAS0hB,GAAaxnB,GAA2B,IAAD,QAuDpD6T,EAAaxG,EArDjBnxB,EAAIC,EAAQ,IAGZ,EAEI4C,GAAe,SAACkhB,GAAD,MAAgB,CAC3BwnB,4BAA6BxnB,EAAM1e,2BACnCD,uBAAwB2e,EAAM3e,uBAC9BpC,6BAA8B+gB,EAAM/gB,iCALpCuoC,EAAR,EAAQA,4BACAvoC,GADR,EAAqCoC,uBAArC,EACQpC,8BAOR,EAMIsR,GAAc,SAACyP,GAAD,MAAgB,CAC1BynB,4BAA6BznB,EAAM1e,2BACnC+P,iBAAkB2O,EAAM3O,iBACxBoD,sBAAuBuL,EAAMvL,sBAC7BtR,wBAAyB6c,EAAM7c,wBAC/B+R,sBAAuB8K,EAAM9K,sBAC7BjD,gBAAiB+N,EAAM/N,gBACvBC,gBAAiB8N,EAAM9N,gBACvBC,mBAAoB6N,EAAM7N,mBAC1BC,qBAAsB4N,EAAM5N,qBAC5BC,iBAAkB2N,EAAM3N,iBACxB3B,4BAA6BsP,EAAMtP,gCAjBnC+2B,EAAR,EAAQA,4BAA8Bp2B,EAAtC,EAAsCA,iBAC9BoD,EADR,EACQA,sBACAtR,EAFR,EAEQA,wBACA+R,EAHR,EAGQA,sBACAjD,EAJR,EAIQA,gBAAiBC,EAJzB,EAIyBA,gBAAiBC,EAJ1C,EAI0CA,mBAAoBC,EAJ9D,EAI8DA,qBAAsBC,EAJpF,EAIoFA,iBAC5E3B,EALR,EAKQA,4BAeR,EAEIX,GAAW,SAACiQ,GAAD,MAAgB,CACvB3P,+BAAgC2P,EAAM3P,+BACtCH,yBAA0B8P,EAAM9P,yBAChCF,mBAAoBgQ,EAAMhQ,uBAL1BK,EAAR,EAAQA,+BACAH,EADR,EACQA,yBAOR,GARA,EACkCF,mBAS9BtM,GAAmB,SAACsc,GAAD,MAAgB,CAC/B/a,qBAAsB+a,EAAM/a,qBAC5BpB,iCAAkCmc,EAAMnc,sCAJxCoB,EAAR,EAAQA,qBACApB,EADR,EACQA,iCAWJmd,EAAMC,EAAaqlB,GACnB9Y,EAAYvM,EAAawM,OAGzB+J,EAAiB,GAEjB52B,EAAO,IAAIC,KACX6mC,EAAW9mC,EAAKO,cAAgB,KAC/B,MAAQP,EAAKK,WAAa,IAAI2zB,OAAO,GAAK,KAC1C,KAAOh0B,EAAKG,WAAW6zB,OAAO,GAAK,KACnC,KAAOh0B,EAAK+mC,YAAY/S,OAAO,GAAK,KACpC,KAAOh0B,EAAKgnC,cAAchT,OAAO,GAAK,KACtC,KAAOh0B,EAAKinC,cAAcjT,OAAO,GAG9BkT,EAAiB,GACjBC,EAAiB,GACjBC,EAAoB,GACpBC,EAAsB,GACtBC,EAAkB,GAG1B,EAAmC/nB,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAA2DxH,oBAAS,GAApE,oBAAOgoB,GAAP,MAA8BC,GAA9B,MACA,GAAuCjoB,oBAAS,GAAhD,qBAAOyH,GAAP,MAAoBC,GAApB,MACA,GAA0B1H,oBAAS,GAAnC,qBAAOkoB,GAAP,MAAcC,GAAd,MAEA,GAA8CnoB,mBAAS,GAAvD,qBAAOooB,GAAP,MAAwBC,GAAxB,MACA,GAA0CroB,mBAAS,GAAnD,qBAAO7L,GAAP,MAAsBm0B,GAAtB,MAEA,GAAgDtoB,mBAAS9O,GAAzD,qBAAOq3B,GAAP,MAAyBC,GAAzB,MACA,GAAsDxoB,mBAAS9O,EAAiBnR,YAAhF,qBAAOq6B,GAAP,MAA4BC,GAA5B,MACA,GAAqDra,mBAAS9O,EAAiBlR,WAA/E,qBAAOs6B,GAAP,MAA4BC,GAA5B,MAGI,GAAkCva,mBAASlO,GAA3C,qBAAO22B,GAAP,MAAkBC,GAAlB,MACA,GAAkC1oB,mBAASjO,GAA3C,qBAAO42B,GAAP,MAAkBC,GAAlB,MACA,GAAwC5oB,mBAAShO,GAAjD,qBAAO62B,GAAP,MAAqBC,GAArB,MACA,GAA4C9oB,mBAAS/N,GAArD,qBAAO82B,GAAP,MAAuBC,GAAvB,MACA,GAAoChpB,mBAAS9N,GAA7C,qBAAO+2B,GAAP,MAAmBC,GAAnB,MACA,GAA0DlpB,oBAAS,GAAnE,qBAA8Bib,IAA9B,aAGA,GAA4Djb,mBAAU,CAAE1iB,GAAG,EAAG8B,MAAO,GAAIS,MAAO,GAAGL,MAAM,EAAMD,OAAQ,GAAIF,YAAa,GAAIC,UAAW,GAAIG,KAAK,CAAEnC,GAAG,EAAGK,KAAK,GAAI7C,MAAM,IAAK4E,OAAO,CAAC,CAACpC,GAAG,EAAGK,KAAK,GAAIhC,cAAc,KAClOgE,kBAAmB,CAAC,CAAErC,GAAG,EAAGnB,YAAY,GAAIuJ,cAAc,GAAID,QAAS,GAAI9I,cAAe,CAAEI,SAAS,EAAGF,qBAAqB,GAAI6L,WAAU,EAAMC,SAAS,OAD1J,qBAAO+lB,GAAP,MAA+BC,GAA/B,MAGA,GAA4C3O,mBAAS,GAArD,qBAAOqmB,GAAP,MAAuB8C,GAAvB,MACA,GAA8CnpB,oBAAS,GAAvD,qBAAOopB,GAAP,MAAwBC,GAAxB,MAIJlpB,qBAAU,WACNnnB,QAAQC,IAAI,yBAEd,IAEFknB,qBAAU,WACNuH,IAAgB,GAChB,IAAIjwB,EAAO,CAAC6F,GAAGsiB,EAAMgnB,OACrB0C,GAAiB7c,qBAAqB7M,EAAMxmB,WAAY3B,GACrDwrB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTwuC,EAA4BpkB,EAASvqB,KAAMinB,EAAMgnB,MAAOhnB,EAAM2pB,cAAe3pB,EAAM4pB,WAAY5pB,EAAM6pB,sBAAsBxmB,MAAM,SAASrK,GAEtI4vB,GAAoB5vB,GAGhB,IAAIpgB,EAAOogB,EAAMnH,YACjBi3B,GAAalwC,EAAK,GAAGqZ,UACrB+2B,GAAapwC,EAAK,GAAGqZ,UACrBi3B,GAAgBtwC,EAAK,GAAGqZ,UACxBm3B,GAAkBxwC,EAAK,GAAGqZ,UAC1Bq3B,GAAc1wC,EAAK,GAAGqZ,UAGtBw2B,GAAmBzvB,EAAMpQ,SAAS7O,QAClC2uC,GAAiB1vB,EAAMzE,cAAcxa,QAGrC0gC,GAAuBzhB,EAAM7Y,YAC7Bw6B,GAAsB3hB,EAAM5Y,WAEhCmoC,IAAUD,IACV1gB,GAAcD,MAGtBG,IAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,2CAA4CmqB,EAAGF,SAASpqB,QAC7C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,mDAEZsX,EAA4B6S,EAAGF,UAAU,EAAM,GAAI,GAAI,8BAA8B,MACrF0M,MAEJlI,IAAgB,QAExB,IAEFvH,qBAAU,WAYN8nB,IAA0BD,MAC5B,CAACzgB,IAMH,IAAMqI,GAAmB,WAAQhQ,EAAMgQ,oBAEjCxE,GAAuB,WAAQxL,EAAMwL,wBAErCse,GAAY,WAAQ9pB,EAAM8pB,aAE1BjD,GAAsB,WAExBjf,GAAcD,IAwCZsf,GAAqB,WAASxM,IAAuB,IAErDsP,GAAoB,WAAQpP,IAAsB,IAqF9CiC,GAAkB,WAEpBnF,EAAe,GAGX,IAAIuS,GAAU,EACVC,GAAU,EACVC,GAAW,EACXC,EAAW,GACXC,EAAW,GACXC,EAAY,GAIhB/4B,EAAiB1I,SAAS5N,KAAI,SAACsvC,EAASC,GAOhCD,EAAIh2B,qBAAqBva,OAAO,GACC,GAA7BuwC,EAAI/2B,0BAEA42B,EADS,GAATH,EACWG,EAAYlpB,EAAIoP,SAAS,GAAGlP,KAA5BgpB,cAAwDG,EAAIvsC,KAAO,YAEnEosC,EAAW,SAAWG,EAAIvsC,KAAO,YAChDisC,GAAS,GAMQ,GAArBM,EAAI92B,kBAEA42B,EADS,GAATH,EACWG,EAAYnpB,EAAIoP,SAAS,GAAGlP,KAA5BipB,cAAwDE,EAAIvsC,KAAO,YAEnEqsC,EAAW,SAAWE,EAAIvsC,KAAO,YAChDksC,GAAS,GAaTK,EAAIx2B,aAAa,GAAGjY,SACe,IAA/ByuC,EAAIx2B,aAAa,GAAGF,WAAiD,MAA/B02B,EAAIx2B,aAAa,GAAGF,YAEtDy2B,EADU,GAAVH,EACYG,EAAappB,EAAIoP,SAAS,GAAGlP,KAA7BkpB,cAAyDC,EAAIvsC,KAAO,YAEpEssC,EAAY,SAAWC,EAAIvsC,KAAO,YAClDmsC,GAAU,OAIN,IAAZC,IAAkB1S,EAAiB0S,EAAW,UAClC,IAAZC,IAAkB3S,EAAiBA,EAAiB2S,EAAW,UAClD,IAAbC,IAAmB5S,EAAiBA,EAAiB4S,EAAY,UAGrE,IAAIG,GAAU,EACVC,EAAW,GAGXC,EAAqB,EACzBp5B,EAAiBO,YAAY7W,KAAI,SAAC4X,EAAQC,GAEd,GAApBD,EAAGX,SAASlY,OACR6Y,EAAG/W,SAEC4uC,EADS,GAATD,EACWC,EAAYxpB,EAAIoP,SAAS,GAAGlP,KAA5BspB,cAAwD73B,EAAG9T,YAAc,YAEzE2rC,EAAW,SAAW73B,EAAG9T,YAAc,YACtD0rC,GAAS,IAKbE,EAAmB,EACnB93B,EAAGX,SAASjX,KAAI,SAAC2vC,EAAUC,GAEN,GAAbD,EAAKngC,SAAYkgC,GAAuC,MAEhEtxC,QAAQC,IAAI,QAASqxC,EAAoB,uBAAwB93B,EAAGX,SAASlY,QACzE6Y,EAAGX,SAASlY,QAAU2wC,IAGlBD,EADS,GAATD,EACWC,EAAYxpB,EAAIoP,SAAS,GAAGlP,KAA5BspB,cAAwD73B,EAAG9T,YAAc,YAEzE2rC,EAAW,SAAW73B,EAAG9T,YAAc,YACtD0rC,GAAS,OAKL,IAAZC,IAAiBhT,GAAkCgT,IAMzDI,GAAkC,WAEpC,IAAI9T,EAAW,IAAI+L,SACnB/L,EAASgM,OAAO,OAAQ/iB,EAAMgnB,OAC9B,IAAI8D,GAAe,EACfC,GAAchxC,OAAS,IACvBgxC,GAAc/vC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,aAAcp5B,EAAE6H,eAC/Du5B,GAAc/vC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,QAASp5B,MACxDmhC,GAAe,GAEfE,GAAcjxC,OAAS,IACvBixC,GAAchwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,aAAcp5B,EAAE6H,eAC/Dw5B,GAAchwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,QAASp5B,MACxDmhC,GAAe,GAEfG,GAAiBlxC,OAAS,IAC1BkxC,GAAiBjwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,aAAcp5B,EAAE6H,eAClEy5B,GAAiBjwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,QAASp5B,MAC3DmhC,GAAe,GAEfI,GAAmBnxC,OAAS,IAC5BmxC,GAAmBlwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,aAAcp5B,EAAE6H,eACpE05B,GAAmBlwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,QAASp5B,MAC7DmhC,GAAe,GAEfK,GAAepxC,OAAS,IACxBoxC,GAAenwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,aAAcp5B,EAAE6H,eAChE25B,GAAenwC,KAAI,SAAC2O,GAAYotB,EAASgM,OAAO,QAASp5B,MACzDmhC,GAAe,GAEfA,GAGAhjB,IAAgB,GAChBkb,GAAchM,yBAAyBhX,EAAMxmB,WAAYu9B,GACxD1T,MAAK,SAACC,GAEkB,KAAjBA,EAASpqB,QACToX,EAA+BgT,EAASvqB,MAAMsqB,MAAM,SAAS+nB,GAGzDC,QAIRvjB,IAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,UACtDnT,EAAyBqT,EAAGF,UAAU,EAAM,GAAI,GAAI,oCAAoC,MACxF0M,KACAlI,IAAgB,OAIpBujB,MAIFA,GAA2B,WAAO,IAAD,IAEzBC,EAAmB,CAAE5tC,GAAI,EAAIkL,SAAS,GAAI/K,MAAO,IACjD+K,EAAe,GACf2iC,EAAmB,CAAE7tC,GAAG,EAAG+T,QAAQ,GAAIC,MAAO,IAC9CD,EAAc,GACdC,EAAY,GACZ85B,EAAY,CAAE9tC,GAAI,EAAGkU,MAAO,IAC5B/T,EAAY,GACZ4tC,EAAY,CAAE/tC,GAAI,EAAG8M,OAAQ,EAAGV,KAAM,GAAI/L,KAAM,GAAIgM,iBAAkB,GAAIyH,WAAY,GAAI9R,UAAU,IAExG4rC,EAAiB5tC,GAAKsiB,EAAMgnB,MAKxB,UAAA11B,EAAiB1I,gBAAjB,SAA2B5N,KAAI,SAACqY,GAAY,IAAD,IACvC5B,EAAQ,IACR85B,EAAe,CAAE7tC,GAAG,EAAG+T,QAAQ,GAAIC,MAAO,KAC7BhU,GAAK2V,EAAG3V,GAEV,IACX6tC,EAAe,CAAE7tC,GAAG,EAAG+T,QAAQ,GAAIC,MAAO,KAC7BhU,GAAK2V,EAAG3V,GACrB,UAAA2V,EAAGiB,4BAAH,SAAyBtZ,KAAI,SAAC4gC,GAAkBA,EAAG//B,QAAU4V,EAAQhP,KAAKm5B,EAAGl+B,OAC7E6tC,EAAa95B,QAAUA,EAEvBC,EAAM,GACN,UAAA2B,EAAGS,oBAAH,SAAiB9Y,KAAI,SAAC0H,GAClB8oC,EAAY,CAAE9tC,GAAIgF,EAAGhF,GAAIkU,MAAOlP,EAAGkR,WAC/BlR,EAAG7G,QAAU6V,EAAMjP,KAAK+oC,MAEhCD,EAAa75B,MAAQA,EAErB9I,EAASnG,KAAK8oC,MAIlB,UAAAj6B,EAAiBO,mBAAjB,SAA8B7W,KAAI,SAAC4X,GAAY,IAAD,EAC1C,UAAAA,EAAGX,gBAAH,SAAajX,KAAI,SAAC0U,GAClB+7B,EAAY,CAAE/tC,GAAIgS,EAAGhS,GAAI8M,OAAQkF,EAAGlF,OAAQgH,WAAY9B,EAAG8B,WAAY1H,KAAM4F,EAAG5F,KAAM/L,KAAM2R,EAAG3R,KAAMgM,iBAAkB2F,EAAG3F,iBAAkBrK,UAAWgQ,EAAGhQ,WAC1J7B,EAAM4E,KAAKgpC,SAInBH,EAAiB1iC,SAAWA,EAE5B0iC,EAAiBztC,MAAQA,EAMzBiqB,IAAgB,GAEhB4hB,GAAiB1c,kBAAkBhN,EAAMxmB,WAAY8xC,GACpDjoB,MAAK,SAACC,GAEkB,KAAjBA,EAASpqB,QACTkK,EAAwBkgB,EAASvqB,MAAMsqB,MAAM,SAASgO,GAElDoJ,IAAuB,MAK/B3S,IAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DyX,EAA4B6S,EAAGF,UAAU,EAAM,GAAI,GAAI,2CAA2C,MAClGwE,IAAgB,OA6E5B4jB,GAA8B,WAAQjR,IAAuB,GAAQE,IAAsB,IAI7FgR,GAAY,GACZC,GAAgB,GAChBb,GAAoB,GAGxB,GAA4C3qB,mBAAS,IAArD,qBAAuByrB,IAAvB,aAII,SAASC,KAEL,IAAMxL,EAASC,uBACX,SAACC,GACG,IAAIC,EAAyB,GAgB7B,GAdAA,EAAiB,uBAAOA,GAAP,aAA6BD,IAE9C/F,IAAuB,GACvBE,IAAsB,GACtBU,IAAyB,GAEzBoF,EAAkBzlC,KAAI,SAAC0lC,EAASC,GAC5BD,EAAIhjC,GAAKijC,EACTD,EAAIl2B,OAAS,EACbk2B,EAAIlvB,WAAa,KACjBkvB,EAAI32B,iBAAmB22B,EAAI52B,KAC3B42B,EAAIhhC,UAAaioC,KAGG,GAApBkB,GAAU9uC,OAGV,IAHwB,IAAD,WAGdsC,GACAwsC,GAAUjI,WACX,SAACC,GAAD,OACAA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEmB,EACxB8d,EAAcM,OACVN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAVCA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAgBbysC,GAAa,GAAD,oBAAKD,IAAL,aAAmBrI,OAEnC,CAACqI,KAIL,EAAwC9H,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAGhBC,EAAa,SAACC,GAAD,OAAe,WAE9B1G,IAAuB,GACvBE,IAAsB,GACdlN,EAAU2T,SAAS,IAAIziB,KAC/B2L,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUlD,EAAU2T,SAAS,IAAIziB,KAAO,WAC/C0E,MAAK,SAACuH,GACL,GAAIA,EAAOC,YAAa,CACpB,IAAMwW,EAAQ,aAAOwH,IACrBxH,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxC2H,GAAazH,GAEU,GAAnBA,EAAStnC,SAETX,QAAQC,IAAM,8DACdgiC,IAAyB,UAOnCx9B,EAAQgrC,GAAU7tC,KAAI,SAACmmC,GAAD,OACxB,6BACI,eAACpX,GAAA,EAAD,WACA,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,gBAAvB,SACKugB,EAAKpjC,OAEV,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACI,wBAASj2B,MAAO+wB,EAAU2T,SAAS,GAAGziB,KAAQmF,QAASod,EAAWC,GAAQvgB,UAAU,oBAApF,SACG,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,eAAgB6E,MAAO,CAAEkB,SAAU,kBAPlFwa,EAAKpjC,SAelB,OACA,mCACI,qBAAK6iB,UAAU,uBAAf,SACI,0BAASA,UAAU,6BAAnB,UACI,kDACIogB,EAAa,CAAEpgB,UAAW,cAD9B,IAEAA,UAAU,WAFV,UAIA,sCAAWqgB,MACX,qBAAKrgB,UAAU,QAAf,SACI,8BAAO6M,EAAU2T,SAAS,GAAGziB,SAEjC,2BAGA,uBAAOiC,UAAU,mBAAjB,SAEA,oBAAIljB,GAAG,QAAP,SAAgBG,aAOhC,IAAMkuC,GAAgB,WAClBJ,GAAY,GACZC,GAAgB,GAChBC,GAAkB,IAIU,IAH5BD,GAAa,aAAO/C,KAGF9uC,QACd09B,GAAiBA,oCAEjB4D,IAAyB,GACzB2Q,MAIIL,GAAU5xC,OAAS,EAEnBuwB,KAAMC,KAAK,CACXpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KAAM,QACNlD,EAAU2T,SAAS,GAAGziB,KACtB,YACAgtB,GAAU5xC,OACV,YACA0zB,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,WACG0E,MAAK,SAACuH,GACT,IAAIA,EAAOC,YASJ,CACH,IAAK,IAAIlhB,EAAIgiC,GAAU5xC,OAAS,EAAG4P,GAAK,EAAGA,IAC3CiiC,GAAc9K,OAAO6K,GAAUhiC,GAAG63B,IAAK,GAIvC,OAFAsH,GAAa8C,SACbxyC,QAAQC,IAAI,YAAayvC,GAAa8C,KAZtC,IAAK,IAAIjiC,EAAIgiC,GAAU5xC,OAAS,EAAG4P,GAAK,EAAGA,IAC3CiiC,GAAc9K,OAAO6K,GAAUhiC,GAAG63B,IAAK,GAEvCsH,GAAa8C,IACbC,GAAkBF,IAClBK,KACApkB,GAAcD,OAalBmhB,GAAa8C,IACbC,GAAkBF,IAClBK,KACApkB,GAAcD,KAIpBqkB,GAAwB,WAEC,IAAvBJ,GAAc7xC,SACd09B,GAAiBA,sCAGjBkU,GAAY,GACZA,GAAUC,GAGVb,GAAgB7uC,EAAEqK,OAAOolC,IAAW,SAAShiC,GAAS,OAAmB,GAAZA,EAAEa,UAC/DpR,QAAQC,IAAI,wCAAwC0xC,IACpDkB,GAAoBN,GAAWZ,IAC/BnjB,GAAcD,IAIhBskB,GAAsB,SAAEC,EAAyBC,GAM/CpE,EAAW,GACXA,EAAY17B,KAAKC,MAAMD,KAAKE,UAAU2F,IAEtC,IAAIk6B,GAAU,EAGNC,EAAqBnwC,EAAE0F,MAAMsqC,EAAoB,MAErDnE,EAAW/sC,KAAI,SAACrC,EAAOmpC,GACnBsK,GAAU,EACVC,EAAmBrxC,KAAI,SAACgf,EAASsyB,GACvBtyB,GAAOrhB,EAAE+E,KAAK0uC,GAAU,MAErB,GAATA,IAAkBzzC,EAAE6R,OAAS,MAItC,IAAIV,EAAOkW,EAAMgnB,MAAQ,OACE,GAAvBmF,EAAapyC,QACZoyC,EAAanxC,KAAI,SAAC+mC,EAAOC,GACrB+F,EAAWtlC,KAAM,CAAE,GAAMu/B,EAAQ,OAAS,EAAG,WAAa,KAAM,KAAQl4B,EAAM,KAAQi4B,EAAEhkC,KAAM,iBAAmBgkC,EAAEhkC,KAAM,UAAYgkC,EAAEriC,UAAW,SAAW,QAIzKgV,EAAsBsL,EAAMgnB,MAAO,KAAMe,EAAY,KAAM,iBAC3D3uC,QAAQC,IAAI,sBAAsB0uC,IAQ1CwE,GAAY,GACZC,GAAgB,GAChBxB,GAAoB,GACxB,GAA4C5qB,mBAAS,IAArD,qBAAuBqsB,IAAvB,aAGI,SAASC,KAEL,IAAMpM,EAASC,uBACf,SAACC,GACG,IAAIC,EAAyB,GAgB7B,GAdAA,EAAiB,uBAAOA,GAAP,aAA6BD,IAE9C/F,IAAuB,GACvBE,IAAsB,GACtBU,IAAyB,GAEzBoF,EAAkBzlC,KAAI,SAAC0lC,EAASC,GAC5BD,EAAIhjC,GAAKijC,EACTD,EAAIl2B,OAAS,EACbk2B,EAAIlvB,WAAa,KACjBkvB,EAAI32B,iBAAmB22B,EAAI52B,KAC3B42B,EAAIhhC,UAAaioC,KAGG,GAApBoB,GAAUhvC,OAGd,IAH4B,IAAD,WAGlBsC,GAEL0sC,GAAUnI,WACN,SAACC,GAAD,OACAA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEmB,EACxB8d,EAAcM,OACVN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAXCA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAiBT2sC,GAAa,GAAD,oBAAKD,IAAL,aAAmBvI,OAEnC,CAACuI,KAGD,EAAwChI,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAEhBC,EAAa,SAACC,GAAD,OAAe,WAElC1G,IAAuB,GACvBE,IAAsB,GACdlN,EAAU2T,SAAS,IAAIziB,KAC/B2L,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUlD,EAAU2T,SAAS,IAAIziB,KAAO,WAC/C0E,MAAK,SAACuH,GACL,GAAIA,EAAOC,YAAa,CACxB,IAAMwW,EAAQ,aAAO0H,IACrB1H,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxC6H,GAAa3H,GAEU,GAAnBA,EAAStnC,SAETX,QAAQC,IAAM,8DACdgiC,IAAyB,UAO3Bx9B,EAAQkrC,GAAU/tC,KAAI,SAACmmC,GAAD,OAC5B,6BACI,eAACpX,GAAA,EAAD,WACA,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,gBAAvB,SACKugB,EAAKpjC,OAEV,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACI,wBAASj2B,MAAO+wB,EAAU2T,SAAS,GAAGziB,KAAQmF,QAASod,EAAWC,GAAQvgB,UAAU,oBAApF,SACA,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,eAAgB6E,MAAO,CAAEkB,SAAU,kBAP/Ewa,EAAKpjC,SAcd,OACI,mCACI,qBAAK6iB,UAAU,uBAAf,SACA,0BAASA,UAAU,6BAAnB,UACI,kDACIogB,EAAa,CAAEpgB,UAAW,cAD9B,IAEAA,UAAU,WAFV,UAIA,sCAAWqgB,MACX,qBAAKrgB,UAAU,QAAf,SACI,8BAAO6M,EAAU2T,SAAS,GAAGziB,SAEjC,2BAGA,uBAAOiC,UAAU,mBAAjB,SAEA,oBAAIljB,GAAG,QAAP,SAAgBG,aAOhC,IAAM8uC,GAAgB,WAClBJ,GAAY,GACZC,GAAgB,GAChBC,GAAkB,IAGS,KAF3BD,GAAa,aAAOzD,KAEFhvC,QACd09B,GAAiBA,8BACjB4D,IAAyB,GACzBuR,MAIAL,GAAUxyC,OAAS,EAEnBuwB,KAAMC,KAAK,CACXpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KACA,QACAlD,EAAU2T,SAAS,GAAGziB,KACtB,YACA4tB,GAAUxyC,OACV,YACA0zB,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,WACG0E,MAAK,SAACuH,GACT,IAAIA,EAAOC,YASJ,CACH,IAAK,IAAIlhB,EAAI4iC,GAAUxyC,OAAS,EAAG4P,GAAK,EAAGA,IAC3C6iC,GAAc1L,OAAOyL,GAAU5iC,GAAG63B,IAAK,GAIvC,OAFAwH,GAAawD,SACbpzC,QAAQC,IAAI,YAAa2vC,GAAawD,KAZtC,IAAK,IAAI7iC,EAAI4iC,GAAUxyC,OAAS,EAAG4P,GAAK,EAAGA,IAC3C6iC,GAAc1L,OAAOyL,GAAU5iC,GAAG63B,IAAK,GAEvCwH,GAAawD,IACbC,GAAkBF,IAClBK,KACAhlB,EAAaD,OAajBqhB,GAAawD,IACbC,GAAkBF,IAClBK,KACAhlB,EAAaD,KAIfilB,GAAwB,WACC,IAAvBJ,GAAczyC,SACd09B,EAAiBA,EAAiBhK,EAAU2T,SAAS,IAAIziB,KAAO,SAGhE4tB,GAAY,GACZA,GAAUC,GAGVxB,GAAgB9uC,EAAEqK,OAAOgmC,IAAW,SAAS5iC,GAAS,OAAmB,GAAZA,EAAEa,UAE/DqiC,GAAoBN,GAAWvB,IAC/BpjB,GAAcD,IAGhBklB,GAAsB,SAAEX,EAAyBC,GAK/CnE,EAAW,GACXA,EAAY37B,KAAKC,MAAMD,KAAKE,UAAU4F,IACtC,IAAIi6B,GAAU,EAGNC,EAAqBnwC,EAAE0F,MAAMsqC,EAAoB,MAErDlE,EAAWhtC,KAAI,SAACrC,EAAOmpC,GACnBsK,GAAU,EACVC,EAAmBrxC,KAAI,SAACgf,EAASsyB,GACvBtyB,GAAOrhB,EAAE+E,KAAK0uC,GAAU,MAE7BA,IAAWzzC,EAAE6R,OAAS,MAIhC,IAAIV,EAAOkW,EAAMgnB,MAAQ,OACE,GAAvBmF,EAAapyC,QACZoyC,EAAanxC,KAAI,SAAC+mC,EAAOC,GACrBgG,EAAWvlC,KAAM,CAAE,GAAMu/B,EAAQ,OAAS,EAAG,WAAa,KAAM,KAAQl4B,EAAM,KAAQi4B,EAAEhkC,KAAM,iBAAmBgkC,EAAEhkC,KAAM,UAAYgkC,EAAEriC,UAAW,SAAW,QAGzKgV,EAAsBsL,EAAMgnB,MAAO,KAAMgB,EAAY,KAAM,iBAC3D5uC,QAAQC,IAAI,sBAAsB2uC,IAO1C8E,GAAe,GACfC,GAAmB,GACnB9B,GAAuB,GAC3B,GAAkD7qB,mBAAS,IAA3D,qBAA0B4sB,IAA1B,aAGI,SAASC,KAEL,IAAM3M,EAASC,uBACf,SAACC,GACG,IAAIC,EAAyB,GAgB7B,GAdAA,EAAiB,uBAAOA,GAAP,aAA6BD,IAE9C/F,IAAuB,GACvBE,IAAsB,GACtBU,IAAyB,GAEzBoF,EAAkBzlC,KAAI,SAAC0lC,EAASC,GAC5BD,EAAIhjC,GAAKijC,EACTD,EAAIl2B,OAAS,EACbk2B,EAAIlvB,WAAa,QACjBkvB,EAAI32B,iBAAmB22B,EAAI52B,KAC3B42B,EAAIhhC,UAAaioC,KAGM,GAAvBsB,GAAalvC,OAGjB,IAH+B,IAAD,WAGrBsC,GAEL4sC,GAAarI,WACT,SAACC,GAAD,OACAA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEmB,EACxB8d,EAAcM,OACVN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAXCA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAiBT6sC,GAAgB,GAAD,oBAAKD,IAAL,aAAsBzI,OAEzC,CAACyI,KAGD,EAAwClI,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAEhBC,EAAa,SAACC,GAAD,OAAe,WAElC1G,IAAuB,GACvBE,IAAsB,GACdlN,EAAU2T,SAAS,IAAIziB,KAC/B2L,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUlD,EAAU2T,SAAS,IAAIziB,KAAO,WAC/C0E,MAAK,SAACuH,GACL,GAAIA,EAAOC,YAAa,CACxB,IAAMwW,EAAQ,aAAO4H,IACrB5H,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxC+H,GAAgB7H,GAEO,GAAnBA,EAAStnC,SAETX,QAAQC,IAAM,8DACdgiC,IAAyB,UAO3Bx9B,EAAQorC,GAAajuC,KAAI,SAACmmC,GAAD,OAC/B,6BACI,eAACpX,GAAA,EAAD,WACA,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,gBAAvB,SACKugB,EAAKpjC,OAEV,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACI,wBAASj2B,MAAO+wB,EAAU2T,SAAS,GAAGziB,KAAQmF,QAASod,EAAWC,GAAQvgB,UAAU,oBAApF,SACA,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,eAAgB6E,MAAO,CAAEkB,SAAU,kBAP/Ewa,EAAKpjC,SAcd,OACA,mCACI,qBAAK6iB,UAAU,uBAAf,SACA,0BAASA,UAAU,6BAAnB,UACI,kDACIogB,EAAa,CAAEpgB,UAAW,cAD9B,IAEAA,UAAU,WAFV,UAIA,sCAAWqgB,MACX,qBAAKrgB,UAAU,QAAf,SACI,8BAAO6M,EAAU2T,SAAS,GAAGziB,SAEjC,2BAGA,uBAAOiC,UAAU,mBAAjB,SAEA,oBAAIljB,GAAG,QAAP,SAAgBG,aAO5B,IAAMqvC,GAAmB,WACrBJ,GAAe,GACfC,GAAmB,GACnBC,GAAqB,IAGS,KAF9BD,GAAgB,aAAO9D,KAEFlvC,QACjB09B,GAAiBA,6CACjB4D,IAAyB,GACzB8R,MAIAL,GAAa/yC,OAAS,EAEtBuwB,KAAMC,KAAK,CACXpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KACA,QACAlD,EAAU2T,SAAS,GAAGziB,KACtB,YACAmuB,GAAa/yC,OACb,YACA0zB,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,WACG0E,MAAK,SAACuH,GACT,IAAIA,EAAOC,YASJ,CACH,IAAK,IAAIlhB,EAAImjC,GAAa/yC,OAAS,EAAG4P,GAAK,EAAGA,IAC9CojC,GAAiBjM,OAAOgM,GAAanjC,GAAG63B,IAAK,GAI7C,OAFA0H,GAAgB6D,SAChB3zC,QAAQC,IAAI,YAAa6vC,GAAgB6D,KAZzC,IAAK,IAAIpjC,EAAImjC,GAAa/yC,OAAS,EAAG4P,GAAK,EAAGA,IAC9CojC,GAAiBjM,OAAOgM,GAAanjC,GAAG63B,IAAK,GAE7C0H,GAAgB6D,IAChBC,GAAqBF,IACrBK,KACAvlB,EAAaD,OAajBuhB,GAAgB6D,IAChBC,GAAqBF,IACrBK,KACAvlB,EAAaD,KAIfwlB,GAA2B,WACC,IAA1BJ,GAAiBhzC,SACjB09B,EAAiBA,EAAiBhK,EAAU2T,SAAS,IAAIziB,KAAO,SAGhEmuB,GAAe,GACfA,GAAaC,GAGb9B,GAAmB/uC,EAAEqK,OAAOumC,IAAc,SAASnjC,GAAS,OAAmB,GAAZA,EAAEa,UAErE4iC,GAAuBN,GAAc7B,IACrCrjB,GAAcD,IAGhBylB,GAAyB,SAAElB,EAAyBC,GAKlDlE,EAAc,GACdA,EAAe57B,KAAKC,MAAMD,KAAKE,UAAU6F,IACzC,IAAIg6B,GAAU,EAGNC,EAAqBnwC,EAAE0F,MAAMsqC,EAAoB,MAErDjE,EAAcjtC,KAAI,SAACrC,EAAOmpC,GACtBsK,GAAU,EACVC,EAAmBrxC,KAAI,SAACgf,EAASsyB,GACvBtyB,GAAOrhB,EAAE+E,KAAK0uC,GAAU,MAE7BA,IAAWzzC,EAAE6R,OAAS,MAIhC,IAAIV,EAAOkW,EAAMgnB,MAAQ,UACE,GAAvBmF,EAAapyC,QACZoyC,EAAanxC,KAAI,SAAC+mC,EAAOC,GACrBiG,EAAcxlC,KAAM,CAAE,GAAMu/B,EAAQ,OAAS,EAAG,WAAa,QAAS,KAAQl4B,EAAM,KAAQi4B,EAAEhkC,KAAM,iBAAmBgkC,EAAEhkC,KAAM,UAAYgkC,EAAEriC,UAAW,SAAW,QAG/KgV,EAAsBsL,EAAMgnB,MAAO,KAAMiB,EAAe,KAAM,oBAC9D7uC,QAAQC,IAAI,yBAAyB4uC,IAO7CoF,GAAiB,GACjBC,GAAqB,GACrBpC,GAAyB,GAC7B,GAAsD9qB,mBAAS,IAA/D,qBAA4BmtB,IAA5B,aAGI,SAASC,KAEL,IAAMlN,EAASC,uBACf,SAACC,GACG,IAAIC,EAAyB,GAgB7B,GAdAA,EAAiB,uBAAOA,GAAP,aAA6BD,IAE9C/F,IAAuB,GACvBE,IAAsB,GACtBU,IAAyB,GAEzBoF,EAAkBzlC,KAAI,SAAC0lC,EAASC,GAC5BD,EAAIhjC,GAAKijC,EACTD,EAAIl2B,OAAS,EACbk2B,EAAIlvB,WAAa,UACjBkvB,EAAI32B,iBAAmB22B,EAAI52B,KAC3B42B,EAAIhhC,UAAaioC,KAGQ,GAAzBwB,GAAepvC,OAGnB,IAHiC,IAAD,WAGvBsC,GAEL8sC,GAAevI,WACX,SAACC,GAAD,OACAA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEmB,EACxB8d,EAAcM,OACVN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAXCA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAiBT+sC,GAAkB,GAAD,oBAAKD,IAAL,aAAwB3I,OAE7C,CAAC2I,KAGD,EAAwCpI,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAEhBC,EAAa,SAACC,GAAD,OAAe,WAElC1G,IAAuB,GACvBE,IAAsB,GACdlN,EAAU2T,SAAS,IAAIziB,KAC/B2L,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUlD,EAAU2T,SAAS,IAAIziB,KAAO,WAC/C0E,MAAK,SAACuH,GACL,GAAIA,EAAOC,YAAa,CACxB,IAAMwW,EAAQ,aAAO8H,IACrB9H,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxCiI,GAAkB/H,GAEK,GAAnBA,EAAStnC,SAETX,QAAQC,IAAM,8DACdgiC,IAAyB,UAO3Bx9B,EAAQsrC,GAAenuC,KAAI,SAACmmC,GAAD,OACjC,6BACI,eAACpX,GAAA,EAAD,WACA,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,gBAAvB,SACKugB,EAAKpjC,OAEV,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACI,wBAASj2B,MAAO+wB,EAAU2T,SAAS,GAAGziB,KAAQmF,QAASod,EAAWC,GAAQvgB,UAAU,oBAApF,SACA,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,eAAgB6E,MAAO,CAAEkB,SAAU,kBAP/Ewa,EAAKpjC,SAcd,OACA,mCACI,qBAAK6iB,UAAU,uBAAf,SACA,0BAASA,UAAU,6BAAnB,UACI,kDACIogB,EAAa,CAAEpgB,UAAW,cAD9B,IAEAA,UAAU,WAFV,UAIA,sCAAWqgB,MACX,qBAAKrgB,UAAU,QAAf,SACI,8BAAO6M,EAAU2T,SAAS,GAAGziB,SAEjC,2BAGA,uBAAOiC,UAAU,mBAAjB,SAEA,oBAAIljB,GAAG,QAAP,SAAgBG,aAO5B,IAAM4vC,GAAqB,WACvBJ,GAAiB,GACjBC,GAAqB,GACrBC,GAAuB,IAGS,KAFhCD,GAAkB,aAAOnE,KAEFpvC,QACnB09B,GAAiBA,0BACjB4D,IAAyB,GACzBqS,MAIAL,GAAetzC,OAAS,EAExBuwB,KAAMC,KAAK,CACXpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KACA,QACAlD,EAAU2T,SAAS,GAAGziB,KACtB,YACA0uB,GAAetzC,OACf,YACA0zB,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,WACG0E,MAAK,SAACuH,GACT,IAAIA,EAAOC,YASJ,CACH,IAAK,IAAIlhB,EAAI0jC,GAAetzC,OAAS,EAAG4P,GAAK,EAAGA,IAChD2jC,GAAmBxM,OAAOuM,GAAe1jC,GAAG63B,IAAK,GAIjD,OAFA4H,GAAkBkE,SAClBl0C,QAAQC,IAAI,YAAa+vC,GAAkBkE,KAZ3C,IAAK,IAAI3jC,EAAI0jC,GAAetzC,OAAS,EAAG4P,GAAK,EAAGA,IAChD2jC,GAAmBxM,OAAOuM,GAAe1jC,GAAG63B,IAAK,GAEjD4H,GAAkBkE,IAClBC,GAAuBF,IACvBK,KACA9lB,EAAaD,OAajByhB,GAAkBkE,IAClBC,GAAuBF,IACvBK,KACA9lB,EAAaD,KAIf+lB,GAA6B,WACC,IAA5BJ,GAAmBvzC,SACnB09B,EAAiBA,EAAiBhK,EAAU2T,SAAS,IAAIziB,KAAO,SAGhE0uB,GAAiB,GACjBA,GAAeC,GAGfpC,GAAqBhvC,EAAEqK,OAAO8mC,IAAgB,SAAS1jC,GAAS,OAAmB,GAAZA,EAAEa,UAEzEmjC,GAAyBN,GAAgBnC,IACzCtjB,GAAcD,IAGhBgmB,GAA2B,SAAEzB,EAAyBC,GAKpDjE,EAAgB,GAChBA,EAAiB77B,KAAKC,MAAMD,KAAKE,UAAU8F,IAC3C,IAAI+5B,GAAU,EAGNC,EAAqBnwC,EAAE0F,MAAMsqC,EAAoB,MAErDhE,EAAgBltC,KAAI,SAACrC,EAAOmpC,GACxBsK,GAAU,EACVC,EAAmBrxC,KAAI,SAACgf,EAASsyB,GACvBtyB,GAAOrhB,EAAE+E,KAAK0uC,GAAU,MAE7BA,IAAWzzC,EAAE6R,OAAS,MAIhC,IAAIV,EAAOkW,EAAMgnB,MAAQ,YACE,GAAvBmF,EAAapyC,QACZoyC,EAAanxC,KAAI,SAAC+mC,EAAOC,GACrBkG,EAAgBzlC,KAAM,CAAE,GAAMu/B,EAAQ,OAAS,EAAG,WAAa,UAAW,KAAQl4B,EAAM,KAAQi4B,EAAEhkC,KAAM,iBAAmBgkC,EAAEhkC,KAAM,UAAYgkC,EAAEriC,UAAW,SAAW,QAGnLgV,EAAsBsL,EAAMgnB,MAAO,KAAMkB,EAAiB,KAAM,sBAChE9uC,QAAQC,IAAI,2BAA2B6uC,IAO/C0F,GAAa,GACbC,GAAiB,GACjB1C,GAAqB,GACzB,GAA8C/qB,mBAAS,IAAvD,qBAAwB0tB,IAAxB,aAGI,SAASC,KAEL,IAAMzN,EAASC,uBACf,SAACC,GACG,IAAIC,EAAyB,GAgB7B,GAdAA,EAAiB,uBAAOA,GAAP,aAA6BD,IAE9C/F,IAAuB,GACvBE,IAAsB,GACtBU,IAAyB,GAEzBoF,EAAkBzlC,KAAI,SAAC0lC,EAASC,GAC5BD,EAAIhjC,GAAKijC,EACTD,EAAIl2B,OAAS,EACbk2B,EAAIlvB,WAAa,MACjBkvB,EAAI32B,iBAAmB22B,EAAI52B,KAC3B42B,EAAIhhC,UAAaioC,KAGI,GAArB0B,GAAWtvC,OAGf,IAH6B,IAAD,WAGnBsC,GAELgtC,GAAWzI,WACP,SAACC,GAAD,OACAA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEmB,EACxB8d,EAAcM,OACVN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAXCA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAiBTitC,GAAc,GAAD,oBAAKD,IAAL,aAAoB7I,OAErC,CAAC6I,KAGD,EAAwCtI,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAEhBC,EAAa,SAACC,GAAD,OAAe,WAElC1G,IAAuB,GACvBE,IAAsB,GACdlN,EAAU2T,SAAS,IAAIziB,KAC/B2L,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUlD,EAAU2T,SAAS,IAAIziB,KAAO,WAC/C0E,MAAK,SAACuH,GACL,GAAIA,EAAOC,YAAa,CACxB,IAAMwW,EAAQ,aAAOgI,IACrBhI,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxCmI,GAAcjI,GAES,GAAnBA,EAAStnC,SAETX,QAAQC,IAAM,8DACdgiC,IAAyB,UAO3Bx9B,EAAQwrC,GAAWruC,KAAI,SAACmmC,GAAD,OAC7B,6BACI,eAACpX,GAAA,EAAD,WACA,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,gBAAvB,SACKugB,EAAKpjC,OAEV,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACI,wBAASj2B,MAAO+wB,EAAU2T,SAAS,GAAGziB,KAAQmF,QAASod,EAAWC,GAAQvgB,UAAU,oBAApF,SACA,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,eAAgB6E,MAAO,CAAEkB,SAAU,kBAP/Ewa,EAAKpjC,SAcd,OACA,mCACI,qBAAK6iB,UAAU,uBAAf,SACA,0BAASA,UAAU,6BAAnB,UACI,kDACIogB,EAAa,CAAEpgB,UAAW,cAD9B,IAEAA,UAAU,WAFV,UAIA,sCAAWqgB,MACX,qBAAKrgB,UAAU,QAAf,SACI,8BAAO6M,EAAU2T,SAAS,GAAGziB,SAEjC,2BAGA,uBAAOiC,UAAU,mBAAjB,SAEA,oBAAIljB,GAAG,QAAP,SAAgBG,aAO5B,IAAMmwC,GAAiB,WACnBJ,GAAa,GACbC,GAAiB,GACjBC,GAAmB,IAGS,KAF5BD,GAAc,aAAOxE,KAEFtvC,QACf09B,GAAiBA,gDACjB4D,IAAyB,GACzB4S,MAIAL,GAAW7zC,OAAS,EAEpBuwB,KAAMC,KAAK,CACXpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KACA,QACAlD,EAAU2T,SAAS,GAAGziB,KACtB,YACAivB,GAAW7zC,OACX,YACA0zB,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,YACA8O,EAAU2T,SAAS,IAAIziB,KACvB,WACG0E,MAAK,SAACuH,GACT,IAAIA,EAAOC,YASJ,CACH,IAAK,IAAIlhB,EAAIikC,GAAW7zC,OAAS,EAAG4P,GAAK,EAAGA,IAC5CkkC,GAAe/M,OAAO8M,GAAWjkC,GAAG63B,IAAK,GAIzC,OAFA8H,GAAcuE,SACdz0C,QAAQC,IAAI,YAAaiwC,GAAcuE,KAZvC,IAAK,IAAIlkC,EAAIikC,GAAW7zC,OAAS,EAAG4P,GAAK,EAAGA,IAC5CkkC,GAAe/M,OAAO8M,GAAWjkC,GAAG63B,IAAK,GAEzC8H,GAAcuE,IACdC,GAAmBF,IACnBK,KACArmB,EAAaD,OAajB2hB,GAAcuE,IACdC,GAAmBF,IACnBK,KACArmB,EAAaD,KAIfsmB,GAAyB,WACC,IAAxBJ,GAAe9zC,SACf09B,EAAiBA,EAAiBhK,EAAU2T,SAAS,IAAIziB,KAAO,SAGhEivB,GAAa,GACbA,GAAWC,GAGX1C,GAAiBjvC,EAAEqK,OAAOqnC,IAAY,SAASjkC,GAAS,OAAmB,GAAZA,EAAEa,UAEjE0jC,GAAqBN,GAAYzC,IACjCvjB,GAAcD,IAGhBumB,GAAuB,SAAEhC,EAAyBC,GAKhDhE,EAAY,GACZA,EAAa97B,KAAKC,MAAMD,KAAKE,UAAU+F,IACvC,IAAI85B,GAAU,EAGNC,EAAqBnwC,EAAE0F,MAAMsqC,EAAoB,MAErD/D,EAAYntC,KAAI,SAACrC,EAAOmpC,GACpBsK,GAAU,EACVC,EAAmBrxC,KAAI,SAACgf,EAASsyB,GACvBtyB,GAAOrhB,EAAE+E,KAAK0uC,GAAU,MAE7BA,IAAWzzC,EAAE6R,OAAS,MAIhC,IAAIV,EAAOkW,EAAMgnB,MAAQ,QACE,GAAvBmF,EAAapyC,QACZoyC,EAAanxC,KAAI,SAAC+mC,EAAOC,GACrBmG,EAAY1lC,KAAM,CAAE,GAAMu/B,EAAQ,OAAS,EAAG,WAAa,MAAO,KAAQl4B,EAAM,KAAQi4B,EAAEhkC,KAAM,iBAAmBgkC,EAAEhkC,KAAM,UAAYgkC,EAAEriC,UAAW,SAAW,QAG3KgV,EAAsBsL,EAAMgnB,MAAO,KAAMmB,EAAa,KAAM,kBAC5D/uC,QAAQC,IAAI,uBAAuB8uC,IAMlD,OACC,qCAGM,gCACI,+BAAKQ,GAAiB9iC,QAAQ,MAAI8iC,GAAiB7iC,cAAc,MAAI6iC,GAAiBz3B,UAAU,QAAhG,UACMy3B,GAAiB51B,qBADvB,aACM,EAAgC/X,KAAI,SAACmzC,EAAQC,GAAT,OACjC,mCACG,uBAAMxtB,UAAU,iCAAhB,UACI,mBAAGA,UAAU,iDAAoDutB,EAAG,cADlBC,WAMlE,qBAAIxtB,UAAU,cAAd,UAA6B+nB,GAAiBpsC,YAAY,QACtD,uBAAMqkB,UAAW+nB,GAAiBzrC,mBAAlC,UACKyrC,GAAiB3rC,eAAe,aAI/C,uBAGE,sBAAKU,GAAG,yBAAR,UAGQ,gCAEI,sBAAMkjB,UAAU,WAAhB,SAA4BK,EAAI2R,UAAU,GAAGzR,OAAY,OAF7D,UAKMwnB,GAAiBpgC,gBALvB,aAKM,EAA2BvN,KAAI,SAACsB,EAAOsmC,GAAR,OAC5B/O,EAAE,eAAYv3B,EAAEoB,IAChB,mCACG,uBAAMkjB,UAAU,iCAAhB,UAAkD,OAC9C,mBAAGljB,GAAIm2B,EAAI/P,QAAS,kBAtpDtB,SAACpmB,EAAQklC,GAC/B9a,IAAgB,GACZiI,GAAkBlD,qBAAqB7M,EAAMxmB,WAAYkE,GACxD2lB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTuuC,EAA4BnkB,EAASvqB,KAAM2E,EAAI,KAAM,KAAM,gBAAgB2lB,MAAM,SAASrK,GAEtFuwB,GAAkB3G,GAClB7T,GAA0B/V,GAE1BywB,IAAmB,MAG3B3hB,IAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,wCAAyCmqB,EAAGF,SAASpqB,QAC1C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,mDAEZ6F,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,yCAAyC,MACjG0M,MAEJlI,IAAgB,MAExBA,IAAgB,GA6nDgCsc,CAAkB9nC,EAAEoB,GAAIklC,IAAShiB,UAAU,kCAAnE,SAAsGtkB,EAAEkD,QAAU,mBAM7HgqC,IACI,mCACG,sBAAK5oB,UAAU,oCAAf,UAEI,qBAAKA,UAAU,uDAAf,SACI,mBAAGljB,GAAG,aAAasmB,KAAK,SAASF,QAAS,WAnqD3C2lB,IAAmB,IAmqD+C7oB,UAAU,SAA3E,SACI,mBAAGA,UAAU,yEAIrB,sBAAKA,UAAU,kBAAf,UACI,cAAC0lB,GAAD,CACIpzB,mBAAoBy1B,GAAiBz1B,mBACrCuzB,eAAgBA,GAChBD,UAAa1X,KAEjB,kCAQpB,sBAAKlO,UAAU,gBAAf,UAEI,sBAAMA,UAAU,WAAhB,SAA4BK,EAAI2R,UAAU,GAAGzR,OAC7C,iCACI,wBAAQP,UAAU,SAAU,cAAS,WAAS,YAA9C,SAA2DK,EAAI2R,UAAU,GAAGC,QAC5E,eAAC,KAAD,CAAen1B,GAAG,YAAYsmB,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAAlE,UACKC,GAAUgS,eAAe,GAAG9R,GAAG,IAAC,uBAAK,uBAAK,cAC5B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,uBAAK,6BAGtE,uBAAMmhB,UAAU,kBAAhB,UAAkC,IAAE4nB,MACpC,uBAAM5nB,UAAU,iBAAhB,UAAiC,IAAEK,EAAIuF,UAAU,GAAGrF,QAGpD,sBAAKP,UAAU,gDAAf,oBAEM+nB,GAAiB//B,gBAFvB,aAEM,EAA2B5N,KAAI,SAACqY,EAAQg7B,GAAT,OAC5Bxa,EAAE,cAAWxgB,EAAG3V,IAEhB2vB,EACG,mCACI,qBAAK3vB,GAAIm2B,EAAT,SACI,uBAAMjT,UAAU,KAAhB,UAAqB,IAAEvN,EAAGtV,KAAK,WAI1C,qCACG,uBACA,eAACk3B,GAAA,EAAD,CAAYC,WAAS,EAACtU,UAAU,WAAhC,UACI,cAACuU,GAAA,EAAD,CAGIC,OAAQ/H,EACR3vB,GAAI2V,EAAG3V,GACP23B,YAAahiB,EAAGrT,QAChB8jB,QAAS,kBA3rDT,SAACuqB,EAAah7B,GAC9C,IAAIza,EAAO+vC,GAAiB//B,SAASylC,GAASruC,QAC9C2oC,GAAiB//B,SAASylC,GAASruC,SAAWpH,EAC9CiuC,KAwrD+CyH,CAA4BD,KAJtCh7B,EAAG+L,KAOX/L,EAAGrT,SACI,mCACA,cAAC0mC,GAAD,CACIM,MAAShnB,EAAMgnB,MACfM,KAAQj0B,EAAG3V,GACXoW,aAAgBT,EAAGS,aACnBQ,qBAAwBjB,EAAGiB,qBAC3B2yB,mBAAsBA,GACtB8C,kBAAqBA,GACrB2B,4BAA+BA,GAC/B7E,oBAAuBA,GACvBiD,UAAaA,GACb9Z,iBAAoBA,GACpBxE,qBAAyBA,gBAOjD,6BAKNjX,GAAgB,GACf,qCACI,wBAAQqM,UAAU,0BAAlB,UACE,sBAAMA,UAAU,2BAAhB,SAA2C,4BAAIK,EAAIoP,SAAS,GAAGlP,SAAgB,UACzE,0BA7GvB,UAkHU7P,EAAiBO,mBAlH3B,aAkHU,EAA8B7W,KAAI,SAAC4X,EAAQ27B,GAAT,OAC/B1a,EAAE,oBAAiBjhB,EAAGZ,KACtB,mCACKY,EAAG/W,QACA,qCACG,sBAAK+kB,UAAU,gBAAf,UACI,uBAAMA,UAAU,WAAhB,UAA4BhO,EAAG9T,YAAY,QAC3C,iCACI,yBAAQ8hB,UAAU,SAAS,cAAS,WAAUiT,EAA9C,UAAkD,UAAQjhB,EAAGZ,IAAI,SACjE,eAAC,KAAD,CAAetU,GAAIm2B,EAAI7P,KAAK,OAAQ8O,MAAM,QAAQC,WAAS,EAA3D,UACKC,GAAUgS,eAAe,GAAG9R,GAAG,IAAC,uBAAK,uBAAK,aAC/BtgB,EAAGZ,IAAI,uBAAM,IAAEghB,GAAUC,SAASrgB,EAAGZ,KAAKvS,YAAY,uBAAK,gCAInF,qBAAKmhB,UAAU,GAAf,SACI,sBAAKA,UAAU,kBAAf,UACe,MAAXhO,EAAGb,QAAqB,cAAE+5B,GAAF,IACb,MAAXl5B,EAAGb,QAAqB,cAAE26B,GAAF,IACb,SAAX95B,EAAGb,QAAqB,cAAEk7B,GAAF,IACb,WAAXr6B,EAAGb,QAAqB,cAAEy7B,GAAF,IACb,OAAX56B,EAAGb,QAAqB,cAAEg8B,GAAF,oBAS1D,uBAGE,qBAAKrwC,GAAG,mBAAR,SACI,sBAAKkjB,UAAU,+BAAf,UAC+B,GAAzB+nB,GAAiB/oC,MACd,qCACK46B,GACI,qCAAE,IAAC,yBAAQ1W,QAluDhB,WAGbioB,KACAY,KACAO,KACAO,KACAO,KAaJpR,KAEAiO,KAGuB,IAAlBpT,GACDnN,KAAMC,KAAK,CACP9D,KAAM,OACNiK,kBAAmB,UACnBD,iBAAkB,SAClBH,kBAAkB,EAClBC,mBAAkB,EAClB3L,MAAO,MACPloB,MAAO,6DACPi0B,KAAM,gMAAkM8G,EAAiB,2TAE7NkD,IAAsB,KAIlBrQ,KAAMC,KAAK,CACP9D,KAAM,OACNiK,kBAAmB,UACnBD,iBAAkB,SAClBH,kBAAkB,EAClBC,mBAAkB,EAClB3L,MAAO,MACPloB,MAAO,8CACPi0B,KAAM,QAAU1P,EAAIoP,SAAS,GAAGlP,KAAO,WAM3CwZ,IAAsB,KA4qD0B/Z,UAAU,iBAAzC,UAA0D,KAAE,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,WAA0B,UACvJ,qCAAE,IAAC,yBAAQP,UAAU,mBAAmB9kB,UAAQ,EAA7C,UAA8C,KAAE,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,UAEhJuZ,GACI,qCAAE,IAAC,yBAAQ5W,QA37CjB,WAGhB,IAAIof,EAAe,CAACxlC,GAAI,EAAGsK,MAAM,GACjCk7B,EAAcxlC,GAAIsiB,EAAMgnB,MAIxB0C,GAAiBxc,gBAAgBlN,EAAMxmB,WAAY0pC,GAClD7f,MAAK,SAACC,GAEkB,KAAjBA,EAASpqB,QACTic,EAAsBmO,EAASvqB,MAAMsqB,MAAM,SAASkO,GAIhD7c,EAAsBsL,EAAMgnB,MAAO,KAAM,KAAM,KAAM,eACpD1c,KAAMC,KAAK,CACR9D,KAAM,OACNiK,kBAAmB,UACnBD,iBAAkB,SAClBH,kBAAkB,EAClBC,mBAAkB,EAClB3L,MAAO,MACPloB,MAAO,sHACPi0B,KAAM,4GAGVgK,IAAsB,GAGtB,IAAInJ,EAAY,CAACgd,cAAc,GAC/Bhd,EAAWgd,cAAiBxuB,EAAMgnB,MAElCtV,GAAsBjK,eAAezH,EAAMxmB,WAAYg4B,GAClDnO,MAAK,SAACC,GAEHpe,EAAqBoe,EAASvqB,MAAMsqB,MAAM,SAASsO,GAY/CgJ,IAAsB,GACtBnP,WAIPjI,OAAM,SAACC,GACJpqB,QAAQC,IAAK,kCAAmCmqB,EAAGF,SAASpqB,QAC5D4K,EAAiC0f,EAAGF,UAAU,EAAM,GAAI,GAAI,sCAAsC,MAElG0M,QAER6W,KACAiD,WAKXvmB,OAAM,SAACC,GACJpqB,QAAQC,IAAK,mCAAoCmqB,EAAGF,SAASpqB,QAC7DyX,EAA4B6S,EAAGF,UAAU,EAAM,GAAI,GAAI,mCAAmC,UAu3CvC1C,UAAU,iBAAxC,UAAyD,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,UACtJ,qCAAE,IAAC,yBAAQP,UAAU,mBAAmB9kB,UAAQ,EAA7C,UAA8C,IAAC,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,aAIzJ,yBAAQ2C,QApwDA,WACZ0W,GACIlQ,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,QAAU1P,EAAIoP,SAAS,GAAGlP,KAAO,WACxCkC,MAAK,SAACuH,GACDA,EAAOC,aACP7K,EAAM2L,wBAAwB,OAMtC3L,EAAM2L,wBAAwB,KAgvDC/K,UAAU,mBAAzC,UAA4D,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,YAK5J0G,IAAgB,cAACpD,EAAD,OCh/Db,SAAS8hB,GAAGvmB,GAGzB,IAkCQoN,EAAI0G,EAAKzG,EAlCjB,EAGI9xB,GAAc,SAAC0kB,GAAD,MAAgB,CAC1B1iB,0BAA2B0iB,EAAM1iB,0BACjCD,mBAAoB2iB,EAAM3iB,mBAC1BqB,uBAAwBshB,EAAMthB,uBAC9BD,gBAAiBuhB,EAAMvhB,gBACvBhD,4BAA6BukB,EAAMvkB,gCARnC6B,EAAR,EAAQA,0BAA2BD,EAAnC,EAAmCA,mBAC3BqB,EADR,EACQA,uBAAwBD,EADhC,EACgCA,gBACxBhD,EAFR,EAEQA,4BASR,EAEIqT,GAAgB,SAACkR,GAAD,MAAgB,CAC5BrQ,4BAA6BqQ,EAAMrQ,4BACnCD,0BAA2BsQ,EAAMtQ,0BACjCT,8BAA+B+Q,EAAM/Q,kCALrCU,EAAR,EAAQA,4BAA6BD,EAArC,EAAqCA,0BAC7BT,EADR,EACQA,8BAOR,EAEIsB,GAAc,SAACyP,GAAD,MAAgB,CAC1B5gB,4BAA6B4gB,EAAM5gB,4BACnCuR,SAAUqP,EAAMrP,SAChBD,4BAA6BsP,EAAMtP,gCALnCtR,EAAR,EAAQA,4BAA6BuR,EAArC,EAAqCA,SAC7BD,EADR,EACQA,4BAaJsQ,GAHI9kB,EAAQ,IAGN+kB,EAAaqlB,IAGfxtC,EAAQ6X,EACd,EAAwCwP,mBAAS,IAAjD,mBAAO2T,EAAP,KAAqBC,EAArB,KACA,EAAkC5T,mBAAS,GAA3C,mBAAO6T,EAAP,KAAkBC,EAAlB,KACA,EAAoC9T,mBAAS,GAA7C,mBAAO+T,EAAP,KAAmBC,EAAnB,KAIF,EAAmChU,oBAAS,GAA5C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAsCxH,oBAAS,GAA/C,mBAAOquB,EAAP,KAAoBC,EAApB,KACA,EAAuCtuB,oBAAS,GAAhD,mBAAOyH,EAAP,KAAoBC,EAApB,KAEA,GAA0B1H,mBAAS,GAAnC,qBAAO4mB,GAAP,MAAc2H,GAAd,MAEA,GAA0BvuB,oBAAS,GAAnC,qBAAOkoB,GAAP,MAAcC,GAAd,MACA,GAA4BnoB,oBAAS,GAArC,qBAAOgL,GAAP,MAAeC,GAAf,MAEA,GAA8CjL,mBAAS,GAAvD,qBACA,IADA,YAC0CA,mBAAS,IAAnD,iCAGAG,qBAAU,WACRnnB,QAAQC,IAAI,cACZ2mB,EAAMF,mBACN1mB,QAAQkkB,UACR,IAEFiD,qBAAU,WACRuH,GAAgB,GAChB6M,GAAiBf,iBAAiB5T,EAAMxmB,YACrC6pB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTyF,EAAuB2kB,EAASvqB,MAAMsqB,MAAM,SAAStqB,OAIzD+uB,GAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,+BAAgCmqB,GAC7C9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,0BAA2B,MAClFwE,GAAgB,GAChBkI,UAEN,IAEFzP,qBAAU,WACRuH,GAAgB,GAChB6M,GAAiBlB,oBAAoBzT,EAAMxmB,YACxC6pB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTqE,EAA0B+lB,EAASvqB,MAAMsqB,MAAM,SAAStqB,OAI5D+uB,GAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,kCAAmCmqB,GAChD9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,6BAA6B,MACpFwE,GAAgB,GAChBkI,UAEN,IAEFzP,qBAAU,WACRuH,GAAgB,GAChBke,GAAmBZ,oBAAoBplB,EAAMxmB,YAC1C6pB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACT0W,EAA4B0T,EAASvqB,MAAMsqB,MAAM,SAAStqB,OAI9D+uB,GAAgB,MAEjBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,+BAAgCmqB,GAC7CtU,EAA8BsU,EAAGF,UAAU,EAAM,GAAI,GAAI,+BAA+B,MACxFwE,GAAgB,GAChBkI,UAEN,IAEFzP,qBAAU,WAERuH,GAAgB,GAChB4hB,GAAiBniB,sBAAsBvH,EAAMxmB,YAC1C6pB,MAAK,SAASC,GACU,KAAjBA,EAASpqB,QACTmG,EAA4BikB,EAASvqB,MAAMsqB,MAAM,SAASrK,OAK9D8O,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,yCAA0CmqB,EAAGF,SAASpqB,QAC3C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,mDAEZsX,EAA4B6S,EAAGF,UAAU,EAAM,GAAI,GAAI,+BAA+B,MACtF0M,MAEJlI,GAAgB,QAEtB,IAEFvH,qBAAU,WACRnnB,QAAQC,IAAI,gCACZkvC,IAAUD,IACVoG,EAAeD,KACf,CAAC9mB,IAGCpH,qBAAU,WACRnnB,QAAQC,IAAI,mCACZ,IAAMu7B,EAAYT,EAjHD,GAkHjBH,EAAgBj7B,EAAK87B,MAAMV,EAAYS,IACvCV,EAAaY,KAAKC,KAAKh8B,EAAKgB,OAnHX,KAoHjB6tB,GAAcD,GACdvuB,QAAQC,IAAI,SAAUN,KACrB,CAACo7B,EAtHe,GAsHWp7B,IAE9BwnB,qBAAU,WAAMC,OAAOC,SAAS,CAACC,IAAI,MAAQ,CAACqT,IAIlD,IAAM/D,GAAmB,WAAQhQ,EAAMgQ,oBAejCrE,GAA0B,WAAQN,IAAU,IAYlD,OACA,mCACE,gCAGsC,GAAhCrL,EAAMzB,UAAU,GAAGG,aAChB,qCAAE,IAAC,uBAAOkC,UAAU,YAAjB,SAA6B,iHAAiH,uBAAK,uBAAK,OAIhK,gCAAK,IAAC,6BAAI,gCAGV,qCAEImT,QAFJ,IAEIA,OAFJ,EAEIA,EAAc/4B,KAAI,SAAC+V,EAASxR,GAAV,MACf,wBAAqBwR,EAAIxU,YAAzB,2FACkDwU,EAAI/T,eADtD,wBAEFowB,EAAE,gCAA6Brc,EAAI7Q,aAAjC,WACF4zB,EAAG,gCAA4B/iB,EAAI7Q,aAAhC,WAGHmtB,EACC,mCACE,qBAAK3vB,GAAE,mBAAcqT,EAAIrT,IAAzB,SACE,eAACqsB,GAAA,EAAD,WACE,eAACC,GAAA,EAAD,CAAK2I,GAAI,EAAT,UAEI,uBAAMj1B,GAAG,WAAT,UACI,uBAAMkjB,UAAU,sBAAhB,UAAsC,IAAE7P,EAAIE,UAAU,OACtD,uBAAM2P,UAAU,kBAAhB,UAAkC,KAAG7P,EAAIhL,mBAAuB,OAChE,uBAAM6a,UAAU,iBAAhB,UAAiC,IAAEK,EAAIuF,UAAU,GAAGrF,QACpD,uBAEA,uBAAMP,UAAU,KAAhB,UAAsB7P,EAAIxU,YAAY,OAAQ,QAC9C,sBAAMqkB,UAAW7P,EAAI7T,mBAArB,SAA0C6T,EAAI/T,iBAAsB,cAIxE,+BACwB,YAArB+T,EAAI7Q,aACD,qCACE,cAAC,KAAD,CAAY8mB,KAAK,OAAOnG,MAAM,YAC9B,sBAAM+B,wBAAyB,CAAEC,OAAQuK,QAE3C,qCACE,cAAC,KAAD,CAAYpG,KAAK,OAAOnG,MAAM,YAC9B,sBAAM+B,wBAAyB,CAAEC,OAAQiR,aAOrD,cAAC9J,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,8BAAtB,SACE,yBAAQljB,GAAG,0BAA0BsmB,KAAK,SAASpD,UAAU,2EAA7D,UACE,mBAAGA,UAAU,iCAAmC,6BAO3D,mCACe,GAAZ7P,EAAInR,MACC,qCACC,uBACA,eAACq1B,GAAA,EAAD,WAAY,KACV,cAACE,GAAA,EAAD,CACEC,OAAQ/H,EAGR3vB,GAAIqT,EAAIrT,GAERomB,QAAS,kBA5FG,SAAC/S,GACnC49B,GAAS59B,EAAIrT,IACb2tB,IAAWD,IACXxD,GAAcD,GAyFuBinB,CAA4B79B,KAHtCA,EAAIqO,kBAY7B,uBAGE,cAAC,eAAD,CAAckN,OAAQlB,GAClBpH,KAAK,QACLgD,KAAM,GACNtqB,MAAOukB,EAAI2R,UAAU,GAAGzR,KACxBoL,WAAY,kBAAIZ,MAJpB,SAKI,cAAC6b,GAAD,CAEIhuC,WAAYwmB,EAAMxmB,WAClBwtC,MAASA,GACT2C,cAAiBrsC,EACjBssC,WAAclrC,EACdmrC,qBAAwBl6B,EACxBgc,wBAAyBA,GACzBme,UA1HI,WAChB9V,EAAgBpjB,GAChBgX,GAAcD,IAyHFqI,iBAAoBA,GACpBxE,qBA9He,WAAQxL,EAAMwL,yBAqHtBwb,MAcZ/S,EAAY,GACZ,mCACG,cAAC,KAAD,CAEEsB,eAAe,MACfC,UACA,cAAC,KAAD,CAAsB/P,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAUtC,WAAY,WAC9FuC,mBAAoB,EACpBzB,UAAWA,EACX0B,cACE,cAAC,KAAD,CAAqBlQ,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAWtC,WAAY,UAChGyC,sBAAuB,KACvBC,mBAAmB,aACnBC,kBAAkB,WAClBC,sBAAsB,WACtBC,kBAAkB,WAClBC,gBAAgB,SAChBC,sBAAsB,OACtBC,aAtIU,SAACC,GACvB,IAAMC,EA9Ie,GA8IFD,EAAME,SAA2Bv9B,EAAKgB,OAEzDq6B,EAAciC,GACdzO,GAAcD,QAyIRE,GAAgB,cAACpD,EAAD,S,cC9WtBrD,GAAU1X,kDAuBDmlC,GALU,CACrBtnB,sBAd2B,uCAAG,WAAOzB,GAAP,SAAAntB,EAAA,sEAEf6oB,IAAMC,KAAKL,GAAU,sBAAuB,eACrD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHjC,mFAAH,sDAe3B+G,qBAR0B,uCAAI,WAAO/G,EAAWjuB,GAAlB,SAAAc,EAAA,sEAEf6oB,IAAMC,KAAKL,GAAU,qBAAsBvpB,EACpD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHjC,mFAAJ,yDCoCb,SAASgpB,GAAS9uB,GACvB7jB,EAAQ,IADsC,IAAD,IAmC/C03B,EAAwBvG,EAAgBE,EAAQK,EAAQqJ,EAAQC,EA/BpE,EAMI/hB,GAAe,SAAC6K,GAAD,MAAiB,CAC9BzK,gBAAiByK,EAAMzK,gBACvBjU,2BAA4B0e,EAAM1e,2BAClC+P,iBAAkB2O,EAAM3O,iBACxBuH,sBAAuBoH,EAAMpH,sBAC7BgC,aAAcoF,EAAMpF,aACpBtF,6BAA8B0K,EAAM1K,iCAZlCC,EAAR,EAAQA,gBACAjU,EADR,EACQA,2BAGAsZ,GAJR,EAEQvJ,iBAFR,EAGQuH,sBAHR,EAIQgC,cACAtF,EALR,EAKQA,6BAUR,EAEIxW,GAAe,SAACkhB,GAAD,MAAgB,CAC3BwnB,4BAA6BxnB,EAAM1e,2BACnCD,uBAAwB2e,EAAM3e,uBAC9BpC,6BAA8B+gB,EAAM/gB,6BACpCF,uBAAwBihB,EAAMjhB,2BAN9ByoC,EAAR,EAAQA,4BACAvoC,GADR,EAAqCoC,uBAArC,EACQpC,8BAWF6vC,GAZN,EACsC/vC,uBAWrBgwC,iBAAO,OAGpB3X,GADMnW,EAAa+tB,GACX/tB,EAAaoW,IACmDC,EAAS,GACjF2X,EAAUlvB,EAAM/O,UAAUxU,QAAQ,MAAO,KAIzC0yC,EAAa,OADjBD,GADAA,GADAA,EAAUA,EAAQzyC,QAAQ,MAAO,MACfA,QAAQ,IAAK,KACbA,QAAQ,IAAK,KAE3B2yC,EAAUF,EACRG,EAAU3lC,2CACV4lC,EAAU5lC,+CAGhB,EAAkC0W,oBAAS,GAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAoCxH,oBAAS,GAA7C,mBAAOmvB,EAAP,KAAmBC,EAAnB,KACA,EAAoCpvB,oBAAS,GAA7C,mBACA,GADA,UACuEA,oBAAS,IAAhF,mBAAOqvB,EAAP,KAAoCC,EAApC,KACA,EAAwCtvB,oBAAS,GAAjD,mBAAOyH,EAAP,KAAqBC,EAArB,KACItc,EAAS,EAGb,EAA4D4U,mBAAS,IAArE,mBAA+B2O,IAA/B,WAIAxO,qBAAU,WAERmvB,GAAgCD,KAC/B,CAAC9nB,IAEJpH,qBAAU,WAER1F,IACA80B,OACC,CAACJ,IAEJhvB,qBAAU,WACRnnB,QAAQkkB,QAMR,IAAIsyB,EAAmB5vB,EAAMhK,WAAWjc,OAC8C,GAAlFyb,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQx2B,gBAAgBvf,OAExEimB,EAAMhK,WAAWhb,KAAI,SAACme,EAAWC,GAC/B5N,EAAO,EACP,IAAI3T,EAAO,CAAE6F,GAAIyb,EAAKzb,IACtBoqB,GAAgB,GAChBioB,GAAkBljB,qBAAqB7M,EAAMxmB,WAAY3B,GACtDwrB,MAAK,SAACC,GACkB,KAAnBA,EAASpqB,QAGXqI,EAA4B+hB,EAASvqB,KAAMinB,EAAM6vB,OAAQ7vB,EAAM8vB,OAAQ9vB,EAAM1iB,oBAAqB+lB,MAAK,SAAUrK,GAC/G5f,QAAQC,IAAI,qEAAwE8f,EAAKzb,GAAIsb,GAE7FxN,GAAkB,EAElBoc,GAAcD,GAEVnc,GAAUokC,GAAoBJ,GAAeD,MAGrDznB,GAAgB,MAEjBvE,OAAM,SAACC,GACNpqB,QAAQC,IAAI,wCAAyCmqB,EAAGF,SAASpqB,QACvC,KAAtBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZkc,EAA8BiO,EAAGF,UAAU,EAAM,GAAI,GAAI,6CAC7DwE,GAAgB,SAMpB1uB,QAAQC,IAAI,0CAIjB,IAIH,IAQMs2C,GAA4B,WAEhC/nB,GAAcD,IAGVyc,GAAoB,SAAC1mC,EAAQsH,GACjC8iB,GAAgB,GAChBiI,GAAkBlD,qBAAqB7M,EAAMxmB,WAAYkE,GACtD2lB,MAAK,SAACC,GACgB,KAAjBA,EAASpqB,QACTuuC,EAA4BnkB,EAASvqB,KAAM2E,EAAI,KAAM,KAAM,eAAe2lB,MAAM,SAASghB,GAAyB,IAAD,IAE7GtV,GAA0BsV,GAC1B,IAAIC,EAAS,GACb,UAAAD,EAAmBvkC,cAAnB,SAA2B9E,KAAI,SAAC0G,EAAOnC,GAAR,OAC5B+kC,EAAYA,+HAIM5iC,EAAE3D,KAJRumC,2CAKmC5iC,EAAE3F,cALrCuoC,wBASf,IACIC,EADWF,EAAmBtkC,kBAAkB,GAC1BhD,cACtBynC,EAAS,GACb,UAAAH,EAAmBtkC,yBAAnB,SAAsC/E,KAAI,SAAC0G,EAAOnC,GAAR,OACtCilC,EAAYA,+HAIM9iC,EAAEmE,QAAU,MAAYnE,EAAEnF,YAJhCioC,sBAKyB9iC,EAAExE,mBAAqB,KACvCwE,EAAE3E,cAAcE,qBANzBunC,oCAchB,OAASD,EAAWpnC,UAClB,KAAK,EAAwB,+BAAgC,MAC7D,KAAK,EAAwB,+BAAgC,MAC7D,KAAK,EAAwB,+BAAgC,MAC7D,KAAK,EAAwB,+BAAgC,MAC7D,QAA6B,+BAEnB,yBAAR6H,GACAslB,KAAMC,KAAK,CAGPC,kBAAmB,SACnBC,mBAAoB,UACpB5J,MAAO,OACP4jB,WAAY,UACZ7f,MAAO,MACPloB,MAAO,sBACPi0B,KACA,sCACqC0G,EAAM7Q,UAAU,GAAGrF,KAAO,UAAYkjB,EAAmB7kC,MAD9F,qCAEqC63B,EAAM7Q,UAAU,GAAGrF,KAAO,UAAYkjB,EAAmBpkC,MAF9F,qCAGqCo3B,EAAM7Q,UAAU,GAAGrF,KAHxD,0GAKckjB,EAAmBxkC,KAAK9B,KALtC,wGAOcsmC,EAAmBxkC,KAAK3E,MAPtC,6CAQqCm8B,EAAM7Q,UAAU,GAAGrF,KARxD,2CAS0CkjB,EAAmB5kC,YAT7D,6CAUqC43B,EAAM7Q,UAAU,GAAGrF,KAVxD,qCAW0CmjB,EAX1C,6CAYqCjN,EAAM7Q,UAAU,GAAGrF,KAZxD,qCAakCqjB,EAblC,0BAmBhB1c,GAAgB,MAEjBvE,OAAM,SAACC,GAGJpqB,QAAQC,IAAK,wCAAyCmqB,EAAGF,SAASpqB,QAC1C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZ6F,EAA6BskB,EAAGF,UAAU,EAAM,GAAI,GAAI,wCAAwC,MACpGwE,GAAgB,GAjGU9H,EAAMgQ,sBAoGpClI,GAAgB,IAItB,OACE,qCACE,qBAAKlH,UAAU,kBAAf,SACE,sBAAKA,UAAU,mBAAf,UAGE,cAAC,sBAAD,CAAqBovB,SAAUb,EAAac,MAAOb,EAASc,gBAAiBnB,EAASoB,QAAtF,SACE,yBAAQnsB,KAAK,SAASpD,UAAU,8BAAhC,UACE,mBAAGA,UAAU,8BAAgC,yBAIjD,uBAAM,uBAMF,wBAAOljB,GAAG,eAAekjB,UAAU,oDAAnC,UAEE,wBAAOljB,GAAG,eAAe+nB,MAAO,CAAE2qB,gBAAgB,UAAWvvB,MAAM,UAAWwvB,OAAO,kBAAmB1rB,OAAO,OAAQ8Q,cAAc,MAAO6a,UAAU,UAAtJ,UAEE,qBAAI1vB,UAAU,sDAAsD6E,MAAO,CAAE2qB,gBAAgB,UAAWvvB,MAAM,UAAW8D,OAAO,OAAQ8Q,cAAc,MAAO6a,UAAU,UAAvK,UAEE,oBAAIC,QAAS,EAAG3vB,UAAU,kBAA1B,SAA4C,mBAE5C,qBAAI4vB,QAAS,EAAG5vB,UAAU,YAA1B,UAAsC,8EACoC,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,YAArC,SAAiD,eACjD,eAAC,KAAD,CAAcA,GAAG,YAAYsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAhE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,cAC7B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,IAAC,6BAIQ,GAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,eAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,cAC7B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,IAAC,6BAIQ,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,oBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,cAC7B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,IAAC,uBAAM,eAChD,uBAAM,IAAEuzB,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,gCAMpE,qBAAI8wC,QAAS,EAAG3vB,UAAU,YAA1B,UAAsC,+BAAyB,uBACW,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,gBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,uBAAM,IAAEuzB,GAAUC,SAAS,IAAIwd,aAAa,IAAC,uBAAM,6BAIrD,GAAtEj7B,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,iCACK,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,gBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIF,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,eAArC,SAAoD,sBACpD,eAAC,KAAD,CAAcA,GAAG,eAAesmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAnE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,uBAAM,IAAEuzB,GAAUC,SAAS,IAAIwd,aAAa,IAAC,uBAAM,uBAAM,gBAC5G,uBAAM,IAAEzd,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,gCAM1E,qBAAI8wC,QAAS,EAAG3vB,UAAU,YAA1B,UAAsC,4BAAsB,uBACc,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,kBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIF,GAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,kBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIF,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACG,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,eAArC,SAAoD,uBACpD,eAAC,KAAD,CAAcA,GAAG,eAAesmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAnE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,uBAAM,gBACzD,uBAAM,IAAEuzB,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,gCAM5E,qBAAI8wC,QAAS,EAAG3vB,UAAU,YAA1B,UACwE,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,qCAAE,sBACiB,uBAChB,iCACE,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,gBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,gCAKF,GAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,qCAAE,kCAC6B,uBAC5B,iCACE,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,iBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,gCAKF,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,qCAAE,sBACe,uBAChB,iCACE,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,gBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAE7D,UACE,uBAAM,uBAAM,kCACO,uBAC5B,iCACE,wBAAQ/B,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,iBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,sCAQ1E,qBAAImhB,UAAU,sDAAd,UAEE,qBAAIA,UAAU,YAAd,UAA0B,gBAAa,uBACmC,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,gBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,cAC7B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,IAAC,uBAAM,IAAC,6BAIG,GAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,iBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIA,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,eAArC,SAAoD,qBACpD,eAAC,KAAD,CAAcA,GAAG,eAAesmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAnE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,cAC7B,uBAAM,IAAEF,GAAUC,SAAS,GAAGxzB,YAAY,IAAC,uBAAM,IAAC,uBAAM,gBACtD,uBAAM,IAAEuzB,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,gCAM1E,qBAAImhB,UAAU,YAAd,UAA0B,uBAAiB,uBAC+B,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACnD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,iBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIF,GAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACnD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,iBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIF,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACnD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,gBAArC,SAAqD,sBACrD,eAAC,KAAD,CAAcA,GAAG,gBAAgBsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAApE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,uBAAM,gBACzD,uBAAM,IAAEuzB,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,gCAM5E,qBAAImhB,UAAU,YAAd,UAA0B,wBAAqB,uBAC2B,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,iBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,uBAC/DuzB,GAAUC,SAAS,IAAIwd,aAAa,IAAC,6BAI4B,GAAtEj7B,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,iBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIE,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,eAArC,SAAoD,sBACpD,eAAC,KAAD,CAAcA,GAAG,eAAesmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAnE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,uBAC/DuzB,GAAUC,SAAS,IAAIwd,aAAa,IAAC,uBAAM,uBAAM,gBACrC,uBAAM,IAAEzd,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,gCAMxE,qBAAImhB,UAAU,YAAd,UAA0B,yBAAsB,uBAC0B,GAAtEpL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,iBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIA,GAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,cAArC,SAAmD,iBACnD,eAAC,KAAD,CAAcA,GAAG,cAAcsmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAlE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,6BAIA,IAAtE+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,iCACC,wBAAQlY,GAAG,QAAQ,cAAS,WAAS,aAArC,SAAkD,sBAClD,eAAC,KAAD,CAAcA,GAAG,aAAasmB,KAAK,OAAO8O,MAAM,QAAQC,WAAS,EAAjE,UACGC,GAAUC,SAAS,GAAGC,GAAG,IAAC,uBAAM,IAAC,uBAAM,gBAC3B,uBAAM,IAAEF,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,uBAAM,gBACzD,uBAAM,IAAEuzB,GAAUC,SAAS,IAAIxzB,YAAY,IAAC,uBAAM,IAAC,sCAhRhF,UAuRG+V,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQx2B,uBAvR3D,aAuRG,EAAyEte,KAAI,SAAC01C,EAAYC,GAAb,aAC5E,mCACE,kCAGM,oBAAI/vB,UAAU,yBAAd,SACE,oBAAI4vB,QAAS,EAAG/qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAAhE,SACE,8BAEE,sBAAMhuB,wBAAyB,CAAGC,OAAQ6tB,EAAMx2B,iBAA0B,eAEzEw2B,EAAM9wC,KACF,mCACC,uBAAMghB,UAAU,eAAhB,UACE,mBAAGA,UAAU,iCAAmC,kBAGnD,mCACC,uBAAMA,UAAU,iBAAhB,UACE,mBAAGA,UAAU,2BAA6B,6CAjB9D,UAyBO8vB,EAAM9nC,gBAzBb,aAyBO,EAAgB5N,KAAI,SAACsvC,EAAUC,GAAX,2BACnB,mCACE,+BAEe,GAAZA,GACE,mCACC,oBAAIgG,QAASG,EAAMt2B,cAAnB,mBACGs2B,EAAMnoC,gBADT,aACG,EAAgBvN,KAAI,SAAC61C,EAAWC,GAAZ,OACjB,qCAAE,KACA,8BAAG,IAAC,mBAAIp0C,MAAM,+DAA4DonB,QAAU,kBAAMsgB,GAAkByM,EAAKnzC,GAAI,0BAA2BkjB,UAAU,4BAAtJ,SACGiwB,EAAKnzC,KACF,iBAStB,+BAAI,KAAE,8BAAG,KAAE,mBAAGkjB,UAAU,8CAAgD,IAAE0pB,EAAIvsC,KAAK,OAAK,QAGxF,uCACGusC,EAAI74B,eADP,aACG,EAAazW,KAAI,SAAC+1C,EAAUC,GAAX,OAChB,qCAAE,KAAE,8BAAG,KAAE,mBAAGpwB,UAAU,8CAAgD,IAAEmwB,EAAIhzC,KAAK,OAAK,aAK1F,uCACGusC,EAAI54B,aADP,aACG,EAAW1W,KAAI,SAACi2C,EAAUD,GAAX,OACd,qCAAE,KAAE,8BAAG,IAAC,mBAAGpwB,UAAU,8CAAgD,IAAEqwB,EAAIlzC,KAAK,IAAC,uBAAM,qBACpDkzC,EAAIr/B,MAAM,eAKpC,GAAZ24B,GACE,qCAEC,qBAAIgG,QAASG,EAAMt2B,cAAnB,UACGs2B,EAAMr2B,SACL,qCACE,sBAAMuG,UAAU,oBAAhB,SAAoC,kBACpC,0BAJN,UAQG8vB,EAAM7yC,aART,aAQG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACftjB,EAAI8hB,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,SAAnB4sC,EAAKn5B,YACH,qCACC,sBAAM9U,MAAOiuC,EAAK5sC,KAAM6iB,UAAU,qBAAlC,SACE,oBAAGiD,KAAM2J,EAAIrJ,OAAO,SAASvD,UAAU,YAAvC,UACE,mBAAGA,UAAU,8CACZ+pB,EAAK/rC,iBAGV,+BAMP8xC,EAAMp2B,WACL,qCAEE,sBAAMsG,UAAU,oBAAhB,SAAoC,0BAGpC,0BA/BN,UAkCG8vB,EAAM7yC,aAlCT,aAkCG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACfjjB,EAAIyhB,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,WAAnB4sC,EAAKn5B,YACH,qCACC,sBAAM9U,MAAOiuC,EAAK5sC,KAAM6iB,UAAU,qBAAlC,SACE,oBAAGiD,KAAMgK,EAAI1J,OAAO,SAASvD,UAAU,YAAvC,UACE,mBAAGA,UAAU,8CACZ+pB,EAAK/rC,iBAGV,kCAQV,oBAAI2xC,QAASG,EAAMt2B,cAAnB,mBACGs2B,EAAM7yC,aADT,aACG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACf5Z,EAAIoY,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,MAAnB4sC,EAAKn5B,YACH,qCACC,sBAAM9U,MAAOiuC,EAAK5sC,KAAM6iB,UAAU,qBAAlC,SACE,oBAAGiD,KAAMqT,EAAI/S,OAAO,SAASvD,UAAU,YAAvC,UACE,mBAAGA,UAAU,8CACZ+pB,EAAK/rC,iBAGV,iCAQV,oBAAI2xC,QAASG,EAAMt2B,cAAnB,mBACGs2B,EAAM7yC,aADT,aACG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACf3Z,EAAImY,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,MAAnB4sC,EAAKn5B,YACH,qCACC,sBAAM9U,MAAOiuC,EAAK5sC,KAAM6iB,UAAU,qBAAlC,SACE,oBAAGiD,KAAMsT,EAAIhT,OAAO,SAASvD,UAAU,YAAvC,UACE,mBAAGA,UAAU,8CACZ+pB,EAAK/rC,iBAGV,iCAQV,oBAAI2xC,QAASG,EAAMt2B,cAAnB,mBACGs2B,EAAM7yC,aADT,aACG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACfvZ,EAAI+X,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,OAAnB4sC,EAAKn5B,YACH,qCACC,sBAAM9U,MAAOiuC,EAAK5sC,KAAM6iB,UAAU,qBAAlC,SACE,oBAAGiD,KAAM0T,EAAIpT,OAAO,SAASvD,UAAU,YAAvC,UACE,mBAAGA,UAAU,8CACZ+pB,EAAK/rC,iBAGV,uDAqBlC,wBAAOsyC,IAAKnC,EAAUrxC,GAAG,eAAekjB,UAAU,oDAAlD,UACE,wBAAOljB,GAAG,MAAM+nB,MAAO,CAAE2qB,gBAAgB,UAAWvvB,MAAM,UAAWwvB,OAAO,kBAAmB1rB,OAAO,OAAQ8Q,cAAc,MAAO6a,UAAU,UAAY1vB,UAAU,WAAnK,UAEE,qBAAI6E,MAAO,CAAEd,OAAQ,OAAQ8Q,cAAe,MAAO6a,UAAW,UAA9D,UAEE,oBAAIC,QAAS,EAAG9qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAAaD,UAAU,WAAlI,SACE,+BAAM,oBAGR,qBAAI4vB,QAAS,EAAG/qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA3G,UACG,+BAAM,iFACmE,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,gBAE6D,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,gBAE6D,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,yBAIf,qBAAI26B,QAAS,EAAG9qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA3G,UACE,iCAAM,gCAA0B,uBAAM,QACoC,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,gBAE6D,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,kBAE6D,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACtD,+BAAM,wBAId,qBAAI26B,QAAS,EAAG9qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA3G,UACE,iCAAM,4BAAsB,uBAAM,OACwC,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,iBAE6D,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,gBAE6D,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,wBAIf,oBAAI26B,QAAS,EAAG9qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA3G,SACE,iCACwE,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,qCAAE,uBAAiB,uBAAM,IAAC,+BAAM,qBAEqC,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,qCAAE,kCAA4B,uBAAM,IAAC,+BAAM,oBAE0B,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,qCAAE,sBACe,uBAAM,IAAC,+BAAM,iBAAmB,UACvC,uBAAM,uBAAM,kCACO,uBAAM,IAAC,+BAAM,4BAQjD,qBAAI6P,MAAO,CAAEd,OAAQ,OAAQ8Q,cAAe,MAAO6a,UAAW,UAA9D,UAEE,qBAAI7qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA/F,UACE,iCAAM,gBAAa,0BACuD,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,iBAE6D,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,iBAE6D,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,wBAIf,qBAAI6P,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA/F,UACE,iCAAM,yBAAmB,0BAC+C,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACjD,+BAAM,iBAE2D,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACnD,+BAAM,gBAE2D,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACnD,+BAAM,wBAIjB,qBAAI6P,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA/F,UACE,iCAAM,0BAAuB,0BAC6C,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,+BAAM,kBAE+D,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,+BAAM,iBAE+D,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACvD,+BAAM,wBAKb,qBAAI6P,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,UAAWvvB,MAAO,WAA/F,UACE,iCAAM,0BAAuB,uBAAM,OACqC,GAAtErL,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACnD,+BAAM,iBAE6D,GAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,gBAE6D,IAAtEJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQl6B,YACrD,+BAAM,8BAOnB,0CACGJ,EAAgBwK,EAAM6vB,QAAQz4B,YAAY4I,EAAM8vB,QAAQx2B,uBAD3D,aACG,EAAyEte,KAAI,SAAC01C,EAAYC,GAAb,aACxE9c,EAAKwb,EAAU,eACXA,EAAU,gBACVA,EAAU,gBACf/hB,EAAK+hB,EAAU,aACf,qCAEG,qBAAI5pB,MAAO,CAAEgQ,cAAe,MAAO9Q,OAAO,QAA1C,UACiC,yBAA5B+rB,EAAMv2B,mBACF,mCACC,qBAAIq2B,QAAS,EAAG5vB,UAAU,SAAS6E,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAOR,gBAAiB,WAA3G,UACE,qBAAKhqB,IAAKyN,IAAM,yBAA4B,uBAC5C,qBAAKzN,IAAKyN,IAAM,gCAGnB,mCACC,qBAAI2c,QAAS,EAAG5vB,UAAU,SAAS6E,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAOR,gBAAiB,WAA3G,UACI,qBAAKhqB,IAAKyN,IAAM,eAAmB6c,EAAMv2B,wBAIlDu2B,EAAM9wC,KACF,mCACC,qBAAI4wC,QAAS,EAAG5vB,UAAU,SAAU6E,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAQR,gBAAiB,WAA7G,UACE,qBAAKhqB,IAtBfipB,0DAsB2B,6BAGpB,mCACC,qBAAImB,QAAS,EAAG5vB,UAAU,SAAS6E,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAOR,gBAAiB,WAA3G,UACI,qBAAKhqB,IA1BjBipB,0DA0B4B,mDAI1B,oBAAImB,QAAS,EAAG5vB,UAAU,SAAS6E,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,MAAOR,gBAAiB,gBA5BlH,UAmCIM,EAAM9nC,gBAnCV,aAmCI,EAAgB5N,KAAI,SAACsvC,EAAUC,GAAX,2BACnB,mCACE,qBAAI9kB,MAAO,CAAEgQ,cAAe,OAA5B,UAGe,GAAZ8U,GACE,mCACC,oBAAIgG,QAASG,EAAMt2B,cAAeqL,MAAO,CAAE2qB,gBAAgB,QAAUC,OAAQ,qBAA7E,mBACGK,EAAMnoC,gBADT,aACG,EAAgBvN,KAAI,SAAC61C,EAAWC,GAAZ,OACjB,qCAAE,KAAE,4BAAID,EAAKnzC,KAAO,cAQ9B,6BACE,8BAAG,IAAC,qBAAK0oB,IAAKkH,IAAO,oBAA0Bgd,EAAIvsC,KAAK,UAI1D,uCACGusC,EAAI74B,eADP,aACG,EAAazW,KAAI,SAAC+1C,EAAUC,GAAX,OAChB,mCACE,8BAAG,IAAC,qBAAK5qB,IAAKkH,IAAO,oBAA0ByjB,EAAIhzC,eAMzD,uCAEGusC,EAAI54B,aAFP,aAEG,EAAW1W,KAAI,SAACi2C,EAAUD,GAAX,OACd,mCACA,8BAAG,IAAC,qBAAK5qB,IAAKkH,IAAO,oBAA0B2jB,EAAIlzC,KAAK,IAAC,uBAAM,mBAAyBkzC,EAAIr/B,gBAKnF,GAAZ24B,GACE,qCAEC,qBAAIgG,QAASG,EAAMt2B,cAAeqL,MAAO,CAAEgQ,cAAe,MAAO2a,gBAAgB,QAAUC,OAAQ,qBAAnG,UACGK,EAAMr2B,SACJ,qCACG,sBAAMuG,UAAU,oBAAhB,SAAoC,kBAAoB,IAAC,0BAHjE,UAQG8vB,EAAM7yC,aART,aAQG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACftjB,EAAI8hB,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,SAAnB4sC,EAAKn5B,YACH,qCACC,uBAAM9U,MAAOiuC,EAAK5sC,KAAlB,UACE,qBAAKqoB,IAAKkH,IAAO,qBACjB,oBAAGzJ,KAAM2J,EAAIrJ,OAAO,SAASvD,UAAU,YAAvC,UAAmD,IAAE+pB,EAAK/rC,YAAY,UAExE,+BAMP8xC,EAAMp2B,WACL,qCAEE,sBAAMsG,UAAU,oBAAhB,SAAoC,0BAGpC,0BA7BN,UAgCG8vB,EAAM7yC,aAhCT,aAgCG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACfjjB,EAAIyhB,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,WAAnB4sC,EAAKn5B,YACH,qCACC,uBAAM9U,MAAOiuC,EAAK5sC,KAAlB,UACE,qBAAKqoB,IAAKkH,IAAO,oBACjB,mBAAGzJ,KAAMgK,EAAI1J,OAAO,SAASvD,UAAU,YAAvC,SAAoD+pB,EAAK/rC,iBAE3D,kCAQV,oBAAI2xC,QAASG,EAAMt2B,cAAnB,mBACGs2B,EAAM7yC,aADT,aACG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACf5Z,EAAIoY,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,MAAnB4sC,EAAKn5B,YACH,qCACC,uBAAM9U,MAAOiuC,EAAK5sC,KAAlB,UACE,qBAAKqoB,IAAKkH,IAAO,qBACjB,oBAAGzJ,KAAMqT,EAAI/S,OAAO,SAASvD,UAAU,YAAvC,UAAmD,IAAE+pB,EAAK/rC,YAAY,UAExE,iCAQV,oBAAI2xC,QAASG,EAAMt2B,cAAnB,mBACGs2B,EAAM7yC,aADT,aACG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACf3Z,EAAImY,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,MAAnB4sC,EAAKn5B,YACH,qCACC,uBAAM9U,MAAOiuC,EAAK5sC,KAAlB,UACE,qBAAKqoB,IAAKkH,IAAO,qBACjB,oBAAGzJ,KAAMsT,EAAIhT,OAAO,SAASvD,UAAU,YAAvC,UAAmD,IAAE+pB,EAAK/rC,YAAY,UAExE,iCAQV,oBAAI2xC,QAASG,EAAMt2B,cAAnB,mBACGs2B,EAAM7yC,aADT,aACG,EAAa7C,KAAI,SAAC2vC,EAAWmG,GAAZ,OACfvZ,EAAI+X,EAAU3E,EAAK7gC,KAAO6gC,EAAK5sC,KAC/B,mCACqB,OAAnB4sC,EAAKn5B,YACH,qCACC,uBAAM9U,MAAOiuC,EAAK5sC,KAAlB,UACE,qBAAKqoB,IAAKkH,IAAO,qBACjB,oBAAGzJ,KAAM0T,EAAIpT,OAAO,SAASvD,UAAU,YAAvC,UAAmD,IAAE+pB,EAAK/rC,YAAY,UAExE,4DAwBrCipB,GAAgB,cAACpD,EAAD,OCvhCT,SAAS0sB,GAAWnxB,GAE5B,IAmBiBqN,EAnBjB,EAEI9xB,GAAc,SAAC0kB,GAAD,MAAgB,CAC1B1iB,0BAA2B0iB,EAAM1iB,0BACjCD,mBAAoB2iB,EAAM3iB,mBAC1B5B,4BAA6BukB,EAAMvkB,gCALnC6B,EAAR,EAAQA,0BAA2BD,EAAnC,EAAmCA,mBAC3B5B,EADR,EACQA,4BAOAmd,EACJzD,GAAe,SAAC6K,GAAD,MAAgB,CAC3BpH,sBAAuBoH,EAAMpH,0BAF7BA,sBAcR,GAJUqI,EAAa+tB,GAIW7uB,oBAAS,IAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAkDxH,oBAAS,GAA3D,mBAAOgxB,EAAP,KAA0BC,EAA1B,KACA,EAAuCjxB,oBAAS,GAAhD,mBAAOyH,EAAP,KAAoBC,EAApB,KAGA,EAAsD1H,mBAASJ,EAAM5I,aAArE,mBAAOk6B,EAAP,KAA4BC,EAA5B,KACA,EAA8BnxB,mBAAS,IAAvC,mBAAOoxB,EAAP,KAAgBC,EAAhB,KACA,EAAgCrxB,mBAASJ,EAAMvF,qBAA/C,6BAGA8F,qBAAU,WAIN,IAAIpe,EAAI,mBAAqB6d,EAAM6vB,OACnC4B,EAAWtvC,GAEXqe,OAAOC,SAAS,CAACC,IAAI,MACvB,IAEFH,qBAAU,WACNuH,GAAgB,GAChB6M,GAAiBlB,oBAAoBzT,EAAMxmB,YAC1C6pB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTqE,EAA0B+lB,EAASvqB,MAAMsqB,MAAM,SAASrK,OAI5D8O,GAAgB,MAEnBvE,OAAM,SAACC,GAEJ9nB,EAA4B8nB,EAAGF,UAAU,EAAM,GAAI,GAAI,8BACvDwE,GAAgB,QAEtB,IAEFvH,qBAAU,WAKgBP,EAAM5I,YAC5Bi6B,GAAsBD,KACxB,CAACzpB,IAEHpH,qBAAU,WAENmxB,IAEAL,GAAsBD,KACxB,CAACpxB,EAAM2xB,WAIT,IAAM3hB,EAAmB,WAAQhQ,EAAMgQ,oBAEjCxE,EAAuB,WAAQxL,EAAMwL,wBAErComB,EAAY,WAAS5xB,EAAM4xB,aAE3BC,EAAoB,WACtBjqB,GAAcD,IAGZ+pB,EAAgB,WAClB,IAAM73C,EAAQmmB,EAAM2xB,SAChBG,EAAW,GACH,IAARj4C,GACAi4C,EAAU9xB,EAAM5I,YAAY7Q,QAAO,SAACsqB,GAAD,OAAgBA,EAAO5f,UAAUyR,cAAcC,SAAS9oB,EAAM6oB,kBAEjG6uB,EAAuBO,IAEpBP,EAAuBvxB,EAAM5I,cAGlC26B,EAAgB,SAACh5B,GACnBF,EAAsBmH,EAAM6vB,OAAQ92B,EAAQ,KAAM,iBAClD6O,GAAcD,IAIZqqB,EAAgBhyB,EAAM5I,YAC5B,EAAsDgJ,mBAAS,IAA/D,mBAAO6xB,EAAP,KAA4BC,EAA5B,KACA,EAAkC9xB,mBAAS,GAA3C,mBAAO6T,EAAP,KAAkBC,EAAlB,KACA,EAAoC9T,mBAAS,GAA7C,mBAAO+T,EAAP,KAAmBC,GAAnB,KAIA7T,qBAAU,WAEN,IAAMqU,EAAYT,EALD,GAMjB+d,EAAuBF,EAAand,MAAMV,EAAYS,IACtDV,EAAaY,KAAKC,KAAKid,EAAaj4C,OAPnB,OAWhB,CAACo6B,EAXe,GAWW6d,EAAchyB,EAAMvF,sBAEnD8F,qBAAU,WAEP,IAAMyxB,EAAgBhyB,EAAM5I,YAE5B8c,EAAaY,KAAKC,KAAKid,EAAaj4C,OADf,KAErBq6B,GAAc,GACdxM,GAAcD,KAChB,CAAC3H,EAAMvF,sBAwCZ,OACC,qCAGM,sBAAKmG,UAAU,kBAAf,UAUwB,IAAlBZ,EAAM2xB,UAAmB,qCAAE,IAjCnC,qCACE,uBAG6B,KAA3B3xB,EAAMvF,qBACH,qCAAE,IAAC,oBAAImG,UAAU,qCAAd,SAAmD,6BAA6B,OAE3D,KAA3BZ,EAAMvF,qBAA4BuF,EAAMmyB,OAAO,GAC5C,qCAAE,IAAC,oBAAIvxB,UAAU,qCAAd,SAAmD,6BAA6B,OAE3D,KAA3BZ,EAAMvF,qBAA4BuF,EAAMoyB,OAAO,GAC5C,qCAAE,IAAC,oBAAIxxB,UAAU,qCAAd,SAAmD,6BAA6B,OAExF,0BAoBmD,OAM3B,IAAlBZ,EAAM2xB,SACD,mCAEC,qCACML,QADN,IACMA,OADN,EACMA,EAAqBt2C,KAAI,SAAC+V,EAASshC,GAAV,OAEtBhlB,EACE,mCACC,sBAAK3vB,GAAE,2BAAsBqT,EAAIrT,IAAjC,UAEiC,KAA5BsiB,EAAMvF,qBACF,mCACG,uBAAM/c,GAAG,YAAT,UACI,uBAAMkjB,UAAU,oBAAhB,UAAoC,IAAE7P,EAAIE,aAAiB,uBAC3D,uBAAM2P,UAAU,eAAhB,UAAgC,IAAE7P,EAAIgG,QAAQ,GAAGxa,YAAY,YAI3C,KAA5ByjB,EAAMvF,qBACH,mCACG,uBAAM/c,GAAG,YAAT,UACI,uBAAMkjB,UAAU,oBAAhB,UAAoC,IAAE7P,EAAIE,aAAiB,uBAC3D,uBAAM2P,UAAU,eAAhB,UAAgC,IAAE7P,EAAIgG,QAAQ,GAAGxa,YAAY,OAC7D,uBAAMqkB,UAAU,kBAAhB,UAAkC,OACpB,mBAAGA,UAAU,oCAAsC,oBAK/C,KAA5BZ,EAAMvF,qBACH,mCACG,uBAAM/c,GAAG,YAAT,UACI,uBAAMkjB,UAAU,oBAAhB,UAAoC,IAAE7P,EAAIE,aAAiB,uBAC3D,uBAAM2P,UAAU,eAAhB,UAAgC,IAAE7P,EAAIgG,QAAQ,GAAGxa,YAAY,OAC7D,uBAAMqkB,UAAU,oBAAhB,UAAoC,OACtB,mBAAGA,UAAU,0BAA4B,yCAMnE,4BAIP,mCACC,eAACqU,GAAA,EAAD,CAAYC,WAAS,EAArB,UACiC,KAA7BlV,EAAMvF,qBACH,mCACG,cAAC0a,GAAA,EAAD,CACIC,OAAQ/H,EAER3vB,GAAIqT,EAAIrT,GACR23B,YAAatkB,EAAI/Q,QACjB8jB,QAAS,kBAAMiuB,EAAchhC,EAAIrT,MAH5BqT,EAAIqO,OAUW,KAA7BY,EAAMvF,qBAA8B1J,EAAIzW,EAAI,GAC1C,cAAC66B,GAAA,EAAD,CACGC,OAAQ/H,EAER3vB,GAAIqT,EAAIrT,GACR23B,YAAatkB,EAAI/Q,QACjB8jB,QAAS,kBAAMiuB,EAAchhC,EAAIrT,MAH5BqT,EAAIqO,KAOe,KAA7BY,EAAMvF,qBAA8B1J,EAAItY,EAAI,GAC1C,cAAC08B,GAAA,EAAD,CACGC,OAAQ/H,EAER3vB,GAAIqT,EAAIrT,GACR23B,YAAatkB,EAAI/Q,QACjB8jB,QAAS,kBAAMiuB,EAAchhC,EAAIrT,MAH5BqT,EAAIqO,KAOhBrO,EAAI/Q,SACA,qCACD,cAAC8uC,GAAD,CAEIt1C,WAAYwmB,EAAMxmB,WAClB8D,mBAAoBA,EACpBuyC,OAAU7vB,EAAM6vB,OAChBC,OAAU/+B,EAAIrT,GACduT,UAAYF,EAAIE,UAChB+E,WAAcjF,EAAIgG,QAClB66B,UAAaA,EACbC,kBAAqBA,EACrB7hB,iBAAoBA,EACpBxE,qBAAyBA,GAVpBza,EAAIrT,IAYb,sCAQjB,qCAEC,qCACMu0C,QADN,IACMA,OADN,EACMA,EAAqBj3C,KAAI,SAAC+V,EAASC,GAAV,OAEtBqc,EACA,mCAEC,sBAAK3vB,GAAE,sBAAiBqT,EAAIrT,IAA5B,UACE,uBAAMA,GAAG,YAAT,UACI,uBAAMkjB,UAAU,oBAAhB,UAAoC,IAAE7P,EAAIE,aAAiB,uBAC3D,uBAAM2P,UAAU,eAAhB,UAAgC,IAAE7P,EAAIgG,QAAQ,GAAGxa,YAAY,OAC/B,KAA5ByjB,EAAMvF,qBACL,qCAC+B,KAA5BuF,EAAMvF,qBACL,mCACG1J,EAAIzW,EAAI,GACL,mCACD,uBAAMsmB,UAAU,oBAAhB,UAAoC,OAC1B,mBAAGA,UAAU,0BAA4B,wCAM5B,KAA5BZ,EAAMvF,qBAA6B1J,EAAItY,EAAI,GACzC,uBAAMmoB,UAAU,kBAAhB,UAAkC,OACzB,mBAAGA,UAAU,oCAAsC,qBAMzE,4BAKH,mCACD,eAACqU,GAAA,EAAD,CAAYC,WAAS,EAArB,UACmC,KAA7BlV,EAAMvF,qBACH,cAAC0a,GAAA,EAAD,CACGC,OAAQ/H,EAGR3vB,GAAIqT,EAAIrT,GACR23B,YAAatkB,EAAI/Q,QACjB8jB,QAAS,kBAAMiuB,EAAchhC,EAAIrT,MAH5BqT,EAAIqO,KAOe,KAA7BY,EAAMvF,qBAA8B1J,EAAIzW,EAAI,GAC1C,cAAC66B,GAAA,EAAD,CACGC,OAAQ/H,EAER3vB,GAAIqT,EAAIrT,GACR23B,YAAatkB,EAAI/Q,QACjB8jB,QAAS,kBAAMiuB,EAAchhC,EAAIrT,MAH5BqT,EAAIqO,KAOe,KAA7BY,EAAMvF,qBAA8B1J,EAAItY,EAAI,GAC1C,cAAC08B,GAAA,EAAD,CACGC,OAAQ/H,EAER3vB,GAAIqT,EAAIrT,GACR23B,YAAatkB,EAAI/Q,QACjB8jB,QAAS,kBAAMiuB,EAAchhC,EAAIrT,MAH5BqT,EAAIqO,KAOhBrO,EAAI/Q,SACF,qCACC,cAAC8uC,GAAD,CAEIt1C,WAAYwmB,EAAMxmB,WAClB8D,mBAAoBA,EACpBuyC,OAAU7vB,EAAM6vB,OAChBC,OAAU/+B,EAAIrT,GACduT,UAAaF,EAAIE,UACjB+E,WAAcjF,EAAIgG,QAClB66B,UAAaA,EACbC,kBAAqBA,EACrB7hB,iBAAoBA,EACpBxE,qBAAyBA,GAVpBza,EAAIrT,IAYb,oCAYdu2B,EAAY,GACT,mCACC,cAAC,KAAD,CAEEsB,eAAe,MACfC,UAAY,cAAC,KAAD,CAAsB/P,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAUtC,WAAY,WAC1GuC,mBAAoB,EACpBzB,UAAWA,EACX0B,cAAgB,cAAC,KAAD,CAAqBlQ,MAAO,CAAEkB,SAAU,GAAI/B,MAAO,IAAK6Q,cAAe,SAAWtC,WAAY,UAC9GyC,sBAAuB,KACvBC,mBAAmB,aACnBC,kBAAkB,WAClBC,sBAAsB,WACtBC,kBAAkB,WAClBC,gBAAgB,SAChBC,sBAAsB,OACtBC,aA9QA,SAACC,GAErB,IAAMC,EA9BW,GA8BED,EAAME,SAA2B0b,EAAaj4C,OAEjEq6B,GAAciC,GACdzO,GAAcD,GACd,IAAM2qB,EAAUxpB,SAASC,eAAeyoB,GACjC,OAAPc,QAAO,IAAPA,KAASC,gBAAe,cAiRtB1qB,GAAgB,cAACpD,EAAD,OCjbb,SAASwqB,GAAGjvB,GAGvB,IAsBiBqN,EAtBjB,EAIIjY,GAAe,SAAC6K,GAAD,MAAgB,CAC3B5gB,4BAA6B4gB,EAAM5gB,4BACnCmW,gBAAiByK,EAAMzK,gBACvBqD,sBAAuBoH,EAAMpH,sBAC7B6B,uBAAwBuF,EAAMvF,uBAC9BH,iBAAkB0F,EAAM1F,iBACxBE,oBAAqBwF,EAAMxF,oBAC3BnC,kBAAmB2H,EAAM3H,kBACzB/C,6BAA8B0K,EAAM1K,iCAZpClW,EAAR,EAAQA,4BAA6BmW,EAArC,EAAqCA,gBAC7BqD,EADR,EACQA,sBACA6B,EAFR,EAEQA,uBAAwBH,EAFhC,EAEgCA,iBAAkBE,EAFlD,EAEkDA,oBAAqBnC,EAFvE,EAEuEA,kBAC/D/C,EAHR,EAGQA,6BAsBR,GAPQpZ,EAAQ,IAGN+kB,EAAa+tB,GAIW7uB,oBAAS,IAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAsCxH,oBAAS,GAA/C,mBAAOoyB,EAAP,KAAoBC,EAApB,KACA,EAAwCryB,oBAAS,GAAjD,mBAAOyH,EAAP,KAAqBC,EAArB,KAEA,EAAgC1H,mBAAS,IAAzC,mBAAOuxB,EAAP,KAAiBe,EAAjB,KAGAnyB,qBAAU,WACNnnB,QAAQC,IAAI,cACZ2mB,EAAMF,mBACNpF,EAAuB,KACvBg4B,EAAY,MAEd,IAEFnyB,qBAAU,WACRuH,GAAgB,GAChBioB,GAAkBxoB,sBAAsBvH,EAAMxmB,YAC3C6pB,MAAK,SAASC,GACU,KAAjBA,EAASpqB,QACXmG,EAA4BikB,EAASvqB,MAAMsqB,MAAM,SAASrK,GACtD5f,QAAQC,IAAI,8BAA+B2f,GAC3CV,EAAkBmC,MAGxBqN,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,yCAA0CmqB,EAAGF,SAASpqB,QAC3C,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZkc,EAA6BiO,EAAGF,UAAU,EAAM,GAAI,GAAI,gCAAgC,MAC5FwE,GAAgB,MAEpBF,GAAcD,KAChB,IAEFpH,qBAAU,WAGRkyB,GAAgBD,KAChB,CAAC7qB,IAGH,IAAMqI,EAAmB,WAAQhQ,EAAMgQ,oBAEjCxE,EAAuB,WAAQxL,EAAMwL,wBAErComB,EAAY,WACZhqB,GAAcD,IAGdgrB,EAAoB,SAACC,GACzB/5B,EAAsB+5B,EAAQ,KAAM,KAAK,qBACzChrB,GAAcD,IAGVkrB,EAAoB,SAACt6B,GACzBM,EAAsB,KAAM,KAAM,KAAK,sBACvCi6B,IACA,IAAI9tC,EAASuT,EAAI4L,OAAOtqB,MACxB6gB,EAAuB1V,GACvBsT,EAAkBtT,GAClB4iB,GAAcD,IAmBVmrB,EAAuB,WAE3B,IAAIC,EAAajqB,SAASC,eAAe,iBACrCgqB,IAASA,EAAOl5C,MAAO,IAC3B64C,EAAY,KAGd,EAAoCtyB,oBAAS,GAA7C,mBAAO4yB,EAAP,KAAmBC,EAAnB,KACMvB,EAAgB,SAACwB,GAEjBD,GAAc,GACd,IAAMp5C,EAAQq5C,EACVpB,EAAW,GACH,IAARj4C,EACA2b,EAAgBxa,KAAI,SAACie,EAAUk6B,GAC7BrB,EAAU74B,EAAK7B,YAAY7Q,QAAO,SAACsqB,GAAD,OAAgBA,EAAO5f,UAAUyR,cAAcC,SAAS9oB,EAAM6oB,kBAChGzJ,EAAKq4B,oBAAsBQ,EACvBA,EAAS/3C,OAAS,GAAKk5C,GAAc,MAI7Cz9B,EAAgBxa,KAAI,SAACie,EAAUk6B,GAAoBl6B,EAAKq4B,oBAAsBr4B,EAAK7B,eAErFhe,QAAQC,IAAI,iBAAkBmc,IAKpC,OACC,qCAIsC,GAAhCwK,EAAMzB,UAAU,GAAGG,aACjB,qCAAE,IAAC,uBAAOkC,UAAU,YAAjB,SAA6B,iHAAiH,uBAAK,uBAAK,OAIhK,qBAAKA,UAAU,WAAf,SACE,qBAAKA,UAAU,kBAAf,SACE,sBAAKA,UAAU,MAAf,UAGE,sBAAKA,UAAU,WAAf,UACE,qBAAKA,UAAY,SAAjB,SAEE,uBAAOljB,GAAG,gBAAgBsmB,KAAK,OAAOovB,UAxDrB,SAAChd,GAC9B,IAAIid,EAAqBvqB,SAASC,eAAe,iBACjD,GAAkB,UAAdqN,EAAMhX,IAAiB,CAEzB,IAAIk0B,EAAwB,OAAGD,QAAH,IAAGA,OAAH,EAAGA,EAAoBx5C,MAAMkS,WACzD2mC,EAAYY,GACZ5B,EAAc4B,KAkDqErvB,YAAY,8CAA2CrD,UAAU,qCAE5I,8BAAK,mBAAGoD,KAAK,SAAUpD,UAAU,8BAA8BkD,QAASgvB,EAAnE,SAAyF,WAIhG,sBAAKlyB,UAAU,mBAAf,UACE,sBAAMA,UAAU,iDAChB,sBAAMA,UAAU,YAAhB,SAA4B,aAF9B,OAGIrG,QAHJ,IAGIA,OAHJ,EAGIA,EAAkBvf,KAAI,SAACu4C,EAAQC,GAAT,OACrB,qCACC,sBAAM5yB,UAAU,YAAhB,SACI,uBACIoD,KAAK,QACLtmB,GAAG,SACHomB,QAAU+uB,EACVh5C,MAAO05C,EAAG71C,GACVwsB,QAASqpB,EAAG13C,WAGpB,uBAAM+kB,UAAW,eAAjB,UAAiC,IAAE2yB,EAAG/4B,MAAM,uBAc5C,IAAZm3B,EACG,qCAAE,IACiB,GAAdqB,EACG,qCAAE,IAAC,uBAAK,mBAAGpyB,UAAU,eAAb,SAA4B,iDAAgD,OACpF,0CACIpL,QADJ,IACIA,OADJ,EACIA,EAAiBxa,KAAI,SAACie,EAAU1Z,GAAX,OACjB8tB,EAAK,qBAAK3vB,GAAE,0BAAqBub,EAAKvb,IAAjC,SACE,uBAAMA,GAAG,WAAT,UAAoB,IAAC,uBAAMkjB,UAAU,iBAAhB,UAAiC,IAAE3H,EAAKu4B,QAAQ,OAAQ,SAEpF,mCACEv4B,EAAKq4B,oBAAoBv3C,OAAS,GAChC,mCACC,eAACk7B,GAAA,EAAD,CAAYC,WAAS,EAArB,UAC2B,KAAvBza,GACC,qCACG,uBACA,cAAC0a,GAAA,EAAD,CACEC,OAAQ/H,EAGR3vB,GAAIub,EAAKvb,GACT23B,YAAapc,EAAKjZ,QAClB8jB,QAAS,kBAAM6uB,EAAkB15B,EAAKvb,MAHjCub,EAAKmG,QAQQ,KAAvB3E,GACA,mCACIxB,EAAK3e,EAAI,GACP,qCACG,uBACA,cAAC66B,GAAA,EAAD,CACEC,OAAQ/H,EAER3vB,GAAIub,EAAKvb,GACT23B,YAAapc,EAAKjZ,QAClB8jB,QAAS,kBAAM6uB,EAAkB15B,EAAKvb,MAHjCub,EAAKmG,UAUE,KAAvB3E,GACA,mCACIxB,EAAKxgB,EAAI,GACP,qCACG,uBACA,cAAC08B,GAAA,EAAD,CACEC,OAAQ/H,EAER3vB,GAAIub,EAAKvb,GACT23B,YAAapc,EAAKjZ,QAClB8jB,QAAS,kBAAM6uB,EAAkB15B,EAAKvb,MAHjCub,EAAKmG,UAUvBnG,EAAKjZ,SACJ,cAAC,GAAD,CAEIxG,WAAYwmB,EAAMxmB,WAClBq2C,OAAU52B,EAAKvb,GACf+1C,YAAex6B,EAAKu4B,QACpBx7B,WAAYiD,EAAKlC,QACjBK,YAAa6B,EAAK7B,YAClBu6B,SAAYA,EACZl3B,oBAAuBA,EACvB03B,OAAUl5B,EAAK3e,EACf83C,OAAUn5B,EAAKxgB,EACfm5C,UAAaA,EACb5hB,iBAAoBA,EACpBxE,qBAAyBA,GAZpBvS,EAAKvb,mBAuBvC,qCAAE,IAAF,OACK8X,QADL,IACKA,OADL,EACKA,EAAiBxa,KAAI,SAACie,EAAU1Z,GAAX,OACpB8tB,EAAK,qBAAK3vB,GAAE,0BAAqBub,EAAKvb,IAAjC,SACE,uBAAMA,GAAG,WAAT,UAAoB,IAAC,uBAAMkjB,UAAU,iBAAhB,UAAiC,IAAE3H,EAAKu4B,QAAQ,OAAQ,SAEpF,mCACG,eAACvc,GAAA,EAAD,CAAYC,WAAS,EAArB,UAC2B,KAAvBza,GACC,qCACG,uBACA,cAAC0a,GAAA,EAAD,CACEC,OAAQ/H,EAGR3vB,GAAIub,EAAKvb,GACT23B,YAAapc,EAAKjZ,QAClB8jB,QAAS,kBAAM6uB,EAAkB15B,EAAKvb,MAHjCub,EAAKmG,QAQQ,KAAvB3E,GACA,mCACIxB,EAAK3e,EAAI,GACP,qCACC,uBACA,cAAC66B,GAAA,EAAD,CACEC,OAAQ/H,EAER3vB,GAAIub,EAAKvb,GACT23B,YAAapc,EAAKjZ,QAClB8jB,QAAS,kBAAM6uB,EAAkB15B,EAAKvb,MAHjCub,EAAKmG,UAUI,KAAvB3E,GACA,mCACIxB,EAAKxgB,EAAI,GACL,qCACG,uBACA,cAAC08B,GAAA,EAAD,CACEC,OAAQ/H,EAER3vB,GAAIub,EAAKvb,GACT23B,YAAapc,EAAKjZ,QAClB8jB,QAAS,kBAAM6uB,EAAkB15B,EAAKvb,MAHjCub,EAAKmG,UAUzBnG,EAAKjZ,SACJ,cAAC,GAAD,CAEIxG,WAAYwmB,EAAMxmB,WAClBq2C,OAAU52B,EAAKvb,GACf+1C,YAAex6B,EAAKu4B,QACpBx7B,WAAYiD,EAAKlC,QACjBK,YAAa6B,EAAK7B,YAClBu6B,SAAYA,EACZl3B,oBAAuBA,EACvB03B,OAAUl5B,EAAK3e,EACf83C,OAAUn5B,EAAKxgB,EACfm5C,UAAaA,EACb5hB,iBAAoBA,EACpBxE,qBAAyBA,GAZpBvS,EAAKvb,eAuB3BmqB,GAAgB,cAACpD,EAAD,OCxWZ,SAASivB,GAAW1zB,GACzB7jB,EAAQ,IAAhB,IAGI,EAEIjC,GAAW,SAAC+lB,GAAD,MAAgB,CACvBtlB,0BAA2BslB,EAAMtlB,0BACjCD,kBAAmBulB,EAAMvlB,kBACzBL,yBAA0B4lB,EAAM5lB,6BALhCM,EAAR,EAAQA,0BACAN,GADR,EAAmCK,kBAAnC,EACQL,0BAgBV,GALY6mB,EAAaoW,GACTpW,EAAawM,OAIKtN,oBAAS,IAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAA0FxH,oBAAS,GAAnG,mBAAOuzB,EAAP,KAA8CC,EAA9C,KACA,EAAwCxzB,oBAAS,GAAjD,mBAAOyH,EAAP,KAAqBC,EAArB,KAEA,EAAoD1H,oBAAS,GAA7D,mBAAOyzB,EAAP,KAA2BC,EAA3B,KACA,EAAsD1zB,oBAAS,GAA/D,mBAAO2zB,EAAP,KAA4BC,EAA5B,KACA,EAAkD5zB,oBAAS,GAA3D,mBAAO6zB,EAAP,KAA0BC,EAA1B,KAEA,EAAkD9zB,mBAAS,IAA3D,mBAAO+zB,EAAP,KAA0BC,EAA1B,KAEA,EAAoCh0B,mBAAS,IAA7C,mBAAOi0B,EAAP,KAAmBC,EAAnB,KACA,EAAoDl0B,mBAASJ,EAAMu0B,eAAnE,mBAAOC,EAAP,KAA2BC,EAA3B,KAEA,EAAwDr0B,mBAAS,CAAEriB,KAAM,GAAI7C,MAAO,KAApF,mBAAOw5C,EAAP,KAA6BC,EAA7B,KAGAp0B,qBAAU,WAKRk0B,EAAsBz0B,EAAMu0B,eAC5BD,EAAc,IACdJ,GAAqB,GACrBtsB,GAAcD,KACd,IAEFpH,qBAAU,WACRnnB,QAAQC,IAAI,kCACZu6C,GAA0CD,KAC1C,CAAChsB,IAGH,IAEMitB,EAA4B,WAAU50B,EAAM40B,6BAE5CC,EAAkC,WAAU70B,EAAM60B,mCA6FlDC,EAAc,SAAC/xB,GAElB6E,GAAcD,GAGd,IAAIotB,EAAc,GACdC,EAAe,GACnBD,EAAUP,EACVp7C,QAAQC,IAAI,yBAA0B07C,GAClCA,EAAQh7C,OAAO,EACfg7C,EAAQ/5C,KAAI,SAACsB,EAAOsmC,GAEdtmC,EAAEmgB,SAAWsG,GAAWiyB,EAASvyC,KAAKnG,MAIzCm4C,EAAsBO,GAC7Bh1B,EAAMi1B,oBAAoBj1B,EAAMk1B,QAASF,GACzCP,EAAsBO,GACtBh1B,EAAMm1B,uBA3GPvtB,GAAcD,GAkHbktB,IACAD,KAKH,OACE,qCAEI,sBAAKh0B,UAAU,aAAf,UAGE,sBAAKA,UAAU,uBAAf,UACE,uBAAQA,UAAU,cAAlB,2DADF,IACqF,uBACnF,sBAAKA,UAAU,qCAAf,UACE,uBAAOA,UAAU,aAAjB,qBADF,IACgD,uBAC1C,mBAAGA,UAAU,2CAFnB,IAEiE,uBAAMA,UAAU,cAAhB,wBAAyC,iDAAzC,2CAAqG,gDAArG,+BAA2J,uBACtN,mBAAGA,UAAU,2CAHnB,IAGiE,uBAAMA,UAAU,cAAhB,yBAA0C,0CAA1C,oBAA2E,0CAA3E,oDAC/D,uBACA,kCAAO,sBAAMA,UAAU,aAAhB,qBAAP,OACE,uBAAMA,UAAU,cAAhB,sBAAuC,sBAAMA,UAAU,aAAhB,SAA6B,2CAApE,mCANJ,IAOW,uBACT,kCAAO,sBAAOA,UAAU,aAAjB,qBAAP,OACE,sBAAMA,UAAU,cAAhB,kDATJ,IAUW,uBACT,kCAAO,sBAAOA,UAAU,aAAjB,qBAAP,OACE,uBAAOA,UAAU,cAAjB,sBAAwC,sBAAMA,UAAU,8BAAhB,SAA8C,kDAZ1F,IAaW,uBACT,kCAAO,sBAAMA,UAAU,aAAhB,qBAAP,OACE,uBAAMA,UAAU,cAAhB,2EAA4F,sBAAMA,UAAU,8BAAhB,2DAfhG,IAgBW,uBACT,kCAAO,sBAAMA,UAAU,aAAhB,sBAAP,OACE,uBAAMA,UAAU,cAAhB,iDAAkE,sBAAMA,UAAU,8BAAhB,SAA8C,kDAlBpH,IAmBW,6BAIb,uBAGA,sBAAKA,UAAU,uBAAf,UACE,uBAAQA,UAAU,cAAlB,8CADF,IAC2E,uBACzE,sBAAKA,UAAU,sBAAf,UACE,qBAAKA,UAAU,WAAf,SACE,uBAAOljB,GAAG,YAAYsmB,KAAK,OAAOmG,SA3JpB,SAACiM,GAE3Bke,EAAcle,EAAMjS,OAAOtqB,OAC3Bi6C,GAAsB,GAEtBlsB,GAAcD,IAsJ8D1D,YAAY,2CAA2CrD,UAAU,4DAEnI,qBAAKA,UAAU,WAAf,SAA0B,mBAAGoD,KAAK,SAAUpD,UAAU,iCAAiCkD,QArJ1E,WAEvB,IAAIivB,EAAajqB,SAASC,eAAe,aACrCgqB,IAASA,EAAOl5C,MAAO,IAC3By6C,EAAc,IACdR,GAAsB,GACtBE,GAAuB,GACvBE,GAAqB,IA8Ie,iBAC1B,qBAAKtzB,UAAU,WAAf,SACIizB,EACK,yCAAG,wBAAQ/vB,QA9IZ,WAElB,IAAIsxB,EAAgB,CAAE,KAAQ,GAAI,WAAa,EAAO,MAAS,IAC/DA,EAAcr3C,KAAOs2C,EAErBvsB,GAAgB,GAChB5B,GAAcH,oBAAoB/F,EAAMxmB,WAAY47C,GACjD/xB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTyB,EAA0B2oB,EAASvqB,KAAMq8C,GAAe/xB,MAAM,SAASrK,GAEnEo7B,EAAqBp7B,GACrBk7B,GAAqB,MAG7BpsB,GAAgB,GAChBF,GAAcD,MAEjBpE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/DmB,EAAyBmpB,EAAGF,UAAU,EAAM,GAAI,GAAI,iDAAiD,KAlD5EtD,EAAMgQ,mBAoD/BlI,GAAgB,OAwH8BlH,UAAU,+BAAxC,sBAAH,WACA,yCAAG,wBAAQA,UAAU,iCAAiC9kB,UAAQ,EAA3D,sBAAH,aAGT,qBAAK8kB,UAAU,WAAf,SACImzB,EACK,yCAAG,wBAAQjwB,QA/GV,WAGpB,IAAIuxB,EAAS,CAAE,KAAQX,EAAqB32C,KAAM,QAAW22C,EAAqBx5C,OAC9E65C,EAAc,GACdO,GAAW,GACfP,EAAUP,GACEz6C,OAAO,GACfg7C,EAAQ/5C,KAAI,SAACsB,EAAOsmC,GAEdtmC,EAAEmgB,SAAW44B,EAAO54B,UAAW64B,GAAW,MAEhC,GAAZA,GAAqBP,EAAQtyC,KAAK4yC,IAEnCN,EAAQtyC,KAAK4yC,GACpBnB,GAAqB,GAErBl0B,EAAMm1B,uBACNrB,GAAsB,GACtBE,GAAuB,GACNlrB,SAASC,eAAe,aAClClvB,MAAO,GACd46C,EAAsBM,GAEtBF,IACAD,IACAhtB,GAAcD,GACd3H,EAAMi1B,oBAAoBj1B,EAAMk1B,QAASH,IAoFYn0B,UAAU,yCAAzC,uBAAH,OACA,yCAAG,wBAAQA,UAAU,yCAAyC9kB,UAAQ,EAAnE,uBAAH,eAOXm4C,GACC,qCACC,sBAAKrzB,UAAU,kBAAf,UACE,uBAAOA,UAAU,cAAjB,8CADF,IAC0E,uBACxE,qBAAKA,UAAU,+CAAf,gBACIuzB,QADJ,IACIA,OADJ,EACIA,EAAmBn5C,KAAI,SAACu6C,EAASC,GAAV,OACtB,qCACG,oBAAG3xB,KAAK,IAAIC,QAAS,kBAzIf2xB,EAyIqCF,EAxI9CzsB,SAASC,eAAe,aAClClvB,MAAO47C,EAAS13C,KACvBm2C,GAAqB,GACrBS,EAAwBc,GACxBzB,GAAuB,GACvBF,GAAsB,QAEtBlsB,GAAcD,GARW,IAAC8tB,GAyI2C70B,UAAU,gDAA3D,UACE,mBAAGA,UAAU,6CADf,OACqE20B,EAAIx3C,QACrE,kCAKd,0BAKJ,sBAAK6iB,UAAU,kBAAf,UACE,wBAAOA,UAAU,cAAjB,qDAAqE4zB,EAAmBz6C,OAAxF,QAAyG,uBACzG,qBAAK6mB,UAAU,+CAAf,gBACM4zB,QADN,IACMA,OADN,EACMA,EAAoBx5C,KAAI,SAACu6C,EAASC,GAAV,OACvB,mCACC,sBAAK50B,UAAU,gCAAf,UACI,sBAAKA,UAAU,YAAf,UACI,mBAAGA,UAAU,4CAAb,kBAAoE20B,EAAIx3C,QAFhF,OAII,sBAAK6iB,UAAU,YAAf,UACI,mBAAGA,UAAU,0CAAb,kBAAkE20B,EAAI94B,WAE1E,qBAAKmE,UAAU,WAAf,SACI,yBAAQkD,QAAS,kBAAIgxB,EAAWS,EAAI94B,UAAUmE,UAAU,MAAxD,cAA+D,mBAAGA,UAAU,wCAA5E,yBAanBiH,GAAgB,cAACpD,EAAD,OCvT7B,IAAMrD,GAAU1X,uDAwCDgsC,GAPe,CAC1BC,6BA7BkC,uCAAG,WAAO7vB,GAAP,SAAAntB,EAAA,sEAEtB6oB,IAAMC,KAAKL,GAAU,0BAA2B,eACzD,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAH1B,mFAAH,sDA8BlC8vB,uCAvB4C,uCAAG,WAAO9vB,GAAP,SAAAntB,EAAA,sEAEhC6oB,IAAMC,KAAKL,GAAU,oCAAqC,eACnE,CAACM,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHhB,mFAAH,sDAwB5C+vB,yBAhB8B,uCAAG,WAAO/vB,EAAWjuB,GAAlB,SAAAc,EAAA,sEAElB6oB,IAAMC,KAAKL,GAAU,sBAAuBvpB,EACrD,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAH9B,mFAAH,wDAiB9BgwB,mCAVwC,uCAAG,WAAOhwB,EAAWjuB,GAAlB,SAAAc,EAAA,sEAE5B6oB,IAAMC,KAAKL,GAAU,gCAAiCvpB,EAC/D,CAAC6pB,QAAS,CAAE,eAAgB,YAAa,cAAgBoE,KAHpB,mFAAH,yDCY3B,SAASiwB,GAAS/1B,GACvB7jB,EAAQ,IADsC,IAAD,EAIjD,EAGI2e,GAAoB,SAACmF,GAAD,MAAgB,CAChCpD,+BAAgCoD,EAAMpD,+BACtCI,8BAA+BgD,EAAMhD,8BACrCgB,+BAAgCgC,EAAMhC,+BACtChD,kCAAmCgF,EAAMhF,sCAPzC4B,EAAR,EAAQA,+BAAgCI,EAAxC,EAAwCA,8BAChCgB,EADR,EACQA,+BACAhD,EAFR,EAEQA,kCAmBNmc,EAAsB,CAAE15B,GAAG,KAAOs4C,MAAM,EAAO75B,QAAS,CAAEC,cAAe,EAAGE,aAAc,KAI1FmR,GADQvM,EAAaoW,GACTpW,EAAawM,QAK7B,EAAkCtN,oBAAS,GAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAsFxH,oBAAS,GAA/F,mBAAO61B,EAAP,KAA4CC,EAA5C,KACA,EAAwC91B,oBAAS,GAAjD,mBAAOyH,EAAP,KAAqBC,EAArB,KAGA,EAA0E1H,mBAASJ,EAAMm2B,yBAAzF,mBAAOC,EAAP,KACA,GADA,KACkEh2B,mBAASJ,EAAMq2B,4BAAjF,mBAAOA,EAAP,KAEA,GAFA,KAEoEj2B,mBAASJ,EAAMs2B,wBAAnF,mBAAOC,EAAP,KAAmCC,EAAnC,KAEA,EAAsDp2B,mBAASJ,EAAMm2B,yBAArE,mBAAOM,EAAP,KAA4BC,EAA5B,KACA,EAAsDt2B,oBAAS,GAA/D,mBAAOoa,EAAP,KAA4BC,EAA5B,KACA,EAAoDra,oBAAS,GAA7D,mBACA,GADA,UACsDA,oBAAS,IAA/D,mBACA,GADA,UACkDA,oBAAS,IAA3D,mBAA0B8zB,GAA1B,WAEA,EAAkC9zB,oBAAS,GAA3C,oBACA,IADA,YACsCA,oBAAS,IAA/C,qBAAoBu2B,IAApB,aAEA,GAAoCv2B,mBAAS,IAA7C,qBACA,IADA,YACwDA,mBAAS,CAAEriB,KAAM,GAAI7C,MAAO,MAApF,qBACA,IADA,YACoDklB,mBAAS,KAA7D,qBAEA,IAFA,YAE4BA,oBAAS,IAArC,iCAGAG,qBAAU,WACRnnB,QAAQC,IAAI,kBACZD,QAAQC,IAAI,mCAAoC+8C,GAChDh9C,QAAQC,IAAI,+BAAgCg9C,GAe5CnC,GAAqB,GAErByC,IAAe,GACf/uB,GAAcD,KAEd,IAEFpH,qBAAU,WACRnnB,QAAQC,IAAI,oCACZ68C,GAAwCD,GACxC78C,QAAQC,IAAI,kBAAmB2mB,EAAM42B,eACrCx9C,QAAQC,IAAI,sBAAuBo9C,KAInC,CAAC9uB,IAGH,IAIMitB,GAA4B,WAAQ50B,EAAM40B,6BAE1CiC,GAAoC,WAGxCjvB,GAAcD,IAGVmvB,GAAoB,SAACx8C,GAEzBlB,QAAQC,IAAI,mBAAoBiB,EAAE6pB,OAAOzmB,GAAI,qBAAsBpD,GACnE,IAAIwiB,EAASxiB,EAAE6pB,OAAOzmB,GAClBq5C,EAAYz8C,EAAE6pB,OAAO+F,QACZ,GAATpN,IACD45B,GAAwBD,GACxBxB,GAAoB,KAAK,KAGf,GAATn4B,GAAci6B,GAAYL,GAAuB,GAErD75B,EAA+BmD,EAAMg3B,KAAMl6B,EAAO,KAAM,qBACxD2d,GAAuB,GACvBoc,KACAjC,MA0DIqC,GAAwB,WAC5B79C,QAAQC,IAAI,mCACI,GAAZ2mB,EAAMg3B,KACN1sB,KAAMC,KAAK,CACT7tB,MAAO,GACP+pB,KAAM,UACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,yWACLtN,MAAK,SAACuH,GACDA,EAAOC,aAAeqsB,QAI3BA,MAGHA,GAAY,WAAO,IAAD,GAGpB9f,EADc,CAAE15B,GAAG,KAAOs4C,MAAM,EAAO75B,QAAS,CAAEC,cAAe,EAAGE,aAAc,MAEnE5e,GAAmB,GAAdsiB,EAAMg3B,KAAa,KAAOh3B,EAAMg3B,KAEpD,IAAIp+C,EAAO,GASX,OARA,UAAAonB,EAAM42B,qBAAN,SAAqB57C,KAAI,SAAC4F,EAAUqB,GAClC,OAAQrB,EAAKlD,IACX,KAAK,EAAOkD,EAAK/E,SAAUjD,GAAc,QAAU,MACnD,KAAK,EAAOgI,EAAK/E,SAAUjD,GAAc,SAAU,MACnD,KAAK,EAAOgI,EAAK/E,SAAUjD,GAAc,MAAQ,MACjD,KAAK,EAAOgI,EAAK/E,SAAUjD,GAAc,UAGrCA,GACN,IAAK,OAAaw+B,EAAejb,QAAQC,cAAgB,EAAG,MAC5D,IAAK,YAAagb,EAAejb,QAAQC,cAAgB,EAAG,MAC5D,IAAK,SAAagb,EAAejb,QAAQC,cAAgB,GAAI,MAC7D,IAAK,SACCgb,EAAejb,QAAQC,cAAgB,GACvCgb,EAAejb,QAAQG,aAAei6B,EACtC,MACN,IAAK,WACCnf,EAAejb,QAAQC,cAAgB,GACvCgb,EAAejb,QAAQG,aAAei6B,EAGpB,GAAtBE,IAA+Brf,EAAejb,QAAQG,aAAc,IAExEljB,QAAQC,IAAI,6EAA8E+9B,GAE1FtP,GAAgB,GAChBqvB,GAAuBtB,yBAAyB71B,EAAMxmB,WAAY49B,GAC/D/T,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACT+kB,EAA+BqF,EAASvqB,MAAMsqB,MAAM,SAAS+zB,GAEzD3c,GAAuB,GACvBnQ,KAAMC,KAAK,CACT7tB,MAAO,2DACP+pB,KAAM,UACN+D,kBAAmB,SACnBC,mBAAoB,UACpB7F,MAAO,QAET/H,EAA+BmD,EAAMg3B,KAAM,KAAMT,EAA4B,mBAGrFzuB,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/D+hB,EAAkCuI,EAAGF,UAAU,EAAM,GAAI,GAAI,sDAAmD,KAChHtD,EAAMgQ,mBACNlI,GAAgB,MAExB+uB,KACAjC,MAYIK,GAAsB,SAACC,EAAamC,GAExCj+C,QAAQC,IAAI,kCAAkC67C,EAAQmC,GACtDb,EAA8Ba,GAC9Bx6B,EAA+BmD,EAAMg3B,KAAM,KAAMK,EAAY,uBAC7Dj+C,QAAQC,IAAI,mCAAmCk9C,GAC/CM,KACAjC,MAIF,OACA,qCAEI,gCACI,mBAAGh0B,UAAU,sBAAb,SAAoCZ,EAAMs3B,aAC1C,mBAAG12B,UAAuB,GAAZZ,EAAMg3B,KAAU,sBAAwB,KAAtD,SAA6Dh3B,EAAMu3B,YACnE,0BAIJ,sBAAK75C,GAAG,yBAAR,UAGI,mBAAGkjB,UAAU,KAAb,SAAkB,yBAElB,qBAAKA,UAAU,mBAAf,mBACIZ,EAAM42B,qBADV,aACI,EAAqB57C,KAAI,SAACw8C,EAASC,GAAV,OACxB,mCACID,EAAI/5C,SACF,qCACC,qBAAKmjB,UAAU,iBAAf,SACE,uBACEljB,GAAI85C,EAAI95C,GACRsmB,KAAK,WACLkG,QAASstB,EAAI37C,OACbC,SAAU07C,EAAI17C,SACdquB,SAAU2sB,OAId,qBAAKrxB,MAAO,CAAC2B,QAAQ,gBAArB,SAAuCowB,EAAI14C,cAAkB,iCAUxE23C,GACE,qCAAE,IAAC,cAAC,GAAD,CACMj9C,WAAcwmB,EAAMxmB,WACpBkE,GAAMsiB,EAAMg3B,KACZ9B,QAAW,KACXX,cAAiBgC,EACjBtB,oBAAuBA,GACvBE,qBAnES,WAC3B1a,GAAuB,IAmELma,0BAA6BA,GAC7BC,gCAAmCgC,GACnC7mB,iBAAoBhQ,EAAMgQ,sBAGtC,0BAKJ,uBACA,qBAAKtyB,GAAG,mBAAR,SACE,sBAAKkjB,UAAU,+BAAf,UACM4Z,EACK,qCAAE,IAAC,yBAAQ1W,QAnLP,WACnB1qB,QAAQkkB,QACRlkB,QAAQC,IAAI,wBAAyBo9C,EAAsB,+BAAgCF,EAA2Bx8C,QAClH08C,GAA6D,GAArCF,EAA2Bx8C,OACnDuwB,KAAMC,KAAK,CACT7tB,MAAO,4FACP+pB,KAAM,UACNgE,mBAAoB,UACpBD,kBAAmB,SACnB5F,MAAO,QAGNqyB,MAuK0Cr2B,UAAU,iBAAzC,UAA0D,KAAE,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,WAA0B,UACvJ,qCAAE,IAAC,yBAAQP,UAAU,mBAAmB9kB,UAAQ,EAA7C,UAA8C,KAAE,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,UAEnJ,yBAAQ2C,QA9NE,WACd0W,EACIlQ,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,oGACPtN,MAAK,SAACuH,GACDA,EAAOC,cAGP5N,EAA8B+C,EAAMg3B,KAAMZ,EAA+Bp2B,EAAM03B,oBAAqB13B,EAAMq2B,2BAC1GQ,KACAjC,KAEA8B,EAAuBN,GACvBS,KACAz9C,QAAQkkB,QACRlkB,QAAQC,IAAI,mCAAoC+8C,GAChDh9C,QAAQC,IAAI,yBAA0Bo9C,GACtCz2B,EAAM2L,wBAAwB,IAE9B/D,GAAcD,QAO5BkvB,KACAjC,KACA50B,EAAM2L,wBAAwB,MA0LO/K,UAAU,mBAAzC,UAA4D,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,YAK1J0G,GAAgB,cAACpD,EAAD,OC9VX,SAASkzB,GAAS33B,GACvB7jB,EAAQ,IAAhB,IAGI,EAII2e,GAAoB,SAACmF,GAAD,MAAgB,CAChC7B,kCAAmC6B,EAAM7B,kCACzCE,yCAA0C2B,EAAM3B,yCAChDjB,oCAAqC4C,EAAM5C,oCAC3CpC,kCAAmCgF,EAAMhF,sCARzCmD,EAAR,EAAQA,kCACAE,EADR,EACQA,yCACAjB,EAFR,EAEQA,oCACApC,EAHR,EAGQA,kCAaNwS,GADQvM,EAAaoW,GACTpW,EAAawM,QAGzBkqB,EAAqB,CAACl6C,GAAI,EAAGs4C,MAAM,EAAMr4B,WAAW,GAAIC,OAAO,GAAIE,UAAU,IAGjF,EAAkCsC,oBAAS,GAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAsFxH,oBAAS,GAA/F,mBAAOy3B,EAAP,KAA4CC,EAA5C,KACA,EAAwC13B,oBAAS,GAAjD,mBAAOyH,EAAP,KAAqBC,EAArB,KAEA,EAAsD1H,oBAAS,GAA/D,mBAAOoa,EAAP,KAA4BC,EAA5B,KAEA,EAAgDra,oBAAS,GAAzD,mBAAO23B,EAAP,KAAyBC,EAAzB,KACA,EAA4C53B,oBAAS,GAArD,mBAAO63B,EAAP,KAAuBC,EAAvB,KACA,EAA8C93B,oBAAS,GAAvD,mBAAO+3B,EAAP,KAAwBC,EAAxB,KAEA,EAA0Dh4B,mBAASJ,EAAMq4B,kBAAzE,mBAAOC,EAAP,KAA8BC,EAA9B,KACA,EAAsDn4B,mBAASJ,EAAMw4B,gBAArE,mBAAOC,EAAP,KAA4BC,EAA5B,KACA,EAAwDt4B,mBAASJ,EAAM24B,iBAAvE,mBAAOC,EAAP,KAA6BC,GAA7B,KAEA,GAA8Cz4B,mBAAS,IAAvD,qBAAwB04B,IAAxB,aAMAv4B,qBAAU,WACRnnB,QAAQC,IAAI,oBAIR2mB,EAAMq4B,iBAAiBt+C,OAAS,EAAKi+C,GAAoB,GACtDA,GAAoB,GAEvBh4B,EAAMw4B,eAAez+C,OAAS,EAAKm+C,GAAkB,GAClDA,GAAkB,GAErBl4B,EAAM24B,gBAAgB5+C,OAAS,EAAKq+C,GAAmB,GACpDA,GAAmB,GAE1BR,EAAel6C,GAAKsiB,EAAM+4B,KAC1BnB,EAAej6B,WAAaqC,EAAMq4B,iBAClCT,EAAeh6B,OAASoC,EAAMw4B,eAC9BZ,EAAe95B,UAAYkC,EAAM24B,gBAEjCG,GAAmB,IAEnBlxB,GAAcD,KACd,IAEFpH,qBAAU,WACRnnB,QAAQC,IAAI,sCACZy+C,GAAwCD,KAKxC,CAAClwB,IAGH,IAGMitB,GAA4B,WAAQ50B,EAAM40B,6BAG1CoE,GAAoC,WAGxCpxB,GAAcD,IAqDVuvB,GAAY,WAEdU,EAAel6C,GAAkB,GAAZsiB,EAAM+4B,KAAW,KAAO/4B,EAAM+4B,KACnDnB,EAAej6B,WAAa26B,EAC5BV,EAAeh6B,OAAS66B,EACxBb,EAAe95B,UAAY86B,EACJ,GAAnBb,IAA4BH,EAAej6B,WAAY,IACtC,GAAjBs6B,IAA0BL,EAAeh6B,OAAQ,IAC/B,GAAlBu6B,IAA2BP,EAAe95B,UAAW,IACzD1kB,QAAQC,IAAI,yCAA0Cu+C,GAEtD9vB,GAAgB,GAChBqvB,GAAuBrB,mCAAmC91B,EAAMxmB,WAAYo+C,GACzEv0B,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACPolB,EAAyCgF,EAASvqB,MAAMsqB,MAAM,SAASrK,GAErEyhB,GAAuB,GACvBnQ,KAAMC,KAAK,CACT7tB,MAAO,kEACP+pB,KAAM,UACN+D,kBAAmB,SACnBC,mBAAoB,UACpB7F,MAAO,QAETxG,EAAkC4B,EAAM+4B,KAAMnB,EAAgB,mBAGtE53B,EAAM40B,4BACN9sB,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,qCAAsCmqB,EAAGF,SAASpqB,QAC/D+hB,EAAkCuI,EAAGF,UAAU,EAAM,GAAI,GAAI,qEAAkE,KA/FzGtD,EAAMgQ,mBAiG5BlI,GAAgB,MAEtB8sB,MAGEO,GAAuB,WAC1B1a,GAAuB,IAGpBwe,GAAiB,SAAC/D,GACtB,OAAQA,GACN,IAAK,KAAM8C,GAAqBD,GAAmB,MACnD,IAAK,IAAMG,GAAmBD,GAAiB,MAC/C,IAAK,IAAMG,GAAoBD,GAEjC1d,GAAuB,IAGnBwa,GAAsB,SAACC,EAAamC,GAGxC,OADAj+C,QAAQC,IAAI,kCAAkC67C,EAAQmC,GAC9CnC,GACN,IAAK,KAAMqD,EAAyBlB,GAAa,MACjD,IAAK,IAAMqB,EAAuBrB,GAAe,MACjD,IAAK,IAAMwB,GAAwBxB,GAErCj+C,QAAQC,IAAI,4BAA4Bo/C,IAM1C,OACA,qCAEK,gCACG,mBAAG73B,UAAU,sBAAb,SAAoCZ,EAAMk5B,aAC1C,mBAAGt4B,UAAuB,GAAZZ,EAAM+4B,KAAU,sBAAwB,KAAtD,SAA6D/4B,EAAMm5B,YACnE,0BAIJ,sBAAKz7C,GAAG,yBAAR,UAGI,gCACE,mBAAGkjB,UAAU,KAAb,SAAkB,4CAClB,sBAAKA,UAAU,mBAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,uBAAOljB,GAAG,UAAUsmB,KAAK,WACjBkG,QAAS6tB,EACTj0B,QAAS,kBAAIm1B,GAAe,WAEtC,sBAAKxzB,MAAO,CAAC2B,QAAQ,gBAArB,UAAsC,2CAAsCpH,EAAMq4B,iBAAiBt+C,OAAO,QAAQ,0BAEnHg+C,GACE,qCAAE,IAAC,cAAC,GAAD,CACMv+C,WAAcwmB,EAAMxmB,WACpBkE,GAAMsiB,EAAM+4B,KACZ7D,QAAW,KACXX,cAAiBv0B,EAAMq4B,iBACvBpD,oBAAuBA,GACvBE,qBAAwBA,GACxBP,0BAA6BA,GAC7BC,gCAAmCmE,GACnChpB,iBAAoBhQ,EAAMgQ,mBAAoB,UAG5D,uBAGA,sBAAKpP,UAAU,iBAAf,UACI,mBAAGA,UAAU,KAAb,SAAkB,sDAClB,sBAAKA,UAAU,mBAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,uBAAOljB,GAAG,SAAQsmB,KAAK,WACfkG,QAAS+tB,EACTn0B,QAAS,kBAAIm1B,GAAe,UAEtC,sBAAKxzB,MAAO,CAAC2B,QAAQ,gBAArB,UAAsC,2CAAsCpH,EAAMw4B,eAAez+C,OAAO,QAAQ,0BAGjHk+C,GACE,qCAAE,IAAC,cAAC,GAAD,CACIz+C,WAAcwmB,EAAMxmB,WACpBkE,GAAMsiB,EAAM+4B,KACZ7D,QAAW,IACXX,cAAiBv0B,EAAMw4B,eACvBvD,oBAAuBA,GACvBE,qBAAwBA,GACxBP,0BAA6BA,GAC7BC,gCAAmCmE,GACnChpB,iBAAoBhQ,EAAMgQ,mBAAoB,UAG5D,uBAIA,sBAAKpP,UAAU,iBAAf,UACI,mBAAGA,UAAU,KAAb,SAAkB,gDAClB,sBAAKA,UAAU,mBAAf,UACE,qBAAKA,UAAU,iBAAf,SACE,uBAAOljB,GAAG,SAASsmB,KAAK,WAChBkG,QAASiuB,EACTr0B,QAAS,kBAAIm1B,GAAe,UAEtC,sBAAKxzB,MAAO,CAAC2B,QAAQ,gBAArB,UAAsC,2CAAsCpH,EAAM24B,gBAAgB5+C,OAAO,QAAQ,0BAElHo+C,GACE,qCAAE,IAAC,cAAC,GAAD,CACI3+C,WAAcwmB,EAAMxmB,WACpBkE,GAAMsiB,EAAM+4B,KACZ7D,QAAW,IACXX,cAAiBv0B,EAAM24B,gBACvB1D,oBAAuBA,GACvBE,qBAAwBA,GACxBP,0BAA6BA,GAC7BC,gCAAmCmE,GACnChpB,iBAAoBhQ,EAAMgQ,mBAAoB,aAOhE,uBACA,qBAAKtyB,GAAG,mBAAR,SACE,sBAAKkjB,UAAU,+BAAf,UACM4Z,EACK,qCAAE,IAAC,yBAAQ1W,QAzLP,WACD,GAAZ9D,EAAM+4B,KACNzuB,KAAMC,KAAK,CACT7tB,MAAO,GACP+pB,KAAM,UACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,yWACLtN,MAAK,SAACuH,GACDA,EAAOC,aAAeqsB,QAI3BA,MAwKwCt2B,UAAU,iBAAzC,UAA0D,KAAE,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,WAA0B,UACvJ,qCAAE,IAAC,yBAAQP,UAAU,mBAAmB9kB,UAAQ,EAA7C,UAA8C,KAAE,sBAAM8mB,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,UAEnJ,yBAAQ2C,QA1NE,WACd0W,EACIlQ,KAAMC,KAAK,CACPpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,uGACPtN,MAAK,SAACuH,GACDA,EAAOC,cACPxN,EAAoC2C,EAAM+4B,MAC1CC,KACApE,KACA50B,EAAM2L,wBAAwB,IAC9B8O,GAAuB,OAOrCza,EAAM2L,wBAAwB,IAEhCqtB,MA+LuCp4B,UAAU,mBAAzC,UAA4D,IAAC,sBAAMgC,wBAAyB,CAAEC,OAAQ4K,EAAUE,QAAQ,GAAGxM,QAAiB,OAAU,YAK1J0G,GAAgB,cAACpD,EAAD,OC1UZ,SAAS0Q,GAAMnV,GAEvB,MAIIlF,GAAoB,SAACmF,GAAD,MAAgB,CAChCpE,mCAAoCoE,EAAMpE,mCAC1CD,yBAA0BqE,EAAMrE,yBAChCsC,6CAA8C+B,EAAM/B,6CACpDX,4BAA6B0C,EAAM1C,4BACnC/B,8BAA+ByE,EAAMzE,8BACrCC,sBAAuBwE,EAAMxE,sBAC7BR,kCAAmCgF,EAAMhF,sCAXzCY,EAAR,EAAQA,mCAAoCD,EAA5C,EAA4CA,yBACpCsC,EADR,EACQA,6CAA8CX,EADtD,EACsDA,4BAE9CtC,GAHR,EAEQO,8BAFR,EAEuCC,sBAFvC,EAGQR,mCAmBR,GAHSiG,EAAak4B,cAGYh5B,oBAAS,IAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAAsExH,oBAAS,GAA/E,mBAAOi5B,EAAP,KAAoCC,EAApC,KACA,EAAwCl5B,oBAAS,GAAjD,mBAAOyH,EAAP,KAAqBC,EAArB,KAGA,EAAwB1H,mBAAS,MAAjC,mBAAO42B,EAAP,KAAauC,EAAb,KACA,EAAoCn5B,mBAAS,MAA7C,mBAAOk3B,EAAP,KAAmBkC,EAAnB,KACA,EAAkCp5B,mBAAS,MAA3C,mBAAOm3B,EAAP,KAAkBkC,EAAlB,KACA,EAA0Cr5B,mBAAS,MAAnD,mBAAOw2B,EAAP,KAAsB8C,EAAtB,KACA,EAAsDt5B,mBAAS,MAA/D,mBAAOs3B,EAAP,KAA4BiC,EAA5B,KACA,EAA4Bv5B,oBAAS,GAArC,mBACA,GADA,UAC0DA,mBAAS,KAAnE,mBAAOk2B,EAAP,KAA8BsD,EAA9B,KACA,EAA8Dx5B,oBAAS,GAAvE,mBAAO+1B,GAAP,KAAgC0D,GAAhC,KACA,GAAkEz5B,mBAAS,IAA3E,qBAAOi2B,GAAP,MAAkCyD,GAAlC,MAEA,GAAwD15B,mBAAS,IAAjE,qBAAO25B,GAAP,MAA6BC,GAA7B,MACA,GAAoD55B,mBAAS,IAA7D,qBAAO65B,GAAP,MAA2BC,GAA3B,MACA,GAAsD95B,mBAAS,IAA/D,qBAAO+5B,GAAP,MAA4BC,GAA5B,MAKA,GAAwBh6B,mBAAS,MAAjC,qBAAO24B,GAAP,MAAasB,GAAb,MACA,GAAoCj6B,mBAAS,MAA7C,qBAAO84B,GAAP,MAAmBoB,GAAnB,MACA,GAAkCl6B,mBAAS,MAA3C,qBAAO+4B,GAAP,MAAkBoB,GAAlB,MACA,GAAgDn6B,mBAAS,IAAzD,qBAAOi4B,GAAP,MAAyBmC,GAAzB,MACA,GAA4Cp6B,mBAAS,IAArD,qBAAOo4B,GAAP,MAAuBiC,GAAvB,MACA,GAA8Cr6B,mBAAS,IAAvD,qBAAOu4B,GAAP,MAAwB+B,GAAxB,MAGA,GAA4Bt6B,oBAAS,GAArC,qBAAOgL,GAAP,MAAeC,GAAf,MAIA9K,qBAAU,WACNnnB,QAAQC,IAAI,iBAIO,GAAf2mB,EAAMzE,UACNuM,GAAgB,GAChBqvB,GAAuBxB,6BAA6B31B,EAAMxmB,YACzD6pB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACT2iB,EAAmCyH,EAASvqB,MAAMsqB,MAAM,SAASrK,GAG7D4O,GAAcD,MAGtBG,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,gDAAiDmqB,EAAGF,SAASpqB,QAClD,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZ4hB,EAAkCuI,EAAGF,UAAU,EAAM,GAAI,GAAI,8CAA8C,KAC/GwE,GAAgB,GAChBkI,SAIW,GAAfhQ,EAAMzE,UACNuM,GAAgB,GAChBqvB,GAAuBvB,uCAAuC51B,EAAMxmB,YACnE6pB,MAAK,SAACC,GACkB,KAAjBA,EAASpqB,QACTglB,EAA6CoF,EAASvqB,MAAMsqB,MAAM,SAASrK,GAGvE4O,GAAcD,MAGtBG,GAAgB,MAEnBvE,OAAM,SAACC,GACJpqB,QAAQC,IAAK,gDAAiDmqB,EAAGF,SAASpqB,QAClD,KAApBsqB,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZ4hB,EAAkCuI,EAAGF,UAAU,EAAM,GAAI,GAAI,wDAAwD,KACzHwE,GAAgB,GAChBkI,WAGV,IAEFzP,qBAAU,WACNnnB,QAAQC,IAAI,mCAIZigD,GAAgCD,KAClC,CAAC1xB,IAGH,IAAMqI,GAAmB,WAAQhQ,EAAMgQ,oBAEjCxE,GAAuB,WAAQxL,EAAMwL,wBAIrCopB,GAA4B,WAG9BhtB,GAAcD,IAGZgE,GAA0B,SAAC+Y,GAAyBrZ,IAAU,IAqCvE,OACC,qCAIoB,GAAjBrL,EAAMzE,SACJ,mCACC,qBAAKqF,UAAU,YAAf,SACC,qBAAKA,UAAU,aAAf,SACG,qBAAKA,UAAU,mBAAf,SAEI,wBAAOA,UAAU,oDAAjB,UACI,uBAAOljB,GAAG,eAAV,SACI,qBAAIkjB,UAAU,uDAAd,UACI,6BAAK,sBAAMA,UAAU,eAAhB,SAA+B,iBACpC,6BAAK,sBAAMA,UAAU,eAAhB,SAA+B,6BACpC,6BAAI,gBAIZ,uCACMhF,QADN,IACMA,OADN,EACMA,EAA0B5gB,KAAI,SAACghB,EAAQC,GAAT,eAC7B,mCACC,qBAAI2E,UAAU,4BAAd,UAGI,+BACgB,GAAX3E,GAAiB,uBAAM2E,UAAU,sBAAhB,UAAuC5E,EAAGnW,QAAQ,0BACpE,sBAAM+a,UAAoB,GAAT3E,EAAa,sBAAwB,GAAtD,SAA2DD,EAAGje,OAAY,OAC1E,sBAAM6iB,UAAoB,GAAT3E,EAAaD,EAAG9e,mBAAqB,GAAtD,SAA2D8e,EAAGjf,cAAcE,0BAIhF,yCAEK+e,EAAGK,mBAFR,aAEK,EAAgBrhB,KAAI,SAAC2/C,EAAYC,GAAb,OACnB,mCACID,EAAO9+C,QACN,qCACC,iCAAM,mBAAG+kB,UAAU,6BAAgC+5B,EAAO77C,eAAmB,+BAMpFkd,EAAGU,kBAAkB3iB,OAAS,GAC7B,6CACGiiB,EAAGU,yBADN,aACG,EAAsB1hB,KAAI,SAACu6C,EAASsF,GAAV,OACxB,mCACC,qBAAKj6B,UAAU,uBAAf,SACI,sBAAKA,UAAU,YAAf,UACA,uBAAMA,UAAU,mBAAhB,UACI,mBAAGA,UAAU,2CAAb,SAAwD,SAAW20B,EAAIx3C,QAC3E,uBACA,uBAAM6iB,UAAU,mCAAhB,UACI,mBAAGA,UAAU,yCAAb,SAAsD,SAAW20B,EAAI94B,0BAUzF,6BACI,yBAAQuH,KAAK,SAAStnB,MAAgB,GAATuf,EAAa,sCAAwC,qCAC9E2E,UAAoB,GAAT3E,EAAa,2EAA6E,0EACrG6H,QAAS,kBAvGvB,SAAC9H,GAGnBu9B,EAAQv9B,EAAGte,IACX87C,EAAcx9B,EAAGnW,SACjB4zC,EAAaz9B,EAAGje,MAChB27C,EAAiB19B,EAAGK,aACpBs9B,EAAuBttC,KAAKC,MAAMD,KAAKE,UAAUyP,EAAGK,eACpDw9B,GAA2B79B,EAAGE,uBAC9B49B,GAA6B99B,EAAGW,yBAC5BX,EAAGU,kBAAkB3iB,OAAS,EAAK6/C,EAAyB59B,EAAGU,mBAC3Dk9B,EAAyB,IACjCvuB,IAAU,GA2FqCyvB,CAAc9+B,IAFjC,UAGI,mBAAG4E,UAAU,iCAAmC,uCAgBlE,GAAjBZ,EAAMzE,SACJ,mCACC,qBAAKqF,UAAU,YAAf,SACE,qBAAKA,UAAU,aAAf,SACE,qBAAKA,UAAU,mBAAf,SACI,wBAAOA,UAAU,oDAAjB,UACI,wBAAOljB,GAAG,eAAV,UACI,qBAAIkjB,UAAU,uDAAd,UACI,oBAAI2vB,QAAS,EAAG3vB,UAAU,4BAA1B,SAAsD,eACtD,oBAAI4vB,QAAS,EAAG5vB,UAAU,iCAA1B,SAA2D,2BAC3D,oBAAI2vB,QAAS,EAAb,SAAgB,cAEpB,qBAAI3vB,UAAU,uDAAd,UACI,oBAAIA,UAAU,oBAAd,SAAkC,mBAClC,oBAAIA,UAAU,oBAAd,SAAkC,gBAClC,oBAAIA,UAAU,oBAAd,SAAkC,uBAG1C,uCACMrD,QADN,IACMA,OADN,EACMA,EAA6BviB,KAAI,SAACwiB,EAAQC,GAAT,iBAChC,mCACC,qBAAImD,UAAU,4BAAd,UAEI,+BACgB,GAAXnD,GAAiB,uBAAMmD,UAAU,sBAAhB,UAAuCpD,EAAG3X,QAAQ,0BACpE,sBAAM+a,UAAoB,GAATnD,EAAa,sBAAwB,GAAtD,SAA2DD,EAAGzf,OAAY,QAC1E,sBAAM6iB,UAAoB,GAATnD,EAAaD,EAAGtgB,mBAAqB,GAAtD,SAA2DsgB,EAAGzgB,cAAcE,0BAIhF,6BACKugB,EAAGG,WAAW5jB,OAAS,GACrB,6CACGyjB,EAAGG,kBADN,aACG,EAAe3iB,KAAI,SAACuJ,EAAQw2C,GAAT,OAChB,qCACG,uBAAMn6B,UAAU,uBAAhB,UACI,mBAAGA,UAAU,yCAAb,SAAsD,SAAWrc,EAAGkY,WACjE,iCASvB,6BACKe,EAAGI,OAAO7jB,OAAS,GACjB,6CACGyjB,EAAGI,cADN,aACG,EAAW5iB,KAAI,SAACrC,EAAOmpC,GAAR,OACZ,qCACG,uBAAMlhB,UAAU,uBAAhB,UACI,mBAAGA,UAAU,yCAAb,SAAsD,SAAWjoB,EAAE8jB,WAChE,iCAQvB,6BACMe,EAAGM,UAAU/jB,OAAS,GACrB,6CACGyjB,EAAGM,iBADN,aACG,EAAc9iB,KAAI,SAACvC,EAAOiS,GAAR,OACf,qCACG,uBAAMkW,UAAU,uBAAhB,UACI,mBAAGA,UAAU,yCAAb,SAAsD,SAAWnoB,EAAEgkB,WAChE,iCAQvB,6BACI,yBAAQuH,KAAK,SAAStnB,MAAgB,GAAT+gB,EAAa,sCAAwC,qCAC9EmD,UAAoB,GAATnD,EAAa,2EAA6E,0EACrGqG,QAAS,kBAxLvB,SAACtG,GAGnB68B,GAAQ78B,EAAG9f,IACX48C,GAAc98B,EAAG3X,SACjB00C,GAAa/8B,EAAGzf,MAEhBy8C,GAAoBh9B,EAAGG,YACvBq8B,GAAwBx8B,EAAGE,gBAE3B+8B,GAAkBj9B,EAAGI,QACrBs8B,GAAsB18B,EAAGK,cAEzB68B,GAAmBl9B,EAAGM,WACtBs8B,GAAuB58B,EAAGO,eAE1BsN,IAAU,GAwKqC2vB,CAAcx9B,IAFjC,UAGI,mBAAGoD,UAAU,iCAAmC,uCAgBpF,eAAC,eAAD,CAAc0L,OAAQlB,GAAQpH,KAAK,QAAQgD,KAAM,GAC7CtqB,MAAOsjB,EAAM9E,WAAW8E,EAAMzE,SAASf,MACvC+R,WAAY,kBAAIZ,MAFpB,UAGwB,GAAf3L,EAAMzE,SACA,cAAC,GAAD,CACC/hB,WAAcwmB,EAAMxmB,WACpB+hB,QAAWyE,EAAMzE,QACjBy7B,KAAQA,EACRM,WAAcA,EACdC,UAAaA,EACbX,cAAiBA,EACjBc,oBAAuBA,EACvBpB,sBAAyBA,EACzBD,0BAA6BA,GAC7BF,wBAA2BA,GAC3BxqB,wBAA2BA,GAC3BipB,0BAA6BA,GAC7B5kB,iBAAoBA,GACpBxE,qBAAyBA,KAGjB,GAAfxL,EAAMzE,SACA,cAAC,GAAD,CACC/hB,WAAcwmB,EAAMxmB,WACpB+hB,QAAWyE,EAAMzE,QACjBw9B,KAAQA,GACRG,WAAcA,GACdC,UAAaA,GACbd,iBAAoBA,GACpBG,eAAkBA,GAClBG,gBAAmBA,GACnBsC,uBAAyBlB,GACzBmB,qBAAuBjB,GACvBkB,sBAAwBhB,GACxBxuB,wBAA2BA,GAC3BipB,0BAA6BA,GAC7B5kB,iBAAoBA,GACpBxE,qBAAyBA,QAQvC3D,GAAgB,cAACpD,EAAD,OChZT,SAAS20B,GAAcp5B,GAGhC,IAciBqN,EAdjB,EAEEvS,GAAoB,SAACmF,GAAD,MAAgB,CAC9B/E,WAAY+E,EAAM/E,WAClBC,iBAAkB8E,EAAM9E,iBACxBG,iBAAkB2E,EAAM3E,qBALxBJ,EAAR,EAAQA,WAAYC,EAApB,EAAoBA,iBAAkBG,EAAtC,EAAsCA,iBAiBtC,GAJU4F,EAAak4B,cAIWh5B,oBAAS,IAA3C,mBAAOuH,EAAP,KAAkBC,EAAlB,KACA,EAA4DxH,oBAAS,GAArE,mBAAOg7B,EAAP,KAA+BC,EAA/B,KAIA96B,qBAAU,WACRnnB,QAAQC,IAAI,yBACZ2mB,EAAMF,mBACN3E,MAEA,IAEFoF,qBAAU,WACRnnB,QAAQC,IAAI,2CAEZgiD,GAA2BD,KAC3B,CAACzzB,IAKH,IAAMqI,EAAmB,WAAOhQ,EAAMgQ,oBAEhCxE,EAAuB,WAAQxL,EAAMwL,wBAe7C,OAEE,gCACE,uBADF,OAEItQ,QAFJ,IAEIA,OAFJ,EAEIA,EAAYlgB,KAAI,SAACsB,EAAOujB,GAAR,OAEfwN,EACG,qBAAK3vB,GAAE,mBAAcpB,EAAEoB,IAAvB,SACE,uBAAMA,GAAG,WAAT,UACE,uBAAMkjB,UAAU,KAAhB,UAAqB,IAAEtkB,EAAEke,MAAM,OAC/B,4BAIP,qCACG,eAACya,GAAA,EAAD,CAAYC,WAAS,EAArB,UACE,cAACC,GAAA,EAAD,CACEC,OAAQ/H,EAER3vB,GAAIpB,EAAEoB,GACN23B,YAAa/4B,EAAE0D,QACf8jB,QAAS,kBA5BIvI,EA4BkBjf,EAAEoB,GA1B3C4d,EAAiBC,QACjBqM,GAAcD,GAHQ,IAACpM,IAyBRjf,EAAE8iB,KAMR9iB,EAAE0D,SACE,cAAC,GAAD,CAEGxG,WAAYwmB,EAAMxmB,WAClB+hB,QAAWjf,EAAEoB,GACbwd,WAAcA,EACd8U,iBAAoBA,EACpBxE,qBAAyBA,GALpBlvB,EAAEoB,OASjB,gCChGC,SAAS49C,GAAUt7B,GAG9B,MACEu7B,GAAW,SAACt7B,GAAD,MAAgB,CACzBnB,kBAAmBmB,EAAMnB,kBACzBP,UAAW0B,EAAM1B,UACjBuB,iBAAkBG,EAAMH,qBAJnBhB,EAAT,EAASA,kBAAmBP,EAA5B,EAA4BA,UAAWuB,EAAvC,EAAuCA,iBAUnCmB,EAAMC,EAAao6B,UAAUpjD,KAGjC,EAAmCkoB,oBAAS,GAA5C,mBAAOuH,EAAP,KACA,GADA,KACqDvH,oBAAS,IAA9D,mBAAOo7B,EAAP,KAA2BC,EAA3B,KAIAl7B,qBAAU,WAERT,MACA,IAEFS,qBAAU,WAERk7B,GAAuBD,KAEvB,CAAC7zB,IAIH,IAKMqI,EAAmB,WAAQhQ,EAAMgQ,oBAEjCxE,EAAuB,WAAQxL,EAAMwL,wBAG3C,OACE,mCACE,sBAAK5K,UAAU,2BAAf,UAEI,sBAAKA,UAAU,GAAf,UACyB,MAArB9B,GAA6B,cAAC0N,GAAD,CAAiBC,OAAQxL,EAAI,GAAGwL,OAAQC,UAAWzL,EAAI,GAAGyL,UAAWC,KAAM1L,EAAI,GAAG0L,OAC1F,KAArB7N,GAA6B,cAAC0N,GAAD,CAAiBC,OAAQxL,EAAI,GAAGwL,OAAQC,UAAWzL,EAAI,GAAGyL,UAAWC,KAAM1L,EAAI,GAAG0L,OAC1F,MAArB7N,GAA6B,cAAC0N,GAAD,CAAiBC,OAAQxL,EAAI,GAAGwL,OAAQC,UAAWzL,EAAI,GAAGyL,UAAWC,KAAM1L,EAAI,GAAG0L,OAC1F,MAArB7N,GAA6B,cAAC0N,GAAD,CAAiBC,OAAQxL,EAAI,GAAGwL,OAAQC,UAAWzL,EAAI,GAAGyL,UAAWC,KAAM1L,EAAI,GAAG0L,OAC1F,KAArB7N,GAA6B,cAAC0N,GAAD,CAAiBC,OAAQxL,EAAI,GAAGwL,OAAQC,UAAWzL,EAAI,GAAGyL,UAAWC,KAAM1L,EAAI,GAAG0L,UAGnH,qBAAK/L,UAAU,yBAAf,SACE,sBAAKA,UAAU,uBAAf,UAC2B,KAArB9B,GAA6B,cAAC8O,GAAD,CACGp0B,WAAYwmB,EAAMxmB,WAClB+kB,UAAWA,EACXuB,iBAAkBA,EAClBkQ,iBAAkBA,EAClBxE,qBAAsBA,IAEjC,MAArB1M,GAA6B,cAAC,GAAD,CACGtlB,WAAYwmB,EAAMxmB,WAClB+kB,UAAWA,EACXuB,iBAAkBA,EAClBkQ,iBAAkBA,EAClBxE,qBAAsBA,IAEjC,MAArB1M,GAA6B,cAAC,GAAD,CACGtlB,WAAYwmB,EAAMxmB,WAClB+kB,UAAWA,EACXuB,iBAAkBA,EAClBkQ,iBAAkBA,EAClBxE,qBAAsBA,IAEjC,MAArB1M,GAA6B,cAAC,GAAD,CACGtlB,WAAYwmB,EAAMxmB,WAClB+kB,UAAWA,EACXuB,iBAAkBA,EAClBkQ,iBAAkBA,EAClBxE,qBAAsBA,IAEjC,KAArB1M,GAA6B,cAACs6B,GAAD,CACG5/C,WAAYwmB,EAAMxmB,WAClB+kB,UAAWA,EACXuB,iBAAkBA,EAClBkQ,iBAAkBA,EAClBxE,qBAAsBA,SAK9D,4BC3GC,SAASkwB,GAAI17B,GAExB,IAAI27B,EAAUz6B,EAAaw6B,IAAIE,MAC3B3wB,EAAU/J,EAAaw6B,IAAIl1B,UAiB3Bq1B,EAAY,CACd,CAAE,GAAM,IAAK,KAAQ,oBAAqB,MAf3BnyC,yCAgBf,CAAE,GAAM,IAAK,KAAQ,qBAAsB,MAf1BA,6CAgBjB,CAAE,GAAM,IAAK,KAAQ,uBAAwB,MAAS,MACtD,CAAE,GAAM,IAAK,KAAQ,sBAAoB,MAAS,OAClD,CAAE,GAAM,IAAK,KAAQ,eAAgB,MAAS,MAC9C,CAAE,GAAM,IAAK,KAAQ,gBAAiB,MAlBvBA,2hBAAYoyC,gBAmB3B,CAAE,GAAM,IAAK,KAAQ,oBAAqB,MAAS,MACnD,CAAE,GAAM,IAAK,KAAQ,cAAe,MAAS,MAC7C,CAAE,GAAM,IAAK,KAAQ,YAAa,MAAS,MAC3C,CAAE,GAAM,KAAM,KAAQ,cAAe,MAAS,MAC9C,CAAE,GAAM,KAAM,KAAQ,WAAY,MAAS97B,EAAMtmB,UACjD,CAAE,GAAM,KAAM,KAAQ,aAAc,MAAS,MAC7C,CAAE,GAAM,KAAM,KAAQ,gBAAiB,MAAS,OAG9CyoB,EAAUC,cAKd,EAA4BhC,oBAAS,GAArC,mBAAO6I,EAAP,KAAe8yB,EAAf,KAEF,OACE,mCACE,sBAAKn7B,UAAU,mCAAf,UAGE,sBAAKA,UAAU,uCAAf,UAGI,+BACE,oBACEiD,KAAM83B,EAAQ,GAAG/jD,IACjBusB,OAAO,SACPvD,UAAU,yCACVlkB,MAAOi/C,EAAQ,GAAGh9B,KAJpB,UAME,cAAC,KAAD,CAAiB8H,KAAMu1B,KAAQC,aAAW,IAAG,IAAEN,EAAQ,GAAGx6B,KAAM,SAE7D,eAKP,+BACE,oBAAG2C,QA7BO,WAAS3B,EAAQ1f,KAAK,WA6BNme,UAAU,yCAApC,UACE,cAAC,KAAD,CAAiB6F,KAAMy1B,OAAa,IAAEP,EAAQ,GAAGx6B,UAC9C,eAKP,uBACEP,UAAU,oBACVkD,QAAS,kBAAMi4B,GAAW9yB,IAF5B,UAIE,cAAC,KAAD,CAAiBxC,KAAM01B,OAAa,IAAER,EAAQ,GAAGx6B,KAChD8H,GACC,sBAAKvrB,GAAG,GAAGkjB,UAAU,uBAArB,UACE,qBAAKA,UAAU,YAAf,SACE,sBAAKA,UAAU,gBAAf,UACE,sBAAKA,UAAU,aAAf,UACE,cAAC,KAAD,CAAiB6F,KAAM01B,OAAa,2BAEtC,qBAAKv7B,UAAU,6CAA6ClkB,MAAM,SAAlE,SAA2E,4BAAG,aAGlF,qBAAKkkB,UAAU,eACf,uBAEA,qBAAKA,UAAU,YAAf,SACE,mCACGi7B,EAAU7gD,KAAI,SAACJ,GAAD,OACb,sBAAKgmB,UAAU,gBAAf,UACE,qBAAKA,UAAU,YAAf,SAA4BhmB,EAAK+jB,OACjC,qBAAKiC,UAAU,gBAAf,SAAgChmB,EAAKwhD,2BAWrD,qBAAKx7B,UAAU,gBAAf,SACE,sBAAKA,UAAU,cAAf,UACGqK,EAAQ,GAAG9J,KACV,oBAAG0C,KAzGEna,qEAyGcya,OAAO,SAA1B,UACC,IACA8G,EAAQ,GAAG9J,KAAM,iBCpFjB,SAASk7B,KAGpB,MACE/kD,GAAkB,SAAC2oB,GAAD,MAAgB,CAAEzmB,WAAYymB,EAAMzmB,WAAYE,SAAUumB,EAAMvmB,YAAYsxB,KADxFxxB,EAAR,EAAQA,WAAYE,EAApB,EAAoBA,SAGpB,EAGEiK,GAAmB,SAACsc,GAAD,MAAkB,CAC/B5gB,4BAA6B4gB,EAAM5gB,4BACnC6E,cAAe+b,EAAM/b,cACrBF,eAAgBic,EAAMjc,eACtBG,oBAAqB8b,EAAM9b,oBAC3BF,mBAAoBgc,EAAMhc,mBAC1BG,uBAAwB6b,EAAM7b,uBAC9BN,iCAAkCmc,EAAMnc,iCACxCF,2BAA4Bqc,EAAMrc,2BAClCC,iCAAkCoc,EAAMpc,qCAZxCxE,EAAR,EAAQA,4BAA6B6E,EAArC,EAAqCA,cAC7BJ,EADR,EACQA,iCACAF,EAFR,EAEQA,2BAA4BC,EAFpC,EAEoCA,iCAapC,EACE3J,GAAW,SAAC+lB,GAAD,MAAgB,CAAE9lB,mBAAoB8lB,EAAM9lB,mBAAoBC,yBAA0B6lB,EAAM7lB,6BADrGD,EAAR,EAAQA,mBAAoBC,EAA5B,EAA4BA,yBAG5B,EACEmB,GAAc,SAAC0kB,GAAD,MAAgB,CAAEzkB,sBAAuBykB,EAAMzkB,sBAAuBC,4BAA6BwkB,EAAMxkB,gCADjHD,EAAR,EAAQA,sBAAuBC,EAA/B,EAA+BA,4BAI/B,EACEsD,GAAe,SAACkhB,GAAD,MAAgB,CAAEjhB,uBAAwBihB,EAAMjhB,uBAAwBC,6BAA8BghB,EAAMhhB,iCADrHD,EAAR,EAAQA,uBAAwBC,EAAhC,EAAgCA,6BAGhC,EACEkG,GAAe,SAAC8a,GAAD,MAAgB,CAAE7a,uBAAwB6a,EAAM7a,uBAAwBC,6BAA8B4a,EAAM5a,iCADrHD,EAAR,EAAQA,uBAAwBC,EAAhC,EAAgCA,6BAGhC,EACE0J,GAAgB,SAACkR,GAAD,MAAgB,CAAEjR,wBAAyBiR,EAAMjR,wBAAyBC,8BAA+BgR,EAAMhR,kCADzHD,EAAR,EAAQA,wBAAyBC,EAAjC,EAAiCA,8BAGjC,EACEe,GAAW,SAACiQ,GAAD,MAAgB,CAAEhQ,mBAAoBgQ,EAAMhQ,mBAAoBC,yBAA0B+P,EAAM/P,6BADrGD,EAAR,EAAQA,mBAAoBC,EAA5B,EAA4BA,yBAG5B,EACEM,GAAc,SAACyP,GAAD,MAAgB,CAAExP,sBAAuBwP,EAAMxP,sBAAuBC,4BAA6BuP,EAAMvP,gCADjHD,EAAR,EAAQA,sBAAuBC,EAA/B,EAA+BA,4BAG/B,EACE0E,GAAe,SAAC6K,GAAD,MAAgB,CAAE5K,uBAAwB4K,EAAM5K,uBAAwBC,6BAA8B2K,EAAM3K,iCADrHD,EAAR,EAAQA,uBAAwBC,EAAhC,EAAgCA,6BAGhC,EACEwF,GAAoB,SAACmF,GAAD,MAAgB,CAAElF,4BAA6BkF,EAAMlF,4BAA6BC,kCAAmCiF,EAAMjF,sCADzID,EAAR,EAAQA,4BAA6BC,EAArC,EAAqCA,kCAKrC,EAAmCoF,oBAAS,GAA5C,oBAAOuH,GAAP,MAAkBC,GAAlB,MACA,GAAqDxH,oBAAS,GAA9D,qBAAOk8B,GAAP,MAA2BC,GAA3B,MACA,GAA6Dn8B,oBAAS,GAAtE,qBAAOo8B,GAAP,MAA+BC,GAA/B,MACA,GAAwCr8B,oBAAS,GAAjD,qBAAqB0H,IAArB,aAIAvH,qBAAU,WAER1c,IACAzJ,IACAqB,IACAwD,IACAoG,IACA4J,IACAiB,IACAQ,IACA4E,IACA0F,MACA,IAEFuF,qBAAU,WAERg8B,IAAuBD,MACvB,CAAC30B,KAEHpH,qBAAU,WAERuH,IAAgB,GAChBR,GAAqBC,sBAAsB/tB,GACxC6pB,MAAK,SAASC,GACU,KAAjBA,EAASpqB,QACTmG,EAA4BikB,EAASvqB,MAAMsqB,MAAM,SAASrK,OAI9D8O,IAAgB,MAEnBvE,OAAM,SAACC,GAIoB,KAApBA,EAAGF,SAASpqB,OACZE,QAAQC,IAAI,kDAEZyK,EAAiC0f,EAAGF,UAAU,EAAM,GAAI,GAAI,iCAAiC,QACjGwE,IAAgB,QAErB,CAAC00B,KAvGNE,IAAE5zB,UAAU6zB,GAAG,WAFf,SAAmBriD,GACc,OAA1BA,EAAEsiD,OAAStiD,EAAEuiD,UAAkBviD,EAAEwiD,oBA8GtC,IAEMtxB,GAAuB,WAAQixB,IAA2BD,KAGhE,OACE,qCAEI,sBAAK57B,UAAU,wBAAf,UACI,gCAAK,IAAC,cAACmK,GAAD,CAAYvxB,WAAYA,EACZ0K,cAAeA,EACfsnB,qBAAwBA,QAG1C,gCAAK,IAAC,cAAC8vB,GAAD,CAAW9hD,WAAYA,EACZw2B,iBAfF,WAAQpI,IAAcD,KAgBpB6D,qBAAwBA,QAGzC,gCAAK,IAAC,cAACkwB,GAAD,CAAKhiD,SAAUA,IAAY,UAInC8B,EAAsB7D,UAAkB,cAACooB,EAAD,CAAoBjoB,QAAQ,WAAiB6oB,SAAUnlB,IAC/FwD,EAAuBrH,UAAiB,cAACooB,EAAD,CAAoBjoB,QAAQ,YAAiB6oB,SAAU3hB,IAC/FoG,EAAuBzN,UAAiB,cAACooB,EAAD,CAAoBjoB,QAAQ,YAAiB6oB,SAAUvb,IAC/F4J,EAAwBrX,UAAgB,cAACooB,EAAD,CAAoBjoB,QAAQ,aAAiB6oB,SAAU3R,IAC/FiB,EAAmBtY,UACjB,qCACC6oB,OAAOC,SAAS,CAACC,IAAI,IAAI,IAC3B,cAACX,EAAD,CAAoBjoB,QAAQ,QAAiB6oB,SAAU1Q,OAGxDQ,EAAsB9Y,UAAkB,cAACooB,EAAD,CAAoBjoB,QAAQ,WAAiB6oB,SAAUlQ,IAC/FsK,EAA4BpjB,UAAY,cAACooB,EAAD,CAAoBjoB,QAAQ,iBAAiB6oB,SAAU5F,IAC/FnX,EAA2BjM,UAAa,cAACooB,EAAD,CAAoBjoB,QAAQ,gBAAiB6oB,SAAU/c,IAC/FzJ,EAAmBxC,UAAqB,cAACooB,EAAD,CAAoBjoB,QAAQ,QAAiB6oB,SAAUxmB,IAC/Fkb,EAAuB1d,UAAiB,cAACooB,EAAD,CAAoBjoB,QAAQ,YAAiB6oB,SAAUtL,O,aC7L9F,OAA0B,sC,UCW1B,SAAS0nC,GAAe/8B,GACrC,IAAI9nB,EAAO8nB,EAAM9nB,KACb8kD,EAAUtzC,yCACd,OACE,qBAAKhM,GAAG,SAAR,SACE,cAACu/C,GAAA,EAAIC,QAAL,UACGhlD,EAAK8C,KAAI,SAACJ,EAAWwkB,GAAZ,OACR,eAAC69B,GAAA,EAAIE,KAAL,CAAUC,SAAUxiD,EAAK8C,GAAzB,UACG,IACD,sBAAMkjB,UAAU,aAAhB,SAA8BhmB,EAAK+jB,OACnC,uBACgB,KAAb/jB,EAAKyiD,IACF,mCACA,oBAAGx5B,KAAMm5B,EAAQpiD,EAAK0iD,QAASn5B,OAAO,SAASo5B,IAAI,aAAnD,UACc,KAAX3iD,EAAK8C,IAAa,qBAAKkjB,UAAU,gBAAgBlkB,MAAM,qBAD1D,IAEc,KAAX9B,EAAK8C,IAAa,qBAAKkjB,UAAU,gBAAgBlkB,MAAM,qBAF1D,IAGc,KAAX9B,EAAK8C,IAAa,qBAAKkjB,UAAU,aAAalkB,MAAM,qBAHvD,SAOF,qCACE,uBACA,qBAAKkkB,UAAU,QAAQljB,GAAG,QAA1B,SACE,eAACu3B,GAAA,EAAD,CAAYC,WAAS,EAACsoB,UAAQ,EAA9B,UACGC,GAAcziD,KAAI,SAAC0iD,EAAGt+B,GAAJ,OACjB,cAAC+V,GAAA,EAAD,CAAOC,OAAQsoB,EAAEv8B,KAAMi8B,SAAUM,EAAEhgD,GAAIA,GAAIggD,EAAEhgD,GAA7C,SACG+/C,GAAcC,EAAEhgD,IAAIigD,KAAK3iD,KAAI,SAACjC,EAAMqmB,GAEnC,OACE,gCACGrmB,EAAK6kD,EACN,uBACA,sBAAeh9B,UAAU,OAAzB,UACE,sBAAOgC,wBAAyB,CAAEC,OAAQ9pB,EAAKymB,KAC/C,yBAFQJ,KAHFA,WAWd,SAGR,0BAKN,uBAEe,KAAbxkB,EAAKyiD,KAAsB,GAAPj+B,EAChB,mCACA,mBAAGyE,KAAMm5B,EAAQpiD,EAAK0iD,QAASn5B,OAAO,SAASo5B,IAAI,aAAnD,SACE,qBAAM7gD,MAAM,mBAAZ,SAA+B,uBAAMkkB,UAAU,gBAAhB,uBAA2ChmB,EAAK+jB,cAGjF,a,0BC1DH,SAASk/B,GAAU79B,GAChC,IAAI9nB,EAAO8nB,EAAM9nB,KAEjB,EAAgCkoB,oBAAS,GAAzC,mBAAO09B,EAAP,KAAiBC,EAAjB,KACA,EAAwB39B,mBAAS,KAAjC,mBAAO49B,EAAP,KAAaC,EAAb,KA8BA,OACE,8BACE,cAAC74B,EAAA,EAAD,CAAK2G,QAAQ,QAAQnL,UAAU,qBAAqBljB,GAAG,OAAvD,SACGxF,EAAK8C,KAAI,SAACJ,GAAD,OACR,cAACwqB,EAAA,EAAI84B,KAAL,CAAwBxgD,GAAI,QAAU9C,EAAK8C,GAA3C,SACE,cAACygD,GAAD,CAAQzgD,GAAG,SAAX,SACE,eAAC0nB,EAAA,EAAIC,KAAL,CACE+3B,SAAUxiD,EAAK8C,GACf5B,SAAUlB,EAAKwjD,WACft6B,QAAS,kBArCvB,SAAgBu6B,EAAaxiD,EAAayiD,GACxC,GAAa,OAATA,EACF,GAAIN,IAASK,EAAQ,CACnB,IAAIE,EAAUC,OAAOR,GAAQ,EAEzBO,GAAW,IAAGrmD,EAAKqmD,GAAS1iD,OAAS,KAET,MAA5B3D,EAAKmmD,EAAS,GAAGxiD,QACnB3D,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,KAEZ7lD,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,IAEdE,EAAQI,OAEwB,MAA5BnmD,EAAKmmD,EAAS,GAAGxiD,QACnB3D,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,KAEZ7lD,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,IAEdE,EAAQ,KAceh1B,CAAOruB,EAAK8C,GAAI9C,EAAKiB,OAAQjB,EAAK6jD,UAHnD,UAKG7jD,EAAK+jB,KAEY,OAAjB/jB,EAAK6jD,QACJ,8BACE,8BACE,+BACG,IACD,6BACE,8BACG7jD,EAAK6jD,QAAQzjD,KAAI,SAAC0jD,GAAD,OAChB,mCACE,6BACmB,MAAhB9jD,EAAKiB,OACJ,mCACGiiD,GACC,mCACE,mBAAGj6B,KAAK,IAAR,SAAa66B,EAAM//B,WAKzB,qBAWlB,yBAEF,qBAAKiC,UAAU,2BAzCNhmB,EAAK8C,WAmD9B,IAAMygD,GAASQ,WAAOC,IAAV,8E,OCxEG,SAAS/5B,GAAW7E,GAMjC,IAAI9nB,EAAO8nB,EAAM9nB,KAGjB,EAAwBkoB,oBAAS,GAAjC,mBAAOy+B,EAAP,UAQA,OACE,qCACE,uBAGCA,EACC,sBAAKj+B,UAAU,0BAAf,UACE,qBAAKljB,GAAG,OAAR,SACE,cAACu/C,GAAA,EAAIh4B,UAAL,CAAevnB,GAAG,oBAAoBohD,iBAAiB,IAAvD,SAEE,eAAC/0B,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAK2I,GAdP,EAckB/R,UAAU,QAAQ6E,MAAO,CAACb,MAAM,QAASuO,WAAW,SAApE,SACE,cAAC0qB,GAAD,CAAW3lD,KAAMA,MAEnB,cAAC8xB,GAAA,EAAD,CACE2I,GAnBC,EAoBD/R,UAAU,aACV6E,MAAO,CACLs5B,YAAa,WAJjB,SAOE,cAAChC,GAAD,CAAgB7kD,KAAMA,aAM9B,uBACA,0BAGF,mCACE,8BACE,qBAAKkuB,IAAK44B,GAAY34B,IAAI,iB,cC5DrB,SAAS44B,KAGtB,IAAI98B,EAAUC,cAIVlD,EADOggC,GASX,OANAhgC,EAASlkB,KAAI,SAACgK,GAEZ,OADAA,EAAM,OAAa,IACZka,KAKP,qCAEI,qBAAK0B,UAAU,qCAAf,SACE,eAACmJ,GAAA,EAAD,WACM,cAACC,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,qCAAtB,SACE,qBAAKwF,IAAK+4B,GAAU94B,IAAI,OAE1B,cAAC2D,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACI,qBAAK/R,UAAU,mCAAf,SAAkD,oCAEtD,cAACoJ,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACM,oBAAG7O,QAtBP,WAAQ3B,EAAQ1f,KAAK,eAsBKme,UAAU,8CAAhC,UACA,mBAAGA,UAAU,uBAAyB,sBAOtD,qBAAKA,UAAU,YAAf,SACE,cAAC,GAAD,CAAuB1oB,KAAMgnB,MAE/B,uBAGA,qBAAK0B,UAAU,oCAAf,SACE,sBAAKA,UAAU,eAAf,UAA8B,iCACA,IAC5B,mBACEiD,KAAK,oEACLM,OAAO,SACPo5B,IAAI,aACJ38B,UAAU,cAJZ,SAKC,qCAGD,uBAAM,yB,wBCnDHw+B,I,OAdY7nD,KAAO,SAACC,EAAKC,GAAN,MAAmB,CACnD4nD,MAAM,GACNC,SAAS,GACT3+B,SAAU,CAAE/oB,IAAK,GAAIE,QAAS,GAAID,KAAM,GAAIF,UAAU,EAAO4nD,SAAS,GAAKC,UAAW,CAAE,QAAW,EAAI,SAAY,KAEnHC,iBAAiB,WAAD,4BAAE,WAAOC,GAAP,SAAA/mD,EAAA,sDAChBnB,EAAI,CAAC8nD,SAASI,IADE,2CAAF,mDAAC,GAIjBC,iBAAiB,WAAD,4BAAE,WAAOC,GAAP,SAAAjnD,EAAA,sDAChBnB,EAAI,CAAC6nD,MAAOO,IADI,2CAAF,mDAAC,QCGJ,SAASC,GAAwB7/B,GAE9C,IAAQy/B,EACNK,IAAc,SAAC7/B,GAAD,MAAgB,CAC5Bw/B,iBAAkBx/B,EAAMw/B,qBAFpBA,iBAoBR,OAfAl/B,qBAAU,WACR,IAAIw/B,EAAO3pC,OAAOC,KAAK2J,EAAMq/B,OACzBW,EAAiB,GACrBD,EAAM/kD,KAAI,SAACilD,GACR,IAAIP,EACJA,EAAM,CAAE,GAAKO,EAAI,KAAQjgC,EAAMq/B,MAAMY,IACrCD,EAAav9C,KAAKi9C,MAErBD,EAAiBO,GACjB5mD,QAAQkkB,QACRlkB,QAAQC,IAAI,iCACZD,QAAQC,IAAI,qBAAsB2mB,EAAMq/B,OACxCjmD,QAAQC,IAAI,uBAAwB2mD,KACpC,IAGG,8BACI,2DC3BI,SAASE,GAAwBlgC,GAC9C,IAAQ2/B,EACRG,IAAc,SAAC7/B,GAAD,MAAgB,CAC5B0/B,iBAAkB1/B,EAAM0/B,qBAFlBA,iBAmBR,OAdAp/B,qBAAU,WACR,IAAI4/B,EAAc,GAClBngC,EAAMs/B,SAAStkD,KAAI,SAACvC,GAClB,IAAI2nD,EAAShqC,OAAO8M,OAAOzqB,GACvBiF,EAAQ0iD,EAAQ,GACpBD,EAAUziD,GAAK0iD,EAAQ,MAEzBT,EAAiBQ,GAEjB/mD,QAAQC,IAAI,iCACZD,QAAQC,IAAI,2BAAyB2mB,EAAMs/B,UAC3ClmD,QAAQC,IAAI,oBAAqB8mD,KACjC,IAGG,mCACI,uBAAOv/B,UAAU,YAAjB,oCClBI,SAASy/B,KACxB,IAAIhB,EAAMiB,GACNhB,EAASiB,GACT,OACE,sBAAK3/B,UAAU,4BAAf,UACI,iEAGA,uFACsD,uBADtD,oCAEqC,4BAAG,qFAFxC,IAEsG,uBAFtG,sDAGuD,4BAAG,gHAGzD,qBAAKA,UAAU,uBAAf,SACG,cAACi/B,GAAD,CAA0BR,MAAOA,MAGrC,uBAdJ,IAcU,uBAGN,iEAEA,0FACyD,uBADzD,0BAE2B,4BAAG,6GAAqF,uBAFnH,kCAGmC,4BAAG,qFAHtC,IAGoG,0BAGnG,qBAAKz+B,UAAU,uBAAf,SACE,cAACs/B,GAAD,CAAyBZ,SAAWA,MAGvC,0BC5BO,SAASz6B,GAAW7E,GAQjC,IAAI9nB,EAAO8nB,EAAM9nB,KAOXunB,EAAa,SAAC+gC,GAClBxjC,MAAM,mHAIR,OACE,mCACE,gCAIe,GAAZgD,EAAM/W,KACF,mCACC,qBAAKvL,GAAG,UAAR,SACGxF,EAAK8C,KAAI,SAACJ,GAAD,OACR,mCACkB,GAAfA,EAAKiB,OAKE,cAACupB,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIrE,KAAoBmB,UAAU,SAArD,SAA+DhmB,EAAK+jB,OAIxE,cAACyG,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIrE,KAAvB,SAA6C7kB,EAAK+jB,gBAO7D,6BAIQ,GAAZqB,EAAM/W,KACF,qCACC,qBAAK2X,UAAU,SAAf,SACC1oB,EAAK8C,KAAI,SAACJ,GAAD,OACR,4BAAkBA,EAAK+jB,MAAf/jB,EAAK8C,SAGf,cAAConB,EAAA,EAAD,CAAQE,GAAG,QAAQD,OAAO,KAA1B,SACE,eAACE,GAAA,EAAD,CAAWK,OAAK,EAAhB,UACE,cAACR,EAAA,EAAOS,MAAR,CAAc1B,KAAK,IAAnB,SAAwB7D,EAAMygC,WAC9B,cAAC37B,EAAA,EAAOI,OAAR,CAAe,gBAAc,iBAC7B,cAACJ,EAAA,EAAOK,SAAR,CAAiBznB,GAAG,eAApB,SACE,cAAC0nB,EAAA,EAAD,CACExE,UAAU,uBACV6E,MAAO,CAAEC,UAAW,SACpBC,cAAY,EAHd,SAKGztB,EAAK8C,KAAI,SAACJ,GAAD,OACR,eAACwqB,EAAA,EAAIC,KAAL,CAAUxB,KAAK,WAAf,UAA2BjpB,EAAK+jB,KAAhC,sBAOZ,kC,cCzFK,SAAS+hC,KACxB,OACI,sBAAK9/B,UAAU,4BAAf,UACA,kDACA,0BCJW,SAAS+/B,KACxB,OACI,sBAAK//B,UAAU,4BAAf,UACA,kDACA,0BCJW,SAASggC,KACxB,OACI,sBAAKhgC,UAAU,4BAAf,UACA,kDACA,0BCJW,SAASigC,KACxB,OACI,sBAAKjgC,UAAU,4BAAf,UACA,kDACA,0BCJW,SAASkgC,KACxB,OACI,sBAAKlgC,UAAU,4BAAf,UACA,kDACA,0BCMS,SAASy/B,KAGpB,MAAwCjgC,mBAAS,KAAjD,mBAAO2gC,EAAP,UAEA,OACE,sBAAKngC,UAAU,4BAAf,UACE,oGAAiE,EAAjE,MAAuE,KAEvE,qBAAKA,UAAU,uBAAf,SAEE,cAAC,GAAD,CAAY1oB,KAAMA,GAAM+Q,KAAM,EAAGw3C,SAAU,iBAI7C,gCACyB,MAAfM,EAAqB,cAACL,GAAD,IAAiB,KACvB,MAAfK,EAAqB,cAACJ,GAAD,IAAiB,KACvB,MAAfI,EAAqB,cAACH,GAAD,IAAiB,KACvB,MAAfG,EAAqB,cAACF,GAAD,IAAiB,KACvB,MAAfE,EAAqB,cAACD,GAAD,IAAiB,QAEhD,0B,4CCxCK,OAA0B,qC,OCwB1B,SAASE,GAAiBhhC,GAEvC,IAAI/f,EAAQ+f,EAAM/f,MACdghD,EAAcjhC,EAAMihC,YACpBzmC,EAAQwF,EAAMxF,MACd0mC,EAAUlhC,EAAMkhC,QAEpB,EAAwB9gC,mBAAS,IAAItf,KAAKb,IAA1C,mBAAOY,EAAP,KAAasgD,EAAb,KACMC,EAAe,SAACvgD,GAAD,OAAesgD,EAAQtgD,IAK5C,OAHAzH,QAAQC,IAAI,gBAAiBwH,EAAM,iBAAkB,CAAEogD,gBAIrD,mCACE,8BAEGC,EACC,sBAAKz7B,MAAO,CAAE6qB,UAAW,QAAzB,UACE,sBAAM5zC,MAAO8d,EAAb,SAAqBymC,IACrB,uBACA,uBAAMrgC,UAAU,qBAAhB,UACE,cAAC,KAAD,CACEygC,iBAAiB,aACjB/qB,SAAUz1B,EACVspB,SAAUi3B,EACVE,OAAQC,KACRC,WAAW,eAEb,qBAAKp7B,IAAKq7B,GAAOp7B,IAAI,gBAIzB,sBAAKzF,UAAU,MAAf,UACE,sBAAMA,UAAU,MAAOlkB,MAAO8d,EAA9B,SAAsCymC,IACtC,uBAAMrgC,UAAU,uBAAhB,UACE,cAAC,KAAD,CACEygC,iBAAiB,aACjB/qB,SAAUz1B,EACVspB,SAAUi3B,EACVE,OAAQC,KACRC,WAAW,eAEb,qBAAKp7B,IAAKq7B,GAAOp7B,IAAI,QAAQzF,UAAU,eCrDtC,SAASy/B,KAEtB,IAAIpgD,EAAQ,aACRghD,EAAc,iBACdS,EAAS5gD,OACT6gD,EAAe,iBACfnnC,EAAQ,6BAIZ,OACE,sBAAKoG,UAAU,4BAAf,eACE,qFAAoD,sBAAMA,UAAU,aAAhB,SAA8B3gB,OAClF,6DAC4B,sBAAM2gB,UAAU,aAAhB,8BAD5B,mCAC6G,sBAAMA,UAAU,aAAhB,SAA8B3gB,IAD3I,oBACyK,sBAAM2gB,UAAU,aAAhB,SAA8BqgC,IADvM,eACsO,sBAAMrgC,UAAU,aAAhB,kBADtO,6CACwT,sBAAMA,UAAU,aAAhB,kBADxT,uCAGA,uBAAK,uBACL,qBAAKA,UAAU,uBAAf,SACI,cAACogC,GAAD,CACExmC,MAAO,GACPva,MAAOA,EACPghD,YAAaA,EACbC,SAAS,MAIf,uBAAK,uBAEL,qGACkE,uBAAMtgC,UAAU,aAAhB,cAA+B8gC,EAA/B,WAElE,6DAC4B,sBAAM9gC,UAAU,aAAhB,8BAD5B,mCAC6G,sBAAMA,UAAU,aAAhB,SAA8B8gC,IAD3I,oBAC0K,sBAAM9gC,UAAU,aAAhB,SAA8B+gC,IADxM,eACwO,sBAAM/gC,UAAU,aAAhB,mBADxO,qDACmU,sBAAMA,UAAU,aAAhB,SAA8BpG,IADjW,gCAGA,uBAAK,uBACL,qBAAKoG,UAAU,uBAAf,SACE,cAACogC,GAAD,CACExmC,MAAOA,EACPva,MAAOyhD,EACPT,YAAaU,EACbT,SAAS,SCtDJ,I,GAAA,OAA0B,kCCQ1B,SAASnE,GAAe/8B,GACrC,IAAI9nB,EAAO8nB,EAAM9nB,KACjB,OACE,qBAAKwF,GAAG,SAAR,SACE,cAACu/C,GAAA,EAAIC,QAAL,UACGhlD,EAAK8C,KAAI,SAACJ,EAAWwkB,GAAZ,OACR,eAAC69B,GAAA,EAAIE,KAAL,CAAUC,SAAUxiD,EAAK8C,GAAzB,uBAAwC9C,EAAK+jB,eCDxC,SAASk/B,GAAU79B,GAChC,IAAI9nB,EAAO8nB,EAAM9nB,KAEjB,EAAgCkoB,oBAAS,GAAzC,mBAAO09B,EAAP,KAAiBC,EAAjB,KACA,EAAwB39B,mBAAS,KAAjC,mBAAO49B,EAAP,KAAaC,EAAb,KAqCA,OACE,8BACE,eAAC74B,EAAA,EAAD,CAAK2G,QAAQ,QAAQnL,UAAU,qBAAqBljB,GAAG,OAAvD,UACE,cAAC0nB,EAAA,EAAI84B,KAAL,UACE,qBAAKxgD,GAAG,qBAAR,2BAEDxF,EAAK8C,KAAI,SAACJ,GAAD,OACR,cAACwqB,EAAA,EAAI84B,KAAL,CAAwBxgD,GAAI,QAAU9C,EAAK8C,GAA3C,SACE,cAAC,GAAD,CAAQA,GAAG,SAAX,SACE,eAAC0nB,EAAA,EAAIC,KAAL,CACE+3B,SAAUxiD,EAAK8C,GACf5B,SAAUlB,EAAKwjD,WACft6B,QAAS,kBA/CvB,SAAgBu6B,EAAaxiD,EAAayiD,GAKxC,GAAa,OAATA,EACF,GAAIN,IAASK,EAAQ,CACnB,IAAIE,EAAUC,OAAOR,GAAQ,EAEzBO,GAAW,IAAGrmD,EAAKqmD,GAAS1iD,OAAS,KAET,MAA5B3D,EAAKmmD,EAAS,GAAGxiD,QACnB3D,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,KAEZ7lD,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,IAGdE,EAAQI,OAGwB,MAA5BnmD,EAAKmmD,EAAS,GAAGxiD,QACnB3D,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,KAEZ7lD,EAAKmmD,EAAS,GAAGxiD,OAAS,IAC1BkiD,GAAY,IAEdE,EAAQ,KAkBeh1B,CAAOruB,EAAK8C,GAAI9C,EAAKiB,OAAQjB,EAAK6jD,UAHnD,UAKG7jD,EAAK+jB,KACY,OAAjB/jB,EAAK6jD,QACJ,8BACE,8BACE,+BACG,IACD,6BACE,8BACG7jD,EAAK6jD,QAAQzjD,KAAI,SAAC0jD,GAAD,OAChB,mCACE,6BACmB,MAAhB9jD,EAAKiB,OACJ,mCACGiiD,GACC,mCACE,mBAAGj6B,KAAK,IAAR,SAAa66B,EAAM//B,WAKzB,qBAWlB,+BAtCO/jB,EAAK8C,YAiD9B,IAAMygD,GAASQ,WAAOC,IAAV,8ECpFG,SAAS/5B,GAAW7E,GAMjC,IAAI9nB,EAAO8nB,EAAM9nB,KACb0pD,EAAO5hC,EAAM4hC,KAEjB,EAAwBxhC,oBAAS,GAAjC,mBAAOy+B,EAAP,KAAagD,EAAb,KAQA,OACE,qCACE,uBACA,qFACoD,uBAClD,0BAEF,sBAAKjhC,UAAoB,MAATghC,EAAe,gBAAkB,cAAjD,UACG/C,GAAQ,qBAAKnhD,GAAG,iBAAR,sCACT,qBAAKA,GAAG,QAAR,SACE,qBACE0oB,IAAK07B,GACLz7B,IAAI,QACJvC,QAAS,WACP+9B,GAAShD,IAEXnhD,GAAG,aAMRmhD,EACC,sBAAKj+B,UAAU,0BAAf,UACY,MAATghC,EACC,qBAAKlkD,GAAG,OAAR,SACE,cAACu/C,GAAA,EAAIh4B,UAAL,CAAevnB,GAAG,oBAAoBohD,iBAAiB,IAAvD,SAEE,eAAC/0B,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAK2I,GAjCJ,EAiCoB/R,UAAU,aAA/B,SACE,cAAC,GAAD,CAAgB1oB,KAAMA,MAExB,cAAC8xB,GAAA,EAAD,CAAK2I,GAnCT,EAmCoB/R,UAAU,QAA1B,SACE,cAAC,GAAD,CAAW1oB,KAAMA,aAMzB,qBAAKwF,GAAG,OAAO+nB,MAAO,CAAEs5B,YAAa,SAArC,SACE,cAAC9B,GAAA,EAAIh4B,UAAL,CAAevnB,GAAG,oBAAoBohD,iBAAiB,IAAvD,SAEE,eAAC/0B,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAK2I,GA9CT,EA8CoB/R,UAAU,QAA1B,SACE,cAAC,GAAD,CAAW1oB,KAAMA,MAEnB,cAAC8xB,GAAA,EAAD,CACE2I,GAnDD,EAoDC/R,UAAU,aACV6E,MAAO,CACLs5B,YAAa,WAJjB,SAOE,cAAC,GAAD,CAAgB7mD,KAAMA,aAMhC,uBACA,0BAGF,mCACE,8BACE,qBAAKkuB,IAAK44B,GAAY34B,IAAI,iB,cClGvB,SAASg6B,KACtB,IACInhC,EADOggC,GAGX,EAAwB9+B,mBAAS,KAAjC,mBAAOwhC,EAAP,KAAaG,EAAb,KAUA,OAPA7iC,EAASlkB,KAAI,SAACgK,GAEZ,OADAA,EAAM,OAAa,IACZka,KAGT9lB,QAAQC,IAAI6lB,EAAU,iBAGpB,mCACE,sBAAK0B,UAAU,4BAAf,UACE,+EACA,wBACEoD,KAAK,SACLpD,UAAoB,MAATghC,EAAe,iBAAmB,kBAC7C99B,QAAS,kBAAMi+B,EAAQ,MAHzB,uBAOA,wBACE/9B,KAAK,SACLpD,UAAoB,MAATghC,EAAe,iBAAmB,kBAC7C99B,QAAS,kBAAMi+B,EAAQ,MAHzB,qBAOA,sBAAKnhC,UAAU,uBAAf,UACE,uBACA,cAAC,GAAD,CAAoBghC,KAAMA,EAAM1pD,KAAMgnB,IACtC,+BC3CK,SAAS8iC,KAaxB,IAAMt9B,EAAkB,kBACpB,cAAC,IAAD,CAAcV,KAAM,OAAQnD,MAAO,UAAW8D,OAAQ,IAAKC,MAAO,OAErE,OACG,qBAAKhE,UAAU,aAAf,SACI,qBAAKA,UAAU,gBAAf,SAA+B,cAAC8D,EAAD,Q,OCKxB,SAASu9B,KAItB,IAAMC,EAAW,CACf,CAAExkD,GAAI,EAAGihB,KAAM,yBACf,CAAEjhB,GAAI,EAAGihB,KAAM,0BACf,CAAEjhB,GAAI,EAAGihB,KAAM,eACf,CAAEjhB,GAAI,EAAGihB,KAAM,mBACf,CAAEjhB,GAAI,EAAGihB,KAAM,8BACf,CAAEjhB,GAAI,EAAGihB,KAAM,kBACf,CACEjhB,GAAI,EACJihB,KAAM,sLAER,CACEjhB,GAAI,EACJihB,KAAM,iFAER,CAAEjhB,GAAI,EAAGihB,KAAM,kCACf,CAAEjhB,GAAI,EAAGihB,KAAM,UACf,CAAEjhB,GAAI,GAAIihB,KAAM,0DAChB,CAAEjhB,GAAI,GAAIihB,KAAM,8CAChB,CACEjhB,GAAI,GACJihB,KAAM,+GAER,CACEjhB,GAAI,GACJihB,KAAM,iFAER,CACEjhB,GAAI,GACJihB,KAAM,+EAER,CAAEjhB,GAAI,GAAIihB,KAAM,IAChB,CAAEjhB,GAAI,GAAIihB,KAAM,wCAChB,CACEjhB,GAAI,GACJihB,KAAM,sGAER,CACEjhB,GAAI,GACJihB,KAAM,uEAER,CAAEjhB,GAAI,GAAIihB,KAAM,qDAKdqhB,EAAU,GACVC,EAAc,GAIlB,EAA8B7f,mBAAS,IAAvC,mBAAO8f,EAAP,KAAgBC,EAAhB,KACA,EAAwC/f,mBAAS,IAAjD,mBAAqBggB,GAArB,WAEA,EAA4ChgB,oBAAS,GAArD,mBAAO+hC,EAAP,KAAuBC,EAAvB,KAKA,SAAS/hB,IAEP,IAAMC,EAASC,uBACb,SAACC,GAEC,IAAIC,EAAyB,GACzB4hB,EAAY,EAGhB,GAFA5hB,EAAiB,uBAAOA,GAAP,aAA6BD,IAExB,GAAlBN,EAAQnmC,OAAa,CAEvB,IAFwB,IAAD,WAEdsC,GAEL6jC,EAAQU,WACN,SAACC,GAAD,OACEA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEL2/B,GAAwB,EAOxB7hB,EAAcM,OACZN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAjBGA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAsBLgmD,EAAY,GACdC,IAAMC,SAAQ,kBACZ,mCACE,gCACGL,EAAS,GAAGvjC,KACb,uBACA,iCAAS0jC,IACRH,EAAS,IAAIvjC,aAQxBwhB,EAAW,GAAD,oBAAKD,GAAL,aAAiBM,OAE7B,CAACN,IAMH,EAAwCa,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAGhBC,EAAa,SAACC,GAAD,OAAe,WAChCqhB,KAAKj4B,KAAK,CAERpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUuxB,EAAS,IAAIvjC,KAAO,WACnC0E,MAAK,SAACuH,GACP,GAAIA,EAAOC,YAAa,CACtB,IAAMwW,EAAQ,aAAOnB,GACrBmB,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxChB,EAAWkB,GACXjoC,QAAQC,IAAI,mBAAoBgoC,EAAStnC,QAClB,GAAnBsnC,EAAStnC,QAEXX,QAAQC,IACN,oEASJwE,EAAQqiC,EAAQllC,KAAI,SAACmmC,GAAD,OACxB,6BACE,eAACpX,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,gBAAtB,SACGugB,EAAKpjC,OAER,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACE,wBACEj2B,MAAOwlD,EAAS,GAAGvjC,KACnBmF,QAASod,EAAWC,GACpBvgB,UAAU,oBAHZ,SAKE,cAAC,KAAD,CACE6F,KAAM8a,KACN3gB,UAAU,eACV6E,MAAO,CAAEkB,SAAU,kBAdpBwa,EAAKpjC,SAuBhB,OACE,qBAAK6iB,UAAU,uBAAf,SACE,0BAASA,UAAU,6BAAnB,UACE,kDACMogB,EAAa,CAAEpgB,UAAW,cADhC,IAEE6E,MAAO,CACL/E,IAAK,MACL2G,SAAU,WACVV,SAAU,OACV2pB,UAAW,UANf,UASE,sCAAWrP,MACX,sBAAMrgB,UAAU,WAAhB,SAEE,sBAAMA,UAAU,GAAhB,SAAoBshC,EAAS,GAAGvjC,SAElC,uBACA,uBACA,2BAEF,uBAAOiC,UAAU,mBAAjB,SAEE,6BAAK/iB,WAQf,IA+FM4jC,EAAsB,WAC1B,GAAIxB,EAAYlmC,OAAS,EAAG,CAC1B,IAAMg9B,EAAW,IAAI+L,SAErB/L,EAASgM,OAAO,UAAW,OAE3B9C,EAAYjlC,KAAI,SAACV,GAEfy8B,EAASgM,OAAO,QAASzoC,EAAGA,EAAEyD,SAGhC3E,QAAQC,IACN,kFAEFD,QAAQC,IAAI,aAAc09B,EAAS0rB,OAAO,UAE1CH,IAAMC,SAAQ,kBACZ,qCACE,8BAAML,EAAS,IAAIvjC,OACnB,qBAAKiE,wBAAyB,CAAEC,OAAQq/B,EAAS,IAAIvjC,cAQ3DyjC,GAAkB,IAOpB,OACE,qCACE,sBAAKxhC,UAAU,WAAf,UACE,cAACmJ,GAAA,EAAD,UACE,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,UAAvB,SACE,iCACE,cAAC,SAAD,CACEoD,KAAK,SACL0+B,UAAU,YACV5+B,QA1IS,WACrB0+B,KAAKj4B,KAAK,CAERpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUuxB,EAAS,IAAIvjC,KAAO,WACnC0E,MAAK,SAACuH,GACHA,EAAOC,aACTsV,EAAW,QA4HHvf,UAAU,WACV9kB,SAA6B,IAAnBokC,EAAQnmC,OALpB,SAOE,+BAAOmoD,EAAS,GAAGvjC,SARvB,OAWE,cAAC,SAAD,CACE+jC,UAAU,YACV5+B,QA9HM,WAClBs+B,GAAkB,GAClBpiB,EAAU,GACVC,EAAc,GACdG,EAAgB,IAChBH,EAAW,aAAOC,GAYlBkiB,GAAkB,GAEdpiB,EAAQjmC,OAAS,EAEnByoD,KAAKj4B,KAAK,CACRpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KACE,QACAuxB,EAAS,GAAGvjC,KACZ,YACAqhB,EAAQjmC,OACR,YACAmoD,EAAS,IAAIvjC,KACb,YACAujC,EAAS,IAAIvjC,KACb,YACAujC,EAAS,IAAIvjC,KACb,WACD0E,MAAK,SAACuH,GACP,GAAIA,EAAOC,YAAX,CACEu3B,GAAkB,GAClB,IAAK,IAAIz4C,EAAIq2B,EAAQjmC,OAAS,EAAG4P,GAAK,EAAGA,IACvCs2B,EAAYa,OAAOd,EAAQr2B,GAAG63B,IAAK,GAGrCrB,EAAWF,GACXG,EAAgBJ,GAChByB,QARF,CAUE,IAAK,IAAI93B,EAAIq2B,EAAQjmC,OAAS,EAAG4P,GAAK,EAAGA,IACvCs2B,EAAYa,OAAOd,EAAQr2B,GAAG63B,IAAK,GAErCrB,EAAWF,QAOfmiB,GAAkB,GAClBjiB,EAAWF,GACXG,EAAgBJ,GAChBtW,YAAW,WACT+X,MACC,OA0DO7gB,UAAU,oBACV9kB,SAA6B,IAAnBokC,EAAQnmC,OAJpB,SAME,+BAAOmoD,EAAS,GAAGvjC,SAjBvB,sBAuBJ,cAACoL,GAAA,EAAD,CAAKnJ,UAAU,YAAf,SACE,cAACoJ,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACE,cAAC0N,EAAD,WAKL8hB,EAAiB,cAACH,GAAD,IAAiB,QC1X1B,SAAS3B,KAgBtB,OACE,sBAAMz/B,UAAU,4BAAhB,UACE,sDACA,sBAAKA,UAAU,uBAAf,UACE,uBACA,cAACqhC,GAAD,IACA,0BAEF,0B,cC3CS,SAAeU,GAA9B,qC,8CAAe,aAIX9qD,GAJW,2BAAAc,EAAA,iEACXf,WADW,MACP,GADO,MAEXgrD,cAFW,MAEF,OAFE,MAGXlhC,eAHW,MAGH,GAHG,oBAQcmhC,MAAMjrD,EAAK,CAChCgrD,SACA/qD,OACA6pB,YAXO,UAQH4B,EARG,OAcTlqB,QAAQC,IAAI,kCAAmCiqB,EAASpqB,QACxDE,QAAQC,IAAI,kCAAmCiqB,GAExB,KAAnBA,EAASpqB,OAjBJ,0CAkBEoqB,EAASw/B,QAlBX,iCAoBAx/B,EAASw/B,QApBT,0DA4BT1pD,QAAQC,IAAI,sBAAZ,MACA0pD,QAAQC,OAAR,MA7BS,2D,sBCOf,IAsIehzC,GAtIIzY,KAAO,SAACC,EAAKC,GAAN,MAAmB,CAC3CwrD,mBAAmB,GACnBC,WAAW,EACXC,cAAc,GACdxiC,SAAU,CAAGyiC,MAAM,IAAKxrD,IAAK,GAAIE,QAAS,GAAID,KAAM,GAAIF,UAAU,EAAO4nD,SAAS,GAAIC,UAAW,CAAE,QAAW,EAAI,SAAY,KAE9H6D,eAAe,WAAD,4BAAE,WAAOC,EAAcniB,GAArB,mBAAAxoC,EAAA,sDAEd,IACM4qD,EAAM9rD,IAAM0rD,cACH,GACbK,EAAS,CAAC,KAAQF,EAAU,KAAOniB,IAC/BK,EAAK+hB,EAAK3iB,WAAU,SAACvkC,GAAD,OAASA,EAAEonD,OAAOH,OACjC,EACPC,EAAK/hB,GAAMgiB,EAGXD,EAAK9gD,KAAK+gD,GAEZpqD,QAAQC,IAAI,cAAekqD,GACzB/rD,EAAI,CAAE2rD,cAAeI,EACfL,WAAW,EACXviC,SAAU,CAAE/oB,IAAK,GAAIE,QAAS,GAAID,KAAM,GAAIF,UAAU,EAAQ4nD,SAAS,GAAIC,UAAW,CAAE,QAAW,EAAI,SAAY,OAE3H,MAAOkE,GACJjsD,IAAMksD,YAAY,GAAI,GAAI,IAAI,EAAM,yBAA0B,IAAK,yBAjBxE,QAmBKnsD,EAAI,CAAE0rD,WAAU,IArBP,2CAAF,qDAAC,GAyBfU,gBAAgB,WAAD,4BAAE,WAAON,GAAP,iBAAA3qD,EAAA,sDAEf,IACM4qD,EAAM9rD,IAAM0rD,eACZ3hB,EAAK+hB,EAAK3iB,WAAU,SAACvkC,GAAD,OAASA,EAAEonD,OAAOH,OACjC,GACPC,EAAKziB,OAAOU,EAAK,GAEnBpoC,QAAQC,IAAI,eAAgBkqD,GAC3B/rD,EAAI,CAAE2rD,cAAeI,EACdL,WAAW,EACXviC,SAAU,CAAE/oB,IAAK,GAAIE,QAAS,GAAID,KAAM,GAAIF,UAAU,EAAQ4nD,SAAS,GAAIC,UAAW,CAAE,QAAW,EAAI,SAAY,OAE3H,MAAOkE,GACJjsD,IAAMksD,YAAY,GAAI,GAAI,IAAI,EAAM,yBAA0B,IAAK,yBAZxE,QAcKnsD,EAAI,CAAE0rD,WAAU,IAhBN,2CAAF,mDAAC,GAsBdS,YAAY,WAAD,4BAAE,WAAO/pD,EAAO4lB,EAAOhnB,EAAOF,EAAOqR,EAAOtN,EAAOmB,GAAjD,eAAA7E,EAAA,sDAEPkrD,EAAc,CAAET,MAAM,IAAKxrD,IAAIgC,EAAG9B,QAAQ0nB,EAAG3nB,KAAKW,EAAGb,SAASW,EAAGinD,SAAS51C,EAAG61C,UAAU,CAAE,QAAUnjD,EAAI,SAAWmB,IACtH,IACIhG,EAAI,CAAEmpB,SAAUkjC,IAClB,MAAOH,GACLG,EAAYlsD,UAAW,EACvBksD,EAAYtE,SAAW,2BACvBsE,EAAYrE,UAAUxnD,SAAW,IACjC6rD,EAAYrE,UAAUvnD,SAAW,wCACjCT,EAAK,CAAEmpB,SAASkjC,IAPpB,QASIrsD,EAAI,CAAE0rD,WAAU,IAEhBW,EAAYlsD,UACdyB,QAAQC,IAAI,qBAAsB5B,IAAMkpB,SAAS6+B,UAAUxnD,QAAS,QAASP,IAAMkpB,SAAS6+B,UAAUvnD,UAf7F,2CAAF,+DAAC,GAkBd6rD,sBAAsB,WAAD,4BAAE,sBAAAnrD,EAAA,sDAErB,IACInB,EAAI,CAAEyrD,mBAAoB,GACpBC,WAAW,EACXviC,SAAU,CAAE/oB,IAAK,GAAIE,QAAS,GAAID,KAAM,GAAIF,UAAU,EAAQ4nD,SAAS,GAAIC,UAAW,CAAE,QAAW,EAAI,SAAY,OAE3H,MAAOkE,GACJjsD,IAAMksD,YAAY,GAAI,GAAI,IAAI,EAAM,yBAA0B,IAAK,yBANxE,QAQKnsD,EAAI,CAAE0rD,WAAU,IAVA,2CAAF,kDAAC,GActBa,sBAAsB,WAAD,4BAAE,WAAOj+B,EAAWpoB,EAAQsmD,GAA1B,yBAAArrD,EAAA,4DACN+Q,oBACT0X,EAAS1X,wCACKA,OACdu6C,EAAWC,GAAcC,QAAQ,GAAGpmD,KAAOmmD,GAAcC,QAAQ,GAAGC,KAAK,GAAGrmD,KAE5EolB,EAAW,GACXkhC,EAAa,CAAE,IAAOjjC,EAAQ6iC,EAAW,OAAS,OAAQ,QAF5C,CAAC,cAAgBn+B,KAI/BiR,EAAW,IAAI+L,UACZC,OAAO,SAAUrlC,GAC1Bq5B,EAASgM,OAAO,UARIr5B,QASpBs6C,EAAShpD,KAAI,SAACV,GACZy8B,EAASgM,OAAO,QAASzoC,EAAEA,EAAEyD,SAO/BtG,IAAMksD,YAAY,GAAI,GAAI,IAAI,EAAO,GAAI,EAAG,IApBvB,UAsBhBnsD,EAAI,CAAEyrD,mBAAmB,KAtBT,UAuBUN,GAAQ0B,EAAWttB,GAvB7B,WA0BqB,OAH/ButB,EAvBU,QA0BC9E,UAAUxnD,SAAkD,IAAjCssD,EAAa9E,UAAUxnD,QA1BnD,wBA2BbR,EAAK,CAAEyrD,mBAAoBqB,IA3Bd,kBA8BN7sD,IAAMwrD,oBA9BA,eAiCbxrD,IAAMksD,YAAYviC,EAAS6iC,EAAU9gC,GAAU,EAAM,wBAAyBmhC,EAAa9E,UAAUxnD,QAASssD,EAAa9E,UAAUvnD,UAjCxH,kBAkCNR,IAAMkpB,UAlCA,kEAqCbvnB,QAAQC,IAAI,gBAAZ,MACA7B,EAAK,CAAEyrD,mBAAoB,KAC3BxrD,IAAMksD,YAAYviC,EAAS6iC,EAAU9gC,GAAU,EAAM,yBAA0B,IAAI,iCAvCtE,kBAwCR1rB,IAAMkpB,UAxCE,yBA0CfnpB,EAAK,CAAE0rD,WAAW,IA1CH,8EAAF,uDAAC,OC7DT,SAASqB,GAAwBvkC,GAE9C,MAA4ChQ,IAAW,SAACiQ,GAAD,MAAiB,CACtEojC,eAAgBpjC,EAAMojC,eACtBO,gBAAiB3jC,EAAM2jC,oBAFjBP,EAAR,EAAQA,eAAgBO,EAAxB,EAAwBA,gBAMlB1B,EAAW,CACf,CAAExkD,GAAI,EAAGihB,KAAM,mBACf,CAAEjhB,GAAI,EAAGihB,KAAM,8BACf,CAAEjhB,GAAI,EAAGihB,KAAM,kBACf,CAAEjhB,GAAI,EAAGihB,KAAM,kCACf,CAAEjhB,GAAI,EAAGihB,KAAM,0DACf,CAAEjhB,GAAI,EAAGihB,KAAM,8CACf,CACEjhB,GAAI,EACJihB,KAAM,iFAER,CACEjhB,GAAI,EACJihB,KAAM,+EAER,CACEjhB,GAAI,EACJihB,KAAM,sGAER,CACEjhB,GAAI,EACJihB,KAAM,uEAER,CAAEjhB,GAAI,GAAIihB,KAAM,oDAChB,CAAEjhB,GAAI,GAAIihB,KAAM,aAOlB,EAA8ByB,mBAAS,IAAvC,mBAAO8f,EAAP,KAAgBC,EAAhB,KAIA,EAA4C/f,oBAAS,GAArD,mBAAO+hC,EAAP,UAIA,SAAS9hB,IACP,IAAMC,EAASC,uBACb,SAACC,GAKCL,EAAW,aAAIK,IACf6iB,EAAerjC,EAAMyjC,KAAMjjB,KAG7B,CAACN,IAKH,EAAwCa,aAAY,CAClDyjB,UAAU,EACVlkB,WAFMU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAMhBC,EAAa,SAACC,GAAD,OAAe,WAChCqhB,KAAKj4B,KAAK,CAERpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,QAAUuxB,EAAS,GAAGvjC,KAAO,WAClC0E,MAAK,SAACuH,GACP,GAAIA,EAAOC,YAAa,CACtB,IAAMwW,EAAQ,aAAOnB,GACrBmB,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxChB,EAAWkB,GACXuiB,EAAgB5jC,EAAMyjC,MAEC,GAAnBpiB,EAAStnC,OAEXX,QAAQC,IAAI,qBACPD,QAAQC,IAAI,2BAOnBwE,EAAQqiC,EAAQllC,KAAI,SAACmmC,GAAD,OACxB,6BACE,eAACpX,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,gBAAtB,SACGugB,EAAKpjC,OAER,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACE,wBACEj2B,MAAOwlD,EAAS,GAAGvjC,KACnBmF,QAASod,EAAWC,GACpBvgB,UAAU,oBAHZ,SAKE,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,yBAX5CugB,EAAKpjC,SAmBhB,OACE,eAACgsB,GAAA,EAAD,CAAKnJ,UAAU,eAAf,UACE,cAACoJ,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,GAAtB,SACE,yBAASA,UAAU,6BAAnB,SACE,kDAASogB,EAAa,CAAEpgB,UAAW,MAAnC,cACE,oCAAOA,UAAU,iBAAoBqgB,MACrC,cAAC,QAAD,CAAOrgB,UAAU,mBAAjB,SAAqCshC,EAAS,IAAIvjC,eAIxD,cAACqL,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,gBAAvB,SACE,gCAEE,6BAAK/iB,WAUf,OACE,qCACE,qBAAK+iB,UAAU,kBAAf,SAEE,cAACmJ,GAAA,EAAD,CAAKnJ,UAAU,GAAf,SACE,cAACoJ,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,uBAAvB,SACE,cAACyf,EAAD,UAKL8hB,EAAiB,cAACH,GAAD,IAAiB,QCjK1B,SAAS3B,KAItB,IAAQ8C,EAAkBnzC,IAAW,SAACiQ,GAAD,MAAiB,CACpDkjC,cAAeljC,EAAMkjC,kBADfA,cAuBR,OACE,sBAAMviC,UAAU,4BAAhB,UACE,sDACA,cAACmJ,GAAA,EAAD,UACE,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,UAAvB,SACE,+BACE,cAAC,SAAD,CACE8hC,UAAU,YACV5+B,QAjBQ,WAClB,IAAMiT,EAAW,IAAI+L,SACrBqgB,EAAcnoD,KAAI,SAACV,GACjBy8B,EAASgM,OAAO,QAASzoC,EAAE6mC,KAAK,GAAI7mC,EAAE6mC,KAAK,GAAGpjC,SAEhD3E,QAAQC,IAAI,yBAA0B09B,EAAS0rB,OAAO,WAa5C7hC,UAAU,oBAHZ,SAKE,+BA3BqB,4BAgC7B,sBAAKA,UAAU,uBAAf,uBAEI,cAAC2jC,GAAD,CAAyBd,KAAM,IAFnC,IAEyC,uBAFzC,aAII,cAACc,GAAD,CAAyBd,KAAM,IAJnC,IAIyC,uBAErC,sBAAK7iC,UAAU,WAAf,UACE,kDACA,uBACA,qBAAKA,UAAU,WAAf,SACE,cAAC2jC,GAAD,CAAyBd,KAAM,SAGnC,0BAEJ,0B,OC1DS,SAASgB,KAUtB,MAA4BrkC,oBAAS,GAArC,mBACA,GADA,UACwCA,oBAAS,IAAjD,6BAQE,OACE,sBAAMQ,UAAU,4BAAhB,UACI,sFACA,qHAGA,uBACA,qCAGA,0BC5BK,SAASy/B,KAUtB,MAA4BjgC,oBAAS,GAArC,mBAAOgL,EAAP,KAAeC,EAAf,KACA,EAAwCjL,oBAAS,GAAjD,mBAAOskC,EAAP,UAmCE,OACE,sBAAM9jC,UAAU,4BAAhB,UACI,6EACA,qHAGA,uBACA,cAAC,SAAD,CAAQoD,KAAK,SAASF,QAAS,kBAAIuH,GAAWD,IAASxK,UAAU,OAAjE,qCAEA,cAAC,eAAD,CAAc0L,OAAQlB,EAAQpH,KAAK,QAAQtnB,MAAO,aACpC6vB,WAAY,WAnCA,IAACmY,EACV,SADUA,EAmC2B,QAlCZ,QAAhBA,IAA0BggB,EAoBtDr5B,GAAWD,GAnBXo3B,KAAKj4B,KAAK,CACRpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAClB7L,MAAO,MACP+L,KAAM,kHACLtN,MAAK,SAACuH,GACHA,EAAOC,aACTQ,GAAWD,OAqBiDpE,KAAM,GADpE,SAEgB,cAACy9B,GAAD,MAmBhB,0BChGV,IAkDeE,GAlDGptD,KAAO,SAACC,EAASC,GAAV,MAAuB,CAE9CmtD,UAAU,GACVC,QAAQ,GACRlkC,SAAU,CAAEhpB,UAAU,EACV4nD,SAAS,GACTuF,SAAS,IAEnBC,eAAe,WAAD,4BAAE,WAAOzsD,EAAOqR,EAAOnM,GAArB,SAAA7E,EAAA,sDAIhBnB,EAAK,CAAEmpB,SADI,CAAEhpB,SAAUW,EAAGinD,SAAS51C,EAAGm7C,SAAStnD,KAE/CpE,QAAQC,IAAI,iDAAkD5B,IAAMkpB,UALpD,2CAAF,uDAAC,GAQfqkC,cAAc,WAAD,4BAAE,WAAOC,GAAP,iBAAAtsD,EAAA,sDAEb,IACEnB,EAAI,CAACqtD,QAAQI,IAEG,KADZC,EAAIztD,IAAMmtD,WACP7qD,OACHmrD,EAAGziD,KAAK,CAAC,KAAOwiD,KAGZzjB,EAAI0jB,EAAGtkB,WAAU,SAACphB,GAAD,OAASA,EAAEylC,OAAOA,OAC9B,EACLC,EAAGpkB,OAAOU,EAAI,GAGd0jB,EAAGziD,KAAK,CAAC,KAAOwiD,IAGvBztD,EAAI,CAACotD,UAAUM,IAEhB,MAAOxB,IAjBT,QAoBIlsD,EAAI,CAAE0rD,WAAU,IAErB9pD,QAAQC,IAAI,YAAa5B,IAAMotD,SAC/BzrD,QAAQC,IAAI,cAAe5B,IAAMmtD,WAzBnB,2CAAF,mDAAC,OCNH,SAASO,KAGtB,MACAR,IAAU,SAAC1kC,GAAD,MAAgB,CACxB+kC,cAAe/kC,EAAM+kC,cACrBJ,UAAU3kC,EAAM2kC,cAHVI,EAAR,EAAQA,cAAcJ,EAAtB,EAAsBA,UAgBtB,OACE,mCACE,uBAAOhkC,UAAU,YAAjB,SACE,qBAAKA,UAAU,eAAf,SACMgkC,EAAU5pD,KAAI,SAACoqD,EAAQC,GAAT,OACZ,8BAAmB,eAACjgC,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIkhC,EAAcI,EAAGH,OAAxC,UAAgDG,EAAGH,KAAnD,QAATI,YCZX,SAAShF,KAIpB,MACAsE,IAAU,SAAC1kC,GAAD,MAAgB,CACxB+kC,cAAe/kC,EAAM+kC,cACrBH,QAAS5kC,EAAM4kC,YAHTG,EAAR,EAAQA,cAAeH,EAAvB,EAAuBA,QAQjB3sD,EAAMgnD,GACd,OACE,sBAAKt+B,UAAU,4BAAf,UACE,mEACA,gCACE,8BAAK,cAACwE,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIkhC,EAAc,mBAArC,8BACL,8BAAK,cAAC5/B,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIkhC,EAAc,4BAArC,uCACL,8BAAK,cAAC5/B,EAAA,EAAIC,KAAL,CAAUvB,QAAS,kBAAIkhC,EAAc,eAArC,6BAEP,sBAAKpkC,UAAU,uBAAf,kBAEE,cAACukC,GAAD,IACA,0BAEF,uBACA,gCACa,mBAAVN,EAA6B,cAAC5C,GAAD,IAAqB,KACxC,4BAAV4C,EAAsC,cAACN,GAAD,CAAyBd,KAAM,IAAO,KAClE,eAAVoB,EAAyB,cAAC,GAAD,CAAY3sD,KAAMA,EAAM+Q,KAAM,EAAGw3C,SAAU,eAAkB,QAEzF,0BCnCS,SAAS7+B,KActB,IAAM0jC,EAAc,CAClB,CAAEnkC,KAAM,WAAYtnB,MAAO,YAC3B,CAAEsnB,KAAM,SAAUtnB,MAAO,WAI3B,EAA4BumB,oBAAS,GAArC,6BAUA,OACE,sBAAMQ,UAAU,4BAAhB,UACG,0DACD,8HAC8F,uBAD9F,8EAE0E,uBAF1E,IAEgF,0BAEhF,sBAAKA,UAAU,uBAAf,UACE,uBACC,IAED,sBAAKA,UAAU,yBAAf,UACG,IAED,uBACA,uBACA,cAAC,IAAD,CACEkC,cAAe,CACbyiC,OAAQ,GACRrqD,MAAO,GACPsqD,OAAQ,GACRhrC,MAAO,GACPirC,SAAU,GACVC,SAAS,EACTC,SAAS,EACTC,OAAQ,IAEV3iC,SAAQ,uCAAE,WAAOC,GAAP,SAAAvqB,EAAA,sDACMuqB,EAAOqiC,OADb,2CAAF,sDAGR9hC,iBAAkBC,IAAW,CAC3B6hC,OAAQ7hC,MAAaC,SAAS,mBAAmBkiC,SACjD3qD,MAAOwoB,MAAaC,SAAS,mBAAmBzoB,QAChDsqD,OAAQ9hC,MAAaC,SAAS,mBAAmBmiC,UACjDtrC,MAAOkJ,MACJC,SAAS,mBACToiC,IAAI,EAAG,oCACPC,IAAI,GAAI,qCACXP,SAAU/hC,MACPC,SAAS,kCACTsiC,SACHP,QAAShiC,MAAWwiC,MAAM,EAAC,GAAO,aAClCP,QAASjiC,MAAWwiC,MAAM,EAAC,GAAO,aAClCN,OAAQliC,MAAaC,SAAS,oCA3BlC,SA8BG,gBAAGT,EAAH,EAAGA,OAAQijC,EAAX,EAAWA,cAAX,OACC,cAAC,IAAD,CAAMvlC,UAAU,OAAhB,SACE,sBAAKA,UAAU,aAAf,UAEE,uBAAOmD,QAAQ,SAAf,oBACA,cAAC,IAAD,CACEC,KAAK,OACLjmB,KAAK,SACL6iB,UAAU,gCACVqD,YAAY,WAEd,cAAC,IAAD,CAAclmB,KAAK,SAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,WAMvC,uBAAOH,QAAQ,QAAf,mBACA,cAAC,IAAD,CACEC,KAAK,OACLjmB,KAAK,QACL6iB,UAAU,gCACVqD,YAAY,UAEd,cAAC,IAAD,CAAclmB,KAAK,QAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,WAMvC,uBAAOH,QAAQ,SAAf,qBACA,cAAC,IAAD,CACEC,KAAK,OACLjmB,KAAK,SACL6iB,UAAU,gCACVqD,YAAY,WAEd,cAAC,IAAD,CAAclmB,KAAK,SAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,WAMvC,uBAAOH,QAAQ,QAAf,sBACA,cAAC,IAAD,CACEhmB,KAAK,QACLqoD,GAAG,WACHxlC,UAAU,WACVqD,YAAY,QACZoiC,UAAU,OAEZ,cAAC,IAAD,CAActoD,KAAK,QAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,WAKvC,uBACA,uBAEA,uBAAOH,QAAQ,WAAf,oBACA,eAAC,IAAD,CACErmB,GAAG,WACHK,KAAK,WACL6iB,UAAU,aACVwlC,GAAG,SACHvsD,MAAOqpB,EAAOuiC,SACda,QAAShB,EACTn7B,SAAU,SAAC7vB,GAAD,OACR6rD,EAAc,WAAY7rD,EAAE6pB,OAAOtqB,QARvC,UAWE,wBAAgBA,MAAM,cAAcwoC,MAAM,eAA7B,GACZijB,EAAYtqD,KAAI,SAACyJ,EAASlF,GAAV,OACf,wBAEE1F,MAAO4K,EAAG5K,MACVwoC,MAAO59B,EAAG5K,OAFL0F,EAAQ,SAMnB,cAAC,IAAD,CAAcxB,KAAK,WAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,WAKvC,uBACA,uBACA,6CACA,uBACA,sBAAKuB,MAAO,CAAE2B,QAAS,eAAvB,UACE,cAAC,IAAD,CAAOpD,KAAK,WAAWjmB,KAAK,UAAU6iB,UAAU,YAChD,uBAAOmD,QAAQ,UAAUnD,UAAU,OAAnC,iBAGA,cAAC,IAAD,CAAc7iB,KAAK,UAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,cAMzC,uBACA,sBAAKuB,MAAO,CAAE2B,QAAS,eAAvB,UACE,cAAC,IAAD,CAAOpD,KAAK,WAAWjmB,KAAK,UAAU6iB,UAAU,YAChD,uBAAOmD,QAAQ,UAAUnD,UAAU,OAAnC,iBAIA,cAAC,IAAD,CAAc7iB,KAAK,UAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,cAOzC,uBAEA,uBAAOH,QAAQ,SAAf,yBACA,uBACA,sBAAK0B,MAAO,CAAE2B,QAAS,eAAvB,UACE,cAAC,IAAD,CAAOpD,KAAK,QAAQjmB,KAAK,SAASlE,MAAM,QACxC,sBAAM+mB,UAAU,OAAhB,oBAEF,uBACA,sBAAK6E,MAAO,CAAE2B,QAAS,eAAvB,UACE,cAAC,IAAD,CAAOpD,KAAK,QAAQjmB,KAAK,SAASlE,MAAM,QACxC,sBAAM+mB,UAAU,OAAhB,oBAEF,cAAC,IAAD,CAAc7iB,KAAK,SAAnB,SACG,SAACmmB,GAAD,OACC,sBAAMtD,UAAU,GAAhB,SACE,qBAAKA,UAAU,+BAAf,SACE,qBAAKA,UAAU,eAAf,SAA+BsD,WAMvC,wBAAQF,KAAK,SAASpD,UAAU,sBAAhC,gCAQV,6B,sDCnQF2lC,GAAQ,CAAC,UAAW,kBAAgB,kBAAgB,OAAQ,iBAGnD,SAASC,KACtB,MAAoCC,WAAe,GAAnD,mBAAOC,EAAP,KAAmBC,EAAnB,KACA,EAA8BF,WAAe,IAAIG,KAAjD,mBAAOC,EAAP,KAAgBC,EAAhB,KAEMC,EAAiB,SAAC/I,GACtB,OAAgB,IAATA,GAGHgJ,EAAgB,SAAChJ,GACrB,OAAO6I,EAAQI,IAAIjJ,IAqCrB,OACE,+CAEE,eAACkJ,GAAA,EAAD,CAAKC,GAAI,CAAEviC,MAAO,OAAlB,UACE,cAACwiC,GAAA,EAAD,CAASV,WAAYA,EAArB,SACGH,GAAMvrD,KAAI,SAACqnC,EAAO9iC,GACjB,IAAM8nD,EAAqC,GACrCC,EAEF,GASJ,OARIP,EAAexnD,KACjB+nD,EAAWC,SACT,cAACC,GAAA,EAAD,CAAYz7B,QAAQ,UAApB,uBAGAi7B,EAAcznD,KAChB8nD,EAAUI,WAAY,GAGtB,cAACC,GAAA,EAAD,6BAAsBL,GAAtB,aACE,cAACM,GAAA,EAAD,6BAAeL,GAAf,aAA4BjlB,OADnBA,QAMhBqkB,IAAeH,GAAMxsD,OACpB,eAAC,WAAD,WACE,cAACytD,GAAA,EAAD,CAAYL,GAAI,CAAES,GAAI,EAAGC,GAAI,GAA7B,kDAIA,eAACX,GAAA,EAAD,CAAKC,GAAI,CAAE//B,QAAS,OAAQ0gC,cAAe,MAAOC,GAAI,GAAtD,UACE,cAACb,GAAA,EAAD,CAAKC,GAAI,CAAEa,KAAM,cACjB,cAAC57B,EAAA,EAAD,CAAQtI,QArCA,WAClB6iC,EAAc,IAoCJ,yBAIJ,eAAC,WAAD,WACE,eAACa,GAAA,EAAD,CAAYL,GAAI,CAAES,GAAI,EAAGC,GAAI,GAA7B,kBACQnB,EAAa,EADrB,IACyBH,GAAMG,MAE/B,eAACQ,GAAA,EAAD,CAAKC,GAAI,CAAE//B,QAAS,OAAQ0gC,cAAe,MAAOC,GAAI,GAAtD,UACE,cAAC37B,EAAA,EAAD,CACEvL,MAAM,UACN/kB,SAAyB,IAAf4qD,EACV5iC,QApEK,WACjB6iC,GAAc,SAACsB,GAAD,OAAoBA,EAAiB,MAoEvCd,GAAI,CAAEe,GAAI,GAJZ,mBAQA,cAAChB,GAAA,EAAD,CAAKC,GAAI,CAAEa,KAAM,cAChBjB,EAAeL,IACd,cAACt6B,EAAA,EAAD,CAAQvL,MAAM,UAAUiD,QAvEnB,WACjB,IAAKijC,EAAeL,GAGlB,MAAM,IAAIyB,MAAM,8CAGlBxB,GAAc,SAACsB,GAAD,OAAoBA,EAAiB,KACnDnB,GAAW,SAACsB,GACV,IAAMC,EAAa,IAAIzB,IAAIwB,EAAYllC,UAEvC,OADAmlC,EAAWx+B,IAAI68B,GACR2B,MA4DgDlB,GAAI,CAAEe,GAAI,GAAvD,oBAIF,cAAC97B,EAAA,EAAD,CAAQtI,QA1FD,WACjB,IAAIukC,EAAaxB,EACbG,EAAcN,KAChB2B,EAAa,IAAIzB,IAAIyB,EAAWnlC,WACrBolC,OAAO5B,GAGpBC,GAAc,SAACsB,GAAD,OAAoBA,EAAiB,KACnDnB,EAAWuB,IAkFD,SACG3B,IAAeH,GAAMxsD,OAAS,EAAI,WAAa,0B,4CC9G1DwsD,GAAQ,CACZ,+BACA,+BACA,4CAGa,SAASgC,KACtB,MAAoCnoC,mBAAS,GAA7C,mBAAOsmC,EAAP,KAAmBC,EAAnB,KAUA,OACE,gCACE,cAAC,KAAD,CAASD,WAAYA,EAAY8B,kBAAgB,EAAjD,SACGjC,GAAMvrD,KAAI,SAACqnC,EAAO9iC,GACjB,OACE,cAAC,KAAD,UACE,cAAC,KAAD,UAAY8iC,KADHA,QAMhBqkB,IAAeH,GAAMxsD,OAAS,GAC7B,cAAC,IAAM0uD,SAAP,UACE,cAAC,KAAD,CAAQ3kC,QArBG,WACb4iC,EAAa,GAAGC,GAAc,SAAC+B,GAAD,OAAgBA,EAAa,MAoBzD,SACGhC,IAAeH,GAAMxsD,OAAS,EAAI,WAAa,gBAItD,cAAC,KAAD,CAAQ+pB,QAtBO,WACjB6iC,GAAc,SAAC+B,GAAD,OAAgBA,EAAa,MAqBZ5sD,SAAyB,IAAf4qD,EAAvC,mBAGA,uCAAUA,EAAa,Q,cCtCvBH,GAAQ,CACZ,+BACA,+BACA,4CAGa,SAASoC,KACtB,MAAoClC,WAAe,GAAnD,mBAAOC,EAAP,KAAmBC,EAAnB,KACA,EAAkCF,WAE/B,IAFH,mBAAOgB,EAAP,KAAkBmB,EAAlB,KAIMC,EAAa,WACjB,OAAOtC,GAAMxsD,QAGT+uD,EAAiB,WACrB,OAAO1yC,OAAOC,KAAKoxC,GAAW1tD,QAO1BgvD,EAAoB,WACxB,OAAOD,MAAqBD,KAGxBG,EAAa,WACjB,IAAMC,EARCvC,IAAemC,IAAe,GASlBE,IAIbrC,EAAa,EADbH,GAAM3lB,WAAU,SAACod,EAAM3hD,GAAP,QAAeA,KAAKorD,MAE1Cd,EAAcsC,IAuBhB,OACE,eAAC/B,GAAA,EAAD,CAAKC,GAAI,CAAEviC,MAAO,QAAlB,UACE,cAACwiC,GAAA,EAAD,CAAS8B,WAAS,EAACxC,WAAYA,EAAY8B,kBAAgB,EAA3D,SACGjC,GAAMvrD,KAAI,SAACqnC,EAAO9iC,GAAR,OACT,cAACmoD,GAAA,EAAD,CAAkBD,UAAWA,EAAUloD,GAAvC,SACE,cAAC4pD,GAAA,EAAD,CAAYtoC,MAAM,UAAUiD,SArBlBk6B,EAqBsCz+C,EArBrB,WACnConD,EAAc3I,KAoBN,SACG3b,KAFMA,GApBA,IAAC2b,OA2BhB,8BACG+K,IACC,eAAC,WAAD,WACE,cAACvB,GAAA,EAAD,CAAYL,GAAI,CAAES,GAAI,EAAGC,GAAI,GAA7B,mDAGA,eAACX,GAAA,EAAD,CAAKC,GAAI,CAAE//B,QAAS,OAAQ0gC,cAAe,MAAOC,GAAI,GAAtD,UACE,cAACb,GAAA,EAAD,CAAKC,GAAI,CAAEa,KAAM,cACjB,cAAC57B,EAAA,EAAD,CAAQtI,QAxBA,WAClB6iC,EAAc,GACdiC,EAAa,KAsBH,yBAIJ,eAAC,WAAD,WACE,eAACpB,GAAA,EAAD,CAAYL,GAAI,CAAES,GAAI,EAAGC,GAAI,EAAGuB,GAAI,GAApC,kBACQ1C,EAAa,EADrB,IACyBH,GAAMG,MAE/B,eAACQ,GAAA,EAAD,CAAKC,GAAI,CAAE//B,QAAS,OAAQ0gC,cAAe,MAAOC,GAAI,GAAtD,UACE,cAAC37B,EAAA,EAAD,CACEvL,MAAM,UACN/kB,SAAyB,IAAf4qD,EACV5iC,QAnDK,WACjB6iC,GAAc,SAACsB,GAAD,OAAoBA,EAAiB,MAmDvCd,GAAI,CAAEe,GAAI,GAJZ,sBAQA,cAAChB,GAAA,EAAD,CAAKC,GAAI,CAAEa,KAAM,cACjB,cAAC57B,EAAA,EAAD,CAAQtI,QAASklC,EAAY7B,GAAI,CAAEe,GAAI,GAAvC,uBAGCxB,IAAeH,GAAMxsD,SACnB0tD,EAAUf,GACT,eAACc,GAAA,EAAD,CACEz7B,QAAQ,UACRo7B,GAAI,CAAE//B,QAAS,gBAFjB,kBAIQs/B,EAAa,EAJrB,wBAOA,cAACt6B,EAAA,EAAD,CAAQtI,QA7DD,WACrB,IAAMulC,EAAe5B,EACrB4B,EAAa3C,IAAc,EAC3BkC,EAAaS,GACbL,KAyDc,SACGF,MAAqBD,IAAe,EACjC,WACA,gCCvGT,SAASzB,KACtB,OACE,sBAAKxmC,UAAU,4BAAf,UAEM,eAAC,aAAD,WAEE,2CACA,sBAAKA,UAAU,uBAAf,UACE,uBACA,cAAC,GAAD,IACA,0BAEF,2CACA,sBAAKA,UAAU,uBAAf,UACE,uBACA,cAAC2nC,GAAD,IACA,0BAGF,2CACA,sBAAK3nC,UAAU,uBAAf,UACE,uBACA,cAAC+nC,GAAD,IACA,6BArBV,OCLa,SAASW,GAAStpC,GAChC,IAAMkE,EAAU4E,SAASC,eAAe,UAcvC,EAAuB3I,mBAAS,IAAhC,mBAAampC,GAAb,WACA,EAAqBnpC,mBAAS,MAA9B,mBAAYopC,GAAZ,WA2BA,OAzBAjpC,qBAAU,YACW,uCAAG,8BAAA5nB,EAAA,sEACOkqD,MAAM7iC,EAAMypC,OADnB,cACVnmC,EADU,gBAEGA,EAASw/B,OAFZ,OAEV/pD,EAFU,OAIhBK,QAAQC,IAAI,eAAgB6qB,GAG5BqlC,EAAQxwD,GACW,GAAfA,EAAKgB,OACJyvD,EAAO,6BAA+BzwD,EAAK2wD,OAAS,aAGpDF,EAAO,2BAZI,2CAAH,qDAkBjBG,GAAcpmC,OAAM,SAAAmgC,GAAK,OAAItqD,QAAQC,IAAI,oBAAqBqqD,QAE/D,IAKE,mCACK,wBAAO9iC,UAAU,YAAjB,yGAC2F,4BCxCzG,IAAMgpC,GAAO,uDAOE,SAASvJ,KAEpB,OACE,gCACI,kFACA,+CAAkBuJ,MAClB,cAACN,GAAD,CAAUG,MAAOG,KACjB,uBAEA,mBAAGlsD,GAAG,SAAN,wB,OCvBK,SAASmsD,GAAe7pC,GAErC,IAAI8pC,EAAS9pC,EAAM8pC,OAGnB,OACE,qCACc,MAAXA,EACC,mCACE,sBAAKlpC,UAAU,UAAf,UACE,uCACA,qBAAKA,UAAU,SACf,qBAAKA,UAAU,qBACf,qBAAKA,UAAU,uBAInB,GAGU,MAAXkpC,EACC,mCACE,sBAAKlpC,UAAU,UAAf,UACE,wCAEA,qBAAKA,UAAU,iBACf,qBAAKA,UAAU,qBACf,qBAAKA,UAAU,eAInB,GAGU,MAAXkpC,EACC,mCACE,sBAAKlpC,UAAU,UAAf,UACE,2CACA,qBAAKA,UAAU,iBACf,qBAAKA,UAAU,aACf,qBAAKA,UAAU,uBAInB,MChDO,SAASy/B,KAEtB,OACE,gCACE,4EACA,cAACwJ,GAAD,CAAgBC,OAAQ,MACxB,cAACD,GAAD,CAAgBC,OAAQ,MACxB,cAACD,GAAD,CAAgBC,OAAQ,S,gDCGbC,OAhBb,SAAuB9vD,GAEnB,MAAI,4CAA4C+vD,KAAK/vD,IAErDb,QAAQC,IAAI,4BAA0BY,EAAO,kBACtC,IAGPb,QAAQC,IAAI,4BAA0BY,EAAO,oBACtC,ICEEgwD,OATjB,SAAuBtxD,GAEnB,IAAIuxD,EAAavxD,EAAEqC,KAAI,SAACmvD,GACtB,OAAOA,EAAI3tD,UAIb,OADApD,QAAQC,IAAI,kBAAmB6wD,GACxBA,GC2SIE,GAlSO,WACpB,IAUIC,EAEAC,EAZJ,EAA0B7D,IAAMrmC,WAAhC,mBAEA,GAFA,UAE0BqmC,IAAMrmC,SAAS,CACvCmqC,KAAM,GACN3uB,GAAI,GACJ4uB,OAAQ,MAHV,mBAAOxxC,EAAP,KAAcyxC,EAAd,KAKIC,EAAU,EACVC,EAAU,EACVC,EAAkB,GAElBC,EAAkB,GAGhBC,EAAoB,SAAC10B,GAGzBq0B,EAAS,6BACJzxC,GADG,mBAELod,EAAMjS,OAAOpmB,KAAOq4B,EAAMjS,OAAOtqB,UAiItC,EAA8BumB,mBAAS,IAAvC,mBAAO2qC,EAAP,KAAgBC,EAAhB,KAEMlyD,EAAS,CAEbmrB,YAAa,cACbgnC,KAAM,CAEJC,eAAe,EACfC,sBAAsB,EACtBC,kBAAkB,GAEpBC,QAAS,CACP,OACA,SACA,YACA,gBACA,OACA,IACA,KACA,KACA,IACA,SACA,OACA,QACA,UACA,IACA,OACA,SAEFC,wBAAyB,CAAC,SAAU,WAAY,QAAS,QAAS,QAElEC,MAAO,UACPC,kBAAkB,EAElBC,WAAW,EACXC,UAAW,EACXC,SAAS,EACTC,sBAAsB,EACtBC,kBAAkB,EAClBC,kBAAkB,EAClBC,iBAAiB,EACjBC,SAAU,KACVC,eAAe,GAIX7K,EAAe,SAAC8K,GACpBlB,EAAWkB,IAEb,OACE,mCACE,sBAAKtrC,UAAU,yBAAf,UACE,uBAAMA,UAAU,KAAKqC,SAjLP,SAACmT,GACnBA,EAAM0mB,iBACN,IAAIqP,EAAUnzC,EAAMuxC,KAChB6B,EAAUpzC,EAAM4iB,GACpByuB,EAAY8B,EAAQ3vD,OACpB8tD,EAAY8B,EAAQ5vD,OACpBouD,EAAaP,EAAUgC,MAAM,KAC7BxB,EAAaP,EAAU+B,MAAM,KAE7B3B,EAAUE,EAAW7wD,OACrB4wD,EAAUE,EAAW9wD,OAyBrB,IAtBA,IAcI6wB,EAdA0hC,EAAUC,GAAW3B,GACrB4B,EAAWD,GAAW1B,GAGpB4B,EAAcH,EAAQ/lD,QAAO,SAACtM,EAAYyyD,GAC9C,OAAOJ,EAAQnxD,QAAQlB,KAAWyyD,KAE9BC,EAAcH,EAASjmD,QAAO,SAACtM,EAAYyyD,GAC/C,OAAOF,EAASrxD,QAAQlB,KAAWyyD,KAQ/BE,EAAS9jC,SAASC,eACtB,WAEI8jC,EAAO/jC,SAASC,eAAe,WAG5B1sB,EAAI,EAAGA,EAAIquD,EAASruD,IAAK,CAChC,IAAIywD,EAASlC,EAAWvuD,GAAGG,OAO3B,GANe,KAAXswD,EACFliC,EAASm/B,GAAc+C,GAGvBlC,EAAW9pB,OAAO8pB,EAAW7wD,OAAS,IAEnC6wB,EAGH,YAFU,MAAVgiC,IAAkBA,EAAOnnC,MAAM2B,QAAU,aAI/B,MAAVwlC,IAAkBA,EAAOnnC,MAAM2B,QAAU,QAI7C,IAAK,IAAI/qB,EAAI,EAAGA,EAAIsuD,EAAStuD,IAAK,CAChC,IAAIywD,EAASjC,EAAWxuD,GAAGG,OAM3B,GALe,KAAXswD,EACFliC,EAASm/B,GAAc+C,GAEvBjC,EAAW/pB,OAAO+pB,EAAW9wD,OAAS,IAEnC6wB,EAEH,YADQ,MAARiiC,IAAgBA,EAAKpnC,MAAM2B,QAAU,aAG7B,MAARylC,IAAgBA,EAAKpnC,MAAM2B,QAAU,QAMzC,GAHAhuB,QAAQC,IAAI,cAAeuxB,GAGvBA,EAGF,GAFQ,MAARiiC,IAAgBA,EAAKpnC,MAAM2B,QAAU,QAC3B,MAAVwlC,IAAkBA,EAAOnnC,MAAM2B,QAAU,QACpB,KAAjBpO,EAAMwxC,OAERlgC,KACGC,KAAK,CACJ7tB,MAAO,oCACP4zB,kBAAkB,EAClB9F,kBAAmB,UACnBG,eAAe,aAEhBtH,MAAK,SAACuH,GAEL,GAAIA,EAAOC,YAET,GAAgB,KAAZkgC,EACFzgC,KAAMC,KACJ,+CACA,GACA,aAEG,CACL,IAAMwiC,EAAc,CAClBxC,KAAMkC,EAAYO,SAClBpxB,GAAI+wB,EAAYK,SAChBxC,OAAQxxC,EAAMwxC,OACdtmC,QAAS6mC,GAEX3xD,QAAQC,IAAI,kBAAmB0zD,GAC/BziC,KAAMC,KAAK,iBAAmBle,KAAKE,UAAUwgD,SAEtCniC,EAAOqiC,aAEhB7zD,QAAQC,IAAI,gBAIlB,GAAgB,KAAZ0xD,EACFzgC,KAAMC,KAAK,+CAA6C,GAAI,aACvD,CAEL,IAAMwiC,EAAc,CAClBxC,KAAMkC,EAAYO,SAClBpxB,GAAI+wB,EAAYK,SAChBxC,OAAQxxC,EAAMwxC,OACdtmC,QAAS6mC,GAEX3xD,QAAQC,IAAI,kBAAmB0zD,GAC/BziC,KAAMC,KAAK,iBAAmBle,KAAKE,UAAUwgD,MA2D/C,UACE,qBAAKnsC,UAAU,kBAAf,SACE,kCACE,+BACE,oBAAIA,UAAU,SAAS2vB,QAAS,EAAhC,SACE,uBACExyC,KAAK,SACLimB,KAAK,SACLtmB,GAAG,eACH7D,MAAM,SACN+mB,UAAU,eAGd,oBAAIA,UAAU,UAAd,kBACA,oBAAIA,UAAU,UAAd,SACE,uBACEoD,KAAK,OACLC,YAAY,GACZlmB,KAAK,OACLosB,SAAU2gC,EACVlqC,UAAU,eAGd,0BAEF,qBAAIljB,GAAG,UAAU+nB,MAAO,CAAE2B,QAAS,QAAnC,UACE,uBACA,oBAAIxG,UAAU,QAAQ4vB,QAAS,EAA/B,+CAIF,+BACE,oBAAI5vB,UAAU,UAAd,gBACA,oBAAIA,UAAU,UAAd,SACE,uBACEoD,KAAK,OACLC,YAAY,GACZkG,SAAU2gC,EACV/sD,KAAK,KACL6iB,UAAU,kBAIhB,qBAAIljB,GAAG,UAAU+nB,MAAO,CAAE2B,QAAS,QAAnC,UACE,uBACA,oBAAIxG,UAAU,QAAQ4vB,QAAS,EAA/B,+CAIF,+BACE,oBAAI5vB,UAAU,UAAd,oBACA,oBAAIA,UAAU,UAAU4vB,QAAS,EAAjC,SACE,uBACExsB,KAAK,OACLC,YAAY,GACZkG,SAAU2gC,EACV/sD,KAAK,SACL6iB,UAAU,uBAMpB,uBA/DF,IA+DS,uBACP,qBAAKA,UAAU,MAAf,SACG6lC,IAAMyG,SAAQ,WACb,OACE,cAAC,KAAD,CACErzD,MAAOkxD,EACPjyD,OAAQA,EACRqxB,SAAUi3B,MAGb,MACE,OAET,uBACA,uBA9EF,cA+EcpoC,EAAMuxC,KAClB,uBAhFF,YAiFYvxC,EAAM4iB,GAChB,uBAlFF,UAmFU5iB,EAAMwxC,OAnFhB,YAoFYO,QCpSH,SAAS1K,KAEtB,OACE,mCACE,sBAAKz/B,UAAU,4BAAf,UACE,oEAEA,sBAAKA,UAAU,uBAAf,UACG,uBACA,cAAC,GAAD,IACA,+B,WCrBI,OAA0B,qC,UCe1B,SAASusC,GAAYntC,GAClC,IAAMotC,EAAYptC,EAAMqtC,MAClBte,EAAWC,iBAAO,MAEhBse,EAAeC,4BAAiB,CACtCrd,gBAAiBnB,EAASoB,QAC1BH,SAAUhwB,EAAMwtC,KAChBvd,MAAOjwB,EAAMytC,OAHPH,WAMR,OACE,gCACE,eAAC,KAAD,CAAQtmC,KAAK,KAAK+E,QAAQ,UAAUjI,QAASwpC,EAA7C,UACE,qBAAKlnC,IAAKsnC,GAAKrnC,IAAI,KADrB,mBAGA,uBACA,sBAAK6qB,IAAKnC,EAAV,UACE,+BAAO/uB,EAAMytC,OACZL,QCjCM,ICAA,OAA0B,oCCa1B,SAASO,KACtB,IAAIN,EACF,wBAAOzsC,UAAU,gCAAgCljB,GAAG,MAApD,UACE,wBACE+nB,MAAO,CACL2qB,gBAAiB,UACjBvvB,MAAO,UACPwvB,OAAQ,kBACR1rB,OAAQ,OACR8Q,cAAe,MACf6a,UAAW,UAEb1vB,UAAU,WATZ,UAWE,qBACE6E,MAAO,CACL2qB,gBAAiB,UACjBvvB,MAAO,UAEP8D,OAAQ,OACR8Q,cAAe,MACf6a,UAAW,UAPf,UAUE,oBACEC,QAAS,EACT9qB,MAAO,CACL4qB,OAAQ,kBACRO,WAAY,OAEdhwB,UAAU,WANZ,SAQE,mDAEF,oBACE4vB,QAAS,EACT/qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAFlD,SAIE,gHAKF,oBACEL,QAAS,EACT9qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAFlD,SAIE,gEAC2B,uBAD3B,sBAKF,oBACEL,QAAS,EACT9qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAFlD,SAIE,4DACuB,uBADvB,sBAKF,oBACEL,QAAS,EACT9qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAFlD,SAIE,uDACkB,uBADlB,YAGE,uBAHF,iCAKE,uBALF,mBAUJ,qBACEnrB,MAAO,CACL2qB,gBAAiB,UACjBvvB,MAAO,UAEP8D,OAAQ,OACR8Q,cAAe,MACf6a,UAAW,UAPf,UAUE,qBAAI7qB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAApD,wBAEE,uBAFF,mBAKA,oBAAInrB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAApD,SACE,wDACmB,uBADnB,sBAKF,oBAAInrB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAApD,SACE,wDACsB,uBADtB,sBAKF,oBAAInrB,MAAO,CAAE4qB,OAAQ,kBAAmBO,WAAY,OAApD,SACE,yDACuB,uBADvB,4BAON,wBAAOhwB,UAAU,WAAjB,UACE,oBAAI6E,MAAO,CAAE2qB,gBAAiB,WAA9B,SACE,qBAAII,QAAS,EAAG9yC,GAAG,aAAnB,UACE,uBAAM+nB,MAAO,CAAE5E,MAAO,WAAtB,UACE,qBAAKuF,IF/HJ,ilBE+HeC,IAAI,SADtB,0BAGA,uBAAM3pB,MAAM,GAAG+oB,MAAO,CAAE5E,MAAO,WAA/B,UACE,qBAAKuF,IClIJ,6kBDkIeC,IAAI,SADtB,oBAMJ,qBAAIZ,MAAO,CAAE6qB,UAAW,OAAQ7a,cAAe,OAA/C,UACE,oBAAI8a,QAAS,EAAb,SACE,8BACE,mBAAG1sB,KAAK,GAAR,wBAGJ,+BACE,qBAAKuC,IAAKwnC,GAAKvnC,IAAI,KADrB,mFAKA,+BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,+HAKA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,kCAKF,6BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,iCAKF,qBAAIkqB,QAAS,EAAb,UACE,gCACE,+CAEE,0BAEF,oBACE1sB,KAAK,uEACLM,OAAO,SACPvD,UAAU,YAHZ,UAKE,qBAAKwF,IAAKwnC,GAAKvnC,IAAI,KALrB,OAOE,sBAAM3pB,MAAM,sCAAZ,+BAKJ,gCACE,yDAEE,0BAEF,oBACEmnB,KAAK,8EACLM,OAAO,SACPvD,UAAU,YAHZ,UAKE,qBAAKwF,IAAKwnC,GAAKvnC,IAAI,KALrB,OAOE,sBAAM3pB,MAAM,2CAAZ,kCAMN,oBAAI6zC,QAAS,EAAb,SACE,8BACE,oBACE1sB,KAAK,4DACLM,OAAO,SACPvD,UAAU,YAHZ,UAKE,qBAAKwF,IAAKwnC,GAAKvnC,IAAI,KALrB,OAOE,sBAAM3pB,MAAM,8BAAZ,gCAIN,oBAAI6zC,QAAS,EAAb,SACE,8BACE,oBACE1sB,KAAK,oEACLM,OAAO,SAFT,UAIE,qBAAKiC,IAAKwnC,GAAKvnC,IAAI,KAJrB,OAME,sBAAM3pB,MAAM,sCAAZ,gCAMN,oBAAI6zC,QAAS,EAAb,SACE,oBACE1sB,KAAK,qEACLM,OAAO,SACPvD,UAAU,YAHZ,UAKE,qBAAKwF,IAAKwnC,GAAKvnC,IAAI,KALrB,OAOE,sBAAM3pB,MAAM,sCAAZ,iCAIN,qBAAI+oB,MAAO,CAAE6qB,UAAW,OAAQ7a,cAAe,OAA/C,UACE,+BACE,qBAAKrP,IAAKwnC,GAAKvnC,IAAI,KADrB,iGAKA,+BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,mDAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,kFAKF,6BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,oCAMJ,qBAAIZ,MAAO,CAAE6qB,UAAW,OAAQ7a,cAAe,OAA/C,UACE,+BACE,qBAAKrP,IAAKwnC,GAAKvnC,IAAI,KADrB,4DAIA,+BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,wOAOA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,oDAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,8BAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,+BAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,6DAKF,6BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,oCAOJ,qBAAIZ,MAAO,CAAE6qB,UAAW,OAAQ7a,cAAe,OAA/C,UACE,+BACE,qBAAKrP,IAAKwnC,GAAKvnC,IAAI,KADrB,2FAKA,+BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,kCAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,0BAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,wBAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,wBAIA,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,yEAKF,6BACE,gCACE,qBAAKD,IAAKwnC,GAAKvnC,IAAI,KADrB,0CAeV,OACE,mCACE,qBAAKzF,UAAU,4BAAf,SACE,eAAC,IAAMitC,WAAP,WACE,8DAEA,cAAC,GAAD,CACER,MAAOA,EACPG,KAfO,SAgBPC,KAfI,kC,OExTD,SAASxL,KAItB,IAAMC,EAAW,CACf,CAAExkD,GAAI,EAAGihB,KAAM,yBACf,CAAEjhB,GAAI,EAAGihB,KAAM,0BACf,CAAEjhB,GAAI,EAAGihB,KAAM,eACf,CAAEjhB,GAAI,EAAGihB,KAAM,mBACf,CAAEjhB,GAAI,EAAGihB,KAAM,8BACf,CAAEjhB,GAAI,EAAGihB,KAAM,kBACf,CACEjhB,GAAI,EACJihB,KAAM,sLAER,CACEjhB,GAAI,EACJihB,KAAM,iFAER,CAAEjhB,GAAI,EAAGihB,KAAM,kCACf,CAAEjhB,GAAI,EAAGihB,KAAM,UACf,CAAEjhB,GAAI,GAAIihB,KAAM,0DAChB,CAAEjhB,GAAI,GAAIihB,KAAM,8CAChB,CACEjhB,GAAI,GACJihB,KAAM,+GAER,CACEjhB,GAAI,GACJihB,KAAM,iFAER,CACEjhB,GAAI,GACJihB,KAAM,+EAER,CAAEjhB,GAAI,GAAIihB,KAAM,IAChB,CAAEjhB,GAAI,GAAIihB,KAAM,wCAChB,CACEjhB,GAAI,GACJihB,KAAM,sGAER,CACEjhB,GAAI,GACJihB,KAAM,uEAER,CAAEjhB,GAAI,GAAIihB,KAAM,qDAKdqhB,EAAU,GACVC,EAAc,GAIlB,EAA8B7f,mBAAS,IAAvC,mBAAO8f,EAAP,KAAgBC,EAAhB,KACA,EAAwC/f,mBAAS,IAAjD,mBAAqBggB,GAArB,WAEA,EAA4ChgB,oBAAS,GAArD,mBAAO+hC,EAAP,KAAuBC,EAAvB,KAKA,SAAS/hB,IAEP,IAAMC,EAASC,uBACb,SAACC,GAEC,IAAIC,EAAyB,GACzB4hB,EAAY,EAGhB,GAFA5hB,EAAiB,uBAAOA,GAAP,aAA6BD,IAExB,GAAlBN,EAAQnmC,OAAa,CAEvB,IAFwB,IAAD,WAEdsC,GAEL6jC,EAAQU,WACN,SAACC,GAAD,OACEA,EAAG9iC,KAAK2kB,gBACR+d,EAAkBpkC,GAAG0B,KAAK2kB,kBACzB,IAEL2/B,GAAwB,EAOxB7hB,EAAcM,OACZN,EAAcrlC,QAAQslC,EAAkBpkC,IACxC,KAjBGA,EAAIokC,EAAkB1mC,OAAS,EAAGsC,GAAK,EAAGA,IAAM,EAAhDA,GAsBLgmD,EAAY,GACdC,IAAMC,SAAQ,kBACZ,mCACE,gCACGL,EAAS,GAAGvjC,KACb,uBACA,iCAAS0jC,IACRH,EAAS,IAAIvjC,aAQxBwhB,EAAW,GAAD,oBAAKD,GAAL,aAAiBM,OAE7B,CAACN,IAMH,EAAwCa,aAAY,CAAET,WAA9CU,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAGhBC,EAAa,SAACC,GAAD,OAAe,WAChCqhB,KAAKj4B,KAAK,CAERpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUuxB,EAAS,IAAIvjC,KAAO,WACnC0E,MAAK,SAACuH,GACP,GAAIA,EAAOC,YAAa,CACtB,IAAMwW,EAAQ,aAAOnB,GACrBmB,EAASP,OAAOO,EAASlmC,QAAQgmC,GAAO,GACxChB,EAAWkB,GACXjoC,QAAQC,IAAI,mBAAoBgoC,EAAStnC,QAClB,GAAnBsnC,EAAStnC,QAEXX,QAAQC,IACN,oEASJwE,EAAQqiC,EAAQllC,KAAI,SAACmmC,GAAD,OACxB,6BACE,eAACpX,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,CAAK2I,GAAI,EAAG/R,UAAU,gBAAtB,SACGugB,EAAKpjC,OAER,cAACisB,GAAA,EAAD,CAAK2I,GAAI,EAAT,SACE,wBACEj2B,MAAOwlD,EAAS,GAAGvjC,KACnBmF,QAASod,EAAWC,GACpBvgB,UAAU,oBAHZ,SAKE,cAAC,KAAD,CAAiB6F,KAAM8a,KAAY3gB,UAAU,yBAX5CugB,EAAKpjC,SAmBhB,OACE,qBAAK6iB,UAAU,cAAf,SACE,0BAASA,UAAU,6BAAnB,UACE,kDAASogB,EAAa,CAAEpgB,UAAW,sBAAnC,cACE,sCAAWqgB,MACX,uBAAMrgB,UAAU,GAAhB,UACE,mBAAGA,UAAU,+BAAb,SAA6CshC,EAAS,GAAGvjC,OACzD,mBAAGiC,UAAU,qCAAb,SACGshC,EAAS,GAAGvjC,cAInB,uBAAOiC,UAAU,mBAAjB,SAEE,6BAAK/iB,WAQf,IA6FM4jC,EAAsB,WAC1B,GAAIxB,EAAYlmC,OAAS,EAAG,CAC1B,IAAMg9B,EAAW,IAAI+L,SAErB/L,EAASgM,OAAO,UAAW,OAE3B9C,EAAYjlC,KAAI,SAACV,GAEfy8B,EAASgM,OAAO,QAASzoC,EAAGA,EAAEyD,SAGhC3E,QAAQC,IACN,kFAEFD,QAAQC,IAAI,aAAc09B,EAAS0rB,OAAO,UAE1CH,IAAMC,SAAQ,kBACZ,qCACE,8BAAML,EAAS,IAAIvjC,OACnB,qBAAKiE,wBAAyB,CAAEC,OAAQq/B,EAAS,IAAIvjC,cAQ3DyjC,GAAkB,IAOpB,OACE,qCACE,sBAAKxhC,UAAU,WAAf,UACE,cAACmJ,GAAA,EAAD,UACE,cAACC,GAAA,EAAD,CAAK2I,GAAI,GAAI/R,UAAU,UAAvB,SACE,iCACE,cAAC,SAAD,CACEoD,KAAK,SACL0+B,UAAU,YACV5+B,QAxIS,WACrB0+B,KAAKj4B,KAAK,CAERpJ,KAAM,GACNsF,KAAM,WACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,KACnBiG,iBAAkB,KAElB7L,MAAO,MACP+L,KAAM,QAAUuxB,EAAS,IAAIvjC,KAAO,WACnC0E,MAAK,SAACuH,GACHA,EAAOC,aACTsV,EAAW,QA0HHvf,UAAU,WACV9kB,SAA6B,IAAnBokC,EAAQnmC,OALpB,SAOE,+BAAOmoD,EAAS,GAAGvjC,SARvB,OAWE,cAAC,SAAD,CACE+jC,UAAU,YACV5+B,QA5HM,WAClBs+B,GAAkB,GAClBpiB,EAAU,GACVC,EAAc,GACdG,EAAgB,IAChBH,EAAW,aAAOC,GAWlBkiB,GAAkB,GAEdpiB,EAAQjmC,OAAS,EAEnByoD,KAAKj4B,KAAK,CACRpJ,KAAM,GACNsF,KAAM,OACN6J,kBAAkB,EAClB7F,mBAAoB,UACpBiG,kBAAmB,OACnBlG,kBAAmB,YACnBiG,iBAAkB,WAElB7L,MAAO,MACP+L,KACE,QACAuxB,EAAS,GAAGvjC,KACZ,YACAqhB,EAAQjmC,OACR,YACAmoD,EAAS,IAAIvjC,KACb,YACAujC,EAAS,IAAIvjC,KACb,YACAujC,EAAS,IAAIvjC,KACb,WACD0E,MAAK,SAACuH,GACP,GAAIA,EAAOC,YAAX,CACEu3B,GAAkB,GAClB,IAAK,IAAIz4C,EAAIq2B,EAAQjmC,OAAS,EAAG4P,GAAK,EAAGA,IACvCs2B,EAAYa,OAAOd,EAAQr2B,GAAG63B,IAAK,GAErCrB,EAAWF,GACXG,EAAgBJ,GAChByB,QAPF,CASE,IAAK,IAAI93B,EAAIq2B,EAAQjmC,OAAS,EAAG4P,GAAK,EAAGA,IACvCs2B,EAAYa,OAAOd,EAAQr2B,GAAG63B,IAAK,GAErCrB,EAAWF,QAOfmiB,GAAkB,GAClBjiB,EAAWF,GACXG,EAAgBJ,GAChBtW,YAAW,WACT+X,MACC,OA0DO7gB,UAAU,oBACV9kB,SAA6B,IAAnBokC,EAAQnmC,OAJpB,SAME,+BAAOmoD,EAAS,GAAGvjC,SAjBvB,sBAuBJ,cAACoL,GAAA,EAAD,CAAKnJ,UAAU,YAAf,SACE,cAACoJ,GAAA,EAAD,CAAK2I,GAAI,GAAT,SACE,cAAC0N,EAAD,WAKL8hB,EAAiB,cAACH,GAAD,IAAiB,QC3W1B,SAAS3B,KAgBtB,OACE,sBAAMz/B,UAAU,4BAAhB,UACE,sDACA,sBAAKA,UAAU,uBAAf,UACE,uBACA,cAAC,GAAD,IACA,0BAEF,0BCxCN8C,IAAcA,IAAY,yBAAyB,WAC/C,OAAOoqC,KAAK9D,KAAK,0BAA2B,0CAC5C,SAAS/vD,GACL,GAAGA,GAASA,EAAMF,OAAO,EAAE,CACvB,IAAMg0D,EAAc9zD,EAAM4E,UAAU,EAAE,GACtC,OAAOkvD,IAAiBA,EAAa1yD,cAEzC,OAAO,QAIfqoB,IAAcA,IAAY,SAAS,WAC/B,OAAOoqC,KAAK9D,KAAK,QAAS,sCAC1B,SAAS/vD,GACL,QAAGA,GAASA,EAAMF,OAAO,KAChB,4CAA4CiwD,KAAK/vD,KAAgD,IAAtCA,EAAM+zD,YAAY,yBAO9FtqC,IAAcA,IAAY,UAAU,WAChC,OAAOoqC,KAAK9D,KAAK,SAAU,yBAC3B,SAAS/vD,GACL,QAAGA,GAASA,EAAMF,OAAO,IACT,IAAIk0D,OAAO,gBACZjE,KAAK/vD,UAO5BypB,IAAcA,IAAY,WAAW,WACjC,OAAOoqC,KAAK9D,KAAK,UAAW,0BAC5B,SAAS/vD,GACL,QAAGA,GAASA,EAAMF,OAAO,IACT,IAAIk0D,OAAO,YACZjE,KAAK/vD,UAO5BypB,IAAcA,IAAY,UAAU,WAChC,OAAOoqC,KAAK9D,KAAK,SAAU,kCAC3B,SAAS/vD,GACL,QAAGA,GAASA,EAAMF,OAAO,GACT,gBAARE,SCVhB,IAqDei0D,GArDH,WACR,IAAMC,EAAS,CAKX,CAACrkD,KAAM,QAASskD,UAAWxsC,EAAYysC,OAAO,GAC9C,CAACvkD,KAAM,yBAA0BskD,UAAWxsC,EAAYysC,OAAO,GAC/D,CAACvkD,KAAM,aAAcskD,UAAW/R,GAAWgS,OAAO,GAClD,CAACvkD,KAAM,uBAAwBskD,UAAW/R,GAAWgS,OAAO,GAC5D,CAACvkD,KAAM,SAAUskD,UAAWnP,GAAOoP,OAAO,GAG1C,CAACvkD,KAAM,8BAA+BskD,UAAW/N,GAASgO,OAAO,GACjE,CAACvkD,KAAM,0BAA2BskD,UAAWE,GAAUD,OAAO,GAC9D,CAACvkD,KAAM,+BAAgCskD,UAAWG,GAAUF,OAAO,GACnE,CAACvkD,KAAM,kCAAmCskD,UAAWI,GAAUH,OAAO,GACtE,CAACvkD,KAAM,8BAA+BskD,UAAWK,GAAUJ,OAAO,GAClE,CAACvkD,KAAM,sCAAuCskD,UAAWM,GAAWL,OAAO,GAC3E,CAACvkD,KAAM,uCAAwCskD,UAAWO,GAAUN,OAAO,GAC3E,CAACvkD,KAAM,kCAAmCskD,UAAWQ,GAAUP,OAAO,GACtE,CAACvkD,KAAM,0BAA2BskD,UAAWS,GAAUR,OAAO,GAC9D,CAACvkD,KAAM,4BAA6BskD,UAAWU,GAAUT,OAAO,GAChE,CAACvkD,KAAM,6BAA8BskD,UAAWW,GAAUV,OAAO,GACjE,CAACvkD,KAAM,wBAAyBskD,UAAWY,GAAWX,OAAO,GAC7D,CAACvkD,KAAM,8BAA+BskD,UAAWa,GAAWZ,OAAO,GACnE,CAACvkD,KAAM,4BAA6BskD,UAAWc,GAAWb,OAAO,GACjE,CAACvkD,KAAM,sCAAuCskD,UAAWe,GAAWd,OAAO,GAE3E,CAACvkD,KAAM,IAAKskD,UAAWxsC,EAAYysC,OAAO,GAC1C,CAACvkD,KAAM,IAAKskD,UAAWxsC,EAAYysC,OAAO,GAC1C,CAACvkD,KAAM,IAAKskD,UAAWxsC,IAErBwtC,EAAW1lD,2hBAAY2lD,oBAE7B,OACI,sBAAKzuC,UAAU,GAAf,UACI,cAAC,IAAD,IAEA,cAAC,IAAD,CAAewuC,SAAUA,EAAzB,SACE,cAAC,IAAD,UACGjB,EAAOnzD,KAAI,SAACs0D,GAAD,OACV,cAAC,IAAD,CAAwBxlD,KAAMwlD,EAAMxlD,KAAMukD,MAAOiB,EAAMjB,MAAvD,SACE,cAACiB,EAAMlB,UAAP,KADUkB,EAAMxlD,aAMxB,cAAC,IAAD,CAAgBud,SAAS,YAAYkkC,MAAM,gBCrFvDgE,IAASC,OACP,cAAC,IAAM3B,WAAP,UACE,cAAC,GAAD,MAEF/kC,SAASC,eAAe,W","file":"static/js/main.eb148d2f.chunk.js","sourcesContent":["/*Recurso: Authenticate - Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n Auth //usuarios de prueba\r\n AuthLDAP //usuarios registrados en ldap\r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst authenticateStore = create((set:any, get:any) => ({\r\n\r\n objErrorAuthenticateStore: { hasError: false, url:'', body:'', recurso:'authenticate', componente:'', idresul: 0, desresul:'', menu:''},//se llena con la información del api si éste tiene error\r\n\r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI\r\n limpiaobjErrorAuthenticateStore: () => {\r\n let paso = { hasError: false, url:'', body:'', recurso:'authenticate', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorAuthenticateStore: paso } );\r\n //console.log('limpiaobjErrorAuthenticateStore (sale) - objErrorAuthenticateStore: ', get().objErrorAuthenticateStore);\r\n },\r\n\r\n //*Error en api: entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaobjErrorAuthenticateStore: async (responseAPI:any, h:any, h2:any, b:any, c:any, m:any) => {\r\n //alert('authenticateStore - generaobjErrorAuthenticateStore:');\r\n //console.log('****generaobjErrorAuthenticateStore (entra): ', responseAPI);\r\n //console.log('*generaobjErrorAuthenticateStore (entra): h: ', h , ' h2: ', h2 , ' b: ', b , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:b, recurso:'authenticate', componente:c, idresul:0, desresul:'', menu:m }\r\n \r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else {\r\n paso.url=responseAPI.config.url;\r\n if (responseAPI.data!=\"\"){\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n if (responseAPI.status==404)\r\n paso.desresul= \"El usuario no existe\"//responseAPI.statusText; \r\n else\r\n paso.desresul= responseAPI.statusText; \r\n }\r\n }\r\n set( { objErrorAuthenticateStore: paso } );\r\n console.log('::authenticateStore - generaobjErrorAuthenticateStore (sale) - objErrorAuthenticateStore: ', get().objErrorAuthenticateStore);\r\n },\r\n\r\n authStore: [], //guarda response.data de la tarea: Auth\r\n usuarioStore: \"\", //guarda: el usuario captado en frontend\r\n tokenStore: \"\", //guarda: \"bearer\" + response.data.value (token) para asignar a los api's \r\n rolsStore: [], //extraemos de response.data.rols y generamos el insumo de roles para el menu\r\n cnnStore:\"\", //guarda el datos de cnn (que trae el bd ip que ocupo en Acerca del sitio)\r\n\r\n //*Tarea: Auth o AuthLap, guardo el resultado de api en elementos store // se ejecuta al entrar en Autentificar - botón: Iniciar sesion\r\n guardaAuthStore: async (responseAPI:any, u:any) => { \r\n //alert('authenticate.store - guardaAuthStore' );\r\n //console.log('guardaAuthStore - responseAPI:', responseAPI)\r\n //set( { authResponseStore: responseAPI } );\r\n \r\n set( { authStore: responseAPI.data } );\r\n set( { tokenStore: \"bearer \" + responseAPI.data.value } );\r\n set( { usuarioStore: u } );\r\n if ( responseAPI.data.rols.length == 0)\r\n set( { rolsStore: [0]} );\r\n else\r\n set( { rolsStore: get().authStore.rols } );\r\n let paso = responseAPI.data.cnn[1].valor;\r\n set( { cnnStore: paso } );\r\n //console.log ('authResponseStore: ', get().authResponseStore );\r\n //console.log ('::authStore: ', get().authStore );\r\n //console.log ('::usuarioStore: ', get().usuarioStore );\r\n //console.log ('::tokenStore: ', get().tokenStore );\r\n //console.log ('::rolsStore: ', get().rolsStore );\r\n console.log ('::cnn: ', get().cnnStore );\r\n }\r\n \r\n}));\r\n\r\nexport default authenticateStore;\r\n","/*Recurso: Users - Servicio de lectura del API: información del usuario\r\n Tareas:\r\n GetUserAuth // datos del usuario //usuado en Encabezado - PerFil\r\n SearchUserLDAP\r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst usersStore = create((set:any, get:any) => ({\r\n\r\n objErrorUsersStore: { hasError: false, url: '', body:'', recurso:'users', componente:'', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n\r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI\r\n limpiaObjErrorUsersStore: () => {\r\n //alert('usersStore - limpiaObjErrorUsersStore:');\r\n let paso = { hasError: false, url:'', body:'', recurso:'users', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorUsersStore: paso } );\r\n //console.log('usersStore - limpiaObjErrorUsersStore (sale) - objErrorUsersStore: ', get().objErrorUsersStore);\r\n },\r\n \r\n //*Error en api: entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorUsersStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //alert('usersStore - generaObjErrorUsersStore:');\r\n console.log('*generaObjErrorUsersStore (entra): ', responseAPI);\r\n console.log('*generaObjErrorUsersStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'users', componente:c, idresul:0, desresul:'', menu:m }\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n console.log('1');\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n //paso.idresul=responseAPI.status;\r\n //paso.desresul= responseAPI.statusText;\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n \r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n set( { objErrorUsersStore: paso } );\r\n console.log('*generaObjErrorUsersStore (sale) - objErrorUsersStore: ', get().objErrorUsersStore);\r\n },\r\n\r\n getUserAuthStore: [], //guarda response.data\r\n\r\n //*Tarea: GetUserAuthStore, guardo el resultado de api en elementos store\r\n // se ejecuta al entrar del Encabezado - Icono Usario o identificación del Usuario - Menu-Pefil en un useEffect, \r\n // carga los datos del usuario\r\n guardaGetUserAuthStore: async (responseAPI:any) => { \r\n //console.log('guardaGetUserAuthStore - responseAPI:', responseAPI)\r\n set( { getUserAuthStore: responseAPI.data } );\r\n //console.log ('getUserAuthStore: ', get().getUserAuthStore )\r\n },\r\n \r\n usuariosLDAPStore: [], //guarda response.data\r\n\r\n //*Tarea: SearchUserLDAP, guardo el resultado de api en elementos store\r\n // se ejecuta desde Configuración - Alta de usuarios proponentes - Editar - opción Usuarios especificiso - input + botón Buscar\r\n guardaSearchUserLDAPStore: async (responseAPI:any) => { \r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { usuariosLDAPStore: responseAPI.item} );\r\n let pos = 0;\r\n let dato = '';\r\n let correo = '';\r\n get().usuariosLDAPStore.map((u:any, indexU:any) => {\r\n correo = '';\r\n dato = '';\r\n dato = u.email;\r\n pos = dato.indexOf('@');\r\n correo = u.email.substr(0, pos );\r\n u.email = correo.toUpperCase()\r\n }); \r\n \r\n //console.log('usuariosLDAPStore:', get().usuariosLDAPStore);\r\n return(get().usuariosLDAPStore);\r\n }\r\n else {\r\n get().generaObjErroUsersStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'users.store-guardaSearchUserLDAPStore')\r\n }\r\n }, \r\n\r\n}));\r\n\r\nexport default usersStore;\r\n","/*Recurso: Catalogs - Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n GetAllOrigin //Origen del cambio //*Propuesta\r\n GetAllProcessByFrequency //Procesos por frecuencia //*Propuesta \r\n GetAllDecision //Decisión //*RP *RD \r\n GetAllQuality //Principios //*RP\r\n GetAllCycles //Ciclos //*RP\r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst catalogsStore = create((set:any, get:any) => ({\r\n \r\n objErrorCatalogsStore: { hasError: false, url: '', body:'', recurso:\"catalogs\", componente:'', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n \r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI \r\n limpiaObjErrorCatalogsStore: () => {\r\n let paso = { hasError: false, url:'', body:'', recurso:'catalogs', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorCatalogsStore: paso } );\r\n //console.log('catalogsStore - limpiaObjErrorCatalogsStore (sale) - objErrorCatalogsStore: ', get().objErrorCatalogsStore);\r\n },\r\n \r\n //*Error en api // entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorCatalogsStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //console.log('*generaObjErrorCatalogsStore (entra): ', responseAPI);\r\n //console.log('*generaObjErrorCatalogsStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'catalogs', componente:c, idresul:0, desresul:'', menu:m };\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!='' && responseAPI.data!=null){\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n set( { objErrorCatalogsStore: paso } );\r\n console.log('::catalogsStore - generaObjErrorCatalogsStore (sale) - objErrorCatalogsStore: ', get().objErrorCatalogsStore);\r\n },\r\n\r\n catOrigenesStore: [], //response.data de la tarea:GetAllOriginStore + elementos de uso en el front\r\n\r\n //*Tareas: GetAllOriginStore // *Propuesta //*RP // catálogo de origen del cambio\r\n guardaGetAllOriginStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllOriginStore - responseAPI:', responseAPI)\r\n set ( { catOrigenesStore: responseAPI } )\r\n\r\n get().catOrigenesStore.map((c:any) => {\r\n c.activo=false;\r\n c.disabled=false;\r\n c.specification='';\r\n });\r\n //console.log (':::catOrigenesStore: ', get().catOrigenesStore );\r\n return(get().catOrigenesStore);\r\n },\r\n\r\n catProcesosStore: [], //response.data de la tarea: GetAllProcessByFrequencyStore + elementos de uso en el front\r\n \r\n //*Tareas: GetAllProcessByFrequency // *Propuesta //*RP // catálogo de procesos por frecuencia\r\n guardaGetAllProcessByFrequencyStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllProcessByFrequencyStore - responseAPI:', responseAPI)\r\n var _ = require('underscore');\r\n let catPaso:any = [];\r\n catPaso = responseAPI;\r\n \r\n //preparamos catProcesosStore con lo necesario para visualizar en front\r\n let i = 0;\r\n catPaso.map((p:any) => {\r\n p.processname = p.processname.trim().replace(/\\s\\s+/g, ' ');\r\n p.activo=false;\r\n p.disabled=false;\r\n p.title = \"\";\r\n\r\n if (p.assignedroles.length == 0) { p.ordena = 2} // el ordena es para agrupar primero los procesos donde el usuario tenga rol de RP o RD y pintarlos de azul en la lista\r\n else {\r\n for (i=0; i < p.t_userxrol.length; i++){\r\n switch (p.t_userxrol[i] ) {\r\n case 'RP':\r\n p.ordena = 1;\r\n p.title= \"Proceso con rol de Responsable de Proceso\";\r\n p.clasexEstatus = \"background-color-azul6 noBR\";\r\n break;\r\n case 'RD':\r\n p.ordena = 1;\r\n p.title = \"Proceso con rol de Responsable de Diseño\";\r\n p.clasexEstatus = \"background-color-azul6 noBR\";\r\n break;\r\n case 'US': \r\n p.ordena = 2;\r\n p.title = \"Proceso con rol de Usuario estratégico\"; \r\n break;\r\n case 'PC': \r\n p.ordena = 2;\r\n p.title = \"Proceso con rol de proponente\"; break;\r\n default: \r\n p.ordena = 2;\r\n p.title = \"Proceso con rol de proponente\"; break;\r\n }\r\n } \r\n if (p.t_userxrol.length > 1) \r\n p.title =\"Proceso con rol de Responsable de Proceso y Responsable de Diseño\";\r\n else {\r\n p.clasexEstatus = \" noBR\";\r\n p.title =\"Proceso sin rol específico\";\r\n }\r\n }\r\n let paso = p.state_process;\r\n p.estatusProceso = paso.pt_state_description;\r\n p.clasexEstatusIcono = \"\";\r\n switch ( p.state_process.pt_state ) {\r\n case 1: p.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: p.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: p.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; p.disabled=true; break;\r\n case 4: p.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: p.clasexEstatusIcono= \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n })\r\n let catPaso2 = _.sortBy(catPaso, 'ordena');\r\n set ( { catProcesosStore: catPaso2})\r\n //console.log (':::catProcesosStore: ', get().catProcesosStore );\r\n return(get().catProcesosStore);\r\n },\r\n\r\n catDecisionesStore: [], ///response.data de la tarea: GetAllDecision + elementos de uso en el front\r\n\r\n //*Tareas: GetAllDecision //*RP *RD\r\n guardaGetAllDecisionStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllDecisionStore - responseAPI:', responseAPI)\r\n set ( { catDecisionesStore: responseAPI } )\r\n\r\n get().catDecisionesStore.map((d:any) => {\r\n d.activo=false;\r\n d.disabled=false;\r\n d.visible=false;\r\n switch(d.id){\r\n case 1: \r\n d.articulo='';\r\n d.commentary=''; \r\n d.files=null; \r\n d.cycle=null; \r\n break;\r\n case 2: \r\n d.articulo='(Art. 9)'; \r\n d.commentary=null; \r\n d.files=null; \r\n d.cycle={ id: 0, name: '', state_cycle: null, pt_md: null }; \r\n break;\r\n case 3: \r\n d.articulo='(Art. 19)'; \r\n d.commentary=null; \r\n d.files=[]; \r\n d.cycle={ id: 0, name: '', state_cycle: null, pt_md: null }; \r\n break;\r\n }\r\n });\r\n //console.log (':::catDecisionesStore: ', get().catDecisionesStore );\r\n return(get().catDecisionesStore);\r\n },\r\n \r\n catPrincipiosStore: [], ///response.data de la tarea: GetAllQuality + elementos de uso en el front\r\n\r\n //*Tareas: GetAllQuality //*RP\r\n guardaGetAllQualityStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllDecisionStore - responseAPI:', responseAPI)\r\n set ( { catPrincipiosStore: responseAPI } )\r\n\r\n get().catPrincipiosStore.map((p:any) => {\r\n p.activo=false;\r\n p.disabled=false;\r\n p.visible=false;\r\n p.hitId=0;\r\n p.hitName=\"\";\r\n p.hit= { \"id\": 0, \"name\": \"\"};\r\n p.hitOpciones= [\r\n { \"id\": 1, \"name\": \"Incrementa\", \"activo\":false},\r\n { \"id\": -1, \"name\": \"Decrementa\", \"activo\":false}];\r\n //{ \"id\": 0, \"name\": \"Sin especificar\", \"activo\":false, \"visible\":false} // ojo ya viene con sent=true y nos da directamente la información, no se selecciona\r\n });\r\n //console.log (':::catPrincipiosStore: ', get().catPrincipiosStore );\r\n return(get().catPrincipiosStore);\r\n },\r\n\r\n catCiclosStore: [], ///response.data de la tarea: GetAllQuality + elementos de uso en el front\r\n\r\n //*Tareas: GetAllCycles //*RP // recibe el response.data y lo guarda en variable store: catPruebasStore\r\n guardaGetAllCyclesStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllDecisionStore - responseAPI:', responseAPI)\r\n set ( { catCiclosStore: responseAPI } )\r\n let met = \"\";\r\n get().catCiclosStore.map((p:any) => {\r\n p.activo=false;\r\n p.disabled=false;\r\n p.visible=false;\r\n })\r\n //console.log (':::catCiclosStore: ', get().catCiclosStore );\r\n return(get().catCiclosStore);\r\n },\r\n\r\n catPruebasStore: [], ///response.data de la tarea: GetAllProof + elementos de uso en el front \r\n\r\n //*Tareas: GetAllProof //*RD\r\n guardaGetAllProofStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllProofStore - responseAPI:', responseAPI)\r\n set ( { catPruebasStore: responseAPI } )\r\n get().catPruebasStore.map((p:any) => {\r\n p.activo=false;\r\n p.nombreCorto= (p.name.length > 42) ? p.name.substring(0,42) + '...' : p.name; \r\n p.descripcion = '';\r\n //p.otraTexto = '';\r\n });\r\n //console.log (':::catPruebasStore: ', get().catPruebasStore );\r\n return(get().catPruebasStore);\r\n },\r\n \r\n}));\r\n\r\nexport default catalogsStore;\r\n","/*Recurso: Proposals - Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n GetSummarybyUser \r\n GetDetailbyUser \r\n InsertbyUser \r\n UpdatebyUser\r\n DeletebyUser\r\n SendbyUser \r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst proposalsStore = create((set:any, get:any) => ({\r\n \r\n objErrorProposalsStore: { hasError: false, url:'', body:'', recurso:'proposals', componente:'', idresul: 0, desresul:'', menu:'' }, //se llena con la información del api si éste tiene error\r\n\r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI\r\n limpiaObjErrorProposalsStore: () => { \r\n let paso = { hasError: false, url:'', body:'', recurso:'proposals', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorProposalsStore: paso } );\r\n //console.log('limpiaObjErrorProposalsStore (sale) - objErrorProposalsStore: ', get().objErrorProposalsStore);\r\n },\r\n\r\n //*Error en api: entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorProposalsStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => { \r\n //alert('proposalsStore - generaObjErrorProposalsStore:');\r\n //console.log('****generaObjErrorProposalsStore (entra): ', responseAPI);\r\n //console.log('*generaObjErrorProposalsStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'proposals', componente:c, idresul:0, desresul:'', menu:m }\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n set( { objErrorProposalsStore: paso } );\r\n console.log('***generaobjErrorProposalsStoreStore (sale) - objErrorProposalsStore: ', get().objErrorProposalsStore);\r\n },\r\n\r\n propuestasStore: [], //response de getSummarybyUserStore + elementos de uso en el front\r\n\r\n limpiaPropuestasStore: async (responseAPI:any) => {\r\n set( { propuestasStore: [] } );\r\n //console.log('0. limpiaPropuestasStore - propuestasStore:', get().propuestasStore)\r\n },\r\n\r\n //*Tarea: GetSummarybyUser // se ejecuta al entrar en Propuesta dentro de useEffect: Carga las propuestas existetes dentro propuestasStore mas los elementos que se ocupan para el front\r\n guardaGetSummarybyUserStore: async (responseAPI:any) => { //recibo response.data\r\n //console.log('guardaGetSummarybyUserStore - responseAPI:', responseAPI)\r\n set( { propuestasStore: [] } );\r\n set( { propuestasStore: responseAPI } );\r\n let propuestaDetalles:any = {};\r\n\r\n //preparamos propuestaStore con lo necesario para visualizar en front\r\n get().propuestasStore.map((p:any, index:any) => {\r\n propuestaDetalles = { \r\n id: 0, folio:'', description:'', createdAt:'', sentAt:null, sent:false, user:{}, origin:[], processxfrequency: [],\r\n abierto: false, disabled:false, fecha:'', estatusTexto: '',\r\n btnGuardar:true, btnEnviar:false, btnEliminar:false, \r\n miCatOrigenes: [],\r\n miCatProcesos: []\r\n };\r\n p.abierto = false; //por omisión entra cerrado\r\n p.disabled = (p.sent) ? true : false;\r\n p.eliminado = false;\r\n p.estatusTexto = (p.sent) ? \"Enviada\" : \"No enviada\";\r\n p.fecha = p.createdAt.substring(0,10);\r\n p.nombreCorto= (p.description.length > 50) ? p.description.substring(0,10) + '...' : p.description; \r\n \r\n p.propuestaDetalles = propuestaDetalles;\r\n });\r\n \r\n //console.log ('1.....propuestasStore: ', get().propuestasStore );\r\n return(get().propuestasStore);\r\n },\r\n\r\n propuestaNvaStore: {},\r\n\r\n //*Preparamos el objeto por si asignan una propuesta nueva //se activa en Propuesta - botón: Agregar propuesta de cambio \r\n agregaPropuestaNvaStore: (catO:any, catP:any) => { \r\n //console.log('catO:',catO, 'catP:',catP);\r\n let date = new Date();\r\n let day = date.getDate();\r\n let month = date.getMonth() + 1;\r\n let year = date.getFullYear();\r\n let fecha = '';\r\n if (month < 10) { fecha= `${year}-0${month}-${day}` }\r\n else { fecha= `${year}-${month}-${day}` };\r\n get().propuestaNvaStore= { \r\n id: 0, folio:'Nuevo', description: '', createdAt: date, sentAt: null, sent: false, \r\n abierto: true, disabled:false, eliminado: false, estatusTexto: 'No enviada', fecha: fecha, nombreCorto: '', \r\n propuestaDetalles:{ \r\n id: 0, folio:'Nuevo', description: '', createdAt: date, sentAt: null, sent: false, user:{}, origin: [], processxfrequency: [],\r\n abierto: true, disabled:false, fecha:fecha, estatusTexto: 'No enviada',\r\n btnGuardar:true, btnEnviar:false, btnEliminar:false,\r\n miCatOrigenes: catO,\r\n miCatProcesos: catP\r\n }\r\n };\r\n //console.log (':::agregaPropuestaNvaStore - propuestaNvaStore: ', get().propuestaNvaStore );\r\n },\r\n \r\n propuestaDetallesVacia: { \r\n id: 0, folio:'', description:'', createdAt:'', sentAt:null, sent:false, user:{}, origin:[], processxfrequency: [],\r\n abierto: false, disabled:false, fecha:'', estatusTexto: 'No enviada',\r\n btnGuardar:true, btnEnviar:false, btnEliminar:false, \r\n miCatOrigenes: [],\r\n miCatProcesos: []\r\n }, //formato vacio de getDetailbyUserStore + elementos de uso en el front lo asignamos en guardaGetSummarybyUserStore\r\n \r\n propuestaDetallesStore: {}, //recibe respuesta de la tarea getDetailbyUserStore + elementos de uso en el front\r\n \r\n //*Tarea: GetSummarybyUser, accesa a los detalles de la propuesta existente // se ejecuta al entrar en Propuesta al seleccionar el panel x propuesta // carga en propuestasStore el elemento seleccionado de detalle\r\n guardaGetDetailbyUserStore: async (responseAPI:any, id:any, catO:any, catP:any, dondeViene:any) => { //recibo response.data\r\n //console.log('.... guardagetdetailbyuser -responseAPI:', responseAPI)\r\n //console.log('.... guardagetdetailbyuser -catP:', catP)\r\n var _ = require('underscore');\r\n let activaBtnEnviar = true; //aquí vamos captando si esta completa la plantila para activar el botón enviar desde que abre\r\n\r\n if (responseAPI.ret==1) { //sin error\r\n set( { propuestaDetallesStore: get().propuestaDetallesVacia } )\r\n set( { propuestaDetallesStore: responseAPI.item } )\r\n switch (dondeViene){\r\n case 'Propuesta': \r\n //console.log ('guardaGetDetailbyUserStore - Propuestas');\r\n\r\n let propuestaDetalles = get().propuestaDetallesVacia;\r\n propuestaDetalles = responseAPI.item;\r\n \r\n if ( propuestaDetalles.sent ) { //solo para visualización\r\n activaBtnEnviar = false;\r\n //CatO\r\n propuestaDetalles.miCatOrigenes = propuestaDetalles.origin;\r\n propuestaDetalles.miCatOrigenes.map((o:any) => {\r\n o.activo = true;\r\n o.disabled = true;\r\n }); \r\n //CatP \r\n propuestaDetalles.miCatProcesos = propuestaDetalles.processxfrequency;\r\n propuestaDetalles.miCatProcesos.map((p:any) => {\r\n p.activo = true;\r\n p.disabled = true;\r\n });\r\n //console.log('.............propuestaDetalles', propuestaDetalles); \r\n }\r\n else { //puede modificar, tenemos que mandar catálogos completos y con la inf. que traiga del api \r\n activaBtnEnviar = true;\r\n //console.clear();\r\n //Descripcion\r\n if (propuestaDetalles.description == null || propuestaDetalles.description== '') { activaBtnEnviar = false}\r\n //CatO\r\n propuestaDetalles.miCatOrigenes = catO;\r\n let pasoCatO:any = [];\r\n pasoCatO = _.pluck(propuestaDetalles.origin, 'id');\r\n //console.log ('pasoCatO.length:: ',pasoCatO.length);\r\n //console.log ('pasoCatO:: ', pasoCatO)\r\n if (pasoCatO.length > 0) {\r\n propuestaDetalles.miCatOrigenes.map((o:any) => {\r\n o.specification = '';\r\n pasoCatO.map((po:any, indexCatO:any) => {\r\n if (o.id==po) {\r\n o.activo = true;\r\n o.disabled = false;\r\n o.specification = propuestaDetalles.origin[indexCatO].specification\r\n if (o.specification == null || o.specification== '') { activaBtnEnviar = false}\r\n }\r\n });\r\n }); \r\n }\r\n else {\r\n propuestaDetalles.miCatOrigenes = catO;\r\n activaBtnEnviar = false;\r\n }\r\n //console.log('1.............activaBtnEnviar', activaBtnEnviar); \r\n //Procesos que potencialmente serán modificados\r\n //CatP\r\n propuestaDetalles.miCatProcesos = catP;\r\n let pasoCatP:any = [];\r\n pasoCatP = _.pluck(propuestaDetalles.processxfrequency, 'id');\r\n //console.log ('pasoCatP.length:: ',pasoCatP.length);\r\n //console.log ('pasoCatP:: ', pasoCatP)\r\n if (pasoCatP.length > 0) {\r\n propuestaDetalles.miCatProcesos.map((p:any) => {\r\n pasoCatP.map((pp:any, indexCatP:any) => {\r\n if (p.id==pp){ \r\n p.activo = true;\r\n p.disabled = false;\r\n }\r\n });\r\n }); \r\n }\r\n else { activaBtnEnviar = false }\r\n //console.log('2.............activaBtnEnviar', activaBtnEnviar); \r\n \r\n //console.log('.............pasoCatP.length', pasoCatP.length); \r\n //console.log('.............propuestaDetalles', propuestaDetalles); \r\n //Procesos que potencialmente serán modificados\r\n //console.log('.............propuestaDetalles.processxfrequency.length', propuestaDetalles.processxfrequency.length); \r\n if (propuestaDetalles.processxfrequency.length==1 && propuestaDetalles.processxfrequency[0].id==null) { activaBtnEnviar = false }\r\n //console.log('3.............activaBtnEnviar', activaBtnEnviar); \r\n ////if (pasoCatP.length==0) { activaBtnEnviar = false }\r\n\r\n }\r\n propuestaDetalles.btnGuardar = ( propuestaDetalles.sent ) ? null : false;\r\n propuestaDetalles.btnEnviar = (propuestaDetalles.sent) ? null : activaBtnEnviar;\r\n propuestaDetalles.btnEliminar = ( propuestaDetalles.sent ) ? null : true;\r\n\r\n\r\n //console.log('propuestaDetalles.btnEnviar', propuestaDetalles.btnEnviar);\r\n set( { propuestaDetallesStore: propuestaDetalles } )\r\n get().cambiaPropuestasStore( id, true, get().propuestaDetallesStore, 'guardaGetDetailbyUserStore')\r\n break;\r\n case 'RPContenido': \r\n case 'RDDocumentar':\r\n //console.log ('guardaGetDetailbyUserStore - ResponsableDeProcesoContenido; ', get().propuestaDetallesStore);\r\n let x = get().propuestaDetallesStore.createdAt;\r\n get().propuestaDetallesStore.fecha = x.substring(0,10);\r\n\r\n let paso = get().propuestaDetallesStore;\r\n paso.processxfrequency.map((sp:any) => {\r\n switch (sp.pt_state ) {\r\n case 1: sp.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: sp.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: sp.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: sp.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: sp.clasexEstatusIcono= \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n }); \r\n set( { propuestaDetallesStore: paso } ) \r\n break; \r\n }\r\n //console.log (':::propuestaDetallesStore: ', get().propuestaDetallesStore );\r\n return(get().propuestaDetallesStore);\r\n }\r\n else {\r\n get().generaObjErrorProposalsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'proposals.store-guardaGetDetailbyUserStore')\r\n }\r\n },\r\n \r\n cambiaPropuestasStore: ( id:any, abierto:any, detalle:any, dondeViene:any) => { \r\n //alert('cambiaPropuestasStore - id: ' + id + ' abierto: ' + abierto + ' detalle: '+ detalle + ' dondeViene: ' + dondeViene)\r\n //console.log('cambiaPropuestasStore - id: ', id ,' abierto: ', abierto,' dondeViene: ', dondeViene, ' detalle: ', detalle)\r\n switch (dondeViene){\r\n case 'desmontoPropuesta': \r\n set( { propuestaDetallesStore: [] } )\r\n break;\r\n case 'guardaGetDetailbyUserStore': \r\n get().propuestasStore.map((p:any) => {\r\n if (p.id==id) { \r\n p.propuestaDetalles = detalle;\r\n p.abierto = abierto;\r\n p.description= detalle.description;\r\n } \r\n }); \r\n break;\r\n case 'abreCierraPropuesta': \r\n get().propuestasStore.map((p:any) => {\r\n if (p.id==id) \r\n p.abierto = abierto;\r\n }); \r\n break;\r\n case 'botonCierraPropuesta': \r\n get().propuestasStore.map((p:any) => {\r\n if (p.id==id) \r\n p.abierto = abierto;\r\n }); \r\n break;\r\n case 'botonEnviar': \r\n //console.log ('4:::::::::::::::::::::::id: ', id);\r\n get().propuestasStore.map((p:any) => {\r\n if (p.id==id) { \r\n p.sent = true;\r\n p.estatusTexto = \"Enviada\";\r\n p.btnGuardar = null;\r\n p.btnEnviar = null;\r\n p.btnEliminar = null;\r\n //p.abierto = true;\r\n p.disabled = true;\r\n } \r\n }); \r\n if (id == 0 ) {\r\n get().propuestasStore[0].sent = true;\r\n get().propuestasStore[0].estatusTexto = \"Enviada\";\r\n get().propuestasStore[0].btnGuardar = null;\r\n get().propuestasStore[0].btnEnviar = null;\r\n get().propuestasStore[0].btnEliminar = null;\r\n get().propuestasStore[0].disabled = true;\r\n\r\n let paso = get().propuestaDetallesVacia;\r\n paso = get().propuestasStore[0].propuestaDetalles;\r\n paso.sent = true;\r\n paso.btnGuardar = null;\r\n paso.btnEnviar = null;\r\n paso.btnEliminar = null;\r\n let paso2:any = [];\r\n paso.miCatOrigenes.map((co:any) => {\r\n if (co.activo) { \r\n co.disable = true;\r\n paso2.push(co);\r\n } \r\n }); \r\n paso2 = [];\r\n paso.miCatProcesos.map((cp:any) => {\r\n if (cp.activo) { \r\n cp.disable = true;\r\n paso2.push(cp);\r\n } \r\n }); \r\n paso.miCatProcesos = paso2;\r\n get().propuestasStore[0].propuestaDetalles = paso;\r\n }\r\n break;\r\n case 'recargaPropuestaNva': \r\n get().propuestaNvaStore.abierto = false;\r\n get().propuestasStore[0].abierto = true;\r\n break; \r\n //default: break;\r\n } \r\n //console.log ('4:::::::::::::::::::::::cambiaPropuestasStore- propuestasStore: ', get().propuestasStore );\r\n },\r\n\r\n insertbyUserStore:{},\r\n\r\n //*Tarea: InsertbyUser // entra desde PropuestaNueva - botón: Guardar - cuando la propuesta es nueva\r\n guardaInsertbyUserStore: async (responseAPI:any, bodyAPI:any, pasoProcessxfrequency:any, catO:any, catP:any) => { \r\n console.log('1.:::guardaInsertbyUserStore-propuestasStore:', get().propuestasStore);\r\n //console.log('bodyAPI:', bodyAPI);\r\n //console.log('pasoProcessxfrequency:', pasoProcessxfrequency);\r\n //console.log('catO:', catO);\r\n //console.log('catP:', catP);\r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { insertbyUserStore: responseAPI.rep } );\r\n //console.log('insertbyUser:', get().insertbyUserStore);\r\n \r\n let date = new Date();\r\n let day = date.getDate();\r\n let month = date.getMonth() + 1;\r\n let year = date.getFullYear();\r\n let fecha = '';\r\n if (month < 10) { fecha= `${year}-0${month}-${day}`}\r\n else { fecha= `${year}-${month}-${day}`};\r\n\r\n get().propuestaNvaStore= { \r\n id: get().insertbyUserStore.id, folio: get().insertbyUserStore.folio, description: bodyAPI.description, createdAt: get().insertbyUserStore.createdat, sentAt: null, sent: false, \r\n abierto: true, eliminado: false, estatusTexto: 'No enviada', fecha:fecha, nombreCorto: '', \r\n propuestaDetalles:{ \r\n id: get().insertbyUserStore.id, folio: get().insertbyUserStore.folio, description: bodyAPI.description, createdAt: get().insertbyUserStore.createdat, sentAt: null, sent: false, \r\n user:{}, origin: bodyAPI.origin, processxfrequency: pasoProcessxfrequency,\r\n btnGuardar:false, btnEnviar:false, btnEliminar:false, fecha: fecha, estatusTexto: 'No enviada', \r\n miCatOrigenes: catO,\r\n miCatProcesos: catP\r\n }\r\n };\r\n get().propuestaNvaStore.nombreCorto = (bodyAPI.description.length > 50) ? bodyAPI.description.substring(0,10) + '...' : bodyAPI.description; \r\n \r\n get().propuestasStore.unshift(get().propuestaNvaStore); //agrego la propuesta al arreglo en la primera posición\r\n //set( { propuestaDetallesStore: get().propuestaNvaStore.propuestaDetalles } ) // asignamos a propuesta detalle\r\n \r\n //console.log('2.:::guardaInsertbyUserStore-propuestasStore:', get().propuestasStore);\r\n //console.log('3.:::guardaInsertbyUserStore-propuestaDetallesStore:', get().propuestaDetallesStore);\r\n\r\n return(get().insertbyUserStore);\r\n }\r\n else {\r\n get().generaObjErrorProposalsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'proposals.store-guardaInsertbyUserStore')\r\n }\r\n },\r\n\r\n cambiaPropuestaDetallesStore: ( id:any, detalle:any, dondeViene:any) => { \r\n //alert('cambiaPropuestaDetallesStore - id: ' + id + ' dondeViene: ' + dondeViene)\r\n //console.log('cambiaPropuestaDetallesStore - id: ', id ,' dondeViene: ', dondeViene,' detalle: ', detalle)\r\n switch (dondeViene){\r\n case 'insertbyUserStore': \r\n get().propuestaDetallesStore = detalle;\r\n break;\r\n } \r\n //console.log (':::::cambiaPropuestaDetallesStore- propuestaDetallesStore: ', get().propuestaDetallesStore );\r\n },\r\n \r\n updatebyUserStore:{},\r\n\r\n //*Tarea: UpdatebyUser\r\n //entra desde Propuesta- botón: Guardar - cuando la propuesta es existente\r\n guardaUpdatebyUserStore: async (responseAPI:any, bodyAPI:any, catO:any, catP:any) => { \r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { updatebyUserStore: responseAPI } );\r\n //console.log('updatebyUserStore:', get().updatebyUserStore);\r\n //actualizar el encabezado y propuestaDetalles de propuestasStore\r\n get().propuestasStore.map((p:any) => { \r\n if (p.id==bodyAPI.id) {\r\n p.description = bodyAPI.description;\r\n p.propuestaDetalles.description = bodyAPI.description;\r\n p.propuestaDetalles.btnGuardar = false;\r\n p.propuestaDetalles.miCatOrigenes = catO;\r\n p.propuestaDetalles.miCatProcesos = catP;\r\n }\r\n }); \r\n //console.log(':::guardaUpdatebyUserStore-propuestasStore:', get().propuestasStore);\r\n return(get().updatebyUserStore);\r\n }\r\n else {\r\n get().generaObjErrorProposalsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'proposals.store-guardaUpdatebyUserStore')\r\n }\r\n },\r\n \r\n deletebyUserStore:{},\r\n\r\n //*Tarea: DeletebyUser\r\n //entra desde Propuesta - botón: Eliminar - cuando la propuesta es existente\r\n guardaDeletebyUserStore: async (responseAPI:any) => { \r\n set( { deletebyUserStore: responseAPI } );\r\n if ( get().deletebyUserStore.ret==1 ) { //inserto sin error\r\n //console.log(':::deletebyUserStore:', get().deletebyUserStore);\r\n return(get().deletebyUserStore);\r\n }\r\n else {\r\n get().generaObjErrorProposalsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'proposals.store-guardaDeletebyUserStore')\r\n }\r\n },\r\n\r\n //agrega eliminado al registro para que no sea visualizado en el front, la baja real entra cuando se vuelve a cargar el api\r\n eliminaPropuestasStore: ( id:any ) => { \r\n //alert('eliminaPropuestasStore'+id)\r\n //console.log('::::eliminaPropuestasStore - id: ', id )\r\n get().propuestasStore.map((p:any) => {\r\n if (p.id==id) \r\n p.eliminado = true;\r\n }); \r\n console.log (':::eliminaPropuestasStore - propuestasStore: ', get().propuestasStore );\r\n },\r\n\r\n sendbyUserStore:{},\r\n\r\n //*Tarea: SendbyUser //entra desde Propuesta - botón: Enviar - cuando la propuesta es existente\r\n guardaSendbyUser: async (responseAPI:any) => { \r\n console.log('::::::: guardaSendbyUser', responseAPI) \r\n set( { sendbyUserStore: responseAPI } );\r\n if ( get().sendbyUserStore.ret==1 ) { //inserto sin error\r\n //console.log('sendbyUserStore:', get().sendbyUserStore);\r\n return(get().sendbyUserStore);\r\n }\r\n else {\r\n get().generaObjErrorProposalsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'proposals.store-guardaSendbyUser')\r\n }\r\n },\r\n\r\n //*Cambio estatus \"abierto\" a false para cerrar la propuesta\r\n // entra desde Propuestas - paneles de encabezados\r\n cierraPropuestaStore: async (id:any) => { \r\n //console.log (p.id);\r\n get().propuestasStore.map((p:any) => {\r\n if (p.id == id)\r\n p.abierto = false\r\n }); \r\n //console.log (':::propuestasStore: **', get().propuestasStore );\r\n },\r\n \r\n}));\r\n\r\nexport default proposalsStore;\r\n","/*Recurso: Notifications - Servicio de lectura del API: Maneja las notificaciones al usuarios presentandas en el encabezado\r\n Tareas:\r\n GetSummarybyUser //Lista de Notificaciones (pendientes y avisos) \r\n SendEmail //...\r\n DeleteNoticebyUser //Elimina los avisos \r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst notificationsStore = create((set:any, get:any) => ({\r\n\r\n objErrorNotificationsStore: { hasError: false, url: '', body:'', recurso:\"notifications\", componente:'', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n\r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI\r\n limpiaObjErrorNotificationsStore: () => {\r\n //alert('notifications.store - limpiaObjErrorNotificationsStore:');\r\n let paso = { hasError: false, url:'', body:'', recurso:'notifications', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorNotificationsStore: paso } );\r\n //console.log('notificationsStore - limpiaobjErrorNotificationsStore (sale) - objErrorNotificationsStore: ', get().objErrorNotificationsStore);\r\n },\r\n \r\n //*Error en api: entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorNotificationsStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //alert('notificationsStore - generaobjErrorNotificationsStore:');\r\n //console.log('****generaobjErrorNotificationsStore (entra): ', responseAPI);\r\n //console.log('*generaobjErrorNotificationsStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'notifications', componente:c, idresul:0, desresul:'', menu:m }\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n if (responseAPI.status==404)\r\n paso.desresul= \"El usuario no existe\"//responseAPI.statusText; \r\n else\r\n paso.desresul= responseAPI.statusText; \r\n } \r\n }\r\n set( { objErrorNotificationsStore: paso } );\r\n console.log('notificationsStore - generaObjError (sale) - objError: ', get().objErrorNotificationsStore);\r\n },\r\n\r\n notificacionesStore: {}, //guarda las notiticaciones del usuario (response.data)\r\n notAvisosStore: [], // guarda las notificaciones de Avisos\r\n notPendientesStore: [], //guarda las notificaciones de Pendientes\r\n notTotalStore:0, //guarda el total de pendientes y avisos, lo ocupamos para el encabezado a un lado de la campana\r\n notTotalAvisosStore:0, //guarda el total de avisos, lo ocupamos para la ventana de notificaciones\r\n notTotalPendienteStore:0, //guarda el total de pendientes , lo ocupamos para la ventana de notificaciones \r\n\r\n //*Tarea: GetSummarybyUser, // se ejecuta al entrar paginaSSC quien llama al Encabezado - opción (Campana)-Notificaciones en un useEffect, \r\n // carga las notificaciones (avisos y pendientes) existentes dentro elementos store + lo que ocupa el front\r\n guardaGetSummarybyUserStore: async (responseAPI:any) => { \r\n //alert('notifications.store - guardaGetSummarybyUserStore' );\r\n if (responseAPI.ret==1) { //sin error\r\n //console.log('guardaGetSummarybyUserStore - responseAPI:', responseAPI)\r\n set( { notificacionesStore: responseAPI.item } );\r\n\r\n set( { notAvisosStore: responseAPI.item.ads } );\r\n set( { notTotalAvisosStore: responseAPI.item.ads.length})\r\n \r\n set( { notPendientesStore: get().notificacionesStore.pending } );\r\n set( { notTotalPendienteStore: responseAPI.item.pending.length});\r\n \r\n set( { notTotalStore: responseAPI.item.ads.length + responseAPI.item.pending.length});\r\n\r\n //let descripcion = '';\r\n let pos = 0;\r\n get().notAvisosStore.map((na:any, index:any) => {\r\n na.activo = false; //por omisión entra cerrado\r\n pos = na.notice.indexOf(':');\r\n na.descripcion = na.notice.substr( 0, pos);\r\n });\r\n get().notPendientesStore.map((np:any, index:any) => {\r\n pos = np.notice.indexOf(':');\r\n np.descripcion = np.notice.substr( 0, pos);\r\n });\r\n //console.log ('notificacionesStore: ', get().notificacionesStore );\r\n //console.log ('notAvisosStore: ', get().notAvisosStore );\r\n //console.log ('notPendientesStore: ', get().notPendientesStore );\r\n return(get().notificacionesStore);\r\n }\r\n else {\r\n get().generaObjErrorNotificationsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'notitications.store-guardaGetSummarybyUserStore ')\r\n }\r\n },\r\n \r\n // se ejecuta al entrar dentro del Encabezado en un useEffect, \r\n // se usa este dato para mostrar el valor de notificaciones a un lado de la campana\r\n guardaTotalNotificacionesStore: async (responseAPI:any) => { // Tareas: GetSummarybyUserStore\r\n //console.log('guardaTotalNotificacionesStore - responseAPI:', responseAPI)\r\n set( { notTotalStore: responseAPI.item } );\r\n //console.log ('notTotalStore: ', get().notTotalStore );\r\n },\r\n\r\n deleteNoticebyUsertore:{}, \r\n\r\n //*Tarea: DeleteNoticebyUser, elimina los avisos\r\n guardaDeleteNoticebyUserStore: async (responseAPI:any) => { \r\n if (responseAPI.ret==1) { //sin error\r\n set( { deleteNoticebyUsertore: responseAPI } ); \r\n //console.log('deleteNoticebyUsertore', get().deleteNoticebyUsertore)\r\n return(get().deleteNoticebyUsertore); \r\n }\r\n else {\r\n get().generaObjErrorNotificationsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'notitications.store-guardaDeleteNoticebyUserStore ')\r\n }\r\n },\r\n\r\n //se ejectura dentro de la ventana de Notificaciones al dar click en aviso para activar y desactivar\r\n //el elemento activo se generó a cada elemento de aviso dentro de guardaGetSummarybyUserStore\r\n activaDesactivaNotAvisosStore: async (id:any) => { \r\n //console.log('activaDesactivaNotAvisosStore - id:', id)\r\n get().notAvisosStore.map((na:any) => {\r\n if (na.idnews==id)\r\n na.activo = !na.activo;\r\n });\r\n //console.log ('-id: ', id, ' -notAvisosStore: ', get().notAvisosStore );\r\n },\r\n \r\n //se ejectura dentro de la ventana de Notificaciones al dar click en aviso para activar y desactivar\r\n //el elemento activo se generó a cada elemento de aviso dentro de guardaGetSummarybyUserStore\r\n activaDesactivaTodosNotAvisosStore: async (opcion:any) => { \r\n get().notAvisosStore.map((na:any) => {\r\n na.activo = !opcion;\r\n });\r\n //console.log ('notAvisosStore: ', get().notAvisosStore );\r\n },\r\n\r\n sendEmailStore:{}, \r\n \r\n //*Tarea: SendEmail\r\n guardaSendEmailStore: async (responseAPI:any) => { \r\n if (responseAPI.ret==1) { //sin error\r\n set( { sendEmailStore: responseAPI } ); \r\n //console.log('sendEmailStore:', get().sendEmailStore)\r\n return(get().sendEmailStore); \r\n }\r\n else {\r\n get().generaObjErrorNotificationsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'notitications.store-guardaSendEmailStore ')\r\n }\r\n },\r\n \r\n}));\r\n\r\nexport default notificationsStore;\r\n","/*Recurso: Files - Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n GetSummaryPxF //*RD\r\n GetDetailbyProcess //*RD \r\n GetRateProposal //*RD \r\n UpdateRateProposal //*RD \r\n SendRateProposal //*RD\r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst decisionsStore = create((set:any, get:any) => ({\r\n \r\n objErrorDecisionsStore: { hasError: false, url: '', body:'', recurso:\"decisions\", componente:'', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n \r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI \r\n limpiaObjErrorDecisionsStore: () => {\r\n let paso = { hasError: false, url:'', body:'', recurso:'decisions', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorDecisionsStore: paso } );\r\n //console.log('limpiaObjErrorDecisionsStore (sale) - objErrorDecisionsStore: ', get().objErrorDecisionsStore);\r\n },\r\n \r\n //*Error en api // entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorDecisionsStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //console.log('*generaObjErrorDecisionsStore (entra): ', responseAPI);\r\n //console.log('*generaObjErrorDecisionsStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'decisions', componente:c, idresul:0, desresul:'', menu:m };\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n set( { objErrorDecisionsStore: paso } );\r\n console.log('::DecisionsStore - generaObjErrorDecisionsStore (sale) - objErrorDecisionsStore: ', get().objErrorDecisionsStore);\r\n },\r\n\r\n pxfStore:[], //guarda la lista de los procesos/frecuencia\r\n\r\n //*Tareas: GetSummaryPxF // lista de procesos/frecuencia\r\n guardaGetSummaryPxFStore: async (responseAPI:any, catPtCiclos:any) => { \r\n //console.clear();\r\n //console.log('guardaGetSummaryPxFStore - responseAPI:', responseAPI)\r\n console.log('************guardaGetSummaryPxFStore - catPtCiclos:', catPtCiclos)\r\n var _ = require('underscore');\r\n if (responseAPI.ret==1) { //sin error\r\n set ( { pxfStore: responseAPI.item } );\r\n get().pxfStore.map((pxf:any, indexpxf:any) => {\r\n pxf.abierto = false; //por omisión entra cerrado\r\n pxf.pxfNombre = pxf.acronym + ' / ' + pxf.frequencyname;\r\n pxf.totalPropuestas = pxf.inprocess + pxf.accepted;\r\n pxf.idxOrdAnt=-1;\r\n pxf.ColOrd='folio';\r\n pxf.AscDes=true;\r\n \r\n let paso = pxf.state_process;\r\n pxf.estatusProceso = paso.pt_state_description;\r\n pxf.clasexEstatusIcono = \"\";\r\n switch ( paso.pt_state ) {\r\n case 1: pxf.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: pxf.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: pxf.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: pxf.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: pxf.clasexEstatusIcono= \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n \r\n //generemos el arreglo de ciclos acorde al pxf seleccionado vs. idpf del catálogo de ciclos integrado\r\n\r\n pxf.misCiclos=[];\r\n\r\n console.log('************pxf.id:', pxf.id)\r\n\r\n let ciclosDelProceso = _.filter(catPtCiclos, function(cy:any) { return cy.idpf== pxf.id });\r\n\r\n console.log('************ciclosDelProceso:', ciclosDelProceso)\r\n\r\n let hash:any = {};\r\n let ciclosNoRepetidos:any = _.filter(ciclosDelProceso, function(o:any) { return hash[o.id] ? false : hash[o.id] = true });\r\n console.log ('1-----:::hash: ', hash );\r\n console.log ('2-----:::ciclosNoRepetidos: ', ciclosNoRepetidos );\r\n ciclosNoRepetidos.map((c:any, indexc:any) => {\r\n c.activo=false;\r\n c.disabled=false;\r\n c.visible=true;\r\n });\r\n pxf.misCiclos = ciclosNoRepetidos;\r\n console.log ('3-----:::pxf.misCiclos: ', pxf.misCiclos );\r\n pxf.misCiclos.unshift( {\"idPF\": null, \"id\":0, \"name\": \"Seleccionar\", activo:false, disabled:false, visible:true});\r\n pxf.misCiclos.push( {\"idPF\": null,\"id\":99999, \"name\": \"Otro\", \"description\": \"\", activo:false, disabled:false, visible:true});\r\n console.log ('4-----:::pxf.misCiclos: ', pxf.misCiclos );\r\n pxf.opcCiclos = pxf.misCiclos[0];\r\n \r\n pxf.misPropuestas=[];\r\n });\r\n \r\n console.log (':::pxfStore: ', get().pxfStore );\r\n return(get().pxfStore);\r\n }\r\n else {\r\n get().generaObjErrorDecisionsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'decisions.store-guardaGetSummaryPxFStore')\r\n }\r\n },\r\n\r\n //*Lo llamamos desde useEffect (RP-Responsable de Proceso) solo cuando se actualizo la decisión de una propuesta\r\n // y esta agrego un ciclo nuevo\r\n actualizaCiclosStore: async (idpxf:any, catPtCiclos:any) => {\r\n //console.log (':::actualizaCiclosStore: idpxf', idpxf, ' catPtCiclos: ', catPtCiclos);\r\n var _ = require('underscore');\r\n get().pxfStore.map((pxf:any, indexpxf:any) => {\r\n if (pxf.id == idpxf) {\r\n pxf.misCiclos=[];\r\n let ciclosDelProceso = _.filter(catPtCiclos, function(cy:any) { return cy.idpf== pxf.id });\r\n let hash:any = {};\r\n let ciclosNoRepetidos:any = _.filter(ciclosDelProceso, function(o:any) { return hash[o.id] ? false : hash[o.id] = true });\r\n //console.log ('1-----:::hash: ', hash );\r\n //console.log ('2-----:::ciclosNoRepetidos: ', ciclosNoRepetidos );\r\n ciclosNoRepetidos.map((c:any, indexc:any) => {\r\n c.activo=false;\r\n c.disabled=false;\r\n c.visible=true;\r\n });\r\n pxf.misCiclos = ciclosNoRepetidos;\r\n //console.log ('3-----:::pxf.misCiclos: ', pxf.misCiclos );\r\n pxf.misCiclos.unshift( {\"idPF\": null, \"id\":0, \"name\": \"Seleccionar\", activo:false, disabled:false, visible:true});\r\n pxf.misCiclos.push( {\"idPF\": null,\"id\":99999, \"name\": \"Otro\", \"description\": \"\", activo:false, disabled:false, visible:true});\r\n //console.log ('4-----:::pxf.misCiclos: ', pxf.misCiclos );\r\n pxf.opcCiclos = pxf.misCiclos[0];\r\n\r\n }\r\n }) \r\n //console.log ('pxfStore: ', get().pxfStore ); \r\n },\r\n \r\n pxfPropuestasStore:[], \r\n //*Tareas: GetDetailbyProcess \r\n // recibe las propuestas asignadas del pxf\r\n guardaGetDetailbyProcessStore: async (responseAPI:any, idpxf:any) => { \r\n if (responseAPI.ret==1) { //sin error\r\n set ( { pxfPropuestasStore: responseAPI.item } );\r\n get().pxfPropuestasStore.map((p:any, indexp:any) => {\r\n p.abierto = false; //por omisión entra cerrado\r\n if (p.sent) { p.sentOrden = \"1\" }\r\n else { p.sentOrden = \"2\" };\r\n p.miPropuestaDetalle = {};\r\n p.decisionOrden = (p.decision.name!=null) ? p.decision.name : '';\r\n p.cycleOrden = (p.decision.cycle.name!=null) ? p.decision.cycle.name : '';\r\n\r\n });\r\n get().cambiapxfStore( idpxf, null, true, get().pxfPropuestasStore, 'guardaGetDetailbyProcessStore')\r\n //console.clear();\r\n //console.log (':::pxfPropuestasStore: ', get().pxfPropuestasStore );\r\n //console.log (':::pxfStore: ', get().pxfStore );\r\n return(get().pxfPropuestasStore);\r\n }\r\n else {\r\n get().generaObjErrorDecisionsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'decisions.store-guardaGetDetailbyProcessStore')\r\n }\r\n },\r\n\r\n cambiapxfStore: async ( idpxf:any, idprop: any, abierto:any, detalle:any, dondeViene:any ) => { \r\n //alert('cambiapxfStore - index: ' + index + ' abierto: ' + abierto + ' detalle: '+ detalle + ' dondeViene: ' + dondeViene)\r\n //console.log('**cambiapxfStore - idpxf: ', idpxf ,' idprop: ', idprop, ' dondeViene: ', dondeViene);\r\n //console.log('cambiapxfStore - detalle: ', detalle )\r\n switch (dondeViene){\r\n case 'guardaGetDetailbyProcessStore': \r\n get().pxfStore.map((pxf:any, indexpxf1:any) => {\r\n if (pxf.id==idpxf) { \r\n pxf.misPropuestas = detalle;\r\n pxf.abierto = abierto;\r\n } \r\n }); \r\n break;\r\n case 'guardaGetRateProposalStore': \r\n get().pxfStore.map((pxf:any, indexpxf2:any) => {\r\n if (pxf.id==idpxf) { \r\n pxf.misPropuestas.map((mp:any, indexmp2:any) => {\r\n if (mp.id==idprop)\r\n mp.miPropuestaDetalle = detalle;\r\n }); \r\n }\r\n }); \r\n break;\r\n case 'abreCierraPxF': \r\n get().pxfStore.map((p:any, indexp:any) => {\r\n if (p.id==idpxf) \r\n p.abierto = abierto;\r\n }); \r\n break;\r\n case 'botonEnviar': \r\n get().pxfStore.map((p:any, indexp2:any) => {\r\n if (p.id==idpxf) { \r\n p.send = true;\r\n p.abierto = false;\r\n } \r\n }); \r\n break;\r\n case 'botonGuardarAPI': \r\n let paso:any = {};\r\n get().pxfStore.map((pxf:any, indexpxf3:any) => {\r\n if (pxf.id==idpxf) { \r\n pxf.misPropuestas.map((mp:any, indexmp3:any) => {\r\n if (mp.id==idprop) { \r\n mp.decision = detalle;\r\n mp.decisionOrden = detalle.name;\r\n paso = detalle.cycle;\r\n if (paso != null)\r\n mp.cycleOrden = paso.name\r\n }\r\n })\r\n } \r\n }); \r\n break;\r\n case 'botonEnviarAPI': \r\n get().pxfStore.map((pxf:any, indexpxf4:any) => {\r\n if (pxf.id==idpxf) { \r\n pxf.misPropuestas.map((mp:any, indexmp4:any) => {\r\n if (mp.id==idprop) { \r\n mp.sent = true;\r\n mp.sentOrden = detalle.sentOrden;\r\n } \r\n })\r\n } \r\n }); \r\n break; \r\n case 'botonGuardarCambiaBtnEnviar': \r\n get().pxfStore.map((pxf:any, indexpxf5:any) => {\r\n if (pxf.id==idpxf) {\r\n pxf.misPropuestas.map((mp:any, indexmp5:any) => {\r\n if (mp.id==idprop) { \r\n let paso = mp.miPropuestaDetalle;\r\n paso.proposal.btnEnviar = true;\r\n } \r\n })\r\n } \r\n }); \r\n break;\r\n } \r\n //console.clear();\r\n //console.log ('::*cambiapxfStore: ' );\r\n //console.log ('::pxfPropuestaDetalleStore: ', get().pxfPropuestaDetalleStore );\r\n //console.log ('::pxfPropuestasStore: ', get().pxfPropuestasStore );\r\n //console.log ('::pxfStore: ', get().pxfStore );\r\n },\r\n \r\n pxfPropuestaDetalleStore:{},\r\n pxfPropuestaDetalleVacia:{\r\n id: 0, acronym: '', processname: '', frequencyname: '', frequencyformat: '', frequencyregexp: '',\r\n proposal: { id: 0, folio: '', description: '', sent: false, evidence: [], quality: [],\r\n decision: { id: 0, name: '', files: [], commentary: '', cycle: { id: null, name: null, state_cycle: null, pt_md: null } }\r\n },\r\n state_process: { pt_state: 1, pt_state_description: \"Activo\", onwaiting: false, leftdays: null },\r\n state_cycle: { pt_state: null, pt_state_description: null, onwaiting: null },\r\n pt_md: []\r\n },\r\n\r\n //*Tareas: GetRateProposal // recibe los detalles de la propuesta seleccionada (Ver / Registrar) del pxf seleccionado\r\n //response.data, idpxf, idProp, tipo, pasoCatD, pasoCatP, pasoCatC, pasoCatE\r\n guardaGetRateProposalStore: async (responseAPI:any, idpxf:any, idprop:any, tipo:any, catD:any, catP:any, catC:any, catE:any) => { \r\n console.log('*******catC',catC);\r\n //console.log('responseAPI', responseAPI);\r\n //console.log('idpxf:', idpxf, ' idprop:', idprop, ' tipo: ', tipo, ' catD:',catD, ' catP: ', catP, ' catC: ', catC, ' catE:', catE)\r\n var _ = require('underscore');\r\n\r\n if (responseAPI.ret==1) { //sin error\r\n set ( { pxfPropuestaDetalleStore: get().pxfPropuestaDetalleVacia } ) \r\n set ( { pxfPropuestaDetalleStore: responseAPI.item } )\r\n \r\n //console.log(':::::pxfPropuestaDetalleStore.frequencyformat', get().pxfPropuestaDetalleStore.frequencyformat)\r\n //agregamos elementos extras para manejo del front\r\n get().pxfPropuestaDetalleStore.proposal.abierto = true;\r\n get().pxfPropuestaDetalleStore.proposal.btnGuardar = get().pxfPropuestaDetalleStore.sent ? null : false;\r\n get().pxfPropuestaDetalleStore.proposal.btnEnviar = get().pxfPropuestaDetalleStore.sent ? null : false;\r\n \r\n //para ver etiqueta de activo en la ventana sp\r\n let paso = get().pxfPropuestaDetalleStore.state_process;\r\n //console.log(':::::::::::::paso',paso)\r\n get().pxfPropuestaDetalleStore.estatusProceso = paso.pt_state_description;\r\n get().pxfPropuestaDetalleStore.clasexEstatusIcono = \"\";\r\n switch ( paso.pt_state ) {\r\n case 1: get().pxfPropuestaDetalleStore.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: get().pxfPropuestaDetalleStore.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: get().pxfPropuestaDetalleStore.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: get().pxfPropuestaDetalleStore.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: get().pxfPropuestaDetalleStore.clasexEstatusIcono= \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n\r\n //ajustes para visualización en front\r\n let proposal = get().pxfPropuestaDetalleStore.proposal;\r\n let dec = proposal.decision;\r\n let decId = dec.id;\r\n let decCiclo = dec.cycle;\r\n let decCicloId = dec.cycle.id;\r\n let decCicloName = dec.cycle.name;\r\n\r\n //CatD (cat decisiones) //para ambos escenarios \"Ver\" y \"Registrar\"\r\n catD[decId-1] = dec;\r\n catD[decId-1].activo = true;\r\n catD[decId-1].disabled = false;\r\n catD[decId-1].visible = true;\r\n //console.log ('--------*************decId', decId);\r\n \r\n\r\n if ( tipo=='ver' ) { // \"Ver\" ya envió es solo visualización //get().pxfPropuestaDetalleStore.proposal.sent = true\r\n //CatD (cat decisiones)\r\n catD[decId-1].disabled = true;\r\n\r\n //caso \"NO prevista\" trae archivo(s) en 'Ver'; por lo tanto, debemos agregar la ruta para que los descargue el usuario de la NAS\r\n if (decId == 3) {\r\n let rutaNAS = process.env.REACT_APP_SERV_HOSTNAME + 'docs/decision/';\r\n catD[decId-1].files.map((f:any, indexCatDF:any) => {\r\n f.descarga = rutaNAS + f.path + '/' + f.originalfullname;\r\n });\r\n }\r\n //console.log ('-----------*************catD', catD);\r\n get().pxfPropuestaDetalleStore.proposal.miCatDecisiones = catD;\r\n\r\n //CatP (cat principios) \r\n catP = get().pxfPropuestaDetalleStore.proposal.quality;\r\n catP.map((p:any, indexCatP:any) => {\r\n p.activo = true;\r\n p.disabled = true;\r\n p.visible = true;\r\n p.hitId = p.hit.id;\r\n p.hitName = p.hit.name;\r\n });\r\n get().pxfPropuestaDetalleStore.proposal.miCatPrincipios = catP;\r\n\r\n //CatC (cat ciclos) // no aplica en \"Ver\", su información la trae Decisiones\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclos = catC;\r\n\r\n //CatA //va ligado con \"Prevista\" -> \"Ciclo\" -> \"Otro\" se abre catalogo de anios\r\n //cuando ya se envió el catálogo va null\r\n get().pxfPropuestaDetalleStore.proposal.miCatAnios = null;\r\n \r\n //CatE (cat evidencias)\r\n catE = get().pxfPropuestaDetalleStore.proposal.evidence;\r\n catE.map((e:any, indexCatE:any) => {\r\n e.activo = true;\r\n e.disabled = true;\r\n e.visible = true;\r\n });\r\n get().pxfPropuestaDetalleStore.proposal.miCatEvidencias = catE;\r\n\r\n //Agrega lista de archivos a \r\n }\r\n\r\n if ( tipo=='registrar' ) { // \"Registrar\", a un no envía\r\n \r\n let swEnviar = true; //detecto si la plantilla esta completa para activar el botón de Enviar, por omisión es true cuando algo falta lo hago false\r\n \r\n //CatD (decisión) //dejamos visible todos los elementos\r\n catD.map((d:any, indexCatD:any) => {\r\n d.disabled = false;\r\n d.visible = true;\r\n });\r\n //console.log('.....dec', dec)\r\n if (decId == 1 ) { //solo para No procede\r\n if (dec.commentary == null || dec.commentary == '' ) \r\n swEnviar = false; \r\n } \r\n //caso \"NO prevista\" puede traer archivo(s) en 'Registra'; por lo tanto, debemos mostrarlos en el dropzone\r\n // 0-sin cambios (ya lo había guardado una vez y se queda), 1-alta, 2-baja\r\n if (decId == 3 ) {\r\n if (catD[decId-1].files.length > 0) {\r\n catD[decId-1].files.map((f:any, indexCatDF:any) => {\r\n f.action = 0; //cuando asignamos asumimos que no hay cambios\r\n });\r\n } \r\n else { swEnviar = false }; \r\n }\r\n //console.log ('*************catD', catD);\r\n get().pxfPropuestaDetalleStore.proposal.miCatDecisiones = catD;\r\n //console.log ('1*************swEnviar', swEnviar);\r\n \r\n\r\n //CatC (ciclos)\r\n if (decId != 1 ) { //el ciclo se asigna solo a Prevista y No Prevista\r\n get().pxfPropuestaDetalleStore.proposal.otroCiclo = false; //entra por omisión, si se detecta se activa\r\n \r\n // no se ha asigndado decisión \r\n if (decCicloId == null && decCicloName == null){ \r\n catC[0].activo = true; // se asigna el primer elemento por omisión del catálogo de ciclos \"Seleccionar\"\r\n swEnviar = false\r\n }\r\n\r\n //selecciono un elemento de \"Ciclo\"\r\n if (decCicloId != null && decCicloName != null) { \r\n catC.map((c:any, indexC:any) => {\r\n c.visible = true;\r\n if (c.id==decCicloId) { c.activo = true } \r\n }); \r\n }\r\n\r\n //Selecciono de \"Ciclo\" la opción \"Otro\", se activa combo \"Periodo\"\r\n if (decCicloId == null && decCicloName != null) { \r\n catC[catC.length-1].activo = true; //combo \"Ciclo\" = otro\r\n get().pxfPropuestaDetalleStore.proposal.otroCiclo = true; \r\n //console.log ('get().pxfPropuestaDetalleStore.frequencyformat...',get().pxfPropuestaDetalleStore.frequencyformat);\r\n //console.log ('decCiclo.name...',decCiclo.name);\r\n }\r\n }\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclos = catC;\r\n //console.log ('2*************swEnviar ', swEnviar); \r\n\r\n //CatCO //va ligado con \"Prevista\" y \"No prevista\" -> \"Ciclo\" -> \"Otro\" se abre catalogo de \"Periodos\"\r\n //generamos catCO Catálogo de Ciclos alternativos, se genera 30 años arriba y abajo acorde a su frecuencia\r\n //aprovechamos y activamos si traemos de api un periodo \r\n let catCO = new Array();\r\n let catCOhh = new Array();\r\n let catCOhhmm = new Array();\r\n let catCOAA = new Array();\r\n let catCOMM = new Array();\r\n let catCODD = new Array();\r\n \r\n let date = new Date();\r\n let aaIni = 2015 //date.getFullYear() - 30;\r\n let aaFin = date.getFullYear() + 10; //date.getFullYear() + 30;\r\n let paso:any = {id:'', name:'', activo:false};\r\n \r\n let swActivo = false;\r\n get().pxfPropuestaDetalleStore.frecuenciaHH = false;\r\n get().pxfPropuestaDetalleStore.frecuenciaHHMM = false;\r\n get().pxfPropuestaDetalleStore.frecuenciaUND = false; //frecuencia Unica o No Determinado\r\n let cuenta = 0;\r\n let swActivoHH = true; //lo uso para activar el \"Seleccionar\" primer elemento\r\n let swActivoHHMM = true; //lo uso para activar el \"Seleccionar\" primer elemento\r\n let swActivoAA = true;\r\n let swActivoMM = true;\r\n let swActivoDD = true;\r\n\r\n //genero combo para 'Otros' cuando se selecciona en ciclo \r\n let miFrecuencia = '';\r\n if (catC.length == 2) { //NO trae ciclo: [0]='Seleccionar', [1]='Otro', por lo tanto hay que generar 3 combos'AAAA' 'MM' 'DD'\r\n miFrecuencia = get().pxfPropuestaDetalleStore.frequencyformat;\r\n }\r\n\r\n if (get().pxfPropuestaDetalleStore.frequencyformat == 'AAAA-MM-DD ó AAAA-MM ó AAAA') {\r\n if (catC.length >= 3) { //trae de menos un ciclo: [0]='Seleccionar', [n-1]='Otro', [1..n-2]='AAAA' / 'AAAA-MM' / 'AAAA-MM-DD'\r\n let x = catC[1].name;\r\n switch (x.length) {\r\n case 4: miFrecuencia = 'AAAA'; break;\r\n case 7: miFrecuencia = 'AAAA-MM'; break;\r\n case 10: miFrecuencia = 'AAAA-MM-DD'; break;\r\n }\r\n }\r\n else { miFrecuencia = get().pxfPropuestaDetalleStore.frequencyformat}\r\n }\r\n else { miFrecuencia = get().pxfPropuestaDetalleStore.frequencyformat }\r\n //console.log('******* miFrecuencia',miFrecuencia);\r\n console.log('miFrecuencia..........', miFrecuencia)\r\n switch (miFrecuencia) {\r\n case 'AAAA': //anual // cada 10 años //cada 6 años //cada 5 años //cada 4 años //cada 3 años //cada 2 años \r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1;\r\n //console.log ('paso.id ',paso.id )\r\n paso.name = i.toString();\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n }\r\n break;\r\n case 'AAAA-SS': //semestral\r\n console.log('semestral')\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++){ \r\n for (var j = 1; j <= 2; j++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1;\r\n paso.name = i.toString() + '-' + `0${j}`;\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n \r\n }\r\n }\r\n break;\r\n case 'AAAA-TT': //trimestal\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++) {\r\n for (var j = 1; j <= 4; j++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1;\r\n paso.name = i.toString() + '-' + `0${j}`;\r\n if ( paso.name ==decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n }\r\n }\r\n break;\r\n case 'AAAA-BB': //bimestral\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++) { \r\n for (var j = 1; j <= 6; j++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1;\r\n paso.name = i.toString() + '-' + `0${j}`;\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n }\r\n }\r\n break;\r\n case 'AAAA-MM': //mensual\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++) {\r\n for (var j = 1; j <= 12; j++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1\r\n paso.name = (j<10) ? i.toString() + '-' + `0${j}` \r\n : i.toString() + '-' + `${j}`;\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n }\r\n }\r\n break;\r\n case 'AAAA-QQ': //24 qnas por año\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++){ \r\n for (var j = 1; j <= 24; j++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1\r\n paso.name = (j<10) ? i.toString() + '-' + `0${j}` \r\n : i.toString() + '-' + `${j}`;\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n } \r\n }\r\n break;\r\n case 'AAAA-W': //cada 6 semanas (8 por año)\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++){ \r\n for (var j = 1; j <= 8; j++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1\r\n paso.name = i.toString() + '-' + `0${j}`;\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n } \r\n }\r\n break;\r\n case 'AAAA-WW': //semanal (52 por año)\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i = aaIni; i <= aaFin; i++){ \r\n for (var j = 1; j <= 52; j++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta; // (i-aaIni)+1\r\n paso.name = (j<10) ? i.toString() + '-' + `0${j}` \r\n : i.toString() + '-' + `${j}`;\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n } \r\n }\r\n break;\r\n case 'AAAA-MM-DD': //diaria //ojo no se probo con datos reales\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i=aaIni; i<=aaFin; i++) {\r\n for (var j=1; j<=12; j++) {\r\n let kTotal = 0;\r\n let esBisiesto = false;\r\n if ( j== 1 || j== 5 || j== 7 || j== 8 || j== 10 || j== 12 ) { kTotal = 31 }\r\n if ( j== 3 || j== 4 || j== 6 || j== 9 || j== 11 ) { kTotal = 30 }\r\n if ( j== 2 ) {\r\n esBisiesto = (i % 400 === 0) ? true : (i % 100 === 0) ? false : i % 4 === 0;\r\n kTotal = (esBisiesto) ? 29 : 28\r\n }\r\n for (var k = 1; k <= kTotal; k++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta;\r\n //console.log('...',paso.id);\r\n paso.name = (j<10) ? (k<10) ? i.toString() + '-' + `0${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `0${j}` + '-' + `${k}` \r\n : (k<10) ? i.toString() + '-' + `${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `${j}` + '-' + `${k}`;\r\n\r\n if ( paso.name == decCiclo.name){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n }\r\n }\r\n }\r\n //console.log('cuenta..',cuenta)\r\n break;\r\n case 'AAAA-MM-DD hh': // hh//diaria //ojo no se probo con datos reales\r\n get().pxfPropuestaDetalleStore.frecuenciaHH = true;\r\n get().pxfPropuestaDetalleStore.frecuenciaHHMM = false;\r\n let decCicloHH = {id:'', name:'', activo:false};\r\n let cadena = JSON.parse(JSON.stringify(dec.cycle.name));\r\n decCicloHH.name = cadena.substring(cadena.length - 2);\r\n let decCicloNameHHhh = decCicloHH.name;\r\n let decCicloNameHH = cadena.substring(0, cadena.length - 3);\r\n //console.log('...decCicloNameHH..', decCicloNameHH);\r\n //console.log('...decCicloNameHHhh..',decCicloNameHHhh);\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i=aaIni; i<=aaFin; i++) {\r\n for (var j=1; j<=12; j++) {\r\n let kTotal = 0;\r\n let esBisiesto = false;\r\n if ( j== 1 || j== 5 || j== 7 || j== 8 || j== 10 || j== 12 ) { kTotal = 31 }\r\n if ( j== 3 || j== 4 || j== 6 || j== 9 || j== 11 ) { kTotal = 30 }\r\n if ( j== 2 ) {\r\n esBisiesto = (i % 400 === 0) ? true : (i % 100 === 0) ? false : i % 4 === 0;\r\n kTotal = (esBisiesto) ? 29 : 28\r\n }\r\n for (var k = 1; k <= kTotal; k++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta;\r\n paso.name = (j<10) ? (k<10) ? i.toString() + '-' + `0${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `0${j}` + '-' + `${k}` \r\n : (k<10) ? i.toString() + '-' + `${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `${j}` + '-' + `${k}`;\r\n //console.log('...', paso.name.length, '...',decCicloNameHH.length );\r\n if (paso.name == decCicloNameHH){\r\n //console.log('yeii');\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n }\r\n }\r\n }\r\n //generamos combo hh \r\n for (let h=0; h<=23; h++) {\r\n paso = {id:'', name:'', activo:false};\r\n paso.id = h;\r\n paso.name = (h<10) ? `0${h}` : `${h}` ;\r\n //console.log(paso.name); \r\n if ( paso.name == decCicloNameHHhh ) { paso.activo=true; swActivoHH = false; }\r\n else { paso.activo=false }\r\n catCOhh.push(paso);\r\n }\r\n //console.log('catCOhh', catCOhh); \r\n break;\r\n case 'AAAA-MM-DD hh:mm': // hh:mm //diaria\r\n get().pxfPropuestaDetalleStore.frecuenciaHH = false;\r\n get().pxfPropuestaDetalleStore.frecuenciaHHMM = true;\r\n let decCicloHHMM = {id:'', name:'', activo:false};\r\n let cadena1 = JSON.parse(JSON.stringify(dec.cycle.name));\r\n decCicloHHMM.name = cadena1.substring(cadena1.length - 5);\r\n let decCicloNameMMmm = decCicloHHMM.name;\r\n let decCicloNameHHMM = cadena1.substring(0, cadena1.length - 6);\r\n //console.log('...decCicloNameMM..', decCicloNameMM);\r\n //console.log('...decCicloNameMMmm..',decCicloNameMMmm);\r\n swActivo = false;\r\n cuenta = 1;\r\n for (var i=aaIni; i<=aaFin; i++) {\r\n for (var j=1; j<=12; j++) {\r\n let kTotal = 0;\r\n let esBisiesto = false;\r\n if ( j== 1 || j== 5 || j== 7 || j== 8 || j== 10 || j== 12 ) { kTotal = 31 }\r\n if ( j== 3 || j== 4 || j== 6 || j== 9 || j== 11 ) { kTotal = 30 }\r\n if ( j== 2 ) {\r\n esBisiesto = (i % 400 === 0) ? true : (i % 100 === 0) ? false : i % 4 === 0;\r\n kTotal = (esBisiesto) ? 29 : 28\r\n }\r\n for (var k = 1; k <= kTotal; k++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta = cuenta + 1;\r\n paso.id = cuenta;\r\n //console.log('...',paso.id);\r\n paso.name = (j<10) ? (k<10) ? i.toString() + '-' + `0${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `0${j}` + '-' + `${k}` \r\n : (k<10) ? i.toString() + '-' + `${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `${j}` + '-' + `${k}`;\r\n if ( paso.name == decCicloNameHHMM){\r\n paso.activo=true;\r\n swActivo = true;\r\n }\r\n else \r\n paso.activo=false;\r\n catCO.push(paso);\r\n }\r\n }\r\n }\r\n //generamos combo hh \r\n let cuenta2 = 0;\r\n for (let h=0; h<=23; h++) {\r\n for (let m=0; m<=59; m++) {\r\n paso = {id:'', name:'', activo:false};\r\n cuenta2 = cuenta2 + 1;\r\n paso.id = cuenta2;\r\n paso.name = (h<10) ? (m<10) ? `0${h}:` + `0${m}` : `0${h}:`+ `${m}` \r\n : (m<10) ? `${h}:` + `0${m}` : `${h}:`+ `${m}` ;\r\n //console.log(paso.name); \r\n if ( paso.name == decCicloNameMMmm) { paso.activo=true; swActivoHHMM = false; }\r\n else { paso.activo=false }\r\n catCOhhmm.push(paso);\r\n }\r\n }\r\n //console.log('catCOhhmm', catCOhhmm); \r\n break;\r\n case \"AAAA-MM-DD ó AAAA-MM ó AAAA\": //Unica o Indeterminada\r\n console.log('Unica o Indeterminada');\r\n \r\n get().pxfPropuestaDetalleStore.frecuenciaUND = true;\r\n let decCicloAA = {id:'', name:'', activo:false};\r\n let decCicloMM = {id:'', name:'', activo:false};\r\n let decCicloDD = {id:'', name:'', activo:false};\r\n let cadena2 = (dec.cycle.name != null) ? JSON.parse(JSON.stringify(dec.cycle.name)) : '';\r\n let decCicloNameAA = '';\r\n let decCicloNameMM = '';\r\n let decCicloNameDD = '';\r\n if (cadena2.length > 0) {\r\n switch(cadena2.length){\r\n case 4: decCicloNameAA = cadena2; get().frecUNDStore[0].activo= true; get().frecUNDSelecStore = 'Anual'; break;\r\n case 7: decCicloNameMM = cadena2; get().frecUNDStore[1].activo= true; get().frecUNDSelecStore = 'Mensual'; break;\r\n case 10: decCicloNameDD = cadena2; get().frecUNDStore[2].activo= true; get().frecUNDSelecStore = 'Diaria'; break;\r\n }\r\n }\r\n console.log('..aa..',decCicloNameAA, '..mm..',decCicloNameMM, '..dd..',decCicloNameDD )\r\n swActivo = false;\r\n \r\n let cuentaMM = 1;\r\n let cuentaDD = 1;\r\n let pasoAA:any = {id:'', name:'', activo:false};\r\n let pasoMM:any = {id:'', name:'', activo:false};\r\n let pasoDD:any = {id:'', name:'', activo:false};\r\n\r\n //para AA\r\n for (var i=aaIni; i<=aaFin; i++) {\r\n pasoAA = {id:'', name:'', activo:false};\r\n pasoAA.id = (i-aaIni)+1;\r\n //console.log ('paso.id ',paso.id )\r\n pasoAA.name = i.toString();\r\n if ( pasoAA.name == decCicloNameAA ) { pasoAA.activo=true; swActivoAA = false; }\r\n else { pasoAA.activo=false }\r\n catCOAA.push(pasoAA);\r\n \r\n //para MM\r\n for (var j=1; j<=12; j++) {\r\n pasoMM = {id:'', name:'', activo:false};\r\n cuentaMM = cuentaMM + 1;\r\n pasoMM.id = cuentaMM;\r\n pasoMM.name = (j<10) ? i.toString() + '-' + `0${j}` \r\n : i.toString() + '-' + `${j}`;\r\n if ( pasoMM.name == decCicloNameMM ) { pasoMM.activo=true; swActivoMM = false; }\r\n else { pasoMM.activo=false }\r\n \r\n catCOMM.push(pasoMM);\r\n\r\n //para DD\r\n let kTotal = 0;\r\n let esBisiesto = false;\r\n if ( j== 1 || j== 5 || j== 7 || j== 8 || j== 10 || j== 12 ) { kTotal = 31 }\r\n if ( j== 3 || j== 4 || j== 6 || j== 9 || j== 11 ) { kTotal = 30 }\r\n if ( j== 2 ) {\r\n esBisiesto = (i % 400 === 0) ? true : (i % 100 === 0) ? false : i % 4 === 0;\r\n kTotal = (esBisiesto) ? 29 : 28\r\n }\r\n for (var k = 1; k <= kTotal; k++) {\r\n pasoDD = {id:'', name:'', activo:false};\r\n cuentaDD = cuentaDD + 1;\r\n pasoDD.id = cuentaDD;\r\n //console.log('...',paso.id);\r\n pasoDD.name = (j<10) ? (k<10) ? i.toString() + '-' + `0${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `0${j}` + '-' + `${k}` \r\n : (k<10) ? i.toString() + '-' + `${j}` + '-' + `0${k}` \r\n : i.toString() + '-' + `${j}` + '-' + `${k}`;\r\n if ( pasoDD.name == decCicloNameDD ) { pasoDD.activo=true; swActivoDD = false; }\r\n else { pasoDD.activo=false }\r\n \r\n catCODD.push(pasoDD);\r\n }\r\n }\r\n };\r\n break; \r\n }\r\n //console.log('**********catCO',catCO )\r\n //console.log('**********swActivo',swActivo )\r\n\r\n\r\n if (swActivo==false) { if (decId != 1 ) { swEnviar = false } } \r\n\r\n catCO.unshift( {\"id\":0, \"name\": \"Seleccionar\", activo:!swActivo})\r\n if (get().pxfPropuestaDetalleStore.frecuenciaHH) { catCOhh.unshift( {\"id\":0, \"name\": \"Seleccionar\", activo:swActivoHH}) }\r\n if (get().pxfPropuestaDetalleStore.frecuenciaHHMM) { catCOhhmm.unshift( {\"id\":0, \"name\": \"Seleccionar\", activo:swActivoHHMM}) }\r\n if (get().pxfPropuestaDetalleStore.frecuenciaUND) { \r\n catCOAA.unshift( {\"id\":0, \"name\": \"Seleccionar\", activo:swActivoAA}) \r\n catCOMM.unshift( {\"id\":0, \"name\": \"Seleccionar\", activo:swActivoMM}) \r\n catCODD.unshift( {\"id\":0, \"name\": \"Seleccionar\", activo:swActivoDD}) \r\n }\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclosOtros = catCO;\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclosOtrosHH = catCOhh;\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclosOtrosHHMM = catCOhhmm;\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclosOtrosAA = catCOAA;\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclosOtrosMM = catCOMM;\r\n get().pxfPropuestaDetalleStore.proposal.miCatCiclosOtrosDD = catCODD;\r\n \r\n //console.log('**********catCOAA',catCOAA );\r\n //console.log('**********catCOMM',catCOMM );\r\n //console.log('**********catCODD',catCODD );\r\n\r\n //CatP (principios)\r\n //console.clear();\r\n let swCatP = false;\r\n if (proposal.quality.length > 0) { //trae información desde api vaciamos al catálogo\r\n let pasoCatP:any = [];\r\n pasoCatP = _.pluck(proposal.quality, 'id');\r\n catP.map((p:any, indexcatP2:any) => {\r\n p.visible = true;\r\n pasoCatP.map((pp:any, indexCatP:any) => {\r\n if (p.id==pp) { \r\n p.activo = true;\r\n p.hit = proposal.quality[indexCatP].hit;\r\n p.hitId = proposal.quality[indexCatP].hit.id;\r\n p.hitName = proposal.quality[indexCatP].hit.name;\r\n if (p.id!=6 ) {\r\n p.hitOpciones?.map((ho:any, indexho:any) => {\r\n //console.log('ho.id: ',ho.id, '... p.hit: ', p.hitId)\r\n if (p.hitId== ho.id){\r\n ho.activo = true;\r\n swCatP = true\r\n } \r\n else\r\n ho.activo = false\r\n }); \r\n } \r\n else { swCatP = true}\r\n } \r\n });\r\n }); \r\n }\r\n //console.log('swCatp',swCatP, 'decId--',decId)\r\n get().pxfPropuestaDetalleStore.proposal.miCatPrincipios = catP;\r\n \r\n if (decId == 2 && swCatP == false) { swEnviar = false } //solo Prevista trae principios\r\n\r\n //CatE (evidencias)\r\n let swCatE = false;\r\n if (proposal.evidence.length > 0) { //trae información desde api vaciamos al catálogo\r\n let pasoCatE:any = [];\r\n pasoCatE = _.pluck(proposal.evidence, 'id');\r\n catE.map((e:any, indexE:any) => {\r\n e.visible = true;\r\n pasoCatE.map((pe:any, indexCatE:any) => {\r\n if (e.id==pe) { \r\n e.activo = true;\r\n swCatE = true;\r\n } \r\n });\r\n }); \r\n }\r\n if ( decId != 1 && swCatE== false) { swEnviar = false }; //solo Prevista y NO prevista trae evidencias\r\n get().pxfPropuestaDetalleStore.proposal.miCatEvidencias = catE;\r\n\r\n get().pxfPropuestaDetalleStore.proposal.swEnviar = swEnviar; //si es true se activa el botón de enviar \"Tiene plantilla terminada\"\r\n }\r\n\r\n \r\n\r\n get().cambiapxfStore( idpxf, idprop, true, get().pxfPropuestaDetalleStore, 'guardaGetRateProposalStore');\r\n console.log (':::::::::::::::::::::::::::pxfPropuestaDetalleStore: ', get().pxfPropuestaDetalleStore );\r\n //console.log (':::pxfStore: ', get().pxfStore );\r\n \r\n return(get().pxfPropuestaDetalleStore);\r\n }\r\n else {\r\n get().generaObjErrorDecisionsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'decisions.store-guardaGetRateProposalStore')\r\n }\r\n },\r\n\r\n updateRateProposalStore:{},\r\n\r\n //*Tarea: UpdateRateProposal //entra desde RP- botón: Registrar - botón: Guardar - \r\n guardaUpdateRateProposalStore: async (responseAPI:any) => { \r\n //console.log('guardaUpdateRateProposalStore-responseAPI:',responseAPI)\r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { updateRateProposalStore: responseAPI } );\r\n //console.log('updateRateProposalStore:', get().updateRateProposalStore);\r\n return(get().updateRateProposalStore);\r\n }\r\n else {\r\n get().generaObjErrorDecisionsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'decision.store-guardaUpdateRateProposalStore')\r\n }\r\n },\r\n\r\n sendRateProposalStore:{},\r\n \r\n //*Tarea: SendRateProposal //entra desde RP- botón: Registrar - botón: Guardar - \r\n guardaSendRateProposalStore: async (responseAPI:any) => { \r\n //console.log('****guardaSendRateProposalStore-responseAPI:',responseAPI)\r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { sendRateProposalStore: responseAPI } );\r\n //console.log('sendRateProposalStore:', get().sendRateProposalStore);\r\n return(get().sendRateProposalStore);\r\n }\r\n else {\r\n get().generaObjErrorDecisionsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'decision.store-guardaSendRateProposalStore')\r\n }\r\n }, \r\n \r\n frecUNDStore: [ {id:0, name:'Anual', activo:false }, {id:1, name:'Mensual', activo:false }, {id:2, name:'Diaria', activo:false } ],\r\n\r\n frecUNDSelecStore: null,\r\n\r\n cambiafrecUNDStore: async ( id:any ) => { \r\n //console.log('cambiafrecUNDStore-id', id)\r\n get().frecUNDSelecStore = null;\r\n get().frecUNDStore.map((f:any, indexF:any) => {\r\n if (f.id == id) { f.activo = true; get().frecUNDSelecStore = f.name }\r\n else { f.activo = false }\r\n }); \r\n },\r\n\r\n reiniciafrecUNDStore: async ( id:any ) => { \r\n //console.log('cambiafrecUNDStore-id', id)\r\n get().frecUNDSelecStore = null;\r\n get().frecUNDStore.map((f:any, indexF:any) => {\r\n f.activo = false \r\n }); \r\n },\r\n \r\n}));\r\n\r\nexport default decisionsStore;\r\n","/*Recurso: ptCatalogs - Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n GetAllEvidence //Catálogo de Evidencias //*RP\r\n GetAllCycles //Catálogo de Ciclos //*RP\r\n GetAllFeatures \r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport { green } from \"@mui/material/colors\";\r\nimport create from \"zustand\";\r\n\r\nconst ptCatalogsStore = create((set:any, get:any) => ({\r\n\r\n objErrorPtCatalogsStore: { hasError: false, url: '', body:'', recurso:\"ptCatalogs\", componente:'', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n \r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI \r\n limpiaObjErrorPtCatalogsStore: () => {\r\n let paso = { hasError: false, url:'', body:'', recurso:'ptCatalogs', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorPtCatalogsStore: paso } );\r\n //console.log('PtCatalogsStore - limpiaObjErrorPtCatalogsStore (sale) - objErrorPtCatalogsStore: ', get().objErrorPtCatalogsStore);\r\n },\r\n \r\n //*Error en api // entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorPtCatalogsStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //console.log('*generaObjErrorPtCatalogsStore (entra): ', responseAPI);\r\n //console.log('*generaObjErrorPtCatalogsStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'ptCatalogs', componente:c, idresul:0, desresul:'', menu:m };\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n set( { objErrorPtCatalogsStore: paso } );\r\n console.log('::PtCatalogsStore - generaObjErrorPtCatalogsStore (sale) - objErrorPtCatalogsStore: ', get().objErrorPtCatalogsStore);\r\n },\r\n\r\n catPTEvidenciasStore: [], //response.data de la tarea:GetAllOriginStore + elementos de uso en el front\r\n \r\n //*Tareas: GetAllEvidence // recibe el response.data y lo guarda en variable store\r\n guardaGetAllEvidenceStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllOriginStore - responseAPI:', responseAPI)\r\n set ( { catPTEvidenciasStore: responseAPI } )\r\n\r\n get().catPTEvidenciasStore.map((e:any) => {\r\n e.activo=false;\r\n e.disabled=false;\r\n e.visible=false; \r\n });\r\n //console.log (':::catPTEvidenciasStore: ', get().catPTEvidenciasStore );\r\n return(get().catPTEvidenciasStore);\r\n },\r\n\r\n catPTCiclosStore: [], //response.data de la tarea: GetAllProcessByFrequencyStore + elementos de uso en el front\r\n\r\n //*Tareas: GetAllCycles // recibe el response.data y lo guarda en variable store\r\n guardaPTGetAllCyclesStore: async (responseAPI:any) => { \r\n //console.log('guardaPTGetAllCyclesStore - responseAPI:', responseAPI)\r\n set ( { catPTCiclosStore: responseAPI})\r\n \r\n //preparamos catPTCiclosStore con lo necesario para visualizar en front\r\n let met = \"\";\r\n get().catPTCiclosStore.map((c:any) => {\r\n met = \"\";\r\n c.pt_md!.map((m:any) => {\r\n if (m.name != null) { met = met + \" [\" + m.name + \"], \" };\r\n });\r\n c.name = c.name + met.substring(0, met.length-2);\r\n c.met = met;\r\n })\r\n //console.log (':::catPTCiclosStore: ', get().catPTCiclosStore );\r\n return(get().catPTCiclosStore);\r\n },\r\n\r\n //*Cargo los ciclos de Catalogs/Cycles dentro de catPtCiclosStore\r\n // entra desde Responsable de Proceso - useEffect\r\n combinaCatalogosCiclosStore: async (catC:any) => { \r\n var _ = require('underscore');\r\n //console.log ('::catC: ', catC);\r\n\r\n catC.map((c:any) => { get().catPTCiclosStore.push(c) }); \r\n\r\n let met = \"\";\r\n \r\n get().catPTCiclosStore.map((catPt:any) => {\r\n met = \"\";\r\n catPt.pt_md.map((m:any) => {\r\n if (m.name != null) { met = met + \" [\" + m.name + \"], \" }\r\n });\r\n catPt.name = catPt.name + met.substring(0, met.length-2);\r\n });\r\n console.log(':::combinaCatalogosCiclosStore-catPTCiclosStore: ', get().catPTCiclosStore) \r\n let paso = _.filter(get().catPTCiclosStore, function(ar:any) { return ar.state_cycle.pt_state_description === 'Activo' });\r\n //console.log(':::paso: ', paso);\r\n set ( { catPTCiclosStore: paso } );\r\n console.log(':::combinaCatalogosCiclosStore-catPTCiclosStore: ', get().catPTCiclosStore)\r\n return(get().catPTCiclosStore);\r\n },\r\n \r\n catPTCaracteristicasStore: [], //response.data de la tarea: GetAllFeatures + elementos de uso en el front\r\n \r\n //*Tareas: GetAllFeatures / recibe el response.data y lo guarda en variable store: catPTCaracteristicasStore\r\n guardaPTGetAllFeaturesStore: async (responseAPI:any) => { \r\n //console.log('guardaGetAllFeaturesStore - responseAPI:', responseAPI)\r\n set ( { catPTCaracteristicasStore: responseAPI})\r\n \r\n //preparamos catProcesosStore con lo necesario para visualizar en front\r\n get().catPTCaracteristicasStore.map((catEC:any) => {\r\n catEC.features.map((catEC_C:any) => {\r\n catEC_C.activo=false;\r\n catEC_C.nombreCorto= (catEC_C.name.length > 42) ? catEC_C.name.substring(0,42) + '...' : catEC_C.name; \r\n });\r\n });\r\n //console.log (':::catPTCaracteristicasStore: ', get().catPTCaracteristicasStore );\r\n return(get().catPTCaracteristicasStore);\r\n }, \r\n \r\n}));\r\n\r\nexport default ptCatalogsStore;\r\n","/*Recurso: Files - - Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n UploadFilesDecision //*RP\r\n UploadFilesAnalysis //*RD\r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst filesStore = create((set:any, get:any) => ({\r\n\r\n objErrorFilesStore: { hasError: false, url: '', body:'', recurso:\"files\", componente:'', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n \r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI\r\n limpiaObjErrorFilesStore: () => {\r\n let paso = { hasError: false, url:'', body:'', recurso:'files', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorFilesStore: paso } );\r\n //console.log('filesStore - limpiaobjErrorFilesStore (sale) - objErrorFilesStore: ', get().objErrorFilesStore);\r\n },\r\n \r\n //*Error en api // entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorFilesStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //console.log('****generaobjErrorFilesStore (entra): ', responseAPI);\r\n //console.log('*generaobjErrorFilesStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'files', componente:c, idresul:0, desresul:'', menu:m}\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n if (responseAPI.status==404)\r\n paso.desresul= \"El usuario no existe\"//responseAPI.statusText; \r\n else\r\n paso.desresul= responseAPI.statusText; \r\n } \r\n }\r\n set( { objErrorFilesStore: paso } );\r\n console.log('filesStore - generaObjError (sale) - objError: ', get().objErrorFilesStore);\r\n },\r\n\r\n uploadFilesDecisionStore:{}, \r\n \r\n //*Tarea: UploadFilesDecision, envia los archivos a la nas\r\n guardaUploadFilesDecisionStore: async (responseAPI:any) => { \r\n if (responseAPI.ret==1) { //sin error\r\n set( { uploadFilesDecisionStore: responseAPI } ); \r\n //console.log('uploadFilesDecisionStore', get().uploadFilesDecisionStore)\r\n return(get().uploadFilesDecisionStore); \r\n }\r\n else {\r\n get().generaObjErrorFilesStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'files.store-guardaDeleteNoticebyUserStore ')\r\n }\r\n },\r\n\r\n //*Tarea: UploadFilesAnalysis, envia los archivos a la nas\r\n guardaUploadFilesAnalysisStore: async (responseAPI:any) => { \r\n if (responseAPI.ret==1) { //sin error\r\n set( { uploadFilesAnalysis: responseAPI } ); \r\n //console.log('uploadFilesAnalysis', get().uploadFilesAnalysis)\r\n return(get().uploadFilesAnalysis); \r\n }\r\n else {\r\n get().generaObjErrorFilesStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'files.store-guardaUploadFilesAnalysisStore ')\r\n }\r\n },\r\n \r\n}));\r\n\r\nexport default filesStore;\r\n","/*Recurso Analysis: objetivo guardar la lectura del api\r\n Tareas:\r\n Analysis/GetSummarybyUser/es\r\n Analysis/GetDetailbyUser/es\r\n Analysis/UpdatebyUser/es\r\n Analysis/SendbyUser/ \r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst analysisStore = create((set:any, get:any) => ({\r\n\r\n objErrorAnalysisStore: { hasError: false, url: '', body:'', recurso:'', componente:'analysis', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n\r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI \r\n limpiaObjErrorAnalysisStore: () => {\r\n //alert('Analysis.store - limpiaObjErrorAnalysisStore:');\r\n let paso = { hasError: false, url:'', body:'', recurso:'', componente:'analysis', idresul:0, desresul:'', menu:''}\r\n set( { objErrorAnalysisStore: paso } );\r\n //console.log('limpiaObjErrorAnalysisStore (sale) - objErrorAnalysisStore: ', get().objErrorAnalysisStore);\r\n },\r\n \r\n //*Error en api: entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorAnalysisStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //console.clear();\r\n //console.log('*generaObjErrorAnalysisStore (entra): ', responseAPI);\r\n //console.log('*generaObjErrorAnalysisStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'analysis', componente:c, idresul:0, desresul:'', menu:m };\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!='' && responseAPI.data!=null){\r\n console.log('paso2');\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n //console.log('paso', paso);\r\n set( { objErrorAnalysisStore: paso } );\r\n console.log('::AnalysisStore - generaObjErrorAnalysisStore (sale) - objErrorAnalysisStore: ', get().objErrorAnalysisStore);\r\n },\r\n\r\n pfcStore:[], //**Unidad de medida: Proceso/Frecuencia/Ciclo\r\n \r\n //*Tareas: GetSummarybyUser: recibe el response.data y lo guarda en pfcStore\r\n guardaGetSummarybyUserStore: async (responseAPI:any, catPtCiclos:any) => { \r\n //console.clear();\r\n //console.log('guardaGetSummarybyUserStore - responseAPI:', responseAPI)\r\n\r\n var _ = require('underscore');\r\n if (responseAPI.ret==1) { //sin error\r\n \r\n //se hace un filtro para mostrar solo las no enviadas\r\n let pfcPaso = _.filter(responseAPI.item, function(fil:any) { return fil.sent==false });\r\n\r\n set ( { pfcStore: pfcPaso } ); \r\n\r\n if (get().pfcStore!= null) {\r\n get().pfcStore.map((pfc:any, indexPFC:any) => {\r\n pfc.abierto = false; //por omisión entra cerrado\r\n pfc.pfcNombre = pfc.acronym + ' / ' + pfc.frequencyname + ' / ' + pfc.cyclename;\r\n pfc.estatusTexto = (pfc.sent) ? \"Enviada\" : \"En proceso\";\r\n pfc.totalPropuestas = pfc.nproposals;\r\n\r\n //para generar el efecto del activo/no activo...\r\n let paso = pfc.state_process;\r\n pfc.estatusProceso = paso.pt_state_description;\r\n pfc.clasexEstatusIcono = '';\r\n switch ( paso.pt_state ) {\r\n case 1: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: pfc.clasexEstatusIcono= \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n //pfc.Detalles = {};\r\n });\r\n }\r\n console.log (':::pfcStore: ', get().pfcStore );\r\n return(get().pfcStore);\r\n }\r\n else {\r\n get().generaObjErrorAnalysisStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'analysis.store-guardaGetSummarybyUserStore')\r\n }\r\n },\r\n\r\n cambiaPFCStore: async ( idpfc:any, abierto:any, detalle:any, dondeViene:any ) => { \r\n //alert('cambiaPFCStore - index: ' + index + ' abierto: ' + abierto + ' detalle: '+ detalle + ' dondeViene: ' + dondeViene)\r\n //console.log('**cambiaPFCStore - idpfc: ', idpfc , ' dondeViene: ', dondeViene);\r\n switch (dondeViene){\r\n case 'guardaGetDetailbyUserStore': \r\n get().pfcStore.map((pfc:any, indexPFC:any) => {\r\n if (pfc.id==idpfc) { pfc.abierto = true }\r\n else { pfc.abierto = false }\r\n }); \r\n break;\r\n }\r\n },\r\n \r\n pfcDetallesStore: {}, //PFC detalles al dar clic en botón Documentar\r\n pfcDetalleVacia: {\r\n id: 0, processname: \"\", acronym: \"\", frequencyname: \"\", cyclename: \"\", sent: true, nproposals: 0, decision: [],\r\n state_process: { pt_state: 0, pt_state_description: \"\", onwaiting: true, leftdays: 0 },\r\n state_cycle: { pt_state: 0, pt_state_description: \"\", onwaiting: true },\r\n pt_md: [ { name: \"\", description: \"\", value: \"\" } ],\r\n proposal: [ { id: 0, folio: \"\" } ],\r\n files: [ { id: 0, classified: \"\", path: \"\", name: \"\", originalfullname: \"\", createdAt: \"\" } ],\r\n evidence: [ { id: 0, name: \"\", feature: [ { id: 0, name: \"\" } ], proof: [ {id: 0, name: \"\", allowtext: true, other: \"\" } ] } ],\r\n misArchivos:[]\r\n },\r\n pfcMisArchivosVacia: [\r\n { idTipo:'NR', activo:true, descripcion:'Revisión de necesidades ', art:10 , archivos: [] },\r\n { idTipo:'CR', activo:true, descripcion:'Relación de cambios ', art:12, archivos: [] },\r\n { idTipo:'PROOF', activo:false, descripcion:'Reporte de resultados de las pruebas ', art:14, archivos: [] },\r\n { idTipo:'JUSTIFY', activo:false, descripcion:'Justificación de no realizar pruebas ', art:14, archivos: [] },\r\n { idTipo:'API', activo:true, descripcion:'Plan de acción ', art:15, archivos: [] },\r\n ],\r\n\r\n nrArchivosStore: [], \r\n crArchivosStore: [], \r\n proofArchivosStore: [], \r\n justifyArchivosStore: [], \r\n apiArchivosStore: [], \r\n\r\n //*Tareas: GetDetailbyUser // response.data, idpfc, catD (Decision), catP (Pruebas), catEC(Evidencias-Caracteriticas), este trae las caracteristicas por cada evidencia\r\n guardaGetDetailbyUserStore: async (responseAPI:any, idpfc:any, catD:any, catP:any, catEC:any) => { \r\n //console.clear()\r\n //console.log('responseAPI', responseAPI);\r\n //console.log('idpfc:', idpfc, ' catD:', catD, ' catP: ', catP, ' catEC:', catEC)\r\n var _ = require('underscore');\r\n \r\n set ( { pfcDetallesStore: get().pfcDetalleVacia } );\r\n set ( { pfcDetallesStore: responseAPI.item } );\r\n let nrPaso:any = [];\r\n let crPaso:any = [];\r\n let proofPaso:any = [];\r\n let justifyPaso:any = [];\r\n let apiPaso:any = [];\r\n let activaBtnEnviar = true; //aquí vamos captando si esta completa la plantila para activar el botón enviar desde que abre\r\n\r\n if (responseAPI.ret==1) { //sin error\r\n\r\n //*Archivos, agregamos sus elementos a misArchivos\r\n get().pfcDetallesStore.misArchivos = [];\r\n get().pfcDetallesStore.misArchivos = [\r\n { idTipo:'NR', activo:true, descripcion:'Revisión de necesidades ', art:10 , archivos: [] },\r\n { idTipo:'CR', activo:true, descripcion:'Relación de cambios ', art:12, archivos: [] },\r\n { idTipo:'PROOF', activo:false, descripcion:'Reporte de resultados de las pruebas ', art:14, archivos: [] },\r\n { idTipo:'JUSTIFY', activo:false, descripcion:'Justificación de no realizar pruebas ', art:14, archivos: [] },\r\n { idTipo:'API', activo:true, descripcion:'Plan de acción', art:15, archivos: [] },\r\n ]; //generamos un arreglo store por cada elemento de archivo (5 en total) para el manejo interno del dropzone\r\n\r\n let rutaNAS = process.env.REACT_APP_SERV_HOSTNAME + 'docs/analysis/'; //ruta en donde quedarán los archivos\r\n\r\n //archivos\r\n nrPaso = [];\r\n crPaso = [];\r\n proofPaso = [];\r\n justifyPaso = [];\r\n apiPaso = [];\r\n if (get().pfcDetallesStore.files != null && get().pfcDetallesStore.files.length > 0 ) {\r\n get().pfcDetallesStore.files.map((f:any, indexF:any) => {\r\n f.descarga = rutaNAS + f.path + '/' + f.originalfullname;\r\n f.action = 0;\r\n //console.log (':::f.classified: ', f.classified );\r\n switch (f.classified ) {\r\n case 'NR': nrPaso.push(f); get().pfcDetallesStore.misArchivos[0].archivos.push(f); break;\r\n case 'CR': crPaso.push(f); get().pfcDetallesStore.misArchivos[1].archivos.push(f); break;\r\n case 'PROOF': proofPaso.push(f); get().pfcDetallesStore.misArchivos[2].archivos.push(f); get().pfcDetallesStore.misArchivos[2].archivos.activo=true; break;\r\n case 'JUSTIFY': justifyPaso.push(f); get().pfcDetallesStore.misArchivos[3].archivos.push(f); get().pfcDetallesStore.misArchivos[3].archivos.activo=true; break;\r\n case 'API': apiPaso.push(f); get().pfcDetallesStore.misArchivos[4].archivos.push(f); break;\r\n }\r\n });\r\n // si alguno de los elementos no tiene archivos no podemos dejar que se active el botón enviar\r\n get().pfcDetallesStore.misArchivos.map((ma:any, indexMa:any) => {\r\n if (ma.archivos.length==0 && ma.activo) { activaBtnEnviar = false }\r\n }) \r\n }\r\n else { activaBtnEnviar = false };\r\n set ( { nrArchivosStore: nrPaso } );\r\n set ( { crArchivosStore: crPaso } );\r\n set ( { proofArchivosStore: proofPaso } );\r\n set ( { justifyArchivosStore: justifyPaso } );\r\n set ( { apiArchivosStore: apiPaso } );\r\n //\r\n\r\n //*CatD - Decisiones, se extraen decision de pfc y se consulta catálgo decisiones para saber sus nombres, usado en la ventana en encabezado \r\n let pasoD = get().pfcDetallesStore.decision.filter((item:any,index:any)=>{\r\n return get().pfcDetallesStore.decision.indexOf(item) === index;\r\n })\r\n if (pasoD.length>0){\r\n get().pfcDetallesStore.decisionTexto = [];\r\n pasoD.map((pD:any, indexpD:any) => {\r\n catD.map((d:any, indexCatD:any) => { if (pD == d.id) { get().pfcDetallesStore.decisionTexto.push(d.name) } });\r\n });\r\n } \r\n else { get().pfcDetallesStore.decisionTexto = null } \r\n\r\n get().pfcDetallesStore.decisionTextoTodos = [];//botón documentar- liga folio de propuesta, se presenta el estatus\r\n get().pfcDetallesStore.decision.map((d:any, indexD:any) => {\r\n if (d == 2) { get().pfcDetallesStore.decisionTextoTodos.push('Prevista') }\r\n if (d == 3) { get().pfcDetallesStore.decisionTextoTodos.push('No Prevista') }\r\n }); \r\n\r\n //*Evidencias a cada una le agregamos el catPruebas y catECaractericas con los valores leídos del api \r\n let pasoEV = get().pfcDetallesStore.evidence;\r\n pasoEV.map((ev:any, indexEV:any) => {\r\n ev.abierto = false;\r\n ev.swEviCatCaracteristicas = true;\r\n ev.swEviCatPruebas = true;\r\n ev.swEviCatPruebasOtro = true;\r\n \r\n //CatP - Pruebas\r\n //let copiaCatP = catP;\r\n let copiaCatP= JSON.parse(JSON.stringify(catP));\r\n if (ev.proof.length > 0) { //trae información desde api vaciamos al catálogo\r\n let pasoCatP:any = [];\r\n pasoCatP = _.pluck(ev.proof, 'id');\r\n //console.log('ev.id', ev.id, '......pasoCatP: ',pasoCatP);\r\n copiaCatP.map((catP:any, indexCopiaCatP:any) => {\r\n catP.otraTexto = ''; \r\n pasoCatP.map((pp:any, indexPasoCatP:any) => { \r\n if (catP.id == pp) { \r\n catP.activo = true;\r\n //ev.swEviCatPruebas = true;\r\n if (catP.name == 'Otra') {\r\n catP.otraTexto = ev.proof[indexPasoCatP].other;\r\n if (ev.proof[indexPasoCatP].other == null || ev.proof[indexPasoCatP].other == '' ) {\r\n ev.swEviCatPruebasOtro = false;\r\n activaBtnEnviar = false;\r\n } \r\n }\r\n };\r\n if (catP.name != 'Ninguno' && catP.activo ) { \r\n get().pfcDetallesStore.misArchivos[2].activo = true;\r\n if (pasoEV.length==1) { get().pfcDetallesStore.misArchivos[3].activo = false} //si es una solo evidencia es excluyente\r\n };\r\n if (catP.name == 'Ninguno' && catP.activo ) { \r\n get().pfcDetallesStore.misArchivos[3].activo = true;\r\n if (pasoEV.length==1) { get().pfcDetallesStore.misArchivos[2].activo = false}//si es una solo evidencia es excluyente\r\n if (get().pfcDetallesStore.misArchivos[3].archivos.length == 0) { activaBtnEnviar = false }\r\n } ;\r\n });\r\n }); \r\n }\r\n else {\r\n ev.swEviCatPruebas = false;\r\n ev.swEviCatPruebasOtro = false;\r\n activaBtnEnviar = false;\r\n }\r\n ev.miCatPruebas = copiaCatP;\r\n\r\n //CatC - Caracteristicas\r\n //let copiaCatEC = catEC;\r\n let copiaCatEC= JSON.parse(JSON.stringify(catEC));\r\n let catPasoC:any = [];\r\n if (ev.feature.length > 0) { //trae información desde api vaciamos al catálogo\r\n let idActivas:any = [];\r\n idActivas = _.pluck(ev.feature, 'id');\r\n //console.log (':::::::::pasoCatC: ', pasoCatC );\r\n copiaCatEC.map((catEC:any, indexcatEC:any) => {\r\n if (ev.id == catEC.id) {\r\n catPasoC = [];\r\n catEC.features.map((catEC_C:any, indexCatEC_C:any) => {\r\n catEC_C.activo = false; \r\n idActivas.map((idAct:any, indexIdAct:any) => { \r\n if (catEC_C.id==idAct) { catEC_C.activo = true } \r\n });\r\n });\r\n catPasoC = catEC.features; \r\n } \r\n });\r\n }\r\n else {\r\n ev.swEviCatCaracteristicas = false;\r\n activaBtnEnviar = false;\r\n copiaCatEC.map((catEC:any, indexcatEC:any) => {\r\n if (ev.id == catEC.id) {\r\n catPasoC = [];\r\n catEC.features.map((catEC_C:any, indexCatEC_C:any) => { catEC_C.activo = false });\r\n catPasoC = catEC.features; \r\n } \r\n });\r\n //catPasoC = catEC.features; \r\n }\r\n ev.miCatCaracteristicas = catPasoC;\r\n\r\n }); \r\n get().pfcDetallesStore.evidence = pasoEV;\r\n\r\n //*Generales para manejo del front \r\n get().pfcDetallesStore.abierto = true;\r\n get().pfcDetallesStore.btnGuardar = get().pfcDetallesStore.sent ? null : false;\r\n get().pfcDetallesStore.btnEnviar = get().pfcDetallesStore.sent ? null : activaBtnEnviar;\r\n\r\n get().pfcDetallesStore.totalDecision = _.uniq(get().pfcDetallesStore.decision);\r\n\r\n //para ver etiqueta de activo en la ventana sp\r\n let pasoSP = get().pfcDetallesStore.state_process;\r\n get().pfcDetallesStore.estatusProceso = pasoSP.pt_state_description;\r\n if (get().pfcDetallesStore.totalDecision==3){ //No previsto \r\n get().pfcDetallesStore.misArchivos[4].descripcion = 'Informe de instrumentación';\r\n get().pfcDetallesStore.misArchivos[4].art = 24;\r\n }\r\n\r\n\r\n get().pfcDetallesStore.clasexEstatusIcono = \"\";\r\n switch ( pasoSP.pt_state ) {\r\n case 1: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n\r\n //*resultado del api & elementos para manejo del front\r\n console.log (':::::::pfcDetallesStore: ', get().pfcDetallesStore );\r\n //console.log (':::nrArchivosStore: ', get().nrArchivosStore );\r\n //console.log (':::crArchivosStore: ', get().crArchivosStore );\r\n //console.log (':::proofArchivosStore: ', get().proofArchivosStore );\r\n //console.log (':::justifyArchivosStore: ', get().justifyArchivosStore );\r\n //console.log (':::apiArchivosStore: ', get().apiArchivosStore );\r\n\r\n //mandamos la lectura a pfcStore\r\n // get().cambiaPFCStore( idpfc, true, get().pfcDetallesStore, 'guardaGetDetailbyUserStore');\r\n get().cambiaPFCStore( idpfc, true, null, 'guardaGetDetailbyUserStore');\r\n //console.log (':::pfcStore: ', get().pfcStore );\r\n\r\n return(get().pfcDetallesStore);\r\n }\r\n else {\r\n get().generaObjErrorAnalysisStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'analysis.store-guardaGetDetailbyUserStore')\r\n }\r\n }, \r\n\r\n cambiaPFCDetalleStore: async ( idpfc:any, idEvi:any, detalle:any, swActiva: any, dondeViene:any ) => { \r\n //alert('cambiaPFCDetalleStore - index: ' + index + ' abierto: ' + abierto + ' detalle: '+ detalle + ' dondeViene: ' + dondeViene)\r\n //console.log('**cambiaPFCDetalleStore - idpfc: ', idpfc , ' dondeViene: ', dondeViene);\r\n switch (dondeViene){\r\n case 'guardaGetDetailbyUserStore': \r\n get().pfcStore.map((pfc:any, indexPFC:any) => {\r\n if (pfc.id==idpfc) \r\n pfc.abierto = true;\r\n else \r\n pfc.abierto = false;\r\n }); \r\n break;\r\n case 'botonEnviar': \r\n get().pfcStore.map((pfc:any, indexPFC:any) => {\r\n if (pfc.id==idpfc) {\r\n pfc.abierto = false;\r\n pfc.sent = true;\r\n } \r\n }); \r\n get().pfcDetallesStore.btnGuardar = null;\r\n get().pfcDetallesStore.btnEnviar= null;\r\n get().pfcDetallesStore.send = true;\r\n //get().pfcDetallesStore.abierto = false;\r\n break;\r\n case 'cambiaCheckCaracteristicas': \r\n get().pfcDetallesStore.evidence.map((pfcEvi:any, indexPfcEvi:any) => {\r\n if (pfcEvi.id == idEvi) { \r\n pfcEvi.miCatCaracteristicas = detalle;\r\n pfcEvi.swEviCatCaracteristicas = swActiva;\r\n // si el sw es false entonces deactivamos el botonEnviar \r\n if (pfcEvi.swEviCatCaracteristicas == false) { get().pfcDetallesStore.btnEnviar = false }\r\n } \r\n }); \r\n break;\r\n case 'cambiaCheckPruebas': \r\n let swCatSel = false;\r\n get().pfcDetallesStore.evidence.map((pfcEvi:any, indexPfcEvi:any) => {\r\n if (pfcEvi.id == idEvi) { \r\n pfcEvi.miCatPruebas = detalle;\r\n pfcEvi.swEviCatPruebas = swActiva;\r\n }\r\n if (swActiva == false) { get().pfcDetallesStore.btnEnviar = false }\r\n\r\n if (pfcEvi.miCatPruebas[4].activo) { pfcEvi.swEviCatPruebasOtro = true }\r\n else {pfcEvi.swEviCatPruebasOtro = false};\r\n pfcEvi.miCatPruebas.map((catP:any, indexCatP:any) => {\r\n if (catP.activo) { swCatSel = true }\r\n });\r\n /////pfcEvi.swEviCatPruebas = swCatSel\r\n });\r\n \r\n if (swCatSel==false) { get().pfcDetallesStore.misArchivos[2].activo = false } //desactivo la caja de Reporte de resultados de las pruebas porque no esta activo ningun elemento\r\n //console.log(' get().pfcDetallesStore.misArchivos: ', get().pfcDetallesStore.misArchivos) \r\n \r\n //ocupa esta doble vuelta para activar Reporte o Justificación de pruebas (porque puede haber mas de una evidencia)\r\n let swUnaEvidencia = false;\r\n if (get().pfcDetallesStore.evidence.length==1) { swUnaEvidencia = true };\r\n \r\n let swEviNinguno = false;\r\n let swEviOtrasPruebas = false;\r\n get().pfcDetallesStore.evidence.map((pfcEvi:any, indexPfcEvi:any) => {\r\n pfcEvi.miCatPruebas?.map((cp:any, indexCatP:any) => {\r\n if (cp.name != 'Ninguno' && cp.activo) { swEviOtrasPruebas=true }\r\n if (cp.name == 'Ninguno' && cp.activo) { swEviNinguno=true }\r\n }); \r\n }); \r\n if (swEviOtrasPruebas) {\r\n get().pfcDetallesStore.misArchivos[2].activo = true;\r\n if (swUnaEvidencia) { get().pfcDetallesStore.misArchivos[3].activo = false} //si es una sola evidencia es excluyente\r\n } \r\n else { get().pfcDetallesStore.misArchivos[2].activo = false; }\r\n if (swEviNinguno) {\r\n get().pfcDetallesStore.misArchivos[3].activo = true;\r\n if (swUnaEvidencia) { get().pfcDetallesStore.misArchivos[2].activo = false} //si es una sola evidencia es excluyente\r\n }\r\n else { get().pfcDetallesStore.misArchivos[3].activo = false } \r\n\r\n console.log ('::::::::::::::::pfcDetallesStore: ', get().pfcDetallesStore );\r\n break; \r\n\r\n\r\n /* case 'cambiaTextoPruebasOtro': \r\n get().pfcDetallesStore.evidence.map((pfcEvi:any, indexPFC:any) => {\r\n if (pfcEvi.id == idEvi) { \r\n pfcEvi.miCatPruebas = detalle;\r\n pfcEvi.swEviCatPruebasOtro = swActiva;\r\n if (pfcEvi.swEviCatPruebasOtro == false) { get().pfcDetallesStore.btnEnviar = false }\r\n } \r\n }); \r\n break; */\r\n case 'cambiaFilesNR': \r\n get().pfcDetallesStore.misArchivos[0].archivos = detalle;\r\n get().nrArchivosStore = detalle;\r\n break;\r\n case 'cambiaFilesCR': \r\n get().pfcDetallesStore.misArchivos[1].archivos = detalle;\r\n get().crArchivosStore = detalle;\r\n break;\r\n case 'cambiaFilesPROOF': \r\n get().pfcDetallesStore.misArchivos[2].archivos = detalle;\r\n get().proofArchivosStore = detalle;\r\n break;\r\n case 'cambiaFilesJUSTIFY': \r\n get().pfcDetallesStore.misArchivos[3].archivos = detalle;\r\n get().justifyArchivosStore = detalle;\r\n break;\r\n case 'cambiaFilesAPI': \r\n get().pfcDetallesStore.misArchivos[4].archivos = detalle;\r\n get().apiArchivosStore = detalle;\r\n break; \r\n \r\n } \r\n //console.clear();\r\n //console.log ('::::::::::::::::pfcDetallesStore: ', get().pfcDetallesStore );\r\n // console.log ('::::::::::::::::pfcStore: ', get().pfcStore );\r\n //console.log('::::::::::::::::pfcDetallesStore', get().pfcDetallesStore)\r\n },\r\n\r\n updatebyUserStore:{},\r\n\r\n //*Tarea: UpdatebyUser\r\n //entra desde RD- botón:Guardar - \r\n guardaUpdatebyUserStore: async (responseAPI:any) => { \r\n //console.log('guardaUpdatebyUserStore-responseAPI:',responseAPI)\r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { updatebyUserStore: responseAPI } );\r\n //console.log('updatebyUserStore:', get().updatebyUserStore);\r\n return(get().updatebyUserStore);\r\n }\r\n else {\r\n get().generaObjErrorAnalysisStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'analysis.store-guardaUpdatebyUserStore')\r\n }\r\n },\r\n\r\n sendbyUserStore:{},\r\n\r\n //*Tarea: SendbyUser\r\n //entra desde RP- botón: Registrar - botón: Guardar - \r\n guardaSendbyUserStore: async (responseAPI:any) => { \r\n //console.log('guardaSendbyUserStore-responseAPI:',responseAPI)\r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { sendbyUserStore: responseAPI } );\r\n //console.log('sendbyUserStore:', get().sendbyUserStore);\r\n return(get().sendbyUserStore);\r\n }\r\n else {\r\n get().generaObjErrorDecisionsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'analysis.store-guardaSendbyUserStore')\r\n }\r\n }, \r\n \r\n}));\r\n\r\nexport default analysisStore;\r\n","/*Recurso: Dashboard Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n GetSummarybyUser/{lang}\r\n GetDetailbyUser/{lang}\r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport { fn } from \"jquery\";\r\nimport create from \"zustand\";\r\n\r\nconst dashboardStore = create((set:any, get:any) => ({\r\n\r\n objErrorDashboardStore: { hasError: false, url: '', body:'', recurso:\"dashboard\", componente:'', idresul: 0, desresul:'', menu:''}, //se llena con la información del api si éste tiene error\r\n\r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI \r\n limpiaObjErrorDashboardStore: () => {\r\n let paso = { hasError: false, url:'', body:'', recurso:'dashboard', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorDashboardStore: paso } );\r\n //console.log('limpiaObjErrorDashboardStore (sale) - objErrorDashboardStore: ', get().objErrorDashboardStore);\r\n },\r\n \r\n //*Error en api // entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorDashboardStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //console.log('*generaObjErrorDashboardStore (entra): ', responseAPI);\r\n //console.log('*generaObjErrorDashboardStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'dashboard', componente:c, idresul:0, desresul:'', menu:m };\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n //console.log('paso2');\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n set( { objErrorDashboardStore: paso } );\r\n //console.log('::DashboardStore - generaObjErrorDashboardStore (sale) - objErrorDashboardStore: ', get().objErrorDashboardStore);\r\n },\r\n\r\n pfcStore: [], //guarda la lista de los procesos/frecuencia/ciclo completa sin agrupar por dominio\r\n pfcDominioStore: [], //guarda la lista de los procesos/frecuencia/ciclo completa agrupada por dominio\r\n\r\n //*Tareas: GetSummarybyUser // lista de procesos/frecuencia/ciclo \r\n guardaGetSummarybyUserStore: async (responseAPI:any) => { \r\n //console.clear();\r\n //console.log('guardaGetSummarybyUserStore - responseAPI:', responseAPI)\r\n //console.log('guardaGetSummarybyUserStore - catD:', catD)\r\n var _ = require('underscore');\r\n if (responseAPI.ret==1) { //sin error\r\n\r\n let pfcPaso= responseAPI.item;\r\n\r\n pfcPaso.map((pfc:any) => {\r\n pfc.abierto = false; //por omisión entra cerrado //*pfc.isCollapse\r\n pfc.pfcNombre = pfc.acronym + ' / ' + pfc.frequencyname + ' / ' + pfc.cyclename; //*pfc.acronymfrequencycicle // c.acronymfrequencycicle.toUpperCase().includes(page.inputValue.toUpperCase())\r\n pfc.numEvidence = pfc.evidence.length;\r\n\r\n let paso = pfc.state_process;\r\n pfc.estatusProceso = paso.pt_state_description;\r\n pfc.clasexEstatusIcono = \"\";\r\n switch ( paso.pt_state ) {\r\n case 1: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: pfc.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: pfc.clasexEstatusIcono= \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n //*Decision Prevista / No prevista\r\n //en el encabezado del cuadro los artículos son diferentes para Prevista y no prevista, sin embargo el arreglo puede traer las dos\r\n //si es el caso los encabezados llevaron los artículos de la No prevista\r\n //pueden venir así decision: [2], decision: [3], decision: [2,3] **nunca vacío\r\n let swPrevista = false;\r\n let swNoPrevista = false;\r\n if (pfc.decision.length == 1) { pfc.swDecision = pfc.decision[0] }\r\n else {\r\n pfc.decision.map((dec:any, indexDec:any) => {\r\n if (dec == 2) { swPrevista = true }\r\n if (dec == 3) { swNoPrevista = true }\r\n });\r\n if (swPrevista) { pfc.swDecision = 2 }\r\n if (swNoPrevista) { pfc.swDecision = 3 } //si el arreglo trae no prevista éste será el que se visualiza\r\n }\r\n if (swPrevista && swNoPrevista) { pfc.swDecision = 23} //asignado solo para control de los dos elementos\r\n //*\r\n //lo ocupa para agregar el letro cuando se uso el filtro \r\n if (pfc.sent) { pfc.textoSent = 'Concluida'; }\r\n else { pfc.textoSent = 'En proceso de documentación' }\r\n \r\n });\r\n \r\n set ( { pfcStore: pfcPaso } );\r\n //console.log ('---------:::::::::pfcStore: ', get().pfcStore );\r\n //generamos pfcDominioStore // genera agrupación por pfc\r\n get().generaPfcDominioStore (pfcPaso);\r\n \r\n return(get().pfcDominioStore);\r\n }\r\n else {\r\n get().generaObjErrorDashboardStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'dashboard.store-guardaGetSummarybyUserStore')\r\n }\r\n },\r\n\r\n generaPfcDominioStore: async ( pfcArreglo: any ) => {\r\n\r\n //agrupamos por dominio\r\n var _ = require('underscore');\r\n let pfcPasoD = _.groupBy(pfcArreglo, 'domainname'); \r\n let claves = Object.keys(pfcPasoD); // claves = [\"nombre dominio\", \"nombre dominio\", \"nombre dominio\", ... ];\r\n let pfcArray = [];\r\n let pfcArrayElem:any = { 'id':0, 'dominio':'', 'abierto':true, 'arreglo':[], 't':0, 'e':0, 'c':0 };\r\n let clave = '';\r\n for (let i = 0; i < claves.length; i++) {\r\n pfcArrayElem = { 'id':0, 'dominio':'', 'abierto':true, 'arreglo':[], 't':0, 'e':0, 'c':0 };\r\n clave = claves[i];\r\n pfcArrayElem = { 'id': i, 'dominio':clave, 'abierto':true, 'arreglo': pfcPasoD[clave], 't':0, 'e':0, 'c':0 }\r\n pfcArray.push(pfcArrayElem);\r\n }\r\n //console.log('pfcArray...', pfcArray)\r\n get().pfcDominioStore = pfcArray;\r\n\r\n //variables para agrupar por pfc y dejar en pfc.arregloFiltrado\r\n let pfcArregloFiltradoPaso:any = {}; \r\n let arregloFiltrado:any = [];\r\n let arregloFiltradoE:any = [];\r\n let arregloFiltradoC:any = [];\r\n let arregloElemFiltrado:any = { 'id':0, 'pfcNombre':'', 'abierto':false, 'arreglo':[], 'arregloDetalles':[],'t':0, 'e':0, 'c':0 };\r\n let clavesFiltrado:any = {};\r\n let claveF = '';\r\n \r\n get().pfcDominioStore.map((pfc:any, indexPfc:any) => {\r\n //agrupamos pfc\r\n pfcArregloFiltradoPaso = {}; \r\n pfcArregloFiltradoPaso = _.groupBy(pfc.arreglo, 'pfcNombre'); \r\n clavesFiltrado = Object.keys(pfcArregloFiltradoPaso); // claves = {\"pfcNombre\", \"pfcNombre\", \"pfcNombre\", ... };\r\n arregloFiltrado = [];\r\n arregloFiltradoE = [];\r\n arregloFiltradoC = [];\r\n let swDecisionPaso = 0;\r\n let objDecisionPaso = [];\r\n if (clavesFiltrado.length > 0) {\r\n swDecisionPaso = 0;\r\n objDecisionPaso = [];\r\n for (let i=0; i < clavesFiltrado.length; i++) {\r\n arregloElemFiltrado = { 'id':0, 'pfcNombre':'', 'abierto':false, 'arreglo':[], 'arregloDetalles':[], swDecision:null, 't':0, 'e':0, 'c':0 };\r\n claveF = clavesFiltrado[i];\r\n objDecisionPaso = pfcArregloFiltradoPaso[claveF];\r\n\r\n if (objDecisionPaso.length == 1) {swDecisionPaso = objDecisionPaso[0].swDecision }\r\n else {\r\n objDecisionPaso.map((objD:any, indexobjD:any) => {\r\n if ( objD.swDecision == 0 ) { swDecisionPaso = objD.swDecision }\r\n if ( objD.swDecision == 23 ) { swDecisionPaso = 23 }\r\n if ( objD.swDecision == 2 && swDecisionPaso == 3) { swDecisionPaso = 23 }\r\n if ( objD.swDecision == 3 && swDecisionPaso == 2) { swDecisionPaso = 23 }\r\n });\r\n }\r\n //console.log('***objDecisionPaso',objDecisionPaso)\r\n \r\n\r\n arregloElemFiltrado = { 'id':i, 'pfcNombre':claveF, 'abierto':false, 'arreglo':pfcArregloFiltradoPaso[claveF], 'arregloDetalles':[], swDecision:swDecisionPaso, 't':0, 'e':0, 'c':0 }\r\n arregloFiltrado.push(arregloElemFiltrado);\r\n } \r\n pfc.pfcAgrupado = arregloFiltrado;\r\n }\r\n //contamos Concluidas y En proceso a nivel dominio\r\n let contE = 0;\r\n let contC = 0;\r\n \r\n pfc.arreglo.map((arr:any, indexArr:any) => {\r\n if (arr.sent) { contC = contC + 1 }\r\n else { contE = contE + 1 }\r\n });\r\n pfc.e = contE; //sin agrupar\r\n pfc.c = contC; //sin agrupar\r\n pfc.t = pfc.arreglo.length; //total sin agrupadas\r\n \r\n\r\n //contamos Concluidas y En proceso a nivel pfc dentro de pfcAgrupado\r\n pfc.pfcAgrupado.map((pfcF:any, indexpfcF:any) => {\r\n contE = 0;\r\n contC = 0;\r\n pfcF.arreglo.map((pfcFArreglo:any, indexPfcFArreglo:any) => {\r\n if (pfcFArreglo.sent) { contC = contC + 1 }\r\n else { contE = contE + 1 }\r\n }); \r\n pfcF.c = contC;\r\n pfcF.e = contE;\r\n pfcF.t = contC + contE;\r\n });\r\n });\r\n\r\n let pasoE:any = [];\r\n let pasoC:any = [];\r\n get().pfcDominioStore.map((pfc:any, indexPfc:any) => {\r\n pasoE = [];\r\n pasoC = [];\r\n pfc.pfcAgrupado.map((pfcAgr:any, indexPfcAgr:any) => {\r\n //console.log ('pfcAgr..',pfcAgr)\r\n pfcAgr.arreglo.map((arr:any, indexArr:any) => {\r\n if (arr.sent) { pasoC.push(pfcAgr) } \r\n else { pasoE.push(pfcAgr) }\r\n }); \r\n }); \r\n pfc.pfcAgrupadoE = _.uniq(pasoE); \r\n pfc.pfcAgrupadoC = _.uniq(pasoC);\r\n\r\n pfc.pfcAgrupado.map((pfcAgr:any, indexAgrupado:any) => { pfcAgr.id = indexAgrupado });\r\n //pfc.pfcAgrupadoC.map((pfcAgrC:any, indexAgrupadoC:any) => { pfcAgrC.id = indexAgrupadoC });\r\n //pfc.pfcAgrupadoE.map((pfcAgrE:any, indexAgrE:any) => { pfcAgrE.id = indexAgrE });\r\n pfc.pfcAgrupadoT = pfc.pfcAgrupado;\r\n\r\n\r\n });\r\n \r\n //console.log (':::::::::pfcDominioStore: ', get().pfcDominioStore );\r\n },\r\n\r\n cambiaIndiceStore: async (opc:any) => {\r\n //alert('entro...' + opc);\r\n get().pfcDominioStore.map((pfc:any, indexPfc:any) => {\r\n if (opc=='T') { pfc.pfcAgrupado.map((pfcAgr:any, indexAgrupado:any) => { pfcAgr.id = indexAgrupado }); pfc.pfcAgrupadoT = pfc.pfcAgrupado; }\r\n if (opc=='C') {pfc.pfcAgrupadoC.map((pfcAgrC:any, indexAgrupadoC:any) => { pfcAgrC.id = indexAgrupadoC }) }\r\n if (opc=='E') {pfc.pfcAgrupadoE.map((pfcAgrE:any, indexAgrE:any) => { pfcAgrE.id = indexAgrE }) }\r\n });\r\n //console.log ('xxxxx:::::::::pfcDominioStore: ', get().pfcDominioStore );\r\n\r\n },\r\n\r\n filtraPFC: async( opc:any) => {\r\n var _ = require('underscore');\r\n //variables para contar cuantas hay Concluidas o en proceso para la presentación de los radios \r\n let contE = 0;\r\n let contC = 0;\r\n\r\n //variables para agrupar por pfc y dejar en pfc.arregloFiltrado\r\n let pfcArregloFiltradoPaso:any = {}; \r\n let arregloFiltrado:any = [];\r\n let arregloElemFiltrado:any = {'id':0, 'pfcNombre':'', 'abierto':false, 'arreglo':[], 'arregloDetalles':[],'t':0, 'e':0, 'c':0 };\r\n let clavesFiltrado:any = {};\r\n let claveF = '';\r\n \r\n get().pfcDominioStore.map((pfc:any, indexPfc:any) => {\r\n //agrupamos pfc\r\n pfcArregloFiltradoPaso = {}; \r\n pfcArregloFiltradoPaso = _.groupBy(pfc.pfcAgrupado, 'pfcNombre'); \r\n clavesFiltrado = Object.keys(pfcArregloFiltradoPaso); // claves = {\"pfcNombre\", \"pfcNombre\", \"pfcNombre\", ... };\r\n arregloFiltrado = [];\r\n if (clavesFiltrado.length > 0) {\r\n for (let i=0; i < clavesFiltrado.length; i++) {\r\n arregloElemFiltrado = { 'id':0, 'pfcNombre':'', 'abierto':false, 'arreglo':[], 'arregloDetalles':[], 't':0, 'e':0, 'c':0 };\r\n claveF = clavesFiltrado[i];\r\n arregloElemFiltrado = { 'id':i, 'pfcNombre':claveF, 'abierto':false, 'arreglo':pfcArregloFiltradoPaso[claveF], 'arregloDetalles':[], 't':0, 'e':contE, 'c':contC }\r\n arregloFiltrado.push(arregloElemFiltrado);\r\n }\r\n if (opc==null) { pfc.pfcAgrupado = arregloFiltrado}\r\n if (opc=='E') { pfc.pfcAgrupadoE = arregloFiltrado; }\r\n if (opc=='C') { pfc.pfcAgrupadoC = arregloFiltrado;}\r\n }\r\n\r\n });\r\n\r\n },\r\n\r\n cambiaPfcDominioStore: async ( idpfcD:any, idpfcA:any, datos:any, dondeViene:any ) => { \r\n //alert('cambiaPfcDominioStore - idpfc:' + idpfc + ' parametro: ' + parametro + ' dondeViene: ' + dondeViene)\r\n //console.clear();\r\n //console.log('**cambiaPfcDominioStore- idpfcD: ', idpfcD , ' -idpfcA: ', idpfcA , ' -parametro: ', datos, ' -dondeViene: ', dondeViene);\r\n var _ = require('underscore');\r\n switch (dondeViene){\r\n case 'abreCierraDominio': \r\n get().pfcDominioStore.map((pfcD:any, pfcIndex:any) => {\r\n if (pfcD.id==idpfcD) { pfcD.abierto = !pfcD.abierto }\r\n }); \r\n break;\r\n case 'abreCierraPFCTodos': \r\n get().pfcDominioStore.map((pfcD:any, pfcIndex:any) => {\r\n pfcD.pfcAgrupado.map((pfcA:any, indexpfcA:any) => { \r\n pfcA.abierto = false; \r\n }); \r\n }); \r\n //console.log('abreCierraPFCTodos');\r\n break;\r\n case 'abreCierraPFC': \r\n get().pfcDominioStore.map((pfcD:any, pfcIndex:any) => {\r\n if (pfcD.id==idpfcD) {\r\n pfcD.pfcAgrupado.map((pfcA:any, indexpfcA:any) => { \r\n if (pfcA.id==idpfcA) { pfcA.abierto = !pfcA.abierto } \r\n }); \r\n } \r\n }); \r\n break;\r\n case 'armaArregloDetalle': \r\n get().pfcDominioStore.map((pfcD:any, IndexpfcD:any) => {\r\n if (pfcD.id==idpfcD) {\r\n pfcD.pfcAgrupado.map((pfcA:any, indexpfcA:any) => { \r\n if (pfcA.id==idpfcA) {\r\n pfcA.abierto = !pfcA.abierto;\r\n pfcA.arregloDetalles = get().pfcAgrupadoDetallesStore;\r\n } \r\n }); \r\n } \r\n }); \r\n break;\r\n case 'cambiaRadioFiltro': \r\n //console.log('paso');\r\n \r\n switch (datos) {\r\n case 'T':\r\n get().pfcTStore=true; get().pfcDStore= false; get().pfcCStore = false;\r\n get().generaPfcDominioStore(get().pfcStore);\r\n break;\r\n case 'D': \r\n get().pfcTStore=false; get().pfcDStore= true; get().pfcCStore = false; \r\n let pasoD = [];\r\n pasoD = _.filter(get().pfcStore, function(c:any){return !c.sent})\r\n get().generaPfcDominioStore(pasoD);\r\n break;\r\n case 'C':\r\n let pasoC:any = [];\r\n get().pfcTStore=false; get().pfcDStore= false; get().pfcCStore = true; \r\n pasoC = _.filter(get().pfcStore, function(c:any){return c.sent})\r\n get().generaPfcDominioStore(pasoC);\r\n break;\r\n default: \r\n get().pfcTStore=true; get().pfcDStore= false; get().pfcCStore = false;\r\n get().generaPfcDominioStore(get().pfcStore);\r\n break;\r\n }\r\n break;\r\n } \r\n //console.log ('::::::::::::::::pfcDominioStore: ', get().pfcDominioStore );\r\n },\r\n \r\n pfcAgrupadoDetallesStore:[], //integramos las lecturas de GetDetailbyUser de los elementos acumulados de pfc\r\n\r\n limpiaPfcAgrupadoDetallesStore: async (responseAPI:any) => {\r\n set ( { pfcAgrupadoDetallesStore: [] } );\r\n },\r\n\r\n pfcDetallesStore:{},\r\n pfcDetallesVaciaStore:{ sent: true, id: 0, cyclename: '', \r\n decision: [],\r\n proposal: [],\r\n files: [],\r\n evidence: [],\r\n acronym: '',\r\n frequencyname: '',\r\n processname: '',\r\n domainid: 0,\r\n domainname: '',\r\n state_process: { pt_state: 0, pt_state_description: '', onwaiting: true, leftdays: 0 },\r\n domainacronym: ''\r\n },\r\n //*Tareas: GetDetailbyUser // recibe los detalles de la unidad de análisis (pfc) seleccionada // idprop:any, tipo:any, catD:any, catP:any, catC:any, catE:any\r\n guardaGetDetailbyUserStore: async (responseAPI:any, idD:any, idA:any, catD:any) => { \r\n\r\n //console.log('responseAPI', responseAPI);\r\n //console.log(' idD:', idD, ' idA:', idA)\r\n var _ = require('underscore');\r\n if (responseAPI.ret==1) { //sin error\r\n set ( { pfcDetallesStore: get().pfcDetallesVaciaStore } ) \r\n set ( { pfcDetallesStore: responseAPI.item } )\r\n \r\n //agregamos elementos extras para manejo del front\r\n get().pfcDetallesStore.abierto = true;\r\n //para ver etiqueta de activo en la ventana sp\r\n let paso = get().pfcDetallesStore.state_process;\r\n //console.log(':::::::::::::paso',paso)\r\n get().pfcDetallesStore.estatusProceso = paso.pt_state_description;\r\n get().pfcDetallesStore.clasexEstatusIcono = \"\";\r\n switch ( paso.pt_state ) {\r\n case 1: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: get().pfcDetallesStore.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: get().pfcDetallesStore.clasexEstatusIcono= \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n \r\n get().pfcDetallesStore.textoDecision = '';\r\n get().pfcDetallesStore.textoDecisionExcel = '';\r\n get().pfcDetallesStore.decision.map((dec:any, indexDec:any) => {\r\n catD.map((catD:any, indexCatD:any) => {\r\n if (dec == catD.id) { \r\n get().pfcDetallesStore.textoDecision = get().pfcDetallesStore.textoDecision + '' + catD.name + ' ';\r\n get().pfcDetallesStore.textoDecisionExcel = get().pfcDetallesStore.textoDecisionExcel + catD.name + ' ';\r\n }\r\n });\r\n });\r\n get().pfcDetallesStore.numEvidencias = get().pfcDetallesStore.evidence.length;\r\n\r\n //para poner los letreros (Reporte y/o Justificación) dentro de la columna Reporte de pruebas\r\n get().pfcDetallesStore.swProof = false;\r\n get().pfcDetallesStore.swJustify = false;\r\n if (get().pfcDetallesStore.files.length> 0) {\r\n get().pfcDetallesStore.files.map((f:any, indexF:any) => {\r\n f.path = f.path + '\\\\' ; \r\n if (f.name!=null && f.name !=''){\r\n f.nombreCorto= ( f.name.length > 8) ? f.name.substring(0,8) + '...' : f.name; \r\n if (f.classified=='PROOF') { get().pfcDetallesStore.swProof=true }\r\n if (f.classified=='JUSTIFY') { get().pfcDetallesStore.swJustify=true }\r\n }\r\n })\r\n }\r\n\r\n get().pfcAgrupadoDetallesStore.push (get().pfcDetallesStore);\r\n\r\n get().pfcDominioStore[idD].pfcAgrupado[idA].arregloDetalles.push (get().pfcDetallesStore);\r\n \r\n //get().pfcDominioStore[idD].pfcAgrupadoT[idA].arregloDetalles.push (get().pfcDetallesStore);\r\n /* get().pfcDominioStore.map((pfc:any, indexPfc:any) => {\r\n pfc.pfcAgrupadoT = pfc.pfcAgrupado;\r\n }); */\r\n \r\n //console.log (':::pfcAgrupadoDetallesStore: ', get().pfcAgrupadoDetallesStore );\r\n console.log ('getDetail----:pfcDominioStore: ', get().pfcDominioStore );\r\n //console.log ('xxxxx:::::::::pfcDominioStore: ', get().pfcDominioStore );\r\n return(get().pfcDetallesStore);\r\n }\r\n else {\r\n get().generaObjErrorDecisionsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'dashboard.store-guardaGetDetailbyUserStore')\r\n }\r\n },\r\n\r\n radioFiltroStore: [\r\n {id:'T', texto:'Todos', activo:true},\r\n {id:'E', texto:'En proceso de documentación', activo:false},\r\n {id:'C', texto:'Concluido', activo:false}\r\n ], \r\n radioFiltroSelStore: 'T' ,\r\n\r\n cambiaRadioFiltroStore: async ( opc:any) => {\r\n set ( { radioFiltroSelStore: opc} );\r\n get().radioFiltroStore.map((rf:any, indexRF:any) => {\r\n if (rf.id == opc) { rf.activo = true } \r\n else { rf.activo = false }\r\n });\r\n \r\n get().pfcDominioStore.map((pfc:any, indexPfc:any) => {\r\n if (opc=='T') { pfc.pfcAgrupado = pfc.pfcAgrupadoT };\r\n if (opc=='E') { pfc.pfcAgrupado = pfc.pfcAgrupadoE };\r\n if (opc=='C') { pfc.pfcAgrupado = pfc.pfcAgrupadoC };\r\n });\r\n\r\n //console.clear();\r\n //console.log ('cambiaRadio---------------:::pfcDominioStore: ', get().pfcDominioStore );\r\n //console.log('::::::::radioFiltroStore::', get().radioFiltroStore);\r\n },\r\n \r\n recargaStore: async ( opc:any) => {\r\n console.log('voy por recarga')\r\n }\r\n}));\r\n\r\nexport default dashboardStore;\r\n","/*Recurso: Configurations - Variables y rutinas store que almacenan la respuesta del API y su manipulación en el front\r\n Tareas:\r\n GetSummaryProponentUser\r\n GetSummaryUserNotificationbyEmail\r\n UpdateProponentUser\r\n*/\r\n//elementos stores: elementos que llenamos con inf. del api y otros elementos captados del front o para manejo del front\r\n//funciones stores: rutinas que captan o modifican los elementos store\r\n//response: { config: {}, hearders:{}, request:{}, data: { informacion: {}, resultado: {}, contenido: [{ }] } } //esto trae la lectura de api\r\n\r\nimport create from \"zustand\";\r\n\r\nconst configurationsStore = create((set:any, get:any) => ({\r\n \r\n objErrorConfigurationsStore: { hasError: false, url: '', body:'', recurso:\"configurations\", componente:'', idresul: 0, desresul:'', menu:'' }, //se llena con la información del api si éste tiene error\r\n \r\n //*Limpia objeto de error cuando éste ya se mostro en VentanaObjeErrorAPI \r\n limpiaObjErrorConfigurationsStore: () => {\r\n let paso = { hasError: false, url:'', body:'', recurso:'configurations', componente:'', idresul:0, desresul:'', menu:''}\r\n set( { objErrorConfigurationsStore: paso } );\r\n //console.log('limpiaObjErrorConfigurationsStore (sale) - objErrorConfigurationsStore: ', get().objErrorConfigurationsStore);\r\n },\r\n \r\n //*Error en api: entra a esta función cuando el servicio cae en catch y muestra el error en VentanaObjError\r\n generaObjErrorConfigurationsStore: async (responseAPI:any, h:any, h2:any, e:any, c:any, m:any) => {\r\n //console.log('*generaObjErrorConfigurationsStore (entra): ', responseAPI);\r\n //console.log('*generaObjErrorConfigurationsStore (entra): h: ', h , ' h2: ', h2 , ' e: ', e , ' c: ', c );\r\n let paso = { hasError: h, url:'', body:e, recurso:'configurations', componente:c, idresul:0, desresul:'', menu:m };\r\n if (responseAPI==undefined || responseAPI=='Error: Network Error'){\r\n paso.idresul=-1;\r\n paso.desresul= 'Error inesperado, asegure su conexión con internet y vpn';\r\n }\r\n else if (responseAPI=='Error detectado por api en ret') {\r\n paso.desresul= h;\r\n paso.idresul= h2; \r\n }\r\n else {\r\n let temp = responseAPI.config;\r\n paso.url = temp.url;\r\n if (responseAPI.data!=\"\" && responseAPI.data!=null){\r\n console.log('paso2');\r\n paso.idresul=responseAPI.data.ret;\r\n paso.desresul= responseAPI.data.msjerror;\r\n } \r\n else {\r\n paso.idresul= responseAPI.status;\r\n switch(responseAPI.status){\r\n //case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información, error al leer la tarea del API\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n }\r\n } \r\n }\r\n //console.log('paso', paso);\r\n set( { objErrorConfigurationsStore: paso } );\r\n console.log('::configurationsStore - generaObjErrorConfigurationsStore (sale) - objErrorConfigurationsStore: ', get().objErrorConfigurationsStore);\r\n },\r\n \r\n panelStore: [ \r\n {id:0, abierto:false, texto:'Alta de usuarios proponentes' }, \r\n {id:1, abierto:false, texto:'Adicionar usuarios para notificaciones vía correo electrónico' }\r\n ], //guarda el panel (menu principal de Configuración), usado para abrir y cerrar panel ventanas y lectura de api\r\n\r\n cierraPanelStore: async () => { //cerramos todos los elementos del panel cada vez que entra en configuración\r\n //console.log('cierraPanelStore...' )\r\n get().panelStore.map((pc:any, indexPC:any) => { pc.abierto = false });\r\n //console.log ('::::::::::::::::panelStore: ', get().panelStore );\r\n },\r\n\r\n cambiaPanelStore: async ( idPanel:any) => { \r\n //console.log('cambiaPanelStore...' + idPanel)\r\n get().panelStore.map((pc:any, indexPC:any) => { \r\n if (pc.id == idPanel) \r\n pc.abierto = ! pc.abierto;\r\n });\r\n //console.log ('::::::::::::::::panelStore: ', get().panelStore );\r\n },\r\n\r\n catalogoPermisosUsuariosStore:[\r\n { id:0, descripcion:\"Con rol RP / RD\", activo:true, disabled:true, visible:true},\r\n { id:1, descripcion:\"Rol RP\", activo:false, disabled:false, visible:false},\r\n { id:2, descripcion:\"Rol RD\", activo:false, disabled:false, visible:false},\r\n { id:3, descripcion:\"Todo el personal de INEGI\", activo:false, disabled:false, visible:true},\r\n { id:4, descripcion:\"Personal adscrito a la Dirección General\", activo:false, disabled:false, visible:true},\r\n { id:5, descripcion:\"Usuarios específicos\", activo:false, disabled:false, visible:true},\r\n ],\r\n\r\n permisosUsuariosStore:[\r\n { id:0, permisos:1, idCatalogoPermisosUsuario:[1] },\r\n { id:1, permisos:2, idCatalogoPermisosUsuario:[2] },\r\n { id:2, permisos:4, idCatalogoPermisosUsuario:[3] },\r\n { id:3, permisos:8, idCatalogoPermisosUsuario:[4] },\r\n { id:4, permisos:16, idCatalogoPermisosUsuario:[5] },\r\n { id:5, permisos:3, idCatalogoPermisosUsuario:[0] },\r\n { id:6, permisos:7, idCatalogoPermisosUsuario:[0,3] },\r\n { id:7, permisos:11, idCatalogoPermisosUsuario:[0,4] },\r\n { id:8, permisos:19, idCatalogoPermisosUsuario:[0,5] },\r\n { id:9, permisos:27, idCatalogoPermisosUsuario:[0,4,5] },\r\n { id:10, permisos:24, idCatalogoPermisosUsuario:[4,5] }\r\n ],\r\n\r\n usuariosProponentesStore: [], //guarda la lista de usuarios proponentes generada por la lectura del api\r\n\r\n //*Tareas: GetSummaryProponentUser // lista de usuarios proponentes (panel 0)\r\n guardaGetSummaryProponentUserStore: async (responseAPI:any) => { \r\n //console.clear();\r\n console.log('guardaGetSummaryProponentUserStore - responseAPI:', responseAPI)\r\n //var _ = require('underscore');\r\n\r\n if (responseAPI.ret==1) { //sin error\r\n\r\n let upPaso = responseAPI.item ;\r\n let pasoCatPer:any =[];\r\n upPaso.map((up:any, indexUP:any) => {\r\n up.abierto = false; //por omisión entra cerrado \r\n up.swUsuariosEspecificos = false;\r\n //para cargar su propio catálogo de permisos\r\n pasoCatPer = JSON.parse(JSON.stringify(get().catalogoPermisosUsuariosStore)); //reinicio arreglo\r\n\r\n //Con rol RP / RD (id cat:0, permisos b.d.: 3,7,11,19,27,24 )\r\n if (up.setting.right_propose==3 || up.setting.right_propose==7 || up.setting.right_propose==11 || up.setting.right_propose==19 || up.setting.right_propose==27 || up.setting.right_propose==24 ) { pasoCatPer[0].activo = true }\r\n //Rol RP(id cat:1, permisos b.d.: 1 ) //no entra rp entra Como rol RP/RD\r\n if (up.setting.right_propose==1 ) { pasoCatPer[0].activo = true } \r\n //Rol RD(id cat:2, permisos b.d.: 2 ) //nunca pasa por aquí rd no configura\r\n if (up.setting.right_propose==2 ) { pasoCatPer[2].activo = true } \r\n //Todo el personal de INEGI (id cat:1, permisos b.d.:4,7 )\r\n if ( up.setting.right_propose==4 || up.setting.right_propose==7 ) { pasoCatPer[3].activo = true }\r\n //Personal adscrito a la Dirección General (id cat:2, permisos b.d.: 8,11 )\r\n if ( up.setting.right_propose==8 || up.setting.right_propose==11 || up.setting.right_propose==24 ) { pasoCatPer[4].activo = true }\r\n //Usuarios específicos (id cat:3, permisos b.d.: 16,19,27,24 )\r\n if (up.setting.right_propose==16 || up.setting.right_propose==19 || up.setting.right_propose==27 || up.setting.right_propose==24 ) { \r\n pasoCatPer[5].activo = true;\r\n up.swUsuariosEspecificos = true;\r\n } \r\n up.catPermisos = pasoCatPer;\r\n \r\n //hago mayusculas nombre & correo\r\n if (up.setting.specificuser.length > 0){\r\n up.setting.specificuser.map((su:any, indexSu:any) => { \r\n su.name = su.name.toUpperCase()\r\n su.account = su.account.toUpperCase()\r\n });\r\n }\r\n\r\n up.misUsuEspecificos = up.setting.specificuser;\r\n up.misUsuEspecificosOrigen = up.misUsuEspecificos;\r\n\r\n //para traer el estutus \r\n let paso = up.state_process;\r\n up.estatusProceso = paso.pt_state_descripcion;\r\n up.clasexEstatusIcono = \"\";\r\n switch ( paso.pt_state ) {\r\n case 1: up.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: up.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: up.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: up.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: up.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n if (up.name=='Todos') { up.id=0; up.name='Todos los procesos a su cargo' } //me aseguro que no tenga null \r\n });\r\n set ( { usuariosProponentesStore: upPaso } );\r\n console.log('::::::::::usuariosProponentesStore: ', get().usuariosProponentesStore)\r\n return(get().usuariosProponentesStore);\r\n }\r\n else {\r\n get().generaObjErrorConfigurationsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'configurations.store-guardaGetSummaryProponentUserStore')\r\n }\r\n },\r\n\r\n //cambia los elementos del catálogo de usuarios autorizados asignado a UsuariosProponentesStore\r\n //recibe id de UsuarioProponete e id del catálogo Usuarios autorizados (permisos)\r\n cambiaUsuariosProponentesStore: async ( id:any, idCat:any, objeto:any, dondeViene:any ) => { \r\n //console.log('cambiaUsuariosProponentesStore...' , id, '..' , objeto, '..' , idCat, '..', dondeViene )\r\n \r\n switch (dondeViene){\r\n case 'cambiaCatPermisosUsuarioEspecifico': \r\n get().usuariosProponentesStore.map((up:any, indexUP:any) => { \r\n if (up.id == id) {\r\n up.catPermisos?.map((catP:any, indexCatP:any) => { \r\n if (catP.id == idCat) {\r\n catP.activo = false\r\n //up.catPermisos[5].activo = false;\r\n up.swUsuariosEspecificos = false;\r\n }\r\n });\r\n }\r\n \r\n });\r\n\r\n break;\r\n case 'cambiaCatPermisos': \r\n get().usuariosProponentesStore.map((up:any, indexUP:any) => { \r\n if (up.id == id) {\r\n up.catPermisos?.map((catP:any, indexCatP:any) => { \r\n if (catP.id == idCat) {\r\n catP.activo = !catP.activo;\r\n if (catP.id == 3 && catP.activo) {\r\n up.catPermisos[4].activo = false;\r\n up.catPermisos[5].activo = false;\r\n }\r\n if (catP.id == 4 && catP.activo) { up.catPermisos[3].activo = false }\r\n if (catP.id == 5 && catP.activo) {\r\n up.catPermisos[3].activo = false;\r\n up.swUsuariosEspecificos = true;\r\n }\r\n if (catP.id == 5 && catP.activo==false) {\r\n ////up.swUsuariosEspecificos = true;\r\n up.swUsuariosEspecificos = false;\r\n }\r\n }\r\n });\r\n }\r\n \r\n });\r\n break;\r\n case 'botonCerrarSinCambios': \r\n alert('xxxxidCat'+idCat);\r\n console.log(':::botonCerrarSinCambios',objeto )\r\n get().usuariosProponentesStore.map((up:any, indexUP:any) => { \r\n if (up.id == id) {\r\n up.catPermisos = objeto;\r\n // up.misUsuEspecificos = [];\r\n up.swUsuariosEspecificos = idCat\r\n }\r\n });\r\n break;\r\n case 'botonGuardar': \r\n //console.log(':::botonGuardar---------', id , objeto )\r\n if (id==0) { //hizo cambio por \"Todos los procesos a mi cargo hay que agregar a todos\"\r\n get().usuariosProponentesStore.map((up:any, indexUP:any) => { \r\n //console.log('x');\r\n up.misUsuEspecificos = objeto;\r\n });\r\n }\r\n else{\r\n get().usuariosProponentesStore.map((up:any, indexUP:any) => { \r\n if (up.id == id) {\r\n up.misUsuEspecificos = objeto \r\n //if (objeto.length > 0) { }\r\n }\r\n });\r\n } \r\n\r\n break;\r\n case 'cambiaListaUsuarios': \r\n //console.log(':::cambiaListaUsuarios',objeto )\r\n get().usuariosProponentesStore.map((up:any, indexUP:any) => { \r\n if (up.id == id) {\r\n up.setting.specificuser = objeto;\r\n up.misUsuEspecificos = objeto;\r\n }\r\n });\r\n break;\r\n };\r\n //console.log (':::get().usuariosProponentesStore: ', get().usuariosProponentesStore );\r\n },\r\n\r\n canceloUsuarioProponenteStore: async ( id:any, swUsu:any, catPermisosOrigen:any, misUsuariosEspecificosOrigen:any ) => { \r\n //console.log('misUsuariosEspecificosOrigen....', misUsuariosEspecificosOrigen)\r\n //console.log(':::botonCerrarSinCambios')\r\n get().usuariosProponentesStore.map((up:any, indexUP:any) => { \r\n if (up.id == id) {\r\n up.catPermisos = catPermisosOrigen;\r\n up.misUsuEspecificos = misUsuariosEspecificosOrigen;\r\n up.swUsuariosEspecificos = swUsu\r\n }\r\n });\r\n },\r\n\r\n canceloUsuariosNotificiacionesStore: async ( id:any ) => { \r\n console.clear();\r\n console.log('canceloUsuariosNotificiacionesStore....', id)\r\n //console.log(':::botonCerrarSinCambios')\r\n get().usuariosNotificacionesStore.map((un:any, indexUN:any) => { \r\n if (un.id == id) {\r\n console.log('pase', un.misNoAceptadas);\r\n un.rejectprop = un.misNoAceptadas;\r\n un.okprop = un.misAceptadas;\r\n un.okanalyse = un.misConcluidas;\r\n ///un.swUsuariosEspecificos = swUsu\r\n }\r\n });\r\n console.log(':::usuariosNotificacionesStore: ', get().usuariosNotificacionesStore)\r\n },\r\n\r\n UpdateProponentUserStore:{},\r\n\r\n //*Tarea: UpdateProponentUser\r\n // entra desde Configuración- Panel 0 (Alta de usuarios proponentes) - botón: Editar - botón: Guardar - \r\n guardaUpdateProponentUserStore: async (responseAPI:any) => { \r\n //console.log('guardaUpdateRateProposalStore-responseAPI:',responseAPI)\r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { UpdateProponentUserStore: responseAPI } );\r\n //console.log('UpdateProponentUserStore:', get().UpdateProponentUserStore);\r\n return(get().UpdateProponentUserStore);\r\n }\r\n else {\r\n get().generaObjErrorConfigurationsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'configurations.store-guardaUpdateProponentUserStore')\r\n }\r\n },\r\n\r\n usuariosNotificacionesStore: [], //guarda la lista de usuarios proponentes generada por la lectura del api\r\n\r\n //*Tareas: GetSummaryUserNotificationbyEmail \r\n // lista de usuarios para notificaciones vía correo electrónico (panel 1)\r\n guardaGetSummaryUserNotificationbyEmailStore: async (responseAPI:any) => {\r\n //console.log('guardaGetSummaryUserNotificationbyEmailStore - responseAPI:', responseAPI)\r\n //var _ = require('underscore');\r\n if (responseAPI.ret==1) { //sin error\r\n let unPaso = responseAPI.item ;\r\n let pasoCatPer:any =[];\r\n unPaso.map((un:any, indexUN:any) => {\r\n un.abierto = false; //por omisión entra cerrado \r\n //para traer el estutus \r\n let paso = un.state_process;\r\n un.estatusProceso = paso.pt_state_descripcion;\r\n un.clasexEstatusIcono = \"\";\r\n switch ( paso.pt_state ) {\r\n case 1: un.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: un.clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: un.clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: un.clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default: un.clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n // \r\n //ponemos en mayúsculas los datos de usuarios\r\n if (un.rejectprop.length > 0){\r\n //if (un.rejectprop.length > 0){\r\n un.rejectprop.map((su:any, indexSu:any) => { \r\n su.name = su.name.toUpperCase()\r\n su.account = su.account.toUpperCase()\r\n });\r\n //}\r\n };\r\n un.misNoAceptadas = JSON.parse(JSON.stringify(un.rejectprop));\r\n\r\n if (un.okprop.length > 0){\r\n un.okprop.map((su:any, indexSu:any) => { \r\n su.name = su.name.toUpperCase()\r\n su.account = su.account.toUpperCase()\r\n });\r\n };\r\n un.misAceptadas = JSON.parse(JSON.stringify(un.okprop));\r\n\r\n if (un.okanalyse.length > 0){\r\n un.okanalyse.map((su:any, indexSu:any) => { \r\n su.name = su.name.toUpperCase()\r\n su.account = su.account.toUpperCase()\r\n });\r\n };\r\n un.misConcluidas = JSON.parse(JSON.stringify(un.okanalyse)); ;\r\n\r\n // \r\n if (un.name=='Todos') { un.id=0; un.name='Todos los procesos a su cargo' } //me aseguro que no tenga null \r\n });\r\n set ( { usuariosNotificacionesStore: unPaso } );\r\n console.log(':::usuariosNotificacionesStore: ', get().usuariosNotificacionesStore)\r\n return(get().usuariosNotificacionesStore);\r\n }\r\n else {\r\n get().generaObjErrorConfigurationsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'configurations.store-guardaGetSummaryUserNotificationbyEmailStore')\r\n }\r\n },\r\n\r\n cambiaUsuariosNotificacionesStore: async ( id:any, objeto:any, dondeViene:any ) => { \r\n //console.log('cambiaUsuariosNotificacionesStore...' , id, '..', dondeViene )\r\n switch (dondeViene){\r\n case 'botonGuardar': \r\n if (id==0) { //hizo cambio por \"Todos los procesos a mi cargo hay que agregar a todos\"\r\n get().usuariosNotificacionesStore.map((un:any, indexUP:any) => { \r\n un.rejectprop = objeto.rejectprop;\r\n un.okprop = objeto.okprop;\r\n un.okanalyse = objeto.okanalyse;\r\n });\r\n }\r\n else{\r\n get().usuariosNotificacionesStore.map((un:any, indexUP:any) => { \r\n if (un.id == id) {\r\n un.rejectprop = objeto.rejectprop;\r\n un.okprop = objeto.okprop;\r\n un.okanalyse = objeto.okanalyse;\r\n }\r\n });\r\n }\r\n break;\r\n };\r\n //console.log (':::get().usuariosNotificacionesStore: ', get().usuariosNotificacionesStore );\r\n },\r\n\r\n UpdateUserNotificationbyEmailStore:{},\r\n\r\n //*Tarea: UpdateProponentUser // entra desde Configuración- Panel 1 (Adicionar usuarios para notificaciones vía correo electrónico) - botón: Editar - botón: Guardar - \r\n guardaUpdateUserNotificationbyEmailStore: async (responseAPI:any) => { \r\n //console.log('guardaUpdateUserNotificationbyEmailStore-responseAPI:',responseAPI)\r\n if ( responseAPI.ret==1 ) { //inserto sin error\r\n set( { UpdateUserNotificationbyEmailStore: responseAPI } );\r\n //console.log('UpdateUserNotificationbyEmailStore:', get().UpdateUserNotificationbyEmailStore);\r\n return(get().UpdateUserNotificationbyEmailStore);\r\n }\r\n else {\r\n get().generaObjErrorConfigurationsStore('Error detectado por api en ret', responseAPI.ret, responseAPI.msjerror, null,'configurations.store-guardaUpdateUserNotificationbyEmailStore')\r\n }\r\n }, \r\n\r\n \r\n}));\r\n\r\nexport default configurationsStore;\r\n","/* Uso del menu */\r\nimport create from \"zustand\"; // para generar un store con los elementos de entrada\r\n\r\nconst menuStore = create ((set, get:any) => ({\r\n\r\n //menú completo del SSC \r\n menuStore:[\r\n { id: 0, cveA:'P', pagina: 'P', errorPagina: false, desc:'Propuesta', clavesRol:[0,1,2,3,4] },\r\n { id: 1, cveA:'RP', pagina: 'RP', errorPagina: false, desc:'Responsable de Proceso', clavesRol:[2] },\r\n { id: 2, cveA:'RD', pagina: 'RD', errorPagina: false, desc:'Responsable de Diseño', clavesRol:[3] },\r\n { id: 3, cveA:'TC', pagina: 'TC', errorPagina: false, desc:'Tablero de control', clavesRol:[1,2,3] },\r\n { id: 4, cveA:'C', pagina: 'C', errorPagina: false, desc:'Configuración', clavesRol:[2] }\r\n ], \r\n \r\n //guarda menu parcial (en su caso) a visualrizar con los elementos de autorización según el tipo de usuario\r\n menuxRolStore: [], \r\n\r\n //página activa según el menu en el que se encuentre\r\n paginaActivaStore: '',\r\n\r\n generaMenuxRolStore: async (roles:any) => {\r\n //alert('menu.store - generaMenuxRolStore' );\r\n console.clear();\r\n console.log('generaMenuxRolStore - roles (entrada):', roles)\r\n\r\n let menus = get().menuStore;\r\n let pasoMenu=[]; \r\n //primer elemento siempre entra\r\n let elemMenu = { key:0, id: menus[0].id, cveA: menus[0].cveA, desc: menus[0].desc, activo:false, pagina:menus[0].pagina};\r\n pasoMenu.push(elemMenu); \r\n \r\n //console.log('*roles.length: ',roles.length)\r\n if (roles.length == 1 && (roles[0]==0 || roles[0]==4 )){\r\n pasoMenu[0].activo = true;\r\n set({ paginaActivaStore: 'P' }); \r\n }\r\n else {\r\n let swRP = false;\r\n let swRD = false;\r\n let swUS = false;\r\n roles.map((r:any, index:any) => {\r\n let x:any={};\r\n x = { key:r, id: menus[r].id, cveA:menus[r].cveA, desc:menus[r].desc, activo:false, pagina:menus[r].pagina};\r\n switch(r){\r\n case 1: swRP=true; break;\r\n case 2: swRD=true; break;\r\n case 3: swUS=true; break;\r\n }\r\n if (x.id != 4 ) { //esta la lo pusimos fijo en la línea 43\r\n if (x.id==1){\r\n x.activo = true;\r\n set({ paginaActivaStore: 'RP' }); \r\n }\r\n if (x.id==2 && swRP==false){ \r\n x.activo = true; \r\n set({ paginaActivaStore: 'RD' }); \r\n }\r\n if (x.id==3 && (swRP==false && swRD==false)) {\r\n x.activo = true; \r\n set({ paginaActivaStore: 'TC' }); \r\n }\r\n pasoMenu.push(x);\r\n //console.log('::::x', x)\r\n }\r\n }); \r\n console.log('::::swRP', swRP, 'swRD', swRD, 'swUS', swUS)\r\n //tablero de control para rp, rd y us\r\n if (swUS == false) {\r\n if (swRP || swRD ) { //|| swUS\r\n let elemMenu = { key:3, id: menus[3].id, cveA: menus[3].cveA, desc: menus[3].desc, activo:false, pagina:menus[3].pagina};\r\n pasoMenu.push(elemMenu); \r\n }\r\n }\r\n //configuraciones solo rp\r\n if (swRP){\r\n let elemMenu = { key:4, id: menus[4].id, cveA: menus[4].cveA, desc: menus[4].desc, activo:false, pagina:menus[4].pagina};\r\n pasoMenu.push(elemMenu); \r\n };\r\n }\r\n \r\n set({ menuxRolStore: pasoMenu }); \r\n //console.log('***pasoMenu:', pasoMenu);\r\n //console.log('***menuxRolStore:', get().menuxRolStore);\r\n //console.log('***paginaActivaStore:', get().paginaActivaStore);\r\n console.clear();\r\n },\r\n\r\n cambiaMenu: async (menuSel:any) => {\r\n //alert('menu.store - generaMenuxRolStore' );\r\n //console.log('cambiaMenu - menuSel:', menuSel.item)\r\n \r\n let menus = get().menuxRolStore;\r\n \r\n if (menus.length > 0) {\r\n menus.map((m:any, index:any) => {\r\n //console.log('m.id: ', m.id, ' menuSel.item.id:',menuSel.item.id )\r\n m.activo = false;\r\n if (menuSel.item.id == m.id){\r\n m.activo = true\r\n set({ paginaActivaStore: m.pagina }); \r\n }\r\n }); \r\n }\r\n set({ menuxRolStore: menus }); \r\n //console.log('***generaMenuxRolStore - pasoMenu:', pasoMenu)\r\n //console.log('***cambiaMenu - menuxRolStore:', get().menuxRolStore)\r\n //console.log('***cambiaMenu - paginaActivaStore:', get().paginaActivaStore)\r\n }, \r\n\r\n cambiaErrorPagina: async (menuSel:any, datoError:any) => {\r\n //alert('menu.store - cambiaErrorPagina' + menuSel );\r\n //console.log('cambiaErrorPagina - menuSel: ', menuSel, ' datoError: ', datoError )\r\n let menus = get().menuStore;\r\n menus.map((m:any, indexM:any) => {\r\n if (m.pagina == menuSel) \r\n m.errorPagina = datoError\r\n }); \r\n set({ menuStore: menus }); \r\n //console.log('***cambiaErrorPagina - menuStore:', get().menuStore)\r\n },\r\n\r\n quitaErrorPagina: async () => {\r\n //console.log('quitaErrorPagina - menuSel: ' )\r\n let menus = get().menuStore;\r\n menus.map((m:any, indexM:any) => {\r\n m.errorPagina = false\r\n }); \r\n set({ menuStore: menus }); \r\n //console.log('***quitaErrorPagina - menuStore:', get().menuStore)\r\n }\r\n\r\n \r\n}));\r\n\r\nexport default menuStore;\r\n","\r\n/**Genera Ventana cuando capta error de api */\r\n\r\n//*react- recursos\r\n import { useState, useEffect} from \"react\";\r\n import { object } from \"yup\";\r\n\r\n//*componentes-utiles\r\n import { CAlert } from '@coreui/bootstrap-react'\r\n\r\n//*clases \r\n\r\n//*api's (servicios y store)\r\n import authenticateStore from \"../../api/recursos/authenticate/authenticate.store\"; \r\n import usersStore from \"../../api/recursos/users/users.store\"; \r\n import catalogsStore from \"../../api/recursos/catalogs/catalogs.store\"; \r\n import proposalsStore from \"../../api/recursos/proposals/proposals.store\"; \r\n import notificationsStore from \"../../api/recursos/notifications/notifications.store\"; \r\n import decisionsStore from \"../../api/recursos/decisions/decisions.store\"; \r\n import ptCatalogsStore from \"../../api/recursos/ptCatalogs/ptCatalogs.store\"; \r\n import filesStore from \"../../api/recursos/files/files.store\"; \r\n import analysisStore from \"../../api/recursos/analysis/analysis.store\"; \r\n import dashboardStore from \"../../api/recursos/dashboard/dashboard.store\"; \r\n import configurationsStore from \"../../api/recursos/configurations/configurations.store\"; \r\n\r\n//*store's\r\n import menuStore from \"../../stores/menu.store\"; \r\n\r\n//*datos\r\n\r\n//*interfaces \r\n interface propsVentanaObjError{\r\n recurso: string;\r\n objError: any;\r\n }\r\n\r\n//*componente\r\n export default function VentanaObjError(props:propsVentanaObjError) { //props: objErrProps\r\n //*api store\r\n const { limpiaobjErrorAuthenticateStore } = authenticateStore((state:any) =>( { limpiaobjErrorAuthenticateStore: state.limpiaobjErrorAuthenticateStore }));\r\n const { limpiaObjErrorNotificationsStore } = notificationsStore((state:any) =>( { limpiaObjErrorNotificationsStore: state.limpiaObjErrorNotificationsStore }));\r\n const { limpiaObjErrorUsersStore } = usersStore((state:any) =>( { limpiaObjErrorUsersStore: state.limpiaObjErrorUsersStore }));\r\n const { limpiaObjErrorCatalogsStore } = catalogsStore((state:any) =>( { limpiaObjErrorCatalogsStore: state.limpiaObjErrorCatalogsStore }));\r\n const { limpiaObjErrorProposalsStore } = proposalsStore((state:any) =>( { limpiaObjErrorProposalsStore: state.limpiaObjErrorProposalsStore }));\r\n const { limpiaObjErrorDecisionsStore } = decisionsStore((state:any) =>( { limpiaObjErrorDecisionsStore: state.limpiaObjErrorDecisionsStore }));\r\n const { limpiaObjErrorPtCatalogsStore } = ptCatalogsStore((state:any) =>( { limpiaObjErrorPtCatalogsStore: state.limpiaObjErrorPtCatalogsStore }));\r\n const { limpiaObjErrorFilesStore } = filesStore((state:any) =>( { limpiaObjErrorFilesStore: state.limpiaObjErrorFilesStore }));\r\n const { limpiaObjErrorAnalysisStore } = analysisStore((state:any) =>( { limpiaObjErrorAnalysisStore: state.limpiaObjErrorAnalysisStore })); \r\n const { limpiaObjErrorDashboardStore } = dashboardStore((state:any) =>( { limpiaObjErrorDashboardStore: state.limpiaObjErrorDashboardStore })); \r\n const { limpiaObjErrorConfigurationsStore } = configurationsStore((state:any) =>( { limpiaObjErrorConfigurationsStore: state.limpiaObjErrorConfigurationsStore })); \r\n\r\n //*store\r\n const { cambiaErrorPagina } = menuStore((state:any) =>( { cambiaErrorPagina: state.cambiaErrorPagina }));\r\n \r\n //*constantes y variables\r\n let objErrOmision= { hasError:false, url:'', hearder:'', recurso:'', componente:'', idresul:0, desresul:'' };\r\n\r\n //*usestate\r\n const [objErr, setObjErr] = useState(objErrOmision);\r\n\r\n //*useEffect\r\n useEffect(()=>{\r\n //console.log('*props.recurso:::' , props.recurso)\r\n window.scrollTo({top:0});\r\n setObjErr(props.objError);\r\n \r\n //console.log('-----objErr', objErr) \r\n },[]);\r\n\r\n //*vista\r\n return (\r\n <>\r\n
\r\n \r\n {\r\n let paso = props.objError.menu;\r\n cambiaErrorPagina(paso, true);\r\n switch(props.recurso){\r\n case 'authenticate': limpiaobjErrorAuthenticateStore(); break;\r\n case 'analysis': limpiaObjErrorAnalysisStore(); break;\r\n case 'catalogs': limpiaObjErrorCatalogsStore(); break;\r\n case 'configurations': limpiaObjErrorConfigurationsStore(); break;\r\n case 'dashboard': limpiaObjErrorDashboardStore(); break;\r\n case 'decisions': limpiaObjErrorNotificationsStore(); break;\r\n case 'files': limpiaObjErrorFilesStore(); break;\r\n case 'notifications': limpiaObjErrorNotificationsStore(); break;\r\n case 'proposals': limpiaObjErrorProposalsStore(); break;\r\n case 'ptCatalogs': limpiaObjErrorPtCatalogsStore(); break;\r\n case 'users': limpiaObjErrorUsersStore(); break;\r\n }\r\n setObjErr(objErrOmision);\r\n }}\r\n >\r\n { props.objError.menu == 'A' \r\n ? (<>\r\n

SSC



\r\n

Importante: {props.objError.desresul}

\r\n \r\n )\r\n : (<>\r\n

SSC - Errores



\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Error: {objErr.idresul}
Descripción: {objErr.desresul}
URL: {objErr.url}
Entrada (hearder): {objErr.hearder}
Entrada (body): {objErr.body}
Recurso API: {objErr.recurso}
Componente: {objErr.componente}
\r\n )\r\n } \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n );\r\n };\r\n\r\n","//**Presentación del proyecto INEGI\r\n\r\n//*react- recursos\r\n\r\n//*componentes-utiles\r\n/* import CargaArchivo from \"../../../componentes/CargaArchivo\"; */\r\n\r\n//*clases \r\n\r\n//*datos\r\n import etiquetasSSC from \"../../datos/json/etiquetasSSC.json\"\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n import logoInegi from '../../imagenes/inegi/INEGI_LogoH.png';\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\n\r\n//*funciones\r\n\r\n//*interfaces \r\n\r\n//*componente\r\n\r\n//*componente\r\n export default function Presentacion() {\r\n //*api store\r\n\r\n //*store's\r\n \r\n //*data \r\n let eti = etiquetasSSC.Presentacion;\r\n //*constantes y variables\r\n\r\n //*usestate\r\n\r\n //*useEffect\r\n\r\n //* interface (parametros de entrada)\r\n\r\n //*funciones\r\n\r\n //*vista\r\n return(\r\n <>\r\n
\r\n
\r\n

\r\n {/* \"logo */}\r\n
\r\n

\r\n

\r\n

\r\n
\r\n {eti[0].text}  \r\n {eti[1].text} \r\n
\r\n
\r\n

\r\n
\r\n
\r\n \r\n );\r\n }","/*Recurso: Authenticate - Servicio de lectura del API: Verifica la autenticación del usuario obteniendo clave y contraseña\r\n Tareas:\r\n Auth //*Autenticar\r\n AuthLDAP //*Autenticar\r\n*/\r\n\r\nimport axios from \"axios\";\r\nimport {IBodyAuth} from \"./authenticate.modelo\";\r\nimport {IBodyAuthLDAP} from \"./authenticate.modelo\";\r\n\r\n const API_URL = process.env.REACT_APP_API_URL + 'Authenticate/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n const cargaAuth = async (datosUsuario:IBodyAuth) => {\r\n //console.log ('***API: ' + API_URL + 'Auth', datosUsuario, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'Auth', datosUsuario, \r\n {headers: { 'content-type': 'text/json' }} )\r\n };\r\n\r\n const cargaAuthLDAP= async (datosUsuario:IBodyAuthLDAP) => {\r\n return await axios.post(API_URL + 'AuthLDAP', datosUsuario, \r\n {headers: { 'content-type': 'text/json' }} )\r\n };\r\n\r\n /* const cargaAuthId = async (datosUsuario:any, id: number) => {\r\n return await axios.post(API_URL + 'AuthId' + id, datosUsuario, \r\n {headers: { 'content-type': 'text/json' }} )\r\n }; */\r\n\r\nconst authenticateService = {\r\n cargaAuth: cargaAuth,\r\n cargaAuthLDAP: cargaAuthLDAP,\r\n /* cargaAuthId: cargaAuthId, */\r\n};\r\n\r\nexport default authenticateService;\r\n\r\n\r\n/* return await axios({ method: 'post', url: API_URL,\r\n headers: {'Content-Type': 'application/json'}, \r\n data: datosUsuario\r\n }); */","//**Autentificación por medio de acceso de usuario y contraseña\r\n\r\n//*react- recursos\r\n import { useState } from 'react';\r\n import { useHistory } from \"react-router-dom\"; \r\n import { Form, Formik, Field, ErrorMessage } from 'formik';\r\n import * as Yup from 'yup';\r\n //import base64 from 'react-native-base64';\r\n\r\n//*componentes-utiles\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n import logoProyecto from '../../imagenes/proyecto/SSC_logo.png'; \r\n import logoInegi from '../../imagenes/inegi/INEGI_LogoV.png';\r\n\r\n//*api's (servicios y store)\r\n import autenticateServicio from \"../../api/recursos/authenticate/authenticate.servicio\";\r\n import authenticateStore from \"../../api/recursos/authenticate/authenticate.store\";\r\n\r\n//*datos: mis etiqueta\r\n import etiquetasSSC from \"../../datos/json/etiquetasSSC.json\"\r\n\r\n//*funciones\r\n\r\n//*componente\r\n export default function Autenticar(){\r\n\r\n //*api store\r\n const {guardaAuthStore, generaobjErrorAuthenticateStore, objErrorAuthenticateStore} = \r\n authenticateStore((state:any) =>( {\r\n guardaAuthStore: state.guardaAuthStore,\r\n generaobjErrorAuthenticateStore: state.generaobjErrorAuthenticateStore,\r\n objErrorAuthenticateStore: state.objErrorAuthenticateStore\r\n }));\r\n\r\n //*datos: mis etiquetas\r\n let eti = etiquetasSSC.Autenticacion;\r\n \r\n //*constantes y variables\r\n const APP_ENV=process.env.REACT_APP_ENV;\r\n const API_APP=process.env.REACT_APP_ENV\r\n\r\n //let rutaNAS:any = process.env.REACT_APP_SERV_HOSTNAME ;\r\n let terminos = process.env.REACT_APP_DOCS + 'Terminosycondiciones_SSC.pdf';\r\n \r\n\r\n const [pestanaActiva, setPestanaActiva] = useState((APP_ENV=='LOCAL' || APP_ENV=='PRE66' ) ? \"usuarioDePrueba\" : \"iniciarSesion\");\r\n \r\n let claseActiva = \"activeAut\";\r\n let claseInActiva = \"inactiveAut\";\r\n \r\n let history = useHistory(); //variable tipo useHistory que cambia a la página homeprocess cuando pasa autenticar\r\n \r\n //*usestate\r\n // const [opc, setOpc] = useState(pestanaActiva); //si estamos en dev (mtto) el marcador entra en s = iniciar sesion .. sino en p= Usuario de pruebas\r\n const [claseIS, setClaseIS] = useState((pestanaActiva==\"iniciarSesion\") ? claseActiva : claseInActiva);\r\n const [claseUSP, setClaseUSP] = useState((pestanaActiva==\"usuarioDePrueba\") ? claseActiva : claseInActiva);\r\n\r\n //*useEffect\r\n \r\n //*funciones\r\n const cambiaEntradaUsuario=(option:any)=> { //cambios de ligas de iniciar sesión, usuario de prueba\r\n switch(option){\r\n case \"iniciarSesion\":\r\n setClaseIS(claseActiva);\r\n setClaseUSP(claseInActiva);\r\n break;\r\n case \"usuarioDePrueba\": \r\n setClaseIS(claseInActiva);\r\n setClaseUSP(claseActiva);\r\n break;\r\n }\r\n setPestanaActiva(option)\r\n }\r\n \r\n //*vista\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n\r\n /* OJO: ACTIVAR con esto evitamos que un usuario tenga mas de una sesión abierta a la vez, activar en su momento 1/2 */\r\n /* if (localStorage.usuario!=undefined){\r\n let datoUsuario;\r\n datoUsuario = JSON.parse(localStorage.getItem('usuario')!);\r\n sessionStorage.setItem('usuario', JSON.stringify(datoUsuario));\r\n alert(\"Se tiene una session iniciada\");\r\n return;\r\n } \r\n */\r\n let usuario= values.usuario;\r\n\r\n let API_BODY:any={};\r\n //API_BODY={\"User\":base64.encode(values.usuario),\"Pass\":base64.encode(values.password), \"Esquema\":process.env.REACT_APP_API_SCHEMA, \"encrypted\": true}; //AAIE\r\n API_BODY={\"user\":values.usuario,\"pass\":values.password}; //SSC\r\n //console.log('API_BODY: ', API_BODY)\r\n\r\n { pestanaActiva == 'usuarioDePrueba'\r\n ? ( autenticateServicio.cargaAuth(API_BODY)\r\n .then((response:any) => {\r\n if (response.status===200) {\r\n guardaAuthStore(response, usuario); //manda el resultado al apiStore para guardar su información o el objeto de error que generó\r\n \r\n //guarda la información en variables storage\r\n let storage = {\r\n userName: usuario,\r\n //userNameEncripted: base64.encode(values.usuario),\r\n token: \"bearer \" + response.data.value,\r\n //tokenEncripted: base64.encode(response.data.value),\r\n }\r\n\r\n /* OJO: ACTIVAR 2/2 */ \r\n /* sessionStorage.setItem('usuario', JSON.stringify(storage));\r\n localStorage.setItem('usuario', JSON.stringify(storage)); */\r\n\r\n //se cambia de página - avanza a la siguiente página\r\n //history.push(\"/HomeProcess\"); \r\n history.push(\"/PaginaSSC\"); \r\n }\r\n\r\n })\r\n .catch((ex) => { //Bety esto esta bien??\r\n let body = \"{ user: \" + values.usuario + \", pass: \" + '***** }'\r\n //ex.response.data.result.errores.map((err: any) => (\r\n //toast.error(err.errorMessage)))\r\n console.log (\"catch - ex.......\", ex);\r\n generaobjErrorAuthenticateStore(ex.response, true, '', body, 'Autenticacion', 'A')\r\n })\r\n ) \r\n : ( autenticateServicio.cargaAuthLDAP(API_BODY)\r\n .then((response:any) => {\r\n if (response.status===200) {\r\n guardaAuthStore(response, usuario); //manda el resultado al apiStore para guardar su información o el objeto de error que generó\r\n \r\n //guarda la información en variables storage\r\n let storage = {\r\n userName: usuario,\r\n //userNameEncripted: base64.encode(values.usuario),\r\n token: \"bearer \" + response.data.value,\r\n //tokenEncripted: base64.encode(response.data.value),\r\n }\r\n\r\n /* OJO: ACTIVAR 2/2 */ \r\n /* sessionStorage.setItem('usuario', JSON.stringify(storage));\r\n localStorage.setItem('usuario', JSON.stringify(storage)); */\r\n\r\n //se cambia de página - avanza a la siguiente página\r\n //history.push(\"/HomeProcess\"); \r\n history.push(\"/PaginaSSC\"); \r\n }\r\n })\r\n .catch((ex) => { //Bety esto esta bien?? \r\n let body = \"{ user: \" + values.usuario + \", pass: \" + '***** }'\r\n //ex.response.data.result.errores.map((err: any) => (\r\n //toast.error(err.errorMessage)))\r\n console.log (\"catch - ex.......\", ex);\r\n generaobjErrorAuthenticateStore(ex.response, true, '', body, 'Autenticacion', 'A')\r\n })\r\n ) \r\n } \r\n } }\r\n\r\n validationSchema={Yup.object({\r\n usuario: Yup.string().required('Campo requerido'),\r\n password: Yup.string().required('Campo requerido')\r\n })}\r\n >\r\n
\r\n
\r\n {/* Pestaña de Inicio y usuario */}\r\n
\r\n \r\n { API_APP == 'PRODUCTIVODESARROLLO' && (<>

SITIO PRODUCTIVO DESARROLLO

) }\r\n \r\n
\r\n\r\n {/*Input de Usuario*/}\r\n \r\n \r\n \r\n {mensaje =>\r\n \r\n
\r\n
{mensaje}
\r\n
\r\n
\r\n }\r\n
\r\n\r\n {/*Input de Contraseña */}\r\n \r\n \r\n {mensaje =>\r\n
\r\n
{mensaje}
}\r\n
\r\n\r\n {/*botón iniciar sesión */}\r\n \r\n\r\n {/* mensaje */}\r\n
\r\n\r\n {/* logo inegi & liga terminos y condiciones */}\r\n {/* \"logo
*/}\r\n
\r\n

Términos y condiciones de uso

\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n","/* Página principal: presenta el proyecto y autentica la entrada del usuario */\r\n\r\n//*react- recursos\r\n\r\n//*componentes-utiles\r\n import VentanaObjErrorAPI from \"../../componentes/generaVentana/VentanaObjErrorAPI\";\r\n\r\n//*clases \r\n import './autenticar.css';\r\n\r\n//*datos\r\n\r\n//*archivos & Componentes (imagenes y elementos necesarios para la rutina)\r\n import Presentacion from \"./Presentacion\";\r\n import Autenticacion from \"./Autenticacion\";\r\n \r\n\r\n//*api's (servicios y store)\r\n import authenticateStore from \"../../api/recursos/authenticate/authenticate.store\"; \r\n\r\n//*store's\r\n\r\n//*funciones\r\n\r\n//*interfaces \r\n\r\n//*componente\r\n export default function Autenticar(){\r\n //*api store\r\n const { objErrorAuthenticateStore } = \r\n authenticateStore((state:any) =>( { \r\n objErrorAuthenticateStore: state.objErrorAuthenticateStore\r\n }));\r\n\r\n //*store's\r\n \r\n //*data \r\n\r\n //*constantes y variables\r\n\r\n //*usestate\r\n\r\n //*useEffect\r\n\r\n //* interface (parametros de entrada)\r\n\r\n //*funciones & código de inicio\r\n \r\n if (window.location.href.indexOf('Autenticar')>-1 && sessionStorage.usuario!=undefined) {\r\n localStorage.removeItem(\"usuario\");\r\n sessionStorage.removeItem(\"usuario\");\r\n sessionStorage.clear();\r\n localStorage.clear();\r\n }\r\n window.onbeforeunload = function() { //lo generá cuando se descarga\r\n if (window.location.href.indexOf('Autenticar')==-1 && window.location.href!=\"\")\r\n localStorage.clear();\r\n };\r\n\r\n //*vista\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n \r\n { objErrorAuthenticateStore.hasError\r\n && \r\n }\r\n \r\n ); \r\n }\r\n\r\n","import ReactLoading from 'react-loading';\r\n\r\nexport default function CargandoSpin() {\r\n\r\n/* types para el ReactLoading\r\nballs\r\nbars\r\nbubbles\r\ncubes\r\ncylon\r\nspin\r\nspinningBubbles\r\nspokes\r\n*/\r\n\r\nconst DivLoadingReact = () => (\r\n \r\n);\r\n return(\r\n
\r\n
\r\n
\r\n );\r\n} ","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAA8CAYAAABIFuztAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAD5hJREFUeNrsXb1yG0cS/sZ1D0DoBY6GH+B0BedHVoG5HIDRVVlMlqGsCMhOyoBIckgkoqsuIgLLMVFFPoBQ5j2AYb4B+AZzAbqN5mh2d7A7+wOgvyoWQXC3Z6Znt7/pnp821looFAqFQrEtvlEVKBQKhUIJRKEoh9eqAoVCCUShKIIfVQUKhRKIQqFQKJRAFAqFQqEEolAoFAolEIVCoVAogSgUCoVCsTX+pipQ5OHf1//zfd0D0He+WwCYbyG6Nhn/ff0P7UiFokICeQ3gOOPaR2PMtfzCWsv3PAB4MsbcF6mEtfYY+Wvw74vIJ9nHAE5K6OnaGPNYsNyXAI4i9dezegTq7RrAY8RnZgBgDKCb8v8lgBGA2Q7IUCgUkQjkxxwje0/GCGn30LEonwH8vKWxPwbwn4DrgmRaa4/IsL7JIcVQ3IcYYTLobwC8ilRuXj1C9BZU90CMAQxzrukCuAFwCWDaYhkKhaIkqpgDeQXgzlr7KxnyWmGtfQXgTwAfKjLiXsKy1n6gcn+qq9ya0Q8w2q6R77RUhkKhaCmBSCL53Vr7skby+ATgV8QLGYV6O3dEHPuMZMvrO1iHmdooIxY6RFC39DP0kNVwS8KTsnfp2RgiPZwYU591oUvlJyXl8ICnX+EzuJcEAhqJ39XhiRB5vG5Ah3dYz3PsO9KM8JJ+fOjVLGMRKCPWi/uHMA59Yfw6jgc03lJ2D8DVjj0b45IEEqrPOglkHGHw0SM5VTyDVxXJbQ2BgLyBXysmj3dNkAeVewjkkfWQngP4PuMlrEvGZaCMWEgLjfUKehyyrk0ZzSZRlT73WV9J05Woax/ICRnbKoz4K4RNwMcu97iJchtCljFbAFi1QEZTHtkIgAHwApvJejlqPaOfbQjkEOdsQvVZFxbUb6OScmYkJ/ZqwF4bOq3OfSBvrLVbL4fNMeJHAD41pLtPUBwy2MhP6PeKPidID8fJl78vDNVcyOyJz32HXLvCmE4d0u3RPQts5n2WwnAl9P3MU79EtGcWUP+OGP1mrXBLRJ3mEfUpy0+rL5c9pd9dbEKlrOcVNmFP33cuuM/m9LlHnxceneQNiLL6si/q4dNhT+jLV2cpO6Q/d4JAjmjEfhFR5k+occLc8T5O1IYeNFb0Eg+F0VvS6Fniln4bYdjc+Y0JjXQ5Xs6G4ZZGr3MyCDfiniHWIbulCGn0SY6cfB6RQUlS7vvijGbd//sM/a24J807cOVOckbzofrskuyOaPe5M8K/cto7pd8jks26nQvv0P3Odw335aXTh2d4Ps8xwCacyvNDI9GuvL68FcQkw3fcTlnW2Kmj+3yNUeFS9rp3or+21v5sjHmI5H28Cbz8HsAvKL4fwq3vmy3uvQbwG4CnCPp7aKEh7QSGn6qWUTfmwjgk9ILmjTw78E+oD3Ne8I6HdPg7Nzw29sjuOPcNxOi+lzK6TzP27oRwL6U9Pc938wxPJFSfV/g6xHdF96/o3sRpT+w5FLcvbpw6sYc5L9GXvhMWkpxQWBf+xRdMMtE9kSbOwvoQi4wCvY+3xphTY8y1Mea+4I9r/EO8jycAPxhjLowxn0uUnVWPNqDXEhl1Y+K8uGNsVhFltbNDL/IL+lmI/y2E4eYY/IIMK4cxXtBodUUGxl0gwNecC+M0o5H81AnF9ESYw4iys/pjINpvUogmESN1We6gpD67IrzzvdCfXKrdF22SeoiJKbVrInQ88vRnmv5C+rIj2jBy2jYS5YzE/xPxDHxHP254becJ5IRCQGXxr4Br3htjPkYOXx0hbOXVhTHm8wGEcvotkVE32MAvPR5G3oi3IwzhORmjGZ7HsldiVN0VhouvmaUYKpYz8xhnd/Q6ovJHImSEnBEue4sjIXvltI3nG6ZO+b2S+pSEx3NDU1E3ec1E6CH2BPZUeE3cVxOP3tN0GNqXEyHb1dVKfF4479EEm/meSZXvWFOHKcaYC8nzAp4AfKyg7iHk8bBn5JEVlknoIZ2nGIWYMtoYxvqORpUDMQoeel56CELoUNiDDc40p5098XvoGKJugL4WGf06F6GsvNVO3RR5C49XAw+R9krqU7Z5mEIcvjouEHcl16LEM1q2L0Nkz5wBRWVeflMEEmMuJC989dBgyOe3PfMyFsLw+UbTY+QvVY0hIwRnWxJgUfBIeyFGuTzx2hEhKXhG/bzngUMLCYUy8gxG7DCErC8y+qcIOAwVU5/SY+3v+DuV7INhaPI49w8ATiuUfxxx70ns5cfvmiy/IGYZD31Co8dZDTJCvIKq0SfDtqQRM5xwQj/DEE+FHgbCMCZYzxlkYeQhmTITo0xkE6oXb2KMNegYVaTPqec5WXkIaSU+tw2x+7KRtjdJICfW2pOiR8CHEAjibfS7R9wj0bet1xtr7WmM1WslMMFmAtCHK3ohlhXLaAPmYpQ9EMaskxMq4Ou7RBasjxtk75aXISIue0BGooyu5KRsSJhDxto7wmPpe67pOl7nANkrsEL0uRTXyT0RXVEu79EYYLMHZJBhaFFliKfGvvS1HaLtlQysmk4o9QnAt1Dk4Qjr42Ca1BVPyI0zXsYbpB8nEktGWzCjl5PPI+IlpGxYfS/sSrSdz+4apIygecWRPONrSNetsFnOGmON/5jKyDt/i40cLxfl/RXuNQtszvOaUhsTj4exrT47gsCGVA4vK56SLthAj4UOuyneSk/otK7jUmL3ZU8QxFy0XfYtUFFenKZT2h5XdcTJHuK4zpONMzyIec7DPK5BRhswFaQ3xPPDBCcZBngqXuxbPN8x7I6yb8WInHdQX2Gz72BZkjxmwpjJvQydnP7jke2tIDmfbviaJEcvofr06a/nXDPF802JPc/zJr3cMem0Lq83Vl/K+t942n4liGm5rwQCxEv6dCieSNO4RPak9BD5K15iyGhDGMvXjkmOoRx5DNrEIRAfwZ47Rm6J8nsc5BLcFbVniedHZfgM/dTpSx+BTDxlTSPo09XfyqnDEpvlwKsUfbMcqcvLGp+dGH05czx31sVZiuxKNuoayiIIrI8lP8m49t4Y82zS21qbd08oHgNI5L0x5p0o29bY4ac8V2OtPSFdBdfVRYm6n8o5o8C6nCIwk2MaPDnR3aMYfCPt73Ie2iIyeLLVh7MszyYwJ/odii3skOdahb6o8uyqVYpM37lMbvy8LOSKsW2MTA/5cfsunp9BFVOfafrjM8AWzoDEPU5E1m+OZlC2L7n+Pj3Ffk68aHoO5K/wjDoXO4UZvYjDDKM0zhnVxZDRJm9kWywKyoxtEFYV1R8FiGObNqaVn2BzJhjvHUmcsE/Z+jX53ITWvxZS/AYKRTGMcoxIgvy1+jFkKBQ+wzkGYLE+DqVbp1E9JNThgVxAjz53kRUmuduhdpzj+cmoLgYBL20MGT7X3R1lL/SxOwjwqi93WW7evJuijQRijLluKPnSV3M2bUHW3pd6p3a2Msq3KR5E1rLcATYhqBgyQnCbMio9q0FPHI6bRNI57xnhFTqLmvqa50TmJa5pCnzQosxxMtcBRDWoJYRFE8qfa27bUYN6/fsBPUN8cJsPeRvrYspoA4rkP/chwWb5a59+f0E9x1+E5PCuMs93TE+EV3ApeewygRAuEHc390PO/19WtG/iKeCaV3Rq76Ega415p0YZ+wDegJdGUIeY7lZx6ARCBxv+EFHkfcA1n2Ib8sDjRI5wWPM+85bI2AdwGIxzOsicG5XldSgwYKgiz7dCCSTX+H6MJC7kxNuXAO5ov0RMfA70Qn6PlPtE0U7wseJ5Rj2h6/JWlMlzm+RmM7mZzj2Wg4/18GUBlKfW9p1rOuK+Tsn2+dqads9AlNvVR2i30cQ+kPcAXqHk3g9jzL219h75GxmZRB5RPIT21vE8fqM2hBDYn9baB8RJaatoD9yj0NPmA7bJDS7PNfLt7uZESgxf8iqZH7xIDm9Zl6HTvktxvbsxz82VzmRyhs3qpyuHWHz5zBVKIJmG/8la+xbrwwFjkFGod3FcgrSOnDZcW2s/IHyi/qU+ansHNw+2b8S9bW5wvtY36btM8Q58ZboGuUgO74HHs1gg/TgS36Q6k9AIm8UAvvuUQHYUjWwkpGx91xHk3MeQU4K8FIfrfXTFiP9FihEskhscCNuv0BfE8kJ4ED5PqGgO7zOnbWkhODk3M8LzeRv2Ytz865wLvAMNZe0FgdQdYnmL/JVUdcrZlrw+NlGugyd9hBsjEDaGnIN84jGqRXKDh2JKBp43yC1zrgW2y+E9wyYFb1695dlVE9HWhYd4utjsIfmeCGqpj9TuE0itaVhpVdZFWSMYS05BXDTZeTQv89gCQ9orMZqOIaNudITBhOez2x6eNB5EJBAmBM7N8UfGdUVyePvaluYpdAXpuCTE/5cJoL5QfeVmP8UuE4gx5rruETUZwNMIJBJFTsFyLxruw7c1lJFmcAZYnzc0Dri3ShkgI/qlhQTEucFDNhmuMgjGnUPoUHvdiem2YoGvT8IdIvsYG8UOeSAgI9wUiTxGkPPPBup/3aAHxPNJVZNY0XSbswpkLDIMdW9LAqzLcJ55frLqmUYgnCQIRBqcLIlDQVV4WWXucf8eYb23RZ480EX7c78oQgiEwkGnqHliWhj/92UMsTHm0RhTWk5BEvknGprQp/J/QLXhrCLnO00rkLFtBr6yWfvSZMIxfIMUMuB8DXweUzeDSDlTnrvCSk5SLwWhsE4XFYzi+562LXKIb+DxLvn/nGp14BAJoB7I3nggMMY8GWMusM6//RbrHd+Vj+qp3HdU7gXWm/UeCspy5TzWUP9HR2+1lCs9EWPMt0QkH6nfYpY/3dIQX+Lrpap1y1ihmmxs0lPguY2xp2w27FfCgF4hPSmWJEi+1g3zuPMMvEHxNnIb+UiVAZ7vjveBJ9u7WC8R7tNvJkvOZ85zQQnJ1aP6dxx/7QPxnAL7SIboY8Y1uafdFjhd9olG8tclZaXKKYItyv5KbzERUI/PqO7gSk4dmrV7eUkjzFnDMqYko4r5D/ZqEkEcy5Q6sBEeBHpi8jjyxOPBLYXR7uP5bnPpsawitDFx6jDJ8VDHnrZOBfGxd3XlEK3uA9l1AlEoAsHHavCR3u5IdNGwDM6wV/XS0BGV2xOezhcPGbjhqLzc4JzX+sYhBncHu5v3YoJNqKsfwShz3ROHtLP6o+NpqySdc+GZcFtH0GW8OwvT0vwTCkUTKJITvY/8fOJFc4Pn5U3n8qtMzRqS+3zbttaSr1uhBKJQtJ1AFIqDheZEVygUCoUSiEKhUCiUQBQKhUKhBKJQKBQKJRCFQqFQKJRAFAqFQqEEolDEwS+qAoUiHLoPRKFQKBTqgSgUCoWiPvx/ADSXW3+WaNCGAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","/*Genera Menu (especial para SSC por guardar la selección del menu). entra como insumo el menú a pintar, tipo (1 o 2) es para el diseño, msj es un texto que muestra en el menu */\r\n\r\n//*react- recursos\r\n import Nav from \"react-bootstrap/Nav\";\r\n import Navbar from \"react-bootstrap/Navbar\";\r\n\r\n//*clases\r\n import Container from \"react-bootstrap/Container\";\r\n import \"./menu.css\";\r\n\r\n//*store's\r\n import menuStore from \"../../stores/menu.store\"; \r\n\r\n//*interfaces\r\n interface propsMenu {\r\n tipo: any;\r\n msj: any\r\n }\r\n\r\n//*componente\r\n export default function GeneraMenu(props: propsMenu) { //*api store\r\n //console.log('GeneraMenu: menu', props.menuxRolStore)\r\n //stores adicionales\r\n\r\n const { menuxRolStore, cambiaMenu } = \r\n menuStore((state:any) =>( { \r\n menuxRolStore: state.menuxRolStore,\r\n cambiaMenu: state.cambiaMenu,\r\n }));\r\n\r\n //*datos\r\n\r\n //*constantes y variables\r\n let menu = menuxRolStore;\r\n\r\n //*usestate\r\n //*useEffect\r\n //*funciones\r\n\r\n //*vista\r\n return (\r\n <>\r\n
\r\n {/* Menú que se acomoda en cualquier parte*/}\r\n {props.tipo==1\r\n ? <>
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n : <>\r\n }\r\n\r\n {/* Menu pegado arriba con una opción de mensaje a la izquierda, menu posterior de n elementos... */}\r\n {props.tipo==2\r\n ? <>\r\n
\r\n {menu.map((item: any) => (\r\n {item.desc}\r\n ))}\r\n
\r\n \r\n \r\n {props.msj}\r\n \r\n \r\n \r\n {menu.map((item: any) => (\r\n {item.desc} \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n : <>\r\n } \r\n
\r\n \r\n );\r\n }\r\n","/*Método: Notifications - Servicio de lectura del API: Maneja las notificaciones presentadas en el encabezado del sistema (campana)\r\n Tareas:\r\n GetUserAuth // datos del usuario / Encabezado - Perfil\r\n SearchUserLDAP //consulta al LDAP / Configuracion - Alta de usuarios proponentes - Editar - opción Usuarios especificiso - input + botón Buscar\r\n*/\r\n\r\nimport axios from \"axios\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Users/';\r\n\r\n//se genera una función por cada tarea del recurso api\r\n\r\n const cargaGetUserAuth = async (token:any) => {\r\n //console.log ('API: ' + API_URL + 'GetUserAuth', {headers: { 'content-type': 'text/json', 'Authorization':token }} )\r\n return await axios.post(API_URL + 'GetUserAuth/', 'method: post',\r\n { headers: { 'content-type': 'text/json', 'Authorization':token }} )\r\n //'method: post', se lo quite para provocar error\r\n };\r\n //tarea: SendRateProposal \r\n const cargaSearchUserLDAP = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'SearchUserLDAP', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'SearchUserLDAP', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; \r\n\r\nconst usersService = {\r\n cargaGetUserAuth: cargaGetUserAuth,\r\n cargaSearchUserLDAP:cargaSearchUserLDAP,\r\n};\r\n\r\nexport default usersService;\r\n","/* Perfil del usuario, llamado desde en encabezado del sitio, abre en ventana */\r\n\r\n//*react- recursos\r\n import { useEffect } from \"react\";\r\n import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n import { faEnvelope, faPhone } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\n//*clases\r\n import \"./encabezado.css\";\r\n //iconos\r\n import { AiOutlineApartment } from \"react-icons/ai\";\r\n import { AiOutlineClose } from \"react-icons/ai\";\r\n\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n import usuario from \"../../../imagenes/user-icon.png\";\r\n\r\n//datos (json)\r\n import Etiquetas from \"../../../datos/json/etiquetasSSC.json\";\r\n import Roles from \"../../../datos/json/roles.json\";\r\n\r\n//*api's (servicios y store)\r\n import usersServicio from \"../../../api/recursos/users/users.servicio\";\r\n import usersStore from \"../../../api/recursos/users/users.store\";\r\n\r\n import { MdManageAccounts } from \"react-icons/md\";\r\n//*store's\r\n\r\n//*funciones\r\n\r\n//* interface (parametros de entrada)\r\n interface PropsPerfil {\r\n tokenStore:any;\r\n usuarioStore: any;\r\n rolsStore:any\r\n }\r\n\r\n//*componente\r\n export default function PerfilUsuario(props: PropsPerfil) {\r\n \r\n //*api store\r\n const { guardaGetUserAuthStore, getUserAuthStore,\r\n generaobjErrorUsersStore} = \r\n usersStore((state: any) => ({\r\n guardaGetUserAuthStore: state.guardaGetUserAuthStore,\r\n getUserAuthStore: state.getUserAuthStore,\r\n generaobjErrorUsersStore: state.generaobjErrorUsersStore\r\n }));\r\n\r\n //*store's\r\n //*datos\r\n //*constantes y variables\r\n //*usestate\r\n\r\n //*useEffect\r\n useEffect(() => {\r\n //carga los datos del usuario\r\n usersServicio\r\n .cargaGetUserAuth(props.tokenStore)\r\n .then((response: any) => {\r\n if (response.status == 200) { \r\n guardaGetUserAuthStore(response); //va a store a guardar información\r\n //console.log(getUserAuthStore, \"getUserAuthStore.....\");\r\n }\r\n })\r\n .catch((ex) => {\r\n console.log(\"--catch - ex (cargaGetAllOrigin): \", ex);\r\n generaobjErrorUsersStore(ex.response, true, \"\", \"\", \"PerfilUsuario\",'E');\r\n });\r\n }, []);\r\n\r\n return (\r\n <>\r\n {/* primaryBtn oscurece*/}\r\n
\r\n
\r\n
\"Usuario\"
\r\n

\r\n
\r\n
{getUserAuthStore.name}
\r\n
\r\n
\r\n
{Etiquetas.PerfilDelUsuario.etiquetas[0].text}
\r\n

\r\n
\r\n
 {Etiquetas.PerfilDelUsuario.etiquetas[1].text}
\r\n
{getUserAuthStore.email}
\r\n
\r\n

\r\n
\r\n
\r\n  {Etiquetas.PerfilDelUsuario.etiquetas[2].text} 
\r\n
\r\n {\" \"}\r\n {getUserAuthStore.phoneNumber}\r\n {\" \"}\r\n Ext:\r\n \r\n {\" \"}\r\n {getUserAuthStore.ext}\r\n
\r\n
\r\n

\r\n
\r\n
\r\n  {Etiquetas.PerfilDelUsuario.etiquetas[3].text}\r\n
\r\n
\r\n {getUserAuthStore.areaName} -   \r\n {getUserAuthStore.departament}  \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n  {Etiquetas.PerfilDelUsuario.etiquetas[4].text}\r\n \r\n
\r\n
{Roles.roles.map((data, key) => {\r\n console.log(key);\r\n console.log(data.desc);\r\n for (var i = 0; i < props.rolsStore.length; i++) {\r\n if (props.rolsStore[i] === key) {\r\n console.log(data.desc);\r\n return (\r\n \r\n {data.desc}\r\n
\r\n );\r\n }\r\n }\r\n })}
\r\n
\r\n

\r\n {/*
\r\n
{Etiquetas.PerfilDelUsuario.etiquetas[4].text}dddd
\r\n
{Roles.roles.map((data, key) => {\r\n console.log(key);\r\n console.log(data.desc);\r\n for (var i = 0; i < props.rolsStore.length; i++) {\r\n if (props.rolsStore[i] === key) {\r\n console.log(data.desc);\r\n return (\r\n \r\n {data.desc}\r\n
\r\n );\r\n }\r\n }\r\n })}
\r\n
ddddd
\r\n */}\r\n {/*
\r\n
{Roles.roles.map((data, key) => {\r\n console.log(key);\r\n console.log(data.desc);\r\n for (var i = 0; i < props.rolsStore.length; i++) {\r\n if (props.rolsStore[i] === key) {\r\n console.log(data.desc);\r\n return (\r\n \r\n {data.desc}\r\n
\r\n );\r\n }\r\n }\r\n })}
\r\n
\r\n
\r\n */}\r\n \r\n



\r\n {/*
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"Usuario\"\r\n
\r\n
\r\n
\r\n {getUserAuthStore.name}\r\n
\r\n
\r\n {Etiquetas.PerfilDelUsuario.etiquetas[0].text}\r\n
\r\n
\r\n
\r\n \r\n  {Etiquetas.PerfilDelUsuario.etiquetas[1].text}\r\n
\r\n
\r\n {getUserAuthStore.email}\r\n
\r\n
\r\n
\r\n \r\n  {Etiquetas.PerfilDelUsuario.etiquetas[2].text} \r\n \r\n {\" \"}\r\n {getUserAuthStore.phoneNumber}ddd\r\n {\" \"}\r\n Ext:\r\n \r\n {\" \"}\r\n {getUserAuthStore.ext}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n  {Etiquetas.PerfilDelUsuario.etiquetas[3].text}\r\n
\r\n \r\n {getUserAuthStore.areaName}-  \r\n {getUserAuthStore.departament} \r\n \r\n
\r\n\r\n
\r\n
\r\n {Etiquetas.PerfilDelUsuario.etiquetas[4].text}rooool\r\n
\r\n \r\n {Roles.roles.map((data, key) => {\r\n console.log(key);\r\n console.log(data.desc);\r\n for (var i = 0; i < props.rolsStore.length; i++) {\r\n if (props.rolsStore[i] === key) {\r\n console.log(data.desc);\r\n return (\r\n \r\n {data.desc}\r\n
\r\n );\r\n }\r\n }\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n \r\n */}\r\n \r\n );\r\n }\r\n","export default \"data:image/png;base64,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\"","/*Método: Notifications - Servicio de lectura del API: Maneja las notificaciones presentadas en el encabezado del sistema (campana)\r\n Tareas:\r\n GetSummarybyUser //Lista de Notificaciones (pendientes y avisos) //*Propuesta *\r\n SendEmail //Envia correo al usuario cuando enviar propuesta //*Propuesta *\r\n DeleteNoticebyUser //Elimina los avisos //*Encabezado\r\n*/\r\n\r\nimport axios from \"axios\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Notifications/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n \r\n //tarea: GetSummarybyUser \r\n const cargaGetSummarybyUser = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetSummarybyUser', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetSummarybyUser', 'method: post',\r\n { headers: { 'content-type': 'text/json', 'Authorization':token }} )\r\n };\r\n\r\n /* //no la use, da un resultado erroneo, tomo valor de GetSummarybyUser\r\n //tarea: GetCountbyUser \r\n const cargaGetCountbyUser = async (token:any) => {\r\n console.log ('***API: ' + API_URL + 'GetCountbyUser', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetCountbyUser', 'method: post',\r\n { headers: { 'content-type': 'text/json', 'Authorization':token }} )\r\n }; */\r\n\r\n //tarea: DeleteNoticebyUser \r\n const cargaDeleteNoticebyUser = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'DeleteNoticebyUser', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'DeleteNoticebyUser', body,\r\n { headers: { 'content-type': 'text/json', 'Authorization':token }} )\r\n };\r\n\r\n //tarea: SendEmail \r\n const cargaSendEmail = (token:any, body:any) => {\r\n console.log ('***API: ' + API_URL + 'SendEmail', {headers: { 'content-type': 'text/json' }} )\r\n return axios.post(API_URL + 'SendEmail', body,\r\n { headers: { 'content-type': 'text/json', 'Authorization':token }} )\r\n };\r\n\r\n const notificationsService = {\r\n cargaGetSummarybyUser: cargaGetSummarybyUser,\r\n //cargaGetCountbyUser: cargaGetCountbyUser,\r\n cargaDeleteNoticebyUser: cargaDeleteNoticebyUser,\r\n cargaSendEmail: cargaSendEmail\r\n };\r\n\r\nexport default notificationsService;\r\n","/* Notificaciones del usuario, llamado desde en encabezado del sitio, abre en ventana */\r\n\r\n//*react- recursos\r\n import React, { Component } from 'react';\r\n import { useEffect, useState } from \"react\";\r\n \r\n import Row from \"react-bootstrap/Row\";\r\n import Col from \"react-bootstrap/Col\";\r\n import Container from \"react-bootstrap/Container\";\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../componentes/CargandoSpin\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*clases \r\n import { BsChevronDown, BsFillCircleFill, BsFillTrash3Fill } from \"react-icons/bs\";\r\n import \"./encabezado.css\";\r\n\r\n//*api's (servicios y store)\r\n import notificationsStore from \"../../../api/recursos/notifications/notifications.store\";\r\n import notificationsService from \"../../../api/recursos/notifications/notifications.servicio\";\r\n \r\n//*datos\r\n import etiquetasSSC from \"../../../datos/json/etiquetasSSC.json\"; \r\n\r\n\r\n//* interface (parametros de entrada)\r\n interface PropsNotificaciones {\r\n tokenStore: any;\r\n }\r\n\r\n//*componente\r\n export default function Notificaciones(props: PropsNotificaciones) {\r\n\r\n //*api store\r\n const { guardaGetSummarybyUserStore,\r\n notAvisosStore, notPendientesStore,\r\n activaDesactivaNotAvisosStore,\r\n activaDesactivaTodosNotAvisosStore,\r\n notTotalAvisosStore, notTotalPendienteStore,\r\n guardaDeleteNoticebyUserStore,\r\n generaObjErrorNotificationsStore } = \r\n notificationsStore((state: any) => ({\r\n guardaGetSummarybyUserStore: state.guardaGetSummarybyUserStore,\r\n notAvisosStore: state.notAvisosStore,\r\n notPendientesStore: state.notPendientesStore,\r\n activaDesactivaNotAvisosStore: state.activaDesactivaNotAvisosStore,\r\n activaDesactivaTodosNotAvisosStore: state.activaDesactivaTodosNotAvisosStore,\r\n notTotalAvisosStore: state.notTotalAvisosStore,\r\n notTotalPendienteStore:state.notTotalPendienteStore,\r\n guardaDeleteNoticebyUserStore: state.guardaDeleteNoticebyUserStore,\r\n generaObjErrorNotificationsStore: state.generaObjErrorNotificationsStore,\r\n }));\r\n\r\n //*store's\r\n //*datos\r\n //*constantes y variables\r\n\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n const [swRecargaNotificaciones, setSwRecargaNotificaciones] = useState(false);\r\n\r\n const [swCargaNotificaciones, setSwCargaNotificaciones] = useState(false);\r\n const [swRecargaAvisos, setSwRecargaAvisos] = useState(false);\r\n const [swRecargaPendientes, setSwRecargaPendientes] = useState(false);\r\n\r\n const [seleccionarTodos, setSeleccionarTodos] = useState(false);\r\n\r\n const [notAvisosFront, setNotAvisosFront] = useState([]);\r\n const [notPendientesFront, setNotPendientesFront] = useState([]);\r\n const [totalAvisos, setTotalAvisos] = useState(0);\r\n const [totalPendientes, setTotalPendientes] = useState(0);\r\n const [isChecked, setIsChecked] = useState(false);\r\n\r\n //*useEffect\r\n useEffect(()=> { //llamada al API - Notifications/GetSummarybyUser \r\n setCargandoSpin(true);\r\n notificationsService.cargaGetSummarybyUser(props.tokenStore)\r\n .then(function(response:any){\r\n //console.log('::response.................',response)\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetSummarybyUserStore(response.data).then( function(datos:any) { \r\n //console.log('cargo los datos a las stores');\r\n })\r\n }\r\n setSwRecargaAvisos(!swRecargaAvisos);\r\n setSwRecargaPendientes(!swRecargaPendientes)\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummarybyUser): \", ex);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorNotificationsStore(ex.response, true, '', '', 'Notificaciones','E')\r\n setCargandoSpin(false);\r\n })\r\n }, [swCargaNotificaciones]);\r\n\r\n useEffect(()=> { //cambios a las variables del front (recarga)\r\n //console.log('******entro PENDIENTES*****')\r\n setNotPendientesFront(notPendientesStore);\r\n \r\n setTotalPendientes(notPendientesStore.length);\r\n }, [swRecargaPendientes]); \r\n\r\n useEffect(()=> { //cambios a las variables del front (recarga)\r\n //console.log('******entro setNotAvisosFront(notAvisosStore); Actualiza avisos front*****')\r\n setNotAvisosFront(notAvisosStore);\r\n setTotalAvisos(notAvisosStore.length); \r\n }, [swRecargaAvisos]); \r\n\r\n useEffect(()=> {\r\n setSwRecargaNotificaciones(!swRecargaNotificaciones)\r\n }, [swRecarga]); \r\n\r\n //*funciones\r\n\r\n //muestra u oculta las noticias de los avisos\r\n const toggle1 = (key: any) => { \r\n const myElement: HTMLElement | null = document.getElementById(key)!; \r\n myElement.classList.toggle(\"notice\" ? \"mostrar\" : \"ocultar\");\r\n }; \r\n\r\n const [toggle, setToggle] = useState(true);\r\n\r\n const handleClick = () => { setToggle(!toggle) };\r\n \r\n const handleTab1 = () => { setActiveTab(\"pendientes\") };\r\n\r\n const handleTab2 = () => { setActiveTab(\"avisos\") };\r\n \r\n //convierte la fecha de la bd al formato año, mes y dia\r\n function fecha(date: any) { \r\n const fecha = new Date(date);\r\n const dia = fecha.getDate();\r\n const mes = fecha.getMonth() + 1; //se le suma 1, porque enero empieza en 0\r\n const anio = fecha.getFullYear(); \r\n // console.log(dia, mes, anio);\r\n return anio + \"/\" + mes + \"/\" + dia;\r\n }\r\n\r\n //pestañas, activa la pestaña seleccionada Pendientes/Aviso\r\n const [activeTab, setActiveTab] = useState(\"pendientes\");\r\n\r\n const AbrirT = () => { \r\n notAvisosStore?.map((data: any, key: any) => { \r\n const list = document.getElementById(data.idnews)?.classList;\r\n list?.add(\"mostrar\"); \r\n });\r\n notPendientesStore?.map((data: any, key: any) => { \r\n const list = document.getElementById(data.idnews)?.classList;\r\n list?.add(\"mostrar\");\r\n });\r\n }\r\n\r\n const CerrarT = () => { \r\n notAvisosStore?.map((data: any, key: any) => { \r\n const list = document.getElementById(data.idnews)?.classList; \r\n list?.remove(\"mostrar\");\r\n });\r\n notPendientesStore?.map((data: any, key: any) => { \r\n const list = document.getElementById(data.idnews)?.classList;\r\n list?.remove(\"mostrar\");\r\n }); \r\n }\r\n\r\n\r\n const handleTab3 = () => {\r\n if (activeTab === \"avisos\") {\r\n notAvisosStore?.map((data: any, key: any) => { \r\n toggle1(data.idnews);\r\n });\r\n } else {\r\n notPendientesStore?.map((data: any, key: any) => { \r\n toggle1(data.idnews);\r\n });\r\n }\r\n };\r\n\r\n //checked\r\n //const [isChecked, setIsChecked] = useState(false);\r\n // const handleOnChange = () => {\r\n // setIsChecked(!isChecked);\r\n // };\r\n const cambiaNotAvisosStore = (e: any) => { \r\n let miCheckId = e.target.id; \r\n let posP = miCheckId.indexOf('_'); \r\n let notAvisoId = miCheckId.substr( posP+1, miCheckId.length-posP ); \r\n\r\n activaDesactivaNotAvisosStore(notAvisoId);\r\n setTimeout(() => { setSwRecargaAvisos(!swRecargaAvisos) }, 200); // le damos tiempo para asegurar el proceso\r\n \r\n let aviso1:any = [];\r\n notAvisosStore?.map((data: any, key: any) => {\r\n aviso1.push(data.activo);//se guadar en un array \r\n })\r\n //para el id=idSeleccionarTodo\r\n for (let valor of aviso1){\r\n if (!valor){//si es true\r\n setSeleccionarTodos(false);\r\n return\r\n }else{ \r\n setSeleccionarTodos(true);\r\n } \r\n } \r\n\r\n };\r\n\r\n\r\n const cambiaSeccionarTodos = (e: any) => {\r\n //let miCheckId = e.target.id; \r\n //let elem = document.getElementById(miCheckId); \r\n let elem = e.target.checked; \r\n //console.log('elem.....', elem);\r\n if (elem)\r\n setSeleccionarTodos(true);\r\n else\r\n setSeleccionarTodos(false);\r\n \r\n activaDesactivaTodosNotAvisosStore(seleccionarTodos);\r\n setTimeout(() => { setSwRecargaAvisos(!swRecargaAvisos) }, 200); // le damos tiempo para asegurar el proceso\r\n //setSwRecarga(!swRecarga)\r\n };\r\n\r\n const eliminarAvisos = (e: any) => {\r\n let idEliminar:any = [];\r\n notAvisosStore?.map((data: any, key: any) => { \r\n //console.log(data.activo, data.idnews);\r\n let id = data.idnews;\r\n if (data.activo) \r\n idEliminar = [...idEliminar, id];\r\n\r\n })\r\n if (idEliminar.length === 0){\r\n swal2.fire({\r\n title: \"Seleccionar uno o más avisos\",\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n });\r\n }else{\r\n swal2.fire({\r\n title: '¿Seguro de eliminar el/los aviso(s)?',\r\n showDenyButton: true,\r\n confirmButtonText: 'Eliminar',\r\n denyButtonText: 'No eliminar',\r\n }).then((result) => {\r\n /* Read more about isConfirmed, isDenied below */\r\n if (result.isConfirmed) {\r\n setCargandoSpin(true);\r\n notificationsService.cargaDeleteNoticebyUser(props.tokenStore, idEliminar)\r\n .then(function(response:any){ \r\n if (response.status==200) { //confirma que no hay error\r\n guardaDeleteNoticebyUserStore(response.data).then( function(datos:any) { \r\n //setTimeout(() => {setSwCargaNotificaciones(!swCargaNotificaciones) }, 500); // le damos tiempo para asegurar el proceso\r\n setSwCargaNotificaciones(!swCargaNotificaciones);\r\n setSeleccionarTodos(false); \r\n setSwRecarga(!swRecarga);\r\n //console.log('*****catOrigenesFront: ', catOrigenesFront );\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummarybyUser): \", ex);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorNotificationsStore(ex.response, true, '', '', 'Notificaciones','E')\r\n setCargandoSpin(false);\r\n });\r\n swal2.fire({\r\n title: \"Aviso(s) eliminado(s)\",\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n });\r\n setSwRecarga(!swRecarga)\r\n } else if (result.isDenied) {\r\n swal2.fire({\r\n title: \"Aviso(s) no eliminado(s)\",\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n });\r\n }\r\n })\r\n }\r\n };\r\n\r\n //*vista\r\n return (\r\n <> \r\n
\r\n {/*

xxxx1

\r\n

xxxx2

\r\n

xxxx3

\r\n

xxxx4

\r\n

xxxx5

*/}\r\n
    \r\n \r\n {etiquetasSSC.Notificaciones.etiquetas[3].text} ({notTotalPendienteStore}) \r\n \r\n \r\n {etiquetasSSC.Notificaciones.etiquetas[4].text}({notTotalAvisosStore})\r\n \r\n\r\n \r\n Abrir todo\r\n \r\n \r\n Cerrar todo\r\n \r\n \r\n
\r\n
\r\n
\r\n {activeTab === \"pendientes\" \r\n ? ( \r\n <>\r\n
{etiquetasSSC.Notificaciones.etiquetas[3].text}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {notPendientesStore?.map((data: any, key: any) => {\r\n return (\r\n <>\r\n
\r\n
\r\n
  • \r\n \r\n {\" \"}\r\n {fecha(data.createdat)}\r\n
  • \r\n
    \r\n
    \r\n
  • toggle1(data.idnews)}>\r\n {data.descripcion}\r\n \r\n \r\n \r\n
  • \r\n
    \r\n
    \r\n
    \r\n

    \r\n {data.notice}\r\n

    \r\n
    \r\n \r\n );\r\n })}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ) \r\n : ( \r\n <>\r\n
    {etiquetasSSC.Notificaciones.etiquetas[4].text}
    \r\n \r\n
    \r\n {/*
    */}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    {etiquetasSSC.Notificaciones.etiquetas[8].text}
    \r\n \r\n \r\n {etiquetasSSC.Notificaciones.etiquetas[9].text} \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {notAvisosStore?.map((data: any, key: any) => {\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {\" \"}\r\n {fecha(data.createdat)}\r\n
    \r\n
    \r\n
    \r\n
  • toggle1(data.idnews)}>\r\n {data.descripcion}\r\n \r\n \r\n \r\n
  • \r\n
    \r\n
    \r\n
    \r\n

    \r\n {data.notice}\r\n

    \r\n
    \r\n \r\n );\r\n })} \r\n
    \r\n {/*
    */}\r\n
    \r\n \r\n )\r\n }\r\n
    \r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin ? : null }\r\n
    \r\n \r\n );\r\n }\r\n","/* Encabezado página principal del proyecto, incluye menu, perfil del usuario y notificaciones */\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n import { useHistory } from \"react-router\";\r\n import shallow from \"zustand/shallow\";\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../componentes/CargandoSpin\";\r\n import { SlidingPanel } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n//*clases\r\n import Navbar from \"react-bootstrap/Navbar\";\r\n import Nav from \"react-bootstrap/Nav\";\r\n import Button1 from \"@mui/material/Button\";\r\n /* import \"../splidingPanel.css\" */\r\n\r\n //iconos\r\n import { FaUserCircle } from \"react-icons/fa\";\r\n import { ImExit } from \"react-icons/im\";\r\n import { FaBell } from \"react-icons/fa\";\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../datos/json/etiquetasSSC.json\";\r\n\r\n//*imágenes\r\n import LogoProyecto from \"../../../imagenes/proyecto/INEGI_SSC_logo.png\";\r\n import LineaT from \"../../../imagenes/lineaTraining.png\";\r\n\r\n//*archivo & componentes (otros componentes enlazados)\r\n import GeneraMenu from \"../../../componentes/generaMenu/GeneraMenuSSC\";\r\n import Perfil from \"./PerfilUsuario\";\r\n import Notificaciones from \"./Notificaciones\";\r\n\r\n//*api's (servicios y store)\r\n import authenticateStore from \"../../../api/recursos/authenticate/authenticate.store\";\r\n\r\n//*store's\r\n import menuStore from \"../../../stores/menu.store\";\r\n\r\n//*interfaces\r\n interface propsEncabezado {\r\n tokenStore: any;\r\n notTotalStore: any;\r\n recargaPaginaSSC_Not: any;\r\n }\r\n\r\n//*componente \r\n export default function Encabezado(props: propsEncabezado) {\r\n var _ = require(\"underscore\");\r\n\r\n //*api store\r\n const { usuarioStore, rolsStore } = \r\n authenticateStore((state: any) => ({\r\n usuarioStore: state.usuarioStore,\r\n rolsStore: state.rolsStore,\r\n }), shallow );\r\n\r\n //stores adicionales\r\n const { generaMenuxRolStore, } = \r\n menuStore((state: any) => ({\r\n generaMenuxRolStore: state.generaMenuxRolStore,\r\n }));\r\n\r\n //*variables y constantes de uso\r\n const APP_ENV = process.env.REACT_APP_ENV;\r\n\r\n let history = useHistory();\r\n\r\n let eti_Eti = etiquetasSSC.Encabezado.etiquetas;\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaEncabezado, setSwRecargaEncabezado] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n\r\n const [abreSP, setAbreSP] = useState(false);\r\n const [abreVta,setAbreVta] = useState('');\r\n\r\n /* const [swCargaNotificaciones, setSwCargaNotificaciones] = useState(false);\r\n const [ventanaAbierta, setVentanaAbierta] = useState(false);\r\n const [encabezadoVentana, setEncabezadoVentana] = useState(\"\");\r\n const [opcionVentana, setOpcionVentana] = useState(\"\");\r\n const [isdisabledConfig, setIsdisabledConfig] = useState(true); */\r\n\r\n //*useEffect\r\n useEffect(() => { //para saber le rol y en que página lo ubicamos\r\n //console.log(\"rolsStore: \", rolsStore);\r\n generaMenuxRolStore(rolsStore); //genera el menú correspondiente según el rol(es) del usuario\r\n //console.log(\"menuxRolStore: \", menuxRolStore);\r\n }, []);\r\n\r\n useEffect(()=> { //usado para renderizar\r\n //console.log('renderizando Encabezado.........................');\r\n setSwRecargaEncabezado(!swRecargaEncabezado);\r\n recargaPaginaSSC_Not();\r\n },[swRecarga]); \r\n\r\n //*funciones\r\n const recargaEncabezado = () => {\r\n //console.log('recargaContenido....');\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() }\r\n\r\n const abreVentanaSlidingPanel = (vta:any) => {\r\n if (vta=='N') { setAbreVta('N') }\r\n if (vta=='P') { setAbreVta('P') }\r\n setAbreSP(true);\r\n }\r\n\r\n const botonCierraSlidingPanel = () => {\r\n setAbreSP(false);\r\n recargaEncabezado(); \r\n }\r\n\r\n //cierra la sesionabrePerfil\r\n const cierraSesion = () => {\r\n //para localStore\r\n localStorage.removeItem(\"usuario\");\r\n sessionStorage.removeItem(\"usuario\");\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n //para reinicializar store's en su caso\r\n //setStepsDefault().catch(null); //ejemplo de AAIE\r\n //setTopicSelectDefault().catch(null);//ejemplo de AAIE\r\n //reinicializa\r\n const SERV_URL=process.env.REACT_APP_SERV_URL;\r\n const SERV_HOSTNAME=process.env.REACT_APP_SERV_HOSTNAME;\r\n window.location.hostname===SERV_HOSTNAME \r\n ? window.location.replace(SERV_URL!)\r\n : history.push(\"/\");\r\n }\r\n\r\n const [show, setShow] = useState(false);\r\n const handleClose = () => setShow(false);\r\n\r\n /* const abrePerfil = () => { \r\n alert(\"abre\") \r\n setShow(true); //muestra modal\r\n handleClose11(); //cierra menu perfil, desconectar\r\n }; */\r\n \r\n \r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const open = Boolean(anchorEl);\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n const handleClose11 = () => {\r\n setAnchorEl(null); \r\n };\r\n\r\n \r\n\r\n //*vista\r\n return (\r\n <>\r\n {/* barra de encabezado & barra de Menú principal*/}\r\n
    \r\n\r\n {/* logos & notificaciones & perfil & cerrar sesión */}\r\n \r\n \r\n {/* logo inegi/ssc & msj de dominio */}\r\n \r\n
    \r\n \"logo\r\n \r\n {eti_Eti[0].text}\r\n \r\n \r\n SITIO PRODUCTIVO DESARROLLO\r\n \r\n \r\n \r\n {eti_Eti[1].text}\r\n \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n {/*notificaciones(campana) & perfil & nombre del usuario */}\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n

    \r\n\r\n {/* menu */}\r\n \r\n\r\n
    \r\n\r\n {/* abre ventana SlidingPanel con Notificación o Perfil */}\r\n { (abreVta=='N' && abreSP) &&\r\n (<>\r\n botonCierraSlidingPanel()} >\r\n \r\n \r\n )\r\n } \r\n { (abreVta=='P' && abreSP) &&\r\n (<>\r\n botonCierraSlidingPanel()} >\r\n \r\n \r\n )\r\n }\r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin? : null }\r\n \r\n );\r\n }\r\n\r\n","/* Título de la página */\r\n\r\n//*react- recursos\r\nimport React from \"react\";\r\n//npm install react-bootstrap --save-dev --force\r\n//import { faCircleInfo } from \"@fortawesome/free-solid-svg-icons\";\r\n//import { icon } from \"@fortawesome/fontawesome-svg-core/import.macro\";\r\n\r\n//*componentes-utiles\r\n\r\n\r\n//*clases\r\n import '../../../css/mdi.css'; \r\n \r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n//*api's (servicios y store)\r\n//*store's\r\n//*datos\r\n//*funciones\r\n\r\n//*interfaces\r\n interface propsContenidoTitulo {\r\n titulo: any;\r\n subtitulo: any;\r\n nota: any;\r\n}\r\n\r\n//*componente\r\n export default function ContenidoTitulo(props: propsContenidoTitulo) {\r\n //*api store\r\n //*store's\r\n //*datos\r\n //*constantes y variables\r\n //*usestate\r\n //*useEffect\r\n //*funciones\r\n //*vista\r\n return (\r\n <>\r\n
    \r\n

    {props.titulo}

    \r\n {props.subtitulo != null && \r\n (<>\r\n {props.subtitulo}\r\n )\r\n }\r\n {props.nota != null && \r\n (<> \r\n

    \r\n \r\n {\" \"}\r\n \r\n

    \r\n )\r\n }\r\n
    \r\n \r\n )\r\n }\r\n","/*Recurso: Proposal - Servicio de lectura del API: Maneja las notificaciones presentadas en el encabezado del sistema (campana)\r\n Tareas:\r\n GetSummarybyUser \r\n GetDetailbyUser \r\n InsertbyUser \r\n UpdatebyUser\r\n DeletebyUser\r\n SendbyUser\r\n*/\r\n\r\nimport axios from \"axios\";\r\nimport {IBodyUpdatebyUser} from \"./proposals.modelo\";\r\n\r\n//recurso: Proposals\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Proposals/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n\r\n //tarea: GetSummarybyUser\r\n const cargaGetSummarybyUser = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetSummarybyUser/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetSummarybyUser/es', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: GetDetailbyUser\r\n const cargaGetDetailbyUser = async (token:any, id:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetDetailbyUser/es/'+id, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetDetailbyUser/es/'+id, 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; \r\n\r\n //tarea: InsertbyUser \r\n const cargaInsertbyUser = async (token:any, datosPropuesta:any) => {\r\n //console.log ('***API: ' + API_URL + 'InsertbyUser/es', datosPropuesta, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'InsertbyUser/es', datosPropuesta, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: UpdatebyUser \r\n const cargaUpdatebyUser = async (token:any, datosPropuesta:any) => {\r\n //console.log ('***API: ' + API_URL + 'UpdatebyUser/es', datosPropuesta, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'UpdatebyUser/es', datosPropuesta, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: DeletebyUser \r\n const cargaDeletebyUser = async (token:any, id:any) => {\r\n //console.log ('***API: ' + API_URL + 'DeletebyUser/'+id, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'DeletebyUser/'+id, 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: SendbyUser \r\n const cargaSendbyUser = (token:any, datosPropuesta:any) => {\r\n console.log ('***API: ' + API_URL + 'SendbyUser/es', datosPropuesta, {headers: { 'content-type': 'text/json' }} )\r\n return axios.post(API_URL + 'SendbyUser/es', datosPropuesta, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\nconst proposalsService = {\r\n cargaGetSummarybyUser: cargaGetSummarybyUser,\r\n cargaGetDetailbyUser: cargaGetDetailbyUser,\r\n cargaInsertbyUser: cargaInsertbyUser,\r\n cargaUpdatebyUser: cargaUpdatebyUser,\r\n cargaDeletebyUser: cargaDeletebyUser,\r\n cargaSendbyUser: cargaSendbyUser,\r\n};\r\n\r\nexport default proposalsService;\r\n","/* Propuesta - registro de propuesta de cambio */\r\n/* Contenido - registro o visualización de la propuesta */\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n import { BsEnvelope, BsCalendarEvent, BsFillCheckSquareFill } from \"react-icons/bs\"; \r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases \r\n import { Col, Row } from \"react-bootstrap\";\r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n import proposalsServicio from \"../../../../api/recursos/proposals/proposals.servicio\"; \r\n import proposalsStore from \"../../../../api/recursos/proposals/proposals.store\"; \r\n\r\n import notificationsServicio from \"../../../../api/recursos/notifications/notifications.servicio\"; \r\n import notificationsStore from \"../../../../api/recursos/notifications/notifications.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n import articulos from \"../../../../datos/json/guidelines.json\";\r\n import { boolean, number } from \"yup\";\r\n\r\n//*interfaces\r\n interface propsPropuestaContenido {\r\n tokenStore: any;\r\n propuestaNva: any;\r\n idPropuesta: any;\r\n catOrigenesStore: any;\r\n catProcesosStore: any;\r\n botonCierraPropuesta:any\r\n recargaPropuesta: any;\r\n recargaPropuestaNva: any;\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not: any;\r\n }\r\n\r\n//*componente\r\n export default function PropuestaContenido(props: propsPropuestaContenido) { \r\n //*api store\r\n const { propuestaNvaStore,\r\n guardaGetDetailbyUserStore, propuestaDetallesStore,\r\n guardaInsertbyUserStore, \r\n guardaUpdatebyUserStore, \r\n guardaDeletebyUserStore, \r\n guardaSendbyUser, \r\n cambiaPropuestasStore,\r\n eliminaPropuestasStore,\r\n generaObjErrorProposalsStore} = \r\n proposalsStore((state:any) =>( { \r\n propuestaNvaStore: state.propuestaNvaStore,\r\n guardaGetDetailbyUserStore: state.guardaGetDetailbyUserStore,\r\n propuestaDetallesStore: state.propuestaDetallesStore,\r\n guardaInsertbyUserStore: state.guardaInsertbyUserStore,\r\n guardaUpdatebyUserStore: state.guardaUpdatebyUserStore,\r\n guardaDeletebyUserStore: state.guardaDeletebyUserStore,\r\n guardaSendbyUser: state.guardaSendbyUser,\r\n cambiaPropuestasStore: state.cambiaPropuestasStore,\r\n eliminaPropuestasStore: state.eliminaPropuestasStore,\r\n generaObjErrorProposalsStore: state.generaObjErrorProposalsStore\r\n }));\r\n\r\n const { guardaSendEmailStore, sendEmailStore,\r\n generaObjErrorNotificationsStore } = \r\n notificationsStore((state:any) =>( { \r\n guardaSendEmailStore: state.guardaSendEmailStore,\r\n sendEmailStore: state.sendEmailStore,\r\n generaObjErrorNotificationsStore: state.generaObjErrorNotificationsStore\r\n }));\r\n\r\n //*store's\r\n //*datos\r\n\r\n //*constantes y variables\r\n let etiGlobal = etiquetasSSC.Global.botones;\r\n let eti = etiquetasSSC.Propuesta;\r\n let x1,x2,x3,x4,x5,x6 = '';\r\n let noPasa = '';\r\n let notifica = ''\r\n let cuentaCatO=0;\r\n let cuentaCatP=0;\r\n let IdNuevo = 0;\r\n let catOrigenesFrontCopia:any=[];\r\n let catProcesosFrontCopia:any=[];\r\n \r\n //*useState\r\n const [swRecarga,setSwRecarga] = useState(false);\r\n const [swRecargaPropuestaContenido,setSwRecargaPropuestaContenido] = useState(false);\r\n const [swRecargaPropuestaDetalles, setSwRecargaPropuestaDetalles] = useState(false); \r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n\r\n const [propuestaNva, setPropuestaNva] = useState(props.propuestaNva); \r\n const [propuestaNvaFront, setPropuestaNvaFront] = useState(props.propuestaNva); \r\n \r\n const [idPropuestaFront, setIdPropuestaFront] = useState(props.idPropuesta); //no me deje actualizar por useState, tuve que generar un let directo\r\n \r\n const [propuestaDetallesFront, setPropuestaDetallesFront] = useState(propuestaDetallesStore); \r\n const [desCambioFront, setDesCambioFront] = useState(propuestaDetallesStore.description);\r\n const [catOrigenesFront, setCatOrigenesFront] = useState(propuestaDetallesStore.miCatOrigenes);\r\n const [catProcesosFront, setCatProcesosFront] = useState(propuestaDetallesStore.miCatProcesos); \r\n const [swBotonGuardar, setSwBotonGuardar] = useState(propuestaDetallesStore.btnGuardar); \r\n const [swBotonEnviar, setSwBotonEnviar] = useState(propuestaDetallesStore.btnEnviar); \r\n const [swBotonEliminar, setSwBotonEliminar] = useState(propuestaDetallesStore.btnEliminar); \r\n const [isChecked, setIsChecked] = useState(false);\r\n \r\n //*useEffect\r\n\r\n useEffect(() => { //cuando montamos\r\n console.log('Propuesta.Contenido- monto')\r\n console.log('........props.propuestaNva', props.propuestaNva);\r\n limpiaPlantilla(); //limpiamos plantilla\r\n //limpio catálogos\r\n props.catOrigenesStore.map((o:any) => {\r\n o.activo=false;\r\n o.disabled=false;\r\n o.specification='';\r\n });\r\n props.catProcesosStore.map((o:any) => {\r\n o.activo=false;\r\n o.disabled=false;\r\n });\r\n },[]);\r\n\r\n useEffect(() => { //Carga detalles de la propuesta - llama API - Proposals/GetDetailbyUser/es/id\r\n if (propuestaNva==false) { //propuesta existente\r\n setIdPropuestaFront(props.idPropuesta);\r\n setCargandoSpin(true);\r\n proposalsServicio.cargaGetDetailbyUser(props.tokenStore, idPropuestaFront)\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetDetailbyUserStore(response.data, props.idPropuesta, props.catOrigenesStore, props.catProcesosStore,'Propuesta').then( function(datos:any) { \r\n setPropuestaDetallesFront(datos);\r\n setDesCambioFront(datos.description);\r\n setCatOrigenesFront(datos.miCatOrigenes);\r\n setCatProcesosFront(datos.miCatProcesos);\r\n setSwBotonGuardar(datos.btnGuardar);\r\n setSwBotonEnviar(datos.btnEnviar);\r\n setSwBotonEliminar(datos.btnEliminar);\r\n\r\n setSwRecarga(!swRecarga);\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetDetailbyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'Propuesta-Proposals/GetDetailbyUser','P')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n }\r\n else { //propuesta nueva - asigno lo correspondiente\r\n //setIdPropuestaFront(0);\r\n catOrigenesFrontCopia= JSON.parse(JSON.stringify(props.catOrigenesStore));\r\n catProcesosFrontCopia= JSON.parse(JSON.stringify(props.catProcesosStore));\r\n setPropuestaDetallesFront(propuestaNvaStore);\r\n setDesCambioFront('');\r\n setCatOrigenesFront(catOrigenesFrontCopia);\r\n setCatProcesosFront(catProcesosFrontCopia);\r\n setSwBotonGuardar(propuestaDetallesFront.btnGuardar);\r\n setSwBotonEnviar(propuestaDetallesFront.btnEnviar);\r\n setSwBotonEliminar(propuestaDetallesFront.btnEliminar); \r\n setSwRecarga(!swRecarga);\r\n }\r\n },[swRecargaPropuestaDetalles]);\r\n \r\n useEffect(()=> { //usado para renderizar\r\n console.log('Propuesta.Contenido - renderizando .........................');\r\n \r\n if (props.propuestaNva) { setSwBotonEliminar(false) }\r\n else { setSwBotonEliminar(true) }\r\n console.log('---swBotonEliminar:', swBotonEliminar);\r\n\r\n setSwRecargaPropuestaContenido(!swRecargaPropuestaContenido);\r\n /* console.log('---idPropuesta:', props.idPropuesta);\r\n console.log('---propuestaDetallesFront:', propuestaDetallesFront);\r\n console.log('---desCambioFront:', desCambioFront);\r\n console.log('---catOrigenesFront:', catOrigenesFront);\r\n console.log('---catProcesosFront:', catProcesosFront);\r\n console.log('---swBotonGuardar:', swBotonGuardar);\r\n console.log('---swBotonEnviar:', swBotonEnviar);\r\n console.log('---swBotonEliminar:', swBotonEliminar); */\r\n },[swRecarga]);\r\n\r\n //*funciones\r\n\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n const recargaPropuesta = () => { props.recargaPropuesta() }\r\n const recargaPropuestaNva = () => { props.recargaPropuestaNva() }\r\n\r\n const recargaPropuestaContenido = () => {\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n\r\n const botonGuardar = () => {\r\n noPasa = \"\";\r\n notifica='';\r\n\r\n //alert('boton guardar');\r\n //console.log('propuestaFront antes de guardar:::', propuestaDetallesFront)\r\n //primer filtro (resultado en nopaso) obliga la descripción del cambio; si activa un elemento de origenes tiene que darle su descripción\r\n botonGuardarValidaPlantilla(1)\r\n if ( noPasa != '' ) { \r\n swal2\r\n .fire({\r\n title: eti.mensajes[4].text, //El registro de la propuesta de cambio NO ha sido guardado\r\n icon: 'error',\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n imageUrl: 'src/imagenes/checkT.png',\r\n cancelButtonText: \"Cerrar\",\r\n cancelButtonColor: '#d33',\r\n width: \"70%\",\r\n html: \"
    \" + noPasa + \"
    \",\r\n })\r\n }\r\n else { //no tiene errores la plantilla puede guardar\r\n botonGuardarValidaPlantilla(2) //segundo filtro (resultado en notifica), si le permite guardar pero le notifica sus pendientes \r\n botonGuardarEnAPI(); //guarda plantilla citando al api\r\n }\r\n }\r\n\r\n const botonGuardarValidaPlantilla = (filtro:any) => {\r\n //alert('validaPlantilla - filtro ' + filtro);\r\n if (filtro==1) { \r\n //noPasa = ''; \r\n //revisamos que la descripción no vaya vacía\r\n if ( desCambioFront== '') { noPasa = eti.mensajesErrores[4].text + '
    ' }\r\n\r\n //al menos un elemento de origen de cambio con su descripción \r\n cuentaCatO=0;\r\n let pasoO = '';\r\n \r\n catOrigenesFront.map((o:any) => {\r\n if (o.activo)\r\n cuentaCatO = cuentaCatO + 1;\r\n if (o.activo && o.specification=='') {\r\n if (pasoO=='')\r\n pasoO = eti.mensajesErrores[5].text + '
    ' + '    '+ o.name+ '
    ';\r\n else\r\n pasoO = pasoO + '    '+ o.name+ '
    ';\r\n } \r\n });\r\n //if (cuentaCatO==0) { noPasa = noPasa + eti.mensajesErrores[6].text + '
    ' } \r\n if (pasoO !='') { noPasa = noPasa + '
    ' + pasoO };\r\n \r\n if (noPasa != '') { noPasa = 'Importante:

    ' + noPasa }\r\n }\r\n if (filtro==2) {\r\n notifica = '';\r\n if (cuentaCatO==0) { //lo contené en filtro 1\r\n notifica = eti.mensajesErrores[1].text + '

    ';\r\n notifica = notifica + '   '+ eti.mensajesErrores[6].text + '

    ';\r\n } \r\n cuentaCatP=0;\r\n catProcesosFront.map((p:any) => {\r\n if (p.activo) { cuentaCatP = cuentaCatP + 1}\r\n });\r\n if (cuentaCatP==0) {\r\n if (notifica == '') { notifica = eti.mensajesErrores[1].text + '

    ' };\r\n notifica = notifica + '   '+ eti.mensajesErrores[7].text + '

    ';\r\n }\r\n if (notifica != '') {\r\n notifica = notifica + eti.mensajesErrores[2].text + '

    ';\r\n notifica = notifica + eti.mensajesErrores[3].text + '

    ';\r\n }\r\n }\r\n }\r\n\r\n const botonGuardarEnAPI = () => {\r\n //alert('botonGuardarEnAPI');\r\n let bodyAPI= { id:number, description:'', origin:[], processxfrequency: [] };\r\n bodyAPI.id = props.idPropuesta;\r\n bodyAPI.description = desCambioFront;\r\n let pasoCatO: any = [];\r\n let bodyOrigin= {id:0, name: '', specification: ''};\r\n let pasoCatP: any = [];\r\n\r\n //copia información de plantilla a objeto del body para api \r\n if (cuentaCatO > 0) { //cuentaCatO lo generé en botonGuardarValidaPlantilla filtro 1 \r\n catOrigenesFront.map((o:any) => {\r\n bodyOrigin= {id:0, name: '', specification: ''};\r\n if (o.activo){\r\n bodyOrigin.id= o.id; \r\n bodyOrigin.name = o.name;\r\n bodyOrigin.specification= o.specification;\r\n //bodyAPI.origin.push(bodyOrigin);\r\n pasoCatO.push(bodyOrigin);\r\n }\r\n });\r\n bodyAPI.origin = pasoCatO;\r\n };\r\n\r\n let pasoProcessxfrequency:any = [];\r\n if (cuentaCatP > 0) { //cuentaCatP lo generé en botonGuardarValidaPlantilla filtro 2 \r\n catProcesosFront.map((p:any) => {\r\n if (p.activo){\r\n pasoCatP.push(p.id);\r\n pasoProcessxfrequency.push(p);\r\n }\r\n });\r\n bodyAPI.processxfrequency = pasoCatP;\r\n }\r\n\r\n //console.clear();\r\n //console.log('*body para insertar y/o regrabar...', bodyAPI );\r\n //console.log('IdNuevo...', IdNuevo );\r\n //console.log('props.idPropuesta...', props.idPropuesta );\r\n\r\n //por donde nos vamos insertar (nuevo) o regrabar (existente)\r\n if (propuestaNvaFront) { //insertamos propuesta llamando al api: Proposals/InsertbyUser\r\n //alert('insert');\r\n setCargandoSpin(true);\r\n proposalsServicio.cargaInsertbyUser(props.tokenStore, bodyAPI)\r\n .then((response:any) => {\r\n //console.log('response.................',response)\r\n if (response.status==200) { //revisa si hay error\r\n guardaInsertbyUserStore(response.data, bodyAPI, pasoProcessxfrequency, catOrigenesFront, catProcesosFront)\r\n .then( function(insertbyUserFront:any) { \r\n console.log('...............insertbyUserFront: ', insertbyUserFront ); //response.data\r\n //console.log('...............insertbyUserFront.id: ', insertbyUserFront.id );\r\n setPropuestaNvaFront(false);\r\n //idPropuestaFront = insertbyUserFront.id;\r\n IdNuevo = insertbyUserFront.id; \r\n setIdPropuestaFront(IdNuevo);\r\n setSwBotonEliminar(true);\r\n console.log('------------::::::::::::::::::::::IdNuevo: ',IdNuevo );\r\n \r\n recargaPropuestaNva();\r\n recargaPropuesta();\r\n recargaPropuestaContenido();\r\n abreNotifica();\r\n }); \r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaInsertbyUser): \", ex.response.status);\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'PropuestaContenido-Proposals/InsertbyUser','P');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n } \r\n else { //guardamos propuesta existente (si es nueva ya guardo una vez) Proposals/UpdatebyUser\r\n //alert('update');\r\n setCargandoSpin(true);\r\n proposalsServicio.cargaUpdatebyUser(props.tokenStore, bodyAPI)\r\n .then((response:any) => {\r\n if (response.status==200){ //confirma que no hubo error\r\n guardaUpdatebyUserStore(response.data, bodyAPI, catOrigenesFront, catProcesosFront).then( function(updatebyUserFront:any) { //mando bodyAPI para actualizar el encabezado de la propuesta\r\n console.log('...............updatebyUserFront: ', updatebyUserFront ); //response.data\r\n //console.log('...............updatebyUserFront.id: ', updatebyUserFront.id );\r\n //console.log('updatebyUserFront: ', updatebyUserFront ); \r\n //if (updatebyUserFront.ret==1) { //confirmo respuesta de api\r\n setSwBotonGuardar(false); //ya guardo lo inhabilito hasta que hago un cambio o envie\r\n recargaPropuestaContenido();\r\n recargaPropuesta(); //**renderizo desde la página propuesta\r\n abreNotifica();\r\n //}\r\n }); \r\n } \r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaUpdatebyUser): \", ex.response.status);\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'PropuestaContenido-Proposals/UpdatebyUser','P');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n }\r\n //abreNotifica();\r\n }\r\n\r\n const abreNotifica = () => {\r\n //alert('abreNotifica');\r\n console.log('a------------::::::::::::::::::::::IdNuevo: ',IdNuevo );\r\n console.log('a------------::::::::::::::::::::::idPropuestaFront: ', idPropuestaFront );\r\n //notifica al usuario los pendientes\r\n if ( notifica=='' ) { //no hay pendinte, se guardo y pregunta si quiere enviar\r\n swal2.fire({\r\n title: eti.mensajes[0].text, // El registro de la propuesta de cambio fue guardada\r\n icon: 'success',\r\n showConfirmButton: true,\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: ' Enviar',\r\n cancelButtonText: 'Cerrar',\r\n //denyButtonText: \"Cerrar\",\r\n width: \"70%\",\r\n html: \"
    \" + eti.mensajes[1].text + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) { botonEnviar() }\r\n })\r\n //console.log('paso por aquí')\r\n\r\n setSwBotonGuardar(false); \r\n setSwBotonEnviar(true); // ya no tiene errores ya puede enviar\r\n } \r\n else { //pendientes en plantilla\r\n swal2.fire({\r\n title: eti.mensajes[0].text, // El registro de la propuesta de cambio fue guardado.. Completar... Guardar ... Enviar\r\n icon: 'warning',\r\n //showCancelButton: true,\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n width: \"70%\",\r\n html: \"
    Importante:

    \" + notifica + \"
    \",\r\n })\r\n }\r\n recargaPropuesta(); \r\n }\r\n\r\n const botonEnviar = () => {\r\n //alert('botonEnviar');\r\n console.log('b------------::::::::::::::::::::::IdNuevo: ',IdNuevo );\r\n console.log('b------------::::::::::::::::::::::idPropuestaFront: ', idPropuestaFront );\r\n console.log('b------------::::::::::::::::::::::propuestaNvaFront: ', propuestaNvaFront );\r\n //alert('en body antes de enviar: ' + idPropuestaFront + '-' + IdNuevo); \r\n let bodyAPI= { id:0, send:false};\r\n bodyAPI.id = (propuestaNvaFront==false) ? idPropuestaFront : IdNuevo;\r\n bodyAPI.send = true;\r\n console.log('b------------::::::::::::::::::::::bodyAPI: ', bodyAPI );\r\n if (bodyAPI.id != 0) {\r\n setCargandoSpin(true);\r\n //enviamos la propuesta llamando al api: Proposals/SendbyUser\r\n proposalsServicio.cargaSendbyUser(props.tokenStore, bodyAPI)\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hubo error\r\n guardaSendbyUser(response.data).then( function(sendbyUserFront:any) {\r\n console.log('.....sendbyUserFront', sendbyUserFront);\r\n cambiaPropuestasStore(props.idPropuesta, false, null, 'botonEnviar');\r\n setCargandoSpin(false);\r\n swal2.fire({\r\n title: eti.mensajes[2].text, // El registro de la propuesta de cambio fue guardada\r\n icon: 'success',\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n width: \"70%\",\r\n })\r\n props.recargaPropuestaNva();\r\n recargaPropuesta(); \r\n setSwBotonGuardar(null);\r\n setSwBotonEnviar(null);\r\n setSwRecarga(!swRecarga);\r\n let bodyAPINot:any= { idproposal:number };\r\n bodyAPINot.idproposal = bodyAPI.id; //props.idPropuesta;\r\n\r\n setCargandoSpin(true);\r\n notificationsServicio.cargaSendEmail(props.tokenStore, bodyAPINot)\r\n .then((response:any) => {\r\n if (response.status==200){ //confirma que no hubo error\r\n guardaSendEmailStore(response.data).then( function(sendEmailFront:any) { \r\n console.log(':::::sendEmailFront',sendEmailFront)\r\n //recargaPropuesta(); //**renderizo desde la página propuesta\r\n }); \r\n }\r\n setCargandoSpin(false);\r\n \r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaUpdatebyUser): \", ex.response.status);\r\n generaObjErrorNotificationsStore(ex.response, true, '', '', 'Propuesta.Contenido-Notificatios/SendEmail','P');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n recargaPropuesta();\r\n recargaPaginaSSC_Not();\r\n })\r\n }\r\n \r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaUpdatebyUser): \", ex.response.status);\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'Propuesta.Contenido-Proposals/SendbyUser','P');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n }\r\n else { \r\n alert('es id 0, no puedo enviar') \r\n }\r\n }\r\n\r\n const botonEliminar = () => {\r\n //alert('boton Eliminar');\r\n setCargandoSpin(true);\r\n //eliminamos la propuesta llamando al api: Proposals/DeletebyUser\r\n proposalsServicio.cargaDeletebyUser(props.tokenStore, props.idPropuesta)\r\n .then((response:any) => {\r\n //console.log('response.................', response)\r\n if (response.status==200){ //confirma acceso del api\r\n guardaDeletebyUserStore(response.data).then( function(deletebyUserFront:any) {//va a store a guardar información\r\n if (deletebyUserFront.ret==1) { //confirmo respuesta de api\r\n eliminaPropuestasStore(props.idPropuesta);\r\n recargaPropuesta(); //**renderizo desde la página propuesta\r\n setCargandoSpin(false);\r\n swal2.fire({\r\n icon: 'success',\r\n //showCancelButton: true,\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n width: \"70%\",\r\n title: eti.mensajes[3].text,\r\n //html: \"
    \" + \"
    \",\r\n })\r\n //**ojo inactivo la propuesta, ver si lo hago con el api gral\r\n } \r\n })\r\n }\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaUpdatebyUser): \", ex.response.status);\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'PropuestaContenido-Proposals/DeletebyUser','P')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n }\r\n\r\n const botonCerrar = () => {\r\n if (swBotonGuardar) { //si esta activo el botón guardar hay cambios...\r\n swal2.fire({\r\n title: eti.mensajes[4].text, // El registro de la propuesta de cambio NO ha sido guardado - ¿Desea salir sin guardar?\r\n text: \"\",\r\n icon: 'question',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '50%',\r\n html: \"
    \" + eti.mensajes[5].text + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) { props.botonCierraPropuesta(props.idPropuesta) }\r\n })\r\n }\r\n else { //cerramos \r\n props.botonCierraPropuesta(props.idPropuesta)\r\n } \r\n limpiaPlantilla();\r\n }\r\n\r\n const limpiaPlantilla = () => {\r\n setPropuestaDetallesFront(propuestaNvaStore);\r\n setDesCambioFront('');\r\n \r\n setCatOrigenesFront(catOrigenesFrontCopia);\r\n setCatProcesosFront(catProcesosFrontCopia);\r\n\r\n setSwBotonGuardar(false);\r\n setSwBotonEnviar(false);\r\n setSwBotonEliminar(null); \r\n recargaPropuestaContenido();\r\n }\r\n \r\n const armaDesCambio = (e:any) => {\r\n //console.log('e.target.value::',e.target.value);\r\n setDesCambioFront(e.target.value);\r\n setIsChecked(!isChecked); //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardar(true); //habilitar boton guardar en front\r\n setSwBotonEnviar(false); // hasta que grabe envia\r\n //console.log('desCambioFront::',desCambioFront);\r\n };\r\n \r\n const armaCatOrigenes = (e:any) => {\r\n // console.log('e.target.id::', e.target.id);\r\n //let miCheckId = \"0123456789_123_5\"; \r\n let miCheckId = e.target.id; \r\n //console.log('miCheckId.....', miCheckId)\r\n let posP = miCheckId.indexOf('_');\r\n //console.log('**posP.....', posP)\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n //console.log('**paso.....', paso)\r\n //console.log('**paso.length.....', paso.length)\r\n let posC = paso.indexOf('_');\r\n //console.log('**posC.....', posC)\r\n let propuestaId = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('**propuestaId.....', propuestaId)\r\n //console.log('**catalogoId.....', catalogoId)\r\n \r\n catOrigenesFront.map((o:any) => {\r\n if (o.id == catalogoId)\r\n o.activo = !o.activo\r\n }); \r\n setIsChecked(!isChecked); // lo uso para que restarure la página y tome mis cambios\r\n setSwBotonGuardar(true);\r\n setSwBotonEnviar(false); // hasta que grabe envia\r\n //console.log('.......catOrigenesFront...',catOrigenesFront)\r\n }\r\n\r\n const armaCatOrigenesEspecifica = (e:any) => {\r\n //console.log('e.target.id::', e.target.id);\r\n //console.log('e.target.value::', e.target.value);\r\n // catO-Especifica_NEW_1\r\n // 012345678901234_678_9\r\n let miCheckId = e.target.id; \r\n //console.log('miCheckId.....', miCheckId)\r\n let posP = miCheckId.indexOf('_');\r\n //console.log('**posP.....', posP)\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n //console.log('**paso.....', paso)\r\n //console.log('**paso.length.....', paso.length)\r\n let posC = paso.indexOf('_');\r\n //console.log('**posC.....', posC)\r\n let propuestaId = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('*****propuestaId.....', propuestaId)\r\n //console.log('*****catalogoId.....', catalogoId)\r\n catOrigenesFront.map((o:any) => {\r\n if (o.id == catalogoId)\r\n o.specification = e.target.value\r\n }); \r\n setIsChecked(!isChecked); //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardar(true); //habilitar boton guardar en front\r\n setSwBotonEnviar(false); // hasta que grabe envia\r\n //console.log('.......catOrigenesFront...',catOrigenesFront)\r\n };\r\n\r\n const armaCatProcesos = (e:any) => {\r\n // console.log('e.target.id::', e.target.id);\r\n //let miCheckId = \"0123456789_123_5\"; \r\n let miCheckId = e.target.id; \r\n //console.log('miCheckId.....', miCheckId)\r\n let posP = miCheckId.indexOf('_');\r\n //console.log('**posP.....', posP)\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n //console.log('**paso.....', paso)\r\n //console.log('**paso.length.....', paso.length)\r\n let posC = paso.indexOf('_');\r\n //console.log('**posC.....', posC)\r\n let propuestaId = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('**propuestaId.....', propuestaId)\r\n //console.log('**catalogoId.....', catalogoId)\r\n catProcesosFront.map((p:any) => {\r\n if (p.id == catalogoId)\r\n p.activo = !p.activo\r\n }); \r\n setIsChecked(!isChecked); // lo uso para que restarure la página y tome mis cambios\r\n setSwBotonGuardar(true);//habilitar boton guardar en front\r\n setSwBotonEnviar(false); // hasta que grabe envia\r\n //console.log('.......catProcesosFront...',catProcesosFront); \r\n }\r\n\r\n //rutinas para filtrar los procesos\r\n const [busqueda, setBusqueda] = useState(\"\");\r\n const [catProcesosFiltro, setCatProcesosFiltro] = useState([]);\r\n const handleChange=(e:any)=>{\r\n setBusqueda(e.target.value);\r\n console.log(\"busqueda: \"+e.target.value);\r\n filtrar(e.target.value);\r\n }\r\n const filtrar = (terminoBusqueda:any) =>{\r\n //filtrado por acronimo, frecuencia y nombre\r\n console.log(\"catProcesosFront.......++++\",catProcesosFront);\r\n var resultadosBusqueda=catProcesosFront.filter((elemento:any) =>{\r\n if (elemento.acronym.toString().toLowerCase().includes(terminoBusqueda.toLowerCase()) \r\n || elemento.frequencyname.toString().toLowerCase().includes(terminoBusqueda.toLowerCase())\r\n || elemento.processname.toString().toLowerCase().includes(terminoBusqueda.toLowerCase()\r\n ) \r\n ){\r\n return elemento;\r\n }\r\n })\r\n \r\n setCatProcesosFiltro(resultadosBusqueda);\r\n }\r\n const limpiarInputBuscador = () => { \r\n setCatProcesosFiltro([]);\r\n //const cajaInput:any = document.getElementById(\"inputBusquedaTexto\") as HTMLInputElement | null; \r\n //const cajaInput:any = document.getElementById(inputBusquedaTexto); \r\n var cajaInput:any = document.getElementById(\"inputLDAP\") as HTMLInputElement | null; \r\n if (cajaInput) cajaInput.value= \"\"; \r\n setBusqueda(\"\")\r\n recargaPropuestaContenido();\r\n }\r\n \r\n //*vista\r\n return (\r\n <>\r\n {/* propuesta nueva - Encabezado: Agrega propuesta de cambio & fecha: hoy, folio:NEW, status:No enviado */}\r\n { props.propuestaNva &&\r\n (<>\r\n
    \r\n \r\n \r\n

    {eti.botones[0].text}

    \r\n {/* fecha */}\r\n \r\n {propuestaDetallesFront.fecha}\r\n  \r\n \r\n {/* folio */} \r\n Folio: {propuestaDetallesFront.folio}  \r\n \r\n {/* estatus */}\r\n \r\n \r\n \r\n {propuestaDetallesFront.estatusTexto} {/*naranja*/}\r\n \r\n\r\n {/* props.botonCierraPropuestaNva */}\r\n \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n \r\n {/* propuesta existente - contenido */}\r\n
    \r\n
    \r\n
    \r\n \r\n {/* Descripción del cambio */}\r\n
    \r\n

    {eti.contenido[0].text}  \r\n \r\n \r\n \r\n {articulos.articles[8].ch}

    \r\n Articulo: 8
    {articulos.articles[8].description}

    \r\n Articulo: 18
    {articulos.articles[18].description}
    \r\n
    \r\n
    \r\n

    \r\n \r\n
    \r\n \r\n {/* Origen del cambio */}\r\n
    \r\n

    {eti.contenido[1].text}  \r\n \r\n \r\n \r\n {articulos.articles[8].ch}

    \r\n Articulo: 8
    {articulos.articles[8].description}

    \r\n Articulo: 18
    {articulos.articles[18].description}
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n { catOrigenesFront?.map((catO:any, index:any) => ( /* propuestaDetallesFront.miCatOrigenes */\r\n x1=`catO-div1_${props.idPropuesta}_${catO.id}`, \r\n x2=`catO-div2_${props.idPropuesta}_${catO.id}`, \r\n x3=`catO-input_${props.idPropuesta}_${catO.id}`, \r\n x4=`catO-div3_${props.idPropuesta}_${catO.id}`, \r\n x5=`catO-div4_${props.idPropuesta}_${catO.id}`, \r\n x6=`catO-Especifica_${props.idPropuesta}_${catO.id}`, \r\n \r\n <>\r\n
    {/* className={catO.visible ? 'display-block' :'display-none'} */}\r\n
    \r\n \r\n
    \r\n
    \r\n {\" \"}\r\n {catO.name} \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n ))}\r\n
    \r\n
    \r\n\r\n {/* Procesos que potencialmente serán modificados */}\r\n
    \r\n\r\n {/* párrafo: Procesos que potencialmente serán modificados */}\r\n

    {eti.contenido[2].text}  \r\n \r\n \r\n \r\n {articulos.articles[8].ch}

    \r\n Articulo: 8
    {articulos.articles[8].description}

    \r\n Articulo: 18
    {articulos.articles[18].description}
    \r\n
    \r\n
    \r\n

    \r\n\r\n {/* título: Lista de Procesos: input: Búsqueda: */}\r\n {propuestaDetallesFront.sent == false && (\r\n

    \r\n \r\n {eti.contenido[3].text}          \r\n {eti.contenido[4].text}  \r\n \r\n \r\n x\r\n

    \r\n )}\r\n\r\n {/* chekcbox's de lista de Procesos */}\r\n
    \r\n {catProcesosFiltro.length>0 \r\n ? (<>\r\n {catProcesosFiltro?.map(( catP: any, index: any) => (\r\n (x1 = `catPF-div1_${props.idPropuesta}_${catP.id}`),\r\n (x2 = `catPF-div2_${props.idPropuesta}_${catP.id}`),\r\n (x3 = `catPF-input_${props.idPropuesta}_${catP.id}`),\r\n (x4 = `catPF-div3_${props.idPropuesta}_${catP.id}`),\r\n (<>\r\n
    \r\n {\" \"}\r\n {/* className={catP.visible ? 'display-block' :'display-none'} */}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {/*acrónimo */}\r\n {catP.acronym} - \r\n {/*programa*/}\r\n {catP.processname}   /   \r\n {/*frecuencia */}\r\n {catP.frequencyname}    \r\n {/*estatus */}\r\n {catP.estatusProceso} \r\n
    \r\n
    \r\n
    \r\n ) \r\n )) }\r\n )\r\n : (<>\r\n {catProcesosFront?.map(( catP: any, index: any ) => (\r\n (x1 = `catP-div1_${props.idPropuesta}_${catP.id}`),\r\n (x2 = `catP-div2_${props.idPropuesta}_${catP.id}`),\r\n (x3 = `catP-input_${props.idPropuesta}_${catP.id}`),\r\n (x4 = `catP-div3_${props.idPropuesta}_${catP.id}`),\r\n ( <>\r\n
    \r\n {\" \"}\r\n {/* className={catP.visible ? 'display-block' :'display-none'} */}\r\n {/* { (catP.ordena== 1 ) ? \"claseCK background-color-azul9\" : \"claseCK\" } */}\r\n {/*
    */}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {/*acronimo */}\r\n {catP.acronym} - \r\n {/*programa */}\r\n {catP.processname}   /   \r\n {/*frecuencia */}\r\n {catP.frequencyname}    \r\n {/*estatus */}\r\n {catP.estatusProceso} \r\n
    \r\n
    \r\n
    \r\n )\r\n )) }\r\n )\r\n }\r\n
    \r\n
    \r\n\r\n {/* Botones */}\r\n
    \r\n { propuestaDetallesFront.sent == false && \r\n (<>\r\n { swBotonGuardar /* propuestaDetallesFront.btnGuardar */\r\n ? (<>   )\r\n : (<>   )\r\n }\r\n { swBotonEnviar /* propuestaDetallesFront.btnEnviar */\r\n ? (<>   )\r\n : (<>   )\r\n }\r\n { swBotonEliminar /* propuestaDetallesFront.btnEliminar */\r\n && (<>   )\r\n }\r\n )\r\n } \r\n  \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n\r\n \r\n );\r\n }\r\n\r\n\r\n/* switch(responseAPI.status){\r\n case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n } */\r\n\r\n/* className={propuestaDetallesFront.sent ? 'divCatalogoDisabled' :'divCatalogo'} */","/*Recurso: Catalogs - Servicio de lectura del API: Maneja los catálogos utilizados\r\n Tareas:\r\n GetAllOrigin //Origen del cambio //*Propuesta\r\n GetAllProcessByFrequency //Procesos por frecuencia //*Propuesta \r\n GetAllDecision //........... //*RP *RD \r\n GetAllQuality //........... //*RP\r\n GetAllCycles //........... //*RD\r\n*/\r\n\r\nimport axios from \"axios\";\r\n//import {IGetAllOrigin} from \"./catalogs.modelo\";\r\n//import {IGetAllProcessByFrequency} from \"./catalogs.modelo\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Catalogs/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n const cargaGetAllOrigin = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllOrigin/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllOrigin/es', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const cargaGetAllProcessByFrequency= async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllProcessByFrequency/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllProcessByFrequency/es', 'method: post', \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const cargaGetAllDecision= async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllDecision', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllDecision', 'method: post', \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const cargaGetAllQuality= async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllQuality', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllQuality', 'method: post', \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const cargaGetAllCycles = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllCycles/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllCycles/es', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const cargaGetAllProof = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllProof', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllProof', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\nconst catalogsService = {\r\n cargaGetAllOrigin: cargaGetAllOrigin, //Propuesta\r\n cargaGetAllProcessByFrequency: cargaGetAllProcessByFrequency, //Propuesta\r\n cargaGetAllDecision: cargaGetAllDecision, //RD //RP\r\n cargaGetAllQuality: cargaGetAllQuality, //RP\r\n cargaGetAllCycles: cargaGetAllCycles, //RP\r\n cargaGetAllProof: cargaGetAllProof, //RD\r\n};\r\n\r\nexport default catalogsService;\r\n","/* Propuesta - registro de propuesta de cambio */\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n import { Panel, PanelGroup } from \"rsuite\";\r\n import ReactPaginate from \"react-paginate\";\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n \r\n//*clases \r\n import \"../pagination.css\";\r\n\r\n//*imágenes\r\n import { BsEnvelope, BsCalendarEvent } from \"react-icons/bs\";\r\n import { AiOutlineDoubleLeft, AiOutlineDoubleRight } from \"react-icons/ai\";\r\n\r\n//*archivos & componentes (otros componentes enlazados)\r\n import PropuestaContenido from \"./Propuesta.Contenido\"; \r\n\r\n//*api's (servicios y store)\r\n \r\n import catalogsServicio from \"../../../../api/recursos/catalogs/catalogs.servicio\"; \r\n import catalogsStore from \"../../../../api/recursos/catalogs/catalogs.store\"; \r\n \r\n import proposalsServicio from \"../../../../api/recursos/proposals/proposals.servicio\"; \r\n import proposalsStore from \"../../../../api/recursos/proposals/proposals.store\"; \r\n \r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\"\r\n\r\n//*funciones\r\n\r\n//*interfaces\r\n interface propsPropuesta {\r\n tokenStore: any;\r\n menuStore: any;\r\n quitaErrorPagina:any;\r\n recargaPaginaSSC:any;\r\n recargaPaginaSSC_Not:any;\r\n }\r\n\r\n//*componente\r\n export default function Propuesta(props: propsPropuesta){\r\n\r\n //*api store\r\n\r\n const { guardaGetAllOriginStore, catOrigenesStore,\r\n guardaGetAllProcessByFrequencyStore, catProcesosStore,\r\n generaObjErrorCatalogsStore } = \r\n catalogsStore((state:any) =>( { \r\n guardaGetAllOriginStore: state.guardaGetAllOriginStore,\r\n catOrigenesStore: state.catOrigenesStore,\r\n guardaGetAllProcessByFrequencyStore: state.guardaGetAllProcessByFrequencyStore,\r\n catProcesosStore: state.catProcesosStore,\r\n generaObjErrorCatalogsStore: state.generaObjErrorCatalogsStore,\r\n objErrorCatalogsStore: state.objErrorCatalogsStore\r\n }));\r\n\r\n const { guardaGetSummarybyUserStore, limpiaPropuestasStore, propuestasStore,\r\n cambiaPropuestasStore,\r\n agregaPropuestaNvaStore, propuestaNvaStore, \r\n generaObjErrorProposalsStore } = \r\n proposalsStore((state:any) =>( { \r\n guardaGetSummarybyUserStore: state.guardaGetSummarybyUserStore,\r\n limpiaPropuestasStore: state.limpiaPropuestasStore,\r\n propuestasStore: state.propuestasStore, \r\n cambiaPropuestasStore: state.cambiaPropuestasStore,\r\n agregaPropuestaNvaStore: state.agregaPropuestaNvaStore,\r\n propuestaNvaStore: state.propuestaNvaStore,\r\n guardaGetDetailbyUserStore: state.guardaGetDetailbyUserStore,\r\n propuestaDetallesStore: state.propuestaDetallesStore,\r\n generaObjErrorProposalsStore: state.generaObjErrorProposalsStore\r\n }));\r\n \r\n //*store's\r\n \r\n \r\n //*datos\r\n var _ = require('underscore');\r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.Propuesta;\r\n let x0, x1, x1a, x2, x3 = '';\r\n\r\n //paginación: constante para el manejo de la \r\n let data:any = propuestasStore; //valores mostradas en para la páginación\r\n const [currentItems, setCurrentItems] = useState([]); //elementos mostrados según páginación\r\n const [pageCount, setPageCount] = useState(0); //contabilidad de la página\r\n const [itemOffset, setItemOffset] = useState(0); //desplazamiento \r\n const itemsPerPage = 10; //número de elementos a mostrar\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaPropuesta, setSwRecargaPropuesta] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n\r\n const [swPropuestaNva, setSwPropuestaNva] = useState(false);\r\n \r\n const [bandera,setBandera] = useState(false); //la uso para asegurarme que ya termino de leer Proposals/GetSummarybyUser/ por el regreso en el menu ya que si tenía abiertas las dejaba y estaba leyendo Proposals/GetDetailbyUserAll/\r\n\r\n //*useEffect\r\n\r\n useEffect(()=> { // al montar\r\n //console.log('Propuesta - monto');\r\n props.quitaErrorPagina();\r\n limpiaPropuestasStore();\r\n console.clear();\r\n },[]);\r\n\r\n useEffect(()=> { //Carga cátalogo \"Origen del cambio\"- llama API - Catalogs/GetAllOrigin/{lang}\r\n setCargandoSpin(true);\r\n catalogsServicio.cargaGetAllOrigin(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaGetAllOriginStore(response.data).then( function(datos:any) { \r\n //console.log('cargamos información a catOriginesStore', datos );\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (cargaGetAllOrigin): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'Propuesta-Catalogs/GetAllOrigin','P');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n },[]);\r\n \r\n useEffect(()=> { //Carga cátalogo \"Procesos\"- llama API - Catalogs/getAllProcessByFrequency/{lang}\r\n setCargandoSpin(true);\r\n catalogsServicio.cargaGetAllProcessByFrequency(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaGetAllProcessByFrequencyStore(response.data).then( function(datos:any) { \r\n //console.log('cargamos información a catProcesosStore', datos );\r\n setSwRecarga(!swRecarga)\r\n })\r\n }\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetAllProcessByFrequency): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'Propuesta-Catalogs/GetAllProcessByFrequency','P');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n },[]);\r\n\r\n useEffect(()=> { //Carga propuestas - llama API - Proposals/GetSummarybyUser\r\n setBandera(false)\r\n setCargandoSpin(true);\r\n proposalsServicio.cargaGetSummarybyUser(props.tokenStore)\r\n .then(function(response:any){\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetSummarybyUserStore(response.data).then( function(datos:any) { \r\n //const data = datos;\r\n setBandera(true);\r\n })\r\n }\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummarybyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else{\r\n generaObjErrorProposalsStore(ex.response, true, '', 'P', 'Propuesta-Proposals/GetSummarybyUser','P');\r\n recargaPaginaSSC();\r\n } \r\n setCargandoSpin(false);\r\n });\r\n setSwRecarga(!swRecarga)\r\n },[]);\r\n \r\n useEffect(()=> { //usado para renderizar\r\n //console.log('Propuesta - renderizando .........................');\r\n //console.log('---propuestasStore:', propuestasStore);\r\n data=propuestasStore;\r\n setSwRecargaPropuesta(!swRecargaPropuesta);\r\n },[swRecarga]);\r\n\r\n useEffect(() => { //paginación: se ejectura al cambio de un elementos (al click en los botones)\r\n //console.log('entro a useEffect paginación')\r\n const endOffset = itemOffset + itemsPerPage;\r\n setCurrentItems(data.slice(itemOffset, endOffset));\r\n setPageCount(Math.ceil(data.length / itemsPerPage));\r\n setSwRecarga(!swRecarga);\r\n //console.log('::data', data);\r\n }, [itemOffset, itemsPerPage, data]);\r\n \r\n useEffect(()=>{ //paginación: para subir la pantalla\r\n window.scrollTo({top:0});\r\n },[currentItems])\r\n\r\n //*funciones\r\n\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n const recargaPropuesta = () => { // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n //const data = propuestasStore;\r\n setSwRecarga(!swRecarga);\r\n }\r\n \r\n const recargaPropuestaNva = (id:any) => {\r\n //console.log('recargaPropuestaNva....');\r\n //const data = propuestasStore;\r\n setItemOffset(10); //lo uso para generar un cambio para el useefect\r\n setItemOffset(0); //lo regreso a la páginación inicial \r\n setSwPropuestaNva(false); //reinicializo el objeto propuestaNvaStore\r\n setBandera(true);\r\n setSwRecarga(!swRecarga);\r\n }\r\n \r\n const abreCierraPropuesta = (idProp:any, swAbierto:any) => { // abre y cierra el div de la propuesta\r\n //alert('abreCierraPropuesta...' + idProp+ '...' + swAbierto);\r\n cambiaPropuestasStore(idProp, !swAbierto, null, 'abreCierraPropuesta');\r\n setSwRecarga(!swRecarga);\r\n }\r\n\r\n const botonCierraPropuesta = (idProp:any) =>{\r\n //alert(\":::botonCierraPropuesta - propuestasStore[0].id: \"+ paso);\r\n if (idProp==0) { //propuesta nueva\r\n setSwPropuestaNva(false);// con esto reactivo los 4 useEffect \r\n }\r\n else { //propuesta cargada\r\n cambiaPropuestasStore(idProp, false, null, 'botonCierraPropuesta');\r\n }\r\n setSwRecarga(!swRecarga);\r\n }\r\n \r\n const botonAgregarPropuestaDeCambio = () =>{\r\n let pasoCatO= JSON.parse(JSON.stringify(catOrigenesStore));\r\n let pasoCatP= JSON.parse(JSON.stringify(catProcesosStore));\r\n agregaPropuestaNvaStore(pasoCatO, pasoCatP);\r\n setSwRecargaPropuesta(!swRecarga);\r\n setSwPropuestaNva(true); //activa ventana con registro nuevo\r\n }\r\n\r\n const clickPaginacion = (event: any) => { //paginación: se ejecuta cuando se da un click en los elementos de páginación (botones)\r\n const newOffset = (event.selected * itemsPerPage) % data.length;\r\n //console.log(\"newOffset--------\", newOffset);\r\n setItemOffset(newOffset);\r\n setSwRecarga(!swRecarga) \r\n };\r\n \r\n //*vista\r\n return(\r\n <>\r\n {/* nota de mensaje de error */}\r\n { (props.menuStore[0].errorPagina==true) &&\r\n (<> )\r\n }\r\n\r\n {/* botón - Agregar propuesta de cambio */} \r\n
    \r\n \r\n
    \r\n \r\n {/* div - Agregar propuesta de cambio*/} \r\n
    \r\n {swPropuestaNva &&\r\n (<>\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n
    \r\n\r\n {/* div's - Propuestas existentes */} {/* defaultActiveKey={1} se pone para abrir la primera siempre*/}\r\n
    \r\n {/* {console.log('propuestasStore::::',propuestasStore)} \r\n {console.log('currentItems::::',currentItems)} este elemento tienen las lista de propuesta se usa para la paginación */} \r\n { currentItems?.map((p:any, index:any) => (\r\n (x0 = ` ${p.fecha} \r\n Folio: ${p.folio}   `),\r\n (x1 = ` ${p.estatusTexto}`),\r\n (x1a = ` ${p.estatusTexto}`),\r\n\r\n /*x2 forma el contendio del header del panel*/\r\n (x2 = (\r\n <>\r\n
    \r\n {/* propuesta & fecha */}\r\n \r\n {p.description} \r\n \r\n \r\n\r\n {/* folio */}\r\n \r\n\r\n {/* estatus */}\r\n \r\n {p.estatusTexto === \"Enviada\" \r\n ? (<>\r\n \r\n \r\n ) \r\n : (<>\r\n \r\n \r\n )\r\n }\r\n \r\n
    \r\n \r\n )),\r\n (<>\r\n {p.eliminado==false && //antes de enviar el usuario puede eliminar un registro guardado, en el front la baja es virtual en el arreglo de movimiento\r\n (<>\r\n
    \r\n \r\n abreCierraPropuesta(p.id, p.abierto)}\r\n >\r\n \r\n {bandera && //la uso para asegurarme que ya termino de leer Proposals/GetSummarybyUser/ por el regreso en el menu\r\n (<>\r\n {p.abierto &&\r\n ()\r\n }\r\n )\r\n }\r\n \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n\r\n

    \r\n\r\n {/* paginación: elemento visuales */}\r\n { pageCount > 1 &&\r\n (<>\r\n \r\n } \r\n pageRangeDisplayed={2}\r\n pageCount={pageCount}\r\n previousLabel={\r\n \r\n }\r\n renderOnZeroPageCount={null}\r\n containerClassName=\"pagination\"\r\n pageLinkClassName=\"page-num\"\r\n previousLinkClassName=\"page-num\"\r\n nextLinkClassName=\"page-num\"\r\n activeClassName=\"active\"\r\n disabledLinkClassName=\"gray\"\r\n onPageChange={clickPaginacion}\r\n // onClick={clickPaginacion}\r\n />\r\n ) \r\n }\r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n\r\n \r\n )\r\n }\r\n\r\n {/* dangerouslySetInnerHTML={{__html: eti[4].text}} */}","/*Recurso: Decisions - Servicio de lectura del API: Verifica la autenticación del usuario obteniendo clave y contraseña\r\n Tareas:\r\n GetSummaryPxF //*RD\r\n GetDetailbyProcess //*RD \r\n GetRateProposal //*RD \r\n UpdateRateProposal //*RD \r\n SendRateProposal //*RD\r\n*/\r\nimport axios from \"axios\";\r\n//import {IGetSummaryPxF} from \"./decisions.modelo\";\r\n//import {IGetDetailbyProcess} from \"./decisions.modelo\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Decisions/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n\r\n //tarea: GetSummaryPxF/es\r\n const cargaGetSummaryPxF = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetSummaryPxF/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetSummaryPxF/es', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: GetDetailbyProcess/es/id \r\n const cargaGetDetailbyProcess = async (token:any, id:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetDetailbyProcess/es/'+id, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetDetailbyProcess/es/'+id, 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: GetRateProposal \r\n const cargaGetRateProposal = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetRateProposal/es', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetRateProposal/es', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: UpdateRateProposal \r\n const cargaUpdateRateProposal = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'UpdateRateProposal/es', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'UpdateRateProposal/es', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; \r\n\r\n //tarea: SendRateProposal \r\n const cargaSendRateProposal = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'SendRateProposal', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'SendRateProposal', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; \r\n\r\n /* const cargaGetAllProcessByFrequency= async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllProcessByFrequency/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllProcessByFrequency/es', 'method: post', \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; */\r\n\r\nconst decisionService = {\r\n cargaGetSummaryPxF: cargaGetSummaryPxF,\r\n cargaGetDetailbyProcess: cargaGetDetailbyProcess,\r\n cargaGetRateProposal: cargaGetRateProposal,\r\n cargaUpdateRateProposal: cargaUpdateRateProposal,\r\n cargaSendRateProposal: cargaSendRateProposal,\r\n //cargaGetAllProcessByFrequency: cargaGetAllProcessByFrequency,\r\n};\r\n\r\nexport default decisionService;\r\n","/*Recurso: Files - Servicio de lectura del API: Verifica la autenticación del usuario obteniendo clave y contraseña\r\n Tareas:\r\n UploadFilesDecision //*RP\r\n UploadFilesAnalysis //*RD\r\n*/\r\n\r\nimport axios from \"axios\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Files/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n \r\n //tarea: UploadFilesDecision \r\n const cargaUploadFilesDecision = async (token:any, formData:any) => {\r\n //console.log ('***API: ' + API_URL + 'UploadFilesDecision', {headers: { 'content-type': 'text/json' }} );\r\n //console.log ('***API-body: ', formData )\r\n return await axios.post(API_URL + 'UploadFilesDecision', formData,\r\n { headers: { 'Authorization':token }} )\r\n };\r\n\r\n //tarea: UploadFilesAnalysis \r\n const cargaUploadFilesAnalysis = async (token:any, formData:any) => {\r\n //console.log ('***API: ' + API_URL + 'UploadFilesAnalysis', {headers: { 'content-type': 'text/json' }} );\r\n //console.log ('***API-body: ', formData )\r\n return await axios.post(API_URL + 'UploadFilesAnalysis', formData,\r\n { headers: { 'Authorization':token }} )\r\n };\r\n \r\n const filesService = {\r\n cargaUploadFilesDecision: cargaUploadFilesDecision,\r\n cargaUploadFilesAnalysis: cargaUploadFilesAnalysis,\r\n };\r\n\r\nexport default filesService;\r\n","/* RP - Responsable de proceso - toma decisión de la(s) propuesta(s) asignadas a su rol */\r\n/* Contenido - registro de pxf (detalles) */\r\n/* VerRegistrar - Ventana de registro o visualización de la propuesta de cambio (botones Ver o Registrar) */\r\n\r\n//*react- recursos\r\n import React, { useState, useCallback,useEffect } from \"react\";\r\n import { useDropzone } from \"react-dropzone\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n //*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n/* import CargaArchivo from \"../../../componentes/CargaArchivo\"; */\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n import { Col, Row } from \"react-bootstrap\";\r\n import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"; //'libreria' que cita el bote de basura\r\n import { faTrashAlt } from \"@fortawesome/free-solid-svg-icons\"; //icono bote de basura \r\n\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n import articulos from \"../../../../datos/json/guidelines.json\";\r\n //import Dropzone from \"react-dropzone\";\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n import decisionsServicio from \"../../../../api/recursos/decisions/decisions.servicio\"; \r\n import decisionsStore from \"../../../../api/recursos/decisions/decisions.store\"; \r\n\r\n import notificationsServicio from \"../../../../api/recursos/notifications/notifications.servicio\"; \r\n import notificationsStore from \"../../../../api/recursos/notifications/notifications.store\"; \r\n\r\n import filesServicio from \"../../../../api/recursos/files/files.servicio\"; \r\n import filesStore from \"../../../../api/recursos/files/files.store\"; \r\n\r\n//*store's\r\n\r\n//*interfaces\r\n interface propsVerRegistrar {\r\n tokenStore:any,\r\n idPxF:any,\r\n miPropuestaDetalle: any, //la que viene de decisions\r\n propuestaDetallesFront: any, //la que viene de proposals\r\n botonCierraSlidingPanel:any,\r\n recargaCiclos:any,\r\n recargaRPContenido:any,\r\n recargaRP:any,\r\n recargaPaginaSSC:any,\r\n recargaPaginaSSC_Not :any\r\n }\r\n \r\n//*componente\r\nexport default function VerRegistrar(props: propsVerRegistrar){\r\n var _ = require('underscore');\r\n\r\n //*api store\r\n const { guardaUpdateRateProposalStore, \r\n guardaSendRateProposalStore, \r\n cambiapxfStore,\r\n frecUNDStore, cambiafrecUNDStore, frecUNDSelecStore, reiniciafrecUNDStore,\r\n generaObjErrorDecisionsStore } = \r\n decisionsStore((state:any) =>( { \r\n guardaUpdateRateProposalStore: state.guardaUpdateRateProposalStore,\r\n guardaSendRateProposalStore: state.guardaSendRateProposalStore,\r\n cambiapxfStore: state.cambiapxfStore,\r\n frecUNDStore: state.frecUNDStore,\r\n cambiafrecUNDStore: state.cambiafrecUNDStore,\r\n frecUNDSelecStore: state.frecUNDSelecStore,\r\n reiniciafrecUNDStore: state.reiniciafrecUNDStore,\r\n generaObjErrorDecisionsStore: state.generaObjErrorDecisionsStore\r\n }));\r\n\r\n const { guardaSendEmailStore, \r\n generaObjErrorNotificationsStore } = \r\n notificationsStore((state:any) =>( { \r\n guardaSendEmailStore: state.guardaSendEmailStore,\r\n generaObjErrorNotificationsStore: state.generaObjErrorNotificationsStore\r\n })); \r\n \r\n const { guardaUploadFilesDecisionStore, \r\n generaObjErrorFilesStore, objErrorFilesStore } = \r\n filesStore((state:any) =>( { \r\n guardaUploadFilesDecisionStore: state.guardaUploadFilesDecisionStore,\r\n generaObjErrorFilesStore: state.generaObjErrorFilesStore,\r\n objErrorFilesStore: state.objErrorFilesStore\r\n })); \r\n\r\n //*store's\r\n \r\n //*datos\r\n let bodyAPIGuardar:any = {\r\n \"id\":0, \r\n \"proposal\":{ \"id\":0, \"evidence\":null, \"quality\":null, \"decision\":{ \"id\":null, \"name\":null, \"commentary\":null, \"cycle\":null, \"files\":null} } \r\n };\r\n \r\n //*constantes y variables\r\n let etiRP = etiquetasSSC.RP;\r\n let etiGlobal = etiquetasSSC.Global;\r\n let x0:any, x1:any, x2:any, x3:any, x4:any, x5:any, x6:any, x7:any , x8:any, x9:any = ''\r\n let msjError = \"\"; \r\n let msjAdvertencia = \"\"; \r\n let verificaCiclo = {id: null, name: \"\"};\r\n let myFileCopiaFront = [] as any;\r\n let filesNuevos:any = [];\r\n let bodyArchAPI:any = []; // la usamos por si el nos manda archivos guardados\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaRPContenidoVerRegistrar, setSwRecargaRPContenidoVerRegistrar] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n\r\n const [abreSP, setAbreSP] = useState(false);\r\n const [miPropuestaDetalleFront, setMiPropuestaDetalleFront] = useState(props.miPropuestaDetalle); //la que viene de decisions\r\n const [miPDProposalFront, setMiPDProposalFront] = useState(props.miPropuestaDetalle.proposal);\r\n\r\n //catálogos a visualizar en el front\r\n const [miCatDecisionesFront, setMiCatDecisionesFront] = useState(props.miPropuestaDetalle.proposal.miCatDecisiones);\r\n const [miCatCiclosFront, setMiCatCiclosFront] = useState(props.miPropuestaDetalle.proposal.miCatCiclos);\r\n const [miCatCiclosOtrosFront, setMiCatCiclosOtrosFront]= useState(props.miPropuestaDetalle.proposal.miCatCiclosOtros);\r\n const [miCatCiclosOtrosFrontHH, setMiCatCiclosOtrosFrontHH]= useState(props.miPropuestaDetalle.proposal.miCatCiclosOtrosHH);\r\n const [miCatCiclosOtrosFrontHHMM, setMiCatCiclosOtrosFrontHHMM]= useState(props.miPropuestaDetalle.proposal.miCatCiclosOtrosHHMM);\r\n const [miCatCiclosOtrosFrontAA, setMiCatCiclosOtrosFrontAA]= useState(props.miPropuestaDetalle.proposal.miCatCiclosOtrosAA);\r\n const [miCatCiclosOtrosFrontMM, setMiCatCiclosOtrosFrontMM]= useState(props.miPropuestaDetalle.proposal.miCatCiclosOtrosMM);\r\n const [miCatCiclosOtrosFrontDD, setMiCatCiclosOtrosFrontDD]= useState(props.miPropuestaDetalle.proposal.miCatCiclosOtrosDD);\r\n const [miCatEvidenciasFront, setMiCatEvidenciasFront] = useState(props.miPropuestaDetalle.proposal.miCatEvidencias);\r\n const [miCatPrincipiosFront, setMiCatPrincipiosFront] = useState(props.miPropuestaDetalle.proposal.miCatPrincipios);\r\n\r\n //elementos a visualizar en el front\r\n const [comentarioFront, setComentarioFront] = useState(miCatDecisionesFront[0].commentary);\r\n const [misArchivosDropzone, setMisArchivosDropzone] = useState(props.miPropuestaDetalle.proposal.decision.files); // la usamos por si el nos manda archivos guardados\r\n\r\n const [miDecisionFront, setMiDecisionFront] = useState(props.miPropuestaDetalle.proposal.decision);\r\n const [hhFront, setHhFront] = useState(props.miPropuestaDetalle.frecuenciaHH);\r\n const [hhmmFront, setHhmmFront] = useState(props.miPropuestaDetalle.frecuenciaHHMM);\r\n const [undFront, setUndront] = useState(props.miPropuestaDetalle.frecuenciaUND);\r\n const [aaFront, setAaFront] = useState(false);\r\n const [mmFront, setMmFront] = useState(false);\r\n const [ddFront, setDdFront] = useState(false);\r\n const [miCicloSelFront, setMiCicloSelFront] = useState(miDecisionFront.cycle);\r\n const [miCicloOtroSelFront, setMiCicloOtroSelFront] = useState(miDecisionFront.cycle);\r\n const [miCicloOtroSelFrontHH, setMiCicloOtroSelFrontHH] = useState(miDecisionFront.cycle);\r\n const [miCicloOtroSelFrontHHMM, setMiCicloOtroSelFrontHHMM] = useState(miDecisionFront.cycle);\r\n const [miCicloOtroSelFrontAA, setMiCicloOtroSelFrontAA] = useState({id:'', name:'', activo:false});\r\n const [miCicloOtroSelFrontMM, setMiCicloOtroSelFrontMM] = useState({id:'', name:'', activo:false});\r\n const [miCicloOtroSelFrontDD, setMiCicloOtroSelFrontDD] = useState({id:'', name:'', activo:false});\r\n const [miDatoHH, setMiDatoHH] = useState('');\r\n const [miDatoHHMM, setMiDatoHHMM] = useState('');\r\n const [miDatoAA, setMiDatoAA] = useState('');\r\n const [miDatoMM, setMiDatoMM] = useState('');\r\n const [miDatoDD, setMiDatoDD] = useState('');\r\n \r\n const [swBotonGuardarFront, setSwBotonGuardarFront] = useState(props.miPropuestaDetalle.proposal.btnGuardar);\r\n const [swBotonEnviarFront, setSwBotonEnviarFront] = useState(props.miPropuestaDetalle.proposal.swEnviar);\r\n const [swOtroCicloFront, setSwOtroCicloFront] = useState(props.miPropuestaDetalle.proposal.otroCiclo);\r\n const [swOtroCicloFrontHH, setSwOtroCicloFrontHH] = useState(props.miPropuestaDetalle.frecuenciaHH);\r\n const [swOtroCicloFrontHHMM, setSwOtroCicloFrontHHMM] = useState(props.miPropuestaDetalle.frecuenciaHHMM);\r\n const [swOtroCicloFrontUND, setSwOtroCicloFrontUND] = useState(props.miPropuestaDetalle.frecuenciaUND);\r\n\r\n const [abreDivPropuestaCompleta, setAbreDivPropuestaCompleta] = useState(false);\r\n const [swCambio, setSwCambio] = useState(false);\r\n const [swDropzoneAdvertencia, setSwDropzoneAdvertencia] = useState(true);\r\n\r\n const [errorFiles, setErrorFiles] = useState(false);\r\n \r\n //*useEffect\r\n useEffect(()=> { // al montar\r\n console.log('RD.Contenido.VerRegistra - monto');\r\n console.log('props.propuestaDetallesFront.frecuenciaHH',props.propuestaDetallesFront);\r\n //console.log('miCatCiclosOtrosFrontHH....',miCatCiclosOtrosFrontHH);\r\n //console.log('miCatCiclosOtrosFrontHHMM....',miCatCiclosOtrosFrontHHMM);\r\n const x = JSON.parse(JSON.stringify(miDecisionFront));\r\n if (props.miPropuestaDetalle.frecuenciaHH){\r\n let cadena = x.cycle.name;\r\n let paso = cadena.substring(cadena.length - 2);\r\n setMiDatoHH(paso);\r\n //console.log('----::::::::paso', paso);\r\n console.log('----::::::::miCicloOtroSelFront', miCicloOtroSelFront);\r\n console.log('----::::::::miDatoHH...', miDatoHH);\r\n }\r\n if (props.miPropuestaDetalle.frecuenciaHHMM){\r\n let cadena = miDecisionFront.cycle.name;\r\n let paso = cadena.substring(cadena.length - 4);\r\n setMiDatoHHMM(paso);\r\n //console.log('----::::::::paso', paso);\r\n console.log('----::::::::miCicloOtroSelFront', miCicloOtroSelFront);\r\n console.log('----::::::::miDatoHHMM...', miDatoHHMM)\r\n }\r\n /* if (props.miPropuestaDetalle.frecuenciaUND){\r\n if (miDecisionFront.cycle.name != undefined) {\r\n let cadena = miDecisionFront.cycle.name;\r\n let paso = cadena.substring(cadena.length - 4);\r\n setMiDatoAA(paso);\r\n //console.log('----::::::::paso', paso);\r\n console.log('----::::::::miCicloOtroSelFront', miCicloOtroSelFront);\r\n console.log('----::::::::miDatoHHMM...', miDatoHHMM)\r\n }\r\n } */\r\n },[]);\r\n \r\n useEffect(()=> { //usado para renderizar\r\n console.log('renderizando RP.........................');\r\n setSwRecargaRPContenidoVerRegistrar(!swRecargaRPContenidoVerRegistrar);\r\n },[swRecarga]);\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n const recargaRP = () => { props.recargaRP() }\r\n const recargaRPContenido = () => { props.recargaRPContenido() }\r\n \r\n const recargaRPContenidoVerRegistrar = () => {\r\n setSwRecarga(!swRecarga);\r\n recargaRPContenido();\r\n }\r\n \r\n const armaComentario = (e:any) => {\r\n //console.log('e.target.value::',e.target.value);\r\n setComentarioFront(e.target.value);\r\n setSwCambio(!swCambio)//lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n //console.log('armaComentario:: ',comentarioFront);\r\n };\r\n\r\n const armaVerificaCiclo = () => { //uso esta rutina en armaBodyGuardarEnAPI y botonEnviar, por eso la pongo aquí, dejando pasoCiclo global\r\n //alert('armaVerificaCiclo')\r\n verificaCiclo = {id: null, name: \"\"};\r\n let swPaso=false;\r\n if (miCicloSelFront.id==99999 || miCicloSelFront.id==null) {\r\n console.log('if');\r\n //primero veo que no exista el ciclo seleccionado en Otro dentro de los ciclos propuestos\r\n if (!undFront) { //aplica a todos menos a frecuencia Unica o No determinada\r\n miCatCiclosFront?.map((cc:any, indexCC1:any) => {\r\n if (cc.name == miCicloOtroSelFront.name) {\r\n swPaso=true;\r\n verificaCiclo.id = cc.id; \r\n verificaCiclo.name = cc.name; \r\n }\r\n });\r\n if (swPaso == false) {\r\n //console.log('if 2');\r\n verificaCiclo.name = '';\r\n if (!props.miPropuestaDetalle.frecuenciaHH && !props.miPropuestaDetalle.frecuenciaHHMM) { verificaCiclo.name = miCicloOtroSelFront.name };\r\n if (props.miPropuestaDetalle.frecuenciaHH) { verificaCiclo.name = miCicloOtroSelFront.name + ' ' + miCicloOtroSelFrontHH.name };\r\n if (props.miPropuestaDetalle.frecuenciaHHMM) { verificaCiclo.name = miCicloOtroSelFront.name + ' ' + miCicloOtroSelFrontHHMM.name } \r\n }\r\n }\r\n else {\r\n //console.log('else..., frecUNDSelecStore', frecUNDSelecStore, miCicloOtroSelFrontAA);\r\n switch (frecUNDSelecStore) {\r\n case 'Anual': verificaCiclo.name = miCicloOtroSelFrontAA.name; break;\r\n case 'Mensual': verificaCiclo.name = miCicloOtroSelFrontMM.name; break;\r\n case 'Diaria': verificaCiclo.name = miCicloOtroSelFrontDD.name; break;\r\n }\r\n }\r\n } \r\n else {\r\n verificaCiclo.id = miCicloSelFront.id;\r\n verificaCiclo.name = miCicloSelFront.name;\r\n //console.log('else');\r\n }\r\n console.log('***************************verificaCiclo', verificaCiclo);\r\n }\r\n\r\n const botonEnviar = () => {\r\n let bodyAPIEnviar= {id: 0, proposal: {send: true, id: 0}}\r\n\r\n //{id: 1, proposal: {send: true, id: 1229}}\r\n bodyAPIEnviar.id= props.idPxF;\r\n bodyAPIEnviar.proposal.id= miPDProposalFront.id;\r\n \r\n setCargandoSpin(true);\r\n /* llamando al api: decisions/SendRateProposal */\r\n decisionsServicio.cargaSendRateProposal(props.tokenStore, bodyAPIEnviar)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaSendRateProposalStore(response.data).then( function(sendRateProposalFront:any) { \r\n //let pasoDetalle = { sentOrden:2 }; // sent = 1-true 2-false para el manejo de la tabla (orden asc y desc)\r\n let pasoDetalle=2;\r\n cambiapxfStore(props.idPxF, miPDProposalFront.id, null, pasoDetalle, 'botonEnviarAPI'); \r\n\r\n //desactivamos plantilla front ya que se envío ya no hay modificaciones\r\n miCatDecisionesFront.map((cd:any, indexCd:any) => {\r\n cd.disabled = true;\r\n if (cd.activo == false) \r\n cd.visible = false;\r\n }); \r\n miCatEvidenciasFront.map((ce:any, indexCe:any) => {\r\n ce.disabled = true;\r\n if (ce.activo == false) \r\n ce.visible = false;\r\n }); \r\n miCatPrincipiosFront.map((cp:any, indexCp:any) => {\r\n cp.disabled = true;\r\n if (cp.activo == false) \r\n cp.visible = false;\r\n }); \r\n setSwBotonGuardarFront(false); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n recargaRPContenido();\r\n recargaRP();\r\n\r\n //se genera una notificación & recarga de valores de notificaciones para el encabezado (campana)\r\n let bodyAPINot= {idproposal:0, idpf:0 }\r\n bodyAPINot.idproposal = miPDProposalFront.id;\r\n bodyAPINot.idpf = props.idPxF;\r\n setCargandoSpin(true);\r\n notificationsServicio.cargaSendEmail(props.tokenStore, bodyAPINot)\r\n .then((response:any) => {\r\n //console.log('response.................', response)\r\n if (response.status==200){ //confirma que no hubo error\r\n guardaSendEmailStore(response.data).then( function(sendEmailFront:any) { \r\n //console.log('genera el correo por medio del api', sendEmailFront );\r\n recargaRPContenido();\r\n recargaPaginaSSC_Not(); // para recargar las notificaciones (campana) en PaginaSSC\r\n \r\n }); \r\n }\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaSendEmail): \", ex.response.status);\r\n generaObjErrorNotificationsStore(ex.response, true, '', '', 'VerRegistrar-Notificatios/SendEmail','RP');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n \r\n //valida si se agrego un ciclo para agregarlo al catálogo\r\n armaVerificaCiclo();\r\n if (verificaCiclo.id==null && verificaCiclo.name!= '' ) {\r\n props.recargaCiclos(); //funcion de ResponsableDeProcesoContenido\r\n }\r\n\r\n swal2\r\n .fire({\r\n icon: 'info',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'El registro del tipo de modificación se ha enviado al Responsable de Diseño para su documentación',\r\n });\r\n recargaRPContenido(); \r\n }); \r\n } \r\n setCargandoSpin(false);\r\n \r\n recargaPaginaSSC_Not();\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaSendRateProposal): \", ex.response.status);\r\n generaObjErrorDecisionsStore(ex.response, true, '', '', 'VerRegistrar-Decisions/SendRateProposal','RP');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n }\r\n\r\n const botonGuardar = () => {\r\n //alert('botonGuardar');\r\n window.scrollTo({top:0});\r\n validaPlantilla();\r\n if ( msjError != '' ) { //error no lo dejamos grabar solo mandamos mensahe\r\n swal2\r\n .fire({\r\n icon: 'error',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'Importante:',\r\n html: \"
    \" + msjError + \"
    \",\r\n })\r\n }\r\n else { //no tiene errores la plantilla; entonces podemos guardar\r\n //console.log('paso else');\r\n setSwBotonEnviarFront(false); \r\n //primero: guardamos el archivo siempre y cuando la decisión = No Prevista\r\n if (miDecisionFront.id==3 && swDropzoneAdvertencia==false) {\r\n //guardaArchivosNoPrevista();\r\n let formData = new FormData(); \r\n formData.append(\"idpxf\", props.idPxF);\r\n formData.append(\"idprop\", miPDProposalFront.id);\r\n filesNuevos.map((f:any, indexF:any) => { formData.append(\"Files\", f) });\r\n //console.log('---------------------------------formData', formData)\r\n if (filesNuevos.length > 0) { //tiene archivos guardamos\r\n setCargandoSpin(true);\r\n /* llamando al api: Files/UpdateRateProposal*/\r\n setErrorFiles(false);\r\n filesServicio.cargaUploadFilesDecision(props.tokenStore, formData)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaUploadFilesDecisionStore(response.data).then( function(uploadFilesDecisionFront:any) { \r\n //console.log('..................uploadFilesDecisionFront', uploadFilesDecisionFront );\r\n //segundo: guardamos el análisis\r\n botonGuardarAnalisis();\r\n cambiapxfStore(props.idPxF, miPDProposalFront.id, null, null, 'botonGuardarCambiaBtnEnviar');\r\n recargaRPContenido();\r\n //tercero: envío mensaje \r\n ventanaMensaje();\r\n }); \r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaInsertbyUser): \", ex.response.status);\r\n generaObjErrorFilesStore(ex.response, true, '', '', 'VerRegistrar-Files/UpdateRateProposal','RP');\r\n recargaRPContenidoVerRegistrar();\r\n recargaPaginaSSC();\r\n setCargandoSpin(false);\r\n })\r\n }\r\n else { // aún no asigna archivo(s) pero guardamos el análisis\r\n botonGuardarAnalisis();\r\n cambiapxfStore(props.idPxF, miPDProposalFront.id, null, null, 'botonGuardarCambiaBtnEnviar');\r\n recargaRPContenido();\r\n }\r\n }\r\n else { \r\n //segundo: guardamos el análisis\r\n botonGuardarAnalisis();\r\n cambiapxfStore(props.idPxF, miPDProposalFront.id, null, null, 'botonGuardarCambiaBtnEnviar');\r\n recargaRPContenido();\r\n //tercero: envío mensaje \r\n ventanaMensaje();\r\n }\r\n recargaRPContenidoVerRegistrar();\r\n recargaRPContenido();\r\n } \r\n }\r\n\r\n const ventanaMensaje = () => {\r\n if ( msjAdvertencia != '' ) { \r\n swal2\r\n .fire({\r\n icon: 'info',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'El registro de la propuesta fue guardada:',\r\n html: \"
    Importante:

    \" + msjAdvertencia + \"
    \",\r\n })\r\n //setSwBotonEnviarFront(false); // hasta que grabe envia\r\n }\r\n else {\r\n swal2\r\n .fire({\r\n icon: 'info',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'El registro de la propuesta fue guardada:',\r\n html: \"
    \" + etiRP.mensajes[10].text + \"
    \",\r\n })\r\n //cambiapxfStore(props.idPxF, miPDProposalFront.id, null, null, 'botonGuardarCambiaBtnEnviar');\r\n //setSwBotonEnviarFront(true); // hasta que grabe envia\r\n }\r\n }\r\n\r\n const botonGuardarAnalisis = () => {\r\n armaBodyGuardarEnAPI();\r\n setCargandoSpin(true);\r\n /* llamando al api: decisions/UpdateRateProposal*/\r\n decisionsServicio.cargaUpdateRateProposal(props.tokenStore, bodyAPIGuardar)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaUpdateRateProposalStore(response.data).then( function(updatebyUserFront:any) { \r\n //console.log('***************************bodyAPIGuardar.proposal:', bodyAPIGuardar.proposal)\r\n //console.log('.........................updatebyUserFront',updatebyUserFront)\r\n let pasoDecision = bodyAPIGuardar.proposal.decision;\r\n let pasoCiclo = pasoDecision.cycle;\r\n let paso:any = {};\r\n if (pasoCiclo != null) \r\n paso = { id: pasoCiclo.id, name: pasoCiclo.name};\r\n else\r\n paso = null;\r\n let pasoDetalle = { id: pasoDecision.id , name: pasoDecision.name, cycle: paso };\r\n setSwBotonGuardarFront(false);\r\n //idpxf:any, idprop: any, abierto:any, detalle:any, dondeViene:any\r\n cambiapxfStore(props.idPxF, miPDProposalFront.id, null, pasoDetalle, 'botonGuardarAPI'); \r\n if ( msjAdvertencia == '' ) { setSwBotonEnviarFront(true) } // hasta que grabe envia\r\n \r\n }); \r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaInsertbyUser): \", ex.response.status);\r\n generaObjErrorDecisionsStore(ex.response, true, '', '', 'VerRegistrar-Decisions/UpdateRateProposal','RP');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n }) \r\n\r\n //console.log('------------------------------')\r\n //console.log('miDecisionFront.id: ', miDecisionFront.id, ' swDropzoneAdvertencia: ', swDropzoneAdvertencia)\r\n }\r\n\r\n const armaBodyGuardarEnAPI = () => {\r\n //alert('botonGuardarEnAPI');\r\n //console.clear();\r\n //console.log('miDecisionFront: ',miDecisionFront);\r\n //console.log('miCicloSelFront :',miCicloSelFront);\r\n //console.log('miCicloOtroSelFront :',miCicloOtroSelFront);\r\n //console.log('miCicloOtroSelFrontHH :',miCicloOtroSelFrontHH);\r\n //console.log('miCicloOtroSelFrontHHMM :',miCicloOtroSelFrontHHMM);\r\n //console.log('miCatEvidenciasFront :',miCatEvidenciasFront);\r\n //console.log('miCatPrincipiosFront :',miCatPrincipiosFront);\r\n bodyAPIGuardar.id= props.idPxF;\r\n bodyAPIGuardar.proposal.id= miPDProposalFront.id;\r\n\r\n /* determino el ciclo */\r\n armaVerificaCiclo();\r\n\r\n /* determino el ciclo */\r\n let pasoArchivos:any = [];\r\n //{id: 0, path: \"1/1301\", name: \"Coco.pdf\", classified: \"\", action: 1}\r\n let pasoArchivosElem = {id: null, path: null, name: null, classified: null, action: null};\r\n //ojo ver action (ummm como que me acuerdo de algo ver ssc v1)\r\n\r\n /* solo evidencias activas */\r\n let pasoEvidencias:any = [];\r\n miCatEvidenciasFront?.map((co:any, indexCo:any) => {\r\n if (co.activo) { pasoEvidencias.push(co.id) }\r\n });\r\n\r\n /* solo principios activos */\r\n let pasoPrincipios:any = [];\r\n let pasoPrincipiosElem= {id: null, idhit: 0};\r\n miCatPrincipiosFront?.map((cp:any, indexCp:any) => {\r\n pasoPrincipiosElem= {id: null, idhit: 0}\r\n if (cp.activo) {\r\n pasoPrincipiosElem.id = cp.id;\r\n pasoPrincipiosElem.idhit = cp.hitId;\r\n pasoPrincipios.push(pasoPrincipiosElem);\r\n } \r\n });\r\n\r\n //{ \"id\": 1, \"name\": \"No procede\", \"commentary\": \"\", \"cycle\": null, \"files\": null }\r\n switch (miDecisionFront.id) {\r\n case 1:\r\n miDecisionFront.commentary = comentarioFront;\r\n miDecisionFront.cycle = null;\r\n miDecisionFront.files = null;\r\n break;\r\n case 2: \r\n miDecisionFront.commentary = null;\r\n miDecisionFront.cycle = verificaCiclo;\r\n miDecisionFront.files = null;\r\n bodyAPIGuardar.proposal.quality= pasoPrincipios;\r\n break;\r\n case 3:\r\n miDecisionFront.commentary = null;\r\n miDecisionFront.cycle = verificaCiclo;\r\n miDecisionFront.files = bodyArchAPI;\r\n break;\r\n }\r\n bodyAPIGuardar.proposal.decision= miDecisionFront;\r\n bodyAPIGuardar.proposal.evidence= pasoEvidencias ;\r\n //console.log('-------------------------------listo el bodyArchAPI ',bodyArchAPI);\r\n console.log('-------------------------------listo el bodyAPIGuardar ',bodyAPIGuardar);\r\n }\r\n\r\n const botonCerrar = () => {\r\n //alert('botonCerrar ');\r\n if (swBotonGuardarFront) { //si esta activo el botón guardar hay cambios...\r\n swal2.fire({\r\n text: \"\",\r\n icon: 'question',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '50%',\r\n html: \"
    \" + etiRP.mensajes[0].text + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n recargaRPContenido();\r\n props.botonCierraSlidingPanel('');\r\n }\r\n //setAbreSP(!abreSP);\r\n else\r\n return;\r\n })\r\n }\r\n else { //cerramos SlipingPanel desde ResposnabelDeProcesoContenido\r\n recargaRPContenido();\r\n props.botonCierraSlidingPanel('');\r\n } \r\n \r\n }\r\n\r\n const validaPlantilla = () => {\r\n //alert('validaPlantilla');\r\n msjError=''; \r\n msjAdvertencia='';\r\n if (miDecisionFront.id == null || miDecisionFront.id == undefined)\r\n msjError = msjError + etiRP.mensajes[1].text + '
    ';\r\n switch (miDecisionFront.id) {\r\n case 1: //no procede\r\n if (comentarioFront== null || comentarioFront== '')\r\n msjAdvertencia = msjAdvertencia + etiRP.mensajes[2].text + '
    ';\r\n break;\r\n case 2: // prevista\r\n validaCiclo();\r\n validaCicloOtro();\r\n validaCicloOtroHH();\r\n validaCicloOtroHHMM();\r\n if (undFront) { \r\n validaCicloOtroAA();\r\n validaCicloOtroMM();\r\n validaCicloOtroDD();\r\n };\r\n validaEvidencias();\r\n validaPrincipios();\r\n break;\r\n case 3: //no prevista\r\n //alert('3');\r\n validaCiclo();\r\n validaCicloOtro();\r\n validaCicloOtroHH();\r\n validaCicloOtroHHMM();\r\n if (undFront) { \r\n validaCicloOtroAA();\r\n validaCicloOtroMM();\r\n validaCicloOtroDD();\r\n };\r\n validaEvidencias();\r\n //validaJustificacion(); //aquí se valida los archivos de dropzone\r\n filesUpload(); //LLAMADO A ARCHIVOS DEL DROPZONE\r\n break;\r\n }\r\n setCargandoSpin(false);\r\n //console.log('msjError: ',msjError);\r\n //console.log('msjAdvertencia: ',msjAdvertencia);\r\n }\r\n\r\n const validaCiclo = () => {\r\n //alert('validaCiclo');\r\n //console.log('miCatCiclosFront:::::::::::::: ', miCatCiclosFront)\r\n if (miCatCiclosFront[0].activo){//esta en seleccionar\r\n msjError = msjError + etiRP.mensajes[3].text + '
    ';\r\n //console.log('....',msjError)\r\n } \r\n }\r\n\r\n const validaCicloOtro = () => {\r\n //alert('validaCicloOtro');\r\n if (miCatCiclosFront[miCatCiclosFront.length-1].activo) { //esta en otro\r\n //console.log('miCatCiclosOtrosFron--------------', miCatCiclosOtrosFront)\r\n //2 vertientes\r\n if (!undFront) { //la normal todas las frecuencias excepto Única o No Determinada\r\n if (miCatCiclosOtrosFront[0].activo) //esta en seleccionar\r\n msjError = msjError + etiRP.mensajes[4].text + '
    ';\r\n }\r\n else {\r\n if (frecUNDSelecStore == null ) {\r\n msjError = msjError + etiRP.mensajes[4].text + '
    ';\r\n }\r\n\r\n }\r\n }\r\n }\r\n const validaCicloOtroHH = () => {\r\n //console.log('validaCicloOtroHH--------------',hhFront, '....', miCatCiclosOtrosFrontHH)\r\n if (hhFront) {\r\n if (miCatCiclosFront[miCatCiclosFront.length-1].activo) { //esta en otro\r\n if (miCatCiclosOtrosFrontHH[0].activo) //esta en seleccionar\r\n msjError = msjError + etiRP.mensajes[11].text + '
    ';\r\n }\r\n }\r\n }\r\n const validaCicloOtroHHMM = () => {\r\n if (hhmmFront) {\r\n if (miCatCiclosFront[miCatCiclosFront.length-1].activo) { //esta en otro\r\n if (miCatCiclosOtrosFrontHHMM[0].activo) //esta en seleccionar\r\n msjError = msjError + etiRP.mensajes[11].text + '
    ';\r\n }\r\n }\r\n }\r\n\r\n const validaCicloOtroAA = () => {\r\n //console.log('validaCicloOtroAA--------------',frecUNDSelecStore, '....', miCatCiclosOtrosFrontAA)\r\n if (frecUNDSelecStore=='Anual') {\r\n if (miCatCiclosFront[miCatCiclosFront.length-1].activo) { //esta en otro\r\n if (miCatCiclosOtrosFrontAA[0].activo) //esta en seleccionar\r\n msjError = msjError + etiRP.mensajes[12].text + '
    ';\r\n }\r\n }\r\n }\r\n const validaCicloOtroMM = () => {\r\n //console.log('validaCicloOtroMM--------------',frecUNDSelecStore, '....', miCatCiclosOtrosFrontMM)\r\n if (frecUNDSelecStore=='Mensual') {\r\n if (miCatCiclosFront[miCatCiclosFront.length-1].activo) { //esta en otro\r\n if (miCatCiclosOtrosFrontMM[0].activo) //esta en seleccionar\r\n msjError = msjError + etiRP.mensajes[13].text + '
    ';\r\n }\r\n }\r\n }\r\n const validaCicloOtroDD = () => {\r\n //console.log('validaCicloOtroDD--------------',frecUNDSelecStore, '....', miCatCiclosOtrosFrontDD)\r\n if (frecUNDSelecStore=='Diaria') {\r\n if (miCatCiclosFront[miCatCiclosFront.length-1].activo) { //esta en otro\r\n if (miCatCiclosOtrosFrontDD[0].activo) //esta en seleccionar\r\n msjError = msjError + etiRP.mensajes[14].text + '
    ';\r\n }\r\n }\r\n }\r\n\r\n const validaEvidencias = () => {\r\n let swActivo = false;\r\n miCatEvidenciasFront.map((ce:any, indexCe:any) => {\r\n //console.log(ce);\r\n if (ce.activo)\r\n swActivo = true;\r\n });\r\n if (swActivo==false)\r\n msjAdvertencia = msjAdvertencia + etiRP.mensajes[6].text + '
    ';\r\n }\r\n\r\n const validaPrincipios = () => {\r\n //alert('validaPrincipios')\r\n let swActivo = false;\r\n let msj = etiRP.mensajes[8].text;\r\n //console.log('miCatPrincipiosFront',miCatPrincipiosFront);\r\n miCatPrincipiosFront.map((cp:any, indexCP:any) => {\r\n if (cp.activo) {\r\n //console.log('if cp.id',cp.id);\r\n swActivo = true;\r\n if (cp.hitOpciones[0].activo==false && cp.hitOpciones[1].activo==false && indexCP != 5) {\r\n msj = msj + '    - ' + cp.name + '
    ';\r\n }\r\n } \r\n });\r\n if (swActivo == false)\r\n msjAdvertencia = msjAdvertencia + etiRP.mensajes[7].text + '
    ';\r\n if (msj != etiRP.mensajes[8].text) //se agregaron elementos de validación\r\n msjAdvertencia = msjAdvertencia + msj + '
    '; \r\n }\r\n\r\n const cambiaCheckEvidencias = (e:any) => {\r\n //alert('cambiaRadioDecision:' + e.target.id);\r\n //console.log('e.target.id::', e.target.id);\r\n //console.log('e.target.value::', e.target.value);\r\n //catE_1301_1\r\n let miCheckId = e.target.id;\r\n //console.log('miCheckId.....', miCheckId)\r\n let posP = miCheckId.indexOf('_');\r\n //console.log('**posP.....', posP)\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n //console.log('**paso.....', paso)\r\n //console.log('**paso.length.....', paso.length)\r\n let posC = paso.indexOf('_');\r\n //console.log('**posC.....', posC)\r\n let pxfId = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('*****propuestaId.....', pxfId)\r\n //console.log('*****catalogoId.....', catalogoId)\r\n\r\n miCatEvidenciasFront.map((ce:any, indexCe:any) => {\r\n if (ce.id == catalogoId) \r\n ce.activo = !ce.activo;\r\n }); \r\n setSwCambio(!swCambio);\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n //console.log('cambiaCheckEvidencias:: ', miCatEvidenciasFront)\r\n };\r\n\r\n const cambiaCheckPrincipios = (e:any) => {\r\n //alert('cambiaRadioDecision:' + e.target.id);\r\n console.clear();\r\n //console.log('e.target.id::', e.target.id);\r\n //console.log('e.target.value::', e.target.value);\r\n let valor = e.target.value;\r\n //catP_1301_1\r\n let miCheckId = e.target.id;\r\n //console.log('miCheckId.....', miCheckId)\r\n let posP = miCheckId.indexOf('_');\r\n //console.log('**posP.....', posP)\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n //console.log('**paso.....', paso)\r\n //console.log('**paso.length.....', paso.length)\r\n let posC = paso.indexOf('_');\r\n //console.log('**posC.....', posC)\r\n let pxfId = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('*****propuestaId.....', pxfId)\r\n //console.log('*****catalogoId.....', catalogoId)\r\n miCatPrincipiosFront.map((cp:any, indexCp:any) => {\r\n if (cp.id == catalogoId) {\r\n cp.activo = !cp.activo;\r\n if (cp.activo==false) { // si lo deactivo quito los valores de incremena o decrementa\r\n cp.hitOpciones[0].activo = false;\r\n cp.hitOpciones[1].activo = false;\r\n cp.hitId=0;\r\n }\r\n } \r\n }); \r\n if (catalogoId == 6 && valor) { \r\n miCatPrincipiosFront.map((cp:any, indexCp2:any) => {\r\n if (cp.id != catalogoId) {\r\n cp.activo = false\r\n cp.hitOpciones[0].activo = false;\r\n cp.hitOpciones[1].activo = false;\r\n cp.hitId=0;\r\n }\r\n });\r\n }\r\n else { miCatPrincipiosFront[5].activo = false }\r\n \r\n setSwCambio(!swCambio);\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n //console.log('cambiaCheckPrincipios:: ', miCatPrincipiosFront)\r\n };\r\n\r\n const cambiaCiclo= (e:any) => {\r\n //console.log('e.target::',e.target);\r\n //alert('cambiaRadioDecision:' + e.target.id); //este solo guarda el id del select no del option\r\n //console.log('e.target.value::',e.target.value); //ojo solo de aquí obtengo la selección del option en el value puse el id del catálogo\r\n //opcC_1301_1\r\n let miCheckId = e.target.id;\r\n let posP = miCheckId.indexOf('_');\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n let posC = paso.indexOf('_');\r\n let pxfId = paso.substr( 0, posC );\r\n let catalogoId = e.target.value;\r\n //console.log('*****propuestaId.....', pxfId)\r\n //console.log('*****catalogoId.....', catalogoId)\r\n\r\n setMiCicloOtroSelFront({id: null, name: null, state_cycle: null, pt_md: null});\r\n miCatCiclosFront.map((cc:any, indexCC:any) => {\r\n if (cc.id == catalogoId){ \r\n cc.activo = true;\r\n setMiCicloSelFront(cc); //{id: cc.id, name: cc.name, state_cycle: cc.state_cycl, pt_md: cc.pt_md}\r\n } \r\n else \r\n cc.activo = false\r\n }); \r\n if (catalogoId==99999){ //opción \"Otro\"\r\n miCatCiclosOtrosFront.map((co:any, indexCO:any) => { co.activo = false });\r\n miCatCiclosOtrosFront[0].activo = true;\r\n setSwOtroCicloFront(true);\r\n if (props.miPropuestaDetalle.frecuenciaHH) {\r\n miCatCiclosOtrosFrontHH.map((co:any, indexCO2:any) => { co.activo = false });\r\n miCatCiclosOtrosFrontHH[0].activo = true;\r\n setSwOtroCicloFrontHH(true);\r\n };\r\n if (props.miPropuestaDetalle.frecuenciaHHMM) {\r\n miCatCiclosOtrosFrontHHMM.map((co:any, indexCO3:any) => { co.activo = false });\r\n miCatCiclosOtrosFrontHHMM[0].activo = true;\r\n setSwOtroCicloFrontHHMM(true);\r\n };\r\n\r\n } \r\n else{\r\n setSwOtroCicloFront(false)\r\n setSwOtroCicloFrontHH(false)\r\n setSwOtroCicloFrontHHMM(false)\r\n }\r\n setSwCambio(!swCambio)//lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n //console.log('cambiaCiclo:: ', miCatCiclosFront);\r\n };\r\n\r\n const cambiaCicloOtro= (e:any) => {\r\n console.log('e.target::',e.target);\r\n //alert('cambiaRadioDecision:' + e.target.id); //este solo guarda el id del select no del option\r\n //console.log('e.target.value::',e.target.value); //ojo solo de aquí obtengo la selección del option en el value puse el id del catálogo\r\n //opcC_1301_1\r\n let miCheckId = e.target.id;\r\n let posP = miCheckId.indexOf('_');\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n let posC = paso.indexOf('_');\r\n let pxfId = paso.substr( 0, posC );\r\n let catalogoId = e.target.value;\r\n console.log('*****propuestaId.....', pxfId)\r\n console.log('*****catalogoId.....', catalogoId)\r\n\r\n miCatCiclosOtrosFront.map((cco:any, indexCCO:any) => {\r\n console.log ('cco.id', cco.id, '...indexCCO...',indexCCO , '....',props.miPropuestaDetalle.frequencyformat );\r\n /* if (props.miPropuestaDetalle.frequencyformat != 'AAAA-MM-DD') */\r\n if (cco.id == catalogoId) {\r\n console.log ('if');\r\n cco.activo = true\r\n setMiCicloOtroSelFront({id: null, name: cco.name, state_cycle: null, pt_md: null});\r\n } \r\n else { cco.activo = false };\r\n \r\n }); \r\n //console.log('sali');\r\n setSwCambio(!swCambio) //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n console.log('cambiaCicloOtro:: ', miCatCiclosOtrosFront);\r\n };\r\n\r\n const cambiaCicloOtroHH= (e:any) => {\r\n let pasoHH = {id: null, name: null, activo:true};\r\n setMiDatoHH('');\r\n setMiCicloOtroSelFrontHH(pasoHH);\r\n miCatCiclosOtrosFrontHH.map((ccohh:any, indexCCOhh:any) => {\r\n if (ccohh.id == e.target.value) {\r\n ccohh.activo = true\r\n pasoHH.id = ccohh.id;\r\n pasoHH.name = ccohh.name;\r\n setMiCicloOtroSelFrontHH(pasoHH);\r\n } \r\n else { ccohh.activo = false };\r\n });\r\n setSwCambio(!swCambio) //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n //console.log('cambiaCicloOtro:: ', miCatCiclosOtrosFront);\r\n recargaRPContenidoVerRegistrar();\r\n };\r\n\r\n const cambiaCicloOtroHHMM= (e:any) => {\r\n let pasoHHMM = {id: null, name: null, activo:true};\r\n setMiDatoHHMM('');\r\n setMiCicloOtroSelFrontHHMM(pasoHHMM);\r\n miCatCiclosOtrosFrontHHMM.map((ccomm:any, indexCCOmm:any) => {\r\n if (ccomm.id == e.target.value) {\r\n ccomm.activo = true\r\n pasoHHMM.id = ccomm.id;\r\n pasoHHMM.name = ccomm.name;\r\n setMiCicloOtroSelFrontHH(pasoHHMM);\r\n } \r\n else { ccomm.activo = false };\r\n });\r\n setSwCambio(!swCambio) //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n //console.log('cambiaCicloOtro:: ', miCatCiclosOtrosFront);\r\n recargaRPContenidoVerRegistrar();\r\n };\r\n\r\n const cambiaCicloOtroAA= (e:any) => {\r\n let pasoAA:any = {id: null, name: null, activo:true};\r\n setMiDatoAA('');\r\n setMiCicloOtroSelFrontAA(pasoAA);\r\n miCatCiclosOtrosFrontAA.map((ccoaa:any, indexCCOAA:any) => {\r\n if (ccoaa.id == e.target.value) {\r\n ccoaa.activo = true\r\n pasoAA.id = ccoaa.id;\r\n pasoAA.name = ccoaa.name;\r\n setMiCicloOtroSelFrontAA(pasoAA);\r\n } \r\n else { ccoaa.activo = false };\r\n });\r\n setSwCambio(!swCambio) //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n recargaRPContenidoVerRegistrar();\r\n //console.log('miCicloOtroSelFrontAA:: ', miCicloOtroSelFrontAA);\r\n\r\n };\r\n const cambiaCicloOtroMM= (e:any) => {\r\n let pasoMM:any = {id: null, name: null, activo:true};\r\n setMiDatoMM('');\r\n setMiCicloOtroSelFrontMM(pasoMM);\r\n miCatCiclosOtrosFrontMM.map((ccomm:any, indexCCOMM:any) => {\r\n if (ccomm.id == e.target.value) {\r\n ccomm.activo = true\r\n pasoMM.id = ccomm.id;\r\n pasoMM.name = ccomm.name;\r\n setMiCicloOtroSelFrontMM(pasoMM);\r\n } \r\n else { ccomm.activo = false };\r\n });\r\n setSwCambio(!swCambio) //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n \r\n recargaRPContenidoVerRegistrar();\r\n console.log('miCatCiclosOtrosFrontMM:: ', miCatCiclosOtrosFrontMM);\r\n };\r\n const cambiaCicloOtroDD= (e:any) => {\r\n let pasoDD:any = {id: null, name: null, activo:true};\r\n setMiDatoDD('');\r\n setMiCicloOtroSelFrontDD(pasoDD);\r\n miCatCiclosOtrosFrontDD.map((ccodd:any, indexCCODD:any) => {\r\n if (ccodd.id == e.target.value) {\r\n console.log ('if');\r\n ccodd.activo = true\r\n pasoDD.id = ccodd.id;\r\n pasoDD.name = ccodd.name;\r\n setMiCicloOtroSelFrontMM(pasoDD);\r\n } \r\n else { ccodd.activo = false };\r\n });\r\n setSwCambio(!swCambio) //lo uso de puente para que recargue el front y se lleve el dato\r\n setSwBotonGuardarFront(true); //habilitar boton guardar en front\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n //console.log('cambiaCicloOtro:: ', miCatCiclosOtrosFront);\r\n recargaRPContenidoVerRegistrar();\r\n };\r\n \r\n const cambiaRadioDecision = (e:any) => {\r\n //alert('cambiaRadioDecision:' + e.target.id);\r\n //console.log('e.target.id::', e.target.id);\r\n //console.log('e.target.value::', e.target.value);\r\n //catD_1301_1\r\n \r\n setSwOtroCicloFront(false);\r\n setSwOtroCicloFrontHH(false);\r\n setSwOtroCicloFrontHHMM(false);\r\n reiniciafrecUNDStore();\r\n let miCheckId = e.target.id;\r\n //console.log('miCheckId.....', miCheckId)\r\n let posP = miCheckId.indexOf('_');\r\n //console.log('**posP.....', posP)\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n //console.log('**paso.....', paso)\r\n //console.log('**paso.length.....', paso.length)\r\n let posC = paso.indexOf('_');\r\n //console.log('**posC.....', posC)\r\n let pxfId = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('*****propuestaId.....', pxfId)\r\n //console.log('*****catalogoId.....', catalogoId)\r\n //inicializamos ciclos por el cambio de decisión\r\n miCatCiclosFront.map((cc:any, indexCO:any) => { cc.activo = false }); \r\n miCatCiclosOtrosFront.map((co:any, indexCO2:any) => { co.activo = false }); \r\n miCatCiclosOtrosFrontHH.map((co:any, indexCO3:any) => { co.activo = false }); \r\n miCatCiclosOtrosFrontHHMM.map((co:any, indexCO4:any) => { co.activo = false }); \r\n miCatCiclosFront[0].activo = true;\r\n miCatCiclosOtrosFront[0].activo = true;\r\n if (props.propuestaDetallesFront.frecuenciaHH) { miCatCiclosOtrosFrontHH[0].activo = true };\r\n if (props.propuestaDetallesFront.frecuenciaHHMM) { miCatCiclosOtrosFrontHHMM[0].activo = true };\r\n setMiCicloSelFront({id: null, name: null, state_cycle: null, pt_md: null});\r\n setMiCicloOtroSelFront({id: null, name: null, state_cycle: null, pt_md: null});\r\n if (props.propuestaDetallesFront.frecuenciaHH) { \r\n miCatCiclosOtrosFrontHH[0].activo = true;\r\n setMiCicloOtroSelFrontHH({id: null, name: null, state_cycle: null, pt_md: null});\r\n };\r\n if (props.propuestaDetallesFront.frecuenciaHHMM) { \r\n miCatCiclosOtrosFrontHHMM[0].activo = true;\r\n setMiCicloOtroSelFrontHHMM({id: null, name: null, state_cycle: null, pt_md: null});\r\n };\r\n setSwCambio(!swCambio);\r\n\r\n miCatDecisionesFront.map((cd:any, indexCd:any) => {\r\n if (cd.id == catalogoId) {\r\n cd.activo = true\r\n setMiDecisionFront(cd);\r\n //console.log('miDecisionFront....',miDecisionFront)\r\n } \r\n else \r\n cd.activo = false\r\n }); \r\n setSwCambio(!swCambio);\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n //console.log('cambiaRadioDecision:: ', miCatDecisionesFront)\r\n };\r\n\r\n const cambiaRadioPrincipiosHit = (e:any) => {\r\n //alert('cambiaRadioDecision:' + e.target.id);\r\n //console.log('e.target.id::', e.target.id);\r\n //console.log('e.target.value::', e.target.value);\r\n //catD_1301_1_-1\r\n let miCheckId = e.target.id;\r\n //console.log('miCheckId.....', miCheckId)\r\n let posP = miCheckId.indexOf('_');\r\n //console.log('**posP.....', posP)\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n //console.log('**paso.....', paso)\r\n //console.log('**paso.length.....', paso.length)\r\n let posC = paso.indexOf('_');\r\n //console.log('**posC.....', posC)\r\n let paso2 = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('**paso2.....', paso2);\r\n //console.log('**paso2.length.....', paso2.length)\r\n let posD = paso2.indexOf('_');\r\n //console.log('**posD.....', posD)\r\n let pxfId = paso.substr( 0, posC );\r\n let catalogoId = paso2.substr(0, posD );\r\n let hitId = paso2.substr(posD+1, paso2.length-1 );\r\n //console.log('*****propuestaId.....', pxfId)\r\n //console.log('*****catalogoId.....', catalogoId)\r\n //console.log('*****hitId.....', hitId)\r\n miCatPrincipiosFront.map((cd:any, indexCd2:any) => {\r\n if (cd.id == catalogoId) {\r\n if (hitId == 1){\r\n cd.hitOpciones[0].activo = true;\r\n cd.hitOpciones[1].activo = false;\r\n cd.hitId = 1;\r\n }\r\n else {\r\n cd.hitOpciones[0].activo = false;\r\n cd.hitOpciones[1].activo = true;\r\n cd.hitId = -1;\r\n }\r\n }\r\n }); \r\n setSwCambio(!swCambio);\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n //console.log('miCatPrincipiosFront:: ', miCatPrincipiosFront)\r\n };\r\n \r\n const ligaPropuestaDeCambioCompleta = () => {\r\n setAbreDivPropuestaCompleta(!abreDivPropuestaCompleta);\r\n }\r\n\r\n const armaBodyArchivosAPI = ( archAPI: any, archDrop: any, archNvo: any) => {\r\n //compara los dos arreglos para armar el body que ocupa: Decisions/UpdateRateProposal/es\r\n //console.log('archAPI: ', archAPI);\r\n //console.log('archDrop: ', archDrop);\r\n //console.log('archNvo: ', archNvo);\r\n let swBaja = true;\r\n //para las bajas\r\n if (archAPI.length>0){\r\n archAPI.map((a:any, indexA:any) => {\r\n swBaja = true;\r\n archDrop.map((d:any, indexD:any) => { if (a.id == d.id ) { swBaja = false } }); \r\n if (swBaja) { a.action = 2 };\r\n });\r\n }\r\n //para las altas\r\n const path = props.idPxF + \"/\" + miPDProposalFront.id; \r\n if (archNvo.length != 0) { \r\n archNvo.map((n:any, indexN:any) => { \r\n archAPI.push ({ \"id\": indexN, \"path\": path, \"name\": n.name, \"classified\":\"\", \"action\":1})\r\n }) \r\n };\r\n\r\n //console.log(':::::archAPI: ', archAPI);\r\n bodyArchAPI = archAPI;\r\n }\r\n \r\n const cambiaRadioFrecuenciaUND = (e:any) => {\r\n //alert('cambiaRadioFrecuenciaUND:' + e.target.id);\r\n let frec = e.target.id;\r\n cambiafrecUNDStore(frec);\r\n setSwCambio(!swCambio);\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n recargaRPContenidoVerRegistrar();\r\n \r\n };\r\n\r\n //-----------------DROPZONE---------------------INICIO EGGP\r\n //*constantes y variables\r\n let filesIn = [] as any; //este elemento se uso para cargar archivos inválidos (puede omitirse)\r\n let myFileCopia = [] as any; //copia de myFile (que es donde se guarda la lista de archivos cargados por el usuario) usada para hacer recorridos y comparaciones sin afectar el arreglo myFile\r\n\r\n //*useState\r\n const [myFiles, setMyFiles] = useState(misArchivosDropzone); //guarda el listado de elementos (archivos) cargados por el usuario\r\n const [filesInvalid, setFilesInvalid] = useState([] as any); //este elemento se uso para cargar archivos inválidos\r\n \r\n //*funciones:\r\n function MyDropzone() {\r\n //--useCallback //ya traemos los archivos (acceptedFiles acumula lo del cuadro de dialogo)\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n setSwBotonGuardarFront(true);\r\n \r\n setSwDropzoneAdvertencia(false);\r\n\r\n acceptedFilesTemp.map((aft:any, indexAft:any) => {\r\n aft.action=1;\r\n aft.id = indexAft;\r\n aft.action = 1;\r\n //aft.path = pathNvos;\r\n aft.classified = '';\r\n });\r\n\r\n if (myFiles.length != 0) {\r\n setSwBotonEnviarFront(false);\r\n //console.log(':::: acceptedFilesTemp ', acceptedFilesTemp ) ;\r\n //*el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado \r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if (\r\n myFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n }\r\n /* acumula de acceptedFiles a myFiles */\r\n setMyFiles([...myFiles, ...acceptedFiles]);\r\n },\r\n [myFiles]\r\n );\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n //alert('removeFile');\r\n setSwBotonGuardarFront(true);\r\n let x = etiGlobal.dropZone[11].desc;\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + etiGlobal.dropZone[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...myFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setMyFiles(newFiles); //uso común del useState, actualiza myFiles\r\n //console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n //console.log( \"removeFile: que haré si se eliminan todos los elementos\" );\r\n setSwDropzoneAdvertencia(true);\r\n setSwBotonEnviarFront(false);\r\n }\r\n }\r\n });\r\n };\r\n //--genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //--cada vez que se renderiza myfiles genera esta función\r\n const files = myFiles.map((file: any, indexFiles:any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n //--vista: -pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n <> \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    {etiGlobal.dropZone[7].desc}
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n );\r\n }\r\n const filesUpload = () => {\r\n filesIn = [] as any;\r\n myFileCopia = [] as any;\r\n setFilesInvalid([]);\r\n myFileCopia = [...myFiles];\r\n //console.log(\"myFileCopia..---------------\",myFileCopia, filesIn.length);\r\n if (myFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + etiGlobal.dropZone[20].desc + '
    ';\r\n setSwDropzoneAdvertencia(false);\r\n //console.log('..............SwDropzoneAdvertencia', swDropzoneAdvertencia)\r\n }\r\n else { \r\n if (filesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html:\r\n \"
    \" +\r\n etiGlobal.dropZone[8].desc +\r\n \" \" +\r\n filesIn.length +\r\n \"\" +\r\n etiGlobal.dropZone[17].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[18].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n //setOpenDivLoading(true);\r\n for (let f = filesIn.length - 1; f >= 0; f--) {\r\n myFileCopia.splice(filesIn[f].idx, 1);\r\n }\r\n setMyFiles(myFileCopia);\r\n setFilesInvalid(filesIn);\r\n filesUploadContinue();\r\n setSwRecarga(!swRecarga);\r\n } else {\r\n for (let f = filesIn.length - 1; f >= 0; f--) {\r\n myFileCopia.splice(filesIn[f].idx, 1);\r\n }\r\n setMyFiles(myFileCopia);\r\n //console.log(\"files....\", setMyFiles(myFileCopia))\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setMyFiles(myFileCopia);\r\n setFilesInvalid(filesIn);\r\n filesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n }\r\n }\r\n };\r\n const filesUploadContinue = () => { \r\n if (myFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + etiGlobal.dropZone[20].desc + '
    ';\r\n }\r\n else{ \r\n filesIn = [] as any; \r\n filesIn=myFileCopia; //aquí tenemos que hay en dropzone (ya quitando los que elimino por el bote y con los nuevos)\r\n console.log(\"eggp filesIn-----------\",filesIn);\r\n console.log(\":::misArchivosDropzone-----------\",misArchivosDropzone); //aquí los que traemos del api\r\n myFileCopiaFront = [...myFiles];\r\n filesNuevos = _.filter(filesIn, function(f:any) { return f.action == 1 });\r\n console.log(\":::filesNuevos-------------------\",filesNuevos);\r\n armaBodyArchivosAPI(misArchivosDropzone, filesIn, filesNuevos);//usado para armar la parte del file que ocupo el body del api\r\n console.log(\":::bodyArchAPI-------------------\",bodyArchAPI); //aquí la lista completa con sus respectivos códigos en action \r\n setSwRecarga(!swRecarga)\r\n } \r\n } \r\n //-----------------DROPZONE---------------------FIN\r\n\r\n //**vista \r\n return (\r\n <>\r\n {/* subencabezado: acronimo & frecuencia & nombre del proceso */}\r\n
    \r\n

    {miPropuestaDetalleFront.acronym} / {miPropuestaDetalleFront.frequencyname}

    \r\n
    {miPropuestaDetalleFront.processname}  \r\n \r\n {miPropuestaDetalleFront.estatusProceso} \r\n
    \r\n
    \r\n
    \r\n\r\n {/* contenido */}\r\n
    \r\n {/*

    miDecisionFront.id.........{miDecisionFront.id}................

    \r\n

    miDecisionFront.cycle.id...{miDecisionFront.cycle.id}..........

    \r\n

    miDecisionFront.cycle.name.{miDecisionFront.cycle.name}........

    \r\n

    miCicloSelFront.id.........{miCicloSelFront.id}................

    \r\n

    miCicloSelFront.name.......{miCicloSelFront.name}..............

    \r\n

    miCicloOtroSelFront.id.....{miCicloOtroSelFront.id}............

    \r\n

    miCicloOtroSelFront.name...{miCicloOtroSelFront.name}..........

    */}\r\n\r\n {/* Propuesta de cambio completa */}\r\n
    \r\n ligaPropuestaDeCambioCompleta() } title='Abre ventana con propuesta de cambio' className=\"divLigaPropCambio\">{etiRP.contenido[10].text}\r\n \r\n
    \r\n {abreDivPropuestaCompleta &&\r\n (<>\r\n
    \r\n \r\n

    {etiRP.etiquetas[4].text}  \r\n {props.propuestaDetallesFront.folio}    \r\n {etiRP.etiquetas[5].text}  \r\n {props.propuestaDetallesFront.fecha} \r\n

    \r\n

    {etiRP.etiquetas[6].text}
    \r\n {props.propuestaDetallesFront.user.name}
    \r\n {props.propuestaDetallesFront.user.email}    \r\n

    \r\n

    {etiRP.etiquetas[7].text}
    \r\n {props.propuestaDetallesFront.description} \r\n

    \r\n

    \r\n {etiRP.etiquetas[8].text}
    \r\n { props.propuestaDetallesFront.origin?.map((o:any, indexO:any) => (\r\n <>\r\n  \r\n {o.name}
    \r\n {o.specification}
    \r\n \r\n ))} \r\n \r\n

    \r\n

    {etiRP.etiquetas[9].text}
    \r\n \r\n { props.propuestaDetallesFront.processxfrequency?.map((pf:any, indexO:any) => (\r\n <>\r\n  \r\n {pf.acronym} / {pf.processname}\r\n {pf.state_process.pt_state_description}
    \r\n \r\n ))} \r\n

    \r\n
    \r\n )\r\n }\r\n
    \r\n
    \r\n\r\n {/* Tipo de modificación */}\r\n
    \r\n

    {etiRP.contenido[11].text}

    \r\n
    \r\n {/*catálogo de decisiones*/}\r\n { miCatDecisionesFront?.map((cd:any, indexO:any) => (\r\n (x0 = `catD_${miPDProposalFront.id}_${cd.id}`),\r\n (x1 = `selPC_${miPDProposalFront.id}_${cd.id}`),\r\n (x2 = `selPCO_${miPDProposalFront.id}_${cd.id}`),\r\n (x3 = `selNPC_${miPDProposalFront.id}_${cd.id}`),\r\n (x4 = `selNPCO_${miPDProposalFront.id}_${cd.id}`),\r\n (x5 = `selPCOHH_${miPDProposalFront.id}_${cd.id}`),\r\n (x6 = `selPCOHHMM_${miPDProposalFront.id}_${cd.id}`),\r\n (x7 = `selPCOAA_${miPDProposalFront.id}_${cd.id}`),\r\n (x8 = `selPCOMM_${miPDProposalFront.id}_${cd.id}`),\r\n (x9 = `selPCODD_${miPDProposalFront.id}_${cd.id}`),\r\n (<>\r\n { cd.visible &&\r\n (<>\r\n {/* radios (no procede, prevista y no prevista) los 2 últimos con artículo en tooltip*/}\r\n
    \r\n \r\n
    \r\n
    \r\n {cd.name} \r\n {/* artículos a prevista y no prevista */}\r\n { cd.id == 2 &&\r\n (<>\r\n \r\n \r\n \r\n {articulos.articles[9].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}

    \r\n
    \r\n
    \r\n )\r\n }\r\n { cd.id == 3 &&\r\n (<>\r\n \r\n \r\n \r\n {articulos.articles[9].ch}

    \r\n Articulo: 19
    {articulos.articles[19].description}

    \r\n
    \r\n
    \r\n )\r\n }\r\n
    \r\n
    \r\n\r\n {/* div's No precede, Prevista, No prevista */}\r\n\r\n {/* 1 - no procede - comentario*/}\r\n { (cd.id == 1 && cd.activo) &&\r\n (<>\r\n
    \r\n

    {etiRP.contenido[14].text}

    \r\n \r\n

    \r\n
    \r\n )\r\n }\r\n \r\n {/* 2 - prevista - ciclo && anio (en caso de otro) */} \r\n { (cd.id == 2 && cd.activo) &&\r\n (<>\r\n
    \r\n {/* ciclo */}\r\n
    \r\n
    \r\n
    \r\n \r\n {miPDProposalFront.sent\r\n ? ( ) \r\n : (<>\r\n
    \r\n \r\n
    \r\n

    \r\n )\r\n }\r\n
    \r\n
    \r\n
    \r\n\r\n {/* periodo cuando se selecciono en Ciclo ->\"Otro\" */}\r\n { swOtroCicloFront &&\r\n (<>\r\n
    \r\n
    \r\n
    \r\n { props.miPropuestaDetalle.frecuenciaUND==false\r\n ? (<>\r\n \r\n
    \r\n  \r\n
    \r\n )\r\n : (<> \r\n {/* frecuencia Única o No Determinada */}\r\n
    \r\n { frecUNDStore?.map((f:any, indexFUND:any) => (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n {f.name}   \r\n
    \r\n \r\n ))}\r\n {frecUNDSelecStore=='Anual' &&\r\n (<>\r\n
    \r\n  \r\n
    \r\n ) \r\n }\r\n {frecUNDSelecStore=='Mensual' &&\r\n (<>\r\n
    \r\n  \r\n
    \r\n ) \r\n }\r\n {frecUNDSelecStore=='Diaria' &&\r\n (<>\r\n
    \r\n  \r\n
    \r\n ) \r\n }\r\n )\r\n }\r\n
    \r\n {/* frecuencia AAAA-MM-DD hh */}\r\n { props.miPropuestaDetalle.frecuenciaHH &&\r\n (<>\r\n
    \r\n \r\n
    \r\n  \r\n
    \r\n
    \r\n )\r\n }\r\n {/* frecuencia AAAA-MM-DD hh:mm */}\r\n { props.miPropuestaDetalle.frecuenciaHHMM &&\r\n (<>\r\n
    \r\n \r\n
    \r\n  \r\n
    \r\n
    \r\n )\r\n }\r\n
    \r\n
    \r\n )\r\n }\r\n
    \r\n )\r\n }\r\n\r\n {/* no prevista */}\r\n { cd.id == 3 && cd.activo &&\r\n (<>\r\n
    \r\n {/* ciclo */}\r\n
    \r\n
    \r\n
    \r\n \r\n { miPDProposalFront.sent\r\n ? (<>\r\n \r\n \r\n {/* justificación */}\r\n

    {etiRP.contenido[16].text}

    \r\n\r\n {/* lista de archivos */}\r\n \r\n ) \r\n : (<>\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n
    \r\n
    \r\n
    \r\n\r\n {/* periodo cuando se selecciono en Ciclo ->\"Otro\" */}\r\n { swOtroCicloFront && \r\n (<>\r\n
    \r\n
    \r\n
    \r\n { props.miPropuestaDetalle.frecuenciaUND==false\r\n ? (<>\r\n \r\n
    \r\n \r\n
    \r\n )\r\n : (<> \r\n {/* frecuencia Única o No Determinada */}\r\n
    \r\n { frecUNDStore?.map((f:any, indexFUND:any) => (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n {f.name} \r\n
    \r\n \r\n ))}\r\n {frecUNDSelecStore=='Anual' &&\r\n (<>\r\n
    \r\n  \r\n
    \r\n ) \r\n }\r\n {frecUNDSelecStore=='Mensual' &&\r\n (<>\r\n
    \r\n  \r\n
    \r\n ) \r\n }\r\n {frecUNDSelecStore=='Diaria' &&\r\n (<>\r\n
    \r\n  \r\n
    \r\n ) \r\n }\r\n )\r\n } \r\n\r\n
    \r\n { props.miPropuestaDetalle.frecuenciaHH &&\r\n (<>\r\n
    \r\n \r\n
    \r\n  \r\n
    \r\n
    \r\n )\r\n }\r\n { props.miPropuestaDetalle.frecuenciaHHMM &&\r\n (<>\r\n
    \r\n \r\n
    \r\n  \r\n
    \r\n
    \r\n )\r\n }\r\n
    \r\n
    \r\n )\r\n }\r\n\r\n {/*justicación - dropzone */}\r\n {/* */}\r\n {miPDProposalFront.sent == false &&\r\n ( <>\r\n

    {etiRP.contenido[16].text}

    \r\n \r\n )\r\n }\r\n
    \r\n
    \r\n )\r\n }\r\n \r\n )\r\n }\r\n ) \r\n ))} \r\n
    \r\n {/* */}\r\n
    \r\n\r\n {/* cat Evidencias */}\r\n
    \r\n { (miDecisionFront.id == 2 || miDecisionFront.id == 3) //entra para prevista y no prevista\r\n && (<>\r\n

    {etiRP.contenido[12].text}  \r\n \r\n \r\n \r\n {articulos.articles[9].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}

    \r\n
    \r\n
    \r\n

    \r\n
    \r\n { miCatEvidenciasFront?.map((ce:any, indexO:any) => (\r\n (x5 = `catE_${miPDProposalFront.id}_${ce.id}`),\r\n (<>\r\n
    \r\n \r\n
    \r\n
    {ce.name}
    \r\n
    \r\n ) \r\n ))} \r\n
    \r\n )\r\n }\r\n
    \r\n\r\n {/* cat Principios */}\r\n
    \r\n { miDecisionFront.id == 2 //entra solo para prevista\r\n && (<>\r\n

    {etiRP.contenido[13].text}  \r\n \r\n \r\n \r\n {articulos.articles[10].ch}

    \r\n Articulo: 10
    {articulos.articles[10].description}

    \r\n
    \r\n
    \r\n

    \r\n
    \r\n { miCatPrincipiosFront?.map((cp:any, indexP:any) => (\r\n (x6 = `catP_${miPDProposalFront.id}_${cp.id}`),\r\n (<>\r\n
    \r\n \r\n
    \r\n
    {cp.name}
    \r\n \r\n {/* incrementa - decrementa */}\r\n
    \r\n { miPDProposalFront.sent\r\n ? (<>\r\n {cp.hitId == 0\r\n &&(<> {cp.hitName} (incremento o decremento))\r\n }\r\n {cp.hitId == 1\r\n &&(<> {cp.hitName})\r\n }\r\n {cp.hitId == -1\r\n &&(<> {cp.hitName})\r\n }\r\n )\r\n : (<>\r\n { (cp.activo && cp.id != 6)\r\n && (<>\r\n { cp.hitOpciones?.map((ho:any, indexHO:any) => (\r\n (x7 = `catPHit_${miPDProposalFront.id}_${cp.id}_${ho.id}`),\r\n (<>\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {indexHO == 0\r\n ?(<> {ho.name})\r\n :(<> {ho.name})\r\n }\r\n \r\n
       \r\n )\r\n ))}\r\n ) \r\n }\r\n )\r\n }\r\n
    \r\n ) \r\n ))} \r\n
    \r\n )\r\n }\r\n
    \r\n
    \r\n
    \r\n\r\n {/* Botones */}\r\n
    \r\n
    \r\n
    \r\n { miPDProposalFront.sent == false &&\r\n (<>\r\n { swBotonGuardarFront \r\n ? <>   \r\n : <>   \r\n }\r\n { swBotonEnviarFront \r\n ? <>   \r\n : <>   \r\n }\r\n )\r\n } \r\n  \r\n
    \r\n
    \r\n \r\n \r\n );\r\n}\r\n","/* RP - Responsable de proceso - toma decisión de la(s) propuesta(s) asignadas a su rol */\r\n/* Contenido de pxf (detalles) */\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n import { SlidingPanel } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n import VerRegistra from \"./RP.Contenido.VerRegistrar\";\r\n\r\n//*api's (servicios y store)\r\n import proposalsServicio from \"../../../../api/recursos/proposals/proposals.servicio\"; \r\n import proposalsStore from \"../../../../api/recursos/proposals/proposals.store\"; \r\n\r\n import decisionsServicio from \"../../../../api/recursos/decisions/decisions.servicio\"; \r\n import decisionsStore from \"../../../../api/recursos/decisions/decisions.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n import articulos from \"../../../../datos/json/guidelines.json\";\r\n \r\n//*funciones\r\n\r\n//*interfaces\r\n interface propsRPContenido {\r\n tokenStore: any;\r\n pxfId: any,\r\n misPropuestas: any;\r\n misCiclos: any;\r\n catDecisionesStore: any;\r\n catPrincipiosStore: any;\r\n catPTEvidenciasStore: any;\r\n recargaCiclosStore:any;\r\n recargaRP: any;\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not:any;\r\n }\r\n\r\n//*componente\r\n export default function RPContenido(props: propsRPContenido) { \r\n //*api store\r\n const { guardaGetDetailbyUserStore, propuestaDetallesStore,\r\n generaObjErrorProposalsStore, objErrorProposalsStore} = \r\n proposalsStore((state:any) =>( { \r\n guardaGetDetailbyUserStore: state.guardaGetDetailbyUserStore,\r\n propuestaDetallesStore: state.propuestaDetallesStore,\r\n generaObjErrorProposalsStore: state.generaObjErrorProposalsStore,\r\n objErrorProposalsStore: state.objErrorProposalsStore\r\n }));\r\n\r\n const { guardaGetRateProposalStore, pxfPropuestasStore,\r\n generaObjErrorDecisionsStore } = \r\n decisionsStore((state:any) =>( { \r\n guardaGetRateProposalStore: state.guardaGetRateProposalStore,\r\n pxfPropuestasStore: state.pxfPropuestasStore, \r\n generaObjErrorDecisionsStore: state.generaObjErrorDecisionsStore\r\n }));\r\n\r\n\r\n //*store's\r\n \r\n //*datos\r\n\r\n //*constantes y variables\r\n let etiRP = etiquetasSSC.RP;\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaRPContenido, setSwRecargaRPContenido] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n\r\n const [swPxF, setSwPxF] = useState(false);\r\n const [abreSP, setAbreSP] = useState(false);\r\n \r\n const [propuestaDetallesFront, setPropuestaDetallesFront] = useState({}); // guarda la lectura de la propuesta desde proposal\r\n const [pxfPropuestaDetalleFront, setPxfPropuestaDetalleFront] = useState({}); //guarda la lectura de la propuesta desde desicions\r\n\r\n const dataMisPropuesta = props.misPropuestas; \r\n const [data, updateData] = useState(props.misPropuestas);\r\n const [status, setStatus] = useState(false);\r\n \r\n //*useEffect\r\n useEffect(()=> { //usado para renderizar\r\n console.log('renderizando RP.Contenido........................');\r\n updateData(props.misPropuestas);\r\n setSwRecargaRPContenido(!swRecargaRPContenido);\r\n },[swRecarga]);\r\n\r\n useEffect(()=> { //usado para renderizar\r\n console.log('renderizando RP.Contenido........................');\r\n setSwRecargaRPContenido(!swRecargaRPContenido);\r\n },[swRecarga]);\r\n\r\n useEffect(() => { \r\n console.log('entro a useEffect cambio data')\r\n updateData(dataMisPropuesta);\r\n setSwRecarga(!swRecarga);\r\n }, [dataMisPropuesta]);\r\n\r\n //*funciones\r\n\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n const recargaRP = () => { props.recargaRP() }\r\n\r\n const recargaRPContenido = () => {\r\n setSwRecarga(!swRecarga);\r\n }\r\n\r\n const recargaCiclos = () => {\r\n //alert('recargaCiclos desde RP contenido');\r\n props.recargaCiclosStore(); //funcion de RP para renderizar\r\n }\r\n\r\n const botonVerRegistrar = (idpxf:any, idProp:any, tipo:any) => {\r\n //alert('botonVerRegistrar...' + idpxf + '..' + idProp + '..' + tipo);\r\n let pasoCatD= JSON.parse(JSON.stringify(props.catDecisionesStore));\r\n let pasoCatP= (tipo=='ver') ? null : JSON.parse(JSON.stringify(props.catPrincipiosStore));\r\n let pasoCatC= (tipo=='ver') ? null : JSON.parse(JSON.stringify(props.misCiclos));\r\n let pasoCatE= (tipo=='ver') ? null : JSON.parse(JSON.stringify(props.catPTEvidenciasStore));\r\n let body:any = {\"id\": 0, \"proposal\": { \"id\": 0 }};\r\n body.id = idpxf;\r\n body.proposal.id = idProp;\r\n //console.clear();\r\n //console.log('body...', body)\r\n setCargandoSpin(true);\r\n decisionsServicio.cargaGetRateProposal(props.tokenStore, body)\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetRateProposalStore(response.data, idpxf, idProp, tipo, pasoCatD, pasoCatP, pasoCatC, pasoCatE).then( function(pxfPropuestaDetalleF:any) { \r\n setPxfPropuestaDetalleFront(pxfPropuestaDetalleF);\r\n leePropuestaPorId(idProp, 'boton-registra'); //con esta función cargamos el contenido de propuestaDetallesStore para presentar en la ventana splipanel\r\n setSwPxF(!swPxF); //solo para renderizar\r\n setAbreSP(true); // aquí activo ventana SlidingPanel (Ver/Registrar)\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetDetailbyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorDecisionsStore(ex.response, true, '', '', 'RPContenido-Decisions/GetRateProposal','RP')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n }\r\n \r\n const leePropuestaPorId = (id:any, opcion:any) => { //opciones liga-verFichaCompleta , boton-registra lee el contenido de la propuesta \r\n setCargandoSpin(true);\r\n proposalsServicio.cargaGetDetailbyUser(props.tokenStore, id)\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetDetailbyUserStore(response.data, id, null, null, 'RPContenido').then( function(propuestaDetallesF:any) { \r\n //console.log('*propuestaDetallesFront: ' , propuestaDetallesFront)\r\n setPropuestaDetallesFront(propuestaDetallesF);\r\n let origenes=''\r\n propuestaDetallesF.origin?.map((o:any, index:any) => (\r\n origenes = origenes \r\n + \"

    \" \r\n + \" \"\r\n + \" \" \r\n + o.name + \"
    \"\r\n + \" \" + o.specification + \"\"\r\n + \"
    \" \r\n + \"

    \" \r\n ))\r\n let procFrec = propuestaDetallesF.processxfrequency[0];\r\n let procStatus = procFrec.state_process;\r\n let procesos=''\r\n propuestaDetallesF.processxfrequency?.map((o:any, index:any) => (\r\n procesos = procesos \r\n + \"

    \" \r\n + \" \"\r\n + \" \" \r\n + o.acronym + \" / \" + o.processname + \" \"\r\n + \"\"\r\n + o.state_process.pt_state_description\r\n + \"\"\r\n + \"
    \" \r\n + \"
    \" \r\n + \"

    \" \r\n ))\r\n //console.log('------------procFrec2', procStatus.pt_state_description);\r\n let clasexEstatusIcono='';\r\n switch ( procStatus.pt_state ) {\r\n case 1: clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default:clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n if (opcion=='liga-verFichaCompleta') { // selecciono liga ver propuesta en tabla, abrimos ventana con la información de la propuesta\r\n swal2.fire({\r\n //icon: 'warning',\r\n //showCancelButton: true,\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n color: '#fff',\r\n background: '#003057',\r\n width: \"70%\",\r\n title: 'Propuesta de cambio',\r\n html: \r\n \"
    \" \r\n + \"

    \" + etiRP.etiquetas[4].text + \"\" + propuestaDetallesF.folio + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[5].text + \"\" + propuestaDetallesF.fecha + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[6].text + \"
    \"\r\n + \"  \" \r\n + propuestaDetallesF.user.name + \"
    \" \r\n + \"  \" \r\n + propuestaDetallesF.user.email + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[7].text + \"
    \" \r\n + \"\" + propuestaDetallesF.description + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[8].text + \"\" \r\n + \"\" + origenes + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[9].text + \"\" \r\n + \"\" + procesos + \"

    \" \r\n + \"
    \",\r\n })\r\n }\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n //ex.response.data.result.errores.map((: any) => (\r\n //toast.error(err.errorMessage)))\r\n console.log (\"--catch - ex (cargaGetDetailbyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'RPContenido-Decisions/GetDetailbyUser','RP')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n setCargandoSpin(false);\r\n }\r\n\r\n const botonCierraSlidingPanel = (opcBtnAcepReg:any) => { setAbreSP(false) }\r\n\r\n // Ordenamiento de la tabla\r\n const onSort = (event: any, sortKey: any) => {\r\n const tempData = [...props.misPropuestas];\r\n setStatus(!status);\r\n if (status) {\r\n updateData(\r\n tempData.sort((a: any, b: any) => a[sortKey].localeCompare(b[sortKey]))\r\n );\r\n } else {\r\n updateData(\r\n tempData.sort((a: any, b: any) => b[sortKey].localeCompare(a[sortKey]))\r\n );\r\n }\r\n };\r\n\r\n //ordena por folio de mayor a menor (ascendente)\r\n props.misPropuestas.sort((a:any,b:any) => b.folio.localeCompare(a.folio));\r\n\r\n\r\n //*vista\r\n return (\r\n <>\r\n \r\n {/* contenido */}\r\n
    \r\n
    {/* margin-left-2r margin-right-2r */}\r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n {/* thWidth30 */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* cambio props.misPropuestas por data para el manejo de la paginación*/}\r\n {/* props.misPropuestas?.map((p:any, index:any) */}\r\n { data?.map((p:any, index:any) => (\r\n\r\n \r\n\r\n {/* botones: Registrar / Ver */}\r\n \r\n\r\n {/* descripción */}\r\n \r\n\r\n {/* origen */}\r\n \r\n\r\n {/* ver ficha completa & folio - (folio: {data[index].folio})*/}\r\n \r\n\r\n {/* decisión */}\r\n \r\n \r\n {/* ciclo */}\r\n \r\n\r\n \r\n\r\n ))} \r\n \r\n
    onSort(e, \"sentOrden\")} className=\"noBR align-top\" >\r\n \r\n {etiRP.contenido[0].text}\r\n onSort(e, \"description\")} className=\"align-top \" >\r\n \r\n {etiRP.contenido[1].text}
    \r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: 8
    {articulos.hybridArticles[0].art[0].description}

    \r\n Articulo: 18
    {articulos.hybridArticles[0].art[1].description}
    \r\n
    \r\n
    \r\n
    {etiRP.contenido[2].text}
    \r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: 8
    {articulos.hybridArticles[0].art[0].description}

    \r\n Articulo: 18
    {articulos.hybridArticles[0].art[1].description}
    \r\n
    \r\n
    \r\n
    onSort(e, \"folio\")} className=\"noBR align-top\" >\r\n \r\n {etiRP.contenido[3].text}\r\n onSort(e, \"decisionOrden\")} className=\"noBR align-top\" >\r\n \r\n {etiRP.contenido[4].text}\r\n onSort(e, \"cycleOrden\")} className=\"noBR align-top\" >\r\n \r\n {etiRP.contenido[5].text}\r\n
    \r\n
    \r\n\r\n {/* botón 'Registrar' - No enviado */}\r\n {data[index].sentOrden == \"2\" \r\n ? ( <>\r\n {/* \"page.decbtnDec(decPro, depProItem, 'dec', indexPF);page.loadProposalbyID(depProItem.id,'dec',decPro.id)\" */}\r\n \r\n ) \r\n : (<>\r\n {/* ng-click=\"page.decbtnDec(decPro, depProItem, 'vis', indexPF);page.loadProposalbyID(depProItem.id,'dec',decPro.id) \" */}\r\n \r\n ) \r\n }\r\n {/*

    {p.miPropuestaDetalle.acronym}....

    */}\r\n \r\n
    \r\n
    \r\n {data[index].description}\r\n \r\n {data[index].origin.map((o: any, index: any) => (\r\n <>\r\n \r\n  {o.name}\r\n
    \r\n {/* ng-bind-html=\"page.renderHtml(depProItemOrigin.specification.split('\\n').join('
    '))\" */}\r\n {o.specification}
    \r\n \r\n ))}\r\n
    \r\n leePropuestaPorId(p.id, 'liga-verFichaCompleta') } >\r\n {etiRP.contenido[7].text}
    \r\n (folio: {data[index].folio})\r\n
    \r\n
    \r\n {data[index].decisionOrden != \"\" &&\r\n (<>\r\n {data[index].sentOrden\r\n ? ( )\r\n : ( )\r\n } \r\n {data[index].decisionOrden}\r\n )\r\n }\r\n \r\n {data[index].cycleOrden != \"\" && <>{data[index].cycleOrden}}\r\n
    \r\n
    \r\n\r\n botonCierraSlidingPanel(\"\")} >\r\n \r\n \r\n\r\n
    \r\n
    \r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n\r\n
    \r\n\r\n \r\n \r\n\r\n );\r\n }\r\n\r\n\r\n /* switch(responseAPI.status){\r\n case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n } */\r\n\r\n/* className={props.misPropuestas.sent ? 'divCatalogoDisabled' :'divCatalogo'} */","/*Recurso: ptCatalogs - Servicio de lectura del API: Verifica la autenticación del usuario obteniendo clave y contraseña\r\n Tareas:\r\n GetAllEvidence //Catálogo de Evidencias //*RP\r\n GetAllCycles //Catálogo de Ciclos //*RP \r\n GetAllFeatures\r\n*/\r\n\r\nimport axios from \"axios\";\r\n//import {IGetAllOrigin} from \"../../interfaces/catalogs.modelo\";\r\n//import {IGetAllProcessByFrequency} from \"../../interfaces/catalogs.modelo\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'PtCatalogs/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n \r\n const cargaGetAllEvidence= async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllEvidence', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllEvidence', 'method: post', \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const cargaGetAllCycles = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllCycles/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllCycles/es', 'method: post', \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const cargaGetAllFeatures = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetAllFeatures', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetAllFeatures', 'method: post', \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n const ptCatalogsService = {\r\n cargaGetAllEvidence: cargaGetAllEvidence,\r\n cargaGetAllCycles: cargaGetAllCycles,\r\n cargaGetAllFeatures: cargaGetAllFeatures\r\n };\r\n\r\nexport default ptCatalogsService;\r\n","/* RP - Responsable de proceso - toma decisión de la(s) propuesta(s) asignadas a su rol */\r\n\r\n//*react- recursos\r\n import { useState, useEffect} from \"react\";\r\n import { Panel, PanelGroup } from \"rsuite\";\r\n import ReactPaginate from \"react-paginate\";\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases \r\n\r\n//*imágenes\r\n import { AiOutlineDoubleLeft, AiOutlineDoubleRight } from \"react-icons/ai\";\r\n\r\n//*archivo & componentes (otros componentes enlazados)\r\n import RPContenido from \"./RP.Contenido\"; \r\n\r\n//*api's (servicios y store)\r\n import decisionsServicio from \"../../../../api/recursos/decisions/decisions.servicio\"; \r\n import decisionsStore from \"../../../../api/recursos/decisions/decisions.store\"; \r\n\r\n import catalogsServicio from \"../../../../api/recursos/catalogs/catalogs.servicio\"; \r\n import catalogsStore from \"../../../../api/recursos/catalogs/catalogs.store\"; \r\n\r\n import ptCatalogsServicio from \"../../../../api/recursos/ptCatalogs/ptCatalogs.servicio\"; \r\n import ptCatalogsStore from \"../../../../api/recursos/ptCatalogs/ptCatalogs.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\"\r\n\r\n//*funciones\r\n\r\n//*interface\r\n interface propsRP {\r\n tokenStore: any;\r\n menuStore: any;\r\n quitaErrorPagina:any;\r\n recargaPaginaSSC:any;\r\n recargaPaginaSSC_Not:any;\r\n } \r\n\r\n//*componente\r\n export default function RP(props: propsRP){\r\n\r\n //*api store\r\n const { guardaGetAllDecisionStore, catDecisionesStore,\r\n guardaGetAllQualityStore, catPrincipiosStore,\r\n guardaGetAllCyclesStore, \r\n generaObjErrorCatalogsStore } = \r\n catalogsStore((state:any) =>( { \r\n guardaGetAllDecisionStore: state.guardaGetAllDecisionStore,\r\n catDecisionesStore: state.catDecisionesStore,\r\n guardaGetAllQualityStore: state.guardaGetAllQualityStore,\r\n catPrincipiosStore: state.catPrincipiosStore,\r\n guardaGetAllCyclesStore: state.guardaGetAllCyclesStore,\r\n generaObjErrorCatalogsStore: state.generaObjErrorCatalogsStore\r\n }));\r\n\r\n const { guardaGetAllEvidenceStore, catPTEvidenciasStore,\r\n guardaPTGetAllCyclesStore, \r\n combinaCatalogosCiclosStore,\r\n generaObjErrorPtCatalogsStore } = \r\n ptCatalogsStore((state:any) =>( { \r\n guardaGetAllEvidenceStore: state.guardaGetAllEvidenceStore,\r\n catPTEvidenciasStore: state.catPTEvidenciasStore,\r\n guardaPTGetAllCyclesStore: state.guardaPTGetAllCyclesStore,\r\n combinaCatalogosCiclosStore: state.combinaCatalogosCiclosStore,\r\n generaObjErrorPtCatalogsStore: state.generaObjErrorPtCatalogsStore\r\n }));\r\n \r\n const { guardaGetSummaryPxFStore, pxfStore,\r\n guardaGetDetailbyProcessStore,\r\n cambiapxfStore,\r\n actualizaCiclosStore,\r\n generaObjErrorDecisionsStore } = \r\n decisionsStore((state:any) =>( { \r\n guardaGetSummaryPxFStore: state.guardaGetSummaryPxFStore,\r\n pxfStore: state.pxfStore,\r\n guardaGetDetailbyProcessStore: state.guardaGetDetailbyProcessStore,\r\n cambiapxfStore: state.cambiapxfStore,\r\n actualizaCiclosStore: state.actualizaCiclosStore,\r\n generaObjErrorDecisionsStore: state.generaObjErrorDecisionsStore\r\n }));\r\n\r\n //*store's\r\n \r\n //*datos\r\n var _ = require('underscore');\r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.RP;\r\n let x0, x1, x1a, x2, x3 = '';\r\n let otroAnios = [];\r\n //paginación: constante para el manejo de la \r\n const data = pxfStore; //data es quien se muestra para que generé la paginación\r\n const [currentItems, setCurrentItems] = useState([]); //elementos mostrados según páginación\r\n const [pageCount, setPageCount] = useState(0); //contabilidad de la página\r\n const [itemOffset, setItemOffset] = useState(0); //desplazamiento \r\n const itemsPerPage = 10; //número de elementos a mostrar\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaRP, setSwRecargaRP] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n\r\n const [propuestasxFrecuencia, setPropuestasxFrecuencia] = useState({});// lo uso para renderizar dentro de un useEffect, no lo uso en la página\r\n\r\n const [pxfId, setPxfId] = useState(0);\r\n\r\n const [swRecargaCiclos, setSwRecargaCiclos] = useState(false);\r\n const [swRecargaPxF, setSwRecargaPxF] = useState(true);\r\n const [swPxF, setSwPxF] = useState(false); \r\n \r\n //*useEffect\r\n\r\n useEffect(()=> { // al montar\r\n console.log('RP - monto')\r\n props.quitaErrorPagina();\r\n console.clear();\r\n },[]);\r\n\r\n useEffect(()=> { //Carga cátalogo \"Decisiones\"- llama API - Catalogs/GetAllDecision\r\n setCargandoSpin(true); \r\n catalogsServicio.cargaGetAllDecision(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetAllDecisionStore(response.data).then( function(catDecisionesFront:any) { \r\n //console.log('Cargo información de api en CatDecisionesStore');\r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (GetAllDecision): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'RP-Catalogs/GetAllDecision','RP');\r\n setCargandoSpin(false); \r\n recargaPaginaSSC();\r\n })\r\n },[]);\r\n \r\n useEffect(()=> { //Carga cátalogo \"Principios de calidad\"- llama API - Catalogs/GetAllQuality\r\n setCargandoSpin(true); \r\n catalogsServicio.cargaGetAllQuality(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetAllQualityStore(response.data).then( function(catPrincipiosFront:any) { \r\n //console.log('Carga información del api a CatPrincipiosStore');\r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (cargaGetAllQuality): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'RP-Catalogs/GetAllQuality','RP');\r\n setCargandoSpin(false); \r\n recargaPaginaSSC(); \r\n })\r\n },[]);\r\n \r\n useEffect(()=> { //Carga cátalogo \"Evidencias\"- llama API - Catalogs/GetAllEvidence \r\n setCargandoSpin(true); \r\n ptCatalogsServicio.cargaGetAllEvidence(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaGetAllEvidenceStore(response.data).then( function(catPTEvidenciasFront:any) { \r\n //console.log('Cargo información del api en catPTEvidenciasStore' );\r\n })\r\n } \r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (GetAllCycles): \", ex);\r\n generaObjErrorPtCatalogsStore(ex.response, true, '', '', 'RP-PtCatalogs/GetAllEvidence','RP');\r\n setCargandoSpin(false); \r\n recargaPaginaSSC(); \r\n })\r\n },[]);\r\n\r\n //Carga dos cátalogos de \"Ciclos\" - llama API - PtCatalogs/GetAllCycles\r\n //Carga dos cátalogos de \"Ciclos\" - llama API - Catalogs/GetAllCycles - combina los dos catálogos\r\n //Carga \"ProcesoxFrecuencia\" - llama API - Decisions/GetSummaryPxF - agrega los ciclos que le corresponden al proceso\r\n useEffect(()=> { \r\n //*Carga cátalogo \"Ciclos\"- llama API - PtCatalogs/GetAllCycles\r\n setCargandoSpin(true);\r\n ptCatalogsServicio.cargaGetAllCycles(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaPTGetAllCyclesStore(response.data).then( function(catPTCiclosFront:any) { \r\n //console.log('carga información del api en catPTCiclosStore');\r\n \r\n //*Carga cátalogo \"Ciclos\"- llama API - Catalogs/GetAllCycles\r\n setCargandoSpin(true);\r\n catalogsServicio.cargaGetAllCycles(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaGetAllCyclesStore(response.data).then( function(catCiclosFront:any) { \r\n //console.log('carga información del api en catCiclosStore' );\r\n //*llamo funcion store de ptCatalogs para combinar los ciclos, el combinado queda en: catPTCiclosStore\r\n combinaCatalogosCiclosStore(catCiclosFront).then( function(catPTCiclosFront:any) { \r\n //console.log('**catPTCiclosStore: ', catPTCiclosStore );\r\n \r\n //*Cargo ProcesosxFrecuencia -llama API - Decisions/GetSummaryPxF\r\n if (swRecargaPxF) { //valor inicial\r\n setCargandoSpin(true);\r\n decisionsServicio.cargaGetSummaryPxF(props.tokenStore)\r\n .then(function(response:any){\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetSummaryPxFStore(response.data, catPTCiclosFront ).then( function(datos:any) { \r\n //console.log('carga información de api en pxfStore' );\r\n setSwRecargaPxF(false);\r\n })\r\n setCargandoSpin(false); \r\n }\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummarybyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorDecisionsStore(ex.response, true, '', '', 'RP-Decisions/GetSummaryPxF','RP')\r\n setCargandoSpin(false); \r\n recargaPaginaSSC(); \r\n })\r\n }\r\n else { //ya se leyo una vez, solo se actualiza en pxfStore el ciclo porque se agrego uno nuevo\r\n actualizaCiclosStore(pxfId, catPTCiclosFront)\r\n } \r\n })\r\n })\r\n setCargandoSpin(false); \r\n }\r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (GetAllCycles): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'RP-catalogs/GetAllCycles','RP');\r\n setCargandoSpin(false);\r\n recargaPaginaSSC(); \r\n })\r\n //* \r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (GetAllCycles): \", ex);\r\n generaObjErrorPtCatalogsStore(ex.response, true, '', '', 'RP-PtCatalogs/GetAllCycles','RP');\r\n setCargandoSpin(false); \r\n recargaPaginaSSC(); \r\n })\r\n setCargandoSpin(false); \r\n },[swRecargaCiclos]);\r\n\r\n useEffect(()=> { // usado para los otros ciclos en un select\r\n otroAnios.push(\"Seleccionar\");\r\n let i=0;\r\n for(i=2000; i<2051; i++) {\r\n otroAnios.push(i.toString());\r\n }\r\n },[]);\r\n\r\n useEffect(()=> { // uso este puente para recargar elementos del front, no uso ese useState\r\n console.log('RD - rederizando............');\r\n setCargandoSpin(false);\r\n setPropuestasxFrecuencia(pxfStore);\r\n setSwRecargaRP(!swRecargaRP);\r\n },[swRecarga]);\r\n\r\n //páginación: se ejectura al cambio de un elementos (al click en los botones)\r\n useEffect(() => { \r\n console.log('entro a useEffect paginación')\r\n const endOffset = itemOffset + itemsPerPage;\r\n setCurrentItems(data.slice(itemOffset, endOffset));\r\n setPageCount(Math.ceil(data.length / itemsPerPage));\r\n setSwRecarga(!swRecarga);\r\n console.log('::data', data);\r\n }, [itemOffset, itemsPerPage, data]);\r\n \r\n useEffect(()=>{ window.scrollTo({top:0}); },[currentItems]); //para páginación\r\n \r\n \r\n //*funciones\r\n\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n const recargaRP = () => { // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n setSwRecarga(!swRecarga);\r\n }\r\n\r\n const recargaCiclosStore = (id:any) => {\r\n //alert('recargaCiclosStore desde RP');\r\n setSwRecargaCiclos(!swRecargaCiclos); // con esto ejecuto un useEffect, lo uso para renderizar el front y actualice los ciclos\r\n }\r\n\r\n const abreCierraPxF = (pxf:any) => { // abre y cierra el div de la propuesta\r\n //alert('abreCierraPxF...' + p.id + '...' + p.abierto)\r\n //console.clear();\r\n console.log('pxf:',pxf);\r\n setPxfId(pxf.id);\r\n if (pxf.abierto == false) { //esta cerrado y quiere abrir\r\n console.log('pxf.misPropuestas.length', pxf.misPropuestas.length)\r\n if (pxf.misPropuestas.length == 0) { //si tenemos propuestas ya cargo una vez solo abrimos, sino cargamos los detalles del procesoxfrecuencia\r\n setCargandoSpin(true);\r\n decisionsServicio.cargaGetDetailbyProcess(props.tokenStore, pxf.id) //p.id del processoxFrecuencia\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetDetailbyProcessStore(response.data, pxf.id).then( function(pxfPropuestasFront:any) { \r\n setSwPxF(!swPxF);\r\n //const data = datos; nooooo data de paginación debe tener propuestasFrontStore no los detalles\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetDetailbyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorDecisionsStore(ex.response, true, '', '', 'RP-Decisions/GetDetailbyProcess','RP')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n }\r\n else { cambiapxfStore(pxf.id, null, true, null, 'abreCierraPxF') }\r\n }\r\n else { //esta abierto quiere cerrar, por lo tanto se ejecuta funcion de store que cambia abierto a false sin cambiar detalle\r\n //idpxf:any, idprop: any, abierto:any, detalle:any, dondeViene:any \r\n cambiapxfStore(pxf.id, null, false, null, 'abreCierraPxF');\r\n setCargandoSpin(false); \r\n \r\n };\r\n setSwRecarga(!swRecarga)\r\n }\r\n\r\n const clickPaginacion = (event: any) => { //paginación: se ejecuta cuando se da un click en los elementos de páginación (botones)\r\n const newOffset = (event.selected * itemsPerPage) % data.length;\r\n //console.log(\"newOffset--------\", newOffset);\r\n setItemOffset(newOffset);\r\n setSwRecarga(!swRecarga) \r\n };\r\n\r\n //*vista\r\n return(\r\n <>\r\n\r\n {/* nota de mensaje de error */}\r\n { (props.menuStore[1].errorPagina==true) &&\r\n (<>

    )\r\n }\r\n\r\n {/*titulo Proceso / Frecuencia */}\r\n
    Proceso / Frecuencia
    \r\n \r\n\r\n {/* div's - Procesos x Frecuencia con sus respectivas propuestas, utilizamos el cargaSpin porque es lento y la da efecto de carga */} \r\n
    \r\n {/* {console.log('pxfStore::::',pxfStore)} \r\n {console.log('currentItems::::',currentItems)} */}\r\n\r\n {/* currentItems trae pxfStore se usa ésta para la paginación */ } \r\n { currentItems?.map((pxf:any, index:any) => (\r\n (x0 = ` ${pxf.inprocess} ${eti.etiquetas[2].text}  \r\n ${pxf.accepted} ${eti.etiquetas[3].text}   `),\r\n \r\n /*x2 forma el contendio del header del panel*/\r\n (x2 = \r\n (<>\r\n
    \r\n {/* acrónimo/frecuencia & nombre del proceso & estatus */}\r\n \r\n {pxf.pxfNombre} \r\n {pxf.totalPropuestas} \r\n {eti.etiquetas[1].text}\r\n
    \r\n {pxf.processname}  \r\n {pxf.estatusProceso}\r\n
    \r\n
    \r\n \r\n {/* # nuevas propuestas & # turnadas a rp */}\r\n \r\n
    \r\n )\r\n ),\r\n (<>\r\n
    \r\n \r\n abreCierraPxF(pxf)}\r\n >\r\n \r\n {pxf.abierto\r\n && \r\n }\r\n \r\n )\r\n ))} \r\n
    \r\n\r\n

    \r\n\r\n {/* paginación: elemento visuales */}\r\n { pageCount > 1 &&\r\n (<>\r\n } \r\n pageRangeDisplayed={2}\r\n pageCount={pageCount}\r\n previousLabel={\r\n }\r\n renderOnZeroPageCount={null}\r\n containerClassName=\"pagination\"\r\n pageLinkClassName=\"page-num\"\r\n previousLinkClassName=\"page-num\"\r\n nextLinkClassName=\"page-num\"\r\n activeClassName=\"active\"\r\n disabledLinkClassName=\"gray\"\r\n onPageChange={clickPaginacion}\r\n // onClick={clickPaginacion}\r\n />\r\n \r\n ) \r\n }\r\n \r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n\r\n \r\n )\r\n }\r\n","/* contenido de la propuesta seleccionada */\r\n\r\n//*react- recursos\r\n//*componentes-utiles\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n//*api's (servicios y store)\r\n//*store's\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n import articulos from \"../../../../datos/json/guidelines.json\";\r\n//*funciones\r\n//*interfaces\r\n interface propsRDPropuesta {\r\n decisionTextoTodos:any;\r\n indexPropuesta:any;\r\n propuesta: any;\r\n }\r\n//*componente\r\n export default function RDPropuesta(props: propsRDPropuesta) { \r\n //*api store\r\n //*store's\r\n //*datos\r\n //*constantes y variables\r\n let eti = etiquetasSSC.RD;\r\n //*useState\r\n //*useEffect\r\n //*interface (parametros de entrada)\r\n //*funciones\r\n //*vista\r\n return (\r\n <>\r\n {/* contenido propuesta */}\r\n
    \r\n {/* folio - fecha */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {/* proponente del cambio */}\r\n
    \r\n
    \r\n {eti.etiquetas[5].text}
    \r\n \r\n
    \r\n
    \r\n {/* descripción */}\r\n
    \r\n
    \r\n {eti.etiquetas[6].text}
    \r\n \r\n
    \r\n
    \r\n {/* origen del cambio */}\r\n
    \r\n
    \r\n {eti.etiquetas[7].text}\r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: 8
    {articulos.hybridArticles[0].art[0].description}

    \r\n Articulo: 18
    {articulos.hybridArticles[0].art[1].description}
    \r\n
    \r\n
    \r\n
    \r\n { props.propuesta.origin?.map((o:any, indexP:any) => (\r\n (<>\r\n \r\n )\r\n ))}\r\n
    \r\n
    \r\n {/* procesos que potencialmente serán modificados */}\r\n
    \r\n
    \r\n {eti.etiquetas[8].text}\r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: 8
    {articulos.hybridArticles[0].art[0].description}

    \r\n Articulo: 18
    {articulos.hybridArticles[0].art[1].description}
    \r\n
    \r\n
    \r\n
    \r\n { props.propuesta.processxfrequency?.map((pf:any, indexP:any) => (\r\n (<>\r\n \r\n )\r\n ))}\r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n\r\n","/* contenido de la propuesta seleccionada */\r\n\r\n//*react- recursos\r\n import { useState, useEffect} from \"react\";\r\n\r\n//*componentes-utiles\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n import { Col, Row } from \"react-bootstrap\";\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n import analysisStore from \"../../../../api/recursos/analysis/analysis.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n import articulos from \"../../../../datos/json/guidelines.json\";\r\n\r\n//*funciones\r\n\r\n//*interfaces\r\n interface propsRDEvidencias {\r\n pfcId : any;\r\n evId: any;\r\n miCatPruebas: any;\r\n miCatCaracteristicas: any;\r\n activaBotonGuardar: any;\r\n activaBotonEnviar: any;\r\n desactivaBotonGuardarEnviar: any;\r\n recargaRDDocumentar: any;\r\n recargaRD: any;\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not: any;\r\n }\r\n//*componente\r\n export default function RDEvidencias(props: propsRDEvidencias) { \r\n //*api store\r\n\r\n const { cambiaPFCDetalleStore, } = \r\n analysisStore((state:any) =>( { \r\n cambiaPFCDetalleStore: state.cambiaPFCDetalleStore\r\n }));\r\n\r\n //*store's\r\n //*datos\r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.RD;\r\n let x0,x1 = \"\"; \r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaRDDocumentarEvidencias, setSwRecargaRDDocumentarEvidencias] = useState(false);\r\n\r\n //*useEffect\r\n useEffect(()=> { // uso este puente para recargar elementos del front, no uso ese useState\r\n //console.log('miCatPruebas: ', props.miCatPruebas);\r\n //console.log('miCatCaracteristicas: ', props.miCatCaracteristicas);\r\n setSwRecarga(!swRecarga);\r\n props.recargaRDDocumentar();\r\n },[]);\r\n\r\n useEffect(()=> { //usado para renderizar\r\n //console.log('RD.Documentar.Evidencias .... renderizando...');\r\n setSwRecargaRDDocumentarEvidencias(!swRecargaRDDocumentarEvidencias);\r\n },[swRecarga]);\r\n\r\n //*interface (parametros de entrada)\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en RD\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta RD\r\n\r\n const recargaRDDocumentar = () => { props.recargaRDDocumentar() } //ejecuta la función que esta en RD\r\n\r\n const recargaRDDocumentarEvidencias = () => { \r\n setSwRecarga(!swRecarga)\r\n }\r\n const cambiaCheckCaracteristicas = (e:any) => {\r\n //alert('cambiaCheckCaracteristicas:' + e.target.id);\r\n //console.log('e.target.id::', e.target.id);\r\n //console.log('e.target.value::', e.target.value);\r\n //catEC_${props.evId}_${c.id} = catEC_8_14\r\n let miCheckId = e.target.id;\r\n let posP = miCheckId.indexOf('_');\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n let posC = paso.indexOf('_');\r\n let idEvi = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('*****idEvidencia....', idEvi);\r\n //console.log('*****catalogoId.....', catalogoId);\r\n //lo cambio para mi vista frontend\r\n let swActiva = false;\r\n props.miCatCaracteristicas.map((ce:any) => {\r\n if (ce.id == catalogoId) { ce.activo = !ce.activo };\r\n if (ce.activo) { swActiva=true };\r\n }); \r\n //lo cambio en mi variable store \r\n let copiaMiCatCaracteristicas= JSON.parse(JSON.stringify(props.miCatCaracteristicas));\r\n cambiaPFCDetalleStore(props.pfcId, idEvi, copiaMiCatCaracteristicas, swActiva, 'cambiaCheckCaracteristicas') ;\r\n props.activaBotonGuardar();\r\n setSwRecarga(!swRecarga);\r\n //props.recargaRDDocumentar();\r\n };\r\n\r\n const cambiaCheckPruebas = (e:any) => {\r\n //alert('cambiaCheckPruebas:' + e.target.id + '...' + e.target.checked);\r\n //catEP_8_1\r\n //console.clear();\r\n\r\n let miCheckId = e.target.id;\r\n let miCheckValor = e.target.checked;\r\n let posP = miCheckId.indexOf('_');\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n let posC = paso.indexOf('_');\r\n let idEvi = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('*****idEvidencia....', idEvi);\r\n //console.log('*****catalogoId.....', catalogoId);\r\n\r\n //lo cambio para mi vista frontend\r\n let swActiva = false;\r\n if (catalogoId == 6) { //selecciono Ninguno (activo)por lo tanto quita todos salen menos el\r\n swActiva = miCheckValor;\r\n props.miCatPruebas.map((cp:any) => {\r\n if (cp.name != 'Ninguno') { cp.activo = false }\r\n else { cp.activo = !cp.activo };\r\n });\r\n props.miCatPruebas[5].otraTexto='';\r\n }\r\n else{\r\n props.miCatPruebas.map((cp:any) => {\r\n if (cp.id == catalogoId) { cp.activo = !cp.activo }\r\n if (cp.name == 'Ninguno') { cp.activo = false }\r\n if (cp.activo) { swActiva=true };\r\n if (cp.name == 'Otra' && cp.activo && cp.otraTexto=='') { swActiva=false };\r\n });\r\n }\r\n //alert('swActiva...'+swActiva)\r\n /* if (catalogoId == 6 ) { //selecciono Ninguno por lo tanto quita todos salen menos el\r\n props.miCatPruebas.map((cp:any) => {\r\n if (cp.name != 'Ninguno') { cp.activo = false }\r\n else { cp.activo = !cp.activo };\r\n });\r\n if (props.miCatPruebas[5].activo) { swActiva=true }\r\n //props.pfcDetallesFront.misArchivos[5].activo = true\r\n }\r\n else {\r\n props.miCatPruebas.map((cp:any) => {\r\n if (cp.id == catalogoId) { cp.activo = !cp.activo }\r\n if (cp.name == 'Ninguno') { cp.activo = false }\r\n if (cp.activo) { swActiva=true };\r\n if (cp.name == 'Otra' && cp.activo && cp.otraTexto=='') { swActiva=false };\r\n });\r\n } */\r\n\r\n //lo cambio en mi variable store \r\n let copiaMiCatPruebas= JSON.parse(JSON.stringify(props.miCatPruebas));\r\n cambiaPFCDetalleStore(props.pfcId, idEvi, copiaMiCatPruebas, swActiva, 'cambiaCheckPruebas');\r\n recargaRDDocumentar(); \r\n props.activaBotonGuardar();\r\n setSwRecarga(!swRecarga);\r\n ////recargaRDDocumentar();\r\n \r\n };\r\n\r\n const cambiaTextoPruebasOtro = (e:any) => {\r\n //alert('cambiaTextoPruebasOtro:' + e.target.id);\r\n console.log('*****e.target.value.....', e.target.value)\r\n let miCheckId = e.target.id;\r\n let posP = miCheckId.indexOf('_');\r\n let paso = miCheckId.substr( posP+1, miCheckId.length-posP );\r\n let posC = paso.indexOf('_');\r\n let idEvi = paso.substr( 0, posC );\r\n let catalogoId = paso.substr(posC+1, paso.length-posC-1 );\r\n //console.log('*****idEvidencia....', idEvi);\r\n //console.log('*****catalogoId.....', catalogoId);\r\n //lo cambio para mi vista frontend\r\n props.miCatPruebas[4].otraTexto = e.target.value; \r\n //console.log('*****props.miCatPruebas.....', props.miCatPruebas)\r\n let swActiva = false;\r\n if (props.miCatPruebas[4].otraTexto != '') { swActiva = true };\r\n //lo cambio en mi variable store\r\n let copiaMiCatPruebas= JSON.parse(JSON.stringify(props.miCatPruebas));\r\n cambiaPFCDetalleStore(props.pfcId, idEvi, copiaMiCatPruebas, swActiva, 'cambiaTextoPruebasOtro') ;\r\n props.activaBotonGuardar();\r\n setSwRecarga(!swRecarga);\r\n //props.recargaRDDocumentar();\r\n \r\n }\r\n\r\n //*vista\r\n return (\r\n <>\r\n {/* contenido propuesta */}\r\n
    \r\n \r\n\r\n {/* caracteristicas */}\r\n \r\n
    \r\n
    \r\n {/* titulo: caracteriscas & articulo */}\r\n
    \r\n {eti.etiquetas[10].text}\r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: 12
    {articulos.hybridArticles[0].art[3].description}

    \r\n
    \r\n
    \r\n
    \r\n {/* lista de caractericas de la evidencia seleccionada */}\r\n { props.miCatCaracteristicas?.map((c:any, indexC:any) => (\r\n (x0 = `catEC_${props.evId}_${c.id}`),\r\n (<>\r\n
    \r\n \r\n
    \r\n
    {c.nombreCorto}
    \r\n
    \r\n )\r\n ))}\r\n
    \r\n
    \r\n
    \r\n \r\n\r\n {/* pruebas */}\r\n \r\n
    \r\n
    \r\n {/* titulo: pruebas & articulo */}\r\n
    \r\n {eti.etiquetas[11].text}\r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: 13
    {articulos.hybridArticles[0].art[4].description}

    \r\n
    \r\n
    \r\n
    \r\n {/* lista de pruebas de la evidencia seleccionada */} \r\n { props.miCatPruebas?.map((p:any, indexC:any) => (\r\n (x0 = `catEP_${props.evId}_${p.id}`),\r\n (x1 = `otroDesc_${props.evId}_${p.id}`),\r\n (<>\r\n
    \r\n \r\n
    \r\n
    {p.nombreCorto}
    \r\n
    \r\n {/* otro: capturamos texto */}\r\n { p.id == 5 && p.activo &&\r\n (<> \r\n
    \r\n ) \r\n }\r\n )\r\n ))}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n\r\n","/*Recurso: Catalogs - Servicio de lectura del API: Maneja los catálogos utilizados\r\n Tareas:\r\n Analysis/GetSummarybyUser/es\r\n Analysis/GetDetailbyUser/es\r\n Analysis/UpdatebyUser/es\r\n Analysis/SendbyUser/ \r\n*/\r\n\r\nimport axios from \"axios\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Analysis/';\r\n\r\n //tarea: GetSummaryPxF/es\r\n const cargaGetSummarybyUser = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetSummarybyUser/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetSummarybyUser/es', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: GetDetailbyUser \r\n const cargaGetDetailbyUser = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetDetailbyUser/es', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetDetailbyUser/es', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: UpdatebyUser/es \r\n const cargaUpdatebyUser = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'UpdatebyUser/es', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'UpdatebyUser/es', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; \r\n\r\n //tarea: SendbyUser\r\n const cargaSendbyUser = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'SendbyUser/', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'SendbyUser/', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; \r\n\r\nconst analysisService = {\r\n cargaGetSummarybyUser: cargaGetSummarybyUser,\r\n cargaGetDetailbyUser: cargaGetDetailbyUser,\r\n cargaUpdatebyUser: cargaUpdatebyUser,\r\n cargaSendbyUser: cargaSendbyUser,\r\n \r\n};\r\n\r\nexport default analysisService;\r\n","/* RD - Responsable de Diseño - toma decisión de la(s) propuesta(s) asignadas a su rol */\r\n/* RD.Contenido - Documentar */\r\n\r\n//*react- recursos\r\n import { useState, useEffect, useCallback } from \"react\";\r\n import { Panel, PanelGroup } from \"rsuite\";\r\n import { useDropzone } from \"react-dropzone\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css';\r\n import { Col, Row } from \"react-bootstrap\";\r\n import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"; //'libreria' que cita el bote de basura\r\n import { faTrashAlt } from \"@fortawesome/free-solid-svg-icons\"; //icono bote de basura \r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n import RDPropuesta from \"./RD.Documentar.Propuesta\";\r\n import RDEvidencias from \"./RD.Documentar.Evidencias\";\r\n \r\n//*api's (servicios y store)\r\n import proposalsServicio from \"../../../../api/recursos/proposals/proposals.servicio\"; \r\n import proposalsStore from \"../../../../api/recursos/proposals/proposals.store\"; \r\n\r\n import analysisServicio from \"../../../../api/recursos/analysis/analysis.servicio\"; \r\n import analysisStore from \"../../../../api/recursos/analysis/analysis.store\"; \r\n\r\n import filesServicio from \"../../../../api/recursos/files/files.servicio\"; \r\n import filesStore from \"../../../../api/recursos/files/files.store\"; \r\n\r\n import notificationsServicio from \"../../../../api/recursos/notifications/notifications.servicio\"; \r\n import notificationsStore from \"../../../../api/recursos/notifications/notifications.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n import articulos from \"../../../../datos/json/guidelines.json\";\r\n \r\n//*interfaces\r\n interface propsRDDocumentar {\r\n tokenStore: any;\r\n pfcId: any,\r\n catDecisiones: any,\r\n catPruebas: any,\r\n catPTCaracteristicas: any,\r\n botonCierraSlidingPanel:any;\r\n recargaRD: any;\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not:any;\r\n }\r\n\r\n//*componente\r\n export default function RDDocumentar(props: propsRDDocumentar) { \r\n\r\n var _ = require('underscore');\r\n \r\n //*api store\r\n const { guardaGetDetailbyUserPStore, propuestaDetallesStore,\r\n generaObjErrorProposalsStore} = \r\n proposalsStore((state:any) =>( { \r\n guardaGetDetailbyUserPStore: state.guardaGetDetailbyUserStore,\r\n propuestaDetallesStore: state.propuestaDetallesStore,\r\n generaObjErrorProposalsStore: state.generaObjErrorProposalsStore,\r\n }));\r\n\r\n const { guardaGetDetailbyUserAStore, pfcDetallesStore,\r\n cambiaPFCDetalleStore, \r\n guardaUpdatebyUserStore,\r\n guardaSendbyUserStore,\r\n nrArchivosStore, crArchivosStore, proofArchivosStore, justifyArchivosStore, apiArchivosStore,\r\n generaObjErrorAnalysisStore } = \r\n analysisStore((state:any) =>( { \r\n guardaGetDetailbyUserAStore: state.guardaGetDetailbyUserStore, \r\n pfcDetallesStore: state.pfcDetallesStore, \r\n cambiaPFCDetalleStore: state.cambiaPFCDetalleStore,\r\n guardaUpdatebyUserStore: state.guardaUpdatebyUserStore,\r\n guardaSendbyUserStore: state.guardaSendbyUserStore,\r\n nrArchivosStore: state.nrArchivosStore,\r\n crArchivosStore: state.crArchivosStore,\r\n proofArchivosStore: state.proofArchivosStore,\r\n justifyArchivosStore: state.justifyArchivosStore,\r\n apiArchivosStore: state.apiArchivosStore,\r\n generaObjErrorAnalysisStore: state.generaObjErrorAnalysisStore\r\n }));\r\n\r\n const { guardaUploadFilesAnalysisStore, \r\n generaObjErrorFilesStore, objErrorFilesStore } = \r\n filesStore((state:any) =>( { \r\n guardaUploadFilesAnalysisStore: state.guardaUploadFilesAnalysisStore,\r\n generaObjErrorFilesStore: state.generaObjErrorFilesStore,\r\n objErrorFilesStore: state.objErrorFilesStore,\r\n })); \r\n\r\n const { guardaSendEmailStore, \r\n generaObjErrorNotificationsStore } = \r\n notificationsStore((state:any) =>( { \r\n guardaSendEmailStore: state.guardaSendEmailStore,\r\n generaObjErrorNotificationsStore: state.generaObjErrorNotificationsStore\r\n }));\r\n\r\n //*store's\r\n \r\n //*datos\r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.RD;\r\n let etiGlobal = etiquetasSSC.Global;\r\n let x0, x1, x1a, x2, x3 = '';\r\n let msjError = \"\"; \r\n let msjAdvertencia = \"\";\r\n\r\n let date = new Date();\r\n let dateStr = date.getFullYear() + \"-\" +\r\n (\"00\" + (date.getMonth() + 1)).slice(-2) + \"-\" +\r\n (\"00\" + date.getDate()).slice(-2) + \"T\" +\r\n (\"00\" + date.getHours()).slice(-2) + \":\" +\r\n (\"00\" + date.getMinutes()).slice(-2) + \":\" +\r\n (\"00\" + date.getSeconds()).slice(-2);\r\n \r\n //para uso del dropzone\r\n let archivosNR:any = [];\r\n let archivosCR:any = [];\r\n let archivosPROOF:any = [];\r\n let archivosJUSTIFY:any = [];\r\n let archivosAPI:any = [];\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); \r\n const [swRecargaRDDocumentar, setSwRecargaRDDocumentar] = useState(false); \r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n const [swPFC, setSwPFC] = useState(false);\r\n\r\n const [totalEvidencias, setTotalEvidencias] = useState(0); \r\n const [totalDecision, setTotalDecision] = useState(0); \r\n\r\n const [pfcDetallesFront, setPfcDetallesFront] = useState(pfcDetallesStore);\r\n const [swBotonGuardarFront, setSwBotonGuardarFront] = useState(pfcDetallesStore.btnGuardar); \r\n const [swBotonEnviarFront, setSwBotonEnviarFront] = useState(pfcDetallesStore.btnEnviar); \r\n \r\n //para uso del dropzone\r\n const [nrMyFiles, setNrMyFiles] = useState(nrArchivosStore); //guarda el listado de elementos (archivos) cargados por el usuario\r\n const [crMyFiles, setCrMyFiles] = useState(crArchivosStore); \r\n const [proofMyFiles, setProofMyFiles] = useState(proofArchivosStore);\r\n const [justifyMyFiles, setJustifyMyFiles] = useState(justifyArchivosStore);\r\n const [apiMyFiles, setApiMyFiles] = useState(apiArchivosStore); \r\n const [swDropzoneAdvertencia, setSwDropzoneAdvertencia] = useState(true);\r\n\r\n //para las propuestas\r\n const [propuestaDetallesFront, setPropuestaDetallesFront] = useState( { id:0, folio: '', fecha: '',sent: true, sentAt: '', description: '', createdAt: '', user:{ id:0, name:'', email:''}, origin:[{id:0, name:'', specification:'' }],\r\n processxfrequency: [{ id:0, processname:'', frequencyname:'', acronym: '', state_process: { pt_state:0, pt_state_description:'', onwaiting:true, leftdays:0 } }] \r\n } );\r\n const [indexPropuesta, setIndexPropuesta] = useState(0);\r\n const [swAbrePropuesta, setSwAbrePropuesta] = useState(false);\r\n //\r\n \r\n //*useEffect\r\n useEffect(()=>{\r\n console.log('monto RD.Documentar');\r\n // console.log ('pfcDetallesStore',pfcDetallesStore)\r\n },[]);\r\n\r\n useEffect(()=> { //lee API: Analysis/GetDetailbyUse\r\n setCargandoSpin(true);\r\n let body = {id:props.pfcId}\r\n analysisServicio.cargaGetDetailbyUser(props.tokenStore, body) //p.id del processoxFrecuencia\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetDetailbyUserAStore(response.data, props.pfcId, props.catDecisiones, props.catPruebas, props.catPTCaracteristicas).then( function(datos:any) { \r\n //console.log('datos:', datos);\r\n setPfcDetallesFront(datos);\r\n \r\n //para los dropzone\r\n let paso = datos.misArchivos;\r\n setNrMyFiles(paso[0].archivos);\r\n setCrMyFiles(paso[1].archivos);\r\n setProofMyFiles(paso[2].archivos);\r\n setJustifyMyFiles(paso[3].archivos);\r\n setApiMyFiles(paso[4].archivos);\r\n\r\n //evidencias y decisión\r\n setTotalEvidencias(datos.evidence.length);\r\n setTotalDecision(datos.totalDecision.length);\r\n\r\n //botones guardar & enviar\r\n setSwBotonGuardarFront(datos.btnGuardar)\r\n setSwBotonEnviarFront(datos.btnEnviar)\r\n\r\n setSwPFC(!swPFC); \r\n setSwRecarga(!swRecarga);\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetDetailbyProcess): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else{\r\n generaObjErrorAnalysisStore(ex.response, true, '', '', 'RP-Analysis/GetDetailbyUser','RD')\r\n recargaPaginaSSC();\r\n }\r\n setCargandoSpin(false);\r\n })\r\n },[]);\r\n\r\n useEffect(()=> { //usado para renderizar\r\n //console.log('renderizando...');\r\n //console.log('---pfcId:', props.pfcId);\r\n //console.log('---totalEvidencias:', totalEvidencias);\r\n //console.log('---totalDecision:', totalDecision);\r\n //console.log('---pfcDetallesFront:', pfcDetallesFront);\r\n //console.log('---pfcDetallesStore:', pfcDetallesStore);\r\n //console.log('---nrMyFiles:', nrMyFiles);\r\n //console.log('---crMyFiles:', crMyFiles);\r\n //console.log('---proofMyFiles:', proofMyFiles);\r\n //console.log('---justifyMyFiles:', justifyMyFiles);\r\n //console.log('---apiMyFiles:', apiMyFiles);\r\n setSwRecargaRDDocumentar(!swRecargaRDDocumentar);\r\n },[swRecarga]);\r\n\r\n //*interface (parametros de entrada)\r\n\r\n //*funciones\r\n\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en RD\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta RD\r\n\r\n const recargaRD = () => { props.recargaRD() } //ejecuta la función que esta en RD\r\n\r\n const recargaRDDocumentar = () => { \r\n //setSwRecargaRDDocumentar(!swRecargaRDDocumentar)\r\n setSwRecarga(!swRecarga)\r\n }\r\n\r\n const cierraPropuesta = ()=> { setSwAbrePropuesta(false) } \r\n\r\n const leePropuestaPorId = (id:any, indexP:any) => { //opciones liga-verFichaCompleta , boton-registra lee el contenido de la propuesta \r\n setCargandoSpin(true);\r\n proposalsServicio.cargaGetDetailbyUser(props.tokenStore, id)\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetDetailbyUserPStore(response.data, id, null, null, 'RDDocumentar').then( function(datos:any) { \r\n //console.log('propuesta - datos: ' , datos)\r\n setIndexPropuesta(indexP);\r\n setPropuestaDetallesFront(datos);\r\n ////recargaRDDocumentar(); \r\n setSwAbrePropuesta(true);\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetDetailbyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else{\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'RDDocumentar-Proposals/GetDetailbyUser','RD')\r\n recargaPaginaSSC();\r\n }\r\n setCargandoSpin(false);\r\n })\r\n setCargandoSpin(false);\r\n } \r\n\r\n const abreCierraEvidenciaDetalles = (indexEv:any, ev:any)=> {\r\n let paso = pfcDetallesFront.evidence[indexEv].abierto;\r\n pfcDetallesFront.evidence[indexEv].abierto = !paso;\r\n recargaRDDocumentar();\r\n //console.log('***************props.pfcDetalles.evidence', props.pfcDetalles.evidence)\r\n }\r\n \r\n const activaBotonGuardar = () => { setSwBotonGuardarFront(true) }\r\n\r\n const activaBotonEnviar = () => { setSwBotonEnviarFront(true) }\r\n\r\n const botonCerrar = () => { \r\n if (swBotonGuardarFront) { //si esta activo el botón guardar hay cambios...\r\n swal2.fire({\r\n text: \"\",\r\n icon: 'question',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '50%',\r\n html: \"
    \" + eti.mensajes[5].text + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) \r\n props.botonCierraSlidingPanel('');\r\n else\r\n return;\r\n })\r\n }\r\n else { //cerramos SlipingPanel desde RD\r\n props.botonCierraSlidingPanel('');\r\n } \r\n ////recargaRDDocumentar();\r\n }\r\n \r\n const botonGuardar = () => {\r\n //alert('botonGuardar');\r\n //llamado a los archivos dropzone para llenar arreglos\r\n nrFilesUpload();\r\n crFilesUpload();\r\n proofFilesUpload(); \r\n justifyFilesUpload();\r\n apiFilesUpload(); \r\n\r\n //pfcDetallesStore.misArchivos[0] = \r\n //console.log('...pfcDetallesStore...',pfcDetallesStore);\r\n //console.log('...pfcDetallesFront...',pfcDetallesFront);\r\n //console.clear();\r\n //console.log('...pfcDetallesFront.misArchivos...',pfcDetallesFront.misArchivos);\r\n //console.log('...nrArchivosStore...',nrArchivosStore);\r\n //console.log('...nrFilesNuevos...',nrFilesNuevos);\r\n //console.log('...archivosNR...',archivosNR); // arreglo con altas y bajas ** ojo ya se agrego a pfcDetallesStore.misArchivos[#].archivos\r\n \r\n //console.log('objErrorFilesStore.hasError', objErrorFilesStore.hasError);\r\n\r\n validaPlantilla();\r\n\r\n botonGuardarUploadFilesAnalysis() ; //primero guardamos en API: Files/UploadFilesAnalysis/ SOLO ARCHIVOS NUEVOS\r\n\r\n // botonGuardarUpdatebyUser(); //segundo guardamos en API: Analysis/UpdatebyUser // lo mandamos dentro de botonGuardarUploadFilesAnalysis para obligarlo a esperar la promesa \r\n if ( msjAdvertencia != '' ) { \r\n swal2.fire({\r\n icon: 'info',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'La documentación a la propuesta de cambio fue guardada:',\r\n html: \"
    Importante:

     Completar los siguientes campos
    \" + msjAdvertencia + \"
     Guardar la plantilla completa

     Para completar el proceso de tipo de cambio Enviar la propuesta
    \",\r\n })\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n }\r\n else {\r\n //if (!objErrorFilesStore.hasError) {\r\n swal2.fire({\r\n icon: 'info',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'El registro de la propuesta fue guardada..:',\r\n html: \"
    \" + eti.mensajes[0].text + \"
    \",\r\n })\r\n //*ojo ver parametros;\r\n //idpfc:any, idEvi:any, detalle:any, swActiva any, dondeViene:any\r\n //cambiaPFCDetalleStore(props.pfcId, null, null, null, 'botonGuardar');\r\n \r\n setSwBotonEnviarFront(true); // hasta que grabe envia\r\n // } \r\n } \r\n }\r\n const validaPlantilla = () => {\r\n //alert('validaPlantilla');\r\n msjAdvertencia='';\r\n\r\n //*evidencias - características y pruebas\r\n let swPasoC = false;\r\n let swPasoP = false;\r\n let swPasoPO = false;\r\n let msjPasoC = '';\r\n let msjPasoP = '';\r\n let msjPasoPO = '';\r\n //console.clear();\r\n //console.log('.......................pfcDetallesStore.evidence..', pfcDetallesStore.evidence)\r\n let cuentaCar = 0;\r\n pfcDetallesStore.evidence.map((evi:any, indexEvi:any) => {\r\n //swPasoC = false;\r\n //swPasoP = false;\r\n //swPasoPO = false; \r\n\r\n //console.log('indexEvi', indexEvi, ' evi.swEviCatCaracteristicas..', evi.swEviCatCaracteristicas)\r\n //alert(evi.miCatCaracteristicas.length);\r\n if (evi.miCatCaracteristicas.length>0) {\r\n if (evi.swEviCatCaracteristicas==false) {\r\n if (swPasoC==false)\r\n msjPasoC = msjPasoC + eti.mensajes[1].text + '
    ' + ' - ' + evi.name + '
    ';\r\n else\r\n msjPasoC = msjPasoC + ' - ' + evi.name + '
    ';\r\n swPasoC= true;\r\n };\r\n };\r\n\r\n //console.log('indexEvi', indexEvi, ' evi.swEviCatPruebas..', evi.swEviCatPruebas)\r\n //alert(evi.swEviCatPruebas);\r\n if (evi.swEviCatPruebas==false) {\r\n if (swPasoP==false)\r\n msjPasoP = msjPasoP + eti.mensajes[2].text + '
    ' + ' - ' + evi.name + '
    ';\r\n else\r\n msjPasoP = msjPasoP + ' - ' + evi.name + '
    ';\r\n swPasoP= true;\r\n }; \r\n\r\n /* console.log('indexEvi', indexEvi, ' evi.swEviCatPruebasOtro..', evi.swEviCatPruebasOtro)\r\n if (evi.swEviCatPruebasOtro==false) {\r\n if (swPasoP==false)\r\n msjPasoP = msjPasoP + eti.mensajes[2].text + '
    ' + ' - ' + evi.name + '
    ';\r\n else\r\n msjPasoP = msjPasoP + ' - ' + evi.name + '
    ';\r\n swPasoP= true;\r\n } */ \r\n \r\n //// if (evi.swEviCatPruebasOtro==false) {\r\n if (evi.miCatPruebas[4].activo) { //evi.swEviCatPruebasOtro==true\r\n if (evi.miCatPruebas[4].otraTexto=='' || evi.miCatPruebas[4].otraTexto==null) {\r\n if (swPasoPO==false)\r\n msjPasoPO = msjPasoPO + eti.mensajes[4].text + '
    ' + ' - ' + evi.name + '
    ';\r\n else\r\n msjPasoPO = msjPasoPO + ' - ' + evi.name + '
    ';\r\n swPasoPO= true;\r\n } \r\n }\r\n });\r\n if (msjPasoC != '') { msjAdvertencia = msjPasoC + '
    ' }\r\n if (msjPasoP != '') { msjAdvertencia = msjAdvertencia + msjPasoP + '
    ' }\r\n if (msjPasoPO != '') { msjAdvertencia = msjAdvertencia + msjPasoPO + '
    ' }\r\n\r\n //*archivos\r\n let swPasoA = false;\r\n let msjPasoA = '';\r\n //console.clear();\r\n //console.log('***validaPlantilla()*************pfcDetallesStore.misArchivos', pfcDetallesStore.misArchivos);\r\n let detectaArchABorrar = 0;\r\n pfcDetallesStore.misArchivos.map((ma:any, indexMa:any) => {\r\n //console.log('--',ma.idTipo, '-- ma.archivos.length', ma.archivos.length)\r\n if (ma.archivos.length==0) {\r\n if (ma.activo) {\r\n if (swPasoA==false)\r\n msjPasoA = msjPasoA + eti.mensajes[6].text + '
    ' + ' - ' + ma.descripcion + '
    ';\r\n else\r\n msjPasoA = msjPasoA + ' - ' + ma.descripcion + '
    ';\r\n swPasoA= true;\r\n }\r\n }\r\n else {\r\n //console.log('pase1');\r\n detectaArchABorrar=0;\r\n ma.archivos.map((arch:any, indexArch:any) => {\r\n //console.log('pase1');\r\n if (arch.action==2) {detectaArchABorrar= detectaArchABorrar+1; } \r\n })\r\n console.log('pase3', detectaArchABorrar, '--ma.archivos.length', ma.archivos.length);\r\n if (ma.archivos.length == detectaArchABorrar) {\r\n //console.log('pase4');\r\n if (swPasoA==false)\r\n msjPasoA = msjPasoA + eti.mensajes[6].text + '
    ' + ' - ' + ma.descripcion + '
    ';\r\n else\r\n msjPasoA = msjPasoA + ' - ' + ma.descripcion + '
    ';\r\n swPasoA= true;\r\n\r\n }\r\n }\r\n }) \r\n if (msjPasoA != '') {msjAdvertencia = msjAdvertencia + msjPasoA }\r\n //nrFilesUpload(); //LLAMADO A ARCHIVOS DEL DROPZONE\r\n \r\n //console.log('msjAdvertencia: ',msjAdvertencia);\r\n }\r\n \r\n const botonGuardarUploadFilesAnalysis = () => {\r\n //alert('guardaArchivosNoPrevista');\r\n var formData = new FormData();\r\n formData.append(\"idau\", props.pfcId);\r\n let swGuardaNvos = false;\r\n if (nrFilesNuevos.length > 0 ) {\r\n nrFilesNuevos.map((f:any) => { formData.append(\"classified\", f.classified) });\r\n nrFilesNuevos.map((f:any) => { formData.append(\"Files\", f) });\r\n swGuardaNvos = true;\r\n }\r\n if (crFilesNuevos.length > 0 ) {\r\n crFilesNuevos.map((f:any) => { formData.append(\"classified\", f.classified) });\r\n crFilesNuevos.map((f:any) => { formData.append(\"Files\", f) });\r\n swGuardaNvos = true;\r\n }\r\n if (proofFilesNuevos.length > 0 ) {\r\n proofFilesNuevos.map((f:any) => { formData.append(\"classified\", f.classified) });\r\n proofFilesNuevos.map((f:any) => { formData.append(\"Files\", f) });\r\n swGuardaNvos = true;\r\n }\r\n if (justifyFilesNuevos.length > 0 ) {\r\n justifyFilesNuevos.map((f:any) => { formData.append(\"classified\", f.classified) });\r\n justifyFilesNuevos.map((f:any) => { formData.append(\"Files\", f) });\r\n swGuardaNvos = true;\r\n }\r\n if (apiFilesNuevos.length > 0 ) {\r\n apiFilesNuevos.map((f:any) => { formData.append(\"classified\", f.classified) });\r\n apiFilesNuevos.map((f:any) => { formData.append(\"Files\", f) });\r\n swGuardaNvos = true;\r\n }\r\n if (swGuardaNvos){\r\n //*ejecutamos api Files/UploadFilesAnalysis\r\n //console.log('---------------------------------formData', formData)\r\n setCargandoSpin(true);\r\n filesServicio.cargaUploadFilesAnalysis(props.tokenStore, formData)\r\n .then((response:any) => {\r\n //console.log('response.................',response)\r\n if (response.status==200) { //revisa si hay error\r\n guardaUploadFilesAnalysisStore(response.data).then( function(uploadFilesAnalysisFront:any) { \r\n //console.log('-----------------------------------uploadFilesAnalysisFront', uploadFilesAnalysisFront )\r\n //hasta que termine la promesa mandamos el siguiente api\r\n botonGuardarUpdatebyUser(); //segundo guardamos en API: Analysis/UpdatebyUser\r\n ////recargaRD(); //actualizamos páginas de atrás\r\n }); \r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaInsertbyUser): \", ex.response);\r\n generaObjErrorFilesStore(ex.response, true, '', '', 'RD.documentar/UploadFilesAnalysis','RD');\r\n recargaPaginaSSC();\r\n setCargandoSpin(false);\r\n })\r\n }\r\n else {\r\n botonGuardarUpdatebyUser(); //segundo guardamos en API: Analysis/UpdatebyUser\r\n } \r\n }\r\n\r\n const botonGuardarUpdatebyUser = () => {\r\n //*armamos body\r\n let bodyUpdatebyUser = { id: 0, evidence:[], files: [] }; \r\n let evidence:any = [];\r\n let elemEvidence:any = { id:0, feature:[], proof: [] } ;\r\n let feature:any = [];\r\n let proof:any = [];\r\n let elemProof = { id: 0, other: '' };\r\n let files:any = [];\r\n let elemFiles = { id: 0, action: 0, path: '', name: '', originalfullname: '', classified: '', createdAt:'' };\r\n \r\n bodyUpdatebyUser.id = props.pfcId; //1\r\n \r\n \r\n let pasoCatP:any = [];\r\n //evidence - evidencias\r\n pfcDetallesStore.evidence?.map((ev:any) => {\r\n feature=[];\r\n elemEvidence = { id:0, feature:[], proof: [] } ;\r\n elemEvidence.id = ev.id //2.1\r\n \r\n pasoCatP = [];\r\n elemEvidence = { id:0, feature:[], proof: [] } ;\r\n elemEvidence.id = ev.id;\r\n ev.miCatCaracteristicas?.map((cc:any) => { if (cc.activo) { feature.push(cc.id) } });\r\n elemEvidence.feature = feature; //2.2\r\n \r\n proof=[];\r\n ev.miCatPruebas?.map((cp:any) => {\r\n elemProof = { id: cp.id, other: cp.otraTexto };\r\n if (cp.activo) { proof.push(elemProof) }\r\n });\r\n elemEvidence.proof = proof; //2.3\r\n \r\n evidence.push(elemEvidence);\r\n });\r\n \r\n //files - archivos \r\n pfcDetallesStore.misArchivos?.map((ma:any) => {\r\n ma.archivos?.map((ar:any) => {\r\n elemFiles = { id: ar.id, action: ar.action, classified: ar.classified, path: ar.path, name: ar.name, originalfullname: ar.originalfullname, createdAt: ar.createdAt }; //3\r\n files.push(elemFiles);\r\n }); \r\n });\r\n \r\n bodyUpdatebyUser.evidence = evidence; //2\r\n \r\n bodyUpdatebyUser.files = files; //3\r\n \r\n //console.log('----bodyUpdatebyUser',bodyUpdatebyUser);\r\n \r\n //*ejecutamos api Analysis/UpdatebyUser\r\n \r\n setCargandoSpin(true);\r\n //llamando al api: Analysis/UpdatebyUser\r\n analysisServicio.cargaUpdatebyUser(props.tokenStore, bodyUpdatebyUser)\r\n .then((response:any) => {\r\n //console.log('response.................',response)\r\n if (response.status==200) { //revisa si hay error\r\n guardaUpdatebyUserStore(response.data).then( function(updatebyUserFront:any) { \r\n //cambiaProcesosxFrecuenciaStore(props.idPxF, miPDProposalFront.id, null, pasoDetalle, 'botonGuardarAPI'); \r\n setSwBotonGuardarFront(false); //ya guardo lo deshabilimos boton guardar en front\r\n \r\n //////recargaRDDocumentar(); //actualizamos páginas de atrás\r\n }); \r\n } \r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaUpdatebyUser): \", ex.response.status);\r\n generaObjErrorAnalysisStore(ex.response, true, '', '', 'VerRegistrar-Analysis/UpdateRateProposal','RD');\r\n setCargandoSpin(false);\r\n })\r\n }\r\n \r\n const botonEnviar = () => { \r\n // alert('botonEnviar');\r\n \r\n let bodyAPIEnviar= {id: 0, send: true}\r\n bodyAPIEnviar.id= props.pfcId;\r\n\r\n //llamando al api: Analysis/SendbyUser\r\n //setCargandoSpin(true); //ojo el SendEmail tarda mucho por eso se quito el spin para que suelte la página y siga trabajando el usuario en lo que manda el correo de manera paralela\r\n analysisServicio.cargaSendbyUser(props.tokenStore, bodyAPIEnviar)\r\n .then((response:any) => {\r\n //console.log('response.................',response)\r\n if (response.status==200) { //revisa si hay error\r\n guardaSendbyUserStore(response.data).then( function(sendbyUserFront:any) { \r\n //cambiaProcesosxFrecuenciaStore(props.idPxF, miPDProposalFront.id, null, pasoDetalle, 'botonGuardarAPI'); \r\n //setSwBotonGuardarFront(false); //ya guardo lo deshabilimos boton guardar en front\r\n //setSwBotonEnviarFront(false); //ya guardo lo deshabilimos boton guardar en front\r\n cambiaPFCDetalleStore(props.pfcId, null, null, null, 'botonEnviar');\r\n swal2.fire({\r\n icon: 'info',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'La documentación ha finalizado, se notifica al Responsable de Fase de evaluación para los efectos pertinentes',\r\n html: \"

    La propuesta de cambio esta disponible en el Tablero de control
    \",\r\n });\r\n //setCargandoSpin(false);\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n \r\n //se genera una notificación & recarga de valores de notificaciones para el encabezado (campana)\r\n let bodyAPINot= {idanalyseunit:0 }\r\n bodyAPINot.idanalyseunit = props.pfcId;\r\n //setCargandoSpin(true);\r\n notificationsServicio.cargaSendEmail(props.tokenStore, bodyAPINot)\r\n .then((response:any) => {\r\n //console.log('response.................', response)\r\n guardaSendEmailStore(response.data).then( function(sendEmailFront:any) { \r\n //console.log('se genera el correo por medio del api', sendEmailFront);\r\n /* swal2.fire({\r\n icon: 'info',\r\n cancelButtonColor: '#0077c8',\r\n cancelButtonText: \"Cerrar\",\r\n showCancelButton: true,\r\n showConfirmButton:false,\r\n width: \"50%\",\r\n title: 'La documentación ha finalizado, se notifica al Responsable de Fase de evaluación para los efectos pertinentes',\r\n html: \"

    La propuesta de cambio esta disponible en el Tablero de control
    \",\r\n }); */\r\n setSwBotonEnviarFront(false); // hasta que grabe envia\r\n recargaPaginaSSC_Not(); // para recargar las notificaciones (campana) en PaginaSSC\r\n }); \r\n //setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaSendEmail): \", ex.response.status);\r\n generaObjErrorNotificationsStore(ex.response, true, '', '', 'VerRegistrar-Notificatios/SendEmail','RP');\r\n //setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n recargaRDDocumentar(); //actualizamos páginas de atrás\r\n recargaRD(); //actualizamos página principal\r\n }); \r\n } \r\n //setCargandoSpin(false); \r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaSendbyUser): \", ex.response.status);\r\n generaObjErrorAnalysisStore(ex.response, true, '', '', 'VerRegistrar-Analysis/SendbyUser','RD');\r\n //setCargandoSpin(false);\r\n })\r\n }\r\n\r\n const desactivaBotonGuardarEnviar = () => { setSwBotonGuardarFront(false); setSwBotonEnviarFront(false)}\r\n\r\n //*----------DROPZONE--- NR (Revisión de necesidades) --INICIO --- *//\r\n //*constantes y variables\r\n let nrFilesIn = [] as any; //este elemento se uso para cargar archivos inválidos (puede omitirse)\r\n let nrMyFileCopia = [] as any; //copia de myFile (que es donde se guarda la lista de archivos cargados por el usuario) usada para hacer recorridos y comparaciones sin afectar el arreglo myFile\r\n let nrFilesNuevos:any = [];\r\n \r\n //const [nrMyFiles, setNrMyFiles] = useState(nrMisArchivosDropzone); //guarda el listado de elementos (archivos) cargados por el usuario//ojo lo subí al useEffect con la lectura del API\r\n const [nrFilesInvalid, setnrFilesInvalid] = useState([] as any); //este elemento se uso para cargar archivos inválidos\r\n \r\n //*funciones\r\n\r\n function NrMyDropzone() {\r\n //--useCallback //ya traemos los archivos -acceptedFiles acumula lo del cuadro de dialogo-\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n setSwDropzoneAdvertencia(false);\r\n\r\n acceptedFilesTemp.map((aft:any, indexAft:any) => {\r\n aft.id = indexAft;\r\n aft.action = 1;\r\n aft.classified = 'NR'; //*nvo\r\n aft.originalfullname = aft.path //*nvo\r\n aft.createdAt = dateStr;//*nvo\r\n });\r\n\r\n if (nrMyFiles.length != 0) {\r\n //console.log(':::: acceptedFilesTemp ', acceptedFilesTemp ) ;\r\n //*el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado \r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if ( nrMyFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n }\r\n /* acumula de acceptedFiles a nrMyFiles */\r\n setNrMyFiles([...nrMyFiles, ...acceptedFiles]);\r\n },\r\n [nrMyFiles]\r\n );\r\n\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n //alert('removeFile');\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n let x = etiGlobal.dropZone[11].desc;\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + etiGlobal.dropZone[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...nrMyFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setNrMyFiles(newFiles); //uso común del useState, actualiza nrMyFiles\r\n //console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n console.log( \"removeFile: que haré si se eliminan todos los elementos\" );\r\n setSwDropzoneAdvertencia(true);\r\n }\r\n }\r\n });\r\n };\r\n //--genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //--cada vez que se renderiza nrMyFiles genera esta función\r\n const files = nrMyFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n\r\n //--vista: -pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n <> \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    {etiGlobal.dropZone[7].desc}
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n const nrFilesUpload = () => {\r\n nrFilesIn = [] as any;\r\n nrMyFileCopia = [] as any;\r\n setnrFilesInvalid([]);\r\n nrMyFileCopia = [...nrMyFiles];\r\n //pfcDetallesStore.misArchivos[0].archivos = nrMyFiles;\r\n //console.log(\"nrMyFileCopia..---------------\",nrMyFileCopia, nrFilesIn.length);\r\n if (nrMyFileCopia.length == 0){\r\n msjAdvertencia = msjAdvertencia + '*Revisión de necesidades ' + '
    ';\r\n //console.log(\"msjAdvertencia\", msjAdvertencia);\r\n setSwDropzoneAdvertencia(false);\r\n nrFilesUploadContinue();\r\n //console.log('..............SwDropzoneAdvertencia', swDropzoneAdvertencia)\r\n }\r\n else { \r\n if (nrFilesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" +\r\n etiGlobal.dropZone[8].desc +\r\n \" \" +\r\n nrFilesIn.length +\r\n \"\" +\r\n etiGlobal.dropZone[17].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[18].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n //setOpenDivLoading(true);\r\n for (let f = nrFilesIn.length - 1; f >= 0; f--) {\r\n nrMyFileCopia.splice(nrFilesIn[f].idx, 1);\r\n }\r\n setNrMyFiles(nrMyFileCopia);\r\n setnrFilesInvalid(nrFilesIn);\r\n nrFilesUploadContinue();\r\n setSwRecarga(!swRecarga);\r\n } else {\r\n for (let f = nrFilesIn.length - 1; f >= 0; f--) {\r\n nrMyFileCopia.splice(nrFilesIn[f].idx, 1);\r\n }\r\n setNrMyFiles(nrMyFileCopia);\r\n console.log(\"files....\", setNrMyFiles(nrMyFileCopia))\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setNrMyFiles(nrMyFileCopia);\r\n setnrFilesInvalid(nrFilesIn);\r\n nrFilesUploadContinue();\r\n setSwRecarga(!swRecarga);\r\n }\r\n }\r\n };\r\n const nrFilesUploadContinue = () => { \r\n //alert('0'); \r\n if (nrMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + '**Revisión de necesidades ' + '
    ';\r\n }\r\n //else{ \r\n nrFilesIn = [] as any; \r\n nrFilesIn=nrMyFileCopia; //aquí tenemos que hay en dropzone (ya quitando los que elimino por el bote y con los nuevos)\r\n //console.log(\"eggp nrFilesIn-----------\",nrFilesIn);\r\n //console.log(\":::nrMyFiles-----------\",nrMyFiles); //aquí los que traemos del api\r\n nrFilesNuevos = _.filter(nrFilesIn, function(f:any) { return f.action == 1 });\r\n console.log(\":::::nrFilesNuevos-------------------\",nrFilesNuevos);\r\n nrGeneraAltasYBajas(nrFilesIn, nrFilesNuevos);//usado para armar la parte del file que ocupo el body del api\r\n setSwRecarga(!swRecarga)\r\n //} \r\n }\r\n\r\n const nrGeneraAltasYBajas = ( archivosEnDropzone: any, archivosNvos: any) => {\r\n //alert('1');\r\n //compara los dos arreglos para armar el body que ocupa: Decisions/UpdateRateProposal/es\r\n //console.log('-------------- nrGeneraAltasYBajas ----------');\r\n //console.log('archivosEnDropzone: ', archivosEnDropzone);\r\n //console.log('archivosNvos: ', archivosNvos);\r\n archivosNR=[];\r\n archivosNR= JSON.parse(JSON.stringify(nrArchivosStore));\r\n //console.log('archivosNR: ', archivosNR);\r\n let swSigue = false;\r\n \r\n //buscamos las bajas\r\n let idArchivosDropzone = _.pluck(archivosEnDropzone, 'id');\r\n //console.log('idArchivosOriginales.........',idArchivosDropzone);\r\n archivosNR.map((a:any, indexA:any) => {\r\n swSigue = false;\r\n idArchivosDropzone.map((idD:any, indexidD:any) => {\r\n if (idD == a.id) {swSigue = true }\r\n });\r\n if (swSigue==false) { a.action = 2 }\r\n });\r\n\r\n //agregamos los nuevos\r\n let path = props.pfcId + '\\\\NR';\r\n if (archivosNvos.length != 0) { \r\n archivosNvos.map((n:any, indexN:any) => { \r\n archivosNR.push ({ \"id\": indexN, \"action\":1, \"classified\":\"NR\", \"path\": path, \"name\": n.name, \"originalfullname\":n.name, \"createdAt\":n.createdAt, \"descarga\":\"\"})\r\n }) \r\n };\r\n\r\n cambiaPFCDetalleStore(props.pfcId, null, archivosNR, null, 'cambiaFilesNR'); \r\n console.log('archivosNR.........',archivosNR);\r\n\r\n } \r\n //*----------DROPZONE--- NR (Revisión de necesidades) --FIN --- *//\r\n\r\n\r\n //*----------DROPZONE--- CR (Revisión de necesidades) --INICIO --- *//\r\n //*constantes y variables\r\n let crFilesIn = [] as any; \r\n let crMyFileCopia = [] as any; \r\n let crFilesNuevos:any = [];\r\n const [crFilesInvalid, setcrFilesInvalid] = useState([] as any); \r\n \r\n //*funciones:\r\n function CrMyDropzone() {\r\n //--useCallback //ya traemos los archivos (acceptedFiles acumula lo del cuadro de dialogo)\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n setSwDropzoneAdvertencia(false);\r\n\r\n acceptedFilesTemp.map((aft:any, indexAft:any) => {\r\n aft.id = indexAft;\r\n aft.action = 1;\r\n aft.classified = 'CR'; //*nvo\r\n aft.originalfullname = aft.path //*nvo\r\n aft.createdAt = dateStr;//*nvo\r\n });\r\n\r\n if (crMyFiles.length != 0) {\r\n //console.log(':::: acceptedFilesTemp ', acceptedFilesTemp ) ;\r\n //*el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado \r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if (\r\n crMyFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n }\r\n /* acumula de acceptedFiles a crMyFiles */\r\n setCrMyFiles([...crMyFiles, ...acceptedFiles]);\r\n },\r\n [crMyFiles]\r\n );\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n //alert('removeFile');\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n let x = etiGlobal.dropZone[11].desc;\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + etiGlobal.dropZone[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...crMyFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setCrMyFiles(newFiles); //uso común del useState, actualiza crMyFiles\r\n //console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n console.log( \"removeFile: que haré si se eliminan todos los elementos\" );\r\n setSwDropzoneAdvertencia(true);\r\n }\r\n }\r\n });\r\n };\r\n //--genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //--cada vez que se renderiza crMyFiles genera esta función\r\n const files = crMyFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n //--vista: -pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n <> \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    {etiGlobal.dropZone[7].desc}
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n const crFilesUpload = () => {\r\n crFilesIn = [] as any;\r\n crMyFileCopia = [] as any;\r\n setcrFilesInvalid([]);\r\n crMyFileCopia = [...crMyFiles];\r\n //console.log(\"crMyFileCopia..---------------\",crMyFileCopia, crFilesIn.length);\r\n if (crMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + 'Relación de cambios' + '
    ';\r\n setSwDropzoneAdvertencia(false);\r\n crFilesUploadContinue();\r\n //console.log('..............SwDropzoneAdvertencia', swDropzoneAdvertencia)\r\n }\r\n else { \r\n if (crFilesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html:\r\n \"
    \" +\r\n etiGlobal.dropZone[8].desc +\r\n \" \" +\r\n crFilesIn.length +\r\n \"\" +\r\n etiGlobal.dropZone[17].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[18].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n //setOpenDivLoading(true);\r\n for (let f = crFilesIn.length - 1; f >= 0; f--) {\r\n crMyFileCopia.splice(crFilesIn[f].idx, 1);\r\n }\r\n setCrMyFiles(crMyFileCopia);\r\n setcrFilesInvalid(crFilesIn);\r\n crFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n } else {\r\n for (let f = crFilesIn.length - 1; f >= 0; f--) {\r\n crMyFileCopia.splice(crFilesIn[f].idx, 1);\r\n }\r\n setCrMyFiles(crMyFileCopia);\r\n console.log(\"files....\", setCrMyFiles(crMyFileCopia))\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setCrMyFiles(crMyFileCopia);\r\n setcrFilesInvalid(crFilesIn);\r\n crFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n }\r\n }\r\n };\r\n const crFilesUploadContinue = () => { \r\n if (crMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + etiGlobal.dropZone[20].desc + '
    ';\r\n }\r\n //else{ \r\n crFilesIn = [] as any; \r\n crFilesIn=crMyFileCopia; //aquí tenemos que hay en dropzone (ya quitando los que elimino por el bote y con los nuevos)\r\n //console.log(\"eggp crFilesIn-----------\",crFilesIn);\r\n //console.log(\":::crMyFiles-----------\",crMyFiles); //aquí los que traemos del api\r\n crFilesNuevos = _.filter(crFilesIn, function(f:any) { return f.action == 1 });\r\n //console.log(\":::crFilesNuevos-------------------\",crFilesNuevos);\r\n crGeneraAltasYBajas(crFilesIn, crFilesNuevos);//usado para armar la parte del file que ocupo el body del api\r\n setSwRecarga(!swRecarga)\r\n //} \r\n } \r\n const crGeneraAltasYBajas = ( archivosEnDropzone: any, archivosNvos: any) => {\r\n //compara los dos arreglos para armar el body que ocupa: Decisions/UpdateRateProposal/es\r\n //console.log('-------------- crGeneraAltasYBajas ----------');\r\n //console.log('archivosEnDropzone: ', archivosEnDropzone);\r\n //console.log('archivosNvos: ', archivosNvos);\r\n archivosCR=[];\r\n archivosCR= JSON.parse(JSON.stringify(crArchivosStore));\r\n let swSigue = false;\r\n \r\n //buscamos las bajas\r\n let idArchivosDropzone = _.pluck(archivosEnDropzone, 'id');\r\n //console.log('idArchivosOriginales.........',idArchivosDropzone);\r\n archivosCR.map((a:any, indexA:any) => {\r\n swSigue = false;\r\n idArchivosDropzone.map((idD:any, indexidD:any) => {\r\n if (idD == a.id) {swSigue = true }\r\n });\r\n if (!swSigue) { a.action = 2 }\r\n });\r\n\r\n //agregamos los nuevos\r\n let path = props.pfcId + '\\\\CR';\r\n if (archivosNvos.length != 0) { \r\n archivosNvos.map((n:any, indexN:any) => { \r\n archivosCR.push ({ \"id\": indexN, \"action\":1, \"classified\":\"CR\", \"path\": path, \"name\": n.name, \"originalfullname\":n.name, \"createdAt\":n.createdAt, \"descarga\":\"\"})\r\n }) \r\n };\r\n cambiaPFCDetalleStore(props.pfcId, null, archivosCR, null, 'cambiaFilesCR'); \r\n console.log('archivosCR.........',archivosCR);\r\n\r\n } \r\n //*----------DROPZONE--- CR (Revisión de necesidades) --FIN --- *//\r\n\r\n //*----------DROPZONE--- PROOF (Revisión de necesidades) --INICIO --- *//\r\n //*constantes y variables\r\n let proofFilesIn = [] as any; \r\n let proofMyFileCopia = [] as any; \r\n let proofFilesNuevos:any = [];\r\n const [proofFilesInvalid, setproofFilesInvalid] = useState([] as any); \r\n \r\n //*funciones:\r\n function ProofMyDropzone() {\r\n //--useCallback //ya traemos los archivos (acceptedFiles acumula lo del cuadro de dialogo)\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n setSwDropzoneAdvertencia(false);\r\n\r\n acceptedFilesTemp.map((aft:any, indexAft:any) => {\r\n aft.id = indexAft;\r\n aft.action = 1;\r\n aft.classified = 'PROOF'; //*nvo\r\n aft.originalfullname = aft.path //*nvo\r\n aft.createdAt = dateStr;//*nvo\r\n });\r\n\r\n if (proofMyFiles.length != 0) {\r\n //console.log(':::: acceptedFilesTemp ', acceptedFilesTemp ) ;\r\n //*el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado \r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if (\r\n proofMyFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n }\r\n /* acumula de acceptedFiles a proofMyFiles */\r\n setProofMyFiles([...proofMyFiles, ...acceptedFiles]);\r\n },\r\n [proofMyFiles]\r\n );\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n //alert('removeFile');\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n let x = etiGlobal.dropZone[11].desc;\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + etiGlobal.dropZone[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...proofMyFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setProofMyFiles(newFiles); //uso común del useState, actualiza proofMyFiles\r\n //console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n console.log( \"removeFile: que haré si se eliminan todos los elementos\" );\r\n setSwDropzoneAdvertencia(true);\r\n }\r\n }\r\n });\r\n };\r\n //--genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //--cada vez que se renderiza proofMyFiles genera esta función\r\n const files = proofMyFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n //--vista: -pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n <> \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    {etiGlobal.dropZone[7].desc}
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n const proofFilesUpload = () => {\r\n proofFilesIn = [] as any;\r\n proofMyFileCopia = [] as any;\r\n setproofFilesInvalid([]);\r\n proofMyFileCopia = [...proofMyFiles];\r\n //console.log(\"proofMyFileCopia..---------------\",proofMyFileCopia, proofFilesIn.length);\r\n if (proofMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + '*Reporte de resultados de las pruebas' + '
    ';\r\n setSwDropzoneAdvertencia(false);\r\n proofFilesUploadContinue();\r\n //console.log('..............SwDropzoneAdvertencia', swDropzoneAdvertencia)\r\n }\r\n else { \r\n if (proofFilesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html:\r\n \"
    \" +\r\n etiGlobal.dropZone[8].desc +\r\n \" \" +\r\n proofFilesIn.length +\r\n \"\" +\r\n etiGlobal.dropZone[17].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[18].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n //setOpenDivLoading(true);\r\n for (let f = proofFilesIn.length - 1; f >= 0; f--) {\r\n proofMyFileCopia.splice(proofFilesIn[f].idx, 1);\r\n }\r\n setProofMyFiles(proofMyFileCopia);\r\n setproofFilesInvalid(proofFilesIn);\r\n proofFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n } else {\r\n for (let f = proofFilesIn.length - 1; f >= 0; f--) {\r\n proofMyFileCopia.splice(proofFilesIn[f].idx, 1);\r\n }\r\n setProofMyFiles(proofMyFileCopia);\r\n console.log(\"files....\", setProofMyFiles(proofMyFileCopia))\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setProofMyFiles(proofMyFileCopia);\r\n setproofFilesInvalid(proofFilesIn);\r\n proofFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n }\r\n }\r\n };\r\n const proofFilesUploadContinue = () => { \r\n if (proofMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + etiGlobal.dropZone[20].desc + '
    ';\r\n }\r\n //else{ \r\n proofFilesIn = [] as any; \r\n proofFilesIn=proofMyFileCopia; //aquí tenemos que hay en dropzone (ya quitando los que elimino por el bote y con los nuevos)\r\n //console.log(\"eggp proofFilesIn-----------\",proofFilesIn);\r\n //console.log(\":::proofMyFiles-----------\",proofMyFiles); //aquí los que traemos del api\r\n proofFilesNuevos = _.filter(proofFilesIn, function(f:any) { return f.action == 1 });\r\n //console.log(\":::proofFilesNuevos-------------------\",proofFilesNuevos);\r\n proofGeneraAltasYBajas(proofFilesIn, proofFilesNuevos);//usado para armar la parte del file que ocupo el body del api\r\n setSwRecarga(!swRecarga)\r\n //} \r\n } \r\n const proofGeneraAltasYBajas = ( archivosEnDropzone: any, archivosNvos: any) => {\r\n //compara los dos arreglos para armar el body que ocupa: Decisions/UpdateRateProposal/es\r\n //console.log('-------------- proofGeneraAltasYBajas ----------');\r\n //console.log('archivosEnDropzone: ', archivosEnDropzone);\r\n //console.log('archivosNvos: ', archivosNvos);\r\n archivosPROOF=[];\r\n archivosPROOF= JSON.parse(JSON.stringify(proofArchivosStore));\r\n let swSigue = false;\r\n \r\n //buscamos las bajas\r\n let idArchivosDropzone = _.pluck(archivosEnDropzone, 'id');\r\n //console.log('idArchivosOriginales.........',idArchivosDropzone);\r\n archivosPROOF.map((a:any, indexA:any) => {\r\n swSigue = false;\r\n idArchivosDropzone.map((idD:any, indexidD:any) => {\r\n if (idD == a.id) {swSigue = true }\r\n });\r\n if (!swSigue) { a.action = 2 }\r\n });\r\n\r\n //agregamos los nuevos\r\n let path = props.pfcId + '\\\\PROOF';\r\n if (archivosNvos.length != 0) { \r\n archivosNvos.map((n:any, indexN:any) => { \r\n archivosPROOF.push ({ \"id\": indexN, \"action\":1, \"classified\":\"PROOF\", \"path\": path, \"name\": n.name, \"originalfullname\":n.name, \"createdAt\":n.createdAt, \"descarga\":\"\"})\r\n }) \r\n };\r\n cambiaPFCDetalleStore(props.pfcId, null, archivosPROOF, null, 'cambiaFilesPROOF'); \r\n console.log('archivosPROOF.........',archivosPROOF);\r\n\r\n } \r\n //*----------DROPZONE--- PROOF (Revisión de necesidades) --FIN --- *//\r\n\r\n //*----------DROPZONE--- JUSTIFY(Revisión de necesidades) --INICIO --- *//\r\n //*constantes y variables\r\n let justifyFilesIn = [] as any; \r\n let justifyMyFileCopia = [] as any; \r\n let justifyFilesNuevos:any = [];\r\n const [justifyFilesInvalid, setjustifyFilesInvalid] = useState([] as any); \r\n \r\n //*funciones:\r\n function JustifyMyDropzone() {\r\n //--useCallback //ya traemos los archivos (acceptedFiles acumula lo del cuadro de dialogo)\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n setSwDropzoneAdvertencia(false);\r\n\r\n acceptedFilesTemp.map((aft:any, indexAft:any) => {\r\n aft.id = indexAft;\r\n aft.action = 1;\r\n aft.classified = 'JUSTIFY'; //*nvo\r\n aft.originalfullname = aft.path //*nvo\r\n aft.createdAt = dateStr;//*nvo\r\n });\r\n\r\n if (justifyMyFiles.length != 0) {\r\n //console.log(':::: acceptedFilesTemp ', acceptedFilesTemp ) ;\r\n //*el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado \r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if (\r\n justifyMyFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n }\r\n /* acumula de acceptedFiles a justifyMyFiles */\r\n setJustifyMyFiles([...justifyMyFiles, ...acceptedFiles]);\r\n },\r\n [justifyMyFiles]\r\n );\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n //alert('removeFile');\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n let x = etiGlobal.dropZone[11].desc;\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + etiGlobal.dropZone[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...justifyMyFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setJustifyMyFiles(newFiles); //uso común del useState, actualiza justifyMyFiles\r\n //console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n console.log( \"removeFile: que haré si se eliminan todos los elementos\" );\r\n setSwDropzoneAdvertencia(true);\r\n }\r\n }\r\n });\r\n };\r\n //--genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //--cada vez que se renderiza justifyMyFiles genera esta función\r\n const files = justifyMyFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n //--vista: -pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n <> \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    {etiGlobal.dropZone[7].desc}
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n const justifyFilesUpload = () => {\r\n justifyFilesIn = [] as any;\r\n justifyMyFileCopia = [] as any;\r\n setjustifyFilesInvalid([]);\r\n justifyMyFileCopia = [...justifyMyFiles];\r\n //console.log(\"justifyMyFileCopia..---------------\",justifyMyFileCopia, justifyFilesIn.length);\r\n if (justifyMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + '*Plan de acción' + '
    ';\r\n setSwDropzoneAdvertencia(false);\r\n justifyFilesUploadContinue();\r\n //console.log('..............SwDropzoneAdvertencia', swDropzoneAdvertencia)\r\n }\r\n else { \r\n if (justifyFilesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html:\r\n \"
    \" +\r\n etiGlobal.dropZone[8].desc +\r\n \" \" +\r\n justifyFilesIn.length +\r\n \"\" +\r\n etiGlobal.dropZone[17].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[18].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n //setOpenDivLoading(true);\r\n for (let f = justifyFilesIn.length - 1; f >= 0; f--) {\r\n justifyMyFileCopia.splice(justifyFilesIn[f].idx, 1);\r\n }\r\n setJustifyMyFiles(justifyMyFileCopia);\r\n setjustifyFilesInvalid(justifyFilesIn);\r\n justifyFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n } else {\r\n for (let f = justifyFilesIn.length - 1; f >= 0; f--) {\r\n justifyMyFileCopia.splice(justifyFilesIn[f].idx, 1);\r\n }\r\n setJustifyMyFiles(justifyMyFileCopia);\r\n console.log(\"files....\", setJustifyMyFiles(justifyMyFileCopia))\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setJustifyMyFiles(justifyMyFileCopia);\r\n setjustifyFilesInvalid(justifyFilesIn);\r\n justifyFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n }\r\n }\r\n };\r\n const justifyFilesUploadContinue = () => { \r\n if (justifyMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + etiGlobal.dropZone[20].desc + '
    ';\r\n }\r\n //else{ \r\n justifyFilesIn = [] as any; \r\n justifyFilesIn=justifyMyFileCopia; //aquí tenemos que hay en dropzone (ya quitando los que elimino por el bote y con los nuevos)\r\n //console.log(\"eggp justifyFilesIn-----------\",justifyFilesIn);\r\n //console.log(\":::justifyMyFiles-----------\",justifyMyFiles); //aquí los que traemos del api\r\n justifyFilesNuevos = _.filter(justifyFilesIn, function(f:any) { return f.action == 1 });\r\n //console.log(\":::justifyFilesNuevos-------------------\",justifyFilesNuevos);\r\n justifyGeneraAltasYBajas(justifyFilesIn, justifyFilesNuevos);//usado para armar la parte del file que ocupo el body del api\r\n setSwRecarga(!swRecarga)\r\n //} \r\n } \r\n const justifyGeneraAltasYBajas = ( archivosEnDropzone: any, archivosNvos: any) => {\r\n //compara los dos arreglos para armar el body que ocupa: Decisions/UpdateRateProposal/es\r\n //console.log('-------------- justifyGeneraAltasYBajas ----------');\r\n //console.log('archivosEnDropzone: ', archivosEnDropzone);\r\n //console.log('archivosNvos: ', archivosNvos);\r\n archivosJUSTIFY=[];\r\n archivosJUSTIFY= JSON.parse(JSON.stringify(justifyArchivosStore));\r\n let swSigue = false;\r\n \r\n //buscamos las bajas\r\n let idArchivosDropzone = _.pluck(archivosEnDropzone, 'id');\r\n //console.log('idArchivosOriginales.........',idArchivosDropzone);\r\n archivosJUSTIFY.map((a:any, indexA:any) => {\r\n swSigue = false;\r\n idArchivosDropzone.map((idD:any, indexidD:any) => {\r\n if (idD == a.id) {swSigue = true }\r\n });\r\n if (!swSigue) { a.action = 2 }\r\n });\r\n\r\n //agregamos los nuevos\r\n let path = props.pfcId + '\\\\JUSTIFY';\r\n if (archivosNvos.length != 0) { \r\n archivosNvos.map((n:any, indexN:any) => { \r\n archivosJUSTIFY.push ({ \"id\": indexN, \"action\":1, \"classified\":\"JUSTIFY\", \"path\": path, \"name\": n.name, \"originalfullname\":n.name, \"createdAt\":n.createdAt, \"descarga\":\"\"})\r\n }) \r\n };\r\n cambiaPFCDetalleStore(props.pfcId, null, archivosJUSTIFY, null, 'cambiaFilesJUSTIFY'); \r\n console.log('archivosJUSTIFY.........',archivosJUSTIFY);\r\n\r\n } \r\n //*----------DROPZONE--- JUSTIFY(Revisión de necesidades) --FIN --- *// \r\n\r\n //*----------DROPZONE--- API(Revisión de necesidades) --INICIO --- *//\r\n //*constantes y variables\r\n let apiFilesIn = [] as any;\r\n let apiMyFileCopia = [] as any;\r\n let apiFilesNuevos:any = [];\r\n const [apiFilesInvalid, setapiFilesInvalid] = useState([] as any); \r\n \r\n //*funciones:\r\n function ApiMyDropzone() {\r\n //--useCallback //ya traemos los archivos (acceptedFiles acumula lo del cuadro de dialogo)\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n setSwDropzoneAdvertencia(false);\r\n\r\n acceptedFilesTemp.map((aft:any, indexAft:any) => {\r\n aft.id = indexAft;\r\n aft.action = 1;\r\n aft.classified = 'API'; //*nvo\r\n aft.originalfullname = aft.path //*nvo\r\n aft.createdAt = dateStr;//*nvo\r\n });\r\n\r\n if (apiMyFiles.length != 0) {\r\n //console.log(':::: acceptedFilesTemp ', acceptedFilesTemp ) ;\r\n //*el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado \r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if (\r\n apiMyFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n }\r\n /* acumula de acceptedFiles a apiMyFiles */\r\n setApiMyFiles([...apiMyFiles, ...acceptedFiles]);\r\n },\r\n [apiMyFiles]\r\n );\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n //alert('removeFile');\r\n setSwBotonGuardarFront(true);\r\n setSwBotonEnviarFront(false);\r\n let x = etiGlobal.dropZone[11].desc;\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + etiGlobal.dropZone[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...apiMyFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setApiMyFiles(newFiles); //uso común del useState, actualiza apiMyFiles\r\n //console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n console.log( \"removeFile: que haré si se eliminan todos los elementos\" );\r\n setSwDropzoneAdvertencia(true);\r\n }\r\n }\r\n });\r\n };\r\n //--genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //--cada vez que se renderiza apiMyFiles genera esta función\r\n const files = apiMyFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n //--vista: -pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n <> \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    {etiGlobal.dropZone[7].desc}
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n const apiFilesUpload = () => {\r\n apiFilesIn = [] as any;\r\n apiMyFileCopia = [] as any;\r\n setapiFilesInvalid([]);\r\n apiMyFileCopia = [...apiMyFiles];\r\n //console.log(\"apiMyFileCopia..---------------\",apiMyFileCopia, apiFilesIn.length);\r\n if (apiMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + '*Justificación de no realizar pruebas' + '
    ';\r\n setSwDropzoneAdvertencia(false);\r\n apiFilesUploadContinue();\r\n //console.log('..............SwDropzoneAdvertencia', swDropzoneAdvertencia)\r\n }\r\n else { \r\n if (apiFilesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n swal2.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html:\r\n \"
    \" +\r\n etiGlobal.dropZone[8].desc +\r\n \" \" +\r\n apiFilesIn.length +\r\n \"\" +\r\n etiGlobal.dropZone[17].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[18].desc +\r\n \"

    \" +\r\n etiGlobal.dropZone[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n //setOpenDivLoading(true);\r\n for (let f = apiFilesIn.length - 1; f >= 0; f--) {\r\n apiMyFileCopia.splice(apiFilesIn[f].idx, 1);\r\n }\r\n setApiMyFiles(apiMyFileCopia);\r\n setapiFilesInvalid(apiFilesIn);\r\n apiFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n } else {\r\n for (let f = apiFilesIn.length - 1; f >= 0; f--) {\r\n apiMyFileCopia.splice(apiFilesIn[f].idx, 1);\r\n }\r\n setApiMyFiles(apiMyFileCopia);\r\n console.log(\"files....\", setApiMyFiles(apiMyFileCopia))\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setApiMyFiles(apiMyFileCopia);\r\n setapiFilesInvalid(apiFilesIn);\r\n apiFilesUploadContinue();\r\n setSwRecarga(swRecarga);\r\n }\r\n }\r\n };\r\n const apiFilesUploadContinue = () => { \r\n if (apiMyFileCopia.length===0){\r\n msjAdvertencia = msjAdvertencia + etiGlobal.dropZone[20].desc + '
    ';\r\n }\r\n //else{ \r\n apiFilesIn = [] as any; \r\n apiFilesIn=apiMyFileCopia; //aquí tenemos que hay en dropzone (ya quitando los que elimino por el bote y con los nuevos)\r\n //console.log(\"eggp apiFilesIn-----------\",apiFilesIn);\r\n //console.log(\":::apiMyFiles-----------\",apiMyFiles); //aquí los que traemos del api\r\n apiFilesNuevos = _.filter(apiFilesIn, function(f:any) { return f.action == 1 });\r\n //console.log(\":::apiFilesNuevos-------------------\",apiFilesNuevos);\r\n apiGeneraAltasYBajas(apiFilesIn, apiFilesNuevos);//usado para armar la parte del file que ocupo el body del api\r\n setSwRecarga(!swRecarga)\r\n //} \r\n } \r\n const apiGeneraAltasYBajas = ( archivosEnDropzone: any, archivosNvos: any) => {\r\n //compara los dos arreglos para armar el body que ocupa: Decisions/UpdateRateProposal/es\r\n //console.log('-------------- apiGeneraAltasYBajas ----------');\r\n //console.log('archivosEnDropzone: ', archivosEnDropzone);\r\n //console.log('archivosNvos: ', archivosNvos);\r\n archivosAPI=[];\r\n archivosAPI= JSON.parse(JSON.stringify(apiArchivosStore));\r\n let swSigue = false;\r\n \r\n //buscamos las bajas\r\n let idArchivosDropzone = _.pluck(archivosEnDropzone, 'id');\r\n //console.log('idArchivosOriginales.........',idArchivosDropzone);\r\n archivosAPI.map((a:any, indexA:any) => {\r\n swSigue = false;\r\n idArchivosDropzone.map((idD:any, indexidD:any) => {\r\n if (idD == a.id) {swSigue = true }\r\n });\r\n if (!swSigue) { a.action = 2 }\r\n });\r\n\r\n //agregamos los nuevos\r\n let path = props.pfcId + '\\\\API';\r\n if (archivosNvos.length != 0) { \r\n archivosNvos.map((n:any, indexN:any) => { \r\n archivosAPI.push ({ \"id\": indexN, \"action\":1, \"classified\":\"API\", \"path\": path, \"name\": n.name, \"originalfullname\":n.name, \"createdAt\":n.createdAt, \"descarga\":\"\"})\r\n }) \r\n };\r\n cambiaPFCDetalleStore(props.pfcId, null, archivosAPI, null, 'cambiaFilesAPI'); \r\n console.log('archivosAPI.........',archivosAPI);\r\n\r\n } \r\n //*----------DROPZONE--- API(Revisión de necesidades) --FIN --- *// \r\n\r\n //*vista\r\n return (\r\n <>\r\n {/* encabezado: acronimo & frecuencia & ciclo & decisiones tomadas en RP */}\r\n {/* subencabezado: nombre del proceso & estado del proceso*/}\r\n
    \r\n

    {pfcDetallesFront.acronym} / {pfcDetallesFront.frequencyname} / {pfcDetallesFront.cyclename}   \r\n { pfcDetallesFront.decisionTexto?.map((dt:any, indexdT:any) => (\r\n (<>\r\n \r\n {dt}   \r\n \r\n )\r\n ))} \r\n

    \r\n
    {pfcDetallesFront.processname}  \r\n \r\n {pfcDetallesFront.estatusProceso} \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n {/* contenido */}\r\n
    \r\n\r\n {/* Propuesta(s) */}\r\n
    \r\n {/*Propuesta(s) de cambio completa(s) */} \r\n {eti.contenido[1].text} \r\n\r\n {/* lista de propuesta(s) */} \r\n { pfcDetallesFront.proposal?.map((p:any, indexP:any) => (\r\n (x0 = `prop_${p.id}`),\r\n (<>\r\n  \r\n leePropuestaPorId(p.id, indexP)} className=\"text-link cursorHand ng-binding\">{p.folio}  \r\n \r\n )\r\n ))}\r\n \r\n {/* abre Propuesta de cambio seleccionada */}\r\n {swAbrePropuesta &&\r\n (<>\r\n
    \r\n {/* encabezado: boton para cerrar */}\r\n \r\n {/* contenido propuesta */}\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n
    \r\n\r\n {/* Evidencias*/}\r\n
    \r\n {/* Evidencias de la fase de diseño que serán modificadas por el cambio & art & # evidencias */}\r\n {eti.contenido[2].text}\r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}

    \r\n
    \r\n
    \r\n {totalEvidencias}\r\n {eti.etiquetas[9].text} \r\n \r\n {/* panels con evidencias encontradas en pfcDetalles */}\r\n
    \r\n {/* { pfcDetallesStore.evidence?.map((ev:any, indexEv:any) => ( */}\r\n { pfcDetallesFront.evidence?.map((ev:any, indexEv:any) => ( \r\n (x0 = `evi_${ev.id}`),\r\n /*x2 forma el contendio del header del panel*/\r\n (x2 = \r\n (<>\r\n
    \r\n {ev.name} \r\n
    \r\n )\r\n ),\r\n (<>\r\n
    \r\n \r\n abreCierraEvidenciaDetalles(indexEv, ev)}\r\n >\r\n \r\n {ev.abierto\r\n && (<>\r\n \r\n ) \r\n }\r\n \r\n )\r\n ))}\r\n
    \r\n
    \r\n
    \r\n\r\n {/* Posible error (combinación de Previstas y No previstas) */}\r\n { totalDecision > 1 &&\r\n (<> \r\n
    \r\n )\r\n }\r\n\r\n {/* Archivos (cajas dropzone): */}\r\n { pfcDetallesStore.misArchivos?.map((ma:any, indexMA:any) => (\r\n (x0 = `articulo10${ma.art}`),\r\n (<>\r\n { ma.activo &&\r\n (<>\r\n
    \r\n {ma.descripcion}: \r\n \r\n \r\n \r\n {articulos.hybridArticles[0].ch}

    \r\n Articulo: {ma.art}
    {articulos.articles[ma.art].description}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {ma.idTipo=='NR' &&(< NrMyDropzone /> ) } \r\n {ma.idTipo=='CR' &&(< CrMyDropzone /> ) } \r\n {ma.idTipo=='PROOF' &&(< ProofMyDropzone /> ) } \r\n {ma.idTipo=='JUSTIFY' &&(< JustifyMyDropzone /> ) } \r\n {ma.idTipo=='API' &&(< ApiMyDropzone /> ) } \r\n
    \r\n
    \r\n )\r\n } \r\n )\r\n ))} \r\n
    \r\n\r\n
    \r\n\r\n {/* pie: Botones */}\r\n
    \r\n
    \r\n { pfcDetallesFront.sent == false &&\r\n (<>\r\n { swBotonGuardarFront \r\n ? <>   \r\n : <>   \r\n }\r\n { swBotonEnviarFront \r\n ? <>   \r\n : <>   \r\n }\r\n )\r\n } \r\n  \r\n
    \r\n
    \r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && } \r\n \r\n );\r\n }\r\n\r\n\r\n /* switch(responseAPI.status){\r\n case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n } */\r\n\r\n","/* RD - Responsable de Diseño - toma decisión de la(s) propuesta(s) asignadas a su rol */\r\n\r\n//*react- recursos\r\n import { useState, useEffect} from \"react\";\r\n import { Panel, PanelGroup } from \"rsuite\";\r\n import ReactPaginate from \"react-paginate\";\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n import { SlidingPanel } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n//*clases \r\n import { Col, Row } from \"react-bootstrap\";\r\n //import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n\r\n//*imágenes\r\n import { BsEnvelope, BsCalendarEvent } from \"react-icons/bs\";\r\n import { AiOutlineDoubleLeft, AiOutlineDoubleRight } from \"react-icons/ai\";\r\n\r\n//*archivo & componentes (otros componentes enlazados)\r\n import RDDocumentar from \"./RD.Documentar\"; \r\n\r\n//*api's (servicios y store)\r\n \r\n import analysisServicio from \"../../../../api/recursos/analysis/analysis.servicio\"; \r\n import analysisStore from \"../../../../api/recursos/analysis/analysis.store\"; \r\n\r\n import catalogsServicio from \"../../../../api/recursos/catalogs/catalogs.servicio\"; \r\n import catalogsStore from \"../../../../api/recursos/catalogs/catalogs.store\"; \r\n\r\n import ptCatalogsServicio from \"../../../../api/recursos/ptCatalogs/ptCatalogs.servicio\"; \r\n import ptCatalogsStore from \"../../../../api/recursos/ptCatalogs/ptCatalogs.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\"\r\n\r\n//*interface \r\n interface propsRD {\r\n tokenStore: any;\r\n menuStore: any;\r\n quitaErrorPagina:any;\r\n recargaPaginaSSC:any;\r\n recargaPaginaSSC_Not:any;\r\n } \r\n\r\n//*componente\r\n export default function RD(props: propsRD){\r\n\r\n //*api store\r\n const { guardaGetAllDecisionStore, catDecisionesStore,\r\n guardaGetAllProofStore, catPruebasStore,\r\n generaObjErrorCatalogsStore } = \r\n catalogsStore((state:any) =>( { \r\n guardaGetAllDecisionStore: state.guardaGetAllDecisionStore,\r\n catDecisionesStore: state.catDecisionesStore,\r\n guardaGetAllProofStore: state.guardaGetAllProofStore,\r\n catPruebasStore: state.catPruebasStore,\r\n generaObjErrorCatalogsStore: state.generaObjErrorCatalogsStore\r\n }));\r\n\r\n const { guardaPTGetAllFeaturesStore, catPTCaracteristicasStore,\r\n generaObjErrorPtCatalogsStore } = \r\n ptCatalogsStore((state:any) =>( { \r\n guardaPTGetAllFeaturesStore: state.guardaPTGetAllFeaturesStore,\r\n catPTCaracteristicasStore: state.catPTCaracteristicasStore,\r\n generaObjErrorPtCatalogsStore: state.generaObjErrorPtCatalogsStore\r\n }));\r\n \r\n const { guardaGetSummarybyUserStore, pfcStore, \r\n generaObjErrorAnalysisStore } = \r\n analysisStore((state:any) =>( { \r\n guardaGetSummarybyUserStore: state.guardaGetSummarybyUserStore,\r\n pfcStore: state.pfcStore, \r\n generaObjErrorAnalysisStore: state.generaObjErrorAnalysisStore\r\n }));\r\n\r\n //*store's\r\n\r\n //*datos\r\n var _ = require('underscore');\r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.RD;\r\n let x0, x1, x1a, x2, x3 = '';\r\n //paginación: constante para el manejo de la \r\n const data = pfcStore; //data es quien se muestra para que generé la paginación\r\n const [currentItems, setCurrentItems] = useState([]); //elementos mostrados según páginación\r\n const [pageCount, setPageCount] = useState(0); //contabilidad de la página\r\n const [itemOffset, setItemOffset] = useState(0); //desplazamiento \r\n const itemsPerPage = 10; //número de elementos a mostrar\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaRD, setSwRecargaRD] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n\r\n const [pfcId, setpfcId] = useState(0);\r\n \r\n const [swPFC, setSwPFC] = useState(false);\r\n const [abreSP, setAbreSP] = useState(false);\r\n \r\n const [totalEvidencias, setTotalEvidencias] = useState(0); \r\n const [totalDecision, setTotalDecision] = useState(0); \r\n \r\n //*useEffect\r\n useEffect(()=> { // al montar\r\n console.log('RD - monto')\r\n props.quitaErrorPagina();\r\n console.clear();\r\n },[]);\r\n \r\n useEffect(()=> { //Carga cátalogo \"Pruebas\"- llama API - Catalogs/GetAllProof\r\n setCargandoSpin(true); \r\n catalogsServicio.cargaGetAllProof(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetAllProofStore(response.data).then( function(data:any) { \r\n //console.log('Cargo información de api en CatPruebasStore', data);\r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (GetAllProof): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'RD-Catalogs/GetAllProof', 'RD');\r\n setCargandoSpin(false); \r\n recargaPaginaSSC();\r\n })\r\n },[]);\r\n \r\n useEffect(()=> { //Carga cátalogo \"Decisiones\"- llama API - Catalogs/GetAllDecision\r\n setCargandoSpin(true); \r\n catalogsServicio.cargaGetAllDecision(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetAllDecisionStore(response.data).then( function(data:any) { \r\n //console.log('Cargo información de api en CatDecionesStore', data);\r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (GetAllDecision): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'RD-Catalogs/GetAllDecision','RD');\r\n setCargandoSpin(false); \r\n recargaPaginaSSC(); \r\n })\r\n },[]);\r\n\r\n useEffect(()=> { //Carga cátalogo \"Caracteristicas\"- llama API - ptCatalogs/GetAllDecision\r\n setCargandoSpin(true); \r\n ptCatalogsServicio.cargaGetAllFeatures(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200){ //revisa si hay error\r\n guardaPTGetAllFeaturesStore(response.data).then( function(data:any) { \r\n //console.log('Cargo información de api en CatEvidenciasStore , data );\r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n console.log (\"--catch - ex (GetAllProof): \", ex);\r\n generaObjErrorPtCatalogsStore(ex.response, true, '', '', 'RD-PTCatalogs/GetAllFeatures','RD');\r\n setCargandoSpin(false); \r\n recargaPaginaSSC();\r\n })\r\n },[]);\r\n\r\n useEffect(()=> { //Carga lista pfc - llama API - Analysis/GetSummarybyUser/es\r\n //console.log(\"...useEffect - carga propuestas con lectura de api Analysis/GetSummarybyUser/es\");\r\n setCargandoSpin(true);\r\n analysisServicio.cargaGetSummarybyUser(props.tokenStore)\r\n .then(function(response:any){\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetSummarybyUserStore(response.data).then( function(datos:any) { \r\n //console.log('Cargo información de api en pfcStore (lista pfc)', datos );\r\n const data = datos; // para paginación\r\n })\r\n }\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummarybyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else{\r\n generaObjErrorAnalysisStore(ex.response, true, '', '', 'RD Analysis/GetSummarybyUser','RD')\r\n recargaPaginaSSC();\r\n } \r\n setCargandoSpin(false);\r\n })\r\n },[]);\r\n \r\n useEffect(()=> { // uso este puente para recargar elementos del front, no uso ese useState\r\n console.log('RD - rederizando............');\r\n setSwPFC(!swPFC);\r\n setSwRecargaRD(swRecargaRD);\r\n },[swRecarga]);\r\n\r\n //páginación: se ejectura al cambio de un elementos (al click en los botones)\r\n useEffect(() => { \r\n console.log('entro a useEffect paginación')\r\n const endOffset = itemOffset + itemsPerPage;\r\n setCurrentItems(data.slice(itemOffset, endOffset));\r\n setPageCount(Math.ceil(data.length / itemsPerPage));\r\n setSwRecarga(!swRecarga);\r\n console.log('::data', data);\r\n }, [itemOffset, itemsPerPage, data]);\r\n \r\n useEffect(()=>{ window.scrollTo({top:0}); },[currentItems]); //para páginación\r\n\r\n //*funciones\r\n\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n const recargaRD = () => { // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n setCurrentItems(pfcStore);\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n } \r\n\r\n const abreSlidingPanelconDetalles = (pfc:any) => { // se genera al dar click en documentar - abre ventana con los detalles pfc \r\n setpfcId(pfc.id);\r\n setAbreSP(!abreSP); //al abrir la ventana SlidingPanel abre ->RD.documentar, la lectura del api (detalles) esta en un useEffect\r\n setSwRecarga(!swRecarga)\r\n }\r\n\r\n const botonCierraSlidingPanel = () => { setAbreSP(false) }\r\n\r\n const clickPaginacion = (event: any) => { //paginación: se ejecuta cuando se da un click en los elementos de páginación (botones)\r\n const newOffset = (event.selected * itemsPerPage) % data.length;\r\n //console.log(\"newOffset--------\", newOffset);\r\n setItemOffset(newOffset);\r\n setSwRecarga(!swRecarga) \r\n };\r\n \r\n \r\n\r\n //*vista\r\n return(\r\n <>\r\n
    \r\n\r\n {/* nota de mensaje de error */}\r\n { (props.menuStore[2].errorPagina==true) &&\r\n (<>

    )\r\n }\r\n\r\n {/* Proceso/Frecuencia/Ciclo */}\r\n
    Proceso/Frecuencia/Ciclo
    \r\n \r\n {/* pfc existentes */} \r\n
    \r\n {/* currentItems trae pxfStore se usa ésta para la paginación */ }\r\n { currentItems?.map((pfc:any, index:any) => (\r\n (x0 = `${pfc.processname} \r\n ${pfc.estatusProceso}   `),\r\n (x1 = ` ${pfc.estatusTexto}`),\r\n (x1a = ` ${pfc.estatusTexto}`),\r\n\r\n /*x2 forma el contendio del header del panel*/\r\n (x2 = (\r\n <>\r\n
    \r\n \r\n \r\n {/* acrónimo/frecuencia/ciclo & total de propuestas */}\r\n \r\n {pfc.pfcNombre} \r\n {pfc.totalPropuestas} \r\n {eti.etiquetas[1].text}\r\n
    \r\n {/* proceso & estatus de programa */}\r\n {pfc.processname}  \r\n {pfc.estatusProceso}  \r\n
    \r\n \r\n {/* estatus de envio */}\r\n \r\n {pfc.estatusTexto === \"Enviada\" \r\n ?(<>\r\n \r\n \r\n ) \r\n :(<>\r\n \r\n \r\n )\r\n }\r\n \r\n \r\n\r\n {/* botón Documentar */}\r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n )),\r\n (<>\r\n { pfc.sent == false &&\r\n (<> \r\n
    \r\n {/* accordion */}\r\n abreSlidingPanelconDetalles(pfc)}\r\n >\r\n \r\n \r\n )}\r\n )\r\n ))}\r\n
    \r\n \r\n
    \r\n\r\n {/* ventana para pfc detalle */} \r\n botonCierraSlidingPanel()} >\r\n \r\n \r\n\r\n {/* paginación: elemento visuales */}\r\n { pageCount > 1 &&\r\n (<>\r\n } \r\n pageRangeDisplayed={2}\r\n pageCount={pageCount}\r\n previousLabel={\r\n }\r\n renderOnZeroPageCount={null}\r\n containerClassName=\"pagination\"\r\n pageLinkClassName=\"page-num\"\r\n previousLinkClassName=\"page-num\"\r\n nextLinkClassName=\"page-num\"\r\n activeClassName=\"active\"\r\n disabledLinkClassName=\"gray\"\r\n onPageChange={clickPaginacion}\r\n // onClick={clickPaginacion}\r\n />\r\n ) \r\n }\r\n \r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n \r\n
    \r\n \r\n )\r\n }\r\n","/*Recurso: Dashboard - Servicio de lectura del API: Maneja los elementos del tablero del control\r\n Tareas:\r\n GetSummarybyUser/{lang}\r\n GetDetailbyUser/{lang}\r\n*/\r\n\r\nimport axios from \"axios\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Dashboard/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n\r\n //tarea: GetSummarybyUser/es\r\n const cargaGetSummarybyUser = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetSummarybyUser/es', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetSummarybyUser/es', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: GetDetailbyUser \r\n const cargaGetDetailbyUser = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetDetailbyUser/es', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetDetailbyUser/es', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n }; \r\n\r\nconst dashboardService = {\r\n cargaGetSummarybyUser: cargaGetSummarybyUser,\r\n cargaGetDetailbyUser: cargaGetDetailbyUser,\r\n};\r\n\r\nexport default dashboardService;\r\n","/* TC - Tablero de control- Presenta lista de Dominios*/\r\n/* TC.ListaPFC - Lista de registros agrupados por PFC*/\r\n/* TC.ListaPFC.Detalles - Tabla de información del PFC simple o agrupado*/\r\n\r\n//*react- recursos\r\n import React, { useState, useCallback, useEffect } from \"react\";\r\n import { useRef } from \"react\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n import { DownloadTableExcel } from \"react-export-table-to-excel\";\r\n\r\n//*componentes-utiles\r\nimport CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases\r\n import ReactTooltip from \"react-tooltip\";\r\n //import DatePicker from \"react-datepicker\";\r\n import \"../../../../css/mdi.css\";\r\n import { Col, Row } from \"react-bootstrap\";\r\n import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"; //'libreria' que cita el bote de basura\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n import articulos from \"../../../../datos/json/guidelines.json\";\r\n\r\n///imagenes\r\n import prevista from \"../../../../imagenes/prevista.png\";\r\n import concluido from \"../../../../imagenes/concluido.png\";\r\n import enProceso from \"../../../../imagenes/enProceso.png\";\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n import dashboardServicio from \"../../../../api/recursos/dashboard/dashboard.servicio\";\r\n import dashboardStore from \"../../../../api/recursos/dashboard/dashboard.store\";\r\n\r\n import proposalsServicio from \"../../../../api/recursos/proposals/proposals.servicio\"; \r\n import proposalsStore from \"../../../../api/recursos/proposals/proposals.store\"; \r\n\r\n\r\n//*store's\r\n\r\n//*interfaces\r\ninterface propsDetalles {\r\n tokenStore: any;\r\n catDecisionesStore: any;\r\n pfcDId: any; //id del dominio\r\n pfcAId: any; //id del pfc filtrado\r\n pfcNombre: any;\r\n pfcArreglo: any;\r\n recargaTC: any;\r\n recargaTCListaPFC: any;\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not: any;\r\n}\r\n\r\n//*componente\r\n export default function Detalles(props: propsDetalles) {\r\n var _ = require(\"underscore\");\r\n\r\n //*api store\r\n const { pfcDominioStore,\r\n guardaGetDetailbyUserStore,\r\n pfcDetallesStore,\r\n cambiaPfcDominioStore,\r\n recargaStore,\r\n generaObjErrorDashboardStore,\r\n } = dashboardStore((state: any) => ({\r\n pfcDominioStore: state.pfcDominioStore,\r\n guardaGetDetailbyUserStore: state.guardaGetDetailbyUserStore,\r\n pfcDetallesStore: state.pfcDetallesStore,\r\n cambiaPfcDominioStore: state.cambiaPfcDominioStore,\r\n recargaStore: state.recargaStore,\r\n generaObjErrorDashboardStore: state.generaObjErrorDashboardStore,\r\n }));\r\n\r\n const { guardaGetDetailbyUserPStore, propuestaDetallesStore,\r\n generaObjErrorProposalsStore, objErrorProposalsStore} = \r\n proposalsStore((state:any) =>( { \r\n guardaGetDetailbyUserPStore: state.guardaGetDetailbyUserStore,\r\n propuestaDetallesStore: state.propuestaDetallesStore,\r\n generaObjErrorProposalsStore: state.generaObjErrorProposalsStore,\r\n objErrorProposalsStore: state.objErrorProposalsStore\r\n }));\r\n\r\n //*store's\r\n\r\n //*constantes y variables\r\n const tableRef = useRef(null);\r\n\r\n let eti = etiquetasSSC.TC;\r\n let etiRP = etiquetasSSC.RP;\r\n let x0:any, x1:any, x2:any, x3:any, x4:any, x5:any, x6:any, x7:any, x8:any, x9:any = \"\";\r\n let nomArch = props.pfcNombre.replace(\" / \", \"_\");\r\n nomArch = nomArch.replace(\" / \", \"_\");\r\n nomArch = nomArch.replace(\" \", \"\");\r\n nomArch = nomArch.replace(\" \", \"\");\r\n let nomArchivo = \"Es_\" + nomArch;\r\n let nomHoja = nomArch;\r\n const APP_IMG = process.env.REACT_APP_IMG;\r\n const APP_NAS = process.env.REACT_APP_NAS + 'analyse/';\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar página padre\r\n const [swRecarga2, setSwRecarga2] = useState(false); //usado para remasterizar página padre\r\n const [swRecarga3, setSwRecarga3] = useState(false); //usado para remasterizar página padre\r\n const [swRecargaTCListaPFCDetalles, setSwRecargaTCListaPFCDetalles] = useState(false); //usado para remasterizar página padre\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n let cuenta = 0;\r\n\r\n\r\n const [propuestaDetallesFront, setPropuestaDetallesFront] = useState({}); // guarda la lectura de la propuesta desde proposal\r\n\r\n //*useEffect\r\n \r\n useEffect(() => { // uso este puente para recargar elementos del front\r\n //console.log('--rederizando............');\r\n setSwRecargaTCListaPFCDetalles(!swRecargaTCListaPFCDetalles);\r\n }, [swRecarga]);\r\n\r\n useEffect(() => { //la uso porque no queria renderizar el último elemento de props.pfcArreglo\r\n //console.log('................recarga2', cuenta);\r\n recargaStore()\r\n recargaTCListaPFCDetalles();\r\n }, [swRecarga2]);\r\n\r\n useEffect(() => {\r\n console.clear();\r\n //console.log('Detalles - carga....');\r\n //console.log('----- props.pfcArreglo: ', props.pfcArreglo);\r\n //console.log('----- nomArchivo: ',nomArchivo);\r\n //armamos el insumo de la tabla dentro de pfcDominio.pfcAgrupado.arregloDetalles\r\n //console.log ('...',pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].arregloDetalles.length);\r\n let pfcArregloLength = props.pfcArreglo.length;\r\n if (pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].arregloDetalles.length == 0 ) {\r\n //console.log ('... props.pfcArreglo', props.pfcArreglo.length);\r\n props.pfcArreglo.map((pfcA: any, indexpfcA: any) => {\r\n cuenta=0;\r\n let body = { id: pfcA.id };\r\n setCargandoSpin(true);\r\n dashboardServicio.cargaGetDetailbyUser(props.tokenStore, body)\r\n .then((response: any) => {\r\n if (response.status == 200) {\r\n //confirma que no hay error\r\n \r\n guardaGetDetailbyUserStore( response.data, props.pfcDId, props.pfcAId, props.catDecisionesStore ).then(function (datos: any) {\r\n console.log('*mandamos el response al store para integrar pfcDetallesVaciaStore' , pfcA.id, datos);\r\n let paso = datos;\r\n cuenta = cuenta + 1\r\n ///recargaTCListaPFCDetalles();\r\n setSwRecarga(!swRecarga);\r\n //console.log('..', pfcA.id, '...', cuenta);\r\n if (cuenta == pfcArregloLength) { setSwRecarga2(!swRecarga2) }\r\n });\r\n }\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log(\"--catch - ex (cargaGetDetailbyUser): \", ex.response.status );\r\n if (ex.response.status == 404) //no es error solo no tiene información\r\n console.log(\"nota: no es error solo no tiene información\");\r\n else\r\n generaObjErrorDashboardStore( ex.response, true, \"\", \"\", \"TC-ListaPFC-Detalles/cargaGetDetailbyUser\" );\r\n setCargandoSpin(false); \r\n });\r\n \r\n });\r\n //setTimeout(function(){ setSwRecargaTCListaPFCDetalles(!swRecargaTCListaPFCDetalles); alert('x');setSwRecarga(!swRecarga); }, 3000);\r\n }\r\n else {console.log('no entro ya traigo información...')}\r\n //recargaTCListaPFCDetalles();\r\n \r\n //setSwRecargaTCListaPFCDetalles(!swRecargaTCListaPFCDetalles);\r\n }, []);\r\n\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() }; //ejecuta la función que esta TC y de ahí en Contenido que llama a la renderización de PaginaSSC\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() }; //ejecuta la función que esta TC y de ahí en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n const recargaTC = () => { props.recargaTC() }; //ejecuta la función que esta TC\r\n\r\n const recargaTCListaPFC = () => { props.recargaTCListaPFC() }; //ejecuta la función que esta TC\r\n\r\n const recargaTCListaPFCDetalles = () => {\r\n // con esto ejecuto un useEffect, lo uso para renderizar el front\r\n setSwRecarga(!swRecarga);\r\n };\r\n\r\n const leePropuestaPorId = (id:any, opcion:any) => { //opciones liga-verFichaCompleta , boton-registra lee el contenido de la propuesta \r\n setCargandoSpin(true);\r\n proposalsServicio.cargaGetDetailbyUser(props.tokenStore, id)\r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetDetailbyUserPStore(response.data, id, null, null, 'RPContenido').then( function(propuestaDetallesF:any) { \r\n //console.log('*propuestaDetallesFront: ' , propuestaDetallesFront)\r\n setPropuestaDetallesFront(propuestaDetallesF);\r\n let origenes=''\r\n propuestaDetallesF.origin?.map((o:any, index:any) => (\r\n origenes = origenes \r\n + \"

    \" \r\n + \" \"\r\n + \" \" \r\n + o.name + \"
    \"\r\n + \" \" + o.specification + \"\"\r\n + \"
    \" \r\n + \"

    \" \r\n ))\r\n let procFrec = propuestaDetallesF.processxfrequency[0];\r\n let procStatus = procFrec.state_process;\r\n let procesos=''\r\n propuestaDetallesF.processxfrequency?.map((o:any, index:any) => (\r\n procesos = procesos \r\n + \"

    \" \r\n + \" \"\r\n + \" \" \r\n + o.acronym + \" / \" + o.processname + \" \"\r\n + \"\"\r\n + o.state_process.pt_state_description\r\n + \"\"\r\n + \"
    \" \r\n + \"
    \" \r\n + \"

    \" \r\n ))\r\n //console.log('------------procFrec2', procStatus.pt_state_description);\r\n let clasexEstatusIcono='';\r\n switch ( procStatus.pt_state ) {\r\n case 1: clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n case 2: clasexEstatusIcono = \"claseEstatus claseEstatusEdi\"; break;\r\n case 3: clasexEstatusIcono = \"claseEstatus claseEstatusIna\"; break;\r\n case 4: clasexEstatusIcono = \"claseEstatus claseEstatusHis\"; break;\r\n default:clasexEstatusIcono = \"claseEstatus claseEstatusAct\"; break;\r\n }\r\n if (opcion=='liga-verFichaCompleta') { // selecciono liga ver propuesta en tabla, abrimos ventana con la información de la propuesta\r\n swal2.fire({\r\n //icon: 'warning',\r\n //showCancelButton: true,\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n color: '#fff',\r\n background: '#003057',\r\n width: \"70%\",\r\n title: 'Propuesta de cambio',\r\n html: \r\n \"
    \" \r\n + \"

    \" + etiRP.etiquetas[4].text + \"\" + propuestaDetallesF.folio + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[5].text + \"\" + propuestaDetallesF.fecha + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[6].text + \"
    \"\r\n + \"  \" \r\n + propuestaDetallesF.user.name + \"
    \" \r\n + \"  \" \r\n + propuestaDetallesF.user.email + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[7].text + \"
    \" \r\n + \"\" + propuestaDetallesF.description + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[8].text + \"\" \r\n + \"\" + origenes + \"

    \" \r\n + \"

    \" + etiRP.etiquetas[9].text + \"\" \r\n + \"\" + procesos + \"

    \" \r\n + \"
    \",\r\n })\r\n }\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n //ex.response.data.result.errores.map((: any) => (\r\n //toast.error(err.errorMessage)))\r\n console.log (\"--catch - ex (cargaGetDetailbyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorProposalsStore(ex.response, true, '', '', 'RPContenido-Decisions/GetDetailbyUser','RP')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n setCargandoSpin(false);\r\n }\r\n\r\n //**vista\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n\r\n

    \r\n \r\n {/* pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].arregloDetalles:::: {pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].arregloDetalles.length} */}\r\n\r\n {/*

    ....{pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].arregloDetalles.length}

    */}\r\n {/* tabla que se presenta en front */}\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n {pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].arregloDetalles?.map((pfcAD: any, indexPfcAD: any) => (\r\n <>\r\n \r\n \r\n {/* Prevista / No previstas - Concluido / En proceso de documentación */}\r\n \r\n \r\n \r\n\r\n {pfcAD.evidence?.map((evi: any, indexEvi: any) => (\r\n <>\r\n \r\n {/* propuesta */}\r\n {indexEvi == 0 &&\r\n (<>\r\n \r\n )\r\n }\r\n\r\n {/* evidencia */}\r\n \r\n\r\n {/* caracteristicas */}\r\n \r\n\r\n {/* pruebas a realizar */}\r\n \r\n\r\n {indexEvi == 0 &&\r\n (<>\r\n {/*reporte de pruebas y/o justificación */}\r\n \r\n\r\n {/*revisión de necesidades */}\r\n \r\n\r\n {/* relación de cambios */}\r\n \r\n\r\n {/* plan de acción / informe de instrumentación */}\r\n \r\n )\r\n }\r\n \r\n \r\n ))}\r\n \r\n \r\n ))}\r\n\r\n
    Propuesta(s) Evidencias de la fase de diseño que serán modificadas por el cambio: \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}
    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}
    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}
    \r\n Articulo: 19
    {articulos.articles[19].description}
    \r\n
    \r\n
    )\r\n }\r\n
    Revisión de necesidades
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 10
    {articulos.articles[10].description}

    {articulos.articles[10].description2}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 21
    {articulos.articles[21].description}

    \r\n
    \r\n
    ) \r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 10
    {articulos.articles[10].description}

    {articulos.articles[10].description2}

    \r\n Articulo: 21
    {articulos.articles[21].description}

    \r\n
    \r\n
    ) \r\n }\r\n
    Relación de cambios:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 12
    {articulos.articles[12].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 21
    {articulos.articles[21].description}

    \r\n
    \r\n
    ) \r\n } \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 12
    {articulos.articles[12].description}

    \r\n Articulo: 21
    {articulos.articles[21].description}

    \r\n
    \r\n
    ) \r\n } \r\n
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (<>\r\n Plan de acción:
    \r\n \r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 15
    {articulos.articles[15].description}

    \r\n
    \r\n
    \r\n )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (<>\r\n Informe de instrumentación:
    \r\n \r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 24
    {articulos.articles[24].description}

    \r\n
    \r\n
    \r\n )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (<>\r\n Plan de acción:
    \r\n \r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 15
    {articulos.articles[15].description}

    \r\n
    \r\n
    \r\n   /

    \r\n Informe de instrumentación:
    \r\n \r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 24
    {articulos.articles[24].description}

    \r\n
    \r\n
    \r\n )\r\n }\r\n
    Evidencias:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 19
    {articulos.articles[19].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 9
    {articulos.articles[9].description}

    \r\n Articulo: 19
    {articulos.articles[19].description}

    \r\n
    \r\n
    )\r\n }\r\n
    Características:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 12
    {articulos.articles[12].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 21
    {articulos.articles[21].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 12
    {articulos.articles[12].description}

    \r\n Articulo: 21
    {articulos.articles[21].description}

    \r\n
    \r\n
    )\r\n }\r\n
    Pruebas a realizar:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 13
    {articulos.articles[13].description}

    \r\n {articulos.articles[13].description2}
    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 23
    {articulos.articles[23].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 13
    {articulos.articles[13].description}

    \r\n {articulos.articles[13].description2}

    \r\n Articulo: 23
    {articulos.articles[23].description}

    \r\n
    \r\n
    )\r\n }\r\n
    Reportes de pruebas:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 14
    {articulos.articles[14].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 23
    {articulos.articles[23].description}

    \r\n
    \r\n
    )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (\r\n \r\n \r\n {articulos.articles[0].ch}

    \r\n Articulo: 14
    {articulos.articles[14].description}

    \r\n Articulo: 23
    {articulos.articles[23].description}

    \r\n
    \r\n
    )\r\n }\r\n
    \r\n

    \r\n {/* {pfcAD.id} */}\r\n \r\n    \r\n {pfcAD.sent \r\n ? (<>\r\n \r\n Concluido\r\n \r\n )\r\n : (<>\r\n \r\n En proceso de documentación\r\n \r\n )\r\n }\r\n

    \r\n
    \r\n {pfcAD.proposal?.map((prop: any, indexProp: any) => (\r\n <> {/*

    {prop.id}

    */}\r\n

    leePropuestaPorId(prop.id, 'liga-verFichaCompleta') } className=\"text-link cursorHand noBR\">\r\n {prop.id}\r\n

    \r\n \r\n )\r\n )}\r\n

    {evi.name}

    \r\n {evi.feature?.map((car: any, indexCarac: any) => (\r\n <>

    {car.name}

    \r\n ))}\r\n
    \r\n {evi.proof?.map((pru: any, indexCarac: any) => (\r\n <>

    {pru.name}
    \r\n      {pru.other}

    \r\n \r\n ))}\r\n
    \r\n {pfcAD.swProof && (\r\n <>\r\n Reporte(s): \r\n
    \r\n \r\n )}\r\n \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x5= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"PROOF\" && \r\n (<>\r\n \r\n \r\n \r\n {arch.nombreCorto}\r\n \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n\r\n {pfcAD.swJustify && (\r\n <>\r\n \r\n \r\n Justificación(es):\r\n \r\n
    \r\n \r\n )}\r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x6= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"JUSTIFY\" && \r\n (<>\r\n \r\n \r\n \r\n {arch.nombreCorto}\r\n \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x7= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"NR\" && \r\n (<>\r\n \r\n \r\n \r\n {arch.nombreCorto}\r\n \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x8= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"CR\" && \r\n (<>\r\n \r\n \r\n \r\n {arch.nombreCorto}\r\n \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x9= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"API\" && \r\n (<>\r\n \r\n \r\n \r\n {arch.nombreCorto}\r\n \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n\r\n \r\n {/* tabla oculta para exportar */}\r\n {/*

    ....{pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision}

    */}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n {pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].arregloDetalles?.map((pfcAD: any, indexPfcAD: any) => (\r\n ((x0 = APP_IMG + \"prevista.png\"),\r\n (x1 = APP_IMG + \"concluido.png\"),\r\n (x2 = APP_IMG + \"enproceso.png\"),\r\n (x3 = APP_IMG + \"checkT.png\")),\r\n (<>\r\n {/* Prevista & No prevista & Concluido & En proceso */}\r\n \r\n {pfcAD.textoDecisionExcel == \"Prevista No prevista \" \r\n ? (<>\r\n \r\n )\r\n : (<>\r\n \r\n )\r\n }\r\n {pfcAD.sent \r\n ? (<>\r\n \r\n )\r\n : (<> \r\n \r\n )\r\n }\r\n \r\n \r\n\r\n\r\n\r\n {/* contenido de la tabla */}\r\n {pfcAD.evidence?.map((evi: any, indexEvi:any) => (\r\n <>\r\n \r\n \r\n {/* propuesta */}\r\n {indexEvi == 0 && \r\n (<>\r\n \r\n )\r\n }\r\n\r\n {/* evidencia */}\r\n \r\n\r\n {/* caracteristicas */}\r\n \r\n\r\n {/* pruebas a realizar */}\r\n \r\n\r\n {indexEvi == 0 &&\r\n (<>\r\n {/*reporte de pruebas y/o justificación */}\r\n \r\n\r\n {/*revisión de necesidades */}\r\n \r\n\r\n {/* relación de cambios */}\r\n \r\n\r\n {/* plan de acción / informe de instrumentación */}\r\n \r\n )\r\n }\r\n \r\n \r\n ))}\r\n )\r\n )\r\n )}\r\n \r\n
    \r\n Propuesta(s):\r\n \r\n Evidencias de la fase de diseño que serán modificadas por el cambio: \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n ( (Art. 9) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n ( (Art.19) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n ( (Art. 9 y 19) )\r\n }\r\n \r\n Revisión de necesidades:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n ( (Art. 10) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n ( (Art. 21) ) \r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n ( (Art. 10 y 21) ) \r\n }\r\n
    \r\n Relación de cambios:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n ( (Art. 12) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n ( (Art. 21) ) \r\n } \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n ( (Art. 12 y 21) ) \r\n }\r\n
    \r\n \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n (<> Plan de acción:
    (Art. 15) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n (<>Informe de instrumentación:
    (Art. 24) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n (<>\r\n Plan de acción:
    (Art. 15) \r\n   /

    \r\n Informe de instrumentación:
    (Art. 24) \r\n )\r\n }\r\n
    \r\n
    \r\n Evidencias:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n ( (Art. 9) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n ( (Art. 19) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n ( (Art. 9 y 19) )\r\n }\r\n
    \r\n Características:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n ( (Art. 12) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n ( (Art. 21) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n ( (Art. 12 y 21) )\r\n }\r\n
    \r\n Pruebas a realizar:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n ( (Art. 13) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n ( (Art. 23) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n ( (Art. 13 y 23) )\r\n }\r\n
    \r\n Reportes de pruebas:
    \r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 2 &&\r\n ( (Art. 14) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 3 &&\r\n ( (Art. 23) )\r\n }\r\n { pfcDominioStore[props.pfcDId].pfcAgrupado[props.pfcAId].swDecision == 23 &&\r\n ( (Art. 14 y 23) )\r\n }\r\n
    \r\n     Prevista
    \r\n     No prevista\r\n
    \r\n    {pfcAD.textoDecisionExcel}\r\n \r\n    Concluido\r\n \r\n     En proceso de documentación\r\n \r\n
    \r\n {pfcAD.proposal?.map((prop: any, indexProp: any) => (\r\n <>

    {prop.id}

    \r\n )\r\n )}\r\n
    \r\n

         {evi.name}

    \r\n
    \r\n {evi.feature?.map((car: any, indexCarac: any) => (\r\n <>\r\n

        {car.name}

    \r\n \r\n ))}\r\n
    \r\n \r\n {evi.proof?.map((pru: any, indexCarac: any) => (\r\n <>\r\n

        {pru.name}
        {pru.other}

    \r\n \r\n ))}\r\n
    \r\n {pfcAD.swProof && \r\n (<>\r\n Reporte(s):
    \r\n )\r\n }\r\n\r\n \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x5= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"PROOF\" && \r\n (<>\r\n \r\n      \r\n {arch.nombreCorto} \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n\r\n {pfcAD.swJustify && (\r\n <>\r\n \r\n \r\n Justificación(es):\r\n \r\n
    \r\n \r\n )}\r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x6= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"JUSTIFY\" && \r\n (<>\r\n \r\n      \r\n {arch.nombreCorto}\r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x7= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"NR\" && \r\n (<>\r\n \r\n      \r\n {arch.nombreCorto} \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x8= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"CR\" && \r\n (<>\r\n \r\n      \r\n {arch.nombreCorto} \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n {pfcAD.files?.map((arch: any, indexProp: any) => (\r\n (x9= APP_NAS + arch.path + arch.name),\r\n (<>\r\n {arch.classified == \"API\" && \r\n (<>\r\n \r\n      \r\n {arch.nombreCorto} \r\n \r\n
    \r\n )\r\n }\r\n )\r\n ))}\r\n
    \r\n \r\n\r\n
    \r\n
    \r\n\r\n \r\n \r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n {cargandoSpin && }\r\n \r\n );\r\n }\r\n","/* TC - Tablero de control- Presenta lista de Dominios*/\r\n/* TC.ListaPFC - Lista de registros agrupados por PFC*/\r\n/* TC.ListaPFC.Detalles - Tabla de información del PFC simple o agrupado*/\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n import ReactPaginate from \"react-paginate\";\r\n import { Panel, PanelGroup } from \"rsuite\";\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases \r\n import '../../../../css/mdi.css'; \r\n\r\n//*imágenes\r\n import { AiOutlineDoubleLeft, AiOutlineDoubleRight } from \"react-icons/ai\"; \r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n import Detalles from \"./TC.ListaPFC.Detalles\"\r\n\r\n//*api's (servicios y store)\r\n import catalogsServicio from \"../../../../api/recursos/catalogs/catalogs.servicio\"; \r\n import catalogsStore from \"../../../../api/recursos/catalogs/catalogs.store\"; \r\n\r\n import dashboardStore from \"../../../../api/recursos/dashboard/dashboard.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n //import articulos from \"../../../../datos/json/guidelines.json\";\r\n \r\n//*funciones\r\n\r\n//*interfaces\r\n interface propsTCListaPFC {\r\n tokenStore: any;\r\n pfcDId: any,\r\n pfcDDominio:any,\r\n pfcArreglo: any;\r\n pfcAgrupado:any\r\n buscador: any;\r\n radioFiltroSelStore: any; //opción seleccionada del radio T-total, E-enviados, C-concluidos\r\n contaE: any; //contador de Enviados\r\n contaC: any; //contador de Concluidos\r\n recargaTC: any;\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not: any;\r\n }\r\n\r\n//*componente\r\n export default function TCListaPFC(props: propsTCListaPFC) { \r\n //*api store\r\n const { guardaGetAllDecisionStore, catDecisionesStore,\r\n generaObjErrorCatalogsStore } = \r\n catalogsStore((state:any) =>( { \r\n guardaGetAllDecisionStore: state.guardaGetAllDecisionStore,\r\n catDecisionesStore: state.catDecisionesStore,\r\n generaObjErrorCatalogsStore: state.generaObjErrorCatalogsStore\r\n }));\r\n\r\n const { cambiaPfcDominioStore } = \r\n dashboardStore((state:any) =>( { \r\n cambiaPfcDominioStore: state.cambiaPfcDominioStore\r\n }));\r\n\r\n //*store's\r\n \r\n //*datos\r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.TC;\r\n let x0, x1, x1a, x2, x3 = '';\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar página padre\r\n const [swRecargaListaPFC, setSwRecargaListaPFC] = useState(false); //usado para remasterizar página padre\r\n const [cargandoSpin,setCargandoSpin] = useState(false);\r\n \r\n //Buscador por medio del input de TC - trae el valor del input en props.pfcAgrupado\r\n const [pfcAgrupadoBusqueda, setPfcAgrupadoBusqueda] = useState(props.pfcAgrupado);\r\n const [dominio, setDominio] = useState('');\r\n const [radioSel, setRadioSel] = useState(props.radioFiltroSelStore);\r\n\r\n //*useEffect\r\n useEffect(()=> { \r\n //console.log('Carga TC.ListaPFC' );\r\n //console.log('-----buscador: ', props.buscador);\r\n //console.log('radioFiltroSelStore',props.radioFiltroSelStore)\r\n let x = 'divpanelDominio_' + props.pfcDId\r\n setDominio(x);\r\n //console.log('dominio:', dominio);\r\n window.scrollTo({top:0}); \r\n },[]);\r\n\r\n useEffect(()=> { //Carga cátalogo \"Decisiones\"- llama API - Catalogs/GetAllDecision\r\n setCargandoSpin(true); \r\n catalogsServicio.cargaGetAllDecision(props.tokenStore)\r\n .then((response:any) => {\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetAllDecisionStore(response.data).then( function(datos:any) { \r\n ////console.log('cargo catDecisionesStore:', datos)\r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => { \r\n //console.log (\"--catch - ex (GetAllDecision): \", ex);\r\n generaObjErrorCatalogsStore(ex.response, true, '', '', 'TC-Catalogs/GetAllDecision');\r\n setCargandoSpin(false); \r\n })\r\n },[]);\r\n\r\n useEffect(()=> { // uso este puente para recargar elementos del front\r\n //console.log('rederizando............');\r\n //console.log('-----buscador: ', props.buscador);\r\n //console.log('pfcFiltado: ', props.pfcAgrupado);\r\n //if (props.radioFiltroSelStore=='T') { const itemsPerPage = 10;}\r\n const dataPfcStore = props.pfcAgrupado;\r\n setSwRecargaListaPFC(!swRecargaListaPFC);\r\n },[swRecarga]);\r\n\r\n useEffect(()=> { // uso este puente para recargar elementos del front\r\n //console.log('rederizando por cambio de props.buscador............');\r\n cargaBusqueda();\r\n //console.log('-----buscador: ', props.buscador);\r\n setSwRecargaListaPFC(!swRecargaListaPFC);\r\n },[props.buscador]);\r\n \r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta TC y de ahí en Contenido que llama a la renderización de PaginaSSC\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta TC y de ahí en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n const recargaTC = () => { props.recargaTC() } //ejecuta la función que esta TC\r\n\r\n const recargaTCListaPFC = () => { // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n setSwRecarga(!swRecarga);\r\n }\r\n\r\n const cargaBusqueda = () => { \r\n const value = props.buscador;\r\n let filtered = []\r\n if (value !=''){\r\n filtered= props.pfcAgrupado.filter((filtro:any) => filtro.pfcNombre.toLowerCase().includes(value.toLowerCase())); \r\n //console.log('cargaBusqueda filtered:', filtered);\r\n setPfcAgrupadoBusqueda(filtered);//regresa llos filtrados\r\n }\r\n else { setPfcAgrupadoBusqueda(props.pfcAgrupado) }\r\n };\r\n\r\n const abreCierraPFC = (idpfcA:any) => { //opciones liga-verFichaCompleta , boton-registra lee el contenido de la propuesta \r\n cambiaPfcDominioStore(props.pfcDId, idpfcA, null, 'abreCierraPFC');\r\n setSwRecarga(!swRecarga)\r\n }\r\n\r\n //paginación: constante para el manejo de la \r\n const dataPfcStore = props.pfcAgrupado;\r\n const [pfcAgrupadoPaginado, setPfcAgrupadoPaginado] = useState([]); //elementos mostrados según páginación\r\n const [pageCount, setPageCount] = useState(0); //contabilidad de la página\r\n const [itemOffset, setItemOffset] = useState(0); //desplazamiento \r\n const itemsPerPage = 10; //número de elementos a mostrar \r\n\r\n //páginación: se ejectura al cambio de un elementos (al click en los botones)\r\n useEffect(() => { \r\n //console.log('1.....entro a useEffect paginación..', props.radioFiltroSelStore)\r\n const endOffset = itemOffset + itemsPerPage;\r\n setPfcAgrupadoPaginado(dataPfcStore.slice(itemOffset, endOffset));\r\n setPageCount(Math.ceil(dataPfcStore.length / itemsPerPage));\r\n //setSwRecarga(!swRecarga);\r\n //console.log('-----::dataPfcStore', dataPfcStore);\r\n //console.log('-----::pfcAgrupadoPaginado', pfcAgrupadoPaginado);\r\n }, [itemOffset, itemsPerPage, dataPfcStore, props.radioFiltroSelStore]);\r\n\r\n useEffect(()=>{ \r\n //console.log('2....entro a cambio de props.radioFiltroSelStore...........', props.radioFiltroSelStore);\r\n const dataPfcStore = props.pfcAgrupado;\r\n const itemsPerPage = 10;\r\n setPageCount(Math.ceil(dataPfcStore.length / itemsPerPage));\r\n setItemOffset(0);\r\n setSwRecarga(!swRecarga); \r\n },[props.radioFiltroSelStore]);\r\n\r\n //useEffect(()=>{ \r\n //window.scrollTo({top:0}); \r\n //const element = document.getElementById(dominio);\r\n //element?.scrollIntoView(true) ;\r\n //},[pfcAgrupadoPaginado]); //páginación\r\n\r\n const clickPaginacion = (event: any) => { //paginación: se ejecuta cuando se da un click en los elementos de páginación (botones)\r\n //console.log(\"dominio--------\", dominio);\r\n const newOffset = (event.selected * itemsPerPage) % dataPfcStore.length;\r\n //console.log(\"newOffset--------\", newOffset);\r\n setItemOffset(newOffset);\r\n setSwRecarga(!swRecarga);\r\n const element = document.getElementById(dominio);\r\n element?.scrollIntoView(true) ;\r\n };\r\n //termina paginación\r\n\r\n const encabezadoPFC = () => {\r\n return (\r\n <>\r\n
    \r\n {/*

    ...{props.pfcDDominio}

    \r\n

    ...{pfcAgrupadoBusqueda.length }

    */}\r\n { props.radioFiltroSelStore=='T' &&\r\n (<>
    Proceso/Frecuencia/Ciclo
    )\r\n } \r\n {(props.radioFiltroSelStore=='E' && props.contaE>0) &&\r\n (<>
    Proceso/Frecuencia/Ciclo
    )\r\n } \r\n {(props.radioFiltroSelStore=='C' && props.contaC>0) &&\r\n (<>
    Proceso/Frecuencia/Ciclo
    )\r\n } \r\n
    \r\n \r\n )\r\n }\r\n\r\n //*vista\r\n return (\r\n <>\r\n \r\n {/* lista de pfc que son del dominio*/}\r\n
    \r\n {/* props.buscador ::::: {props.buscador} -
    \r\n no. registros en pfcAgrupadoBusqueda:::: {pfcAgrupadoBusqueda.length}
    \r\n no. registros en pfcAgrupado.:::: {props.pfcAgrupado.length}
    \r\n props.radioFiltroSelStore:::: {props.radioFiltroSelStore}
    \r\n props.contaE:::: { props.contaE}
    \r\n props.contaC:::: { props.contaC}
    \r\n pageCount::::::{pageCount}
    \r\n */}\r\n {/* subencabezado: Proceso/Frecuencia/Ciclo */}\r\n { props.buscador != '' && (<> {encabezadoPFC()} ) }\r\n\r\n {/* Tenemos 2 listas:\r\n pfcAgrupadoBusqueda: trae los registros filtrados según la busqueda. Se presenta si props.buscador != ''\r\n pfcAgrupadoPaginado: trae los registros completos paginados de 10 en 10. Se presenta si props.buscador == ''\r\n */}\r\n { props.buscador != ''\r\n ? (<>\r\n {/* lista de pfc filtrada por la busqueda*/}\r\n
    \r\n { pfcAgrupadoBusqueda?.map((pfc:any, indexpfcAgrupadoBusqueda:any) => (\r\n //acrónimo/frecuencia/ciclo & nombre del proceso\r\n (x2 = \r\n (<>\r\n
    \r\n {/*

    ...{props.radioFiltroSelStore}

    */}\r\n { props.radioFiltroSelStore =='T' &&\r\n (<>\r\n \r\n {pfc.pfcNombre}
    \r\n {pfc.arreglo[0].processname} \r\n
    \r\n )\r\n }\r\n { props.radioFiltroSelStore =='C' &&\r\n (<>\r\n \r\n {pfc.pfcNombre}
    \r\n {pfc.arreglo[0].processname} \r\n \r\n  Concluido\r\n \r\n
    \r\n )\r\n }\r\n { props.radioFiltroSelStore =='E' &&\r\n (<>\r\n \r\n {pfc.pfcNombre}
    \r\n {pfc.arreglo[0].processname} \r\n \r\n  En proceso de documentación\r\n \r\n
    \r\n )\r\n }\r\n \r\n
    \r\n
    \r\n )\r\n ),\r\n (<>\r\n \r\n { props.radioFiltroSelStore == 'T' &&\r\n (<>\r\n abreCierraPFC(pfc.id)}\r\n >\r\n \r\n\r\n )\r\n \r\n }\r\n { (props.radioFiltroSelStore == 'E' && pfc.e > 0) &&\r\n ( abreCierraPFC(pfc.id)}\r\n >\r\n )\r\n }\r\n { (props.radioFiltroSelStore == 'C' && pfc.c > 0) &&\r\n ( abreCierraPFC(pfc.id)}\r\n >\r\n )\r\n }\r\n {pfc.abierto && \r\n (<>\r\n \r\n
    \r\n ) \r\n } \r\n
    \r\n )\r\n ))} \r\n
    \r\n )\r\n : (<>\r\n {/* lista de pfc */}\r\n
    \r\n { pfcAgrupadoPaginado?.map((pfc:any, indexPFC:any) => (\r\n //acrónimo/frecuencia/ciclo & nombre del proceso\r\n (x2 = \r\n (<>\r\n \r\n
    \r\n \r\n {pfc.pfcNombre}
    \r\n {pfc.arreglo[0].processname} \r\n { props.radioFiltroSelStore !='T' &&\r\n (<>\r\n { props.radioFiltroSelStore =='E' &&\r\n (<>\r\n { pfc.e > 0 &&\r\n (<>\r\n \r\n  En proceso de documentación\r\n \r\n )\r\n }\r\n ) \r\n }\r\n { (props.radioFiltroSelStore =='C' && pfc.c > 0) &&\r\n (\r\n  Concluido\r\n )\r\n }\r\n )\r\n }\r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n ),\r\n (<>\r\n \r\n { props.radioFiltroSelStore == 'T' &&\r\n ( abreCierraPFC(pfc.id)}\r\n >\r\n )\r\n }\r\n { (props.radioFiltroSelStore == 'E' && pfc.e > 0) &&\r\n ( abreCierraPFC(pfc.id)}\r\n >\r\n )\r\n }\r\n { (props.radioFiltroSelStore == 'C' && pfc.c > 0) &&\r\n ( abreCierraPFC(pfc.id)}\r\n >\r\n )\r\n }\r\n {pfc.abierto && \r\n (<>\r\n \r\n
    \r\n ) \r\n } \r\n
    \r\n )\r\n ))} \r\n
    \r\n\r\n {/* paginación: elemento visuales */}\r\n\r\n {/*

    props.radioFiltroSelStore--{props.radioFiltroSelStore}

    \r\n

    pageCount--{pageCount}

    */}\r\n { pageCount > 1 && \r\n (<>\r\n } \r\n pageRangeDisplayed={2}\r\n pageCount={pageCount}\r\n previousLabel={ }\r\n renderOnZeroPageCount={null}\r\n containerClassName=\"pagination\"\r\n pageLinkClassName=\"page-num\"\r\n previousLinkClassName=\"page-num\"\r\n nextLinkClassName=\"page-num\"\r\n activeClassName=\"active\"\r\n disabledLinkClassName=\"gray\"\r\n onPageChange={clickPaginacion}\r\n />\r\n ) \r\n }\r\n )\r\n }\r\n\r\n
    \r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n \r\n );\r\n }\r\n","/* TC - Tablero de control- Presenta lista de Dominios*/\r\n/* TC.ListaPFC - Lista de registros agrupados por PFC*/\r\n/* TC.ListaPFC.Detalles - Tabla de información del PFC simple o agrupado*/\r\n\r\n//*react- recursos\r\n import { useState, useEffect} from \"react\";\r\n import { Panel, PanelGroup } from \"rsuite\";\r\n \r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n import { SlidingPanel } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n//*clases \r\n//*imágenes\r\n\r\n//*archivo & componentes (otros componentes enlazados)\r\n import ListaPFC from \"./TC.ListaPFC\"; \r\n\r\n//*api's (servicios y store)\r\n import dashboardServicio from \"../../../../api/recursos/dashboard/dashboard.servicio\"; \r\n import dashboardStore from \"../../../../api/recursos/dashboard/dashboard.store\"; \r\n \r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\"\r\n \r\n//*funciones\r\n\r\n//*interface \r\n interface propsTC {\r\n tokenStore: any;\r\n menuStore: any;\r\n quitaErrorPagina:any;\r\n recargaPaginaSSC:any;\r\n recargaPaginaSSC_Not:any;\r\n } \r\n\r\n//*componente\r\n export default function TC(props: propsTC){\r\n\r\n //*api store\r\n const { guardaGetSummarybyUserStore, pfcDominioStore, \r\n cambiaPfcDominioStore,\r\n cambiaRadioFiltroStore, radioFiltroStore, radioFiltroSelStore, cambiaIndiceStore,\r\n generaObjErrorDashboardStore } = \r\n dashboardStore((state:any) =>( { \r\n guardaGetSummarybyUserStore: state.guardaGetSummarybyUserStore,\r\n pfcDominioStore: state.pfcDominioStore,\r\n cambiaPfcDominioStore: state.cambiaPfcDominioStore,\r\n cambiaRadioFiltroStore: state.cambiaRadioFiltroStore,\r\n radioFiltroStore: state.radioFiltroStore,\r\n radioFiltroSelStore: state.radioFiltroSelStore,\r\n cambiaIndiceStore: state.cambiaIndiceStore,\r\n generaObjErrorDashboardStore: state.generaObjErrorDashboardStore\r\n })); \r\n\r\n //*store's\r\n\r\n //*datos\r\n var _ = require('underscore');\r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.TC;\r\n let x0, x1, x1a, x2, x3 = '';\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar página padre\r\n const [swRecargaTC, setSwRecargaTC] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n\r\n const [buscador, setBuscador] = useState('');\r\n \r\n //*useEffect\r\n useEffect(()=> { // al montar\r\n console.log('TC - monto')\r\n props.quitaErrorPagina();\r\n cambiaRadioFiltroStore('T');\r\n setBuscador('');\r\n //console.clear();\r\n },[]);\r\n\r\n useEffect(()=> { //Carga lista pfc del tablero de control\r\n setCargandoSpin(true);\r\n dashboardServicio.cargaGetSummarybyUser(props.tokenStore)\r\n .then(function(response:any){\r\n if (response.status==200){ //revisa si hay error\r\n guardaGetSummarybyUserStore(response.data).then( function(datos:any) { \r\n console.log('-----cargo pfcDominioStore:', datos);\r\n cambiaIndiceStore(radioFiltroSelStore);\r\n })\r\n }\r\n setCargandoSpin(false); \r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummarybyUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorDashboardStore(ex.response, true, '', '', 'TC-Dashboard/GetSummarybyUser','TC')\r\n setCargandoSpin(false); \r\n })\r\n setSwRecarga(!swRecarga);\r\n },[]);\r\n\r\n useEffect(()=> { // uso este puente para recargar elementos del front, no uso ese useState\r\n //console.log('TC - rederizando...........');\r\n //console.log(\"**pfcDominioStore.\", pfcDominioStore);\r\n setSwRecargaTC(!swRecargaTC);\r\n },[swRecarga]);\r\n \r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n const recargaTC = () => { // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n setSwRecarga(!swRecarga);\r\n }\r\n\r\n const abreCierraDominio = (pfcIdD:any) => { // abre y cierra el div de la propuesta\r\n cambiaPfcDominioStore(pfcIdD, null, null,'abreCierraDominio');\r\n setSwRecarga(!swRecarga)\r\n }\r\n\r\n const cambiaRadioFiltro = (opc:any) => {\r\n cambiaPfcDominioStore(null, null, null,'abreCierraPFCTodos');\r\n limpiarInputBuscador();\r\n let opcion = opc.target.value;\r\n cambiaRadioFiltroStore(opcion);\r\n cambiaIndiceStore(opcion);\r\n setSwRecarga(!swRecarga)\r\n };\r\n \r\n /* función que iba recontando lo seleccionado perooo se cambio para que entrará con enter */\r\n /* const actualizaInputBuscador = (event:any) => { \r\n let valorInputBuscador= document.getElementById(\"inputBuscador\") as HTMLInputElement | null; \r\n let valorInputBuscador1:any = valorInputBuscador?.value.toString(); \r\n setBuscador(valorInputBuscador1); //valor del input al ir escribiendo\r\n } */\r\n const actualizaInputBuscador = (event: any) => {\r\n let valorInputBuscador = document.getElementById(\"inputBuscador\") as HTMLInputElement | null;\r\n if (event.key === \"Enter\") {\r\n //console.log(\"enter....\");\r\n let valorInputBuscador1: any = valorInputBuscador?.value.toString();\r\n setBuscador(valorInputBuscador1); //valor del input al ir escribiendo\r\n cargaBusqueda(valorInputBuscador1);\r\n }\r\n }\r\n\r\n const limpiarInputBuscador = () => { \r\n //alert('limpiarInputBuscador');\r\n var espejo:any = document.getElementById(\"inputBuscador\") as HTMLInputElement | null; \r\n if (espejo) espejo.value= \"\"; \r\n setBuscador('');\r\n }\r\n //Buscador\r\n const [swBusqueda, setSwBusqueda] = useState(false);\r\n const cargaBusqueda = (busca:any) => { \r\n //alert(busca); \r\n setSwBusqueda(false);\r\n const value = busca;\r\n let filtered = []\r\n if (value !='') {\r\n pfcDominioStore.map((pfcD:any, indexpfcD:any) => {\r\n filtered= pfcD.pfcAgrupado.filter((filtro:any) => filtro.pfcNombre.toLowerCase().includes(value.toLowerCase())); \r\n pfcD.pfcAgrupadoBusqueda = filtered;\r\n if (filtered.length > 0) { setSwBusqueda(true) }\r\n }); \r\n }\r\n else { \r\n pfcDominioStore.map((pfcD:any, indexpfcD:any) => { pfcD.pfcAgrupadoBusqueda = pfcD.pfcAgrupado }); \r\n }\r\n console.log('cargaBusqueda:', pfcDominioStore);\r\n };\r\n\r\n\r\n //*vista\r\n return(\r\n <>\r\n {/*

    buscador ... {buscador }

    */}\r\n \r\n {/* nota de mensaje de error */}\r\n { (props.menuStore[4].errorPagina==true) &&\r\n (<>

    )\r\n }\r\n \r\n {/* buscador y filtro*/}\r\n
    \r\n
    \r\n
    \r\n\r\n {/* buscador por: */}\r\n
    \r\n
    \r\n {/* onChange={actualizaInputBuscador} */}\r\n \r\n
    \r\n \r\n
    \r\n\r\n {/* filtro */}\r\n
    \r\n \r\n Filtro \r\n { radioFiltroStore?.map((rd:any, indexRD:any) => ( \r\n (<>\r\n \r\n \r\n \r\n {rd.texto} \r\n )\r\n ))}\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n\r\n {/*presentamos lista (filtro de busqueda en su caso o pfc agrupados (ambos agrupadas por dominio) */}\r\n {/* Tenemos 2 listas:\r\n pfcDominioStore.pfcAgrupadoBusqueda: trae los registros filtrados según la busqueda. Se presenta si props.buscador != ''\r\n pfcDominioStore: trae los registros completos paginados de 10 en 10. Se presenta si props.buscador == ''\r\n */}\r\n { buscador != '' \r\n ? (<> {/* si ho hay elementos presentamos mensaje si hay de menos uno mostramos lista filtrada */}\r\n { swBusqueda == false\r\n ? (<>

    No hay elementos para el filtro seleccionado

    )\r\n : (<>\r\n {pfcDominioStore?.map((pfcD:any, index:any) => (\r\n (x2 =
    \r\n {pfcD.dominio} \r\n
    ),\r\n (<>\r\n {pfcD.pfcAgrupadoBusqueda.length > 0 &&\r\n (<>\r\n \r\n { radioFiltroSelStore == 'T' &&\r\n (<>\r\n
    \r\n abreCierraDominio(pfcD.id)}\r\n >\r\n \r\n )\r\n }\r\n { (radioFiltroSelStore == 'E' ) &&\r\n (<>\r\n {pfcD.e > 0 &&\r\n (<>\r\n
    \r\n abreCierraDominio(pfcD.id)}\r\n >\r\n \r\n ) \r\n } \r\n )\r\n }\r\n { (radioFiltroSelStore == 'C') &&\r\n (<>\r\n {pfcD.c > 0 &&\r\n (<> \r\n
    \r\n abreCierraDominio(pfcD.id)}\r\n >\r\n \r\n ) \r\n } \r\n )\r\n }\r\n {pfcD.abierto && (\r\n \r\n )} \r\n
    \r\n )\r\n } \r\n )\r\n ))} \r\n )\r\n }\r\n )\r\n : (<> {/* presentamos lista normal sin filtros */}\r\n { pfcDominioStore?.map((pfcD:any, index:any) => (\r\n (x2 =
    \r\n {pfcD.dominio} \r\n
    ),\r\n (<>\r\n \r\n { radioFiltroSelStore == 'T' &&\r\n (<>\r\n
    \r\n abreCierraDominio(pfcD.id)}\r\n >\r\n \r\n )\r\n }\r\n { (radioFiltroSelStore == 'E' ) &&\r\n (<>\r\n {pfcD.e > 0 &&\r\n (<>\r\n
    \r\n abreCierraDominio(pfcD.id)}\r\n >\r\n \r\n ) \r\n } \r\n )\r\n }\r\n { (radioFiltroSelStore == 'C') &&\r\n (<>\r\n {pfcD.c > 0 &&\r\n (<> \r\n
    \r\n abreCierraDominio(pfcD.id)}\r\n >\r\n \r\n ) \r\n } \r\n )\r\n }\r\n {pfcD.abierto && (\r\n \r\n )} \r\n
    \r\n )\r\n ))} \r\n )\r\n } \r\n\r\n \r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n\r\n \r\n )\r\n }\r\n","/* Opciones de Edición */\r\n\r\n//*react- recursos\r\n import React, { useState, useEffect } from \"react\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n \r\n//*api's (servicios y store)\r\n import usersServicio from \"../../../../api/recursos/users/users.servicio\"; \r\n import usersStore from \"../../../../api/recursos/users/users.store\"; \r\n\r\n//*store's\r\n\r\n//*interfaces\r\n interface propsEditarLDAP {\r\n tokenStore:any,\r\n id:any,\r\n usuTipo:any,\r\n listaUsuarios:any,\r\n cambiaListaUsuarios:any,\r\n activaSwBotonGuardar:any,\r\n recargaConfiguracionPanel:any,\r\n recargaConfiguracionPanelEditar:any,\r\n recargaPaginaSSC:any,\r\n }\r\n\r\n//*componente\r\n export default function EditarLDAP(props: propsEditarLDAP){\r\n var _ = require('underscore');\r\n \r\n //*api store\r\n const { guardaSearchUserLDAPStore, usuariosLDAPStore,\r\n generaObjErrorUsersStore} = \r\n usersStore((state:any) =>( { \r\n guardaSearchUserLDAPStore: state.guardaSearchUserLDAPStore,\r\n usuariosLDAPStore: state.usuariosLDAPStore,\r\n generaObjErrorUsersStore: state.generaObjErrorUsersStore,\r\n }));\r\n\r\n //*store's\r\n //*datos\r\n \r\n //*constantes y variables\r\n let etiRP = etiquetasSSC.RP;\r\n let etiGlobal = etiquetasSSC.Global;\r\n let x0:any, x1:any, x2:any, x3:any, x4:any, x5:any, x6:any, x7:any , x8:any = '';\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar\r\n const [swRecargaConfiguracionPanelEditarLDAP, setSwRecargaConfiguracionPanelEditarLDAP] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n \r\n const [swBotonBuscarFront, setSwBotonBuscarFront] = useState(false);\r\n const [swBotonAgregarFront, setSwBotonAgregarFront] = useState(false);\r\n const [swActivaListaLDAP, setSwActivaListaLDAP] = useState(false);\r\n\r\n const [usuariosLDAPFront, setUsuariosLDAPFront] = useState([]);\r\n\r\n const [valorInput, setValorInput] = useState(\"\");\r\n const [listaUsuariosFront, setListaUsuariosFront] = useState(props.listaUsuarios);\r\n \r\n const [usuariosSeleccionado, setUsuariosSeleccionado] = useState({ name: \"\", email: \"\"});\r\n \r\n //*useEffect\r\n useEffect(()=> { // cargo\r\n //console.log('LDAP - monto');\r\n //console.log('unId', props.id);\r\n //console.log('usuTipo',props.usuTipo);\r\n //console.log('upUsuarios', props.listaUsuarios );\r\n setListaUsuariosFront(props.listaUsuarios);\r\n setValorInput('');\r\n setSwActivaListaLDAP(false);\r\n setSwRecarga(!swRecarga);\r\n },[]);\r\n \r\n useEffect(()=> { // uso este puente para recargar elementos del front\r\n console.log('LDAP - rederizando............');\r\n setSwRecargaConfiguracionPanelEditarLDAP(!swRecargaConfiguracionPanelEditarLDAP);\r\n },[swRecarga]);\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } \r\n\r\n const recargaConfiguracionPanel = () => { props.recargaConfiguracionPanel() }\r\n\r\n const recargaConfiguracionPanelEditar = () => { props.recargaConfiguracionPanelEditar() }\r\n\r\n const recargaConfiguracionPanelEditarLDAP = () => {\r\n //alert('recargaConfiguracionPanelEditarLDAP');\r\n //console.log('recargaConfiguracionPanelEditarLDAP....')\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n \r\n const actualizaInputLDAP = (event:any) => { \r\n //console.log('actualizaInputLDAP.value...',event.target.value);\r\n setValorInput(event.target.value); \r\n setSwBotonBuscarFront(true);\r\n //console.log('valorInput............', valorInput);\r\n setSwRecarga(!swRecarga)\r\n }\r\n\r\n const limpiarInputLDAP = () => { \r\n //alert('limpiarInputLDAP');\r\n var espejo:any = document.getElementById(\"inputLDAP\") as HTMLInputElement | null; \r\n if (espejo) espejo.value= \"\"; \r\n setValorInput(\"\"); \r\n setSwBotonBuscarFront(false);\r\n setSwBotonAgregarFront(false)\r\n setSwActivaListaLDAP(false);\r\n }\r\n\r\n const botonBuscar = () => {\r\n //alert('botonBuscar: ' + valorInput)\r\n let bodyAPIBuscar = { \"name\": \"\", \"area_user\": false, \"limit\": 50 }\r\n bodyAPIBuscar.name = valorInput;\r\n // llamando al api: Configurations/UpdateProponentUser\r\n setCargandoSpin(true);\r\n usersServicio.cargaSearchUserLDAP(props.tokenStore, bodyAPIBuscar)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaSearchUserLDAPStore(response.data, bodyAPIBuscar).then( function(datos:any) { \r\n //console.log('actualizamos API: ', datos );\r\n setUsuariosLDAPFront(datos);\r\n setSwActivaListaLDAP(true);\r\n }); \r\n } \r\n setCargandoSpin(false);\r\n setSwRecarga(!swRecarga);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaInsertbyUser): \", ex.response.status);\r\n generaObjErrorUsersStore(ex.response, true, '', '', 'Configuracion.Panel.Editar/cargaSearchUserLDAP','C');\r\n recargaPaginaSSC();\r\n setCargandoSpin(false);\r\n })\r\n }\r\n\r\n const agregaUsuarioLDAP = (datosUsu:any) => {\r\n var espejo:any = document.getElementById(\"inputLDAP\") as HTMLInputElement | null; \r\n espejo.value= datosUsu.name; \r\n setSwActivaListaLDAP(false);\r\n setUsuariosSeleccionado(datosUsu);\r\n setSwBotonAgregarFront(true)\r\n setSwBotonBuscarFront(false);\r\n //console.log('usuariosSeleccionado............', usuariosSeleccionado)\r\n setSwRecarga(!swRecarga);\r\n }\r\n\r\n const botonAgregar = () => {\r\n //alert('botonAgregar')\r\n //console.log('LDPA ----usuariosSeleccionado....', usuariosSeleccionado);\r\n let regUsu = { \"name\": usuariosSeleccionado.name, \"account\": usuariosSeleccionado.email}\r\n let arrPaso:any = [];\r\n let swExiste = false;\r\n arrPaso = listaUsuariosFront;\r\n if (arrPaso.length>0){\r\n arrPaso.map((p:any, indexP:any) => {\r\n //console.log('p.account....',p.account,' regUsu....', regUsu.account);\r\n if (p.account == regUsu.account) { swExiste = true }\r\n });\r\n if (swExiste == false) { arrPaso.push(regUsu) };\r\n }\r\n else { arrPaso.push(regUsu) }\r\n setSwActivaListaLDAP(false);\r\n //setSwBotonGuardarFront(true);\r\n props.activaSwBotonGuardar();\r\n setSwBotonBuscarFront(false);\r\n setSwBotonAgregarFront(false);\r\n var espejo:any = document.getElementById(\"inputLDAP\") as HTMLInputElement | null; \r\n espejo.value= ''; \r\n setListaUsuariosFront(arrPaso); //actualizo aquí\r\n \r\n recargaConfiguracionPanelEditar();\r\n recargaConfiguracionPanel();\r\n setSwRecarga(!swRecarga);\r\n props.cambiaListaUsuarios(props.usuTipo, arrPaso); //actualizamos en EditarUN para que cuando guarde se lo lleve\r\n }\r\n \r\n const boteBasura = (usuario:any) => {\r\n //alert('boteBasura: ' + usuario );\r\n setSwRecarga(!swRecarga);\r\n //console.log('boteBasura-....listaUsuariosFront', listaUsuariosFront);\r\n //console.log('boteBasura-....usuario', usuario);\r\n let arrPaso:any = [];\r\n let arrPaso2:any = [];\r\n arrPaso = listaUsuariosFront;\r\n console.log('boteBasura-....arrPaso', arrPaso);\r\n if (arrPaso.length>0){\r\n arrPaso.map((p:any, indexP:any) => {\r\n //console.log('p.account....',p.account,' regUsu....', regUsu.account);\r\n if (p.account != usuario) { arrPaso2.push(p) }\r\n });\r\n }\r\n //console.log('boteBasura-....arrPaso2', arrPaso2);\r\n else { setListaUsuariosFront(arrPaso2) }; //actualizo aquí\r\n props.cambiaListaUsuarios(props.usuTipo, arrPaso2); //actualizamos en EditarUN para que cuando guarde se lo lleve\r\n setListaUsuariosFront(arrPaso2);\r\n props.activaSwBotonGuardar();\r\n\r\n //console.log('boteBasura-....listaUsuariosFront', listaUsuariosFront);\r\n //setSwBotonGuardarFront(true);\r\n //console.log('upUsuariosEspecificosFront....', upUsuariosEspecificosFront);\r\n\r\n recargaConfiguracionPanelEditarLDAP();\r\n recargaConfiguracionPanelEditar();\r\n recargaConfiguracionPanel();\r\n \r\n }\r\n\r\n //**vista \r\n return (\r\n <>\r\n {/* ventana LDAP */}\r\n
    \r\n \r\n {/* pasos */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n Ingrese la clave de usuario de correo electrónico Institucional (clave.usuario) por ejemplo (juan.perez)
    \r\n Ingrese los apellidos seguidos por el nombre(s); por ejemplo (PEREZ LOPEZ JUAN o PEREZ LOPEZ)\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n {/* input & botón Buscar & botón Aceptar */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n { swBotonBuscarFront \r\n ? (<>   )\r\n : (<>   )\r\n }\r\n
    \r\n
    \r\n { swBotonAgregarFront \r\n ? (<> )\r\n : (<> )\r\n }\r\n
    \r\n
    \r\n
    \r\n\r\n {/* ventana con lista de LDAP*/}\r\n { swActivaListaLDAP &&\r\n (<>\r\n
    \r\n
    \r\n
    \r\n { usuariosLDAPFront?.map((usu:any, indexUsu:any) => (\r\n (<>\r\n agregaUsuarioLDAP(usu)} className='color-Gris1 font-size-10 text-decoration-none'>\r\n  {usu.name}\r\n
    \r\n ) \r\n ))}\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n {/* Usuarios específicos seleccionados (1) noBR small margin-1r*/}\r\n
    \r\n
    \r\n
    \r\n { listaUsuariosFront?.map((usu:any, indexUsu:any) => (\r\n (<>\r\n
    \r\n
    \r\n  {usu.name}\r\n
     \r\n
    \r\n  {usu.account}\r\n
    \r\n
    \r\n \r\n {/*   */}\r\n
    \r\n
    \r\n ) \r\n ))} \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && } \r\n \r\n \r\n );\r\n }\r\n","/*Recurso: Configurations - Servicio de lectura del API: Maneja los elementos de Configuración\r\n Tareas:\r\n GetSummaryProponentUser //lee los usuarios proponentes\r\n GetSummaryUserNotificationbyEmail //lee los usuarios para notificaciones \r\n UpdateProponentUser //guarda los usuarios proponentes\r\n UpdateUserNotificationbyEmail //guarda los usuarios para notificaciones \r\n*/\r\n\r\nimport axios from \"axios\";\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL + 'Configurations/';\r\n\r\n //se genera una función por cada tarea del recurso api\r\n\r\n //tarea: GetSummaryProponentUser\r\n const cargaGetSummaryProponentUser = async (token:any) => {\r\n //console.log ('***API: ' + API_URL + 'GetSummaryProponentUser', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetSummaryProponentUser', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: GetSummaryUserNotificationbyEmail\r\n const cargaGetSummaryUserNotificationbyEmail = async (token:any) => {\r\n // console.log ('***API: ' + API_URL + 'GetSummaryUserNotificationbyEmail', {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'GetSummaryUserNotificationbyEmail', 'method: post',\r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n \r\n //tarea: UpdateProponentUser\r\n const cargaUpdateProponentUser = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'UpdateProponentUser', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'UpdateProponentUser', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\n //tarea: UpdateUserNotificationbyEmail\r\n const cargaUpdateUserNotificationbyEmail = async (token:any, body:any) => {\r\n //console.log ('***API: ' + API_URL + 'UpdateUserNotificationbyEmail', body, {headers: { 'content-type': 'text/json' }} )\r\n return await axios.post(API_URL + 'UpdateUserNotificationbyEmail', body, \r\n {headers: { 'content-type': 'text/json', \"Authorization\":token }} )\r\n };\r\n\r\nconst configurationsService = {\r\n cargaGetSummaryProponentUser: cargaGetSummaryProponentUser,\r\n cargaGetSummaryUserNotificationbyEmail: cargaGetSummaryUserNotificationbyEmail,\r\n cargaUpdateProponentUser: cargaUpdateProponentUser,\r\n cargaUpdateUserNotificationbyEmail: cargaUpdateUserNotificationbyEmail,\r\n};\r\n\r\nexport default configurationsService;\r\n","/* Opciones de Edición */\r\n\r\n//*react- recursos\r\n import React, { useState, useEffect } from \"react\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n import { setRef } from \"@mui/material\";\r\n\r\n//*archivos y componentes\r\n import VentanaLDAP from \"./Configuracion.Panel.Editar.LDAP\"; //ventana LDAP \r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n \r\n//*api's (servicios y store)\r\n import configurationsServicio from \"../../../../api/recursos/configurations/configurations.servicio\"; \r\n import configurationsStore from \"../../../../api/recursos/configurations/configurations.store\"; \r\n\r\n /* import usersServicio from \"../../../../api/recursos/users/users.servicio\"; \r\n import usersStore from \"../../../../api/recursos/users/users.store\"; */\r\n \r\n\r\n//*store's\r\n\r\n//*interfaces\r\n interface propsEditarUP {\r\n tokenStore:any,\r\n idPanel:any,\r\n upId:any,\r\n upAcronimo:any,\r\n upProceso:any,\r\n upCatPermisos:any,\r\n upCatPermisosOrigen:any,\r\n upUsuariosEspecificos:any,\r\n upSwUsuariosEspecificos:any,\r\n upMisUsuEspecificosOrigen:any,\r\n botonCierraSlidingPanel:any,\r\n recargaConfiguracionPanel:any,\r\n recargaPaginaSSC:any,\r\n recargaPaginaSSC_Not:any,\r\n }\r\n\r\n//*componente\r\n export default function EditarUP(props: propsEditarUP) {\r\n var _ = require('underscore');\r\n \r\n //*api store\r\n const { cambiaUsuariosProponentesStore, canceloUsuarioProponenteStore, \r\n guardaUpdateProponentUserStore, \r\n generaObjErrorConfigurationsStore} = \r\n configurationsStore((state:any) =>( { \r\n cambiaUsuariosProponentesStore: state.cambiaUsuariosProponentesStore,\r\n canceloUsuarioProponenteStore: state.canceloUsuarioProponenteStore,\r\n guardaUpdateProponentUserStore: state.guardaUpdateProponentUserStore,\r\n generaObjErrorConfigurationsStore: state.generaObjErrorConfigurationsStore,\r\n }));\r\n\r\n /* const { guardaSearchUserLDAPStore, usuariosLDAPStore,\r\n generaObjErrorUsersStore} = \r\n usersStore((state:any) =>( { \r\n guardaSearchUserLDAPStore: state.guardaSearchUserLDAPStore,\r\n usuariosLDAPStore: state.usuariosLDAPStore,\r\n generaObjErrorUsersStore: state.generaObjErrorUsersStore,\r\n })); */\r\n\r\n //*store's\r\n\r\n //*datos\r\n let bodyAPIGuardar:any = { id:null, sync: true, setting: { right_propose: 0, specificuser: [] } }\r\n \r\n //*constantes y variables\r\n let etiRP = etiquetasSSC.RP;\r\n let etiGlobal = etiquetasSSC.Global;\r\n let x0:any, x1:any, x2:any, x3:any, x4:any, x5:any, x6:any, x7:any , x8:any = '';\r\n let msjError = \"

    \" + \"Tiene activo Usuarios específicos y no los ha agregado
    \" + \"

    \"+ \"¿Desea agregar?\" + \"

    \";\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar\r\n const [swRecargaConfiguracionPanelEditarUP, setSwRecargaConfiguracionPanelEditarUP] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n\r\n //upUsuariosEspecificos = {upUsuariosEspecificos}\r\n const [upSwUsuariosEspecificosOrigen, setUpSwUsuariosEspecificosOrigen] = useState(props.upSwUsuariosEspecificos);\r\n const [upMisUsuEspecificosOrigen, setUpMisUsuEspecificosOrigen] = useState(props.upMisUsuEspecificosOrigen);\r\n\r\n const [upUsuariosEspecificosFront, setUpUsuariosEspecificosFront] = useState(props.upUsuariosEspecificos);\r\n \r\n const [swUsuarioEspecifico, setSwUsuarioEspecifico] = useState(props.upSwUsuariosEspecificos);\r\n const [swBotonGuardarFront, setSwBotonGuardarFront] = useState(false);\r\n const [swBotonBuscarFront, setSwBotonBuscarFront] = useState(false);\r\n const [swBotonAgregarFront, setSwBotonAgregarFront] = useState(false);\r\n const [swActivaListaLDAP, setSwActivaListaLDAP] = useState(false);\r\n\r\n const [swMensaje, setSwMensaje] = useState(false);\r\n const [swContinuar, setSwContinuar] = useState(true); \r\n\r\n const [valorInput, setValorInput] = useState(\"\");\r\n const [usuariosSeleccionado, setUsuariosSeleccionado] = useState({ name: \"\", email: \"\"});\r\n const [upCatPermisosFront, setUpCatPermisosFront] = useState([]);\r\n \r\n const [abreSP, setAbreSP] = useState(false);\r\n \r\n //*useEffect\r\n useEffect(()=> { // cargo\r\n console.log('Editar - monto');\r\n console.log('upSwUsuariosEspecificosOrigen...', upSwUsuariosEspecificosOrigen)\r\n console.log('upMisUsuEspecificosOrigen...', upMisUsuEspecificosOrigen)\r\n \r\n \r\n //if (props.upUsuariosEspecificos.length > 0) { setSwUsuarioEspecifico(true) }\r\n //if (props.upCatPermisos[5].activo = true ) { setSwUsuarioEspecifico(true) }\r\n //console.log('idPanel', props.idPanel);\r\n //console.log('upId', props.upId);\r\n //console.log('upAcronimo', props.upAcronimo );\r\n //console.log('upProceso', props.upProceso);\r\n //console.log('upCatPermiso', props.upCatPermisos);\r\n //console.log('upCatPermisosOrigen', props.upCatPermisosOrigen);\r\n //console.log('upUsuariosEspecificos', props.upUsuariosEspecificos);\r\n //console.log('***********swUsuarioEspecifico', swUsuarioEspecifico);\r\n\r\n ////setUpUsuariosEspecificosFront(JSON.parse(JSON.stringify(props.upUsuariosEspecificos)))\r\n setSwActivaListaLDAP(false);\r\n // setSwError(false);\r\n setSwContinuar(true);\r\n setSwRecarga(!swRecarga);\r\n\r\n },[]);\r\n \r\n useEffect(()=> { // uso este puente para recargar elementos del front\r\n console.log('Editar - rederizando............');\r\n setSwRecargaConfiguracionPanelEditarUP(!swRecargaConfiguracionPanelEditarUP);\r\n console.log('-- upCatPermiso', props.upCatPermisos);\r\n console.log('swUsuarioEspecifico', swUsuarioEspecifico);\r\n //console.log('-- upCatPermisosOrigen', props.upCatPermisosOrigen);\r\n //console.log('-- upUsuariosEspecificosFront....', upUsuariosEspecificosFront)\r\n //console.log('upUsuariosEspecificosFront....', upUsuariosEspecificosFront);\r\n },[swRecarga]);\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n //const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n //const recargaConfiguracion = () => { props.recargaConfiguracion() }\r\n\r\n const recargaConfiguracionPanel = () => { props.recargaConfiguracionPanel() }\r\n\r\n const recargaConfiguracionPanelEditarUP = () => {\r\n //alert('recargaConfiguracionPanelEditarUP');\r\n //console.log('recargaConfiguracionPanelEditarUP....')\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n \r\n const cambiaCatPermisos = (e:any) => {\r\n //alert('cambiaCatPermisos - id: ' + e.target.id + ' .. value: '+ e.target.value );\r\n console.log('----e.target.id:', e.target.id, '..e.target.value: ', e);\r\n let idCat = e.target.id\r\n let checkCat = e.target.checked;\r\n if (idCat == 5) {\r\n setSwUsuarioEspecifico(!swUsuarioEspecifico);\r\n cambiaListaUsuarios('UP',[])\r\n //console.log('----swUsuarioEspecifico:', swUsuarioEspecifico)\r\n }\r\n if (idCat == 3 && checkCat) { setSwUsuarioEspecifico(false) }\r\n\r\n cambiaUsuariosProponentesStore(props.upId, idCat, null, 'cambiaCatPermisos');\r\n setSwBotonGuardarFront(true);\r\n recargaConfiguracionPanelEditarUP();\r\n recargaConfiguracionPanel();\r\n }\r\n\r\n const botonCerrar = () => { \r\n if (swBotonGuardarFront) { //si esta activo el botón guardar hay cambios...\r\n swal2.fire({\r\n text: \"\",\r\n icon: 'question',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '50%',\r\n html: \"
    \" + 'Se detectaron cambios sin guardar. ¿Está seguro de salir de la ventana Editar?'+ \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n //cambiaUsuariosProponentesStore(props.upId, upSwUsuariosEspecificosOrigen, props.upCatPermisosOrigen, 'botonCerrarSinCambios');\r\n //canceloUsuarioProponenteStore: async ( id:any, swUsu:any, catPermisosOrigen:any, misUsuariosEspecificosOrigen:any )\r\n canceloUsuarioProponenteStore(props.upId, upSwUsuariosEspecificosOrigen, props.upCatPermisosOrigen, props.upMisUsuEspecificosOrigen);\r\n recargaConfiguracionPanelEditarUP();\r\n recargaConfiguracionPanel(); //actualizamos páginas de atrás\r\n \r\n setSwUsuarioEspecifico(upSwUsuariosEspecificosOrigen);\r\n recargaConfiguracionPanelEditarUP();\r\n console.clear();\r\n console.log('upSwUsuariosEspecificosOrigen...', upSwUsuariosEspecificosOrigen);\r\n console.log('swUsuarioEspecifico...', swUsuarioEspecifico);\r\n props.botonCierraSlidingPanel('');\r\n \r\n setSwRecarga(!swRecarga);\r\n }\r\n else\r\n return;\r\n })\r\n }\r\n else { //cerramos SlipingPanel desde RD\r\n recargaConfiguracionPanelEditarUP();\r\n recargaConfiguracionPanel(); //actualizamos páginas de atrás\r\n props.botonCierraSlidingPanel('');\r\n } \r\n }\r\n\r\n const botonGuardar = () => {\r\n console.clear();\r\n console.log('swUsuarioEspecifico..', swUsuarioEspecifico , ' upUsuariosEspecificosFront ', upUsuariosEspecificosFront.length)\r\n if (swUsuarioEspecifico && upUsuariosEspecificosFront.length == 0) {\r\n swal2.fire({\r\n title: \"Tiene marcado la casilla de Usuarios específicos, agregue uno o más usuarios\",\r\n icon: 'warning',\r\n confirmButtonColor: '#3085d6',\r\n confirmButtonText: \"Cerrar\",\r\n width: '60%',\r\n })\r\n }\r\n else { preguntaTodosProcesos() }\r\n }\r\n\r\n const preguntaTodosProcesos = () => {\r\n console.log('pregunto por todos los procesos'); \r\n if (props.upId==0) { //selecciono el botón Editar de \"Todos los programas a mi cargo\"\r\n swal2.fire({\r\n title: \"\",\r\n icon: 'warning',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '50%',\r\n html: \"

    \" + \"Con esta acción los usuarios que tenga asignados a los procesos serán sustituidos por los indicados en esta sección.\" + \"

    \" + \"Las configuraciones anteriormente especificadas para cada proceso se eliminarán y serán reemplazadas por las aquí definidas.\" + \"

    \"+ \"¿Desea continuar?\" + \"

    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) { guardaAPI() }\r\n else { return }\r\n })\r\n }\r\n else { guardaAPI() }\r\n }\r\n\r\n const guardaAPI = () => {\r\n //generamos body\r\n let bodyAPI = { id:null, sync: true, setting: { right_propose: 0, specificuser: [] } };\r\n bodyAPIGuardar = bodyAPI;\r\n bodyAPIGuardar.id= (props.upId == 0) ? null : props.upId;\r\n \r\n let paso = '';\r\n props.upCatPermisos?.map((catP:any, indexCatP:any) => {\r\n switch (catP.id) {\r\n case 0: if (catP.activo) { paso = paso + 'RPRD' }; break;\r\n case 3: if (catP.activo) { paso = paso + 'INEGI'}; break;\r\n case 4: if (catP.activo) { paso = paso + 'DG' }; break;\r\n case 5: if (catP.activo) { paso = paso + 'UE' }; break;\r\n }\r\n });\r\n switch (paso) {\r\n case 'RPRD': bodyAPIGuardar.setting.right_propose = 3; break;\r\n case 'RPRDINEGI': bodyAPIGuardar.setting.right_propose = 7; break;\r\n case 'RPRDDG': bodyAPIGuardar.setting.right_propose = 11; break;\r\n case 'RPRDUE': \r\n bodyAPIGuardar.setting.right_propose = 19; \r\n bodyAPIGuardar.setting.specificuser = upUsuariosEspecificosFront; \r\n break;\r\n case 'RPRDDGUE': \r\n bodyAPIGuardar.setting.right_propose = 27; \r\n bodyAPIGuardar.setting.specificuser = upUsuariosEspecificosFront; \r\n break;\r\n };\r\n if (swUsuarioEspecifico== false) { bodyAPIGuardar.setting.specificuser= [] };\r\n\r\n console.log(':::::::::::::::::::::::::::::::::::Antes de guardar-- bodyAPIGuardar::::::', bodyAPIGuardar);\r\n // llamando al api: Configurations/UpdateProponentUser\r\n setCargandoSpin(true);\r\n configurationsServicio.cargaUpdateProponentUser(props.tokenStore, bodyAPIGuardar)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaUpdateProponentUserStore(response.data).then( function(updateProponentUserFront:any) { \r\n //console.log('actualizamos API: ', updateProponentUserFront );\r\n setSwBotonGuardarFront(false);\r\n swal2.fire({\r\n title: 'La información para usuarios autorizados fue guardada', \r\n icon: 'success',\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n width: \"70%\",\r\n });\r\n cambiaUsuariosProponentesStore(props.upId, null, upUsuariosEspecificosFront, 'botonGuardar');\r\n }); \r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaInsertbyUser): \", ex.response.status);\r\n generaObjErrorConfigurationsStore(ex.response, true, '', '', 'Configuración.Panel.EditarUP/UpdateProponentUser','C');\r\n props.recargaPaginaSSC();\r\n setCargandoSpin(false);\r\n })\r\n recargaConfiguracionPanelEditarUP();\r\n recargaConfiguracionPanel(); //actualizamos páginas de atrás\r\n }\r\n\r\n const activaSwBotonGuardar = () => {\r\n setSwBotonGuardarFront(true);\r\n }\r\n\r\n const clicInputCheck = () => {\r\n setSwUsuarioEspecifico(!swUsuarioEspecifico)\r\n setSwBotonGuardarFront(true);\r\n }\r\n\r\n const cambiaListaUsuarios = (usuTipo:any, usuArreglo:any) => {\r\n //alert('cambiaListaUsuarios');\r\n console.log('EditarUP----cambiaListaUsuarios',usuTipo,usuArreglo );\r\n setUpUsuariosEspecificosFront(usuArreglo);\r\n cambiaUsuariosProponentesStore(props.upId, null, usuArreglo, 'cambiaListaUsuarios');\r\n console.log('upUsuariosEspecificosFront......',upUsuariosEspecificosFront ); \r\n recargaConfiguracionPanelEditarUP();\r\n recargaConfiguracionPanel();\r\n } \r\n\r\n //**vista \r\n return (\r\n <>\r\n {/* subencabezado: acronimo & nombre del proceso */}\r\n
    \r\n

    {props.upAcronimo}

    \r\n

    {props.upProceso}

    \r\n
    \r\n
    \r\n\r\n {/* contenido - id=0 - Alta de usuarios proponentes */}\r\n
    \r\n\r\n {/*Usuarios autorizados */}\r\n

    Usuarios autorizados

    \r\n \r\n
    \r\n { props.upCatPermisos?.map((cpu:any, indexCPU:any) =>\r\n (<>\r\n {cpu.visible &&\r\n (<>\r\n
    \r\n clicInputCheck()} */\r\n />\r\n
    \r\n
    {cpu.descripcion}

    \r\n )\r\n }\r\n \r\n ) \r\n )} \r\n
    \r\n\r\n {/*Usuarios específicos */}\r\n {/*

    sw: {swUsuarioEspecifico ? <>t : <>f}

    */}\r\n {swUsuarioEspecifico && \r\n (<> \r\n ) \r\n }\r\n
    \r\n
    \r\n \r\n \r\n {/* Botones */}\r\n
    \r\n
    \r\n
    \r\n { swBotonGuardarFront \r\n ? (<>   )\r\n : (<>  )\r\n }\r\n  \r\n
    \r\n
    \r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && } \r\n \r\n \r\n );\r\n }\r\n","/* Opciones de Edición */\r\n\r\n//*react- recursos\r\n import React, { useState, useEffect } from \"react\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n import { Col, Row } from \"react-bootstrap\";\r\n import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"; //'libreria' que cita el bote de basura\r\n import { faTrashAlt } from \"@fortawesome/free-solid-svg-icons\"; //icono bote de basura \r\n import { setRef } from \"@mui/material\";\r\n\r\n//*archivos y componentes\r\n import VentanaLDAP from \"./Configuracion.Panel.Editar.LDAP\"; //ventana LDAP \r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n \r\n//*api's (servicios y store)\r\n import configurationsServicio from \"../../../../api/recursos/configurations/configurations.servicio\"; \r\n import configurationsStore from \"../../../../api/recursos/configurations/configurations.store\"; \r\n\r\n import usersServicio from \"../../../../api/recursos/users/users.servicio\"; \r\n import usersStore from \"../../../../api/recursos/users/users.store\"; \r\n\r\n//*store's\r\n\r\n//*interfaces\r\n interface propsEditarUN {\r\n tokenStore:any,\r\n idPanel:any,\r\n unId:any,\r\n unAcronimo:any,\r\n unProceso:any,\r\n unUsuNoAceptadas:any,\r\n unUsuAceptadas:any,\r\n unUsuConcluidas:any,\r\n unMisNoAceptadasOrigen:any,\r\n unMisAceptadasOrigen:any,\r\n unMisConcluidasOrigen:any,\r\n botonCierraSlidingPanel:any,\r\n recargaConfiguracionPanel:any,\r\n recargaPaginaSSC:any,\r\n recargaPaginaSSC_Not:any,\r\n }\r\n\r\n//*componente\r\n export default function EditarUN(props: propsEditarUN){\r\n var _ = require('underscore');\r\n \r\n //*api store\r\n const { cambiaUsuariosNotificacionesStore, \r\n guardaUpdateUserNotificationbyEmailStore, \r\n canceloUsuariosNotificiacionesStore,\r\n generaObjErrorConfigurationsStore} = \r\n configurationsStore((state:any) =>( { \r\n cambiaUsuariosNotificacionesStore: state.cambiaUsuariosNotificacionesStore,\r\n guardaUpdateUserNotificationbyEmailStore: state.guardaUpdateUserNotificationbyEmailStore,\r\n canceloUsuariosNotificiacionesStore: state.canceloUsuariosNotificiacionesStore,\r\n generaObjErrorConfigurationsStore: state.generaObjErrorConfigurationsStore,\r\n }));\r\n\r\n //*store's\r\n //*datos\r\n \r\n //*constantes y variables\r\n let etiRP = etiquetasSSC.RP;\r\n let etiGlobal = etiquetasSSC.Global;\r\n let x0:any, x1:any, x2:any, x3:any, x4:any, x5:any, x6:any, x7:any , x8:any = '';\r\n let copiaUpCatPermisos=[];\r\n let bodyApiGuardar:any = {id: 0, sync: true, rejectprop:[], okprop:[], okanalyse:[] }\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar\r\n const [swRecargaConfiguracionPanelEditarUN, setSwRecargaConfiguracionPanelEditarUN] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n\r\n const [swBotonGuardarFront, setSwBotonGuardarFront] = useState(false);\r\n\r\n const [swUsuNoAceptadas, setSwUsuNoAceptadas] = useState(false);\r\n const [swUsuAceptadas, setSwUsuAceptadas] = useState(false);\r\n const [swUsuConcluidas, setSwUsuConcluidas] = useState(false);\r\n\r\n const [unUsuNoAceptadasFront, setUnUsuNoAceptadasFront] = useState(props.unUsuNoAceptadas);\r\n const [unUsuAceptadasFront, setUnUsuAceptadasFront] = useState(props.unUsuAceptadas);\r\n const [unUsuConcluidasFront, setUnUsuConcluidasFront] = useState(props.unUsuConcluidas);\r\n\r\n const [usuSeleccionado, setUsuSeleccionado] = useState('');\r\n \r\n //const [bodyApiGuardar, setBodyApiGuardar] = useState ( {id: 0, sync: true, rejectprop:[], okprop:[], okanalyse:[]} );\r\n\r\n \r\n //*useEffect\r\n useEffect(()=> { // cargo\r\n console.log('EditarUN - monto');\r\n //console.log('idPanel', props.idPanel);\r\n //console.log('unId', props.unId);\r\n\r\n if (props.unUsuNoAceptadas.length > 0) { setSwUsuNoAceptadas(true) }\r\n else { setSwUsuNoAceptadas(false) }\r\n\r\n if (props.unUsuAceptadas.length > 0) { setSwUsuAceptadas(true) }\r\n else { setSwUsuAceptadas(false) }\r\n\r\n if (props.unUsuConcluidas.length > 0) { setSwUsuConcluidas(true) }\r\n else { setSwUsuConcluidas(false) }\r\n\r\n bodyApiGuardar.id = props.unId;\r\n bodyApiGuardar.rejectprop = props.unUsuNoAceptadas;\r\n bodyApiGuardar.okprop = props.unUsuAceptadas;\r\n bodyApiGuardar.okanalyse = props.unUsuConcluidas;\r\n\r\n setUsuSeleccionado('');\r\n \r\n setSwRecarga(!swRecarga);\r\n },[]);\r\n \r\n useEffect(()=> { // uso este puente para recargar elementos del front\r\n console.log('EditarUN - rederizando............');\r\n setSwRecargaConfiguracionPanelEditarUN(!swRecargaConfiguracionPanelEditarUN)\r\n //console.log('-- bodyApiGuardar', bodyApiGuardar);\r\n //console.log('-- upCatPermisosOrigen', props.upCatPermisosOrigen);\r\n //console.log('-- upUsuariosEspecificosFront....', upUsuariosEspecificosFront)\r\n //console.log('upUsuariosEspecificosFront....', upUsuariosEspecificosFront);\r\n },[swRecarga]);\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => {props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n //const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n //const recargaConfiguracion = () => { props.recargaConfiguracion() }\r\n const recargaConfiguracionPanel = () => { props.recargaConfiguracionPanel() }\r\n\r\n\r\n const recargaConfiguracionPanelEditarUN = () => {\r\n //alert('recargaConfiguracionPanelEditarUN');\r\n //console.log('recargaConfiguracionPanelEditarUN....')\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n \r\n const botonCerrar = () => { \r\n if (swBotonGuardarFront) { //si esta activo el botón guardar hay cambios...\r\n swal2.fire({\r\n text: \"\",\r\n icon: 'question',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '50%',\r\n html: \"
    \" + 'Se detectaron cambios sin guardar. ¿Está seguro de salir de la ventana de Editar?'+ \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n canceloUsuariosNotificiacionesStore(props.unId);\r\n recargaConfiguracionPanelEditarUN();\r\n recargaConfiguracionPanel();\r\n props.botonCierraSlidingPanel('');\r\n setSwBotonGuardarFront(false);\r\n }\r\n else\r\n return;\r\n })\r\n }\r\n else { //cerramos SlipingPanel desde RD\r\n props.botonCierraSlidingPanel('');\r\n } \r\n recargaConfiguracionPanelEditarUN();\r\n }\r\n\r\n const botonGuardar = () => {\r\n if (props.unId==0) { //selecciono el botón Editar de \"Todos los programas a mi cargo\"\r\n swal2.fire({\r\n title: \"\",\r\n icon: 'warning',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '50%',\r\n html: \"

    \" + \"Con esta acción los usuarios que tenga asignados a los procesos serán sustituidos por los indicados en esta sección.\" + \"

    \" + \"Las configuraciones anteriormente especificadas para cada proceso se eliminarán y serán reemplazadas por las aquí definidas.\" + \"

    \"+ \"¿Desea continuar?\" + \"

    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) { guardaAPI() }\r\n else { return }\r\n })\r\n }\r\n else { guardaAPI() } \r\n }\r\n\r\n const guardaAPI = () => {\r\n //generamos body\r\n bodyApiGuardar.id = (props.unId==0) ? null : props.unId;\r\n bodyApiGuardar.rejectprop = unUsuNoAceptadasFront;\r\n bodyApiGuardar.okprop = unUsuAceptadasFront;\r\n bodyApiGuardar.okanalyse = unUsuConcluidasFront;\r\n if (swUsuNoAceptadas== false) { bodyApiGuardar.rejectprop= [] };\r\n if (swUsuAceptadas== false) { bodyApiGuardar.okprop= [] };\r\n if (swUsuConcluidas== false) { bodyApiGuardar.okanalyse= [] };\r\n console.log(':::::Antes de guardar-- bodyApiGuardar', bodyApiGuardar);\r\n // llamando al api: Configurations/UpdateProponentUser\r\n setCargandoSpin(true);\r\n configurationsServicio.cargaUpdateUserNotificationbyEmail(props.tokenStore, bodyApiGuardar)\r\n .then((response:any) => {\r\n if (response.status==200) { //revisa si hay error\r\n guardaUpdateUserNotificationbyEmailStore(response.data).then( function(datos:any) { \r\n //console.log('actualizamos API: ', datos );\r\n setSwBotonGuardarFront(false);\r\n swal2.fire({\r\n title: 'La información para notificación de usuarios fue guardada', \r\n icon: 'success',\r\n confirmButtonText: \"Cerrar\",\r\n confirmButtonColor: '#3085d6',\r\n width: \"70%\",\r\n });\r\n cambiaUsuariosNotificacionesStore(props.unId, bodyApiGuardar, 'botonGuardar');\r\n }); \r\n } \r\n props.recargaConfiguracionPanel();\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaInsertbyUser): \", ex.response.status);\r\n generaObjErrorConfigurationsStore(ex.response, true, '', '', 'Configuración.Panel.EditarUN/UpdateUserNotificationbyEmailStore','C');\r\n recargaPaginaSSC();\r\n setCargandoSpin(false);\r\n })\r\n recargaConfiguracionPanel(); //actualizamos páginas de atrás\r\n }\r\n\r\n const activaSwBotonGuardar = () => {\r\n setSwBotonGuardarFront(true);\r\n }\r\n\r\n const clicInputCheck = (usuTipo:any) => {\r\n switch (usuTipo) {\r\n case 'NA': setSwUsuNoAceptadas(!swUsuNoAceptadas); break;\r\n case 'A': setSwUsuAceptadas(!swUsuAceptadas); break;\r\n case 'C': setSwUsuConcluidas(!swUsuConcluidas); break;\r\n }\r\n setSwBotonGuardarFront(true);\r\n }\r\n\r\n const cambiaListaUsuarios = (usuTipo:any, usuArreglo:any) => {\r\n //alert('cambiaListaUsuarios');\r\n console.log('EditarUN----cambiaListaUsuarios',usuTipo,usuArreglo );\r\n switch (usuTipo) {\r\n case 'NA': setUnUsuNoAceptadasFront(usuArreglo); break;\r\n case 'A': setUnUsuAceptadasFront(usuArreglo); break;\r\n case 'C': setUnUsuConcluidasFront(usuArreglo); break;\r\n }\r\n console.log('unUsuAceptadasFront......',unUsuAceptadasFront );\r\n }\r\n\r\n /* */\r\n\r\n //**vista \r\n return (\r\n <>\r\n {/* subencabezado: acronimo & nombre del proceso */}\r\n
    \r\n

    {props.unAcronimo}

    \r\n

    {props.unProceso}

    \r\n
    \r\n
    \r\n\r\n {/* contenido - id=1 - Adicionar usuarios para notificaciones vía correo electrónico */}\r\n
    \r\n\r\n {/* Propuestas No aceptadas (No proceden) */}\r\n
    \r\n

    Propuestas No aceptadas (No proceden)

    \r\n
    \r\n
    \r\n clicInputCheck('NA')} />\r\n
    \r\n
    Usuarios específicos seleccionados ( {props.unUsuNoAceptadas.length} )

    \r\n
    \r\n {swUsuNoAceptadas && \r\n (<> ) \r\n }\r\n
    \r\n
    \r\n\r\n {/* Propuestas Aceptadas (Previstas y No previstas) */}\r\n
    \r\n

    Propuestas Aceptadas (Previstas y No previstas)

    \r\n
    \r\n
    \r\n clicInputCheck('A')} />\r\n
    \r\n
    Usuarios específicos seleccionados ( {props.unUsuAceptadas.length} )

    \r\n
    \r\n\r\n {swUsuAceptadas && \r\n (<> ) \r\n }\r\n
    \r\n
    \r\n\r\n\r\n {/* Al concluir documentación de propuesta */}\r\n
    \r\n

    Al concluir documentación de propuesta

    \r\n
    \r\n
    \r\n clicInputCheck('C')} />\r\n
    \r\n
    Usuarios específicos seleccionados ( {props.unUsuConcluidas.length} )

    \r\n
    \r\n {swUsuConcluidas && \r\n (<> ) \r\n }\r\n
    \r\n \r\n
    \r\n \r\n {/* Botones */}\r\n
    \r\n
    \r\n
    \r\n { swBotonGuardarFront \r\n ? (<>   )\r\n : (<>  )\r\n }\r\n  \r\n
    \r\n
    \r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && } \r\n \r\n \r\n );\r\n }\r\n","/* Configuracion - Panel (ya seleccionó un panel y aplica la primera lectura del api)*/\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n import swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\n//*componentes-utiles\r\n import CargandoSpin from \"../../../../componentes/CargandoSpin\";\r\n import { SlidingPanel } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n//*clases \r\n import ReactTooltip from \"react-tooltip\";\r\n import '../../../../css/mdi.css'; \r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n import PanelEditarUP from \"./Configuracion.Panel.EditarUP\"; //usuarios proponentes \r\n import PanelEditarUN from \"./Configuracion.Panel.EditarUN\"; //usuarios para notificaciones\r\n\r\n//*api's (servicios y store)\r\n import configurationsServicio from \"../../../../api/recursos/configurations/configurations.servicio\"; \r\n import configurationsStore from \"../../../../api/recursos/configurations/configurations.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\";\r\n \r\n//*interfaces\r\n interface propsPanel {\r\n tokenStore: any;\r\n idPanel: any,\r\n panelStore:any,\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not: any;\r\n }\r\n\r\n//*componente\r\n export default function Panel(props: propsPanel) { \r\n //*api store\r\n const { guardaGetSummaryProponentUserStore, usuariosProponentesStore, \r\n guardaGetSummaryUserNotificationbyEmailStore, usuariosNotificacionesStore,\r\n catalogoPermisosUsuariosStore, permisosUsuariosStore,\r\n generaObjErrorConfigurationsStore} = \r\n configurationsStore((state:any) =>( { \r\n guardaGetSummaryProponentUserStore: state.guardaGetSummaryProponentUserStore,\r\n usuariosProponentesStore: state.usuariosProponentesStore,\r\n guardaGetSummaryUserNotificationbyEmailStore: state.guardaGetSummaryUserNotificationbyEmailStore,\r\n usuariosNotificacionesStore: state.usuariosNotificacionesStore,\r\n catalogoPermisosUsuariosStore: state.catalogoPermisosUsuariosStore,\r\n permisosUsuariosStore: state.permisosUsuariosStore,\r\n generaObjErrorConfigurationsStore: state.generaObjErrorConfigurationsStore\r\n }));\r\n\r\n //*store's\r\n \r\n //*datos\r\n\r\n //*constantes y variables\r\n let eti= etiquetasSSC.Configuracion;\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar\r\n const [swRecargaConfiguracionPanel, setSwRecargaConfiguracionPanel] = useState(false); //usado para remasterizar esta página\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n\r\n //para usuarios proponentes\r\n const [upId, setUpId] = useState(null);\r\n const [upAcronimo, setUpAcronimo] = useState(null);\r\n const [upProceso, setUpProceso] = useState(null);\r\n const [upCatPermisos, setUpCatPermisos] = useState(null);\r\n const [upCatPermisosOrigen, setUpCatPermisosOrigen] = useState(null);\r\n const [upSwUE, setupSwUE] = useState(false);\r\n const [upUsuariosEspecificos, setUpUsuariosEspecificos] = useState([]);\r\n const [upSwUsuariosEspecificos, setUpSwUsuariosEspecificos] = useState(false);\r\n const [upMisUsuEspecificosOrigen, setUpMisUsuEspecificosOrigen] = useState([]);\r\n\r\n const [misNoAceptadasOrigen, setMisNoAceptadasOrigen] = useState([]);\r\n const [misAceptadasOrigen, setMisAceptadasOrigen] = useState([]);\r\n const [misConcluidasOrigen, setMisConcluidasOrigen] = useState([]);\r\n \r\n //const [usuariosProponentesFront, setUsuariosProponentesFront] = useState([]);\r\n\r\n //para usuarios para notificaciones\r\n const [unId, setUnId] = useState(null);\r\n const [unAcronimo, setUnAcronimo] = useState(null);\r\n const [unProceso, setUnProceso] = useState(null);\r\n const [unUsuNoAceptadas, setUnUsuNoAceptadas] = useState([]);\r\n const [unUsuAceptadas, setUnUsuAceptadas] = useState([]);\r\n const [unUsuConcluidas, setUnUsuConcluidas] = useState([]);\r\n //const [usuariosNotificacionesFront, setUsuariosNotificacionesFront] = useState([]);\r\n\r\n const [abreSP, setAbreSP] = useState(false);\r\n \r\n \r\n //*useEffect\r\n useEffect(()=> { // monto\r\n console.log('Panel - monto');\r\n //console.log('idPanel: ', props.idPanel);\r\n\r\n //Alta de usuarios proponentes //lee API: Configurations/GetSummaryProponentUser\r\n if (props.idPanel==0) { \r\n setCargandoSpin(true);\r\n configurationsServicio.cargaGetSummaryProponentUser(props.tokenStore) \r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetSummaryProponentUserStore(response.data).then( function(datos:any) { \r\n //console.log('genero datos para usuariosProponentesStore:', datos);\r\n //setUsuariosProponentesFront(datos);\r\n setSwRecarga(!swRecarga);\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummaryProponentUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorConfigurationsStore(ex.response, true, '', '', 'Configuracion-Panel/GetSummaryProponentUser','C')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n } \r\n //Adicionar usuarios para notificaciones vía correo electrónico //lee API: Configurations/GetSummaryUserNotificationbyEmail\r\n if (props.idPanel==1) { \r\n setCargandoSpin(true);\r\n configurationsServicio.cargaGetSummaryUserNotificationbyEmail(props.tokenStore) \r\n .then((response:any) => {\r\n if (response.status==200) { //confirma que no hay error\r\n guardaGetSummaryUserNotificationbyEmailStore(response.data).then( function(datos:any) { \r\n //console.log('genero datos para usuariosNotificacionesStore:', datos);\r\n //setUsuariosNotificacionesFront(datos);\r\n setSwRecarga(!swRecarga);\r\n })\r\n } \r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n console.log (\"--catch - ex (cargaGetSummaryProponentUser): \", ex.response.status);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorConfigurationsStore(ex.response, true, '', '', 'Configuracion-Panel/GetSummaryUserNotificationbyEmail','C')\r\n setCargandoSpin(false);\r\n recargaPaginaSSC();\r\n })\r\n } \r\n },[]);\r\n\r\n useEffect(()=> { // uso este puente para recargar elementos del front\r\n console.log('Panel - rederizando............');\r\n //console.log('idPanel: ', props.idPanel);\r\n //console.log('usuariosProponentesStore', usuariosProponentesStore);\r\n //console.log('usuariosProponentesFront', usuariosProponentesFront);\r\n setSwRecargaConfiguracionPanel(!swRecargaConfiguracionPanel);\r\n },[swRecarga]);\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n //const recargaConfiguracion = () => { props.recargaConfiguracion() } //no ocupa actualización\r\n\r\n const recargaConfiguracionPanel = () => {\r\n //alert('recargaConfiguracionPanel');\r\n //console.log('recargaConfiguracionPanel....')\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n\r\n const botonCierraSlidingPanel = (opcBtnAcepReg:any) => { setAbreSP(false) }\r\n\r\n const botonEditarUP = (up:any) => { //clic en botón Editar de \"Alta de usuarios proponentes\"\r\n //.id, up.acronym, up.name, up.setting.specificuser\r\n //alert('botonEditarUP...' + id );\r\n setUpId(up.id);\r\n setUpAcronimo(up.acronym);\r\n setUpProceso(up.name);\r\n setUpCatPermisos(up.catPermisos);\r\n setUpCatPermisosOrigen(JSON.parse(JSON.stringify(up.catPermisos)));\r\n setUpSwUsuariosEspecificos(up.swUsuariosEspecificos);\r\n setUpMisUsuEspecificosOrigen(up.misUsuEspecificosOrigen);\r\n if (up.misUsuEspecificos.length > 0) { setUpUsuariosEspecificos(up.misUsuEspecificos) } \r\n else { setUpUsuariosEspecificos([]) }\r\n setAbreSP(true); // aquí activo ventana SlidingPanel (Ver/Registrar)\r\n }\r\n\r\n const botonEditarUN = (un:any) => { //clic en botón Editar de \"Adicionar usuarios para notificaciones vía correo electrónico\"\r\n //.id, un.acronym, up.name, up.setting.specificuser\r\n //alert('botonEditarUN...' + id );\r\n setUnId(un.id);\r\n setUnAcronimo(un.acronym);\r\n setUnProceso(un.name);\r\n\r\n setUnUsuNoAceptadas(un.rejectprop);\r\n setMisNoAceptadasOrigen(un.misNoAceptadas);\r\n\r\n setUnUsuAceptadas(un.okprop);\r\n setMisAceptadasOrigen(un.misAceptadas);\r\n\r\n setUnUsuConcluidas(un.okanalyse);\r\n setMisConcluidasOrigen(un.misConcluidas);\r\n\r\n setAbreSP(true); // aquí activo ventana SlidingPanel (Ver/Registrar) \r\n }\r\n\r\n //*vista\r\n return (\r\n <> \r\n {/* paneles */}\r\n\r\n {/* id=0 - Alta de usuarios proponentes */}\r\n {props.idPanel == 0 &&\r\n (<>\r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { usuariosProponentesStore?.map((up:any, indexUP:any) =>\r\n (<>\r\n \r\n\r\n {/* procesos */}\r\n \r\n\r\n {/* usuarios autorizados: derechos de usuario por programa */}\r\n \r\n\r\n {/* botón Editar */}\r\n \r\n \r\n )\r\n )} \r\n \r\n
    Procesos Usuarios autorizados  
    \r\n {indexUP != 0 && ({up.acronym}
    ) }\r\n {up.name} \r\n {up.state_process.pt_state_description}\r\n
    \r\n {/* usuarios autorizados */} \r\n { up.catPermisos?.map((catPer:any, indexMiCatPer:any) => (\r\n (<>\r\n { catPer.activo &&\r\n (<>\r\n {catPer.descripcion}
    \r\n ) \r\n } \r\n )\r\n ))} \r\n {/* usuarios especificos */}\r\n { up.misUsuEspecificos.length > 0 && \r\n (<>\r\n {up.misUsuEspecificos?.map((usu:any, indexDes:any) => (\r\n (<>\r\n
    \r\n
    \r\n \r\n  {usu.name}\r\n
    \r\n \r\n  {usu.account}\r\n
    \r\n
    \r\n ) \r\n ))} \r\n )\r\n }\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n {/* id=1 - Adicionar usuarios para notificaciones vía correo electrónico */}\r\n {props.idPanel == 1 &&\r\n (<>\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { usuariosNotificacionesStore?.map((un:any, indexUN:any) =>\r\n (<>\r\n \r\n {/* procesos */}\r\n \r\n\r\n {/* no aceptadas */}\r\n \r\n\r\n {/* aceptadas */}\r\n \r\n\r\n {/* concluidas */}\r\n \r\n\r\n {/* botón Editar */}\r\n \r\n\r\n \r\n )\r\n )} \r\n \r\n
    Procesos Propuestas de cambio  
    No aceptadas Aceptadas Concluidas
    \r\n {indexUN != 0 && ({un.acronym}
    ) }\r\n {un.name}  \r\n {un.state_process.pt_state_description}\r\n
    \r\n { un.rejectprop.length > 0 &&\r\n (<>\r\n { un.rejectprop?.map((na:any, indexNA:any) => (\r\n (<>\r\n \r\n  {na.account}\r\n
    \r\n )\r\n ))} \r\n )\r\n } \r\n \r\n
    \r\n { un.okprop.length > 0 &&\r\n (<>\r\n { un.okprop?.map((a:any, indexA:any) => (\r\n (<>\r\n \r\n  {a.account}\r\n
    \r\n )\r\n ))}\r\n )\r\n } \r\n
    \r\n { un.okanalyse.length > 0 &&\r\n (<>\r\n { un.okanalyse?.map((c:any, indexC:any) => (\r\n (<>\r\n \r\n  {c.account}\r\n
    \r\n )\r\n ))} \r\n )\r\n } \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n } \r\n\r\n {/* ventana izquierda que abre cuando se selecciona un proceso */} \r\n botonCierraSlidingPanel(\"\")} >\r\n {props.idPanel==0 && \r\n ( )\r\n }\r\n {props.idPanel==1 && \r\n ( )\r\n }\r\n \r\n \r\n\r\n\r\n {/* ventana de carga con spin que se abre mientras lee el api */}\r\n { cargandoSpin && }\r\n\r\n \r\n );\r\n }\r\n\r\n\r\n /* switch(responseAPI.status){\r\n case 404: paso.desresul= \"El usuario no existe\"; break;\r\n case 401: paso.desresul= \"No autorizado\"; break;\r\n case 404: paso.desresul= \"No tiene información\"; break;\r\n default: paso.desresul= responseAPI.statusText; break;\r\n } */\r\n\r\n/* className={props.misPropuestas.sent ? 'divCatalogoDisabled' :'divCatalogo'} */","/* Configuación - registro de acceso a los usuarios por proceso*/\r\n\r\n//*react- recursos\r\n import { useState, useEffect} from \"react\";\r\n import { Panel, PanelGroup } from \"rsuite\";\r\n \r\n//*componentes-utiles\r\n//*clases \r\n//*imágenes\r\n\r\n//*archivo & componentes (otros componentes enlazados)\r\n import ConfiguracionPanel from \"./Configuracion.Panel\"; \r\n\r\n//*api's (servicios y store)\r\n import configurationsStore from \"../../../../api/recursos/configurations/configurations.store\"; \r\n\r\n//*store's\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../../datos/json/etiquetasSSC.json\"\r\n\r\n//*funciones\r\n\r\n//*interface \r\n interface propsConfiguracion {\r\n tokenStore: any;\r\n menuStore: any;\r\n quitaErrorPagina:any;\r\n recargaPaginaSSC:any;\r\n recargaPaginaSSC_Not:any;\r\n } \r\n\r\n//*componente\r\n export default function Configuracion(props: propsConfiguracion){\r\n \r\n //*api store\r\n const { panelStore, cierraPanelStore, cambiaPanelStore,\r\n } = \r\n configurationsStore((state:any) =>( { \r\n panelStore: state.panelStore,\r\n cierraPanelStore: state.cierraPanelStore,\r\n cambiaPanelStore: state.cambiaPanelStore,\r\n }));\r\n \r\n //*store's\r\n \r\n //*datos\r\n \r\n //*constantes y variables\r\n let eti = etiquetasSSC.Configuracion;\r\n let x0, x1, x1a, x2, x3 = '';\r\n\r\n //*usestate\r\n const [swRecarga, setSwRecarga] = useState(false); //usado para remasterizar\r\n const [swRecargaConfiguracion, setSwRecargaConfiguracion] = useState(false); //usado para remasterizar esta página\r\n \r\n //*useEffect\r\n\r\n useEffect(()=> { // al montar\r\n console.log('Configuracion - monto')\r\n props.quitaErrorPagina();\r\n cierraPanelStore();\r\n //console.clear();\r\n },[]);\r\n \r\n useEffect(()=> { // uso este puente para recargar elementos del front\r\n console.log('Configuracion - rederizando............');\r\n //console.log(\"**panelStore.\", panelStore);\r\n setSwRecargaConfiguracion(!swRecargaConfiguracion);\r\n },[swRecarga]);\r\n\r\n //* interface (parametros de entrada)\r\n\r\n //*funciones\r\n const recargaPaginaSSC = () => {props.recargaPaginaSSC() } //ejecuta la función que esta en Contenido que llama a la renderización de PaginaSSC\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() } //ejecuta la función que esta en Contenido que llama de PaginaSSC recargar el api de notificaciones para la campana\r\n\r\n const recargaConfiguracion = (id:any) => {\r\n //alert('recargaConfiguracion');\r\n //console.log('recargaConfiguracion....')\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n\r\n const abreCierraPanel = (idPanel:any) => { // abre y cierra el menupanel\r\n //alert('abreCierraPanel...' + idPanel)\r\n cambiaPanelStore(idPanel);\r\n setSwRecarga(!swRecarga);\r\n }\r\n\r\n //*vista\r\n return(\r\n \r\n
    \r\n
    \r\n { panelStore?.map((p:any, indexM:any) => (\r\n /*x2 forma el contendio del header del panel*/\r\n (x2 = (\r\n
    \r\n \r\n {p.texto} \r\n
    \r\n
    \r\n
    \r\n )),\r\n (<>\r\n \r\n abreCierraPanel(p.id)}\r\n >\r\n \r\n {p.abierto\r\n && \r\n }\r\n \r\n
    \r\n )\r\n ))} \r\n
    \r\n \r\n )\r\n }\r\n","/* Contenido - página principal del proyecto - se víncula a diferentes página según selección del menu*/\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n \r\n//*componentes-utiles\r\n//*clases \r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../datos/json/etiquetasSSC.json\"\r\n\r\n//*archivos & componentes (imagenes y elementos necesarios para la rutina)\r\n import ContenidoTitulo from \"./Contenido.Titulo\";\r\n import Propuesta from \"./propuesta/Propuesta\";\r\n import ResponsableDeProceso from \"./responsableDeProceso/RP\";\r\n import ResponsableDeDiseno from \"./responsableDeDiseno/RD\";\r\n import TableroDeControl from \"./tableroDeControl/TC\";\r\n import Configuracion from \"./configuracion/Configuracion\";\r\n\r\n//*store's\r\n import menusStore from \"../../../stores/menu.store\";\r\n\r\n//*interfaces\r\n interface propsContenido {\r\n tokenStore: any;\r\n recargaPaginaSSC: any;\r\n recargaPaginaSSC_Not: any;\r\n }\r\n\r\n//*componente \r\n export default function Contenido(props: propsContenido) {\r\n\r\n //*store's adicionales\r\n const { paginaActivaStore, menuStore, quitaErrorPagina } = \r\n menusStore((state:any) =>( { \r\n paginaActivaStore: state.paginaActivaStore,\r\n menuStore: state.menuStore,\r\n quitaErrorPagina: state.quitaErrorPagina, }));\r\n //console.log('::::paginaActivaStore', paginaActivaStore)\r\n \r\n //*data \r\n\r\n //*constantes y variables\r\n let eti = etiquetasSSC.Contenido.menu;\r\n \r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaContenido, setSwRecargaContenido] = useState(false); //usado para remasterizar esta página\r\n \r\n //*useEffect\r\n\r\n useEffect(()=> { //usado para montar\r\n //console.log('monto Contenido...');\r\n quitaErrorPagina();\r\n },[]); \r\n\r\n useEffect(()=> { //usado para renderizar\r\n //console.log('renderizando Contenido.........................');\r\n setSwRecargaContenido(!swRecargaContenido);\r\n //props.recargaPaginaSSC();\r\n },[swRecarga]); \r\n\r\n //*funciones\r\n \r\n const recargaContenido = () => {\r\n //console.log('recargaContenido....');\r\n setSwRecarga(!swRecarga); // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n }\r\n\r\n const recargaPaginaSSC = () => { props.recargaPaginaSSC() }\r\n\r\n const recargaPaginaSSC_Not = () => { props.recargaPaginaSSC_Not() }\r\n\r\n //*vista\r\n return(\r\n <>\r\n
    \r\n{/*

    paginaActivaStore: {paginaActivaStore}

    */}\r\n
    \r\n { paginaActivaStore == \"RP\" && } \r\n { paginaActivaStore == \"P\" && } \r\n { paginaActivaStore == \"RD\" && } \r\n { paginaActivaStore == \"TC\" && } \r\n { paginaActivaStore == \"C\" && } \r\n
    \r\n \r\n
    \r\n
    \r\n { paginaActivaStore == \"P\" && } \r\n { paginaActivaStore == \"RP\" && } \r\n { paginaActivaStore == \"RD\" && }\r\n { paginaActivaStore == \"TC\" && } \r\n { paginaActivaStore == \"C\" && } \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n )\r\n }\r\n","/* Pie página principal del proyecto */\r\n\r\n//*react- recursos\r\n import React, { useState } from \"react\";\r\n import { useHistory } from \"react-router-dom\"; \r\n\r\n//*clases\r\n import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n import { faBars, faDesktop, faSitemap, faSquare, } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\n//*datos\r\n import etiquetasSSC from \"../../../datos/json/etiquetasSSC.json\";\r\n //import acercaSit from \"../../../datos/json/acercaSitio.json\";\r\n import { Fax } from \"@mui/icons-material\";\r\n\r\n//*interfaces\r\ninterface propsPie {\r\n cnnStore: any;\r\n}\r\nexport default function Pie(props: propsPie) {\r\n //*constantes y variables\r\n let eti_Lig = etiquetasSSC.Pie.ligas;\r\n let eti_Eti = etiquetasSSC.Pie.etiquetas;\r\n\r\n const APP_DOCS = process.env.REACT_APP_DOCS + 'Terminosycondiciones_SSC.pdf';\r\n const API_APP = process.env.REACT_APP_API_URL;\r\n const API_INDEX = process.env.REACT_APP_SERV_URL;\r\n const API_NAS = process.env.RREACT_APP_NAS;\r\n/* \r\n REACT_APP_ENV = TRAININGDOMINIO\r\n REACT_APP_API_URL = https://ptracking.snieg.mx/sscapi_training/v1/\r\n REACT_APP_SERV_URL= https://ptracking.snieg.mx/ssc_training/index.html\r\n REACT_APP_SERV_HOSTNAME= https://ptracking.snieg.mx/ssc_training/ \r\n REACT_APP_IMG = https://ptracking.snieg.mx/ssc_training/imagenes/\r\n REACT_APP_DOCS = https://ptracking.snieg.mx/ssc_training/doctos/\r\n REACT_APP_NAS = https://ptracking.snieg.mx/ssc_training/docs/\r\n*/\r\n\r\n\r\n let acercaSit = [\r\n { \"id\": \"1\", \"desc\": \"Servidor SSC-API:\", \"desc1\": API_APP},\r\n { \"id\": \"2\", \"desc\": \"Carpeta del sitio:\", \"desc1\": API_INDEX},\r\n { \"id\": \"3\", \"desc\": \"Sistema operativo: \", \"desc1\": null},\r\n { \"id\": \"4\", \"desc\": \"Conexión front: \", \"desc1\": \"SQL\"},\r\n { \"id\": \"5\", \"desc\": \"bd nombre: \", \"desc1\": null},\r\n { \"id\": \"6\", \"desc\": \"NAS virtual: \", \"desc1\": API_NAS},\r\n { \"id\": \"7\", \"desc\": \"filesDecision: \", \"desc1\": null},\r\n { \"id\": \"8\", \"desc\": \"logPath: \", \"desc1\": null},\r\n { \"id\": \"9\", \"desc\": \"Domain: \", \"desc1\": null},\r\n { \"id\": \"10\", \"desc\": \"Esquema: \", \"desc1\": null},\r\n { \"id\": \"11\", \"desc\": \"bd ip: \", \"desc1\": props.cnnStore},\r\n { \"id\": \"12\", \"desc\": \"Nas Path: \", \"desc1\": null},\r\n { \"id\": \"13\", \"desc\": \"filesAnalyse:\", \"desc1\": null}\r\n ]\r\n\r\n let history = useHistory();\r\n const activaAyuda = () => { history.push(\"/Ayuda\") }\r\n \r\n\r\n //*useState\r\n const [toggle, setToggle] = useState(false);\r\n\r\n return (\r\n <>\r\n
    \r\n\r\n {/* ligas lineamientos & centro de ayuda & acerca del sitio */}\r\n
    \r\n\r\n {/* lineamientos */}\r\n \r\n \r\n {eti_Lig[0].text}{\" \"}\r\n \r\n \r\n \r\n    \r\n\r\n {/* Ayuda */}\r\n \r\n \r\n {eti_Lig[1].text}\r\n \r\n\r\n    \r\n\r\n {/* Acerca del sitio */}\r\n setToggle(!toggle)}\r\n >\r\n {eti_Lig[2].text}\r\n {toggle && (\r\n
    \r\n
    \r\n
    \r\n
    \r\n   Acerca del sitio\r\n
    \r\n
    X
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n <>\r\n {acercaSit.map((item: any) => (\r\n
    \r\n
    {item.desc}
    \r\n
    {item.desc1}
    \r\n
    \r\n ))}\r\n \r\n
    \r\n
    \r\n )}\r\n \r\n
    \r\n\r\n {/* derechos & terminos */}\r\n
    \r\n
    \r\n {eti_Eti[3].text}\r\n \r\n {\" \"}\r\n {eti_Eti[4].text}{\" \"}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n","/* Página principal del sistema, llamada después de la autentificación */\r\n\r\n//*react- recursos\r\n import { useState, useEffect } from \"react\";\r\n import shallow from 'zustand/shallow';\r\n\r\n//*otros recursos \r\n import $ from 'jquery';\r\n\r\n//*componentes-utiles\r\n import VentanaObjErrorAPI from \"../../componentes/generaVentana/VentanaObjErrorAPI\";\r\n\r\n//*clases \r\n import './paginaSSC.css';\r\n\r\n//*datos\r\n\r\n//*archivos & componentes (imagenes y elementos necesarios para la rutina)\r\n import Encabezado from \"./encabezado/Encabezado\"\r\n import Contenido from \"./contenido/Contenido\";\r\n import Pie from \"./pie/Pie\";\r\n\r\n//*api's (servicios y store)\r\n import authenticateStore from \"../../api/recursos/authenticate/authenticate.store\"; \r\n import catalogsStore from \"../../api/recursos/catalogs/catalogs.store\"; \r\n import proposalsStore from \"../../api/recursos/proposals/proposals.store\"; \r\n import decisionsStore from \"../../api/recursos/decisions/decisions.store\"; \r\n import ptCatalogsStore from \"../../api/recursos/ptCatalogs/ptCatalogs.store\"; \r\n import filesStore from \"../../api/recursos/files/files.store\"; \r\n import analysisStore from \"../../api/recursos/analysis/analysis.store\"; \r\n import dashboardStore from \"../../api/recursos/dashboard/dashboard.store\"; \r\n import configurationsStore from \"../../api/recursos/configurations/configurations.store\"; \r\n\r\n import usersStore from \"../../api/recursos/users/users.store\";\r\n\r\n import notificationsStore from \"../../api/recursos/notifications/notifications.store\";\r\n import notificationsService from \"../../api/recursos/notifications/notifications.servicio\";\r\n\r\n//*función\r\n const teclaF5disabled = () => { //deactivamos la tecla f5\r\n //alert('teclaF5disabled');\r\n function disableF5(e:any)\r\n { if ((e.which || e.keyCode) === 116) e.preventDefault(); }\r\n $(document).on(\"keydown\", disableF5);\r\n }\r\n\r\n//*componente\r\n export default function PaginaSSC(){\r\n\r\n //*api store\r\n const { tokenStore, cnnStore } = \r\n authenticateStore((state:any) =>( { tokenStore: state.tokenStore, cnnStore: state.cnnStore }),shallow);\r\n\r\n const { guardaGetSummarybyUserStore, notTotalStore,\r\n generaObjErrorNotificationsStore, \r\n objErrorNotificationsStore, limpiaObjErrorNotificationsStore } = \r\n notificationsStore((state: any ) => ({\r\n guardaGetSummarybyUserStore: state.guardaGetSummarybyUserStore,\r\n notTotalStore: state.notTotalStore,\r\n notAvisosStore: state.notAvisosStore,\r\n notTotalAvisosStore: state.notTotalAvisosStore,\r\n notPendientesStore: state.notPendientesStore,\r\n notTotalPendienteStore: state.notTotalPendienteStore,\r\n generaObjErrorNotificationsStore: state.generaObjErrorNotificationsStore,\r\n objErrorNotificationsStore: state.objErrorNotificationsStore,\r\n limpiaObjErrorNotificationsStore: state.limpiaObjErrorNotificationsStore\r\n })); \r\n\r\n const { objErrorUsersStore, limpiaObjErrorUsersStore } = \r\n usersStore((state:any) =>( { objErrorUsersStore: state.objErrorUsersStore, limpiaObjErrorUsersStore: state.limpiaObjErrorUsersStore }));\r\n\r\n const { objErrorCatalogsStore, limpiaObjErrorCatalogsStore } = \r\n catalogsStore((state:any) =>( { objErrorCatalogsStore: state.objErrorCatalogsStore, limpiaObjErrorCatalogsStore: state.limpiaObjErrorCatalogsStore }));\r\n //console.log('--objErrorCatalogsStore', objErrorCatalogsStore)\r\n\r\n const { objErrorProposalsStore, limpiaObjErrorProposalsStore } = \r\n proposalsStore((state:any) =>( { objErrorProposalsStore: state.objErrorProposalsStore, limpiaObjErrorProposalsStore: state.limpiaObjErrorProposalsStore }));\r\n\r\n const { objErrorDecisionsStore, limpiaObjErrorDecisionsStore } = \r\n decisionsStore((state:any) =>( { objErrorDecisionsStore: state.objErrorDecisionsStore, limpiaObjErrorDecisionsStore: state.limpiaObjErrorDecisionsStore }));\r\n\r\n const { objErrorPtCatalogsStore, limpiaObjErrorPtCatalogsStore } = \r\n ptCatalogsStore((state:any) =>( { objErrorPtCatalogsStore: state.objErrorPtCatalogsStore, limpiaObjErrorPtCatalogsStore: state.limpiaObjErrorPtCatalogsStore }));\r\n\r\n const { objErrorFilesStore, limpiaObjErrorFilesStore } = \r\n filesStore((state:any) =>( { objErrorFilesStore: state.objErrorFilesStore, limpiaObjErrorFilesStore: state.limpiaObjErrorFilesStore }));\r\n\r\n const { objErrorAnalysisStore, limpiaObjErrorAnalysisStore } = \r\n analysisStore((state:any) =>( { objErrorAnalysisStore: state.objErrorAnalysisStore, limpiaObjErrorAnalysisStore: state.limpiaObjErrorAnalysisStore }));\r\n\r\n const { objErrorDashboardStore, limpiaObjErrorDashboardStore } = \r\n dashboardStore((state:any) =>( { objErrorDashboardStore: state.objErrorDashboardStore, limpiaObjErrorDashboardStore: state.limpiaObjErrorDashboardStore }));\r\n\r\n const { objErrorConfigurationsStore, limpiaObjErrorConfigurationsStore } = \r\n configurationsStore((state:any) =>( { objErrorConfigurationsStore: state.objErrorConfigurationsStore, limpiaObjErrorConfigurationsStore: state.limpiaObjErrorConfigurationsStore }));\r\n\r\n\r\n //*useState\r\n const [swRecarga, setSwRecarga] = useState(false);\r\n const [swRecargaPaginaSSC, setSwRecargaPaginaSSC] = useState(false); //usado para remasterizar esta página\r\n const [swRecargaNotifications, setSwRecargaNotifications] = useState(false);\r\n const [cargandoSpin, setCargandoSpin] = useState(false);\r\n \r\n //*useEffect\r\n\r\n useEffect(()=> { //cuando entramos limpiamos error\r\n //console.log('monto PaginaSSC... limpiaObjError...');\r\n limpiaObjErrorNotificationsStore();\r\n limpiaObjErrorUsersStore();\r\n limpiaObjErrorCatalogsStore();\r\n limpiaObjErrorProposalsStore();\r\n limpiaObjErrorDecisionsStore();\r\n limpiaObjErrorPtCatalogsStore();\r\n limpiaObjErrorFilesStore();\r\n limpiaObjErrorAnalysisStore();\r\n limpiaObjErrorDashboardStore();\r\n limpiaObjErrorConfigurationsStore();\r\n },[]); \r\n\r\n useEffect(()=> { //usado para renderizar\r\n //console.log('renderizando PaginaSSC.........................');\r\n setSwRecargaPaginaSSC(!swRecargaPaginaSSC);\r\n },[swRecarga]); \r\n \r\n useEffect(()=> { //llamada al API - Notifications/GetSummarybyUser // para obtener el total de notificaciones presentado a un lado de la campana\r\n //console.log(\"useEffect - API -Notifications/GetSummarybyUser****\");\r\n setCargandoSpin(true);\r\n notificationsService.cargaGetSummarybyUser(tokenStore)\r\n .then(function(response:any){\r\n if (response.status==200){ //confirma que no hay error\r\n guardaGetSummarybyUserStore(response.data).then( function(datos:any) { \r\n //console.log('cargo los datos de las notificaciones: ', datos );\r\n })\r\n }\r\n setCargandoSpin(false);\r\n })\r\n .catch((ex) => {\r\n //ex.response.data.result.errores.map((: any) => (\r\n //toast.error(err.errorMessage)))\r\n //console.log (\"--catch - ex (cargaGetSummarybyUser): \", ex);\r\n if (ex.response.status==404) //no es error solo no tiene información\r\n console.log('nota: no es error solo no tiene información')\r\n else\r\n generaObjErrorNotificationsStore(ex.response, true, '', '', 'PaginaSSC-notificationsService','PSSC')\r\n setCargandoSpin(false);\r\n })\r\n }, [swRecargaNotifications]);\r\n\r\n //*funciones\r\n \r\n teclaF5disabled(); //dehabilita la tecla f5\r\n \r\n const recargaPaginaSSC = () => { setSwRecarga(!swRecarga) } // con esto ejecuto un useEffect, lo uso para renderizar el front \r\n \r\n const recargaPaginaSSC_Not = () => { setSwRecargaNotifications(!swRecargaNotifications) } //recarga la campana del encabezado \r\n\r\n //*vista\r\n return (\r\n <>\r\n {/*genera la página SSC en 3 partes */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n {/*ventana de error, en lectura de api */}\r\n { objErrorCatalogsStore.hasError && }\r\n { objErrorProposalsStore.hasError && }\r\n { objErrorDecisionsStore.hasError && }\r\n { objErrorPtCatalogsStore.hasError && }\r\n { objErrorFilesStore.hasError && \r\n (<>\r\n {window.scrollTo({top:0})};\r\n \r\n )\r\n }\r\n { objErrorAnalysisStore.hasError && }\r\n { objErrorConfigurationsStore.hasError && }\r\n { objErrorNotificationsStore.hasError && } \r\n { objErrorUsersStore.hasError && } \r\n { objErrorDashboardStore.hasError && } \r\n \r\n );\r\n }","export default __webpack_public_path__ + \"static/media/solicitud.9c205f71.png\";","import Tab from \"react-bootstrap/Tab\";\r\nimport React from \"react\";\r\n\r\nimport PreFrecuentes from \"./../../datos/json/preguntasFrecuentes.json\";\r\nimport { Panel, PanelGroup } from \"rsuite\";\r\n\r\n//*interfaces\r\ninterface PropsMenuV {\r\n menu: any;\r\n}\r\n\r\nexport default function ParteContenido(props: PropsMenuV) {\r\n let menu = props.menu;\r\n let rutaNAS = process.env.REACT_APP_DOCS;\r\n return (\r\n
    \r\n \r\n {menu.map((item: any, key: any) => (\r\n \r\n {\" \"}\r\n {item.desc}\r\n
    \r\n {item.img !== \"\" ? (\r\n <> \r\n \r\n {item.id == \"1\" &&
    } {/* //manual de usuario.pdf */}\r\n {item.id == \"2\" &&
    } {/* //gestion d cambios.ptdf */}\r\n {item.id == \"4\" &&
    } {/*//guia rapida para el uso */}\r\n
    \r\n \r\n ) : (\r\n <>\r\n
    \r\n
    \r\n \r\n {PreFrecuentes.map((s, key) => (\r\n \r\n {PreFrecuentes[s.id].ques.map((data, key) => {\r\n // console.log(\"key...\",key);\r\n return (\r\n
    \r\n {data.q}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n ))}{\" \"}\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n )}\r\n \r\n
    \r\n {/* //imagenes que no muestran el descargar */}\r\n {item.img !== \"\" && (key != 2) ? (\r\n <> \r\n \r\n
    Descargar {item.desc}
    \r\n
    \r\n ): (\r\n \"\"\r\n )}\r\n \r\n
    \r\n ))}\r\n
    \r\n
    \r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport Nav from \"react-bootstrap/Nav\";\r\nimport styled from \"styled-components\";\r\n\r\n//*interfaces\r\ninterface PropsMenuV {\r\n menu: any;\r\n}\r\n\r\nexport default function ParteMenu(props: PropsMenuV) {\r\n let menu = props.menu;\r\n\r\n const [isOpened, setIsOpened] = useState(false);\r\n const [step, setStep] = useState(\"1\");\r\n\r\n function toggle(stepId: any, activo: any, subm: any) {\r\n if (subm !== null) {\r\n if (step !== stepId) {\r\n let stepAnt = Number(step) - 1;\r\n\r\n if (stepAnt >= 0) menu[stepAnt].activo = \"f\";\r\n\r\n if (menu[stepId - 1].activo === \"t\") {\r\n menu[stepId - 1].activo = \"f\";\r\n setIsOpened(false);\r\n } else {\r\n menu[stepId - 1].activo = \"t\";\r\n setIsOpened(true);\r\n }\r\n setStep(stepId);\r\n } else {\r\n if (menu[stepId - 1].activo === \"t\") {\r\n menu[stepId - 1].activo = \"f\";\r\n setIsOpened(false);\r\n } else {\r\n menu[stepId - 1].activo = \"t\";\r\n setIsOpened(true);\r\n }\r\n setStep(\"0\");\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n ) : (\r\n \r\n )}\r\n
    \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n\r\nconst Navnav = styled.div`\r\nwidth: \"258px\",\r\ntextDecoration: \"underline\",\r\n`;\r\n","//*react- recursosimemu\r\nimport React, { useState } from \"react\";\r\n\r\n//*clases\r\n//import Container from \"react-bootstrap/Container\";\r\nimport Tab from \"react-bootstrap/Tab\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\n\r\n//*archivos\r\n//import imemu from \"./menu2.png\";\r\nimport icontenido from \"./solicitud.png\";\r\n//import { mdiMenuLeft } from \"@mdi/js\";\r\n\r\nimport ParteContenido from \"./ParteContenidoIzq\";\r\nimport ParteMenu from \"./ParteMenuIzq\";\r\n\r\n//*clases\r\nimport \"./menuVertical.css\";\r\n\r\n//*interfaces\r\ninterface PropsMenuV {\r\n //lado: any;\r\n menu: any;\r\n}\r\n\r\n//*componente\r\nexport default function GeneraMenu(props: PropsMenuV) {\r\n //*api store\r\n //*store's\r\n //*datos\r\n\r\n //*constantes y variables\r\n let menu = props.menu;\r\n //let lado = props.lado;\r\n\r\n const [show, setShow] = useState(true);\r\n\r\n //*usestate\r\n //si es d es 9,2 si es i es 2,9\r\n let pContenido = 9;\r\n let pMenu = 1;\r\n\r\n //*vista\r\n return (\r\n <>\r\n
    \r\n\r\n {/*fondo blanco className=\"containerContent\"*/}\r\n {show ? (\r\n
    \r\n
    \r\n \r\n {/*Izquierda\"*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n ) : (\r\n <>\r\n
    \r\n \"icont\"\r\n
    \r\n \r\n )}\r\n \r\n );\r\n}\r\n","/* Pie-Centro de ayuda */\r\n\r\n//*react- recursos\r\n import React from \"react\";\r\n import { useHistory } from \"react-router-dom\"; \r\n import { Col, Row } from \"react-bootstrap\";\r\n\r\n//*imagenes \r\n import imginegi from \"../../imagenes/proyecto/INEGI_SSC_logo.png\"\r\n\r\n//*archivos\r\n import GeneraMenuVerticalIzq from \"../../componentes/generaMenuVertical/GeneraMenuVerticalIzq\";\r\n import menuArch from \"../../datos/json/menuAyuda.json\";\r\n\r\n\r\n//*componente\r\n export default function Ayuda() {\r\n\r\n //*constantes y variables\r\n let history = useHistory();\r\n \r\n const regresa = () => { history.push(\"/PaginaSSC\") }\r\n let menu = menuArch;\r\n let pasoMenu = menu;\r\n\r\n pasoMenu.map((opcion: any) => {\r\n opcion[\"activo\"] = \"f\";\r\n return pasoMenu;\r\n });\r\n\r\n //*vista\r\n return (\r\n <>\r\n {/* encabezado */}\r\n
    \r\n \r\n \r\n \"\"\r\n \r\n \r\n
    Bienvenido al Centro de ayuda
    \r\n \r\n \r\n \r\n Regresar \r\n \r\n \r\n
    \r\n
    \r\n\r\n {/* */}\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n {/* pie */}\r\n
    \r\n
    \r\n Derechos reservados © INEGI{\" \"}\r\n \r\n Términos y condiciones de uso\r\n \r\n
    \r\n Versión 2.0\r\n
    \r\n
    \r\n \r\n \r\n \r\n );\r\n }\r\n","import { COffcanvasTitle } from \"@coreui/bootstrap-react\";\r\nimport create from \"zustand\";\r\n\r\nconst tuplacatalogoStore = create((set, get:any) => ({\r\n tupla:{},\r\n catalogo:[],\r\n objError: { url: \"\", recurso: \"\", body: \"\", hasError: false, function:\"\", resultado: { \"idresul\": 0, \"desresul\": \"\" } }, \r\n//guarda el catalogo generado a travez de la tupla\r\n setTuplaCatalogo: async (cat:any) => {\r\n set({catalogo:cat});\r\n },\r\n //guarda la tupla generada a travez del catalogo\r\n setCatalogoTupla: async (tup:any) => {\r\n set({tupla: tup});\r\n },\r\n}));\r\n\r\nexport default tuplacatalogoStore;","//*react- recursos\r\nimport React, { useEffect } from \"react\";\r\n\r\n//*css\r\n\r\n\r\n//*archivos\r\nimport tuplacatalogo from \"../stores/tuplacatalogoStore\";\r\n\r\n//*interfaces\r\ninterface PropsTC{\r\n tupla:any;\r\n}\r\n\r\n//*componente\r\nexport default function ConvierteTuplaACatalogo(props: PropsTC){\r\n\r\n const { setTuplaCatalogo } =\r\n tuplacatalogo((state:any) =>( {\r\n setTuplaCatalogo: state.setTuplaCatalogo,\r\n }));\r\n \r\n useEffect(()=>{\r\n let keysT= Object.keys(props.tupla);\r\n let catalogoTemp:any=[];\r\n keysT.map((kt:any)=>{\r\n let cat:any={};\r\n cat = { \"id\":kt, \"desc\": props.tupla[kt] };\r\n catalogoTemp.push(cat);\r\n })\r\n setTuplaCatalogo(catalogoTemp);\r\n console.clear();\r\n console.log(\"** ConvierteTuplaACatalogo **\")\r\n console.log(\"tupla de entrada: \", props.tupla); \r\n console.log(\"catalogo de salida: \", catalogoTemp);\r\n },[]); \r\n \r\n return (\r\n
    \r\n \r\n \r\n
    \r\n\r\n )\r\n}\r\n","//*react- recursos\r\nimport React, { useEffect } from \"react\";\r\n\r\n//*archivos\r\nimport tuplacatalogo from \"../stores/tuplacatalogoStore\";\r\n\r\n//*interfaces\r\ninterface PropsCT{\r\n catalogo:any;\r\n}\r\n\r\n//*componente\r\nexport default function ConvierteCatalogoATupla(props: PropsCT){\r\n const { setCatalogoTupla} =\r\n tuplacatalogo((state:any) =>( {\r\n setCatalogoTupla: state.setCatalogoTupla,\r\n }));\r\n\r\n useEffect(()=>{\r\n let tuplaTemp:any={};\r\n props.catalogo.map((c:any)=>{\r\n let valuesC= Object.values(c);\r\n let id:any= valuesC[0];\r\n tuplaTemp[id]= valuesC[1];\r\n })\r\n setCatalogoTupla(tuplaTemp);\r\n //console.clear();\r\n console.log(\"** ConvierteCatalogoATupla **\");\r\n console.log(\"catálogo de entrada: \", props.catalogo);\r\n console.log(\"tupla de salida: \", tuplaTemp);\r\n },[]);\r\n \r\n return (\r\n <>\r\n \r\n \r\n\r\n )\r\n}","/* Tuplas a Catálogos - Catálogo a Tuplas\r\n Se recibe un objeto tipo tupla que se convierte a un arreglo tipo catálogo y viceversa (ejemplo con archivos estáticos)\r\n*/\r\n\r\n//*datos\r\nimport tuplaArch from \"../../../datos/json/tupla.json\";\r\nimport catalogoArch from \"../../../datos/json/catalogo.json\";\r\n\r\n//*clases\r\nimport \"../componentes.css\"\r\n\r\n//*archivos\r\nimport ConvierteTuplaACatalogo from \"../../../componentes/ConvierteTuplaACatalogo\";\r\nimport ConvierteCatalogoATupla from \"../../../componentes/ConvierteCatalogoATupla\";\r\n\r\n//*componente\r\nexport default function Ejemplo(){\r\nlet tupla=tuplaArch;\r\nlet catalogo=catalogoArch;\r\n return (\r\n
    \r\n

    Ejemplo de tupla a catálogo

    \r\n \r\n\r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n

    \r\n\r\n\r\n

    Ejemplo de catálogo a tupla

    \r\n\r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n );\r\n}\r\n","/*Genera Menu. entra como insumo el menú a pintar, tipo (1 o 2) es para el diseño, msjTipo2 es un texto que muestra en el menu */\r\n\r\n//*react- recursos\r\n import Nav from \"react-bootstrap/Nav\";\r\n import Navbar from \"react-bootstrap/Navbar\";\r\n\r\n//*clases\r\n import Container from \"react-bootstrap/Container\";\r\n import \"./menu.css\";\r\n\r\n//*store's\r\n //import menuStore from \"../../stores/menu.store\"; \r\n\r\n//*interfaces\r\n interface propsMenu {\r\n menu: any;\r\n tipo: any;\r\n msjTipo2: any\r\n }\r\n\r\n//*componente\r\n export default function GeneraMenu(props: propsMenu) { //*api store\r\n //console.log('GeneraMenu: menu', props.menu)\r\n //stores adicionales\r\n\r\n\r\n //*datos\r\n\r\n //*constantes y variables\r\n let menu = props.menu;\r\n\r\n //*usestate\r\n\r\n //*useEffect\r\n //*funciones\r\n \r\n const cambiaMenu = (opcMenu:any)=> {\r\n alert('cambio de ventana, cuando se utilice programar la entrada como se hizo para GeneraMenuSSC como variables store')\r\n } \r\n \r\n //*vista\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n {/* Menú que se acomoda en cualquier parte*/}\r\n {props.tipo==1\r\n ? <>\r\n
    \r\n {menu.map((item: any) => (\r\n <>\r\n {item.activo == true\r\n ? (\r\n /* \r\n {item.desc}\r\n */\r\n cambiaMenu({item})} className=\"active\">{item.desc}\r\n ) \r\n : (\r\n /* {item.desc} */\r\n cambiaMenu({item})} >{item.desc}\r\n )\r\n }\r\n \r\n ))}\r\n
    \r\n \r\n : <>\r\n }\r\n\r\n {/* Menu pegado arriba con una opción de mensaje a la izquierda, menu posterior de n elementos... */}\r\n {props.tipo==2\r\n ? <>\r\n
    \r\n {menu.map((item: any) => (\r\n {item.desc}\r\n ))}\r\n
    \r\n \r\n \r\n {props.msjTipo2}\r\n \r\n \r\n \r\n {menu.map((item: any) => (\r\n {item.desc} \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n : <>\r\n } \r\n
    \r\n \r\n );\r\n }\r\n","/* */\r\n\r\n//*componentes-utiles\r\n//*datos\r\n\r\n//*clases\r\n\r\n//*componente\r\n export default function PaginaMenu1() {\r\n return (\r\n
    \r\n

    Página menu 1

    \r\n

    \r\n
    \r\n );\r\n }\r\n","/* */\r\n\r\n//*componentes-utiles\r\n//*datos\r\n\r\n//*clases\r\n\r\n//*componente\r\n export default function PaginaMenu2() {\r\n return (\r\n
    \r\n

    Página menu 2

    \r\n

    \r\n
    \r\n );\r\n }\r\n","/* */\r\n\r\n//*componentes-utiles\r\n//*datos\r\n\r\n//*clases\r\n\r\n//*componente\r\n export default function PaginaMenu3() {\r\n return (\r\n
    \r\n

    Página menu 3

    \r\n

    \r\n
    \r\n );\r\n }\r\n","/* */\r\n\r\n//*componentes-utiles\r\n//*datos\r\n\r\n//*clases\r\n\r\n//*componente\r\n export default function PaginaMenu4() {\r\n return (\r\n
    \r\n

    Página menu 4

    \r\n

    \r\n
    \r\n );\r\n }\r\n","/* */\r\n\r\n//*componentes-utiles\r\n//*datos\r\n\r\n//*clases\r\n\r\n//*componente\r\n export default function PaginaMenu5() {\r\n return (\r\n
    \r\n

    Página menu 5

    \r\n

    \r\n
    \r\n );\r\n }\r\n","/* Genera 3 tipos de menus: Se recibe un arreglo con el nombre de los menus */\r\n\r\n//*react- recursos\r\n import { useState } from \"react\";\r\n//*componentes-utiles\r\n import GeneraMenu from \"../../../componentes/generaMenu/GeneraMenu\";\r\n\r\n//*datos\r\n import menu from \"../../../datos/json/menu.json\";\r\n\r\n//*archivos & componentes (imagenes y elementos necesarios para la rutina)\r\n import PaginaMenu1 from \"./PaginaMenu1\";\r\n import PaginaMenu2 from \"./PaginaMenu2\";\r\n import PaginaMenu3 from \"./PaginaMenu3\";\r\n import PaginaMenu4 from \"./PaginaMenu4\";\r\n import PaginaMenu5 from \"./PaginaMenu5\";\r\n\r\n//*componente\r\n export default function Ejemplo() {\r\n \r\n //*useState\r\n const [paginaActiva, setPaginaActiva] = useState(\"1\");\r\n //*vista\r\n return (\r\n
    \r\n

    Ejemplo de generación de un menu 2 tipos se manda parámetro {1} o {2}

    \r\n\r\n
    \r\n {/* 2 tipos de menu, tipo 1 se acomoda en donde se mande llamar, tipo 2 arriba mas un mensaje */}\r\n \r\n
    \r\n\r\n\r\n
    \r\n { paginaActiva===\"1\" ? : null } \r\n { paginaActiva===\"2\" ? : null } \r\n { paginaActiva===\"3\" ? : null } \r\n { paginaActiva===\"4\" ? : null } \r\n { paginaActiva===\"5\" ? : null } \r\n
    \r\n

    \r\n
    \r\n );\r\n }\r\n","export default __webpack_public_path__ + \"static/media/calendar.c5d0e45e.png\";","//*react- recursos\r\nimport React, { useState } from \"react\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport es from \"date-fns/locale/es\";\r\n\r\n//*install\r\n//npm i react-datepicker\r\n\r\n//*archivos\r\nimport icono from \"./calendar.png\";\r\n\r\n//css\r\nimport \"./calendar.css\";\r\n\r\n//*interfaces\r\ninterface PropsFecha {\r\n fecha: any;\r\n fechaNombre: any;\r\n texto: any;\r\n separar: any;\r\n}\r\n\r\n//*componente\r\nexport default function GeneraComboFecha(props: PropsFecha) {\r\n //*constantes y variables\r\n let fecha = props.fecha;\r\n let fechaNombre = props.fechaNombre;\r\n let texto = props.texto; //se usa si ocupamos un texto adicional como una nota o algo así\r\n let separar = props.separar;\r\n\r\n const [date, setDate] = useState(new Date(fecha));\r\n const handleChange = (date: any) => setDate(date);\r\n\r\n console.log(\"combo fecha: \", date, \" se asigna a: \", { fechaNombre });\r\n\r\n //*vista\r\n return (\r\n <>\r\n
    \r\n \r\n {separar ? (\r\n
    \r\n {fechaNombre}\r\n
    \r\n \r\n \r\n \"icono\"\r\n \r\n
    \r\n ) : (\r\n
    \r\n {fechaNombre}\r\n \r\n \r\n \"icono\"\r\n \r\n
    \r\n )}\r\n
    \r\n \r\n );\r\n}\r\n","/* Genera un combo de fechas ubicando la fecha enviada: Se recibe un objeto con fecha */\r\n\r\n//*react- recursos\r\n\r\n//*componentes-utiles\r\nimport GeneraComboFecha from \"../../../componentes/generaComboFecha/GeneraComboFecha\";\r\n\r\n//*datos\r\n\r\n//*clases\r\nimport \"../componentes.css\";\r\n//import \"../../../componentes/generaComboFecha/calendar.css\";\r\n\r\n//*vista\r\nexport default function Ejemplo() {\r\n //sacar fecha del sistema\r\n let fecha = \"05/25/2022\";\r\n let fechaNombre = \"Fecha nombre 1\";\r\n let fecha2 = Date(); //sacar la fecha de s.o.\r\n let fechaNombre2 = \"Fecha nombre 2\";\r\n let texto = \"Texto adicional para fecha\";\r\n let separar = true; //true lo deja el texto en una linea y el input en otra\r\n //false los deja en la misma linea\r\n //probar con fecha específica\r\n return (\r\n
    {/* className=\"container yellow\" */}\r\n

    Ejemplo de generación un calendario fecha fija: {fecha}

    \r\n \r\n

    \r\n
    \r\n \r\n
    \r\n \r\n

    \r\n \r\n

    \r\n Ejemplo de generación un calendario fecha del sistema operativo: {fecha2} \r\n

    \r\n \r\n

    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n}\r\n","export default __webpack_public_path__ + \"static/media/menu2.fc2176d7.png\";","import Tab from \"react-bootstrap/Tab\";\r\n\r\n//*componente\r\n\r\n//*interfaces\r\ninterface PropsMenuV {\r\n menu: any;\r\n}\r\nexport default function ParteContenido(props: PropsMenuV) {\r\n let menu = props.menu;\r\n return (\r\n
    \r\n \r\n {menu.map((item: any, key: any) => (\r\n contenido {item.desc}\r\n ))}\r\n \r\n
    \r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\nimport Nav from \"react-bootstrap/Nav\";\r\nimport styled from \"styled-components\";\r\n\r\n//*componente\r\n//Install\r\n//npm install --save styled-components\r\n\r\n//*interfaces\r\ninterface PropsMenuV {\r\n menu: any;\r\n}\r\n\r\nexport default function ParteMenu(props: PropsMenuV) {\r\n let menu = props.menu;\r\n\r\n const [isOpened, setIsOpened] = useState(false);\r\n const [step, setStep] = useState(\"1\");\r\n\r\n function toggle(stepId: any, activo: any, subm: any) {\r\n //console.log(\"stepId..actual...\", stepId);\r\n //console.log(\"step....\", step);\r\n\r\n //let stepAnt = setStep;\r\n if (subm !== null) {\r\n if (step !== stepId) {\r\n let stepAnt = Number(step) - 1;\r\n\r\n if (stepAnt >= 0) menu[stepAnt].activo = \"f\";\r\n\r\n if (menu[stepId - 1].activo === \"t\") {\r\n menu[stepId - 1].activo = \"f\";\r\n setIsOpened(false);\r\n } else {\r\n menu[stepId - 1].activo = \"t\";\r\n setIsOpened(true);\r\n }\r\n\r\n setStep(stepId);\r\n } else {\r\n // console.log(\"es igual\", step, step !== stepId);\r\n if (menu[stepId - 1].activo === \"t\") {\r\n menu[stepId - 1].activo = \"f\";\r\n setIsOpened(false);\r\n } else {\r\n menu[stepId - 1].activo = \"t\";\r\n setIsOpened(true);\r\n }\r\n setStep(\"0\");\r\n }\r\n }\r\n //console.log(menu, \"pasoMenu.....\");\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n\r\nconst Navnav = styled.div`\r\nwidth: \"258px\",\r\ntextDecoration: \"underline\",\r\n`;\r\n","//*react- recursosimemu\r\nimport React, { useState } from \"react\";\r\n\r\n//*clases\r\n//import Container from \"react-bootstrap/Container\";\r\nimport Tab from \"react-bootstrap/Tab\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\n\r\n//*archivos\r\nimport imemu from \"./menu2.png\";\r\nimport icontenido from \"./solicitud.png\";\r\n//import { mdiMenuLeft } from \"@mdi/js\";\r\n\r\nimport ParteContenido from \"./ParteContenido\";\r\nimport ParteMenu from \"./ParteMenu\";\r\n\r\n//*clases\r\nimport \"./menuVertical.css\";\r\n\r\n//*interfaces\r\ninterface PropsMenuV {\r\n lado: any;\r\n menu: any;\r\n}\r\n\r\n//*componente\r\nexport default function GeneraMenu(props: PropsMenuV) {\r\n //*api store\r\n //*store's\r\n //*datos\r\n\r\n //*constantes y variables\r\n let menu = props.menu;\r\n let lado = props.lado;\r\n\r\n const [show, setShow] = useState(true);\r\n\r\n //*usestate\r\n //si es d es 9,2 si es i es 2,9\r\n let pContenido = 9;\r\n let pMenu = 3;\r\n\r\n //*vista\r\n return (\r\n <>\r\n
    \r\n
    \r\n Ejemplo con un archivo insumo en datos/menu1.json
    \r\n
    \r\n
    \r\n
    \r\n {show &&
    Solicitud de microdatos
    }\r\n
    \r\n {\r\n setShow(!show);\r\n }}\r\n id=\"img\"\r\n />\r\n
    \r\n
    \r\n\r\n {/*fondo blanco className=\"containerContent\"*/}\r\n {show ? (\r\n
    \r\n {lado === \"d\" ? (\r\n
    \r\n \r\n {/*Derecha\"*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n
    \r\n \r\n {/*Izquierda\"*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n
    \r\n
    \r\n ) : (\r\n <>\r\n
    \r\n \"icont\"\r\n
    \r\n \r\n )}\r\n \r\n );\r\n}\r\n","/* Genera 3 tipos de menus: Se recibe un arreglo con el nombre de los menus */\r\n\r\nimport React, { useState } from \"react\";\r\n//*componentes-utiles\r\nimport GeneraMenuVertical from \"../../../componentes/generaMenuVertical/GeneraMenuVertical\";\r\n\r\n//*datos\r\nimport menuArch from \"../../../datos/json/menu1.json\";\r\n\r\n//*componente\r\nexport default function Ejemplo() {\r\n let menu = menuArch;\r\n let pasoMenu = menu;\r\n\r\n const [lado, setLado] = useState(\"d\");\r\n\r\n //aqui se modifica el json\r\n pasoMenu.map((opcion: any) => {\r\n opcion[\"activo\"] = \"f\";\r\n return pasoMenu;\r\n });\r\n\r\n console.log(pasoMenu, \"pasoMenu.....\");\r\n //lado i=izquierda y d=derecha\r\n return (\r\n <>\r\n
    \r\n

    Ejemplo de generación de un menu tipo AAIE

    \r\n setLado(\"i\")}\r\n >\r\n Izquierda\r\n \r\n setLado(\"d\")}\r\n >\r\n Derecha\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n","import ReactLoading from 'react-loading';\r\n\r\nexport default function DivLoading() {\r\n\r\n/* types para el ReactLoading\r\nballs\r\nbars\r\nbubbles\r\ncubes\r\ncylon\r\nspin\r\nspinningBubbles\r\nspokes\r\n*/\r\n\r\nconst DivLoadingReact = () => (\r\n \r\n);\r\n return(\r\n
    \r\n
    \r\n
    \r\n );\r\n} ","//*react- recursos\r\nimport React, { useState, useCallback } from \"react\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { toast } from \"react-toastify\";\r\nimport Swal from \"sweetalert2\"; //caja de información centra\r\n//import shallow from 'zustand/shallow';\r\n\r\n//*componentes-utiles\r\nimport DivLoading from \"../DivLoading\";\r\n\r\n//*css\r\n//import \"./dropzone.css\"; //se carga en la cita (ejemplo.tsx)\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { Button } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"; //'libreria' que cita el bote de basura\r\nimport { faTrashAlt } from \"@fortawesome/free-solid-svg-icons\"; //icono bote de basura\r\n\r\nimport \"./dropzone.css\";\r\n\r\n//*interfaces //este elemento se podría utilizar cuando se ocupe regresar al componente que tiene el dropzone con la información que ya tenia, para ello se debe llenar este elemento antes salir.\r\ninterface PropsDrop {\r\n archDrop?: any;\r\n}\r\n\r\n//*componente\r\nexport default function GeneraDropzone() {\r\n //*api store\r\n\r\n //data: mis etiquetas\r\n const myLabels = [\r\n { id: 0, desc: \"Periodo a actualizar:\" },\r\n { id: 1, desc: \"Archivos incorporados:\" },\r\n { id: 2, desc: \"(esperados)\" },\r\n { id: 3, desc: \"Cargar archivos\" },\r\n { id: 4, desc: \"Remover todos los archivos\" },\r\n { id: 5, desc: \"Borrar archivo\" },\r\n {\r\n id: 6,\r\n desc: 'Incorpore en este espacio los archivos del tema que desea actualizar, para ello siga la indicación mencionada abajo y posteriormente de clic en el botón \"Cargar archivos\".',\r\n },\r\n {\r\n id: 7,\r\n desc: \"Arrastre y suelte los archivos aquí, o haga clic para seleccionar archivos\",\r\n },\r\n { id: 8, desc: \"Resultado de la validación:\" },\r\n { id: 9, desc: \"Cerrar\" },\r\n { id: 10, desc: \"¿Desea remover TODOS los archivos?\" },\r\n { id: 11, desc: \"¿Desea remover el archivo seleccionado?\" },\r\n {\r\n id: 12,\r\n desc: \"Para continuar con el siguiente paso, el sistema validará los archivos cargados para actualizar el tema.\",\r\n },\r\n {\r\n id: 13,\r\n desc: \"Todos los archivos son válidos para realizar la actualización del tema.\",\r\n },\r\n {\r\n id: 14,\r\n desc: 'Para continuar de clic en el botón \"Procesar archivos\"',\r\n },\r\n { id: 15, desc: \"\" },\r\n { id: 16, desc: \" archivo(s) cargado(s) anteriormente\" },\r\n {\r\n id: 17,\r\n desc: \" archivo(s) no es (son) válido(s) para realizar la actualización del tema. \",\r\n },\r\n {\r\n id: 18,\r\n desc: \"El sistema lo(s) eliminará del espacio para cargar los archivos.\",\r\n },\r\n { id: 19, desc: \"¿Desea continuar con los archivos válidos?\" },\r\n //Usted tiene [##] archivo (s) que no son válidos para actualizar el tema [cve tema], por lo que se eliminarán del espacio para subir o cargar archivos\r\n ];\r\n\r\n //*constantes y variables\r\n let filesIn = [] as any; //este elemento se uso para cargar archivos inválidos (puede omitirse)\r\n let myFileCopia = [] as any; //copia de myFile (que es donde se guarda la lista de archivos cargados por el usuario) usada para hacer recorridos y comparaciones sin afectar el arreglo myFile\r\n\r\n //*useState\r\n //const [filesTotal, setFilesTotal] = useState(0);\r\n const [myFiles, setMyFiles] = useState([] as any); //guarda el listado de elementos (archivos) cargados por el usuario\r\n const [filesInvalid, setFilesInvalid] = useState([] as any); //este elemento se uso para cargar archivos inválidos\r\n //const [show, setShow] = useState(false);\r\n const [openDivLoading, setOpenDivLoading] = useState(false);\r\n\r\n //*funciones:\r\n\r\n //--Componente Dropzone\r\n function MyDropzone() {\r\n //*useCallback //ya traemos los archivos (acceptedFiles acumula lo del cuadro de dialogo)\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n //let listaFilesDupli=\"\";\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n if (myFiles.length != 0) {\r\n /* el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado */\r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if (\r\n myFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n\r\n /* generaba un listado con los archivos duplicados */\r\n /* i===acceptedFilesTemp.length-1? listaFilesDupli= listaFilesDupli + acceptedFilesTemp[i].name\r\n : listaFilesDupli= listaFilesDupli + \", \" + acceptedFilesTemp[i].name */\r\n\r\n /* splice borra una posición del arreglo */\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n /* esto sucede cuando se duplica un archivo en la zona de carga */\r\n if (filesCarg > 0) {\r\n toast.success(() => (\r\n <>\r\n
    \r\n {myLabels[8].desc}\r\n

    \r\n {filesCarg}\r\n {myLabels[16].desc}\r\n
    \r\n \r\n ));\r\n }\r\n }\r\n\r\n /* acumula de acceptedFiles a myFiles */\r\n setMyFiles([...myFiles, ...acceptedFiles]);\r\n },\r\n [myFiles]\r\n );\r\n\r\n //*funciones\r\n\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n Swal.fire({\r\n //title: myLabels[11].desc,\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + myLabels[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...myFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setMyFiles(newFiles); //uso común del useState, actualiza myFiles\r\n console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n console.log(\r\n \"removeFile: que haré si se eliminan todos los elementos\"\r\n );\r\n }\r\n }\r\n });\r\n };\r\n\r\n //-- genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //cada vez que se renderiza myfiles genera esta función\r\n const files = myFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n\r\n //*vista: //--pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n \r\n {/*

    {myLabels[6].desc}inco

    */}\r\n {myLabels[7].desc}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n //--botón remover archivos, limpia la lista y el dropzone\r\n const removeAllFiles = () => {\r\n Swal.fire({\r\n //title: myLabels[10].desc,\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + myLabels[10].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n setMyFiles([]);\r\n }\r\n });\r\n };\r\n\r\n //--Botón Cargar archivos, se recorre el myFiles y se valida si son validos (en relación al tema), se remueve los que no pasan, los que si se envia la llamada al api con la estructura acordada y con ello se activa el paso 3\r\n const filesUpload = () => {\r\n setOpenDivLoading(true);\r\n filesIn = [] as any;\r\n myFileCopia = [] as any;\r\n setFilesInvalid([]);\r\n myFileCopia = [...myFiles];\r\n\r\n //* si esto sucedía se acumulaban en los archivos nom validos\r\n //myFiles.map((file:any,index:any) => {\r\n //esto era para verificar si los archivos que nos estaban pasando tenía formanto xlsx\r\n //let idx= topicDetail.contenido[0].archivos.findIndex((v:any)=> v.nombre_fisico + \".xlsx\" === file.name || v.nombre_fisico + \".xls\" === file.name);\r\n //let idx= topicDetail.contenido[0].archivos.findIndex((v:any)=> v.nombre_fisico.toLowerCase() + \".xlsx\" === file.name.toLowerCase() );\r\n // if (idx<0){//no está el archivo\r\n // filesIn.push({ \"idx\": index, \"nombre_fisico\": file.name });\r\n //}\r\n //})\r\n\r\n setOpenDivLoading(false); //inhibimos la pantalla\r\n\r\n if (filesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n Swal.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html:\r\n \"
    \" +\r\n myLabels[8].desc +\r\n \" \" +\r\n filesIn.length +\r\n \"\" +\r\n myLabels[17].desc +\r\n \"

    \" +\r\n myLabels[18].desc +\r\n \"

    \" +\r\n myLabels[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n setOpenDivLoading(true);\r\n for (let f = filesIn.length - 1; f >= 0; f--) {\r\n myFileCopia.splice(filesIn[f].idx, 1);\r\n }\r\n\r\n setMyFiles(myFileCopia);\r\n setFilesInvalid(filesIn);\r\n filesUploadContinue();\r\n } else {\r\n for (let f = filesIn.length - 1; f >= 0; f--) {\r\n myFileCopia.splice(filesIn[f].idx, 1);\r\n }\r\n setMyFiles(myFileCopia);\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setOpenDivLoading(true);\r\n setMyFiles(myFileCopia);\r\n setFilesInvalid(filesIn);\r\n setTimeout(() => {\r\n filesUploadContinue();\r\n }, 100);\r\n }\r\n };\r\n\r\n //-- manda los archivos a la llamda del api para ser bajados en la NAS\r\n const filesUploadContinue = () => {\r\n if (myFileCopia.length > 0) {\r\n const formData = new FormData(); //se declar formato (tipo formulario) que se utiliza para mandar al api cuando se suben archivos\r\n //formData.append(\"idtema\", id); //otro parametro si lo ocupa el api\r\n formData.append(\"esquema\", \"des\"); //otro parametro si lo ocupa el api\r\n\r\n myFileCopia.map((e: any) => {\r\n //se agregan los archivos enlistados al formato de FormData\r\n formData.append(\"files\", e, e.name);\r\n });\r\n //ojo este consoloe para ver los archivos tenemos que mandar la propiedad del formData con getAll\r\n console.log(\r\n \"*formData es lo que manda la api para que éste generé la copiana la NAS*\"\r\n );\r\n console.log(\"*formData:\", formData.getAll(\"files\"));\r\n\r\n toast.success(() => (\r\n <>\r\n
    {myLabels[13].desc}
    \r\n
    \r\n \r\n ));\r\n }\r\n /* else{\r\n //funciones del store (stepStore.tsx)\r\n setStepsContentAdvance(2,20).catch(); //Contabiliza avance a 20% (al seleccionar un tema cumple con el primer paso)\r\n } */\r\n setOpenDivLoading(false);\r\n };\r\n\r\n //--\r\n //const handleClose = (filesV:any) => setShow(false);\r\n\r\n //*vista\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n \r\n {myLabels[4].desc}\r\n \r\n  \r\n \r\n {myLabels[3].desc}\r\n \r\n    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {/* */}\r\n {openDivLoading ? : null}\r\n \r\n );\r\n}\r\n","/* Carga de archivo: elemento que carga un archivo a la vez */\r\n\r\n//*react- recursos\r\n\r\n//*componentes-utiles\r\nimport GeneraDropzone from \"../../../componentes/generaDropZone/GeneraDropzone\";\r\n\r\n//*clases\r\n//import \"../../../componentes/generaDropZone/dropzone.css\";\r\n\r\n//*datos\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\n\r\n//*componente\r\nexport default function Ejemplo() {\r\n //*api store\r\n\r\n //*store's\r\n\r\n //*data\r\n\r\n //*constantes y variables\r\n\r\n //*usestate\r\n\r\n //*useEffect\r\n\r\n //*funciones\r\n\r\n //*vista\r\n return (\r\n
    \r\n

    Ejemplo de Dropzone:

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","export default async function apiCall( {\r\n url=\"\",\r\n method = \"post\",\r\n headers={},\r\n }, body:any) {\r\n try {\r\n //const objErrorApi = { resultado: { \"idresul\": 0, \"desresul\": \"\" } };\r\n \r\n const response = await fetch(url, {\r\n method,\r\n body,\r\n headers,\r\n });\r\n\r\n console.log(\"______________response.status: \", response.status);\r\n console.log(\"______________response.status: \", response);\r\n\r\n if (response.status == 200)\r\n return response.json(); \r\n else{\r\n return response.json(); \r\n /* console.log('else')\r\n objErrorApi.resultado.idresul = response.status;\r\n objErrorApi.resultado.desresul = response.statusText;\r\n return objErrorApi; */\r\n } \r\n \r\n } catch (error) {\r\n console.log(\"catch api (error): \", error);\r\n Promise.reject(error);\r\n //return(error)\r\n }\r\n} \r\n\r\n","import React from \"react\";\r\nimport create from \"zustand\";\r\nimport { stringify } from \"querystring\";\r\n\r\nimport APITaskMethod from \"../datos/json/APITaskMethod.json\";\r\nimport apiCall from \"../api\"; //llamada al api\r\n\r\nconst filesStore = create((set, get:any) => ({\r\n uploadFilesbyTopic:[],\r\n isLoading: false,\r\n filesDropzone:[],\r\n objError: { store:'f', url: \"\", recurso: \"\", body: \"\", hasError: false, function:\"\", resultado: { \"idresul\": 0, \"desresul\": \"\" } }, \r\n \r\n setGuardaFiles: async (posicion:any, file:any) => {\r\n //alert('setTopicSelectDefault - Regresa los valores por omisión');\r\n try{\r\n let fiDr= get().filesDropzone;\r\n let infoFile={};\r\n infoFile={\"posi\": posicion, \"file\":file};\r\n let idx= fiDr.findIndex((i:any)=>i.posi===posicion);\r\n if (idx>-1){\r\n fiDr[idx]= infoFile;\r\n }\r\n else{\r\n fiDr.push(infoFile);\r\n }\r\n console.log(\"fiDr Guarda\", fiDr);\r\n set({ filesDropzone: fiDr, \r\n isLoading: false, \r\n objError: { url: \"\", recurso: \"\", body: \"\", hasError: false, function:\"\", resultado: { \"idresul\": 0, \"desresul\": \"\" } }\r\n });\r\n } catch (error){\r\n get().setObjError('', '', '', true, 'setUploadFilesDefault', -200, 'Error al inicializar ')\r\n } finally{\r\n set({ isLoading:false });\r\n };\r\n },\r\n \r\n setEliminaFiles: async (posicion:any) => {\r\n //alert('setTopicSelectDefault - Regresa los valores por omisión');\r\n try{\r\n let fiDr= get().filesDropzone;\r\n let idx= fiDr.findIndex((i:any)=>i.posi===posicion);\r\n if (idx>-1){\r\n fiDr.splice(idx, 1);\r\n }\r\n console.log(\"fiDr Elimina\", fiDr);\r\n set({ filesDropzone: fiDr, \r\n isLoading: false, \r\n objError: { url: \"\", recurso: \"\", body: \"\", hasError: false, function:\"\", resultado: { \"idresul\": 0, \"desresul\": \"\" } }\r\n });\r\n } catch (error){\r\n get().setObjError('', '', '', true, 'setUploadFilesDefault', -200, 'Error al inicializar ')\r\n } finally{\r\n set({ isLoading:false });\r\n };\r\n },\r\n\r\n\r\n\r\n setObjError: async (u:any, r:any, b:any, h:any, f:any, i:any, d:any) => {\r\n //alert('setObjError' );\r\n let objErrorInt = { store:'f', url:u, recurso:r, body:b, hasError:h, function:f, resultado:{ \"idresul\":i, \"desresul\":d } };\r\n try{\r\n set({ objError: objErrorInt});\r\n } catch (error){\r\n objErrorInt.hasError = true;\r\n objErrorInt.function = \"setObjError (filesStore)\";\r\n objErrorInt.resultado.idresul = -200;\r\n objErrorInt.resultado.desresul = \"Error al asignar el objeto de errores\";\r\n set( { objError:objErrorInt } );\r\n } finally{\r\n set({ isLoading:false });\r\n };\r\n if (objErrorInt.hasError)\r\n console.log('Error (objError): ', get().objError.resultado.idresul, ' ... ', get().objError.resultado.desresul);\r\n },\r\n\r\n setUploadFilesDefault: async () => {\r\n //alert('setTopicSelectDefault - Regresa los valores por omisión');\r\n try{\r\n set({ uploadFilesbyTopic: [], \r\n isLoading: false, \r\n objError: { url: \"\", recurso: \"\", body: \"\", hasError: false, function:\"\", resultado: { \"idresul\": 0, \"desresul\": \"\" } }\r\n });\r\n } catch (error){\r\n get().setObjError('', '', '', true, 'setUploadFilesDefault', -200, 'Error al inicializar ')\r\n } finally{\r\n set({ isLoading:false });\r\n };\r\n },\r\n \r\n getUploadFilesbyTopic: async (token:any, id:any, filesSel:any) => {\r\n const API_ENV= process.env.REACT_APP_ENV\r\n const API_URL= process.env.REACT_APP_API_URL;\r\n const API_ESQ:any = process.env.REACT_APP_API_SCHEMA;\r\n const API_TASK = APITaskMethod.methods[3].name + APITaskMethod.methods[3].task[0].name;//Files/UploadFilesbyTopic;\r\n const API_HEADERS = {\"Authorization\":token};\r\n const API_BODY = \"\";//formData;\r\n const API_PARAMS = { \"url\": API_URL+API_TASK , \"method\":\"post\", \"headers\":API_HEADERS };\r\n //const API_HEADERS = {\"Content-Type\": \"undefined\",\"Authorization\":token,\"FormData\": }; // ojo al mandar archivos a la nas no se manda content-type\r\n const formData = new FormData();\r\n formData.append(\"idtema\", id);\r\n formData.append(\"esquema\", API_ESQ);\r\n filesSel.map((e:any) => {\r\n formData.append(\"files\", e,e.name);\r\n }); \r\n //console.clear();\r\n //console.log ('API_ENV: ', API_ENV, ' API_URL: ', API_URL, ' API_HEADERS: ', API_HEADERS);\r\n //console.log ('API_BODY: ', API_BODY );\r\n //console.log ('**API_PARAMS: ', API_PARAMS );\r\n\r\n get().setObjError('', '', '', false, '', 0, ''); \r\n try {\r\n set({ uploadFilesbyTopic:[] });\r\n const uploadResult= await apiCall(API_PARAMS,formData); //api\r\n\r\n \r\n if (uploadResult.resultado.idresul===200 || uploadResult.resultado.idresul===0) {\r\n set( { uploadFilesbyTopic: uploadResult } );\r\n //console.log(\"**getuploadFilesbyTopic - carga de archivos en la NAS\");\r\n //console.log(\"*uploadFilesbyTopic: \", get().uploadFilesbyTopic);\r\n return(get().uploadFilesbyTopic);\r\n }\r\n else{\r\n get().setObjError(API_URL, API_TASK, API_BODY, true, 'getUploadFilesbyTopic', uploadResult.resultado.idresul, uploadResult.resultado.desresul); \r\n return(get().objError);\r\n }\r\n } catch (error) {\r\n console.log(\"error catch: \", error);\r\n set( { uploadFilesbyTopic: [] } );\r\n get().setObjError(API_URL, API_TASK, API_BODY, true, 'getUploadFilesbyTopic', -200,'Error de API, no identificado'); \r\n return(get().objError); \r\n } finally {\r\n set( { isLoading: false } );\r\n }\r\n },\r\n \r\n \r\n}));\r\n\r\nexport default filesStore;\r\n\r\n//RESUMEN\r\n// setUploadFilesDefault - función con valores por default \r\n// getUploadFilesbyTopic - función que manda archivos a la NAS\r\n// uploadFilesbyTopic - respuesta del API al subir los archivos a la NAS\r\n// isLoading - elemento para ver la carga\r\n// errorMessage - guarda posible mensaje de error\r\n// hasError - bandera (True/False) que nos dice si hay errores\r\n// funtionError - nombre de la función con error\r\n","//*react- recursos\r\nimport React, { useEffect, useState, useCallback } from \"react\";\r\nimport { useDropzone } from \"react-dropzone\";\r\n//import {toast} from \"react-toastify\";\r\n\r\n//*componentes-utiles\r\nimport DivLoading from \"../DivLoading\";\r\nimport Swal from \"sweetalert2\";\r\n\r\n//*clases\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { Label } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faTrashAlt } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\n//*datos\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\nimport filesStore from \"../../stores/filesStore\";\r\n\r\n//*interfaces\r\ninterface PropsDrop {\r\n posi: any;\r\n archDrop?: any;\r\n}\r\n\r\n//*componente\r\nexport default function GeneraDropzoneUnArchivo(props: PropsDrop) {\r\n //*store\r\n const { setGuardaFiles, setEliminaFiles } = filesStore((state: any) => ({\r\n setGuardaFiles: state.setGuardaFiles,\r\n setEliminaFiles: state.setEliminaFiles,\r\n }));\r\n\r\n //*data //mis etiquetas\r\n const myLabels = [\r\n { id: 0, desc: \"Cargar archivos\" },\r\n { id: 1, desc: \"Remover todos los archivos\" },\r\n { id: 2, desc: \"Borrar archivo\" },\r\n { id: 3, desc: \"Resultado de la validación:\" },\r\n { id: 4, desc: \"¿Desea remover TODOS los archivos?\" },\r\n { id: 5, desc: \"¿Desea remover el archivo seleccionado?\" },\r\n {\r\n id: 6,\r\n desc: \"Todos los archivos son válidos para realizar la actualización del tema.\",\r\n },\r\n {\r\n id: 7,\r\n desc: 'Para continuar de clic en el botón \"Procesar archivos\"',\r\n },\r\n {\r\n id: 8,\r\n desc: \" archivo(s) no es (son) válido(s) para realizar la actualización del tema. \",\r\n },\r\n {\r\n id: 9,\r\n desc: \"El sistema lo(s) eliminará del espacio para cargar los archivos.\",\r\n },\r\n { id: 10, desc: \"¿Desea continuar con los archivos válidos?\" },\r\n { id: 11, desc: \"Examinar\" },\r\n ];\r\n\r\n //*variables\r\n //let filesIn = [] as any;\r\n //let datf= [] as any;\r\n //const [filesTotal, setFilesTotal] = useState(0);\r\n const [myFiles, setMyFiles] = useState([] as any);\r\n //const [filesInvalid, setFilesInvalid] = useState([] as any);\r\n //const [show, setShow] = useState(false);\r\n //const [perSel,setPerSel]= useState(period);\r\n const [openDivLoading, setOpenDivLoading] = useState(false);\r\n\r\n //*funciones\r\n //--Componente Dropzone\r\n function MyDropzone() {\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n //let listaFilesDupli=\"\";\r\n //let acceptedFilesTemp:any=[];\r\n //let filesCarg=0;\r\n\r\n setMyFiles([...acceptedFiles]);\r\n setGuardaFiles(props.posi, acceptedFiles);\r\n //funciones del api store (stepStore.tsx)\r\n },\r\n [myFiles]\r\n );\r\n\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n //multiple falso es para que cargue solo 1, si quitamos la propiedad permite generar múltiples archivos\r\n const { getRootProps, getInputProps } = useDropzone({\r\n multiple: false,\r\n onDrop,\r\n });\r\n\r\n //removeFile remueve los archivos de nuestra lista (remueve de uno a uno)\r\n const removeFile = (file: any) => () => {\r\n Swal.fire({\r\n //title: myLabels[11].desc,\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n width: \"40%\",\r\n html: \"
    \" + myLabels[5].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...myFiles];\r\n newFiles.splice(newFiles.indexOf(file), 1);\r\n setMyFiles(newFiles);\r\n setEliminaFiles(props.posi);\r\n // console.log(\"newFiles *******\",newFiles.length);\r\n if (newFiles.length == 0) {\r\n //no tiene archivos\r\n console.log(\"No tengo archivos\");\r\n } else console.log(\"Si tengo archivos\");\r\n //funciones del store (stepStore.tsx)\r\n }\r\n });\r\n };\r\n\r\n //-- genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n const files = myFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n\r\n //--pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n\r\n //const handleClose = (filesV:any) => setShow(false);\r\n\r\n //*vista\r\n return (\r\n <>\r\n
    \r\n {/* se quitaron los padding porque tenia mucho espacio*/}\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n\r\n {openDivLoading ? : null}\r\n \r\n );\r\n}\r\n","/* Carga de archivo: elemento que carga un archivo a la vez */\r\n\r\n//*react- recursos\r\n\r\n//*componentes-utiles\r\nimport GeneraDropzoneUnArchivo from \"../../../componentes/generaDropZone/GeneraDropzoneUnArchivo\";\r\n\r\n//*clases\r\nimport \"../../../componentes/generaDropZone/dropzone.css\";\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { Button } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n//*datos\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\nimport filesStore from \"../../../stores/filesStore\";\r\n\r\n//*componente\r\nexport default function Ejemplo() {\r\n //*api store\r\n\r\n //*store's\r\n const { filesDropzone } = filesStore((state: any) => ({\r\n filesDropzone: state.filesDropzone,\r\n }));\r\n\r\n //*data\r\n\r\n //*constantes y variables\r\n const myLabels = [{ id: 0, desc: \"Cargar archivos\" }];\r\n\r\n //*usestate\r\n\r\n //*useEffect\r\n\r\n //*funciones\r\n const filesUpload = () => {\r\n const formData = new FormData();\r\n filesDropzone.map((e: any) => {\r\n formData.append(\"files\", e.file[0], e.file[0].name);\r\n });\r\n console.log(\"formData UnArchivo****\", formData.getAll(\"files\"));\r\n };\r\n\r\n //*vista\r\n return (\r\n
    \r\n

    Ejemplo de Dropzone:

    \r\n \r\n \r\n \r\n \r\n {myLabels[0].desc}\r\n \r\n \r\n \r\n \r\n
    \r\n Archivo1 :\r\n
    \r\n Archivo2 :\r\n
    \r\n \r\n
    \r\n Archivo3 xxxx:\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","/* Carga de archivo: elemento que carga un archivo a la vez */\r\n\r\n//*react- recursos\r\nimport React, { useState,useEffect } from \"react\";\r\nimport Swal from 'sweetalert2';\r\n\r\n//*componentes-utiles\r\nimport { A, SlidingPanel, Button } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n/* import CargaArchivo from \"../../../componentes/CargaArchivo\"; */\r\n\r\n//*clases \r\n\r\n//*datos\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\n\r\n//*vista\r\nexport default function EjemploContenido(){\r\n //*api store\r\n\r\n //*store's\r\n \r\n //*data \r\n\r\n //*constantes y variables\r\n\r\n //*usestate\r\n const [abreSP, setAbreSP] = useState(false);\r\n const [incompletaSP, setIncompletaSP] = useState(false); //usada para saber si esta completa la carga SP y activar botón aceptar\r\n\r\n //*useEffect\r\n\r\n //*funciones\r\n \r\n \r\n \r\n return (\r\n
    \r\n

    Ejemplo - contenido de SlidingPanel (ventana modal):

    \r\n \r\n
    \r\n

    coco

    \r\n\r\n\r\n
    \r\n
    \r\n );\r\n}\r\n","/* Carga de archivo: elemento que carga un archivo a la vez */\r\n\r\n//*react- recursos\r\nimport React, { useState,useEffect } from \"react\";\r\nimport Swal from 'sweetalert2';\r\n\r\n//*componentes-utiles\r\nimport { A, SlidingPanel, Button } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\n\r\n/* import CargaArchivo from \"../../../componentes/CargaArchivo\"; */\r\n\r\n//*clases \r\nimport \"./splidingPanel.css\"\r\n//*datos\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\nimport EjemploContenido from \"./EjemploContenido\"\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\n\r\n//*vista\r\nexport default function Ejemplo(){\r\n //*api store\r\n\r\n //*store's\r\n \r\n //*data \r\n\r\n //*constantes y variables\r\n\r\n //*usestate\r\n const [abreSP, setAbreSP] = useState(false);\r\n const [incompletaSP, setIncompletaSP] = useState(false); //usada para saber si esta completa la carga SP y activar botón aceptar\r\n\r\n //*useEffect\r\n\r\n //*funciones\r\n \r\n const botonAceptarSlidingPanel = () => {\r\n alert('botón aceptar');\r\n }\r\n\r\n const botonCierraSlidingPanel = (opcBtnAcepReg:any) => {\r\n if ((opcBtnAcepReg===\"reg\" || opcBtnAcepReg===\"clo\") && incompletaSP){\r\n Swal.fire({\r\n text: \"\",\r\n icon: 'question',\r\n showCancelButton: true,\r\n confirmButtonColor: '#3085d6',\r\n cancelButtonColor: '#d33',\r\n confirmButtonText: 'Si',\r\n cancelButtonText: 'No',\r\n width: '40%',\r\n html: '
    ' + 'Se detectaron cambios sin guardar. ¿Está seguro de salir de la edición de información?' + '
    '\r\n }).then((result) => {\r\n if (result.isConfirmed){ \r\n setAbreSP(!abreSP);\r\n }\r\n else\r\n return;\r\n })\r\n }\r\n else{\r\n setAbreSP(!abreSP);\r\n }\r\n }\r\n \r\n return (\r\n
    \r\n

    Ejemplo... de SlidingPanel (ventana modal):

    \r\n \r\n
    \r\n \r\n\r\n botonCierraSlidingPanel(\"reg\")} size={80} >\r\n \r\n {/* \r\n
    \r\n aquí va el contenido













    \r\n ...













    \r\n













    ...\r\n
    \r\n\r\n
    \r\n \r\n
    */}\r\n\r\n
    \r\n\r\n\r\n
    \r\n
    \r\n );\r\n}\r\n","import create from \"zustand\";\r\n\r\n//** Recurso Authenticate */\r\nconst rutaStore = create((set:any, get:any) => ({\r\n\r\n rutaArray:[],\r\n opcRuta:\"\",\r\n objError: { hasError: false, \r\n function:\"\",\r\n desError:\"\" }, \r\n\r\n generaObjError: async (h:any, f:any, d:any) => {\r\n //alert('rutaStore - generaObjError:' + h + f + d);\r\n //console.log('*generaObjError (entra): h: ', h , ' f: ', f , ' d: ', d );\r\n let paso = { hasError: h, function:f, desError:d}\r\n set( { objError: paso } );\r\n console.log('rutaStore - generaObjError (sale) - objError: ', get().objError);\r\n },\r\n \r\n setGeneraRuta: async (ruta:any) => {\r\n //alert('setGeneraRuta' + ruta);\r\n try{\r\n set({opcRuta:ruta});\r\n let ra= get().rutaArray;\r\n if (ra.length===0){\r\n ra.push({\"ruta\":ruta});\r\n }\r\n else{\r\n let idx=ra.findIndex((r:any)=>r.ruta===ruta);\r\n if (idx>-1){//ya hay una ruta existente\r\n ra.splice(idx+1);\r\n }\r\n else{//Aún no está la ruta\r\n ra.push({\"ruta\":ruta});\r\n }\r\n }\r\n set({rutaArray:ra}); \r\n \r\n } catch (error){\r\n \r\n } finally{\r\n set({ isLoading:false });\r\n };\r\n console.log('opcRuta: ', get().opcRuta);\r\n console.log('rutaArray: ', get().rutaArray);\r\n\r\n\r\n\r\n }, \r\n\r\n \r\n}));\r\n\r\nexport default rutaStore;\r\n\r\n","//*react- recursos\r\nimport Nav from \"react-bootstrap/Nav\";\r\nimport Navbar from \"react-bootstrap/Navbar\";\r\n\r\n//*interfaces\r\n/* interface PropsRuta {\r\n ruta: any; \r\n } */\r\n //store\r\n import rutaStore from \"../../stores/ruta.store\";\r\n //import archivaRuta from \"../../archivar/archivaRuta/ArchivaRuta\";\r\n\r\n//*componente\r\nexport default function GeneraRuta() {\r\n //*api store\r\n //*store's\r\n const { setGeneraRuta,rutaArray} =\r\n rutaStore((state:any) =>( {\r\n setGeneraRuta: state.setGeneraRuta,\r\n rutaArray:state.rutaArray,\r\n })); \r\n //*datos\r\n\r\n //*constantes y variables\r\n //*usestate\r\n\r\n //*useEffect\r\n \r\n //*funciones\r\n\r\n\r\n //*vista\r\n return (\r\n <>\r\n \r\n \r\n );\r\n}\r\n","/* Genera ruta de seguimiento */\r\n\r\n//*componentes-utiles\r\nimport React, { useState } from \"react\";\r\nimport Nav from \"react-bootstrap/Nav\";\r\nimport Navbar from \"react-bootstrap/Navbar\";\r\n//\r\nimport GeneraRuta from \"../../../componentes/generaRuta/GeneraRuta\";\r\n\r\n//extras para ejemplo\r\nimport GeneraDropzone from \"../../../componentes/generaDropZone/GeneraDropzone\";\r\nimport GeneraDropzoneUnArchivo from \"../../../componentes/generaDropZone/GeneraDropzoneUnArchivo\";\r\nimport GeneraMenu from \"../../../componentes/generaMenu/GeneraMenu\";\r\n\r\n\r\n//store\r\nimport rutaStore from \"../../../stores/ruta.store\";\r\n//import archivaRuta from \"../../../archivar/archivaRuta/ArchivaRuta\"\r\n\r\n//*datos\r\nimport menuArch from \"../../../datos/json/menu.json\";\r\n//*clases\r\n\r\n//funciones\r\n//*componente\r\nexport default function Ejemplo() {\r\n \r\n\r\n //store\r\n const { setGeneraRuta, opcRuta} =\r\n rutaStore((state:any) =>( {\r\n setGeneraRuta: state.setGeneraRuta,\r\n opcRuta: state.opcRuta,\r\n })); \r\n\r\n\r\n //variables\r\n let menu= menuArch;\r\n return (\r\n
    \r\n

    Ejemplo de generación de Ruta

    \r\n
    \r\n
    setGeneraRuta(\"GeneraDropzone\")}>GeneraDropzone
    \r\n
    setGeneraRuta(\"GeneraDropzoneUnArchivo\")}>GeneraDropzoneUnArchivo
    \r\n
    setGeneraRuta(\"GeneraMenu\")}>GeneraMenu
    \r\n
    \r\n
    \r\n Ruta:\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {opcRuta===\"GeneraDropzone\" ? : null} \r\n {opcRuta===\"GeneraDropzoneUnArchivo\" ? : null} \r\n {opcRuta===\"GeneraMenu\" ? : null} \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","/* Cuestionario estandar */\r\n\r\n//*react- recursos\r\nimport React, { useState } from \"react\";\r\nimport { Form, Formik, Field, ErrorMessage } from \"formik\";\r\nimport * as Yup from \"yup\";\r\n//import base64 from 'react-native-base64';\r\n\r\n//*componentes-utiles\r\n//import VentanaObjError from \"../../../componentes/VentanaObjError\";\r\n\r\n//*clases\r\nimport \"../componentes.css\"\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n//import { Checkbox } from '@reactjscomponentrepository/frontend-components/lib/components';\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\n\r\n//*componente\r\nexport default function Autenticar() {\r\n //*store's\r\n\r\n //*datos: mis etiquetas\r\n\r\n /* const misEtiquetas = [\r\n {id: 0, desc: \"Iniciar sesión\"},\r\n {id: 1, desc: \"Usuarios de prueba\"},\r\n {id: 2, desc: \"Usuario\"},\r\n {id: 3, desc: \"Contraseña\"},\r\n {id: 4, desc: \"
    Dominio de pruebas
    La información alojada en el dominio no es resguardada, ya que sus fines son exclusivamente para el entrenamiento y capacitación del uso de la plataforma AAIE_DGIAI
    \"}\r\n ]; */\r\n\r\n //*constantes y variables\r\n const nameOptions = [\r\n { text: \"Services\", value: \"Services\" },\r\n { text: \"Retail\", value: \"Retail\" },\r\n ];\r\n\r\n //*useState\r\n const [checkC, setCheckC] = useState(false);\r\n\r\n //*useEffect\r\n\r\n //*funciones\r\n /* onChange = (e:any, { name, value }) => {\r\n this.setState({ [name]: value });\r\n }; */\r\n\r\n //*vista\r\n return (\r\n
    \r\n

    Ejemplo de cuestionario*

    \r\n \r\n
    \r\n
    \r\n {\" \"}\r\n {/* homeFather */}\r\n
    \r\n {\" \"}\r\n {/* homeChild */}\r\n
    \r\n
    \r\n {\r\n let usuario = values.nombre;\r\n }}\r\n validationSchema={Yup.object({\r\n nombre: Yup.string().required(\"Campo requerido\").letras(),\r\n email: Yup.string().required(\"Campo requerido\").email(),\r\n numero: Yup.string().required(\"Campo requerido\").numeros(),\r\n texto: Yup.string()\r\n .required(\"Campo requerido\")\r\n .min(5, \"Deben ser mínimo 5 caracteres\")\r\n .max(15, \"Deben ser máximo 15 caracteres\"),\r\n industry: Yup.string()\r\n .required(\"Debe seleccionar una opción\")\r\n .select(),\r\n checkb1: Yup.bool().oneOf([true], \"Requerido\"),\r\n checkb2: Yup.bool().oneOf([true], \"Requerido\"),\r\n radiob: Yup.string().required(\"Debe seleccionar una opción\"),\r\n })}\r\n >\r\n {({ values, setFieldValue }) => (\r\n
    \r\n
    \r\n {/*Input text nombre*/}\r\n \r\n \r\n \r\n {(mensaje) => (\r\n \r\n
    \r\n
    {mensaje}
    \r\n
    \r\n
    \r\n )}\r\n
    \r\n {/*Input text email*/}\r\n \r\n \r\n \r\n {(mensaje) => (\r\n \r\n
    \r\n
    {mensaje}
    \r\n
    \r\n
    \r\n )}\r\n
    \r\n {/*Input text numeros*/}\r\n \r\n \r\n \r\n {(mensaje) => (\r\n \r\n
    \r\n
    {mensaje}
    \r\n
    \r\n
    \r\n )}\r\n
    \r\n {/*textarea*/}\r\n \r\n \r\n \r\n {(mensaje) => (\r\n \r\n
    \r\n
    {mensaje}
    \r\n
    \r\n
    \r\n )}\r\n
    \r\n
    \r\n
    \r\n {/* Select */}\r\n \r\n \r\n setFieldValue(\"industry\", e.target.value)\r\n }\r\n >\r\n
    \r\n
    \r\n )}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Stepper from \"@mui/material/Stepper\";\r\nimport Step from \"@mui/material/Step\";\r\nimport StepLabel from \"@mui/material/StepLabel\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\n//import Stepper1 from \"./Stepper1\";\r\n\r\n//npm i @mui/material\r\n//npm install @mui/material @emotion/react @emotion/styled\r\nconst steps = [\"Captura\", \"Verificación\", \"Confirmación\", \"otro\", \"y otro más\"];\r\n\r\n//export default function GeneraRuta() {\r\nexport default function HorizontalLinearStepper() {\r\n const [activeStep, setActiveStep] = React.useState(0);\r\n const [skipped, setSkipped] = React.useState(new Set());\r\n\r\n const isStepOptional = (step: number) => {\r\n return step === 2; //paso opcional\r\n };\r\n\r\n const isStepSkipped = (step: number) => {\r\n return skipped.has(step);\r\n };\r\n\r\n const handleNext = () => {\r\n let newSkipped = skipped;\r\n if (isStepSkipped(activeStep)) {\r\n newSkipped = new Set(newSkipped.values());\r\n newSkipped.delete(activeStep);\r\n }\r\n\r\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\r\n setSkipped(newSkipped);\r\n };\r\n\r\n const handleBack = () => {\r\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\r\n };\r\n\r\n const handleSkip = () => {\r\n if (!isStepOptional(activeStep)) {\r\n // You probably want to guard against something like this,\r\n // it should never occur unless someone's actively trying to break something.\r\n throw new Error(\"You can't skip a step that isn't optional.\");\r\n }\r\n\r\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\r\n setSkipped((prevSkipped) => {\r\n const newSkipped = new Set(prevSkipped.values());\r\n newSkipped.add(activeStep);\r\n return newSkipped;\r\n });\r\n };\r\n\r\n const handleReset = () => {\r\n setActiveStep(0);\r\n };\r\n\r\n return (\r\n <>\r\n Stepper\r\n \r\n \r\n {steps.map((label, index) => {\r\n const stepProps: { completed?: boolean } = {};\r\n const labelProps: {\r\n optional?: React.ReactNode;\r\n } = {};\r\n if (isStepOptional(index)) {\r\n labelProps.optional = (\r\n Opcional\r\n );\r\n }\r\n if (isStepSkipped(index)) {\r\n stepProps.completed = false;\r\n }\r\n return (\r\n \r\n {label}\r\n \r\n );\r\n })}\r\n \r\n {activeStep === steps.length ? (\r\n \r\n \r\n {/* All steps completed - you're finished
    */}\r\n Todos los paso completos - Terminado\r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n ) : (\r\n \r\n \r\n Paso {activeStep + 1} {steps[activeStep]}\r\n \r\n \r\n \r\n Atras\r\n \r\n \r\n {isStepOptional(activeStep) && (\r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n
    \r\n \r\n );\r\n}\r\n","import React, { useState } from \"react\";\r\n//import ReactDOM from \"react-dom\";\r\nimport Stepper from \"@material-ui/core/Stepper\";\r\nimport Step from \"@material-ui/core/Step\";\r\nimport StepLabel from \"@material-ui/core/StepLabel\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\n//npm install @material-ui/core\r\nconst steps = [\r\n \"Proyecto de Investigación\",\r\n \"Requerimientos de microdatos\",\r\n \"Jefe, supervisores y otros participantes\",\r\n];\r\n\r\nexport default function Stepper1() {\r\n const [activeStep, setActiveStep] = useState(0);\r\n\r\n const handleNext = () => {\r\n if (activeStep < 2) setActiveStep((currenStep) => currenStep + 1); //aumentar el 3 dependiendo del no. de elemntos\r\n };\r\n\r\n const handleBack = () => {\r\n setActiveStep((currenStep) => currenStep - 1);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n {steps.map((label, index) => {\r\n return (\r\n \r\n {label}\r\n \r\n );\r\n })}\r\n \r\n {activeStep !== steps.length - 1 && (\r\n \r\n \r\n \r\n )}\r\n \r\n

    Paso {activeStep + 1}

    \r\n
    \r\n );\r\n}\r\n","import * as React from \"react\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Stepper from \"@mui/material/Stepper\";\r\nimport Step from \"@mui/material/Step\";\r\nimport StepButton from \"@mui/material/StepButton\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nconst steps = [\r\n \"Proyecto de investigación\",\r\n \"Requerimientos de microdatos\",\r\n \"Jefe, supervisores y otros participantes\",\r\n];\r\n\r\nexport default function Stepper2() {\r\n const [activeStep, setActiveStep] = React.useState(0);\r\n const [completed, setCompleted] = React.useState<{\r\n [k: number]: boolean;\r\n }>({});\r\n\r\n const totalSteps = () => {\r\n return steps.length;\r\n };\r\n\r\n const completedSteps = () => {\r\n return Object.keys(completed).length;\r\n };\r\n\r\n const isLastStep = () => {\r\n return activeStep === totalSteps() - 1;\r\n };\r\n\r\n const allStepsCompleted = () => {\r\n return completedSteps() === totalSteps();\r\n };\r\n\r\n const handleNext = () => {\r\n const newActiveStep =\r\n isLastStep() && !allStepsCompleted()\r\n ? // It's the last step, but not all steps have been completed,\r\n // find the first step that has been completed\r\n steps.findIndex((step, i) => !(i in completed))\r\n : activeStep + 1;\r\n setActiveStep(newActiveStep);\r\n };\r\n\r\n const handleBack = () => {\r\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\r\n };\r\n\r\n const handleStep = (step: number) => () => {\r\n setActiveStep(step);\r\n };\r\n\r\n const handleComplete = () => {\r\n const newCompleted = completed;\r\n newCompleted[activeStep] = true;\r\n setCompleted(newCompleted);\r\n handleNext();\r\n };\r\n\r\n const handleReset = () => {\r\n setActiveStep(0);\r\n setCompleted({});\r\n };\r\n\r\n return (\r\n \r\n \r\n {steps.map((label, index) => (\r\n \r\n \r\n {label}\r\n \r\n \r\n ))}\r\n \r\n
    \r\n {allStepsCompleted() ? (\r\n \r\n \r\n All steps completed - you're finished\r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n Paso {activeStep + 1} {steps[activeStep]}\r\n \r\n \r\n \r\n Regresar\r\n \r\n \r\n \r\n {activeStep !== steps.length &&\r\n (completed[activeStep] ? (\r\n \r\n Step {activeStep + 1} already completed\r\n \r\n ) : (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n
    \r\n
    \r\n );\r\n}\r\n","import * as React from \"react\";\r\n//import ReactDOM from \"react-dom/client\";\r\n//import { StyledEngineProvider } from \"@mui/material/styles\";\r\nimport Demo from \"../../../componentes/generaStepper/HorizontalLinearStepper\";\r\n\r\nimport Stepper1 from \"../../../componentes/generaStepper/Stepper1\";\r\nimport Stepper2 from \"../../../componentes/generaStepper/Stepper2\";\r\n\r\n//npm install react react-dom\r\n//npm install @emotion/react\r\n//npm install @emotion/styled\r\n//npm i styled-components\r\n//npm i @mui/styled-engine\r\n//npm i @emotion/react @emotion/styled\r\n//npm install @emotion/react --save\r\nexport default function Stepper() {\r\n return (\r\n
    \r\n \r\n \r\n {/* */}\r\n

    Stepper 1

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    Stepper 2

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n

    Stepper 3

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n ;\r\n \r\n
    \r\n );\r\n}\r\n","//*react- recursos\r\n\r\nimport { useEffect, useState } from \"react\";\r\n\r\n//*archivos\r\n\r\n//*interfaces\r\n interface PropsAPI {\r\n myAPI: any;\r\n }\r\n \r\n//*componente\r\n export default function CargaAPI(props: PropsAPI) {\r\n const mensaje = document.getElementById('verMsj');\r\n\r\n //**rutina directa \r\n /*\r\n async function obtenerData(){\r\n await fetch( props.myAPI )\r\n .then (response => response.json())\r\n .then (json => console.log(json))\r\n .catch (error => console.log('Solicitud fallida', error))\r\n }\r\n\r\n obtenerData(); */\r\n\r\n //**rutina con useEffect y useState\r\n const [data, setData]= useState([]);\r\n const [msj, setMsj]= useState('xx');\r\n //const [mensaje, setMensaje]= useState(document.getElementById('verMsj'));\r\n useEffect(()=> {\r\n const obtenerData = async () => {\r\n const response = await fetch(props.myAPI);\r\n const data = await response.json();\r\n //let m = mensaje?.DOCUMENT_NODE.\r\n console.log('mensaje:::::', mensaje);\r\n //console.log('m:', m)\r\n\r\n setData(data);\r\n if (data.length == 0)\r\n setMsj(\"base de datos cargada con \" + data.lenght + \"elementos\")\r\n //console.log('data:' , data);\r\n else \r\n setMsj(\"base de datos vacía \")\r\n //console.log('Arreglo vacío'); \r\n //mensaje?.innerText==msj; \r\n \r\n };\r\n \r\n obtenerData().catch(error => console.log('Solicitud fallida', error));\r\n \r\n }, [])\r\n \r\n //mensaje?.innerText=msj;\r\n //*vista\r\n return (\r\n < >\r\n \r\n {/*

    -------

    */}\r\n \r\n )\r\n }\r\n ","\r\n/* Carga API (enviada por parámetro) por medio de fetch */\r\n\r\n//*react- recursos\r\n//fetch no ocupa carga \r\n\r\n//*componentes-utiles\r\nimport CargaAPI from \"../../../api/cargaAPI/CargaAPI\";\r\n\r\n//*clases\r\nimport Container from \"react-bootstrap/Container\";\r\n\r\n//*datos\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n\r\nconst myUrl= \"https://api.github.com/repos/hadley/ggplot2/commits*\" // por ejemplo\r\n\r\n//*store's\r\n\r\n//*archivos\r\n\r\n//*vista\r\nexport default function Ejemplo(){\r\n \r\n return (\r\n
    \r\n

    Ejemplo de carga de API fija por medio de Fetch:

    \r\n

    url ejemplo: {myUrl}

    \r\n \r\n
    \r\n\r\n

    -------

    \r\n
    \r\n );\r\n}\r\n","//*react- recursos\r\n\r\n//css\r\nimport \"./style.css\";\r\n\r\n//*interfaces\r\ninterface PropsTC {\r\n estado: any;\r\n}\r\n\r\n//*componente\r\nexport default function GeneraSemaforo(props: PropsTC) {\r\n //*constantes y variables\r\n let estado = props.estado;\r\n\r\n //*vista\r\n return (\r\n <>\r\n {estado === \"r\" ? (\r\n <>\r\n
    \r\n

    Rojo

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ) : (\r\n \"\"\r\n )}\r\n\r\n {estado === \"v\" ? (\r\n <>\r\n
    \r\n

    Verde

    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ) : (\r\n \"\"\r\n )}\r\n\r\n {estado === \"a\" ? (\r\n <>\r\n
    \r\n

    Amarillo

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n );\r\n}\r\n","//*componentes-utiles\r\nimport GeneraSemaforo from \"../../../componentes/generaSemaforo/GeneraSemaforo\";\r\n\r\n//*clases\r\n//import \"../../../componentes/generaSemaforo/style.css\";\r\n\r\n//*componente\r\nexport default function Ejemplo() {\r\n //let estado = \"rojo\";\r\n return (\r\n
    \r\n

    Ejemplo de generación de un Semáforo

    \r\n \r\n \r\n \r\n
    \r\n );\r\n}\r\n","\r\n function validarEmail2(valor: any) {\r\n //console.log(\"valor....\", valor);\r\n if (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(valor)) {\r\n //alert(\"La dirección de email \" + valor + \" es correcta.\");\r\n console.log(\"La dirección de email \", valor, \" es correcta.\");\r\n return true;\r\n } else {\r\n //alert(\"La dirección de email \" + valor + \" es incorrecta.\");\r\n console.log(\"La dirección de email \", valor, \" es incorrecta.\");\r\n return false;\r\n }\r\n //console.log(validarEmail);\r\n }\r\n \r\n \r\n \r\n export default validarEmail2;","\r\n\r\n\r\nfunction EspacioBlanco(a: any) {\r\n //console.log(\"a...trimmer.\", a);\r\n let trimmedArr = a.map((val: any) => {\r\n return val.trim();\r\n });\r\n\r\n console.log(\"trimmedArr.....\", trimmedArr);\r\n return trimmedArr;\r\n }\r\n export default EspacioBlanco;","//*react- recursos\r\nimport React, { useState, useRef } from \"react\";\r\nimport JoditEditor from \"jodit-react\";\r\n\r\n//*install\r\n//npm install --save sweetalert2\r\n//npm i jodit-react\r\n\r\n//*css\r\nimport \"./style.css\";\r\nimport \"jodit/build/jodit.min.css\";\r\n\r\n/* eslint-disable @typescript-eslint/no-unused-expressions */\r\n\r\nimport validarEmail2 from \"./validaEmails\"; //valida correo electonico\r\nimport espaciobco from \"./validaEspBlanco\"; //quita los espacios en blanco para validar\r\n\r\nimport swal2 from \"sweetalert2\"; //npm install --save sweetalert2\r\n\r\nconst GeneraCorreo1 = () => {\r\n const [value, setValue] = React.useState();\r\n //objeto\r\n const [datos, setDatos] = React.useState({\r\n para: \"\",\r\n cc: \"\",\r\n asunto: \"\",\r\n });\r\n let countpp = 0;\r\n let countcc = 0;\r\n let amensajepp: any = [];\r\n let mensajepp;\r\n let amensajecc: any = [];\r\n let mensajecc;\r\n //datos a enviar del mensaje\r\n const handleInputChange = (event: any) => {\r\n /* console.log(\"name:\", event.target.name);\r\n console.log(\"value:\", event.target.value); */\r\n setDatos({\r\n ...datos,\r\n [event.target.name]: event.target.value,\r\n });\r\n };\r\n //validación y datos a enviar\r\n const enviarDatos = (event: any) => {\r\n event.preventDefault();\r\n let datospp = datos.para;\r\n let datoscc = datos.cc;\r\n mensajepp = datospp.trim();\r\n mensajecc = datoscc.trim();\r\n amensajepp = mensajepp.split(\";\");\r\n amensajecc = mensajecc.split(\";\");\r\n\r\n countpp = amensajepp.length;\r\n countcc = amensajecc.length;\r\n\r\n //valida correos unicos\r\n let trimmed = espaciobco(amensajepp);\r\n let trimmed1 = espaciobco(amensajecc);\r\n\r\n //correos unicos\r\n const amensajepp1 = trimmed.filter((valor: any, indice: any) => {\r\n return trimmed.indexOf(valor) === indice;\r\n });\r\n const amensajecc1 = trimmed1.filter((valor: any, indice: any) => {\r\n return trimmed1.indexOf(valor) === indice;\r\n });\r\n\r\n // console.log(\"unicos...pp.\", amensajepp1); // [1, 2, 3, 4, 5]\r\n // console.log(\"unicos...cc.\", amensajecc1); // [1, 2, 3, 4, 5]\r\n\r\n let result; //devuelve true o false de la validacion del correo\r\n //obtiene td para pintar el error\r\n const ppPara = document.getElementById(\r\n \"ppError\"\r\n ) as HTMLButtonElement | null;\r\n const ccCC = document.getElementById(\"ccError\") as HTMLButtonElement | null;\r\n\r\n //rutina para PP\r\n for (let i = 0; i < countpp; i++) {\r\n let valida = amensajepp[i].trim();\r\n if (valida !== \"\") {\r\n result = validarEmail2(valida);\r\n } else {\r\n //si hay campo vacio al final, quita el ultimo\r\n amensajepp.splice(amensajepp.length - 1);\r\n }\r\n if (!result) {\r\n ppPara != null ? (ppPara.style.display = \"contents\") : \"\";\r\n //si hay correos incorrectos\r\n return; //con el primero que no sea valido pinta el rojo\r\n } else {\r\n ppPara != null ? (ppPara.style.display = \"none\") : \"\";\r\n }\r\n }\r\n //rutina para CC\r\n for (let i = 0; i < countcc; i++) {\r\n let valida = amensajecc[i].trim();\r\n if (valida !== \"\") {\r\n result = validarEmail2(valida);\r\n } else {\r\n amensajecc.splice(amensajecc.length - 1);\r\n }\r\n if (!result) {\r\n ccCC != null ? (ccCC.style.display = \"contents\") : \"\";\r\n return; //con el primero que no sea valido pinta el rojo\r\n } else {\r\n ccCC != null ? (ccCC.style.display = \"none\") : \"\";\r\n }\r\n }\r\n console.log(\"result.....\", result);\r\n\r\n //si las validaciones de correo estan bien\r\n if (result) {\r\n ccCC != null ? (ccCC.style.display = \"none\") : \"\";\r\n ppPara != null ? (ppPara.style.display = \"none\") : \"\";\r\n if (datos.asunto === \"\") {\r\n //alert\r\n swal2\r\n .fire({\r\n title: \"Asunto Vacío. Desea continuar?\",\r\n showCancelButton: true,\r\n confirmButtonText: \"Aceptar\",\r\n denyButtonText: `Cancelar`,\r\n })\r\n .then((result) => {\r\n /* Read more about isConfirmed, isDenied below */\r\n if (result.isConfirmed) {\r\n // confirm button pressed\r\n if (content === \"\") {\r\n swal2.fire(\r\n \"El Mensaje no puede ir vacío...Verifique!\",\r\n \"\",\r\n \"error\"\r\n );\r\n } else {\r\n const DatosEnviar = {\r\n para: amensajepp1.concat(), //UNICOS\r\n cc: amensajecc1.concat(), //UNICOS\r\n asunto: datos.asunto,\r\n mensaje: content,\r\n };\r\n console.log(\"DatosEnviar....\", DatosEnviar);\r\n swal2.fire(\"datos a enviar\" + JSON.stringify(DatosEnviar));\r\n }\r\n } else if (result.isDismissed) {\r\n // deny button pressed\r\n console.log(\"deny\");\r\n }\r\n });\r\n } else {\r\n if (content === \"\") {\r\n swal2.fire(\"El Mensaje no puede ir vacío...Verifique!\", \"\", \"error\");\r\n } else {\r\n //console.log(\"enviando datos...\" + datos.para + \" \" + datos.cc);\r\n const DatosEnviar = {\r\n para: amensajepp1.concat(), //UNICOS\r\n cc: amensajecc1.concat(), //UNICOS\r\n asunto: datos.asunto,\r\n mensaje: content,\r\n };\r\n console.log(\"DatosEnviar....\", DatosEnviar);\r\n swal2.fire(\"datos a enviar\" + JSON.stringify(DatosEnviar));\r\n }\r\n }\r\n }\r\n };\r\n\r\n // const editor = useRef(null);\r\n const [content, setContent] = useState(\"\");\r\n\r\n const config = {\r\n //readonly: false, // all options from https://xdsoft.net/jodit/doc/\r\n placeholder: \"Mensaje ...\",\r\n link: {\r\n //quita opciones del boton link\r\n modeClassName: false,\r\n openInNewTabCheckbox: false,\r\n noFollowCheckbox: false,\r\n },\r\n buttons: [\r\n \"bold\",\r\n \"italic\",\r\n \"underline\",\r\n \"strikethrough\",\r\n \"font\",\r\n \"|\",\r\n \"ul\",\r\n \"ol\",\r\n \"|\",\r\n \"center\",\r\n \"left\",\r\n \"right\",\r\n \"justify\",\r\n \"|\",\r\n \"link\",\r\n \"image\",\r\n ],\r\n activeButtonsInReadOnly: [\"source\", \"fullsize\", \"print\", \"about\", \"dots\"],\r\n //toolbarButtonSize: \"middle\",\r\n theme: \"default\",\r\n saveModeInCookie: false,\r\n //direction: \"left\",\r\n textIcons: false,\r\n tabIndex: -1,\r\n toolbar: true,\r\n showXPathInStatusbar: false,\r\n showCharsCounter: false,\r\n showWordsCounter: false,\r\n toolbarAdaptive: false,\r\n language: \"es\",\r\n debugLanguage: false,\r\n };\r\n\r\n //const { contents, getValue } = props;\r\n const handleChange = (newContent: string) => {\r\n setContent(newContent);\r\n };\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n Para\r\n \r\n
    \r\n Error en correo, separar con ;\r\n
    CC\r\n \r\n
    \r\n Error en correo, separar con ;\r\n
    Asunto\r\n \r\n
    \r\n
    \r\n

    \r\n
    \r\n {React.useMemo(() => {\r\n return (\r\n \r\n );\r\n }, [])}\r\n
    {\" \"}\r\n
    \r\n
    \r\n
    \r\n Datos_Para:{datos.para}\r\n
    \r\n Datos_cc:{datos.cc}\r\n
    \r\n Asunto:{datos.asunto}\r\n Contenido{content}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default GeneraCorreo1;\r\n","/* Genera 3 tipos de menus: Se recibe un arreglo con el nombre de los menus */\r\n\r\n//*componentes-utiles\r\nimport GeneraCorreo from \"../../../componentes/generaCorreo/GeneraCorreo1\";\r\n\r\n//*datos\r\nimport menuArch from \"../../../datos/json/menu.json\";\r\n\r\n//*clases\r\n\r\n//*componente\r\nexport default function Ejemplo() {\r\n let menu = menuArch;\r\n return (\r\n <>\r\n
    \r\n

    Ejemplo de generación de Correo

    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n","export default __webpack_public_path__ + \"static/media/exportar.9b5b4dc6.png\";","import React, { useRef } from \"react\";\r\nimport { useDownloadExcel } from \"react-export-table-to-excel\";\r\nimport \"./style.css\";\r\nimport img1 from \"./bullet1.png\";\r\nimport img2 from \"./bullet2.png\";\r\nimport exp from \"./exportar.png\";\r\nimport acp from \"./aceptar.png\";\r\nimport { Button } from \"react-bootstrap\";\r\n\r\n//*interfaces\r\ninterface PropsTabla {\r\n tabla: any;\r\n nomA: any;\r\n nomH: any;\r\n}\r\nexport default function GeneraExcel(props: PropsTabla) {\r\n const tablaHtml = props.tabla;\r\n const tableRef = useRef(null);\r\n\r\n const { onDownload } = useDownloadExcel({\r\n currentTableRef: tableRef.current,\r\n filename: props.nomA,\r\n sheet: props.nomH,\r\n });\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n {props.nomH}\r\n {tablaHtml}\r\n
    \r\n
    \r\n );\r\n}\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAE/SURBVDhP1ZI/T8JQFEcPEFpLELFhhsTogpODiR/CxMHIYLq7ddGJz+DExObObNzciQ5MutBoIGEjhWix8k9s4VIraiJunuXe3309yet7L9JqtSb8gajUpflH4reHo7brJNo2xBTe1vP0MiojWZvzSYw91dAvi8S7jkyE9AnuvkEnJZlmaKv9O/SK+VXy6V6gVUqk+5I9AjF5WyI+kBBGOcA1rnjJXqNVGzIMxAYr9XuvKrM4x5cKZwysIgnLJvJQY1WWRHSIuF7ZLNE2zhn5fiCdsla9mX6F2yQ26+ZikonmFctEt7LYh2V6i5KPlmUsrYg5XrfyXh0QrRpkHnXGi5LHZGOHZ+mDw3F2TYbTX/TlAqkFCeUIdy8nISSibmMflxmmkzII4d9jwaSrSvb4+eV0Zvf5q5ezDB9bXQp4B1+Td3KoSvHtAAAAAElFTkSuQmCC\"","export default __webpack_public_path__ + \"static/media/aceptar.6005bf7c.png\";","/* eslint-disable react/jsx-no-duplicate-props */\r\n/* Genera la exportación de una tabla html en formato excel */\r\n\r\n//*componentes-utiles\r\n\r\nimport React from \"react\";\r\n\r\nimport GeneraExporacionExcel from \"../../../../src/componentes/generaExportacionExcel/GeneraExporacionExcel\";\r\n\r\nimport img1 from \"../../../componentes/generaExportacionExcel/bullet1.png\";\r\nimport img2 from \"../../../componentes/generaExportacionExcel/bullet2.png\";\r\nimport acp from \"../../../componentes/generaExportacionExcel/aceptar.png\";\r\n\r\nexport default function cargaExcel() {\r\n let tabla = (\r\n \r\n \r\n \r\n \r\n Propuesta(s):\r\n \r\n \r\n \r\n Evidencias de la fase de diseño que serán modificadas por el\r\n cambio:\r\n \r\n \r\n \r\n \r\n Revisión de necesidades:
    \r\n (Art. 10 y 21)\r\n
    \r\n \r\n \r\n \r\n Relación de cambios:
    \r\n (Art. 12 y 21)\r\n
    \r\n \r\n \r\n \r\n Plan de acción:
    \r\n (Art. 15)\r\n
    \r\n Informe de instrumentación:\r\n
    \r\n (Art.24)\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n Evidencias:\r\n
    \r\n (Art. 9 y 19)\r\n
    \r\n \r\n Características:
    \r\n (Art. 12 y 21)\r\n
    \r\n
    \r\n \r\n Pruebas a realizar:
    \r\n (Art. 13 y 22)\r\n
    \r\n
    \r\n \r\n Reportes de pruebas:
    \r\n (Art. 14 y 23)\r\n
    \r\n
    \r\n \r\n \"txt1\"  No prevista \r\n \r\n \r\n \"logo\"\r\n Concluido\r\n \r\n
    \r\n
    \r\n 001147\r\n
    \r\n
    \r\n \"\"\r\n   Diseño conceptual y del producto de información - Art. 15\r\n Fracc. I\r\n \r\n
    \r\n \"\"\r\n   Esquema conceptual, es decir, asociación y jerarquización\r\n de temas, categorías, variables y clasificaciones\r\n
    \r\n
    \r\n \"\"\r\n   Diccionario de datos\r\n
    \r\n
    \r\n
    \r\n \"\"\r\n   Prueba de escritorio\r\n
    \r\n
    \r\n
    \r\n \r\n Reporte(s):\r\n
    \r\n
    \r\n \r\n \"\"\r\n  \r\n \r\n CPV2020 ...\r\n \r\n \r\n
    \r\n
    \r\n \r\n Justificación(es):\r\n
    \r\n
    \r\n \r\n \"\"\r\n  \r\n \r\n Justific...\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \"\"\r\n  \r\n Revision...\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \"\"\r\n  \r\n \r\n CPV2020 ...\r\n \r\n \r\n
    \r\n
    \r\n \r\n \"\"\r\n  \r\n CPV2020 ...\r\n \r\n
    \r\n \"\"\r\n   Diseño de los sistemas de producción y los flujos de trabajo\r\n - Art. 15 Fracc. II\r\n \r\n
    \r\n \"\"\r\n   Flujos de trabajo en tareas secuenciales\r\n
    \r\n
    \r\n \"\"\r\n   Diseño de los procesos que se llevarán a cabo en producción\r\n
    \r\n
    \r\n
    \r\n \"\"\r\n   Prueba de escritorio\r\n
    \r\n
    \r\n \"\"\r\n   Diseño de la captación - Art. 15 Fracc. III\r\n \r\n
    \r\n \"\"\r\n   Instrumentos de captación, canales y protocolos de\r\n intercambio; investigaciones realizadas en el diseño o adecuación\r\n de los instrumentos; pruebas de concepto y sus resultados y\r\n referencias a documentos de soporte\r\n
    \r\n
    \r\n \"\"\r\n   Criterios de captación y validación\r\n
    \r\n
    \r\n \"\"\r\n   Manuales operativos\r\n
    \r\n
    \r\n \"\"\r\n   Estrategia operativa\r\n
    \r\n
    \r\n \"\"\r\n   Diseño de la captura de datos cuando aplique\r\n
    \r\n
    \r\n
    \r\n \"\"\r\n   Prueba de escritorio\r\n
    \r\n
    \r\n \"\"\r\n   Diseño del procesamiento y análisis de la producción - Art.\r\n 15 Fracc. V\r\n \r\n
    \r\n \"\"\r\n   Integración de datos\r\n
    \r\n
    \r\n \"\"\r\n   Codificación\r\n
    \r\n
    \r\n \"\"\r\n   Validación\r\n
    \r\n
    \r\n \"\"\r\n   Imputación\r\n
    \r\n
    \r\n \"\"\r\n   Creación de nuevas variables o unidades (cuando aplique)\r\n
    \r\n
    \r\n
    \r\n \"\"  Prueba de escritorio\r\n
    \r\n
    \r\n );\r\n let nomArchivo = \"Es_CPV\";\r\n let nomHoja = \"CPV_Cada10años_2020\";\r\n\r\n //Se le pasan 3 parametros\r\n //1.- la tabla html\r\n //2.- el nombre del archivo\r\n //3.- el nombre de la hoja de excel\r\n return (\r\n <>\r\n
    \r\n \r\n

    Genera Exportación Excel

    \r\n\r\n \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAE6SURBVDhPY3z69Ol/BjIAE5QmGYwEjZBQ/XSDYefDkwyP/kFFsQAhNnMGR3UNBiGwVY8gGq+dT2CY8CeKIUVEkoENrAwN/HvOsPPZMgYe+QUM2XIggUcIp7L9OcIw7cVlBgZhXQYDRQRWYb3BsOjZEYaXaJ6CczWlmxgWaOoyXL9aydB5/RHDly+PGHaermSoe63BUGPZxJDCBVXI8AZMopojoMsQaVnLEMmwgaHi4gYGBtlahj5DXQYhFqg8GEA0wv24XxjmfkIApPEbadHx4vZqhiPvRMBsuCNefrzMcOE+lAMFQqK6DDwvpzNM/eLIEMm1i6HlBQNDvCBEDmyjlnITQxAPmI8BhKS9GQy+9TKkAzWlaOcxOEIshCYAQuDHc4ZHvyQZ5PigfCAgzo8cqJpAgKTAQQAGBgBFsWSSuRhxNgAAAABJRU5ErkJggg==\"","//*react- recursos\r\nimport React, { useState, useCallback } from \"react\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport { toast } from \"react-toastify\";\r\nimport Swal from \"sweetalert2\"; //caja de información centra\r\n//import shallow from 'zustand/shallow';\r\n\r\n//*componentes-utiles\r\nimport DivLoading from \"../DivLoading\";\r\n\r\n//*css\r\n//import \"./dropzone.css\"; //se carga en la cita (ejemplo.tsx)\r\nimport { Col, Row } from \"react-bootstrap\";\r\nimport { Button } from \"@reactjscomponentrepository/frontend-components/lib/components\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"; //'libreria' que cita el bote de basura\r\nimport { faTrashAlt } from \"@fortawesome/free-solid-svg-icons\"; //icono bote de basura\r\n\r\nimport \"./dropzoneOriginal.css\";\r\n\r\n//*interfaces //este elemento se podría utilizar cuando se ocupe regresar al componente que tiene el dropzone con la información que ya tenia, para ello se debe llenar este elemento antes salir.\r\ninterface PropsDrop {\r\n archDrop?: any;\r\n}\r\n\r\n//*componente\r\nexport default function GeneraDropzone() {\r\n //*api store\r\n\r\n //data: mis etiquetas\r\n const myLabels = [\r\n { id: 0, desc: \"Periodo a actualizar:\" },\r\n { id: 1, desc: \"Archivos incorporados:\" },\r\n { id: 2, desc: \"(esperados)\" },\r\n { id: 3, desc: \"Cargar archivos\" },\r\n { id: 4, desc: \"Remover todos los archivos\" },\r\n { id: 5, desc: \"Borrar archivo\" },\r\n {\r\n id: 6,\r\n desc: 'Incorpore en este espacio los archivos del tema que desea actualizar, para ello siga la indicación mencionada abajo y posteriormente de clic en el botón \"Cargar archivos\".',\r\n },\r\n {\r\n id: 7,\r\n desc: \"Arrastre y suelte los archivos aquí, o haga clic para seleccionar archivos\",\r\n },\r\n { id: 8, desc: \"Resultado de la validación:\" },\r\n { id: 9, desc: \"Cerrar\" },\r\n { id: 10, desc: \"¿Desea remover TODOS los archivos?\" },\r\n { id: 11, desc: \"¿Desea remover el archivo seleccionado?\" },\r\n {\r\n id: 12,\r\n desc: \"Para continuar con el siguiente paso, el sistema validará los archivos cargados para actualizar el tema.\",\r\n },\r\n {\r\n id: 13,\r\n desc: \"Todos los archivos son válidos para realizar la actualización del tema.\",\r\n },\r\n {\r\n id: 14,\r\n desc: 'Para continuar de clic en el botón \"Procesar archivos\"',\r\n },\r\n { id: 15, desc: \"\" },\r\n { id: 16, desc: \" archivo(s) cargado(s) anteriormente\" },\r\n {\r\n id: 17,\r\n desc: \" archivo(s) no es (son) válido(s) para realizar la actualización del tema. \",\r\n },\r\n {\r\n id: 18,\r\n desc: \"El sistema lo(s) eliminará del espacio para cargar los archivos.\",\r\n },\r\n { id: 19, desc: \"¿Desea continuar con los archivos válidos?\" },\r\n //Usted tiene [##] archivo (s) que no son válidos para actualizar el tema [cve tema], por lo que se eliminarán del espacio para subir o cargar archivos\r\n ];\r\n\r\n //*constantes y variables\r\n let filesIn = [] as any; //este elemento se uso para cargar archivos inválidos (puede omitirse)\r\n let myFileCopia = [] as any; //copia de myFile (que es donde se guarda la lista de archivos cargados por el usuario) usada para hacer recorridos y comparaciones sin afectar el arreglo myFile\r\n\r\n //*useState\r\n //const [filesTotal, setFilesTotal] = useState(0);\r\n const [myFiles, setMyFiles] = useState([] as any); //guarda el listado de elementos (archivos) cargados por el usuario\r\n const [filesInvalid, setFilesInvalid] = useState([] as any); //este elemento se uso para cargar archivos inválidos\r\n //const [show, setShow] = useState(false);\r\n const [openDivLoading, setOpenDivLoading] = useState(false);\r\n\r\n //*funciones:\r\n\r\n //--Componente Dropzone\r\n function MyDropzone() {\r\n //*useCallback //ya traemos los archivos (acceptedFiles acumula lo del cuadro de dialogo)\r\n const onDrop = useCallback(\r\n (acceptedFiles) => {\r\n //let listaFilesDupli=\"\";\r\n let acceptedFilesTemp: any = [];\r\n let filesCarg = 0; //contador para saber si tenemos archivos que ya se cargaron y en su caso mostrar el toast\r\n acceptedFilesTemp = [...acceptedFilesTemp, ...acceptedFiles]; //se uso para mostrar el listado que se mostraba en error con el nombre de los archivos duplicados, pero esta inhibida la rutina ya que solo se muestra el total de ellos\r\n\r\n if (myFiles.length != 0) {\r\n /* el for es decrementado para que no se piedan los indices y pueda hacer bien el borrado */\r\n for (let i = acceptedFilesTemp.length - 1; i >= 0; i--) {\r\n if (\r\n myFiles.findIndex(\r\n (mf: any) =>\r\n mf.name.toLowerCase() ===\r\n acceptedFilesTemp[i].name.toLowerCase()\r\n ) >= 0\r\n ) {\r\n filesCarg = filesCarg + 1;\r\n\r\n /* generaba un listado con los archivos duplicados */\r\n /* i===acceptedFilesTemp.length-1? listaFilesDupli= listaFilesDupli + acceptedFilesTemp[i].name\r\n : listaFilesDupli= listaFilesDupli + \", \" + acceptedFilesTemp[i].name */\r\n\r\n /* splice borra una posición del arreglo */\r\n acceptedFiles.splice(\r\n acceptedFiles.indexOf(acceptedFilesTemp[i]),\r\n 1\r\n );\r\n }\r\n }\r\n /* esto sucede cuando se duplica un archivo en la zona de carga */\r\n if (filesCarg > 0) {\r\n toast.success(() => (\r\n <>\r\n
    \r\n {myLabels[8].desc}\r\n

    \r\n {filesCarg}\r\n {myLabels[16].desc}\r\n
    \r\n \r\n ));\r\n }\r\n }\r\n\r\n /* acumula de acceptedFiles a myFiles */\r\n setMyFiles([...myFiles, ...acceptedFiles]);\r\n },\r\n [myFiles]\r\n );\r\n\r\n //*funciones\r\n\r\n //--constantes de funcionalidades del dropzone, abre la ventana etc.\r\n const { getRootProps, getInputProps } = useDropzone({ onDrop });\r\n\r\n //--removeFile remueve los archivos de nuestra lista (remueve de uno a uno) desde bote de basura\r\n const removeFile = (file: any) => () => {\r\n Swal.fire({\r\n //title: myLabels[11].desc,\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n // width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + myLabels[11].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n const newFiles = [...myFiles]; //arreglo de paso\r\n newFiles.splice(newFiles.indexOf(file), 1); //se elimina el archivo\r\n setMyFiles(newFiles); //uso común del useState, actualiza myFiles\r\n console.log(\"newFiles *******\", newFiles.length);\r\n if (newFiles.length == 0) {\r\n // lo que hacemos en caso de quedar vacío\r\n console.log(\r\n \"removeFile: que haré si se eliminan todos los elementos\"\r\n );\r\n }\r\n }\r\n });\r\n };\r\n\r\n //-- genera el listado donde se acumulan nuestros archivos (lo que se pinta en el dropzone)\r\n //cada vez que se renderiza myfiles genera esta función\r\n const files = myFiles.map((file: any) => (\r\n
  • \r\n \r\n \r\n {file.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
  • \r\n ));\r\n\r\n //*vista: //--pintado del dropzone (adecuado a nuestro diseño)\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n

    {myLabels[6].desc}

    \r\n

    \r\n {myLabels[7].desc}\r\n

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n //--botón remover archivos, limpia la lista y el dropzone\r\n const removeAllFiles = () => {\r\n Swal.fire({\r\n //title: myLabels[10].desc,\r\n text: \"\",\r\n icon: \"question\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Si\",\r\n cancelButtonText: \"No\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html: \"
    \" + myLabels[10].desc + \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n setMyFiles([]);\r\n }\r\n });\r\n };\r\n\r\n //--Botón Cargar archivos, se recorre el myFiles y se valida si son validos (en relación al tema), se remueve los que no pasan, los que si se envia la llamada al api con la estructura acordada y con ello se activa el paso 3\r\n const filesUpload = () => {\r\n setOpenDivLoading(true);\r\n filesIn = [] as any;\r\n myFileCopia = [] as any;\r\n setFilesInvalid([]);\r\n myFileCopia = [...myFiles];\r\n //* si esto sucedía se acumulaban en los archivos nom validos\r\n //myFiles.map((file:any,index:any) => {\r\n //esto era para verificar si los archivos que nos estaban pasando tenía formanto xlsx\r\n //let idx= topicDetail.contenido[0].archivos.findIndex((v:any)=> v.nombre_fisico + \".xlsx\" === file.name || v.nombre_fisico + \".xls\" === file.name);\r\n //let idx= topicDetail.contenido[0].archivos.findIndex((v:any)=> v.nombre_fisico.toLowerCase() + \".xlsx\" === file.name.toLowerCase() );\r\n // if (idx<0){//no está el archivo\r\n // filesIn.push({ \"idx\": index, \"nombre_fisico\": file.name });\r\n //}\r\n //})\r\n\r\n setOpenDivLoading(false); //inhibimos la pantalla\r\n\r\n if (filesIn.length > 0) {\r\n //se encontraron archivos no válidos\r\n Swal.fire({\r\n text: \"\",\r\n icon: \"info\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#3085d6\",\r\n cancelButtonColor: \"#d33\",\r\n confirmButtonText: \"Continuar\",\r\n cancelButtonText: \"Cancelar\",\r\n //width: widthSwal,\r\n width: \"40%\",\r\n html:\r\n \"
    \" +\r\n myLabels[8].desc +\r\n \" \" +\r\n filesIn.length +\r\n \"\" +\r\n myLabels[17].desc +\r\n \"

    \" +\r\n myLabels[18].desc +\r\n \"

    \" +\r\n myLabels[19].desc +\r\n \"
    \",\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n setOpenDivLoading(true);\r\n for (let f = filesIn.length - 1; f >= 0; f--) {\r\n myFileCopia.splice(filesIn[f].idx, 1);\r\n }\r\n setMyFiles(myFileCopia);\r\n setFilesInvalid(filesIn);\r\n filesUploadContinue();\r\n } else {\r\n for (let f = filesIn.length - 1; f >= 0; f--) {\r\n myFileCopia.splice(filesIn[f].idx, 1);\r\n }\r\n setMyFiles(myFileCopia);\r\n return;\r\n }\r\n });\r\n }\r\n //este else maneja que ya paso todo bien y va a bajar los archivo a la NAS\r\n else {\r\n setOpenDivLoading(true);\r\n setMyFiles(myFileCopia);\r\n setFilesInvalid(filesIn);\r\n setTimeout(() => {\r\n filesUploadContinue();\r\n }, 100);\r\n }\r\n };\r\n\r\n //-- manda los archivos a la llamda del api para ser bajados en la NAS\r\n const filesUploadContinue = () => {\r\n if (myFileCopia.length > 0) {\r\n const formData = new FormData(); //se declar formato (tipo formulario) que se utiliza para mandar al api cuando se suben archivos\r\n //formData.append(\"idtema\", id); //otro parametro si lo ocupa el api\r\n formData.append(\"esquema\", \"des\"); //otro parametro si lo ocupa el api\r\n\r\n myFileCopia.map((e: any) => {\r\n //se agregan los archivos enlistados al formato de FormData\r\n formData.append(\"files\", e, e.name);\r\n });\r\n //ojo este consoloe para ver los archivos tenemos que mandar la propiedad del formData con getAll\r\n console.log(\r\n \"*formData es lo que manda la api para que éste generé la copiana la NAS*\"\r\n );\r\n console.log(\"*formData:\", formData.getAll(\"files\"));\r\n\r\n toast.success(() => (\r\n <>\r\n
    {myLabels[13].desc}
    \r\n
    \r\n \r\n ));\r\n }\r\n /* else{\r\n //funciones del store (stepStore.tsx)\r\n setStepsContentAdvance(2,20).catch(); //Contabiliza avance a 20% (al seleccionar un tema cumple con el primer paso)\r\n } */\r\n setOpenDivLoading(false);\r\n };\r\n\r\n //--\r\n //const handleClose = (filesV:any) => setShow(false);\r\n\r\n //*vista\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n \r\n {myLabels[4].desc}\r\n \r\n  \r\n \r\n {myLabels[3].desc}\r\n \r\n    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n {/* */}\r\n {openDivLoading ? : null}\r\n \r\n );\r\n}\r\n","/* Carga de archivo: elemento que carga un archivo a la vez */\r\n\r\n//*react- recursos\r\n\r\n//*componentes-utiles\r\nimport GeneraDropzone from \"../../../componentes/generaDropZone/GeneraDropzoneOriginal\";\r\n\r\n//*clases\r\n//import \"../../../componentes/generaDropZone/dropzone.css\";\r\n\r\n//*datos\r\n\r\n//*archivos (imagenes y elementos necesarios para la rutina)\r\n\r\n//*api's (servicios y store)\r\n\r\n//*store's\r\n\r\n//*componente\r\nexport default function Ejemplo() {\r\n //*api store\r\n\r\n //*store's\r\n\r\n //*data\r\n\r\n //*constantes y variables\r\n\r\n //*usestate\r\n\r\n //*useEffect\r\n\r\n //*funciones\r\n\r\n //*vista\r\n return (\r\n
    \r\n

    Ejemplo de Dropzone:

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","import * as Yup from \"yup\";\r\n\r\nexport default function configurarValidaciones(){\r\nYup.addMethod(Yup.string, 'primeraLetraMayuscula', function(){\r\n return this.test('primera-letra-mayuscula', 'La primera letra debe ser mayúscula',\r\n function(valor){\r\n if(valor && valor.length>0){\r\n const primeraLetra= valor.substring(0,1);\r\n return primeraLetra === primeraLetra.toUpperCase();\r\n }\r\n return true;\r\n })\r\n})\r\n\r\nYup.addMethod(Yup.string, 'email', function(){\r\n return this.test('email', 'Correo electrónico no válido',\r\n function(valor){\r\n if(valor && valor.length>0){\r\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(valor) || valor.lastIndexOf(\"@inegi.org.mx\")===-1){\r\n return false;\r\n }\r\n }\r\n return true;\r\n })\r\n})\r\nYup.addMethod(Yup.string, 'letras', function(){\r\n return this.test('letras', 'Solo deben ser letras',\r\n function(valor){\r\n if(valor && valor.length>0){\r\n let regex = new RegExp(\"^[a-zA-Z ]+$\");\r\n if (!regex.test(valor)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n })\r\n})\r\nYup.addMethod(Yup.string, 'numeros', function(){\r\n return this.test('numeros', 'Solo deben ser numeros',\r\n function(valor){\r\n if(valor && valor.length>0){\r\n let regex = new RegExp(\"^[0-9]+$\");\r\n if (!regex.test(valor)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n })\r\n})\r\nYup.addMethod(Yup.string, 'select', function(){\r\n return this.test('select', 'Debe seleccionar una opción',\r\n function(valor){\r\n if(valor && valor.length>0){\r\n if (valor===\"Seleccionar\") {\r\n return false;\r\n }\r\n }\r\n return true;\r\n })\r\n})\r\n}","import { BrowserRouter, Route, Switch} from 'react-router-dom';\nimport { ToastContainer } from \"react-toastify\";\nimport \"react-toastify/dist/ReactToastify.css\";\n\nimport '../node_modules/bootstrap/dist/css/bootstrap.css';\nimport './app.css';\n\n//import $ from 'jquery'; // se ocupa aquí sino no funciona la rutina de quitar f5 en homeProcess\n\n//libreria de componete base de Marco Ibarra\nimport GlobalStyle from '@reactjscomponentrepository/frontend-components/lib/styles/globalStyles';\n\n//carpetas básicas\n\n//import Home from './views/home/home'; \n//import HomeProcess from './views/homeProcess/homeProcess';\n\nimport Autenticar from './vistas/autenticar/Autenticar'; \nimport PaginaSSC from './vistas/paginaSSC/PaginaSSC'; \nimport Ayuda from './vistas/paginaSSC/Ayuda'; \n\n//para ejemplos de componentes\nimport Ejemplo from './vistas/componentes/tuplasCatalogo/Ejemplo';\nimport Ejemplo1 from './vistas/componentes/generaMenu/Ejemplo';\nimport Ejemplo2 from './vistas/componentes/generaComboFecha/Ejemplo';\nimport Ejemplo3 from './vistas/componentes/generaMenuVertical/Ejemplo';\nimport Ejemplo4 from './vistas/componentes/generaDropzone/Ejemplo';\nimport Ejemplo5 from './vistas/componentes/generaDropzone/Ejemplo2';\nimport Ejemplo6 from './vistas/componentes/generaSlidingPanel/Ejemplo';\nimport Ejemplo7 from './vistas/componentes/generaRuta/Ejemplo';\nimport Ejemplo8 from './vistas/componentes/cuestionario/Ejemplo';\nimport Ejemplo9 from \"./vistas/componentes/generaStepper/Ejemplo\";\nimport Ejemplo10 from \"./vistas/componentes/cargaAPI/Ejemplo\";\nimport Ejemplo11 from \"./vistas/componentes/generaSemaforo/Ejemplo\";\nimport Ejemplo12 from \"./vistas/componentes/generaCorreo/Ejemplo\";\nimport Ejemplo13 from \"./vistas/componentes/generaExportacionExcel/Ejemplo\";\n//import Ejemplo14 from \"./vistas/componentes/generaGrafica/Ejemplo\";\nimport Ejemplo15 from \"./vistas/componentes/generaDropzone/Ejemplo3\";\n\nimport configurarValidaciones from './../src/validaciones'; //para cuestionario\n\nconfigurarValidaciones();\n//\nconst App = () => {\n const routes = [\n //{path: '/home', component: Home, exact: true},\n //{path: '/homeProcess', component: HomeProcess, exact: true},\n //{path: '/homeProcess/content', component: HomeProcess, exact: true},\n\n {path: '/home', component: Autenticar, exact: true},\n {path: '/autenticar/autenticar', component: Autenticar, exact: true},\n {path: '/paginaSSC', component: PaginaSSC, exact: true},\n {path: '/paginaSSC/contenido', component: PaginaSSC, exact: true},\n {path: '/Ayuda', component: Ayuda, exact: true},\n \n\n {path: '/componentes/tuplasCatalogo', component: Ejemplo, exact: true},\n {path: '/componentes/generaMenu', component: Ejemplo1, exact: true},\n {path: '/componentes/cargaComboFecha', component: Ejemplo2, exact: true},\n {path: '/componentes/generaMenuVertical', component: Ejemplo3, exact: true},\n {path: '/componentes/generaDropzone', component: Ejemplo4, exact: true},\n {path: '/componentes/generaDropzoneOriginal', component: Ejemplo15, exact: true},\n {path: '/componentes/generaDropzoneUnArchivo', component: Ejemplo5, exact: true},\n {path: '/componentes/generaSlidingPanel', component: Ejemplo6, exact: true},\n {path: '/componentes/generaRuta', component: Ejemplo7, exact: true},\n {path: '/componentes/cuestionario', component: Ejemplo8, exact: true},\n {path: '/componentes/generaStepper', component: Ejemplo9, exact: true },\n {path: '/componentes/cargaAPI', component: Ejemplo10, exact: true },\n {path: '/componentes/generaSemaforo', component: Ejemplo11, exact: true },\n {path: '/componentes/generaCorreo', component: Ejemplo12, exact: true },\n {path: '/componentes/generaExportacionExcel', component: Ejemplo13, exact: true },\n //{path: '/componentes/generaGraficas', component: Ejemplo13, exact: true },\n {path: '/', component: Autenticar, exact: true},\n {path: '/', component: Autenticar, exact: true},\n {path: '*', component: Autenticar},\n ];\n const basename = process.env.REACT_APP_BASE_NAME; \n \n return (\n
    {/* */}\n \n\n \n \n {routes.map((route) => (\n \n \n \n ))}\n \n \n \n
    \n \n )\n}\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n//import reportWebVitals from './reportWebVitals';\nimport '../node_modules/bootstrap/dist/css/bootstrap.css';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\n//reportWebVitals();\n"],"sourceRoot":""}