File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/3G12-RzMOitwq.js.map
{"version":3,"file":"3G12-RzMOitwq.js","sources":["../../src/exercices/3e/3G12.js"],"sourcesContent":["import { codageAngle } from '../../lib/2d/angles.js'\nimport { tracePoint } from '../../lib/2d/points.js'\nimport { segment } from '../../lib/2d/segmentsVecteurs.js'\nimport { labelPoint, texteParPosition } from '../../lib/2d/textes.js'\nimport { rotation } from '../../lib/2d/transformations.js'\nimport { choice, shuffle } from '../../lib/outils/arrayOutils'\nimport { miseEnEvidence } from '../../lib/outils/embellissements'\nimport { arcenciel, texcolors } from '../../lib/format/style'\nimport { nombreAvecEspace } from '../../lib/outils/texNombre.js'\nimport { rotationAnimee } from '../../modules/2dAnimation.js'\nimport { colorToLatexOrHTML, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\nimport { egal, listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { pavage } from '../../modules/Pavage.js'\nimport Exercice from '../Exercice.js'\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\n\nexport const titre = 'Finding the image of a figure by rotating in a tiling'\nexport const dateDePublication = '16/12/2020'\nexport const dateDeModifImportante = '29/01/2023' // Par EE\nexport const interactifReady = true\nexport const interactifType = 'mathLive'\nexport const amcReady = true\nexport const amcType = 'AMCHybride'\n\n/**\n * Trouver l'image par sune rotation d'une figure dans un pavage\n * @author Jean-Claude Lhote\n * Rajout par EE d'un quatrième paramètre, de l'interactif et de l'AMC\n */\nexport const uuid = '442e0'\nexport const ref = '3G12'\nexport default function PavageEtRotation2D () {\n Exercice.call(this) // Héritage de la classe Exercice()\n this.titre = titre\n this.consigne = ''\n this.nbQuestions = 3\n this.nbQuestionsModifiable = true\n this.correctionDetailleeDisponible = true\n this.correctionDetaillee = true\n this.spacing = 2\n this.nbCols = 1\n this.nbColsCorr = 1\n this.sup = 1 // 1 pour des pavages modestes, 2 pour des plus grand.\n this.sup2 = false // On cache les barycentres par défaut.\n this.sup3 = 7\n this.sup4 = true // On ignore les rotations centrales par défaut.\n context.isHtml ? (this.spacingCorr = 2.5) : (this.spacingCorr = 1.5)\n this.nouvelleVersion = function () {\n this.sup = Number(this.sup)\n this.sup3 = Number(this.sup3)\n const videcouples = function (tableau) {\n for (let k = 0; k < tableau.length; k++) {\n if (tableau[k][0] === tableau[k][1]) {\n tableau.splice(k, 1)\n }\n for (let j = k + 1; j < tableau.length; j++) {\n // eslint-disable-next-line no-empty\n if (tableau[k][1] === tableau[j][0]) {\n\n }\n }\n }\n return tableau\n }\n const compare2polys = function (poly1, poly2) {\n if (comparenbsommets(poly1, poly2)) {\n return comparesommets(poly1, poly2)\n } else {\n return false\n }\n }\n const comparenbsommets = function (poly1, poly2) {\n return poly1.listePoints.length === poly2.listePoints.length\n }\n\n const compare2sommets = function (sommet1, sommet2) {\n return egal(sommet1.x, sommet2.x, 0.1) && egal(sommet1.y, sommet2.y, 0.1)\n }\n const comparesommets = function (poly1, poly2) {\n let trouve = false\n let trouves = 0\n if (comparenbsommets(poly1, poly2)) {\n for (const P of poly1.listePoints) {\n for (const M of poly2.listePoints) {\n if (compare2sommets(M, P)) {\n trouve = true\n }\n if (trouve) {\n break\n }\n }\n if (trouve) {\n trouves++\n trouve = false\n } else {\n trouves -= 100\n }\n if (trouves < 0) {\n break\n }\n }\n }\n return trouves === poly1.listePoints.length\n }\n\n const rotaccion = function (pavage, A, angle, numero) {\n const poly = pavage.polygones[numero - 1]\n let pol\n const result = -1\n const sympoly = rotation(poly, A, angle)\n for (let k = 0; k < pavage.polygones.length; k++) {\n pol = pavage.polygones[k]\n if (compare2polys(sympoly, pol)) {\n return k + 1\n }\n }\n return result\n }\n\n const objets = []\n const objetsCorrection = []\n let taillePavage = parseInt(this.sup)\n if (taillePavage < 1 || taillePavage > 2) {\n taillePavage = 1\n }\n if (this.nbQuestions > 5) {\n taillePavage = 2\n }\n this.listeCorrections = []\n this.listeQuestions = []\n this.autoCorrection = []\n let Nx\n let Ny\n let index1\n let A\n let image\n let couples = []\n let tailles = []\n let monpavage\n let fenetre\n let texte = ''\n let texteCorr = ''\n let typeDePavage = parseInt(this.sup)\n let nombreTentatives\n let nombrePavageTestes = 1\n const propositionsAMC = []\n let texteAMC\n let sensdirect, M, N, trace, label, P1, P2, P3, t\n const alphas = [[60, 120, 180], [90, 180], [60, 120, 180], [60, 120, 90], [45, 90, 135, 180], [60, 120, 180], [60, 120, 180]]\n let alpha\n if (this.sup3 === 8) {\n typeDePavage = randint(1, 7)\n } else {\n typeDePavage = parseInt(this.sup3)\n }\n while (couples.length < this.nbQuestions && nombrePavageTestes < 6) {\n nombreTentatives = 0\n monpavage = pavage() // On crée l'Tile object that goes s'appeler monpavage\n tailles = [[[3, 2], [3, 2], [2, 2], [2, 2], [2, 2], [2, 2], [3, 2]], [[4, 3], [4, 3], [3, 3], [3, 3], [3, 3], [3, 2], [5, 3]]]\n\n Nx = tailles[taillePavage - 1][typeDePavage - 1][0]\n Ny = tailles[taillePavage - 1][typeDePavage - 1][1]\n monpavage.construit(typeDePavage, Nx, Ny, 3) // On initialise toutes les propriétés de l'objet.\n fenetre = monpavage.fenetre\n // windowMathalea2d = [window.xmin, window.ymin, window.xmax, window.ymax];\n while (couples.length < this.nbQuestions + 2 && nombreTentatives < 3) { // On cherche d pour avoir suffisamment de couples\n couples = [] // On vide la liste des couples pour une nouvelle recherche\n\n index1 = randint(Math.floor(monpavage.nb_polygones / 3), Math.ceil(monpavage.nb_polygones * 2 / 3)) // On choisit 1 point dans un des polygones\n if (choice([true, false])) {\n A = monpavage.polygones[index1].listePoints[randint(0, monpavage.polygones[index1].listePoints.length - 1)] // On choisit un sommet\n } else {\n A = monpavage.barycentres[index1] // Ou on choisit un barycentre\n }\n while (A.x - 5 < fenetre.xmin || A.x + 5 > fenetre.xmax || A.y - 5 < fenetre.ymin || A.y + 5 > fenetre.ymax) {\n index1 = randint(Math.floor(monpavage.nb_polygones / 3), Math.ceil(monpavage.nb_polygones * 2 / 3)) // On choisit 1 point dans un des polygones\n if (choice([true, false])) {\n A = monpavage.polygones[index1].listePoints[randint(0, monpavage.polygones[index1].listePoints.length - 1)] // On choisit un sommet\n } else {\n A = monpavage.barycentres[index1] // Ou on choisit un barycentre\n }\n }\n A.nom = 'A'\n A.positionLabel = 'below'\n trace = tracePoint(A, 'red') // la trace du centre de symétrie sera rouge et grosse\n label = labelPoint(A, 'red')\n trace.epaisseur = 3\n trace.taille = 4\n // alpha = alphas[PavingType - 1][randint(0, alphas[PavingType - 1].length - 1)]\n alpha = choice(alphas[typeDePavage - 1], this.sup4 ? 180 : 0)\n sensdirect = choice([1, -1])\n for (let i = 1; i <= monpavage.nb_polygones; i++) { // on crée une liste des couples (antécédents, images)\n image = rotaccion(monpavage, A, alpha * sensdirect, i)\n if (image !== -1) { // si l'image du polygone i existe, on ajoute le couple à la liste\n couples.push([i, image])\n }\n }\n couples = videcouples(couples) // supprime tous les couples en double (x,y)=(y,x)\n nombreTentatives++\n }\n if (couples.length < this.nbQuestions) {\n if (this.sup3 === 7) {\n typeDePavage = (typeDePavage + 1) % 5 + 1\n }\n nombrePavageTestes++\n }\n }\n if (couples.length < this.nbQuestions) {\n console.error('Too many questions, increase the size of the tiling!')\n return\n }\n\n objets.push(trace) // le centre est OK on pousse sa trace\n objets.push(label) // et son label\n couples = shuffle(couples) // on mélange les couples\n const texteNoir = []\n const texteGris = []\n for (let i = 0; i < monpavage.nb_polygones; i++) {\n texteNoir.push(texteParPosition(nombreAvecEspace(i + 1), monpavage.barycentres[i].x, monpavage.barycentres[i].y + 0.5, 'medium', 'black', 1, 0, true))\n texteGris.push(texteParPosition(nombreAvecEspace(i + 1), monpavage.barycentres[i].x, monpavage.barycentres[i].y + 0.5, 'medium', 'gray', 1, 0, true))\n }\n if (this.sup2) { // Doit-on montrer les centres des figures ?\n for (let i = 0; i < monpavage.nb_polygones; i++) {\n objets.push(monpavage.tracesCentres[i])\n }\n }\n for (let i = 0; i < monpavage.nb_polygones; i++) { // il faut afficher tous les polygones du pavage\n objets.push(monpavage.polygones[i])\n }\n texte = mathalea2d(fenetre, objets, texteNoir) // monpavage.fenetre est calibrée pour faire entrer le pavage dans une feuille A4\n texte += `<br>Let the rotation of center $A$ and angle ${alpha}° be in the direction`\n if (sensdirect === 1) {\n texte += 'counterclockwise.<br>'\n } else {\n texte += 'clockwise.<br>'\n }\n texteCorr += `Let the rotation of center $A$ and angle ${alpha}° be in the direction`\n if (sensdirect === 1) {\n texteCorr += 'counterclockwise. <br>'\n } else {\n texteCorr += 'clockwise. <br>'\n }\n const consigneAMC = texte\n for (let i = 0; i < this.nbQuestions; i++) {\n texteAMC = `What is the image of the figure $${couples[i][0]}$?` + ajouteChampTexteMathLive(this, i, 'width25 inline') + '<br>'\n texte += texteAMC\n texteCorr += `The image of figure $${couples[i][0]}$ is figure $${miseEnEvidence(couples[i][1])}$.<br>`\n\n if (context.isAmc) {\n propositionsAMC.push({\n type: 'AMCNum',\n propositions: [\n {\n texte: texteCorr,\n reponse: {\n texte: texteAMC,\n valeur: couples[i][1],\n param: {\n signe: false,\n digits: 2,\n decimals: 0\n }\n }\n }\n ]\n\n })\n } else {\n setReponse(this, i, couples[i][1])\n }\n if (this.correctionDetaillee) {\n t = this.nbQuestions * 3\n M = monpavage.barycentres[couples[i][0] - 1]\n N = monpavage.barycentres[couples[i][1] - 1]\n P1 = monpavage.polygones[couples[i][0] - 1]\n P1.color = colorToLatexOrHTML(texcolors(i))\n P1.couleurDeRemplissage = colorToLatexOrHTML(texcolors(i))\n P1.opaciteDeRemplissage = 0.5\n P1.epaisseur = 2\n P2 = monpavage.polygones[couples[i][1] - 1]\n P2.color = colorToLatexOrHTML(texcolors(i))\n P2.couleurDeRemplissage = colorToLatexOrHTML(texcolors(i))\n P2.opaciteDeRemplissage = 0.5\n P2.epaisseur = 2\n P3 = rotationAnimee(P1, A, alpha * sensdirect, `begin=\"${i * 3}s;${i * 3 + t}s;${i * 3 + t * 2}s\" end=\"${i * 3 + 2}s;${i * 3 + t + 2}s;${i * 3 + t * 2 + 2}s\" dur=\"2s\" repeatCount=\"indefinite\" repeatDur=\"${9 * this.nbQuestions}s\" id=\"poly-${i}-anim\"`)\n P3.color = colorToLatexOrHTML(texcolors(i))\n P3.epaisseur = 2\n objetsCorrection.push(tracePoint(M, N), segment(A, M, texcolors(i)), segment(A, N, arcenciel(i)), codageAngle(M, A, N, 0.8, '', arcenciel(i), 1, 1, 'blue', 0.2, true), P1, P2, P3)\n }\n }\n if (this.correctionDetaillee) {\n texteCorr += mathalea2d(fenetre, objets, objetsCorrection, texteGris)\n }\n if (context.isAmc) {\n this.autoCorrection[0] = {\n options: { multicols: true },\n enonce: consigneAMC,\n propositions: propositionsAMC\n }\n }\n\n this.listeQuestions.push(texte)\n this.listeCorrections.push(texteCorr)\n listeQuestionsToContenu(this)\n }\n this.besoinFormulaireNumerique = ['Size of the tiling (the large one is automatic beyond 5 questions)', 2, ' 1: Modest size\\n2: Large size']\n this.besoinFormulaire2CaseACocher = ['Show centers']\n this.besoinFormulaire3Numerique = ['Choice of paving', 8, '1: Equilateral triangles\\n2: Squares\\n3: Regular hexagons\\n4: Squares and equilateral triangles\\n5: Octagons and squares\\n 6: Rhombuses (school hexagonal tiling)\\n7: Hexagons and equilateral triangles\\n8: One of seven random tilings']\n this.besoinFormulaire4CaseACocher = ['Ignore 180° angle']\n}\n"],"names":["titre","dateDePublication","dateDeModifImportante","interactifReady","interactifType","amcReady","amcType","uuid","ref","PavageEtRotation2D","Exercice","context","videcouples","tableau","k","j","compare2polys","poly1","poly2","comparenbsommets","comparesommets","compare2sommets","sommet1","sommet2","egal","trouve","trouves","P","M","rotaccion","pavage","A","angle","numero","poly","pol","result","sympoly","rotation","objets","objetsCorrection","taillePavage","Nx","Ny","index1","image","couples","tailles","monpavage","fenetre","texte","texteCorr","typeDePavage","nombreTentatives","nombrePavageTestes","propositionsAMC","texteAMC","sensdirect","N","trace","label","P1","P2","P3","t","alphas","alpha","randint","choice","tracePoint","labelPoint","i","shuffle","texteNoir","texteGris","texteParPosition","nombreAvecEspace","mathalea2d","consigneAMC","ajouteChampTexteMathLive","miseEnEvidence","setReponse","colorToLatexOrHTML","texcolors","rotationAnimee","segment","arcenciel","codageAngle","listeQuestionsToContenu"],"mappings":"2TAkBY,MAACA,GAAQ,wDACRC,GAAoB,aACpBC,GAAwB,aACxBC,GAAkB,GAClBC,GAAiB,WACjBC,GAAW,GACXC,GAAU,aAOVC,GAAO,QACPC,GAAM,OACJ,SAASC,IAAsB,CAC5CC,GAAS,KAAK,IAAI,EAClB,KAAK,MAAQV,GACb,KAAK,SAAW,GAChB,KAAK,YAAc,EACnB,KAAK,sBAAwB,GAC7B,KAAK,8BAAgC,GACrC,KAAK,oBAAsB,GAC3B,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,WAAa,EAClB,KAAK,IAAM,EACX,KAAK,KAAO,GACZ,KAAK,KAAO,EACZ,KAAK,KAAO,GACZW,EAAQ,OAAU,KAAK,YAAc,IAAQ,KAAK,YAAc,IAChE,KAAK,gBAAkB,UAAY,CACjC,KAAK,IAAM,OAAO,KAAK,GAAG,EAC1B,KAAK,KAAO,OAAO,KAAK,IAAI,EAC5B,MAAMC,EAAc,SAAUC,EAAS,CACrC,QAASC,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAAK,CACnCD,EAAQC,CAAC,EAAE,CAAC,IAAMD,EAAQC,CAAC,EAAE,CAAC,GAChCD,EAAQ,OAAOC,EAAG,CAAC,EAErB,QAASC,EAAID,EAAI,EAAGC,EAAIF,EAAQ,OAAQE,IAElCF,EAAQC,CAAC,EAAE,CAAC,EAAMD,EAAQE,CAAC,EAAE,CAAC,CAIrC,CACD,OAAOF,CACR,EACKG,EAAgB,SAAUC,EAAOC,EAAO,CAC5C,OAAIC,EAAiBF,EAAOC,CAAK,EACxBE,GAAeH,EAAOC,CAAK,EAE3B,EAEV,EACKC,EAAmB,SAAUF,EAAOC,EAAO,CAC/C,OAAOD,EAAM,YAAY,SAAWC,EAAM,YAAY,MACvD,EAEKG,EAAkB,SAAUC,EAASC,EAAS,CAClD,OAAOC,EAAKF,EAAQ,EAAGC,EAAQ,EAAG,EAAG,GAAKC,EAAKF,EAAQ,EAAGC,EAAQ,EAAG,EAAG,CACzE,EACKH,GAAiB,SAAUH,EAAOC,EAAO,CAC7C,IAAIO,EAAS,GACTC,EAAU,EACd,GAAIP,EAAiBF,EAAOC,CAAK,EAC/B,UAAWS,KAAKV,EAAM,YAAa,CACjC,UAAWW,KAAKV,EAAM,YAIpB,GAHIG,EAAgBO,EAAGD,CAAC,IACtBF,EAAS,IAEPA,EACF,MASJ,GANIA,GACFC,IACAD,EAAS,IAETC,GAAW,IAETA,EAAU,EACZ,KAEH,CAEH,OAAOA,IAAYT,EAAM,YAAY,MACtC,EAEKY,GAAY,SAAUC,EAAQC,EAAGC,EAAOC,EAAQ,CACpD,MAAMC,EAAOJ,EAAO,UAAUG,EAAS,CAAC,EACxC,IAAIE,EACJ,MAAMC,GAAS,GACTC,GAAUC,GAASJ,EAAMH,EAAGC,CAAK,EACvC,QAASlB,EAAI,EAAGA,EAAIgB,EAAO,UAAU,OAAQhB,IAE3C,GADAqB,EAAML,EAAO,UAAUhB,CAAC,EACpBE,EAAcqB,GAASF,CAAG,EAC5B,OAAOrB,EAAI,EAGf,OAAOsB,EACR,EAEKG,EAAS,CAAE,EACXC,EAAmB,CAAE,EAC3B,IAAIC,EAAe,SAAS,KAAK,GAAG,GAChCA,EAAe,GAAKA,EAAe,KACrCA,EAAe,GAEb,KAAK,YAAc,IACrBA,EAAe,GAEjB,KAAK,iBAAmB,CAAE,EAC1B,KAAK,eAAiB,CAAE,EACxB,KAAK,eAAiB,CAAE,EACxB,IAAIC,EACAC,EACAC,EACAb,EACAc,EACAC,EAAU,CAAE,EACZC,EAAU,CAAE,EACZC,EACAC,EACAC,EAAQ,GACRC,EAAY,GACZC,EAAe,SAAS,KAAK,GAAG,EAChCC,EACAC,EAAqB,EACzB,MAAMC,EAAkB,CAAE,EAC1B,IAAIC,EACAC,EAAY7B,EAAG8B,EAAGC,EAAOC,EAAOC,EAAIC,EAAIC,EAAIC,EAChD,MAAMC,GAAS,CAAC,CAAC,GAAI,IAAK,GAAG,EAAG,CAAC,GAAI,GAAG,EAAG,CAAC,GAAI,IAAK,GAAG,EAAG,CAAC,GAAI,IAAK,EAAE,EAAG,CAAC,GAAI,GAAI,IAAK,GAAG,EAAG,CAAC,GAAI,IAAK,GAAG,EAAG,CAAC,GAAI,IAAK,GAAG,CAAC,EAC5H,IAAIC,EAMJ,IALI,KAAK,OAAS,EAChBd,EAAee,EAAQ,EAAG,CAAC,EAE3Bf,EAAe,SAAS,KAAK,IAAI,EAE5BN,EAAQ,OAAS,KAAK,aAAeQ,EAAqB,GAAG,CAUlE,IATAD,EAAmB,EACnBL,EAAYlB,GAAQ,EACpBiB,EAAU,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,CAAC,EAE7HL,EAAKK,EAAQN,EAAe,CAAC,EAAEW,EAAe,CAAC,EAAE,CAAC,EAClDT,EAAKI,EAAQN,EAAe,CAAC,EAAEW,EAAe,CAAC,EAAE,CAAC,EAClDJ,EAAU,UAAUI,EAAcV,EAAIC,EAAI,CAAC,EAC3CM,EAAUD,EAAU,QAEbF,EAAQ,OAAS,KAAK,YAAc,GAAKO,EAAmB,GAAG,CASpE,IARAP,EAAU,CAAE,EAEZF,EAASuB,EAAQ,KAAK,MAAMnB,EAAU,aAAe,CAAC,EAAG,KAAK,KAAKA,EAAU,aAAe,EAAI,CAAC,CAAC,EAC9FoB,EAAO,CAAC,GAAM,EAAK,CAAC,EACtBrC,EAAIiB,EAAU,UAAUJ,CAAM,EAAE,YAAYuB,EAAQ,EAAGnB,EAAU,UAAUJ,CAAM,EAAE,YAAY,OAAS,CAAC,CAAC,EAE1Gb,EAAIiB,EAAU,YAAYJ,CAAM,EAE3Bb,EAAE,EAAI,EAAIkB,EAAQ,MAAQlB,EAAE,EAAI,EAAIkB,EAAQ,MAAQlB,EAAE,EAAI,EAAIkB,EAAQ,MAAQlB,EAAE,EAAI,EAAIkB,EAAQ,MACrGL,EAASuB,EAAQ,KAAK,MAAMnB,EAAU,aAAe,CAAC,EAAG,KAAK,KAAKA,EAAU,aAAe,EAAI,CAAC,CAAC,EAC9FoB,EAAO,CAAC,GAAM,EAAK,CAAC,EACtBrC,EAAIiB,EAAU,UAAUJ,CAAM,EAAE,YAAYuB,EAAQ,EAAGnB,EAAU,UAAUJ,CAAM,EAAE,YAAY,OAAS,CAAC,CAAC,EAE1Gb,EAAIiB,EAAU,YAAYJ,CAAM,EAGpCb,EAAE,IAAM,IACRA,EAAE,cAAgB,QAClB4B,EAAQU,EAAWtC,EAAG,KAAK,EAC3B6B,EAAQU,GAAWvC,EAAG,KAAK,EAC3B4B,EAAM,UAAY,EAClBA,EAAM,OAAS,EAEfO,EAAQE,EAAOH,GAAOb,EAAe,CAAC,EAAG,KAAK,KAAO,IAAM,CAAC,EAC5DK,EAAaW,EAAO,CAAC,EAAG,EAAE,CAAC,EAC3B,QAASG,EAAI,EAAGA,GAAKvB,EAAU,aAAcuB,IAC3C1B,EAAQhB,GAAUmB,EAAWjB,EAAGmC,EAAQT,EAAYc,CAAC,EACjD1B,IAAU,IACZC,EAAQ,KAAK,CAACyB,EAAG1B,CAAK,CAAC,EAG3BC,EAAUlC,EAAYkC,CAAO,EAC7BO,GACD,CACGP,EAAQ,OAAS,KAAK,cACpB,KAAK,OAAS,IAChBM,GAAgBA,EAAe,GAAK,EAAI,GAE1CE,IAEH,CACD,GAAIR,EAAQ,OAAS,KAAK,YAAa,CACrC,QAAQ,MAAM,sDAAsD,EACpE,MACD,CAEDP,EAAO,KAAKoB,CAAK,EACjBpB,EAAO,KAAKqB,CAAK,EACjBd,EAAU0B,GAAQ1B,CAAO,EACzB,MAAM2B,EAAY,CAAE,EACdC,EAAY,CAAE,EACpB,QAASH,EAAI,EAAGA,EAAIvB,EAAU,aAAcuB,IAC1CE,EAAU,KAAKE,EAAiBC,EAAiBL,EAAI,CAAC,EAAGvB,EAAU,YAAYuB,CAAC,EAAE,EAAGvB,EAAU,YAAYuB,CAAC,EAAE,EAAI,GAAK,SAAU,QAAS,EAAG,EAAG,EAAI,CAAC,EACrJG,EAAU,KAAKC,EAAiBC,EAAiBL,EAAI,CAAC,EAAGvB,EAAU,YAAYuB,CAAC,EAAE,EAAGvB,EAAU,YAAYuB,CAAC,EAAE,EAAI,GAAK,SAAU,OAAQ,EAAG,EAAG,EAAI,CAAC,EAEtJ,GAAI,KAAK,KACP,QAASA,EAAI,EAAGA,EAAIvB,EAAU,aAAcuB,IAC1ChC,EAAO,KAAKS,EAAU,cAAcuB,CAAC,CAAC,EAG1C,QAASA,EAAI,EAAGA,EAAIvB,EAAU,aAAcuB,IAC1ChC,EAAO,KAAKS,EAAU,UAAUuB,CAAC,CAAC,EAEpCrB,EAAQ2B,EAAW5B,EAASV,EAAQkC,CAAS,EAC7CvB,GAAS,gDAAgDgB,CAAK,wBAC1DT,IAAe,EACjBP,GAAS,wBAETA,GAAS,iBAEXC,GAAa,4CAA4Ce,CAAK,wBAC1DT,IAAe,EACjBN,GAAa,yBAEbA,GAAa,kBAEf,MAAM2B,GAAc5B,EACpB,QAASqB,EAAI,EAAGA,EAAI,KAAK,YAAaA,IACpCf,EAAW,oCAAoCV,EAAQyB,CAAC,EAAE,CAAC,CAAC,KAAOQ,GAAyB,KAAMR,EAAG,gBAAgB,EAAI,OACzHrB,GAASM,EACTL,GAAa,wBAAwBL,EAAQyB,CAAC,EAAE,CAAC,CAAC,gBAAgBS,GAAelC,EAAQyB,CAAC,EAAE,CAAC,CAAC,CAAC,SAE3F5D,EAAQ,MACV4C,EAAgB,KAAK,CACnB,KAAM,SACN,aAAc,CACZ,CACE,MAAOJ,EACP,QAAS,CACP,MAAOK,EACP,OAAQV,EAAQyB,CAAC,EAAE,CAAC,EACpB,MAAO,CACL,MAAO,GACP,OAAQ,EACR,SAAU,CACX,CACF,CACF,CACF,CAEX,CAAS,EAEDU,GAAW,KAAMV,EAAGzB,EAAQyB,CAAC,EAAE,CAAC,CAAC,EAE/B,KAAK,sBACPP,EAAI,KAAK,YAAc,EACvBpC,EAAIoB,EAAU,YAAYF,EAAQyB,CAAC,EAAE,CAAC,EAAI,CAAC,EAC3Cb,EAAIV,EAAU,YAAYF,EAAQyB,CAAC,EAAE,CAAC,EAAI,CAAC,EAC3CV,EAAKb,EAAU,UAAUF,EAAQyB,CAAC,EAAE,CAAC,EAAI,CAAC,EAC1CV,EAAG,MAAQqB,EAAmBC,EAAUZ,CAAC,CAAC,EAC1CV,EAAG,qBAAuBqB,EAAmBC,EAAUZ,CAAC,CAAC,EACzDV,EAAG,qBAAuB,GAC1BA,EAAG,UAAY,EACfC,EAAKd,EAAU,UAAUF,EAAQyB,CAAC,EAAE,CAAC,EAAI,CAAC,EAC1CT,EAAG,MAAQoB,EAAmBC,EAAUZ,CAAC,CAAC,EAC1CT,EAAG,qBAAuBoB,EAAmBC,EAAUZ,CAAC,CAAC,EACzDT,EAAG,qBAAuB,GAC1BA,EAAG,UAAY,EACfC,EAAKqB,GAAevB,EAAI9B,EAAGmC,EAAQT,EAAY,UAAUc,EAAI,CAAC,KAAKA,EAAI,EAAIP,CAAC,KAAKO,EAAI,EAAIP,EAAI,CAAC,WAAWO,EAAI,EAAI,CAAC,KAAKA,EAAI,EAAIP,EAAI,CAAC,KAAKO,EAAI,EAAIP,EAAI,EAAI,CAAC,mDAAmD,EAAI,KAAK,WAAW,eAAeO,CAAC,QAAQ,EACzPR,EAAG,MAAQmB,EAAmBC,EAAUZ,CAAC,CAAC,EAC1CR,EAAG,UAAY,EACfvB,EAAiB,KAAK6B,EAAWzC,EAAG8B,CAAC,EAAG2B,EAAQtD,EAAGH,EAAGuD,EAAUZ,CAAC,CAAC,EAAGc,EAAQtD,EAAG2B,EAAG4B,EAAUf,CAAC,CAAC,EAAGgB,GAAY3D,EAAGG,EAAG2B,EAAG,GAAK,GAAI4B,EAAUf,CAAC,EAAG,EAAG,EAAG,OAAQ,GAAK,EAAI,EAAGV,EAAIC,EAAIC,CAAE,GAGlL,KAAK,sBACPZ,GAAa0B,EAAW5B,EAASV,EAAQC,EAAkBkC,CAAS,GAElE/D,EAAQ,QACV,KAAK,eAAe,CAAC,EAAI,CACvB,QAAS,CAAE,UAAW,EAAM,EAC5B,OAAQmE,GACR,aAAcvB,CACf,GAGH,KAAK,eAAe,KAAKL,CAAK,EAC9B,KAAK,iBAAiB,KAAKC,CAAS,EACpCqC,GAAwB,IAAI,CAC7B,EACD,KAAK,0BAA4B,CAAC,qEAAsE,EAAG;AAAA,cAAgC,EAC3I,KAAK,6BAA+B,CAAC,cAAc,EACnD,KAAK,2BAA6B,CAAC,mBAAoB,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAA0O,EACpS,KAAK,6BAA+B,CAAC,mBAAmB,CAC1D"}