HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/5S13-2-DaACkZ0p.js.map
{"version":3,"file":"5S13-2-DaACkZ0p.js","sources":["../../src/exercices/5e/5S13-2.js"],"sourcesContent":["import { diagrammeBarres } from '../../lib/2d/diagrammes.js'\nimport { choice, combinaisonListes, shuffle } from '../../lib/outils/arrayOutils'\nimport { egalOuApprox } from '../../lib/outils/ecritures.js'\nimport { arrondi } from '../../lib/outils/nombres.js'\nimport { numAlpha, sp } from '../../lib/outils/outilString.js'\nimport { texNombre } from '../../lib/outils/texNombre.js'\nimport Exercice from '../Exercice.js'\nimport { fixeBordures, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { calculANePlusJamaisUtiliser, listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { fraction } from '../../modules/fractions.js'\nimport { context } from '../../modules/context.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\n\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\nimport { tableauColonneLigne } from '../../lib/2d/tableau.js'\n\nexport const titre = 'Frequency calculations'\nexport const interactifReady = true\nexport const interactifType = 'mathLive'\nexport const amcReady = true\nexport const amcType = 'AMCHybride'\n\n/**\n |*  888    888          888\n |*  888    888          888\n |*  888    888          888\n |*  8888888888  .d88b.  888 88888b.   .d88b.  888d888 .d8888b\n |*  888    888 d8P  Y8b 888 888 \"88b d8P  Y8b 888P\"   88K\n |*  888    888 88888888 888 888  888 88888888 888     \"Y8888b.\n |*  888    888 Y8b.     888 888 d88P Y8b.     888          X88\n |*  888    888  \"Y8888  888 88888P\"   \"Y8888  888      88888P'\n |*                          888\n |*                          888\n |*                          888\n */\n\n/**\n * Construit un tableau d'entiers de longueur connue\n * dont la somme des éléments est égale à un total connu.\n * @author Eve & Sylvain Chambon\n * @param {int} nbElements Nombre d'entiers dans le tableau\n * @param {int} total Somme des éléments du tableau\n * @returns {Array} Tableau d'entier\n * @example > listeEntiersDepuisSomme(100,3)\n * < [34,29,37]\n */\n\nfunction listeEntiersDepuisSomme (total, nbElements) {\n  const valeurs = new Array(nbElements)\n  // Fair distribution of the total in the elements of the array\n  const quotient = Math.floor(total / nbElements)\n  const reste = total % nbElements\n  for (let i = 0; i < valeurs.length - 1; i++) {\n    valeurs[i] = quotient\n  }\n  valeurs[valeurs.length - 1] = quotient + reste\n  // Change values\n  for (let i = 0, delta = 0; i < valeurs.length - 2; i++) {\n    // creation of the delta\n    delta = randint(-valeurs[i] + 1, valeurs[i] - 1)\n    valeurs[i] += delta\n    // distribution of the delta between the remaining values of the array\n    const diviseur = valeurs.length - i - 2\n    let q = 0\n    if (delta >= 0) {\n      q = Math.floor(delta / diviseur)\n    } else {\n      q = Math.ceil(delta / diviseur)\n    }\n    const r = delta % diviseur\n    for (let j = i + 1; j < valeurs.length - 1; j++) {\n      valeurs[j] -= q\n    }\n    valeurs[valeurs.length - 1] -= r\n  }\n  return valeurs\n}\n\nfunction graphique (hauteursBarres, etiquettes, {\n  reperageTraitPointille = false,\n  couleurDeRemplissage = 'blue',\n  titreAxeVertical = '',\n  titre = '',\n  hauteurDiagramme = 8,\n  coeff = 2,\n  axeVertical = false,\n  etiquetteValeur = true,\n  labelAxeVert = false\n}) {\n  const diagramme = diagrammeBarres(hauteursBarres, etiquettes, {\n    reperageTraitPointille,\n    couleurDeRemplissage,\n    titreAxeVertical,\n    titre,\n    hauteurDiagramme,\n    coeff,\n    axeVertical,\n    etiquetteValeur,\n    labelAxeVert\n  })\n  return mathalea2d(Object.assign({}, fixeBordures([diagramme], { rxmin: -3, rymin: -3, rymax: 1.5 }), {\n    style: 'inline',\n    scale: 0.5\n  }), diagramme)\n}\n\n/**\n |*  8888888888                                    d8b\n |*  888                                           Y8P\n |*  888\n |*  8888888    888  888  .d88b.  888d888  .d8888b 888  .d8888b  .d88b.\n |*  888        `Y8bd8P' d8P  Y8b 888P'   d88P'    888 d88P\"    d8P  Y8b\n |*  888          X88K   88888888 888     888      888 888      88888888\n |*  888        .d8\"\"8b. Y8b.     888     Y88b.    888 Y88b.    Y8b.\n |*  8888888888 888  888  \"Y8888 888 \"Y8888P 888 \"Y8888P \"Y8888\n */\n\n/**\n * La classe Population sert à construire la série basée sur le theme choisi en paramètre\n */\nclass Population {\n  constructor (theme) {\n    // series dictionaries\n    const listeThemes = ['establishment', 'living room', 'car park', 'collection'] // chaque theme est une clé du dictionnaire\n    const series = new Map()\n    series.set('establishment', {\n      lieu: 'an institution',\n      individus: 'students',\n      caractere: 'their favorite sport',\n      caracterePourTableau: 'Sports',\n      modalites: ['Soccer', 'Rugby', 'Basketball', 'Tennis', 'Judo', 'Handball', 'Volleyball', 'Athletics', 'Ping-pong']\n    })\n    series.set('living room', {\n      lieu: 'an European esports show',\n      individus: 'visitors',\n      caractere: 'their country of origin',\n      caracterePourTableau: 'Country',\n      modalites: ['France', 'England', 'Holland', 'Spain', 'Italy', 'Belgium', 'Germany', 'Portugal', 'Austria']\n    })\n    series.set('car park', {\n      lieu: 'a supermarket parking lot',\n      individus: 'cars',\n      caractere: 'their color',\n      caracterePourTableau: 'Colors',\n      modalites: ['Black', 'White', 'Blue', 'Red', 'Green', 'Gray', 'Brown', 'Yellow', 'Orange']\n    })\n    series.set('collection', {\n      lieu: 'a collection',\n      individus: 'discs',\n      caractere: 'the music genres',\n      caracterePourTableau: 'Styles',\n      modalites: ['Pop', 'Jazz', 'Rap', 'RnB', 'Folk', 'Rock', 'Electro', 'Reggae', 'Drunk']\n    })\n    // construction of the series\n    let serie = {}\n    if (theme === 'chance') {\n      serie = series.get(choice(listeThemes))\n    } else {\n      serie = series.get(theme)\n    }\n    this.lieu = serie.lieu\n    this.individus = serie.individus\n    this.caractere = serie.caractere\n    this.caracterePourTableau = serie.caracterePourTableau\n    this.effectifTotal = choice([100, 120, 150, 200, 250, 400, 500, 1000])\n    this.modalites = shuffle(serie.modalites.slice(0, randint(5, serie.modalites.length)))\n    this.effectifs = listeEntiersDepuisSomme(this.effectifTotal, this.modalites.length)\n    this.rangEffectifCache = randint(0, this.modalites.length - 1)\n    this.entreeCachee = this.modalites[this.rangEffectifCache]\n  }\n\n  getPreambule (styleExo) {\n    let preambule = `In ${this.lieu} of ${this.effectifTotal} ${this.individus}, we noted ${this.caractere}.<br>`\n    switch (styleExo) {\n      case 'painting ' :\n        preambule += 'The results are recorded in the following table:<br><br>'\n        break\n      case 'diagram' :\n        preambule += 'We represented this data using the diagram below.<br><br>'\n        break\n      default :\n        throw Error('Error: styleExo is neither table nor diagram')\n    }\n    return preambule\n  }\n\n  getEntrees () {\n    const entrees = new Map()\n    for (let i = 0; i < this.modalites.length; i++) {\n      entrees.set(this.modalites[i], this.effectifs[i])\n    }\n    return entrees\n  }\n}\n\n/**\n * Calculs de fréquences sur une série qualitative\n * avec un effectif manquant et l'effectif total donné\n * @author Eve & Sylvain CHAMBON\n * Référence 5S13-2\n */\nexport const uuid = 'ff67d'\nexport const ref = '5S13-2'\nexport default function CalculerDesFrequences () {\n  Exercice.call(this) // Héritage de la classe Exercice()\n  this.consigne = ''\n  this.nbQuestions = 1\n  this.nbQuestionsModifiable = true // pourquoi pas ?\n  this.spacing = 1\n  this.spacingCorr = 1.5\n  this.nbCols = 1\n  this.nbColsCorr = 1\n  this.sup = 1\n  this.besoinFormulaireNumerique = [\n    'Type of questions', 4, [\n      '1: Choice of a random exercise from the two versions',\n      '2: Calculate frequencies from a staffing table',\n      '3: Calculate frequencies from a stick diagram',\n      '4: The two versions in two questions (theme of the 2nd at random)'\n    ].join('\\n')\n  ]\n  this.sup2 = 1\n  this.besoinFormulaire2Numerique = [\n    'Context theme', 5, [\n      '1: Random',\n      '2: School and favorite sports',\n      '3: European exhibition and nationalities of participants',\n      '4: Parking and car colors',\n      '5: Record collection and music styles'\n    ].join('\\n')\n  ]\n  const listeDesThemes = ['chance', 'establishment', 'living room', 'car park', 'collection']\n\n  /**\n     * Les questions non modifiables, seule la physionomie de la consigne change (données en tableau ou en diagramme)...\n     * Une seule fonction donc pour générer les questions et leurs corrections identiques pour les deux versions\n     * @param {Map} entreesTableau l'objet Map avec les entrees du tableau sport/effectif\n     * @param {String} cachee le sport dont on a caché l'effectif\n     * @returns liste des questions, liste des corrections\n     */\n  function questionsEtCorrections (preambule, serie, exercice, numero) {\n    let questions = []\n    const rangValeurChoisie = randint(0, serie.effectifs.length - 1, serie.rangEffectifCache)\n    const frequenceDemandee = arrondi(serie.effectifs[rangValeurChoisie] * 100 / serie.effectifTotal, 1)\n    // correction question 1\n    let correction1 = '<br>' + numAlpha(0) + `The missing squad is that of the ${serie.entreeCachee.charAt(0).toLocaleLowerCase() + serie.entreeCachee.slice(1)}. Let $e$ be this number.<br>`\n    correction1 += `$e=${serie.effectifTotal}-(`\n    let first = true\n    serie.effectifs.forEach((eff, index) => {\n      if (index !== serie.rangEffectifCache) {\n        if (first) {\n          correction1 += `${eff}`\n          first = !first\n        } else {\n          correction1 += `+${eff}`\n        }\n      }\n    })\n    correction1 += ')$<br>'\n    correction1 += `$e=${serie.effectifTotal}-${calculANePlusJamaisUtiliser(serie.effectifTotal - serie.effectifs[serie.rangEffectifCache])}$<br>`\n    correction1 += `$e=${serie.effectifs[serie.rangEffectifCache]}$`\n    // correction question 2\n    let correction2\n    if (!context.isAmc && !exercice.interactif) {\n      correction2 = '<br>' + numAlpha(1) + 'Frequency calculations.<br><br>'\n      correction2 += 'We recall that for the frequency relative to a value is given by the quotient:'\n      correction2 += '$\\\\dfrac{\\\\text{effective value}}{\\\\text{total effective}}$<br><br>'\n      correction2 += 'We therefore deduce the following calculations:<br><br>'\n      const enteteTableau = ['']\n      const premiereColonne = []\n      const premiereLigneTableau = []\n      const deuxiemeLigneTableau = []\n      serie.effectifs.forEach((eff, index) => {\n        enteteTableau.push(`\\\\text{${serie.modalites[index]}}`)\n        const f = fraction(eff, serie.effectifTotal)\n        premiereLigneTableau.push(f.texFraction)\n        deuxiemeLigneTableau.push(`${texNombre(f.pourcentage)} ${sp(1)}\\\\%`)\n      })\n      premiereColonne.push('\\\\textbf{Frequencies}', '\\\\textbf{Frequencies in percentages}')\n      correction2 += tableauColonneLigne(enteteTableau, premiereColonne, premiereLigneTableau.concat(deuxiemeLigneTableau))\n      correction2 += '<br>'\n    } else { // Pas besoin de tableau pour une seule valeur demandée.\n      correction2 = '<br>' + numAlpha(1) + `Calculation of the frequency of the ${serie.modalites[rangValeurChoisie]} value.<br><br>`\n      correction2 += 'We recall that for the frequency relative to a value is given by the quotient:'\n      correction2 += '$\\\\dfrac{\\\\text{effective value}}{\\\\text{total effective}}$<br><br>'\n      correction2 += 'We therefore deduce:<br>'\n      const fValeur = fraction(serie.effectifs[rangValeurChoisie], serie.effectifTotal)\n      correction2 += `$\\\\text{Frequency}_{${serie.modalites[rangValeurChoisie]}}= ${fValeur.texFraction}$<br>`\n      correction2 += `$\\\\text{Frequency}_{${serie.modalites[rangValeurChoisie]}}${egalOuApprox(serie.effectifs[rangValeurChoisie] * 100 / serie.effectifTotal, 1)}${texNombre(arrondi(fValeur.pourcentage, 1))} ${sp(1)}\\\\%$`\n    }\n\n    if (!exercice.interactif && !context.isAmc) { // Questions normales pour version non interactive html ou latex\n      questions = [preambule,\n        '<br>' + numAlpha(0) + 'Determine the missing workforce.',\n        '<br>' + numAlpha(1) + `Determine the frequencies for each ${serie.caractere.substring(5)} (as a percentage, round to the nearest tenth if necessary).`]\n    } else {\n      if (!context.isAmc) { // Questions pour interactivité html\n        setReponse(exercice, numero * 2, serie.effectifs[serie.rangEffectifCache], { formatInteractif: 'calculation' })\n        setReponse(exercice, numero * 2 + 1, frequenceDemandee, { formatInteractif: 'calculation' })\n        questions = [preambule,\n          '<br>' + numAlpha(0) + 'Determine the missing workforce.' + ajouteChampTexteMathLive(exercice, numero * 2, 'width10 inline'),\n          '<br>' + numAlpha(1) + `Determine the frequency of the ${serie.modalites[rangValeurChoisie]} value (in percentage, round to the tenth if necessary).` + ajouteChampTexteMathLive(exercice, numero * 2 + 1, 'width10 inline')]\n      } else { // Pour AMC, on ne peut pas doubler les questions, il faut les intégrer dans un seul AMCHybride.\n        exercice.autoCorrection[numero] = {\n          options: { multicols: true },\n          enonce: preambule + '<br>' + numAlpha(0) + 'Determine the missing workforce.' + '<br>' + numAlpha(1) + `Determine the frequency of the ${serie.modalites[rangValeurChoisie]} value (in percentage, round to the tenth if necessary).`,\n          propositions: [\n            {\n              type: 'AMCNum',\n              propositions: [\n                {\n                  texte: correction1 + correction2,\n                  reponse: {\n                    texte: numAlpha(0),\n                    valeur: [serie.effectifs[serie.rangEffectifCache]],\n                    param: {\n                      digits: 3,\n                      decimals: 0,\n                      signe: false\n                    }\n                  }\n                }\n              ]\n            },\n            {\n              type: 'AMCNum',\n              propositions: [\n                {\n                  texte: '',\n                  reponse: {\n                    texte: numAlpha(1),\n                    valeur: [frequenceDemandee],\n                    param: {\n                      digits: 3,\n                      decimals: 1,\n                      signe: false\n                    }\n                  }\n                }\n              ]\n            }\n          ]\n        }\n      }\n    }\n    return { questions: questions.join('\\n'), corrections: [correction1, correction2].join('\\n') }\n  }\n\n  /**\n     * version 0 :\n     * La consigne avec un tableau d'effectifs\n     * */\n  function exerciceAvecTableau (theme, exercice, numero) { // On a besoin de l'exercise and the question number for the'interactif\n    // problem parameters\n    const serie = new Population(theme)\n    let preambule = serie.getPreambule('painting ')\n    // construct the table\n    const entetesColonnes = [`\\\\text{\\\\textbf{${serie.caracterePourTableau}}}`]\n    for (const modalite of serie.modalites) {\n      entetesColonnes.push(`\\\\text{${modalite}}`)\n    }\n    entetesColonnes.push('\\\\text{\\\\textbf{TOTAL}}')\n    const entetesLignes = ['\\\\text{\\\\textbf{Skills}}', '\\\\text{\\\\textbf{Frequencies}}']\n    const cellules = []\n    // first line of staff\n    serie.effectifs.forEach((eff, index) => {\n      if (index !== serie.rangEffectifCache) {\n        cellules.push(eff)\n      } else {\n        cellules.push('')\n      }\n    })\n    cellules.push(`${serie.effectifTotal}`)\n    // second frequency line (empty)\n    for (let i = 0; i <= serie.effectifs.length; i++) {\n      cellules.push('')\n    }\n    preambule += tableauColonneLigne(entetesColonnes, entetesLignes, cellules, 1.5)\n    preambule += '<br>'\n    const texte = questionsEtCorrections(preambule, serie, exercice, numero) // on récupère les questions/réponses en relation\n    return { questions: texte.questions, corrections: texte.corrections, effectifs: serie.effectifs } // On ajoute les effectifs pour ne pas avoir de doublons dans les différentes questions\n  }\n\n  /**\n     * version 1 :\n     * La consigne avec un diagramme bâton\n     * */\n  function exerciceAvecDiagramme (theme, exercice, numero) { // On a besoin de l'exercise and the question number for the'interactif\n    // problem parameters\n    const serie = new Population(theme)\n    let preambule = serie.getPreambule('diagram')\n    // construction of the diagram\n    const effectifsSansValeurCachee = serie.effectifs.map((elt, i) => i !== serie.rangEffectifCache ? elt : 0)\n    const diagrammeBaton = graphique(effectifsSansValeurCachee, serie.modalites, {\n      reperageTraitPointille: false,\n      axeVertical: true,\n      titreAxeVertical: 'Workforce',\n      labelAxeVert: true\n    })\n    preambule += diagrammeBaton\n    const texte = questionsEtCorrections(preambule, serie, exercice, numero) // on,numero récupère les questions/réponses en relation\n    return { questions: texte.questions, corrections: texte.corrections, effectifs: serie.effectifs } // On ajoute les effectifs pour ne pas avoir de doublons dans les différentes questions\n  }\n\n  // we put everything together\n  this.nouvelleVersion = function () {\n    this.listeQuestions = [] // Liste de questions\n    this.listeCorrections = [] // Liste de questions corrigées\n    this.autoCorrection = []\n    const theme = listeDesThemes[this.sup2 - 1]\n    const exercice = { questions: [], corrections: [] }\n    let transit = {}\n    const de = combinaisonListes([0, 1], this.nbQuestions)\n    for (let i = 0, cpt = 0; i < this.nbQuestions && cpt < 50;) {\n      switch (this.sup) {\n        case 1: // au hasard\n          switch (de[i]) {\n            case 0:\n              transit = exerciceAvecDiagramme(theme, this, i)\n              break\n            case 1:\n              transit = exerciceAvecTableau(theme, this, i)\n              break\n          }\n          exercice.questions = [transit.questions]\n          exercice.corrections = [transit.corrections]\n          break\n        case 2: // tableau\n          transit = exerciceAvecTableau(theme, this, i)\n          exercice.questions = [transit.questions]\n          exercice.corrections = [transit.corrections]\n          break\n        case 3: // diagramme\n          transit = exerciceAvecDiagramme(theme, this, i)\n          exercice.questions = [transit.questions]\n          exercice.corrections = [transit.corrections]\n          break\n        case 4: // les deux\n          transit = exerciceAvecTableau(theme, this, i)\n          exercice.questions = [transit.questions]\n          exercice.corrections = [transit.corrections]\n          transit = exerciceAvecDiagramme('chance', this, i)\n          exercice.questions.push(transit.questions)\n          exercice.corrections.push(transit.corrections)\n      }\n      if (this.questionJamaisPosee(i, ...transit.effectifs)) {\n        this.listeQuestions.push(...exercice.questions)\n        this.listeCorrections.push(...exercice.corrections)\n        i++\n      }\n      cpt++\n    }\n    listeQuestionsToContenu(this)\n  }\n}\n"],"names":["titre","interactifReady","interactifType","amcReady","amcType","listeEntiersDepuisSomme","total","nbElements","valeurs","quotient","reste","i","delta","randint","diviseur","q","r","j","graphique","hauteursBarres","etiquettes","reperageTraitPointille","couleurDeRemplissage","titreAxeVertical","hauteurDiagramme","coeff","axeVertical","etiquetteValeur","labelAxeVert","diagramme","diagrammeBarres","mathalea2d","fixeBordures","Population","theme","listeThemes","series","serie","choice","shuffle","styleExo","preambule","entrees","uuid","ref","CalculerDesFrequences","Exercice","listeDesThemes","questionsEtCorrections","exercice","numero","questions","rangValeurChoisie","frequenceDemandee","arrondi","correction1","numAlpha","first","eff","index","calculANePlusJamaisUtiliser","correction2","context","enteteTableau","premiereColonne","premiereLigneTableau","deuxiemeLigneTableau","f","fraction","texNombre","sp","tableauColonneLigne","fValeur","egalOuApprox","setReponse","ajouteChampTexteMathLive","exerciceAvecTableau","entetesColonnes","modalite","entetesLignes","cellules","texte","exerciceAvecDiagramme","effectifsSansValeurCachee","elt","diagrammeBaton","transit","de","combinaisonListes","cpt","listeQuestionsToContenu"],"mappings":"iTAgBY,MAACA,EAAQ,yBACRC,EAAkB,GAClBC,EAAiB,WACjBC,EAAW,GACXC,EAAU,aA2BvB,SAASC,EAAyBC,EAAOC,EAAY,CACnD,MAAMC,EAAU,IAAI,MAAMD,CAAU,EAE9BE,EAAW,KAAK,MAAMH,EAAQC,CAAU,EACxCG,EAAQJ,EAAQC,EACtB,QAASI,EAAI,EAAGA,EAAIH,EAAQ,OAAS,EAAGG,IACtCH,EAAQG,CAAC,EAAIF,EAEfD,EAAQA,EAAQ,OAAS,CAAC,EAAIC,EAAWC,EAEzC,QAASC,EAAI,EAAGC,EAAQ,EAAGD,EAAIH,EAAQ,OAAS,EAAGG,IAAK,CAEtDC,EAAQC,EAAQ,CAACL,EAAQG,CAAC,EAAI,EAAGH,EAAQG,CAAC,EAAI,CAAC,EAC/CH,EAAQG,CAAC,GAAKC,EAEd,MAAME,EAAWN,EAAQ,OAASG,EAAI,EACtC,IAAII,EAAI,EACJH,GAAS,EACXG,EAAI,KAAK,MAAMH,EAAQE,CAAQ,EAE/BC,EAAI,KAAK,KAAKH,EAAQE,CAAQ,EAEhC,MAAME,EAAIJ,EAAQE,EAClB,QAASG,EAAIN,EAAI,EAAGM,EAAIT,EAAQ,OAAS,EAAGS,IAC1CT,EAAQS,CAAC,GAAKF,EAEhBP,EAAQA,EAAQ,OAAS,CAAC,GAAKQ,CAChC,CACD,OAAOR,CACT,CAEA,SAASU,EAAWC,EAAgBC,EAAY,CAC9C,uBAAAC,EAAyB,GACzB,qBAAAC,EAAuB,OACvB,iBAAAC,EAAmB,GACnB,MAAAvB,EAAQ,GACR,iBAAAwB,EAAmB,EACnB,MAAAC,EAAQ,EACR,YAAAC,EAAc,GACd,gBAAAC,EAAkB,GAClB,aAAAC,EAAe,EACjB,EAAG,CACD,MAAMC,EAAYC,EAAgBX,EAAgBC,EAAY,CAC5D,uBAAAC,EACA,qBAAAC,EACA,iBAAAC,EACA,MAAAvB,EACA,iBAAAwB,EACA,MAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,aAAAC,CACJ,CAAG,EACD,OAAOG,EAAW,OAAO,OAAO,CAAA,EAAIC,EAAa,CAACH,CAAS,EAAG,CAAE,MAAO,GAAI,MAAO,GAAI,MAAO,GAAG,CAAE,EAAG,CACnG,MAAO,SACP,MAAO,EACR,CAAA,EAAGA,CAAS,CACf,CAgBA,MAAMI,CAAW,CACf,YAAaC,EAAO,CAElB,MAAMC,EAAc,CAAC,gBAAiB,cAAe,WAAY,YAAY,EACvEC,EAAS,IAAI,IACnBA,EAAO,IAAI,gBAAiB,CAC1B,KAAM,iBACN,UAAW,WACX,UAAW,uBACX,qBAAsB,SACtB,UAAW,CAAC,SAAU,QAAS,aAAc,SAAU,OAAQ,WAAY,aAAc,YAAa,WAAW,CACvH,CAAK,EACDA,EAAO,IAAI,cAAe,CACxB,KAAM,2BACN,UAAW,WACX,UAAW,0BACX,qBAAsB,UACtB,UAAW,CAAC,SAAU,UAAW,UAAW,QAAS,QAAS,UAAW,UAAW,WAAY,SAAS,CAC/G,CAAK,EACDA,EAAO,IAAI,WAAY,CACrB,KAAM,4BACN,UAAW,OACX,UAAW,cACX,qBAAsB,SACtB,UAAW,CAAC,QAAS,QAAS,OAAQ,MAAO,QAAS,OAAQ,QAAS,SAAU,QAAQ,CAC/F,CAAK,EACDA,EAAO,IAAI,aAAc,CACvB,KAAM,eACN,UAAW,QACX,UAAW,mBACX,qBAAsB,SACtB,UAAW,CAAC,MAAO,OAAQ,MAAO,MAAO,OAAQ,OAAQ,UAAW,SAAU,OAAO,CAC3F,CAAK,EAED,IAAIC,EAAQ,CAAE,EACVH,IAAU,SACZG,EAAQD,EAAO,IAAIE,EAAOH,CAAW,CAAC,EAEtCE,EAAQD,EAAO,IAAIF,CAAK,EAE1B,KAAK,KAAOG,EAAM,KAClB,KAAK,UAAYA,EAAM,UACvB,KAAK,UAAYA,EAAM,UACvB,KAAK,qBAAuBA,EAAM,qBAClC,KAAK,cAAgBC,EAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,CAAC,EACrE,KAAK,UAAYC,EAAQF,EAAM,UAAU,MAAM,EAAGxB,EAAQ,EAAGwB,EAAM,UAAU,MAAM,CAAC,CAAC,EACrF,KAAK,UAAYhC,EAAwB,KAAK,cAAe,KAAK,UAAU,MAAM,EAClF,KAAK,kBAAoBQ,EAAQ,EAAG,KAAK,UAAU,OAAS,CAAC,EAC7D,KAAK,aAAe,KAAK,UAAU,KAAK,iBAAiB,CAC1D,CAED,aAAc2B,EAAU,CACtB,IAAIC,EAAY,MAAM,KAAK,IAAI,OAAO,KAAK,aAAa,IAAI,KAAK,SAAS,cAAc,KAAK,SAAS,QACtG,OAAQD,EAAQ,CACd,IAAK,YACHC,GAAa,2DACb,MACF,IAAK,UACHA,GAAa,4DACb,MACF,QACE,MAAM,MAAM,8CAA8C,CAC7D,CACD,OAAOA,CACR,CAED,YAAc,CACZ,MAAMC,EAAU,IAAI,IACpB,QAAS,EAAI,EAAG,EAAI,KAAK,UAAU,OAAQ,IACzCA,EAAQ,IAAI,KAAK,UAAU,CAAC,EAAG,KAAK,UAAU,CAAC,CAAC,EAElD,OAAOA,CACR,CACH,CAQY,MAACC,GAAO,QACPC,GAAM,SACJ,SAASC,IAAyB,CAC/CC,EAAS,KAAK,IAAI,EAClB,KAAK,SAAW,GAChB,KAAK,YAAc,EACnB,KAAK,sBAAwB,GAC7B,KAAK,QAAU,EACf,KAAK,YAAc,IACnB,KAAK,OAAS,EACd,KAAK,WAAa,EAClB,KAAK,IAAM,EACX,KAAK,0BAA4B,CAC/B,oBAAqB,EAAG,CACtB,uDACA,iDACA,gDACA,mEACN,EAAM,KAAK;AAAA,CAAI,CACZ,EACD,KAAK,KAAO,EACZ,KAAK,2BAA6B,CAChC,gBAAiB,EAAG,CAClB,YACA,gCACA,2DACA,4BACA,uCACN,EAAM,KAAK;AAAA,CAAI,CACZ,EACD,MAAMC,EAAiB,CAAC,SAAU,gBAAiB,cAAe,WAAY,YAAY,EAS1F,SAASC,EAAwBP,EAAWJ,EAAOY,EAAUC,EAAQ,CACnE,IAAIC,EAAY,CAAE,EAClB,MAAMC,EAAoBvC,EAAQ,EAAGwB,EAAM,UAAU,OAAS,EAAGA,EAAM,iBAAiB,EAClFgB,EAAoBC,EAAQjB,EAAM,UAAUe,CAAiB,EAAI,IAAMf,EAAM,cAAe,CAAC,EAEnG,IAAIkB,EAAc,OAASC,EAAS,CAAC,EAAI,oCAAoCnB,EAAM,aAAa,OAAO,CAAC,EAAE,kBAAiB,EAAKA,EAAM,aAAa,MAAM,CAAC,CAAC,gCAC3JkB,GAAe,MAAMlB,EAAM,aAAa,KACxC,IAAIoB,EAAQ,GACZpB,EAAM,UAAU,QAAQ,CAACqB,EAAKC,IAAU,CAClCA,IAAUtB,EAAM,oBACdoB,GACFF,GAAe,GAAGG,CAAG,GACrBD,EAAQ,CAACA,GAETF,GAAe,IAAIG,CAAG,GAGhC,CAAK,EACDH,GAAe,SACfA,GAAe,MAAMlB,EAAM,aAAa,IAAIuB,EAA4BvB,EAAM,cAAgBA,EAAM,UAAUA,EAAM,iBAAiB,CAAC,CAAC,QACvIkB,GAAe,MAAMlB,EAAM,UAAUA,EAAM,iBAAiB,CAAC,IAE7D,IAAIwB,EACJ,GAAI,CAACC,EAAQ,OAAS,CAACb,EAAS,WAAY,CAC1CY,EAAc,OAASL,EAAS,CAAC,EAAI,kCACrCK,GAAe,iFACfA,GAAe,sEACfA,GAAe,0DACf,MAAME,EAAgB,CAAC,EAAE,EACnBC,EAAkB,CAAE,EACpBC,EAAuB,CAAE,EACzBC,EAAuB,CAAE,EAC/B7B,EAAM,UAAU,QAAQ,CAACqB,EAAKC,IAAU,CACtCI,EAAc,KAAK,UAAU1B,EAAM,UAAUsB,CAAK,CAAC,GAAG,EACtD,MAAMQ,EAAIC,EAASV,EAAKrB,EAAM,aAAa,EAC3C4B,EAAqB,KAAKE,EAAE,WAAW,EACvCD,EAAqB,KAAK,GAAGG,EAAUF,EAAE,WAAW,CAAC,IAAIG,EAAG,CAAC,CAAC,KAAK,CAC3E,CAAO,EACDN,EAAgB,KAAK,wBAAyB,sCAAsC,EACpFH,GAAeU,EAAoBR,EAAeC,EAAiBC,EAAqB,OAAOC,CAAoB,CAAC,EACpHL,GAAe,MACrB,KAAW,CACLA,EAAc,OAASL,EAAS,CAAC,EAAI,uCAAuCnB,EAAM,UAAUe,CAAiB,CAAC,kBAC9GS,GAAe,iFACfA,GAAe,sEACfA,GAAe,2BACf,MAAMW,EAAUJ,EAAS/B,EAAM,UAAUe,CAAiB,EAAGf,EAAM,aAAa,EAChFwB,GAAe,uBAAuBxB,EAAM,UAAUe,CAAiB,CAAC,MAAMoB,EAAQ,WAAW,QACjGX,GAAe,uBAAuBxB,EAAM,UAAUe,CAAiB,CAAC,IAAIqB,EAAapC,EAAM,UAAUe,CAAiB,EAAI,IAAMf,EAAM,cAAe,CAAC,CAAC,GAAGgC,EAAUf,EAAQkB,EAAQ,YAAa,CAAC,CAAC,CAAC,IAAIF,EAAG,CAAC,CAAC,MAClN,CAED,MAAI,CAACrB,EAAS,YAAc,CAACa,EAAQ,MACnCX,EAAY,CAACV,EACX,OAASe,EAAS,CAAC,EAAI,mCACvB,OAASA,EAAS,CAAC,EAAI,sCAAsCnB,EAAM,UAAU,UAAU,CAAC,CAAC,8DAA8D,EAEpJyB,EAAQ,MAOXb,EAAS,eAAeC,CAAM,EAAI,CAChC,QAAS,CAAE,UAAW,EAAM,EAC5B,OAAQT,EAAY,OAASe,EAAS,CAAC,EAAI,uCAA8CA,EAAS,CAAC,EAAI,kCAAkCnB,EAAM,UAAUe,CAAiB,CAAC,2DAC3K,aAAc,CACZ,CACE,KAAM,SACN,aAAc,CACZ,CACE,MAAOG,EAAcM,EACrB,QAAS,CACP,MAAOL,EAAS,CAAC,EACjB,OAAQ,CAACnB,EAAM,UAAUA,EAAM,iBAAiB,CAAC,EACjD,MAAO,CACL,OAAQ,EACR,SAAU,EACV,MAAO,EACR,CACF,CACF,CACF,CACF,EACD,CACE,KAAM,SACN,aAAc,CACZ,CACE,MAAO,GACP,QAAS,CACP,MAAOmB,EAAS,CAAC,EACjB,OAAQ,CAACH,CAAiB,EAC1B,MAAO,CACL,OAAQ,EACR,SAAU,EACV,MAAO,EACR,CACF,CACF,CACF,CACF,CACF,CACF,GA7CDqB,EAAWzB,EAAUC,EAAS,EAAGb,EAAM,UAAUA,EAAM,iBAAiB,EAAG,CAAE,iBAAkB,aAAa,CAAE,EAC9GqC,EAAWzB,EAAUC,EAAS,EAAI,EAAGG,EAAmB,CAAE,iBAAkB,cAAe,EAC3FF,EAAY,CAACV,EACX,OAASe,EAAS,CAAC,EAAI,mCAAqCmB,EAAyB1B,EAAUC,EAAS,EAAG,gBAAgB,EAC3H,OAASM,EAAS,CAAC,EAAI,kCAAkCnB,EAAM,UAAUe,CAAiB,CAAC,2DAA6DuB,EAAyB1B,EAAUC,EAAS,EAAI,EAAG,gBAAgB,CAAC,GA4C3N,CAAE,UAAWC,EAAU,KAAK;AAAA,CAAI,EAAG,YAAa,CAACI,EAAaM,CAAW,EAAE,KAAK;AAAA,CAAI,CAAG,CAC/F,CAMD,SAASe,EAAqB1C,EAAOe,EAAUC,EAAQ,CAErD,MAAMb,EAAQ,IAAIJ,EAAWC,CAAK,EAClC,IAAIO,EAAYJ,EAAM,aAAa,WAAW,EAE9C,MAAMwC,EAAkB,CAAC,mBAAmBxC,EAAM,oBAAoB,IAAI,EAC1E,UAAWyC,KAAYzC,EAAM,UAC3BwC,EAAgB,KAAK,UAAUC,CAAQ,GAAG,EAE5CD,EAAgB,KAAK,yBAAyB,EAC9C,MAAME,EAAgB,CAAC,2BAA4B,+BAA+B,EAC5EC,EAAW,CAAE,EAEnB3C,EAAM,UAAU,QAAQ,CAACqB,EAAKC,IAAU,CAClCA,IAAUtB,EAAM,kBAClB2C,EAAS,KAAKtB,CAAG,EAEjBsB,EAAS,KAAK,EAAE,CAExB,CAAK,EACDA,EAAS,KAAK,GAAG3C,EAAM,aAAa,EAAE,EAEtC,QAAS1B,EAAI,EAAGA,GAAK0B,EAAM,UAAU,OAAQ1B,IAC3CqE,EAAS,KAAK,EAAE,EAElBvC,GAAa8B,EAAoBM,EAAiBE,EAAeC,EAAU,GAAG,EAC9EvC,GAAa,OACb,MAAMwC,EAAQjC,EAAuBP,EAAWJ,EAAOY,EAAUC,CAAM,EACvE,MAAO,CAAE,UAAW+B,EAAM,UAAW,YAAaA,EAAM,YAAa,UAAW5C,EAAM,SAAW,CAClG,CAMD,SAAS6C,EAAuBhD,EAAOe,EAAUC,EAAQ,CAEvD,MAAMb,EAAQ,IAAIJ,EAAWC,CAAK,EAClC,IAAIO,EAAYJ,EAAM,aAAa,SAAS,EAE5C,MAAM8C,EAA4B9C,EAAM,UAAU,IAAI,CAAC+C,EAAKzE,IAAMA,IAAM0B,EAAM,kBAAoB+C,EAAM,CAAC,EACnGC,EAAiBnE,EAAUiE,EAA2B9C,EAAM,UAAW,CAC3E,uBAAwB,GACxB,YAAa,GACb,iBAAkB,YAClB,aAAc,EACpB,CAAK,EACDI,GAAa4C,EACb,MAAMJ,EAAQjC,EAAuBP,EAAWJ,EAAOY,EAAUC,CAAM,EACvE,MAAO,CAAE,UAAW+B,EAAM,UAAW,YAAaA,EAAM,YAAa,UAAW5C,EAAM,SAAW,CAClG,CAGD,KAAK,gBAAkB,UAAY,CACjC,KAAK,eAAiB,CAAE,EACxB,KAAK,iBAAmB,CAAE,EAC1B,KAAK,eAAiB,CAAE,EACxB,MAAMH,EAAQa,EAAe,KAAK,KAAO,CAAC,EACpCE,EAAW,CAAE,UAAW,CAAA,EAAI,YAAa,CAAA,CAAI,EACnD,IAAIqC,EAAU,CAAE,EAChB,MAAMC,EAAKC,EAAkB,CAAC,EAAG,CAAC,EAAG,KAAK,WAAW,EACrD,QAAS7E,EAAI,EAAG8E,EAAM,EAAG9E,EAAI,KAAK,aAAe8E,EAAM,IAAK,CAC1D,OAAQ,KAAK,IAAG,CACd,IAAK,GACH,OAAQF,EAAG5E,CAAC,EAAC,CACX,IAAK,GACH2E,EAAUJ,EAAsBhD,EAAO,KAAMvB,CAAC,EAC9C,MACF,IAAK,GACH2E,EAAUV,EAAoB1C,EAAO,KAAMvB,CAAC,EAC5C,KACH,CACDsC,EAAS,UAAY,CAACqC,EAAQ,SAAS,EACvCrC,EAAS,YAAc,CAACqC,EAAQ,WAAW,EAC3C,MACF,IAAK,GACHA,EAAUV,EAAoB1C,EAAO,KAAMvB,CAAC,EAC5CsC,EAAS,UAAY,CAACqC,EAAQ,SAAS,EACvCrC,EAAS,YAAc,CAACqC,EAAQ,WAAW,EAC3C,MACF,IAAK,GACHA,EAAUJ,EAAsBhD,EAAO,KAAMvB,CAAC,EAC9CsC,EAAS,UAAY,CAACqC,EAAQ,SAAS,EACvCrC,EAAS,YAAc,CAACqC,EAAQ,WAAW,EAC3C,MACF,IAAK,GACHA,EAAUV,EAAoB1C,EAAO,KAAMvB,CAAC,EAC5CsC,EAAS,UAAY,CAACqC,EAAQ,SAAS,EACvCrC,EAAS,YAAc,CAACqC,EAAQ,WAAW,EAC3CA,EAAUJ,EAAsB,SAAU,KAAMvE,CAAC,EACjDsC,EAAS,UAAU,KAAKqC,EAAQ,SAAS,EACzCrC,EAAS,YAAY,KAAKqC,EAAQ,WAAW,CAChD,CACG,KAAK,oBAAoB3E,EAAG,GAAG2E,EAAQ,SAAS,IAClD,KAAK,eAAe,KAAK,GAAGrC,EAAS,SAAS,EAC9C,KAAK,iBAAiB,KAAK,GAAGA,EAAS,WAAW,EAClDtC,KAEF8E,GACD,CACDC,EAAwB,IAAI,CAC7B,CACH"}