{"id":35570,"date":"2026-08-17T17:18:20","date_gmt":"2026-08-17T22:18:20","guid":{"rendered":"https:\/\/deev.pe\/?page_id=35570"},"modified":"2026-08-17T17:21:23","modified_gmt":"2026-08-17T22:21:23","slug":"personaliza-tu-stand","status":"publish","type":"page","link":"https:\/\/deev.pe\/en\/cierre-de-minas\/auspicios-2026\/personaliza-tu-stand\/","title":{"rendered":"Visualizador 3D Premium"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"35570\" class=\"elementor elementor-35570\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e214ba7 e-con-full e-flex e-con e-parent\" data-id=\"e214ba7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-933cd84 elementor-widget elementor-widget-html\" data-id=\"933cd84\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\" \/>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\r\n<title>DEEV | Visualizador 3D de Stand<\/title>\r\n\r\n<style>\r\n  :root{\r\n    --bg:#0e1116;\r\n    --panel:rgba(14,18,24,.95);\r\n    --panel2:rgba(20,25,32,.97);\r\n    --text:#f5f7fa;\r\n    --muted:#9fa6b2;\r\n    --line:rgba(255,255,255,.10);\r\n    --blue:#1266b0;\r\n    --green:#96ba3c;\r\n    --chip:rgba(18,102,176,.16);\r\n  }\r\n\r\n  *{box-sizing:border-box;margin:0;padding:0}\r\n\r\n  html,body{\r\n    width:100%;\r\n    height:100%;\r\n    overflow:hidden;\r\n    background:var(--bg);\r\n    color:var(--text);\r\n    font-family:Inter,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\r\n  }\r\n\r\n  #canvas-container{\r\n    position:fixed;\r\n    inset:0;\r\n    width:100vw;\r\n    height:100vh;\r\n  }\r\n\r\n  #panel{\r\n    position:absolute;\r\n    top:22px;\r\n    right:22px;\r\n    left:auto;\r\n    width:360px;\r\n    max-height:calc(100vh - 44px);\r\n    overflow:auto;\r\n    z-index:20;\r\n    background:linear-gradient(180deg,var(--panel),var(--panel2));\r\n    border:1px solid var(--line);\r\n    border-radius:20px;\r\n    box-shadow:0 22px 60px rgba(0,0,0,.42);\r\n    backdrop-filter:blur(18px);\r\n  }\r\n\r\n  #panel::-webkit-scrollbar{width:7px}\r\n  #panel::-webkit-scrollbar-thumb{background:#373b44;border-radius:20px}\r\n\r\n  #brandBar{\r\n    position:absolute;\r\n    top:22px;\r\n    left:22px;\r\n    z-index:20;\r\n    display:flex;\r\n    align-items:center;\r\n    gap:14px;\r\n    padding:14px 18px;\r\n    border-radius:18px;\r\n    border:1px solid rgba(255,255,255,.10);\r\n    background:linear-gradient(180deg,rgba(14,18,24,.88),rgba(18,24,31,.80));\r\n    box-shadow:0 18px 48px rgba(0,0,0,.32);\r\n    backdrop-filter:blur(16px);\r\n  }\r\n\r\n  #brandBar img{\r\n    display:block;\r\n    width:132px;\r\n    height:auto;\r\n  }\r\n\r\n  .brand-copy strong{\r\n    display:block;\r\n    font-size:15px;\r\n    letter-spacing:-.01em;\r\n    margin-bottom:3px;\r\n  }\r\n\r\n  .brand-copy span{\r\n    display:block;\r\n    max-width:330px;\r\n    color:#b6bec9;\r\n    font-size:11px;\r\n    line-height:1.35;\r\n  }\r\n\r\n\r\n  .head{\r\n    padding:18px 18px 16px;\r\n    border-bottom:1px solid var(--line);\r\n  }\r\n\r\n  .eyebrow{\r\n    font-size:10px;\r\n    letter-spacing:.18em;\r\n    text-transform:uppercase;\r\n    color:#9cb4d6;\r\n    font-weight:800;\r\n    margin-bottom:8px;\r\n  }\r\n\r\n  h1{\r\n    font-size:22px;\r\n    line-height:1.06;\r\n    letter-spacing:-.03em;\r\n  }\r\n\r\n  .head-copy{\r\n    margin-top:9px;\r\n    color:#aab3bf;\r\n    font-size:11px;\r\n    line-height:1.45;\r\n  }\r\n\r\n  .section{\r\n    padding:14px 18px;\r\n    border-bottom:1px solid var(--line);\r\n  }\r\n  .section:last-child{border-bottom:none}\r\n\r\n  .section-title{\r\n    font-size:10px;\r\n    font-weight:800;\r\n    letter-spacing:.12em;\r\n    text-transform:uppercase;\r\n    color:#c9ced6;\r\n    margin-bottom:10px;\r\n  }\r\n\r\n  label{\r\n    display:block;\r\n    font-size:11px;\r\n    color:#9fa5b0;\r\n    margin-bottom:6px;\r\n  }\r\n\r\n  select{\r\n    width:100%;\r\n    border:1px solid var(--line);\r\n    background:#0e1014;\r\n    color:white;\r\n    border-radius:9px;\r\n    padding:10px 11px;\r\n    font-size:12px;\r\n    outline:none;\r\n  }\r\n\r\n  .control{margin-top:11px}\r\n  .control:first-of-type{margin-top:0}\r\n\r\n  .range-head{\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    margin-bottom:6px;\r\n  }\r\n\r\n  .range-head label{margin:0}\r\n\r\n  .value{\r\n    font-size:10px;\r\n    color:#dce0e6;\r\n    background:rgba(255,255,255,.07);\r\n    border:1px solid var(--line);\r\n    padding:4px 7px;\r\n    border-radius:999px;\r\n  }\r\n\r\n  input[type=\"range\"]{\r\n    width:100%;\r\n    accent-color:var(--blue);\r\n    cursor:pointer;\r\n  }\r\n\r\n  .btn-grid{\r\n    display:grid;\r\n    grid-template-columns:repeat(3,1fr);\r\n    gap:7px;\r\n  }\r\n\r\n  button{\r\n    border:1px solid var(--line);\r\n    background:rgba(255,255,255,.065);\r\n    color:#eef1f4;\r\n    border-radius:9px;\r\n    padding:9px 8px;\r\n    min-height:38px;\r\n    font-size:11px;\r\n    font-weight:700;\r\n    cursor:pointer;\r\n    transition:.18s ease;\r\n  }\r\n\r\n  button:hover{background:rgba(255,255,255,.11)}\r\n  button.active{\r\n    background:#fff;\r\n    color:#111318;\r\n    border-color:#fff;\r\n  }\r\n\r\n  .upload{\r\n    position:relative;\r\n    overflow:hidden;\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    min-height:42px;\r\n    border:1px dashed rgba(255,255,255,.20);\r\n    border-radius:9px;\r\n    color:#bcc2cb;\r\n    background:rgba(255,255,255,.025);\r\n    font-size:11px;\r\n    cursor:pointer;\r\n    text-align:center;\r\n    padding:8px;\r\n  }\r\n\r\n  .upload:hover{border-color:#8c94a0;color:#fff}\r\n  .upload input{\r\n    position:absolute;\r\n    inset:0;\r\n    opacity:0;\r\n    cursor:pointer;\r\n  }\r\n\r\n  .switch-row{\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    gap:12px;\r\n  }\r\n\r\n  .switch-copy strong{\r\n    display:block;\r\n    font-size:12px;\r\n    margin-bottom:2px;\r\n  }\r\n\r\n  .switch-copy span{\r\n    display:block;\r\n    font-size:10px;\r\n    line-height:1.3;\r\n    color:#8f95a0;\r\n  }\r\n\r\n  .switch{\r\n    position:relative;\r\n    width:38px;\r\n    height:22px;\r\n    flex:0 0 auto;\r\n  }\r\n\r\n  .switch input{opacity:0;width:0;height:0}\r\n\r\n  .slider{\r\n    position:absolute;\r\n    inset:0;\r\n    background:#3b3f48;\r\n    border-radius:22px;\r\n    cursor:pointer;\r\n  }\r\n\r\n  .slider:before{\r\n    content:\"\";\r\n    position:absolute;\r\n    width:16px;\r\n    height:16px;\r\n    left:3px;\r\n    top:3px;\r\n    background:white;\r\n    border-radius:50%;\r\n    transition:.2s;\r\n  }\r\n\r\n  .switch input:checked + .slider{background:var(--blue)}\r\n  .switch input:checked + .slider:before{transform:translateX(16px)}\r\n\r\n  .specs{\r\n    list-style:none;\r\n    font-size:11px;\r\n    color:#a9afba;\r\n  }\r\n\r\n  .specs li{\r\n    display:flex;\r\n    align-items:flex-start;\r\n    justify-content:space-between;\r\n    gap:14px;\r\n    margin-bottom:7px;\r\n  }\r\n\r\n  .specs li:last-child{margin-bottom:0}\r\n\r\n  .specs strong{\r\n    color:#fff;\r\n    font-weight:700;\r\n    text-align:right;\r\n  }\r\n\r\n\r\n\r\n  .tier-badge{\r\n    display:inline-flex;\r\n    align-items:center;\r\n    gap:7px;\r\n    margin-top:9px;\r\n    padding:6px 9px;\r\n    border-radius:999px;\r\n    background:var(--chip);\r\n    border:1px solid rgba(18,102,176,.28);\r\n    color:#dce8ff;\r\n    font-size:10px;\r\n    font-weight:800;\r\n    letter-spacing:.08em;\r\n  }\r\n\r\n  .personalization{\r\n    list-style:none;\r\n    display:grid;\r\n    gap:9px;\r\n    font-size:11px;\r\n    line-height:1.45;\r\n    color:#a9afba;\r\n  }\r\n\r\n  .personalization li{\r\n    position:relative;\r\n    padding-left:13px;\r\n  }\r\n\r\n  .personalization li:before{\r\n    content:\"\u2022\";\r\n    position:absolute;\r\n    left:0;\r\n    color:var(--blue);\r\n    font-weight:900;\r\n  }\r\n\r\n  .personalization strong{color:#fff;}\r\n\r\n  #hint{\r\n    position:absolute;\r\n    bottom:16px;\r\n    left:50%;\r\n    transform:translateX(-50%);\r\n    z-index:10;\r\n    background:rgba(10,12,16,.76);\r\n    border:1px solid var(--line);\r\n    color:#afb5bf;\r\n    border-radius:999px;\r\n    padding:8px 13px;\r\n    font-size:10px;\r\n    backdrop-filter:blur(10px);\r\n    pointer-events:none;\r\n  }\r\n\r\n  #toast{\r\n    position:absolute;\r\n    top:20px;\r\n    left:50%;\r\n    transform:translate(-50%,-8px);\r\n    z-index:50;\r\n    opacity:0;\r\n    pointer-events:none;\r\n    background:#0f1115;\r\n    border:1px solid var(--line);\r\n    border-radius:10px;\r\n    padding:10px 14px;\r\n    font-size:11px;\r\n    transition:.2s;\r\n  }\r\n\r\n  #toast.show{\r\n    opacity:1;\r\n    transform:translate(-50%,0);\r\n  }\r\n\r\n  @media(max-width:900px){\r\n    #brandBar{\r\n      left:10px;\r\n      top:10px;\r\n      right:10px;\r\n      padding:12px 14px;\r\n    }\r\n    #brandBar img{width:110px}\r\n    .brand-copy span{max-width:none}\r\n    #panel{\r\n      right:10px;\r\n      top:94px;\r\n      width:min(360px, calc(100vw - 20px));\r\n      max-height:calc(100vh - 104px);\r\n    }\r\n    #hint{display:none}\r\n  }\r\n\r\n  @media(max-width:680px){\r\n    #panel{\r\n      left:10px;\r\n      right:10px;\r\n      top:94px;\r\n      width:auto;\r\n      max-height:54vh;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\"><\/script>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/controls\/OrbitControls.js\"><\/script>\r\n<\/head>\r\n\r\n<body>\r\n<div id=\"canvas-container\"><\/div>\r\n\r\n<div id=\"brandBar\">\r\n  <img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAACrCAYAAAB4z6bGAABgN0lEQVR42u2deZxdRZn+n7eqzt26E\/a4Kygqkx5XBFGSdAKGLLLruQoEHB2VER1CEtzG5fQBdyAbLgOOowhBvAdFEbMAmnQSWRQcYabzc8ENFzRhTbrvck5Vvb8\/zr1NQJaE9D33drq+fK4J2Mu959Sp96mn3npfgsPhcDgcDsczpFLxpe9HlggMAJet7z+wXudjIPAmtnwECAcDtO+Y\/DJm6xWkSBrmVnKX3uFwOBwOx+4SBBAYAEKCBYAVa6e\/USj6FzaYLz3xPCEJ1jCMZljLY\/VrWUhibe1sJ2AcDofD4XDsFpWKL8vlyKTCZcYskviwIJqTK0g06gY6YQaxJRABaL32ULqwLk7y1Mj25LuL5296i3K3weFwOBwOx66JCFCAgMoUmmVr+g9Wii+EoAWeJ1AbMZwkiQVIEIEAkmP5m0mQiBvGgPBpABDubjgcDofD4Xg6ggACBA4ptCvXzjhLKfw0V1QLdMxcq2pDBCIimYqXsRZObAolJXTdRovnbfp5peJL58A4HA6Hw+F4SvwKZFiG+ffVc\/MvEdUVXlGerWOL6o5EE5EaY7flsdoFYClJxHVTE3m+EM3tKCdgHA6Hw+FwPKV4icowF33nDVPyqnZNoaRmVYcTw0wiFS9thtnmS54c2aGvXjxv8xa\/mX\/jtpAcDofD4XA8IQEHIirDLL\/+6BfmJns35oti1siORANt2ir6B+0CllKIelUPS9afBYOmDkUMuBwYh8PhcDgcTyReAoiQQnvRujdMoby6IZ+Xr6oOa52J6\/KohLH5kiSr+WsL59\/yWz\/yRRimx7adgHE4HA6Hw\/FY2cAgDAT4+vr+gsdeJV+Sr6iNZCtemMFSCVEf0Q8ZgUt2dl+cgHE4HA6Hw\/EPRJEvQgrtw3V7SWmS118bTjJ2XgCAbb4oiS1\/+fy5m\/5U2cl9cQLG4XA4HA7HY2gVqVu2Zsap+aI6pzocm+zFC6zypKgO678j9i5lBg3t5L44AeNwOBwOh2OUllC4ZO1x+4N4qTXMsETZvw\/mXF4QMVaed9KP\/x49zn1xAsbhcDgcDscoLaFAprawp9d7URIbC8pcK1gvJ0VtWP+JC\/RlZpDvR\/bxX+QEjMPhcDgcDgQBhO9H9tIb3\/hcIen99Zphos64LyoniIGLF80afDiKfNHqdO0EjMPhcDgcjsfQ1+cTEVgbtajUqw4w2toO6ASby0tRH07u8XbQfz+Z++IEjMPhcDgcDgQBRNmP7LI1\/QcLgffUqoYJlLlGYDBLJQgCn\/tAeXD4ydwXJ2AcDofD4XBgS59PIDDAS4o9ah9rrEUGlXYfq17Y5vJK1kaS\/zOPJFe3trSe7MudgHE4HA6HYwITBBCRH9mLfzjtZULhXbWRTrkvgBAAID6zpHxbrbWl5QSMw+FwOByOf6Cv6b4I0IcLRVVia03m7gvY5ItK1Kv6jocLiIIAolx+cvfFCRiHw+FwOCYwzIEolyOzfF3\/P6ucWFAf0RZEMvs3AgIzBPCpcNag7uvzCXhy98UJGIfD4XA4JjADLf1g7cfyBZljyxbI1n1hsMmXlGjUzKYHb9v0gyBIRdXTfZ8TMA6Hw+FwTED8ii9DCu3SNdNfqzzh16udcV8IRMYwmPiCMITt69uySwJKuVvocDgcDscEhhF4OSlrI4khyjZ5l8GmWPJkdThet3j+5psDDkSZQrMr3+sEjMPhcDgcEwy\/4suoHJkVa6e\/UXrihEZVW+qQ+5IkxkDiQgDoi7bs8vaV20JyOBwOh2OCMdWfygBgDS5QniAL5szfBLMulJRIGvYHi+ds\/onf7ILtBIzD4XA49gKYHvsCuWuyZ1SauS\/LV087NleSx9ZHjCVk7r4wCRJJQ2sJugAA\/N38AU7AOBwOh6NbIPgVif71Cn6lGVCJH\/sCIwjE6NcwO0Gzmwz5UxkMYqIBIQhM2bsvzGwLPUpojW8vnL\/xfyq76b4ALgfG4XA4HJ0mCAQ2zBQYnKURlR8bxN71vUnguICaFhCTY7y0ZwfCWRoIbVPyAAELbIkIUdniaWqHuEvdr0IK9Yp1M07winJah3JfWEiiuG4agL4QDIqi3f8hTsA4HA6Ho0MwwY8EwrIBQov3Xuahuv8RYJ4BwpFgPhhx\/Fww8pCKgKrBb6vbsODbf4YQd8HSLWC6BSHdN\/oj\/Yr8BxHkaEHAoGUOxPJ1P\/5E8w5kb2Exm2KPp4Yf0d9YPP+WXz0T96WlXR0Oh8PhyJadhcaCyiEgcSZAb4MQUyHzACxgTfpq7XAQAJKAkAAJgC2gG4+A6Ucg+03c+38\/xGConZB5YoL1\/SqcNaiXrZ35tmKRrqnVtMk894XBJAAiVI2hfz5v7uAfBwAKCdYJGIfD4XB0MUwIBghhaOF\/\/dkoTPoQiP4VXnEydAyYBgMwABGY6R968jBxs2syA0QgIaEKqZix+n\/Adhmu\/N9VQGgRBGmeZxhad9lBwQCoz5+q\/vKnA3+WL4hXxHXDyLjuC5h1abKnhh9Jli6ev2nJM3VfAJfE63A4HI7MLIBAAMQIQ4sFlX9BYfL\/wCstAvNk1Hdo6NgCRAApADINrkSPeREEADn6NWwYSdUgqVkI+Rqowjdx5is3YcF35iIMbSqUKnJUzExQKpEvwhD2L3864PRij3plo2Fs1uKFGSyUkLUR\/SAIFzODhoaiZ5yz5BwYh8PhcLSf1pbOgm\/2gIpfhiqcBZMAJtEgyFSg7HGEtCBiqIJMHRnzPVhciFVv+fmj78G3zdNMEwdOP\/DFN84uSVO\/M1+QL0salptiMEMBw6ZnkidHhvWFi+Zu\/OSeuC+Ac2AcDofDkZV4ObPyQlDpZnils5DUDEzCIFJjIl4ANB0FiaRmoRsMlT8Zgm\/BmdGX8bZvHZzmxBA3j2hPmAV8JfIFEVhxfFbPJO\/lccPYrMULAKs8KUaGk78r6a1gBvl+tEdbe86BcTgcDkf7CFggJIvTr30xBNbAK7wM8YhOhUvbMQBJ5EpAUrsf4JUQ6lJcccrDjxFWezNN9+Xym980uWYav1CefJFOLGdtYDCzKU3yZHVH8qFF8zZdtKfuC+AcGIfD4XC0T72k4uXtVz8Xkn8IL5+leAEACTAj3mEAOhBe6QJY8zOcUXk3+gOFqGwQBAIB77WxsOW+1GzyrmKPd3ASm8zFCwDr5aSo7kjuLan85WPhvgDOgXE4HA5He9bc6WmjLX155HEjcqVpaGQqXv7BAwDYQuYlhAJ043ZAX4Ar374aQOrGTB3ivenEEnMa4z9787H7F3Vyt\/LEc4zujPtS7PVkdTj5wOJ5m740Fu4L4BwYh8PhcLQDPxIIQ4ucvQS53g6LFyDNsxESOrFIagbSez1E\/oc4M7oeZ1xzBKKyQRha9AcK2DvaE0RN96XHJP9W6lXP1YmxHYj7NpeXor4j+VXPQdWvBwHEWLgvTsA4HA6HY+wJWKQnjq55C7zi+5rbRrIr3lvrGHZSt9AxQxVOgFC3YMG1l2NB5ZC0EB5xKmTG7y5FSygsv\/mYZ1nCwrhumIiyL7oLZqGIIMTnz37dndW+Pp+IxqbdgxMwDofD4RjDiMUEDAD\/WtkfkMtgLYNZdJ0YIBIgIiQ1A7YKucJ7QOJOnHVtgHdct2+zoi8\/2lRyfNESCjbWC0sldZA2NnP3hZltPq9kbUTf\/dD2KauCAKI8Ru6LEzAOh8PhGFvKza2juv0ocj0vgG104sju7iABMOJhA2A\/qOIArPk5Flz7Xhx+mTceE31b7suK1f3PFxL\/1qibZgH\/jDUi0o07KfjCsBzFfX0+gcau2aZL4nU4HA7HWEVOgTBknH7tIZC4G4wiYGn8xJpmoq\/IScgckNTvAPQFuOrtPwAwbhJ9mQNBFNpla6cvL\/V6C6s7EpN1x2kGm3xByXpN3\/5IQUzDhkEbhmCMYbdw58A4HA6HY2zY0kcAGKQXwiv1AMaOr4VyM9HXaIukaqC810EWrseZ196A0ypHjib6+hXZrYm+QRAIQsgr100\/RAh6V6NqOO18mfGVBIjTJpwXhrMGdV+fT2MpXpyAcTgcDsdYrbmp2SpgCkgsgK4xGOMyf+Rxib4WKv9mePIWnHntf+Nt33pJN1f07evbQiCwsfhIoaQmGWMtUbbvkcEmX1Qirpn1i+ZuWh0EgRiLY9NOwDgcDodj7OnfkIoVmz8VuZ79YROLDpx6GVshQwIEgaRmYI2EV3wncrk7cNa1F8D\/6v7NKr5dk+gbcCDKfmSX3TDjn6QUZ9ZHNBN1wn0hMolllvgUEbivb0tbxoETMA6Hw+HYc2ZusM3oVQYb3svCSzPRd4cBeF+o0idQ3P8OLLj2vXhvM9GXmTqd6LslSt0XJv6PfEkWreXMt\/AYbAolJZLErlk8Z9OPA26P+wIAyj11DofD4dizqMUEIoszvvN8wLweukEAi73snEiaH8MmFTLSOwS5\/GWoHvgeLLj20yD6HlpuTAcSfQMOREihXbl21qtIGb8+om2H3BcRx8ZAyAsAoC\/a0rZBMK4L9bRFPDr2Vojd3QWRG+NAepDTXYgxHA8zByQADWHfAFXMI6nFwOipl+bVJgKDQExj1n26U1cNUNDawmiGyr8OwHU46zurYZILsap8G4Bmo0jfIu2lmFkMM0Z\/vNTj5avDiclawDCzKfZ4sjaSXLdo3qbbAw5EmcK2NctULmjvfPFBAwiopRiHDtpKANC3bQoP+VMZAyHCATBcEOgqUTKAgLZEW2jqTvcLAEbvWQgLgMlJ9b19+UHBAAgDAfqiLbTz8xsBmOpP5QGE3AyjbuU2pswEEAKW5yA\/WQJWPqpfaHSChdWATQDmVlDrvgJ3uy6DU3GQ1FOnJVeaD8YcnHXtFUgan8O3yr95VMiUbTtjbaXiyzKFZtm6aa9XUpxSr2pL2Vc+ZimIkoZuwJhPt9t9aQUA9xy3nqBdFCbMoCjyxdBBW6lv2xT2\/cg2g6MTNlmISx8YwlQOadctWr\/iyzcVfpffnt+fjHhQ5Yd7J9y4r3uG9n92bfjs192ZjPfHNQhAfX0+tZ7BcjnanQBBK1bPzcXSKFsbEbl9PImHJ9hg2BeIvcR8eNotO8ZwCmWcEZUh8HIwN8DNAE8gEOVhcShgXwHCy+GV8mAGdB0AzLgWMo9iAEjkSkDSeASML8LUl+NbZ9y\/k5BpixvR2j5aunr6D0qTvONrI4khZFz3hdmUej1ZG9HfOG\/uxneOVcPGpxx0y9ZMv8OFx\/T6E9EDDNTB0Mz8FyHoXljUmPF7T9F9Jof7C5OG\/\/5kAaBS8SUADA1FPNYFeyaiYGmJxIGZg+aJrG5m0NJ1R+0nKf9cYXk\/S\/ZQsJgM0P5M9sVE1MuWJRH2BWMSE+1HDMGAzPpYYefNCTaFolQjNX7P+XMHbwjW96tw1qAeN4KFH3VGn2xSXLF6bp7kyHPJYj9D\/FwiepExKAqBFzDT80BQYC4B2JeIJoNQYmbKeqLvgofLqpwQScK\/Lh142OyzX3d5km7tZDBf9QcKB7\/iUGh7DIjeCuKZUCVCUgPAqQAY748arAUpCVUEdO0PYL4Y+\/X8Fy6d3wAzYQCEkMYsP6YlFJatmzXDU7xBJ9l3mwaDhSRmcD2xdPj5cwZ\/FSCg3VlkPhNUvqAOd+Ey1f4kWouFnW0ZIGlYGG3BDTxUa\/RsXb52xh\/B+C0p+l+r8f8Y9leL52267\/ETa0vQlP3Ium2nXVtFYMMGgQ2DlggWSK9nCGDZdf37il4+xCQ8lYj+mQiHLl+Ll0riA2Htc6CEKOQ9kKCmbJTpH8xgCzAzrB0VPhNOW1oLeDkJUbWl8SRgW4IlpJB3Hie9P7zxBTlPvZyJ\/gkGfUx4GVP1OdbiuUJQr\/IkvJx4zG1mTsdBWmuV0cqJ4gmWHMUW8DyJJEmG\/\/q7h8ZWyPsVia0HEbAB6bbSTkzZxojKGoP4JYBfAvgy3vGdoxDXPgCBt0EVFeJqempm\/B6\/fjTRN9lhIXIHQ+W+iIer78QZlU+D6DoAnJ5WGsBYJPoO+VPTAWxMoIqSkoRt1uszBtt8ScmRR5Irzn\/zxl+moio07f69Kq5rC0fTgnl0uiN+9O8MkkQgIWk\/KWk\/IenlQqaBMq4baEMPLVsz\/R5BdCdb+xMm+7Pz5t7ya6JHBU2l4ssIQLR7VvfeL1oCCMzsF+GsQd1U6xYAlt98zLPY6NeS5aMZOJIEH8YGzyv2KCFEeqOMtrCGYQzDGuZaVdvH3LednmLinZXpRHS02CaxlUKx6d43Cao0RUv67KTPT6Xiy7\/v9\/eplvn1zHQk1q4\/Asp7iVRikpdLD7rYdAzAaIa1DB1bqxvGurHwhGOBk8QKgOIx\/+GP2SIJnzjABwFhSx8h8i2uoNsA3IYF0aXQcQCvOA82AawZ524MEUBpRV+rGTJ\/OCR\/F2deuxYGn0JIPxkVfHuQ6NvKfVmxbvpxXl4eU69qm\/3WEVhKIWpVvd2w+jwzaGAgyiTGKXTgmFUXS+cn\/JdWCprRaaBkMBM3Dw4yCaloP+XJI6SkI6zlf4trprZ87Ywty9dhvbV23SNJ7ZbyiVF1NGiv71dPti0yUS51peKLIb+ZxxIOpqJlXf8\/w\/KxAM+B1q\/L5cRBKidGA5NOLOo1bR699qOBqNkzjOQT3Lcn+JcJObiZCGRt95U\/DwKIvgGfyhSZclO0fPmGafvpPL3RGDr+r\/T3N0BzX6FHKSKC0RY6YSSx5SQxdnQ8gIh5dO0udp7b3Fh4zMdvVWbtxJVghI+6aQhYYEtEuMq\/HcB8LLj2X0D0BajiQdBVDZAa5xc7HYO6bgECvOJcoHEcFlx7JSj5DK4s\/\/pRIbP7ib5DQ1M5CCCMwUAuXVN34AFP3Zfa9viyDx6\/8Y8vqvgyDKNMFkquDszuSGpqSev0CEMrdBrNbLVmAJYJJEgU83k6XHri8Lhuzt+Xen+zfO30NULRtf9+7MbNRIM6bKrnZr7MxHDBmivscjkyre22S9b2H+oJPskyTgXzEYVe5XG6gkYSW5s0jG0Fp51FCrlAtFe4b319PpXLkUEY4evr+wvbG5jJ4LfEwFxPiufnCwJap9Xca1VtwM0eKyBqPohy5xNF7qTZOKOVCxKwwAAYRN\/A2761CXm6HLlJxzQ7RI\/\/HKWWmNa1VqLvO5DQyTgz+jLqvAxRedtOQmaXgn9rm2bpmuknFUvqDfWaNh1xX5QQtRH9gLJyaZbuixMwYzY20aprIAgAW+a4bhl1Yxkkvbx4qZfzXtqomXNX3jjjjktv5m9Io6PynGhrayA2TzLttY5ManWmK+wgCMR+b\/jRfCHEv7Dlufmi6jGGkTQMaiNJ+vAyCaJ0Fe1i0l4sXBDhonXTD\/EgFjwS8+kqJw7zPIm4YZDE1sYNw9TMidjZYXNjYi8UMiGA\/vUK3571W8xdMR8HPm8pvNI5SKo2NRb2CnnarOhbtSCxD7zSR4HaAiyILsb9f70MUbkBMMGPxNMJmaGhqRys71dUsyFb5tSRznpNyrZQUnJkh175geMH\/zaFs3NfnIBpm6J5rKB5dD+eZK4gXycVXlev0idW3Djjm1w3XyyfGN0LABX2ZZn2rhwZv+LLqOm4BOv7C\/trPp14w79JTx0hpUCjblAdSUxzO+jREyEuQu197OTAAREuWXv0q3JCvc8wn1bskZN3ct2YqPn8OEtlYjE4SyMIBMKFDQDvx4LKVqjCAEzDgK3YS0QMAWhV9LUQuRfAy63AQc97JxZc+ylcRd9BBPNUFX1b7svyN8x4e6HXe1WtmpgO1H2xnidFdYf+m0X8xazdFydgsmN0Pz6ua8sAK088K1eQH2wQ\/vXSm\/r\/qzqSrChT9Nedg\/64jlXNUyTlcmT8ii+P3nfrWULzklxB9VltETesjWGYmATRY3NXHHsfOztwy9bMerlQ5iMCOC1XlPlG1aC6IzFNJ9OJlgnvxoR21IW4qhxiQaUGr\/R5JDUD8F505P3xib65V4PEtTjz2psgEOKKt6aJvv2BwuCA2SnRl4aGIg4qU3PM\/AmjbUfcFzDbfFGo6g578ZK5tz24fX2\/CsNsSzM4AZP9mE1dmYTZJIkRUuyfL8kPgXDmpTfP+PyzHnzWF8vlyGRRBKidwap1imT56mnHitzWT+fy8vUmsagNJ6a5JSDIlUPd+02XnYRscOWRkw94TuEjYHNuvqh6aiMa1R2JaYoW6a6WY6eJkhHBon+9wlWzvoAFlV54pU8gqeq9Lm6NJvo2mhV9i7Nhktk489qrgORCXHnar4GwKWRCU2FflCkyK9YccFah1zusOtIZ90XlpKzu0H9MKP+fzCDCYObxyp1A6pz2JhApY5irOxIN4Dm5glr+t\/22\/uTitdPfWC5HBgwKgnF1j6glvC6+vv\/AlTfN+KrKq5uVotfXRhKTNGxa3tqdfJsQBBwIInC5HJkVa6afdNBzS7cXiuqjbNFT3ZEYMJiIJlxRQceu618Mzkq3Uq4qfxJx9WrkSgqwZq\/8tESpU5\/UDaxmeMUFoNzPceZ3Po\/TVh2IwVATwOWBqRRcf3iJQR9NEsvUgSYpzMy5vCAifOaDc24aieCLTtQ6c4GkS4SMTpirOxKjPPH6gpKDK9ZNHwgGQGEI2yqI19XBKoBgTouOLV0z\/c2FEv20UFTvTmLLjZqxzQRMN94mCJWKL0MK7ecqb9pnxU39\/5krqe8R4bDq9kSzTYULnP\/m2BURE\/kWQSAQ42zE1SGoogTz3nxyUwJEiHcYsO2BV\/wQvPz\/4IxrF84IggLCUO+X631XoUe+OImNzXxeZdhcXorq9uRXMKUrggCijKgj98MFlC4SMkQkG3VttLaq2OMFB0zrX3vRDW94UTMBtmttU+ZAhCEsDYCWr51xYT4vb4DAIdUdiW5+LjfOJpLzsr5flcuRWb562it79k9uLZbk2Y2aNknDWBApOMfFsXuzIwMDQFQeBtt3w5oY6ZSyl9fREhJsGfEODYjnU6G4fPA3r7htyvsve7cQ5hPMBDBZcLbXgcEsPSIrcOHC+WsbfX0+darSvAss3faogiQYPLIj0fmCnF0o5DZdfP3R08JZg7obRUya7xLaz94wbb+Vb5zx3dIk9fHRU1dELsdqIjovswb1sh9Of5tXUINSiX8aeSTRab0WJ2Qdz5CQLPyKxKq33wYdfwW5ksBoc5C9fGkLUjAJc2NHTD37vOqR4d4T8ir5dKNut5UmKY8EiDmbCtsMNvmikrVh\/T+PbH8gCgKIZiPVzkg892R0p4ohIlUbTjQJekGhpG5ctmbGqeGsQV3h7tlOauW7fPa6\/oN78uLH+R51UnV7ojk9Eu3G1gQbta3xsHz1tEVeUV5jLe\/bqGlDwglZxxgwdYgRBALC+wzi6t8gcgKYIEVACQApxfVHhhv14uKzj7l95XAsXlOvmpUgxKVeJdM2X+0VMsTNGqJMF4blLTFm9gt00AlzQaa7xbdKYmMso+jlRLR09dHvKFN3bCeNBqsfzHhpzySsy+Xlq6s7Eu22CCaseBHlcmSWr50RFCfllprEWh0zu9NFjjEjDC229BGuestWMH8OKkeYMH3lyMIrCFh9Bb596m\/9wM99\/IQf\/2XhcYMLWdsj6iM28jxBhYKSABvw2As7Bpt8SYlG1dzy0O0bvx8Egeh0R3snYLpeeJO02lqjLeUL3jcu+eGM0zu9ndS0Dc1F359+iMhjjeeJl9WHtSa3ZTQhCdb3y3I5MktXzwgKPXKgVtXG2vRMhbs6jjGlldD7SOGriEd+CZmT7QjW3QUzSAjEtUcgSl8AmCJM1cyp63ne\/M13L5w7WE4SMzeOzU\/yBSW9vBDMbHgM82MIIGsYUHxBGML29W3p+PPtBMz4cGIEW7AxbPN5ccUlP5gxv1PbSUEAEYawl373iAPyRbrBy8uX1Ktaw20TTEzxEvSrcNagvnj1jPeWeuVAvWoMWwh3NNrRpsmQsaWPcMOJVbD5RJrMu7ebMGzhFQngr+DKE++FHwmEoW2VKAg4EAEHYtG8TesWHrdxepKYd2htf13q9aRU1MqP2aOL1Mx9EXHd3LzouE3rgiAQ3VCnzAmY8WPFCKstmFnlCnTNF1ZPe2WZ0sGb5Tqgr8+nyy473DOl4qp8UU2tjzjnZaJSqfgyDAf10jXTTyrkxZcadSdeHFm4MGUD35dYddp3oGsbkCsKAHtnbRhmhvAEkpGt0Ho5wIRo6DFiJKTQhhS2ym3wubM3frNGuSPrdfMfYGwrTfIkEWhP8mMEiHRiWRJdAADd4L44ATMOnRitrZFKTMor8e1L1h61PwZCZFXsbmBDulUw8oLS53ome3OqOxLtEjQnqvOSrsAuWdt\/qJLia8ys2DA58eLIBj91YyA+Bq3tXtuHnMhC5QmWV+Ca0\/8OPxJA+IRbZi1HpFLx5Udm3\/zIwtmDn23E8RGNmvmSEGgUS16a6LubNXQYbPI9SiSx\/cG58zZuCrg73BcnYMbleCZZr2tTLKnDiL0vpXuRftsf3tbx2EtWH31KoaQWV7c78TJhYVBf3xZasXpuXoC\/7uXFAUlijTt55sjWhalIXOXfAhN\/u3ms2uxlz5mFUALxyJ\/B+iup++I\/rfgolyPTyo\/54PG3\/vHc2YMfSDS\/MW6Y63J5QfmiEk03ZleEDAsiihsm8ZS4EAD6oi1dIxZF5rekw\/+0jpqNvpgNmHXrNXpjuXs3VgWRrA4nutij3r509fQzWr2T2rfahvD9yH7xhv5ne576T6MtM3NXBytO77bd+d627m\/r1XyAeSL8Q62\/jYWYbfY2shj+WM8kNa1R1Vp082mj9HNbxj8+64+OhWaewET4p\/k5icZ58shUnwEmCPFJJLUqSBHAe1FCDAMyRwAuwtVnPJS6L7RLn280PyaAqFR8uXjepp+fO3vw1ETbN+vE3FYsKam8p0\/0ZWZbKClhtb32348bvKOb3Bcgw6ZY1C19ZgnwclJiZ697p56CRjOMYRhtwZYtAMsEAlOX7e2T0DGzUnTJpTe+cb0\/O7qvlWA71r+pr88nosguW21XlIrelLTCble5L6k0ba0oiKTyiKQUJJUQJHaa1jjNZiMASWJhDafm816eB2gtlPQIqO6Z8PSbx+dX3DTjNYLow7WqNkB3iRdmMIgtpROzICmEVERSEqSi0TGw81iwlpHEdkKMBbaQUhHiBN64\/iCt4nZXle\/B6dd8CYXJH0S8vevG4zN2X1SOkIz8Bmh8DcwE2v25PY0HEQIOxABCJtq42q\/466bvu\/VdEPhIaZL34kbVwBj7RA0hWQgSjZqug8Rn0IWtP1T7JxO2+aISjZpeD4uPQUiPrelM2WFFbGIjbcLPYkECoy4C7w\/QYczoBfBSkvQctnh+oaQ8qUgYnU5uxliTTm5dIWZEkhjTO8l71sgOXECEd1cqvgCiMf0lrXovy9bNmFfIy3JtODFdI17SvVwLIpUrSFKeEAygUTMw2v7NaGxD3W5hwjAx\/9ESfidADCLLFsRsH4CUI8paobF3I5i4OmylLdAQAIQzn1nn2Kn+VA4YwqzllbmSzNVr2lAXrEuYwQQ2TCClhPTyUgpJ0AmjUdN1ZvpL0uB7Cfg9g0YIvIUhHgEAS0zSogbQNku81+fwCCau1bUwxCMDfpSE6SJufMq21rHqLeJzkCPvgPAOgtU87nNiCAyhBEzjs7jqrBE0ChIoP2PnI6TQhjvN5xHw1WXX9UcNNv9OxIt7Jnn7Voc1mHlUyDDYFkueHNker1r85s3\/56f9zbpqm46Wr53R1oHLYFPs9WRjR3L1wnmbzhgPY2fF6rn5uqm+sFDEYbDiSLZ2OjNeW+yRk4gIjZqBNVY39\/w7uZXCRGAphdWxfeN58zf+rDVAx2p8BAEIfVPVvpMOuCNfkK9o1I3taG+jdAvQEkjkipKUR6iNaEuEu63FrWD6GZG421btbxedMvgwHGMvZtdMO63Y411dq2pDnV7tMlsGWCoh80UJaxiNqnkQhJ8JSZtZ2J\/aWPz61QX8eVaHi25NELL3sPoDhcFQY0HlA8j1XIp4hwHE+HVhmNPEXd34X8R0BKYOaYQhj+F1HS08CQBLb5r2YgXxUYDemctLWR9JLBNYkBAgrmpLr14yd\/C3QZA2F55QDkwz6AAEz6\/48k0v3k\/s97uHOnIRIqS560MHbX1SdR7OHDQLaW0DwG+arx8AwKU3vvG5tRHqVxIngXhuabK3T1y3SGJjOujIkGW2+RypOOYLAMwbGpo6ZpNHa5AvW3vgglKPekU1dV9k555rNkKQLPZ4Mq4b6MTcpg1VPI9uOmfW4P89WdB9svvdt20Kt8bE3k7rc5b9yD7T1fbQUMSXVI4qElFg0p3zTvqQlsGcK0ipPIFG1WyrV5M1zPQ9Yrt54bzN257ApaGBDf3SjYXmPOhP5ZDCsZuLg0AgDLOf2wcHDAIIbMHl4JFzoAqHwcQGwPgVMUIQhPgUIj+GX5EY25YJ3Er0jSJflGdHvwPwnpVrp381bvAF+aKao7VFvqgw8kjyjSXzB+8Z44XxOHNgejxZH0kq583d9LaAAzGmD0173jQFA2nNk6GDttLAzEGzc8Lb8puOfqGAehvA780X1aFx3UInppPB3UqPKG6YWUvmbx4co8FGzMDS6KiC7PX+xyvIlyWxYSB794WZLRGJYo9Co6YbIFxtNL66aN7GWx8zf7aqE8+cadP93olSZjw792X52mnvLPbk\/rtjYrbpwOXyUkolENf13SBcpmz+2nPm3LR1dCxwILBhg+jbNoWHhiIOQ4zlCtbxRMLl6re8EszPwRnfXQffl4gyDHh+RSIqG5xROQW54neR1MargDFQeYm4djsScTSmDnG7RWEQQPT1+dSKGZfeOONEBj7NwJQHdf2lA\/N+uuPyyw9XZ599Z9JtF8sdg33C0A0OAW7lk4TN1VsU+QIAyrOjewFc9MVK\/1caVr+LgQ+Ver3n1YY1M4Cs3RgGs+cpoWO7EMDgkB\/t8UQdrO+XRIN66Vrv1EJJvbxT2wXMbPIFKbVm1GvmCinlRR84dv3QY0TLzJk2pJAf7csxiNCN4rGND35kg\/X9CnV7rjG2MxkGzBZEotTryUZV\/yqJ+fMPbb9\/VVjeErdEVuu9UrpIsu7OZXl\/jAfQ53DZ4T\/GX6caZLmdFJVNKqTK1+GMa36MXM8x41LEMAjMgBADo0fF28wTJPpeH1Smrt1v0oHf3D9XLBPhv4A7k1bR1G4yIJyA2VVNQ2AgVahBAIGZ\/eIDswaHAaxcsXrat+ojZkB5dA4D0NpmGuwJJBs1zVLS\/KVrju5bTD8Z2lOna2DmYGrLWryfbfYrV2awIHBxkifrI\/oOY7F48byNm1qBqmV\/p6Jl0A3Qtq7Q+hXRoF662h7jFeWr45qxyNh9YWaTy0tpDCf1qv58vaq\/8OGTb9nRErGpSxoZd7c6iMDDKHqvBl64AGH4dVR8iSy3Hbb0tWT1R2CSW9NEXm4dNBsf7kuuKNGo\/ghXv21tU5Bldv1CCi04EMH6DfKgBl5oBOYXi+ptK26ccQbDfuo8Cn\/Umn\/TRULnHU1XeOoZKtZw1qAGg4L1\/Wrh\/M3bFs4dfH9s+ERm3JcvKNnsP5EZ1rLNl1RekjgL2LNiQ37Fl0TgfY+a8XrPE6+v1w0oy60jZislkcwJUa\/qi2BK0xbP27ipUvFlq5Fk129D7k0MzLTNyeJsqQSydjaYWRd7lLTG\/pKNnbnwuI2f+PDJt+xobhlSOGtQu+3CLsAKgYZhEAZQ8ffBUJTmSWVFy7FY9fafwSTXpC0G7HiaJwhGW5AIHyfIstOA0RYKZw3q2NpPFEpy0sj2OM7l5Uwl1c0rb+r\/9iVrj35VuRwZIrBf8TvubjkBs2fDjcNZg2lXUPbl4jkbf1BPkuk6tj8r9mQrYoiIkoaFtXjrZdcfXiqXI\/NMJ4+dEhlPzxWloPRzZPMwMVvpCUHE9UZdn7nwuI0fWjh\/baOVg9FtWfB7v\/uSOnkrVvc\/H4LmxjWDLN0XZtY9kzzVqJubtyd2xsK5m24J1vcr5lS4wOW1dJGA0QKxsejJvRCNZCFCWAz0Zxvkpg6lxe1YfhJJfQfIGy\/F7Qy8koBNbsAqf1OaQ1TOdBHsV3wZlSOzYvWM13g58fZGVVsi8uo1bZLYcq4gyzkpb19x0\/SLP1c5fJ+ozQVUnYDJTDyAyxSZYH2\/+tD8W347Eps59ZoZLPZmKmJEEhv2CvLFVa80HUgrpu5+xACVy5G5aN3sHiY+PmlYZFUini2zVEIw8IhJ7PFL5m++qhWsujEDfkIwc4MAACZ+S7FXlYyxmYlZZjY9kzxVG9Hfe\/AvdMLH5m\/e1up+7RyXrp0MBWoJQ9F5uPKU52NgMM1NyYowtPAjgavf+jtY80V4BQFQty960ro1pqFhccE\/LCOz0n5+eoLVgD\/u5WXOGrZpeCNJBKoNJ8ZY5Islb0nP\/r23fuGGaW\/aqQp8R7bpnIAZy2dn1qCuVHz50eM3P8RVOrlRsz\/NF5VsVvTNwhGyXk4AxCc\/0x\/REj3K1qflPHlwElvOYpwwg6UiBiGJa\/Zt583f\/KPLLjvcc8Gqw2xIt4+Y+AS22W0IMKf1o6rD5sYHH7n\/beE7B+sBByIMXS2X7hYwIGhrUfT2A+x\/gMDIunNx5FswE2K6GHH1LxBKgLvZubUWuaKA0d\/G1eU7R09UZUglLVJnl66bdnQuL05ujGiLxxUsJSIJCx7Znmgh6J+KRbl2+er+Rc2WBdQJEeMEzBjTUqSLThl8OI7jso7tfSonBTLIGyAQJbEFmI697Prjn9k2kj\/6w+Z5eQGibBwkErDKkyKO7fvOP2HTumB9f1ce25tIpK0pQrt0zfTnEOjIuG4I3H43jsGmUFQyruk7E3ro1LC8JQkCCJf3NI5cmGpioeS7cM0pr0I5Msh0q4EY5UggKj8Iwqcgc9S9lYaZQYqQNOoAXQh0phL0UNN9gaFAeUJYfpJtNwIRkYobxpqERXGyXLp8zYyLwhC2UvEFc7YixgmYdokYTjuBGmPfScSWRCZ1KISOLUtJh9bVjlemwSDYnQFFZYrMZXe812PGsTqxAGfhvrAplpRs1PXlS+Zv+lqwPt0mcCOpw8zsF01FcUyxR00y1pp2lwhgBktJlGhbNTHO\/OCcu0cqFV+43Kdx5sNYZuRVHglfmLoiGb+DVouBbX\/9OuKRu6HyEkA3bkOnuS+sr8Cq8q\/gR6JT7suyG6fPyRfk7HrV2Ker8UREghmoDSe6tI93\/vLV0y8plyMzkHHOkxMw7RIxzZyYRfM2rUvq9kuFkpLM7d9KavaeIgPzBgAY2LBhl+9xwKnYGdk29DIiermOLdDuPjcM6+WlqI3o3zVU9UMBB2LgGfbpcYwtfdumMAAIQW8CAZRJh\/a0d5qJ7ccWHb\/x\/wXr+5XLfxqnLkwtscjJ47Hq1Dch6oALs6WPsHZhAyw+2Zxruuw4NTNICSTVYRB9BmBKk5Azdl+GpnLAgYDBgJCEXU16prTJsaxuj3Vxkrd46erp54fhoK5wdvfZCZh2smHQBgGElclAbUT\/WXkZbCURwMwgoumt97Dr7zcVO4LUkcWS9GxGp4+EILKWPvyR2Xc+0hdtIZfz0iUivBzZNEGPDzcJt32+YLDJF5WsDic\/O2\/eMSsrFV+GTsyOXxeGmaGIwPZTqPgSaZuTbI9VB4HA1f73oes3psequ8qFMfCKAmy\/givL98KPMm\/FEAT9KgxDu+9N608ulNRR9dpudpcnEDPJek2bXF58fukPpx9TpshkdcTaCZg2EoawfX0+LZl724PW2C\/k8oKY23ukj0CkEwZAr77sjsNLYQi7q\/uSfTOnNN+bfTUJavuKm8EmX5KiUdebFs0b\/E7AgXCr7e5ZGwLgeyf\/7bkAHZokzQMJ7dXe6cvSALXyXZyYHc8ujERNWxS91yOOT0cYWlT8bGNOq5YKiY9Bx7o5hrkrnjChJOLhB6Dzl4A74r4QMGjXr+9XsAjYPrMEHCJQ2geehFT09Yuv7z9w6lDEQdB+feEETJvx\/cgygybH9hu1keQvXk6OdWOux6sCMtqCCM+rP1w8GAAGBnZNwJQpsgCIgddazeA25ztQs9+SZHyeCIzd2O5ytHnxitZpNHpFoSiL1lrTztaNLfelVtW3PjRv49qmmHV5L+PfhwEMM4gGUPF7O1LcLmCBK\/07YJJV3VPcji1UkcBmJa456e8od8B9Wd8vwxD2Fw0+vdSjXtmoa4tnWkGeSMQNY4o96oVC8afCEHZLn99+9949Ye1ehIAHNvTLd598yw4QvuHlRdrTpY0WDFu2+YLMUSIOA4C+XRhIrRX3l2+Yti8Yh2pt0c4TJ82AJRo1fdsrCmJdhX2JDYOWGeRe7Xvt6v0Z2pB28CaiVwnVfjeOWu9N0mcHAH7u5TdI5nRculfnx8Me3FmBWFuUci9GHJ+DEBZRxi4MBgAwQYgQSX07SImOFrdjWIicQDz8V6jCSoAJkZ9xdWsQNgzaS245qgjwJ5PEMu2hwyqIRG1EW8\/Dvy5fPeOILArdOQGTBTNnWgDkEa2qj2jTrGTazgfICkUwhH8CgKGDttLTP+JpAm8D8kUk6ABruK0bBgSQtWyJ6JOzZg3qMqVVdonA7tW+124PJPBLM5hOTa6oRH1Eb1o8Z+MPiMBnn31n4u5X942HZ7iKIzQ0g8SHcOUpz4EfWQTIvrjdVeXfw5qV8IoEcOdcGAJD5Qngz+OKUx6GH4nU+M5Q0m1I3RfxSO49Pb3eS5KGsaA9vidkLbOXV4oFPgbsdDy7Tbhmjlk8PxRaMOj92PjLZWtn3JkvyiPjmrbtPuFDwMHAzrktT85o7yTJL8zlhBfXjW1nBV4iEo26MQL08eVrZnyEO1T\/YAI5gSZXkKpW1QNL5m8ebJUNf9Ix20yeJcJUndi2LnaYSRhtAaLnL187\/SZYKHa5L+3Eep6UibG\/fzhH7231dWtjvpGAtga9uQMwHH8UhHPTXJgMz1ZHvgUCAdZLEY+8AyL3\/LTvUMaLeIaFygk0Rn6LmP47dV+QufsyMDBoL7vpTfvUTONDjYZlGqNYRESiXtUsBc1bvnraK8+j8O49bSzsBEwXEGzol+GsQY01vEZ5dGRcg21bUCCQNQwwXgaM5rY8JaMuDfGLhRJgMm1VFGnHeJL5gpzhRkcGEcsySr0KtQY\/BwCmPp0rR+Bgfb\/iOh+UZgy0bzQQgXTC8HLiEOXRIeykS3sDmGXkixLJw\/YQbJuSTQBvHauW4j24+i2XoRxtybZbNTH8isDV5Ydw+rc\/Ay\/3FVidvQtDYAglQPFnEZWHO1F1N4p8EYaRWbam8e89k73njWxPDI1dfzNiZpMvqlx1mP8FwOI9aSzsBEyXMFpTg2gw7S\/URuXPIGsZIByQHpMb1M0I9KShYdSlYXqhaNX8aLcnwkCjpo2LV5lghIQE09NWN04r8MLuX0teZIV6gUks0O6EbgKS2HKSsEvczcAFsMwCzDsyDd0WBiVVwEg8AMDPvrhdOS1u9+Dfvo6HnnM2VP7VSOo2q15vABkoTyIeHsL+k68CApF17ksQQPh+ZL+87g1TYqbz6lXDwNh+fqK0IjwznxKs7\/9keVY03C6Hz+XAZITvpy4INxpbGnUzLKQQaFNiJIPIagbAz+o5Agc2B+5TB6BoNJDsx2k\/14y2dEiSe7X9BSD9O+2CsTYQpK4N5RUBXtMRaft4IGo2jnOvNr\/SsZBd4N5pwVxNLHLyVHzrpJnZF7dDWtzu0oUNEH0C2Qzrna0vSrWCvACXzm\/A76Osc1\/6+nwiAjdYLSn2qgOMtrYN1bVFElv2cuLgfev6dcAzbCzsBEz30EqYW3ji7VuJ8FulBNqVCU8AbHqCo7fg2eJuCSzGIdY6T2QiM9CaHEgfIBUBcPkojrEK4syQQsDQBQgC0Sxul6ULkxa3u9K\/AXGmxe3SonVJ\/Tb8+f++iyDIvGVAwIHw\/cguW9N\/sCB6X6OqmdAmEUtsc3kJgpiVBpj2fCYnYDKkUvFlM\/v\/t0JRaqq2S8Gk1Xhz2trSrrl+rSDFvcw7HWt1TDwB06zHYxkvyxUkwOyKCzrGaiUnUU8Mit50HPa\/frO4Xab9c0aL20nxMeg4yaS4HYPAFmB8CoOhHn0PGTJa5Zz4w4WSmmQM27bWdmIGg44EgKGBqC3X1wmYDGklyjLj90K09ZFJC8QpEkxySvrMPkUtmOb7qLAvCaTYZVE6ADBTjpyMdbRjiWUZMHYAlx1f6khxO78im8XtrkSu1O4WLwZeQUDXf4xV\/uo09yV796VcjuzKtf2HSUHvaNS0bZv7gkcrwhPw8ovWze7ZnYrwTsB0\/dPLW9u+98pspRKQFvsCT+3gteTK73\/ylxKAydz+qvGO8YB0l8DRlhlQoKENenKHoeS9tyPF7aYOpZl+Xv5CJLXtaWpQ21ZuBKsZQlyQnobK3n3Zkp4EYs32Y\/miLBrD3NbEfAYZY8HgZ+XMyLOBXa8I7wRMt69srfibbfPZG063qsCCc7u8TNia5JiQdwaMAwCIyY0ER5sGFxFiw5D4MFaddiD8yGbqwrSK211xyh9gzTJ4RdGm4nYGXknAJDfgyvJgJ3JfWjWflq6Z\/lqlRLle05bancBNILaAVKJkPfX0uwBOwHQ\/raPUAG1n5kyOpkoh0nv8FBZMSxnnqFAC82S2DHY5ME5og5\/r0ncdbUIgMRYl79mwtY+AwJm7MJGfHqtGvBSN4Xsh8wI8pltJDBBBxwkkfao522Z+oac2q+ES0ydzeZGzlrPqCm6FIGAXdgGcgBlfoaHBDKDLRIKSlghOuDha04\/tcRfB0cYVlkBNWyg6B9\/0D01bDAQZxiRKj1WvOnM7YC+EzBFoTI9gWuSKAjb5Dr5Z\/ikCFggp07ovlYovQwrtyptnTFd5Or5RM5ZA2WwOM0MIAqN984gTMJ2QL+Lpi4k5HF0QX9zpI0dbhxgsWxS9IhBfAAKjb0u2C6hWt+o\/\/79voDH8P1BFOUbNdhkQhKRRgxSfQocWhkNDU5kZpBMESglpszyhQekSnXnX0xicgBkHCEKBqHmDu4hEWAI5B8YxuoByabyOdiMxklgU1Nuw6uQ3oJx5cTtgS0QYDDWE\/GjaZnZMcr8scgUBm1yFb\/pD8CudcV\/C0C6\/ccbcfF4cm6n70lwCsWVIqO1OwOxFmIS9bnxfk6WKAWo4CeMAACl4q7sKjvav05mhhADzZzvyDkaPVb91HZLaangliT0rbscgIZDUh5EznwOY0lNP2TI0FKX9zAwHJAiMjI9nNFvaEHjECZi9gFYdGJL2ICEI7WolAKSF6JgBa6DTh\/TJv3ZgIH0fDxquM3iE0pruLn1zoiPwsBOzjgwW6hLVxKCU68eVp5zSERdmqs9N1f5R6MYeFrezFl6RYPVX8fUzfgc\/EgjDDrgvsPvX+dRiSb2+WfdFZjx\/kNbWMNE2ABjyp7peSHtJZHiOkO2PDNYyLHP96ZdAKXVba4BRo\/Z1OXCMIwyTmx8cGYkYEAwziD+Fip9rthjI8Fg1WfgViW\/6d8MmX3\/mxe2YQZ5AXH0Qxl7cEfeFQUNDEa9YfWjewn6c21zy5cnCj5QCALbpBv4GAAMInYDZK55VgYO43f2GiITRDLB4EMBTN35tje0776yDMCzcqtsBV8fOkfGs2NAWvbmpaOizEYYWQX\/GLkyruB1\/CnH14bS43e6KGLLwCgTGpbjm9L92xH2JfBGGsCyed3qxN\/eKRsMYUMaxnhlSEcD4w\/knDj6Ax7SrcQJmfDJzpm3e3JdZy+3s+MxEgNVWFwrx\/emz+ZS9KBgAwhAWgHZVeB3pVGx3tHmcOhw7L7oIDcMQ\/B+o+PtjYNB0pLjdN077E9guTYvb7dZK00IogXjkPsS8EmBC5GcqXsAg34\/sF9f394Ltf5jEMnVmQrdSETPTXQC4UnHdqMc3DAoptO+97HAPwMFGM9o1sNIyRQQADYt8fVe+JwjSsUBMDwhKK\/m6mzaxhbYG\/apRs8h879wxUUmL2\/Xkno1Yf7Czxe0mrUBj5Pe7WdyOofIEi0sQlR+EHwkg22rWlcgXRGBd538t9nqHxg1jOxLnCcJoS5D2ZgCuG\/V4J2hWu516SM\/BRHSwTmx6m9s1EwgAhId31JLtwKOJuk9GX6vMM+GPJAjETsBMdCyJqsuFcmQc+QRqmiHo\/Vh16os7V9xu\/nYQXwChaJfKXTAshCcQj\/wBCS5LWwZk675w0325ZO1R+4P4\/LhhmSh794UZLKUQjZp5oIDiRsB1o94LVrX9AgA44dcWSsqzzKZdAobALKUAM7Z+9PjNDwF42lNFrRNSgH0wyyHPYANmzZz+6V7tesEA0LwL\/Y1ayXZeyTzAzA9ISeAMBC0z2I2F9r+YYcDQAHdfoUICwViLopoEtkGHituloqn00CrE1Tug8k9f3I7AUB4B+Cyi8jA2IHP3JWq6L2DvnGKv93yddMh9AVuvIAGiNefMuWlrwIFopieMOcopi2wY7YOkcIxIh3bbdneZwEICRGn2dxDgaQdQ6\/0xxD3WtL9PU4tiSUlKj5Q72ummWEaxV6FWj5+2KmZL7C6csXnb8jXTtwlFB5C23M4W5cyAlxPk5YVyY6Hd4YWRK0rED9l9u9OEIYFaYuGJ03DNKV9EOfoZKr5EOcpKcDG29AlE5QSnXfNxsF37lEOf2ULlBRoj\/w\/7T7oCQSAQhpmKwyCA8P3ILl0z\/TlS0MK4ZjrivqS3jyiJLdjw1wGgL2qfAHUCJqN7Wi5HJljfX0Cd3xQ3bPqQts8EZSEIINwz6v6Eg7ukgAn4kzGPJtG0a4IgIrJs41rVfFowP2BBUpB1oat9s4q1hpW1+BkAYMNTj4eW6GWivwhBhzGB26hebL6gRFw3G422q9iiSGyt84fbFZ2JdWwEMz8Af6oedRC6yYexbFFQHkaSTwM4rnmsOksXxjR7F63D6ddcj3zPiUhqBk90OI+IIaQA8QW4dH4DfkUCyHT7qK\/PJ6LILl3Ni4o93oHVHYkGkcp+bLEpFJWsV\/XgIz89ZgPzRiKitok5J2AyoFLxRbkc2f0aPN0riBcnDdtWa48pLWLHlu4BgL6ZU5724R9qnlIiK3+XxKZKgkrWMFN7nBiybE2hqHK1EfO3hfM3Xe5GSbY8raXbFL0E\/FIqOradjiGIYC2DBJ61cM5GNxYyZVO3Cm6JWmJRULNx1cnHY0F4Q8YuDEY7Rwvvk9DxHEB4zVNJ9Bj3xStINIZ\/jr\/88trUfSln674whI\/IfvFHs15kjTm7XjXMzTPgHXBfYDSDmC8Mw9D29W3Z06rGTsB0mmYNFraW3ymVQFI3tp0ODJhEElsYtkM7v4GnfFQHwGEIPKi337efV\/qrVOJQbmPbdQKR0Qwh+JNf3jQtkltqwwDw15f1OhemnVPyzEGzO\/UYLPP\/ZbA2F0lsTO++uZcvWzvjww\/PmXXR\/mtu9x4s1lwzyXau2rdN4XKmgmC3l\/OtPy\/E6rk34fapCdKabNnMEWGYFre76i134Yxr\/hv53vchrv6jC5Oa1QEGQ40plcxP7PVFPlE5sstXm4+WJqvJ1R2Jpk64L8y61Oupke3JNxfP3\/wj5kAQtXcrzQmYtqvjQAwgtEvX9h8qBZ\/UqBpGG4+lphngRElsd0DQr3d2V55mEcxBABGeeGd1+Zrpv5GKDk1ibmcJEJHExhR71fMaI3bBOWffeWmFfXk2RS5otXNO3o3gBgBSil\/EDYt2r+iIQI2qYQL\/W++Nt3zx3Hk3VdO+Gy4jZsJCJNDQBj25V+MhvANheDn6fAlkOEe0itvhqs8grr0NpPYFJ618MJMmE9U24urTbuiE++JXfFn2I7tybf9hkPyOWlVbdKDsATPbXF6qelX\/QYLPZwYNDIRt\/71ul7nt6nhLWoHQ2A8WiqpkrbXtTJAlMCuPQMT37MiL+9KFxC4GgeZJKTDdKaj9R6mJiHTMzLCLV9x25OShgSiteu3oOL4fWQDwiuZXSWwfUio939DG0SCS2NhSr3ewMPX3EIGDDf2u\/syEFzEgJIYB+hhWnb4f\/Mh2pLjdqjP\/DJhl8PICGO0qTbAGgAgAAFv6Mp+7\/Oakb6z9RL6oCmzYZt03gJmtVEJYyzVrcPrC+Zu3DSCgdp08cgImIyoVX5bLkbl49YzX5PLiHfWatkRt7y9jpRIA6K5w1qCupE3RdinwjJ5EkrhFJ+1NNN7JhbHFXu9g+1B+cRjCDrig1SWL39SRO2f65oeIcJfKCTCxbe\/vJIrrxnqKPvrldbOnYMOgbRVYdEzYkSgQG4se74VAbWFHi9vlCisQj\/wW0hNgTuCVBHRjDVb5G9K6L9m6L634smLdtMNVTrytPqwtKFv3hZmN8oQQRDqp29MWzdt4a6Xiy5CyaZ\/gJoe23VkQ\/HQLSRJWKk\/kbRtzSkZ\/LYE4\/TVpAaHR+i67vupmy7+IY\/uQkCTaX\/+DRKNmrFS0ZPm6\/n8OZw1qP+tOtI4npuXIWWyWSmRR3FAkieVCSU2p28YlYQh733MPd2PBqWmBurYQdC4q\/gs7Vtzuv0\/eAUIIISmtVxMbwOuY+9JKbbQGoZeXktNaNZm8D2YwW9bFkpJE9HAjtictPn7T91uiKqtr4ARMm3jv5YerMkVm8toff7LUq6bVq9q0uyQ7M1gIIetVUyObbATwtMdlH7\/qZgYtnrfpPgL+x8sJoO2rbpDRFsqTvQB\/bcXqufmp\/lR2K+\/OM1q7CHaDjm0m8wURyZHhxJR65IKLV08\/4\/Kz70yC9f0uV29CCxgQEssoqP3QSD4JArcOCGWnFsoGQSDw4oO+hbh2C0oHKti4glVv+Rn8iuyE+xKVI7Ns3fQZubyaXx\/RNotj061ik8oj6tnHU1rzrXGcTFsyf+PqrMWLEzBt4rI7DvcuP\/vOZNkNR5+az8lP1mvaZLB1BBBbLyfAzHc9OG\/275mx2\/uQrS0cIrpZZHQQj4hEo6ZNsUcdaan6pZBC29fnk8uH6SwtR64R25\/GDXOf9ITIoiIvmETcsLaQE1+9+HszXhPOGtROxExwxGhxuzNx9VteAwotsnZqt\/QRwlkaECHi4Qa0\/DTAhKl+5onmQ35aF4cNQqGImNvc84PBzGykIipO8hQz7qsN6yV337Ojf\/G8nwx1Qrw4AdMGgvX96uzX3ZlcfP3R01TBu8JahjWcdiZq+8QPSEkA8ZqQQhs9k73iZiM\/C6ypj2hNIIEM6uQSkawOJ6bYq\/512erpny+XIxNFvnAipoMLXwJXKr788Mm37GDgR7mCZMqg\/HzLlSNBxXwvfe+Stf2HhrMG9XonYia2D2OZkVM5GHtBqrA7UNwOAA498MeId7wV1\/hDADFCyrRoXSvHZPmNM+YXSmpmo6ottSv3pSlcSBCVJnkSzA\/URpJPN7bHr144Z+PSy8++MwkCiE4dx3cCZqzuM4OC9f0qnDWoL\/7h0bNzJXU9wL1WZ9ZQi4lI1KtaQ8vrd1bpu0Mz+YoePm7wbrb4Ra4gCWCbzQxFsl5NTGmS96Fla1MRQwR2OTGdtGHSP6zFd9kyZTVnEJGIG8ZIJV6YU7jx4uv7D5vVcmKcqJ2oijotbpeXb8aVJx\/XERcGAMJZGlcvuKFTl2FoaCoH6\/sVGx5ob0xjQwJU6vUkCeyoV\/WyRpwcft6cTR\/\/4Ftu3do8IJLJaSMnYNqpiNmXROBw1qBetmb6v+Rz8noC9jOJtchi6ygVyjZfkLCWbzvvzYN3MYOeaSZ4sL5fhgQLIGo28stQCZKsjiSm2KM+tHxd\/9cWVY4qRmkbBuXcmOwpI91GUij9qDas\/6I8KZBRmXQiko2aNkLSIfkiNqxY2z83nDWo0XSG3N2ZkCtFhiAC8BlcdriHoYg7ImgD7kjsrLAvwzC0+9XMWwsldUSjrs1YxxhuuqzFVLg06nX9VaOTIxYet3HxB4+\/9Y+Vii+Z0\/Y46HAXOydg9mQwtW4kRWbZdf37Xnpj\/5fyBfV1yyhkKV5GJ3wBgsBVROBoT44aNhN\/E5N8uzaih4UUEpzdQCWQrI1oU+yR7zpkv\/z6pT984+vCWYO6taXhhEyWgwocrO9XC+ev3U4C384VBZ62M+8Yi5i4biwRniUUblh544zgsjsO98rlyPgVXwYcuDlsorkw9cSgxzscvS88DSFs5seqAWS9bdT69EMDEa9YPTcPIT5uLTON4VzIYMMMLpY8KQTZuG6u1prfuHD2xvcumnfLryoVX7a2i6hLCky6h3+3FwCgSsWXaCpQIvDKG2ecKnr41lxJnhM3jLUGnLF4sUoJUR3Rf1cidy3waALmM3o2Q9hKxZcfPP7WP4Lx\/UJRgsGZPrAEktUdiVGeeL3KqU0rbpxxwbL1\/fu2rnnFBa\/smNkUtIn+em3EJM1aE9kJWiKhE2uNZpkvqoH6g72DS9dNPyYqRyak0AYBhBO2E0pUEzQzwAP4rxMndcyFyX7BLMIQ1orhswol1Rc3xqYlTXr8mm2hqKTyiBo1cz1bO\/3c2YNnLJ636ec7C5dObhc9ES4pbhcelyAA9fX5FAEgikyrlPXKNf1vYsHnS0\/MAQPVHYkhIpl1E3Nm5lxBCRPzN\/999o8eqFR8SWNUkp+BLyUNc1onWrM3txCsEFQolNQnGnV92vIbp6\/gEXFV+ZTo4dEHm305hKk8gJDJlZ5vw2ITNuBAfJDC\/1u+dvoPCj3eqbXhdKxnOBgEGFwdTmy+qN5ACX604sYZ11i2yxfN2Xx7qypGa2tpaCjiZgVqNx72vilZINYGvblDwPEHEOKzmbcY6MDCGYjsitVHTrYsPqq1ZdrTgyFNJzVfVIKZEdfMj2D5Cwvnb7oRSGuYAUC5zf2MnIAZo6eCGRgYSMXK0EFbqdXsLJ0I0wly+c2vf5ZNcicoQQuEpH7pCTRq2oLTgNuBgc1SClEb0duZ6MsAaFd6Hz0d5XJkggBi0byNty5bM31tsUfNr2VQy+aJVt9s08Dl5eShOU9c2mC9ZPma6asEqejcuevvKjfFWth86PqwhRA1k5gHQoQDYNdTZ8\/oi7YQAFjDS3VsTu6EoAWBCKmoJZAo9Kq3N6q6vGLdjDVs6Yq68m4sz44eedyqVbae5aGhiAcGwM137sbDeBcxNc0QdD6uPvEK+NF9CCDQZQ7BWBFFviiXI7NiTeHdpV51SHUk2ZO52DKY8wUpiQhxbG63if3cojdv\/h4ABAEEBgJkVU13j0bB8rUz2vogM9gUezzZGEmiB\/PidBw0RWDb1q64MH3bprDvR\/apVu2Vii\/\/uu\/fXyyYjrbMxwE4Nl+SU2CBes0wiC11oHnWTu6LKU3yZHVHcsmieZvOb3YAHZPr6zeLJa1YO\/2NyhObdMLgzm47Wgaz50np5QRqw4kG0e3M\/ENJ+JHIiy0fmDU4\/BSDkQIEhA0bJuzW0+52o96ZgAMRUmiXrZ7xveIkdVLmLswTzC0EkvmSBFsgqZt7mfhmIlqXWL71\/Lmb\/vSUnyeAaC1WJqQoHatu1EEgEIYWV574cgj5ywxnA4NJOYkd8Zdw5vc+gIovUd77XJjW1ugXbz52f62Tu5VHzzGaGbs5F6c1nNh6OSmVJ5A0zF3W2IsevHXTt8IQFgyqNIXSuJGxWQiYUq8n68P6qoVzN57ZzYNkxfXHTOFcfV9i9RJLeKkgvJqZX0OglxV6ZBFESBoGWlvTXBB2+iSElZLIGN7Wo9Qr333sj7cODIztsbaWiFn6w+mVnsmeX+1w0BqduphZCJJeXkJKQr2qYS1+D8LdYP4FCP8PWvyK8vpBSib9feH8tQ23at0zWsWqlq3rf7USuN1abp0Mo84+umyJQSonhZcTMIYR1\/XDAP2KmO+yzL9gkr+x1txLUt+\/ZO5tD7q7OYZ0SsCg6awKShDz63DWdUOo+GJvEzGjz92a6QOlXi\/Y3Tm4JVyUJ2UuL1CvmV+D+JI\/PBRfuax8W23n3zHerk37BQyDVU6QSeyvAb4BTII7aN8SERNzzhIUMZcAHATQ\/iAuMejZYOzr5YTn5VJxq7WFThjWpqIFTIKoOxLGmFNxOLI9+cDiN2\/6UjsGYRBADAyAl67rf4kn+RcAFY1m6pJrwABbbopJ5Qkoj0CCYDSjUTMMYJgI9wHYDvAwGNtY0ANggBh1njBbCWyVonxs5H8tmbv+riAIRBjuvlPXGmOXrJ6+fNJkb+HwjsSIzgvaxwhbAkgoIZQn0sKOAOJ04dEg0P1g3A\/iKkAPgvnvTBSDoYkoTr9974aImYRQVvNfnzf8rIv3eM7onIBJXZjenMSO+Hqc9b2T9jYXpjX\/fuGmNz4nz+ouIegAoxm7Mv+2hItUQuaLEo2auZfAK2xS\/6+F83+6fafn2WKczoOq\/Q8LSMcWyqOX5Qpqcdc8xOkNhrUM5rS8gNUMaxlJbDlJjAWA9Jga0aji7ZLpjZlNoaRkdSTZ\/EhJXDaWW0c7E4awfX2+XFKO7rnkhunh5P3UF4a3Jxog1R23kVoND1gnlpOEudl0UBCREIImSUWTSBCIABIEQaPqZ8JgLaNnksID2+JbANyFmRueUb7A0FCU9qkSyQXVYZycy8kX6thaUFecaBSt1Byjma1Oj6qkDzsJISgvJD1PSnoeiCBEOh5ogo0Ftox8QeLhBxt\/HgKWATBg0LjMExMkUY0NiupEfOukmShHG\/YmETMwEIAo5KVr5ZJirzqwdVDk6cMDWymFLJSUrFfNtkbNXMqJ+c9z52\/eNipc\/MiWaXxfp0yCEBGgE2aTJF13sZhArbP0jHT6S9VtdwmWxytrqQTp2NaIxPvCWYN6S2WKRJsKjJXLka1UfDn05qmXyHU\/PqHYo6bXRnQ3bCU9XpM2b92jl8oYhrXMYAY3J2jiiZfAyQRDgLSW4j0VtE2x\/ODy1TPOIYEfkmDDaWps1zwtzYHwaKZxWk+aDTObxALN+owTcSwAsCZhAeChvWNwAxAEaHwezEdhYGCvuKdBEAhCyEtvmPZiKeg9japm4KmPTTOzEYJksdeTjZrZXq\/py5OGWr7khB\/\/pSVc0rzPvUPgqYwnlK479UQ7iZTx4h0T2OSLStW26\/PPm7\/x\/zLYv+QhP+KQYC9Ze9S7kljcIZWYbA1bdHctoVYEo8d4rhMyZZMJgCTa8y0SotBWKr4sz49WL1s9fUXvvrmFww\/HmgSpLn9wqDUWHv\/sT6yhwE3HjPaOasZpiwGDnvyRWPWW0xB+9+q9wYXp69tCIFixhj5SKKpJT5X7wsyGiGSp15ONuonrVfN1bXHxkrkb79kbhUsLVwhsvM09lnVpck5Vd+irzpu\/8ctZJV+FlBa3WzL3tnvimN+pPEGUtldzx1EnIL6funL7FsVHqtuTzcVJSllm466Mo2NLFW0ZxCEuO76EoanjurhdwIEolyP7xTWz+oSks+pVzfQERetGq+f2KikEcb2qv2UTc8TC4wb\/bcncwXt2Lvu\/N9bIcgJmXC2cWBcneao6nNxmd8TvDTgQ5T2ouLu7lMuRqVR8uWT+xutq1SQo9noqi+7Ejm6MF+Choan8zlmD9Zql0+K6\/VOhICU7EePoVCyLtUWPdyhK6v0Iw860GBgjmnWXOIH+eL6o8tayxU5+ITNbMGyhqGQuJyiu2+uN4aMXztl4+nnzN9\/djWX\/nYCZwNg0aVfFDfNra\/nUJeXbahgIkXXiXbkc2SDoV0vmb75gZEfjP0uTPQVm7e7QxCMMQ+tXfPmR+YN\/Tow+wRh7v5dzIsbRMVktUNcMKT6Mq094FvzIIhh\/Mc5vuuor104\/Uil6a72q7aj7wmyZ2eaLSuQKQsQNc7PR5thzZw+etGjexlu7uey\/EzATFGbWxZKSSWz+WKvx8YvnbbqvUvFlhwYohwODJuBALJq7+X217fqa0j45J2ImKFHLlZv7k7viEXMCMz\/kRIyjM\/oFhMRalNQBsPIjIDD6\/HG3jTTVn8oAoBmf8PJKWW6dk2XjFZQolJQwif1JUjcnLzxu4+xz52z6cRBANLedJoRwcQJmvGBZF3uU0rH9Va2O2R8+YeNvOl50iMADCJkZ9OBtdObI9uRrpUmeau3Hups2sSiXIxOs71dLTvrJbXGM+Zb5gXy6neRErSPjuYkEatpC0tlYdephKEcWzf5Y44FKxZchhfbSNf0zczn55lo1McRgLydFsaSkScwvkoY9\/f7NM2csnLfp+63mwmEIOx5K\/zsBM0FoFiHSpcmeatTtrXG9cWxXiJfReSIVKgMDg2bR3I3vro7oi4slJYUAMbN1d3BiEc4a1Gl+1OBtOrHHGWP\/UOxRyokYR8aLK4KxjIJXBJsQAKPpaIwHhoamMjMoYftJIWGlELLQq5RO7K8bNXP2b3TpqHOPG\/xWGKYnAYnA5XI0Yd1OJ2C6UbyAjRCgYo+nqjV95Z\/vTeYsOeG2v3RbueeWiAmCQJw3Z+MHa1V7DgmKcwUp3JbSxKOV5L143qafj8Q0PW6YwZ7JngJg4UStI7uJSaIWW3jqrbjq1BmgcFy4MKmTEtqV6\/rnlCapWUQkmflPtWGzpN6jX7dwzsbLL52\/ttHquD6RhYsTMN0oXBgMZp0vKEkC9XpVLzlv9sazLnr3LTsCRlc22SICh2HIlYovF80d\/AqzOc4k\/OviJE+lpcNc4JqIIuYj8wf\/\/MCfaW5tR7LSywmhck7UOjLEgqGEANsLEQQCQ13uwjDI9yO7YvXcvGW70lrcX6\/bTyQNeu2ieRuXfnjaLTuawoWccHECpgvFCxshiYq9ntKJucNoHLNwzsalQQDBDAqpqxOzuBW4Fh63eXB4uPrGxoj+Ly8nhZdPA5fLjZlYIiYIIMJ3DtYXzt20MNb2JMv8u1TUgtkdvXe0f2UlUUssit4MvPyutyLsbhcmQEBEYCOrx4H4R9vvt69ZNGfwU+efOHj\/zrVcADePOgHTVcI7ncyLvZ4k8HBtRA\/8\/qF4xqJ5G2+tcJqcNV7O8bdEzH+c+rMHzp2z8T1xrE+xhrcUJ3lKKiJml+Q7UQhDWDQTDBcdt\/F6js1R9ar5spBkiyUlwbBOyDiyWBnC0gCu7+7idq0E3FjkNi6au\/l9H3nL4J\/39iJ0TsCMY9XSOmZaLCkpJHGjpr+tjTnqvLkbw2Xl22oBB2I8NtoqlyPDDAoYYtHczd+7\/2+1N9Sr+uNgvr80yZMtIQPAbS3t9avgnZy5+Zu3LTxu8P0WmNmom5tzBSHyhccIGTdBO8bahRFoaIuS90\/Yod4zHorbfWT2zY8EHIiJUIRuLFDuEmS6GrAALElSxZIn61WDuG5uMMwXLZqzaSPwaJfQ8XwkrvnQcTPpeDuATy+\/6egr4xq9H4x\/7ZnkHRA3LJLEmDTOkcAE7VA0EWiJ2ijyRXl2tBnA7BVrpp9EUiz2CmKGlIR61QDMGmnBLrewcozVZERIDAP4MFadtgr+tx7o8s7bNBGPQzsB071YMFsGyVxBCs8TolbVw42avg6W\/\/PcuZtuAYCgWTFyb0rQelzguhfAh5dff\/SXGoL\/xVq8s1hSBzOAuGZgLZu0kbQTM3tnHAEDkQk4EAMImWjT9wF8f+XNM+bpBOcQYW6x11Nxw0LHxgKwTsw4xgCBxBj05J6DkfqHQPhQmgvTtfOsc1ycgOmkyQIGsSUGM0jm8kJ4OSHihoXR\/L9JbCIr7KrFszf\/blS4DATYW1X3aOAKIPr6fCqfGN0L4IIVq49cnjQKxxvGOwShvzTJy1vDiOuPETPkAtjeRUihDdF0GsuROfdNG9cAWLNy7axXNar6DAZOzZfUS4QkkdQNtLYWjGbXcyKQE7fdO\/nlDTixECSQ5rp1yb1qbiUJvA\/f9C+HH\/0WAQRCt43tBMyEfmDBIDCDmdIHVkglhJeTUipCo2agtf2lTsw6GL5u6E+1Wy4\/+84ESPtdTPWnckihRRju\/YErhAUiBAFE34BPZYq2A7gawNUr1\/cfVq+a49nwyRA4ojTJy4GBJLbQsQWDDaUrE8EgIhfExj0tp7FS8eXQUMTnzl1\/F4C7Lrv+8IGYeo9hxikMzM7l5QtUTgidMJKGBbM1YDATqClwCc6x6xLqBpAaoByYu+euEAjaWvTkejEcD4CwABVfAJG7ZeN9gbx87QxnWT2No0IETv+CllABiAQJEkoRpCcgBJBOsuZBJvwCTBuk4Jvvf+j+O8Pylrj184L1\/QobBm04wdV\/a2vJ96PHnLL64tr+Q9nDdLaYy8yvF0QvyhXT049GM3RiYTUzN10uAGgFM2YQUXPKcjxea5tiSclqzfqL5wxeG6zvV+Gswa6pyxJwIPqiLY+pcfH5zW+clB9WR4H5WCYcQ8ArckVVUIpgDUMnDKMtOO3Ua0fHAoM4FTdwYvcJHz7r5aWIY7vl4e3Pek1YjuI9ygtpfW\/F3wdx8kt48tlILHedW0awkMLCYBpO\/87tWN+vMHPQYGAP3udA85oNgJyj0wEHZiIfZaQnONK78wRIBJKKSAgiIQChRHNaBHRskTRMPTb4k0jsEAm60xq+naz9xXnzN297zOS8vl\/1bZvC5XJkuylodPTaN7eWgOY22sx+MTBz0BAN3gPgHgBfv+z640u6uL2vXjOv48QcyYJeBdDByqP9vLySRAAYsJZhNIMtw1qGtano3MkZ+4d7PAEvuQHAzNSVC5bRLVQGVZonRcrToh0Abmq+sGxN\/8E65r64Zo4C4XVgvJyZX5AvKqUUCQbAlmEMwxoG23RsNNce\/JgFyMQeD5bTBoFjM\/e3hE85egRXnbwVkp4NzYzR2bJ7PjXyQkHrTwN4Ex6di5\/5MxHuJOMc2QuYUo8nJ\/QVoJ3+IMAawBoLawGtLYy2j1jCDoC2omH\/BMbvwfgNBH6Th\/jNYQX8edbjREkrIG\/ZNoUjP7IhOdHylHNACItw0IY7Xbu+bVO4fGJUBfCz5usrALD8+69\/lhWFQ2oj+mUCONQCLyXGcxl4AcCTQdjXywlJRCQkQUr6x9llAk411rIs9irU6nGuy59HLjeFbculGzpoK4WzBvWieYN\/APAHAD8EgEsqRxXlvrnnx\/Xk5Q0SL2bLhxHhRWC8kIgOANBLgiYpSSQkkZTNFHHeaQhMwLHAlmWuIPHIg\/G+Y\/ZDK75EOTIg\/BZSvBLdWHGFSKKeWHjqWFx98gJouhGEHKR5Zs6JkYy6tugVOWiehEfy9+ID0bCb0TMUMPURfcWEm8zTx1gQ0zCDqxCUgFFjcFVYPMTMD0Dww5bwELz8\/dbIhz8456aRJ\/t5AQcCGzaIvm1TuLklYhEOOjtxD8RMazUeIKDWtS2XI3PeSbf\/HcDfAdy28\/etWD03H9ce2SdXlAfGdbOfILGPJTqAyB5AzCULKhFQIJAkwn4TT6izjWNTII17AAAbun987uzStRYGfX0+DR20lbBhpl1SDmsAftN8PRqgGbRyzZGT2PP2TRJ5gEnsfkLRPmx5CoSYTIZLAHqYWBAwmQkFAZowzysDHDeMR2TvxdBW+xgX5Zly0NaWXPkFBJ0CUJdKQxLQhsG4AhLbwZBgybt9BQEDYg+9Xi+AewF9OXriL+HRjTPnyGTnPzh2Bb\/iy6nNB7Vv2xQeGoo4DNOaJ+7qZDT5Mqgc+WLn+\/D4PBrHhInEFAyARkUNAMycaV0djQ7QcmC+ecpslOSNaGiL1O\/qXsQzCH+WAUlA0QNG4gREX0MiL8FZ0T1uEHRAwFTGQZfOdjL06MphlL5tUxgAhvypjIEQAwPNRF5HVwczBjCAgPqiLfR093bCivCJIfaIGRgYAGEggBsPT0wEIBqrulOtRN5Vb94PnPsNlDgAugsTeXd+x7t35w0AiaIixDoB01WI6RL8y3eGHiPgHNk+6O4SOBwOh2OPaQXxq065Fj3eqagmBuO9VAezAUikwsUAwLXQ\/AWced3PRj\/z0FRG6Fy\/TuDqwDgcDodjLJfF3wbzW1rVesapcLEgAEVPQlsgNmsB83mc9v0N6f8fCAwAKIfOdXECxuFwOBzjmnJkARBMz2qMDP8ReflCJKb7c2Eeq1wsGEBBpe85NoOw+ALO+O5qAEAQpP\/d5Vl1iVZ2OBwOh2MsCPoVwkGNq076EHrzn8eO2EDQOMizZAsGI68kJAENfUcqXK5Ly\/UyCJEvXJ6LEzAOh8Ph2BtpVX\/5xkn7ICfuhieej8QyurWnGYMBtvCkRE4C9WQLQBdh+4GrcPblCQCXoOsEjMPhcDgmBK2Av+qUM1D0rkIt0ei2dIX0DJKBEgp5CdT0H8D2Enje11COak64OAHjcDgcjokIBwIUWlx18nfRmzsFw4kGdYGIYTCYLZSQKCqgpu8DeAUeii\/HOT98aCfhYuHqezkB43A4HI6JJmCaseW7pxyEBt2CnHgJarqT+TAMyxZSSJQUUNMPgfEVNOqX4p2r\/zYqXPzIwtX8GjcIdwkcDofDMcZLY8ZAQHjLdVsBOhXaPoi8lLAdaB7MbAAQJuUkBIZR0ytRN6\/F6d\/9GN65+m+o+BIMavZycuJlXA0zh8PhcDjaQSuP5MqTpiMvvwMhD0JdZ7OdxGxAlDouDZOAcSVsfBHOuOGXo+\/NOS5OwDgcDofD8ZQi5hsnvBKF3DUoyH\/CSJzWW6ExrhHTOlVElOa4pNVzK0j48zjzup+Pvp+hiBHC1XJxAsbhcDgcjl0QMVecfADy4guQ4l0gAupJM1mWxDPum9QSLQCghERBAVXNIPwABl\/Agu\/+5FHh4sr+OwHjcDgcDsduCY3mySQAWHXqfAj+JHLq9RAE1DVgberKgFpShp5UsBDz6NcqQcjJ9KuryYMQ+A5YfA2nf+f20d87ADjh4gSMw+FwOBzPUMSAgICaQobwrZNPBMQ7wDwLSu4LQYCxgGWA+bEHman5PwKAFAARoC1gzFYQ3Q6B65HghzjzuvsApGX\/B+DK\/jsB43A4HA7HGPH4InHfOvklMGImiGcCeC2A5wJcAJMCQTUTcjWAGOBHALoHwJ0g\/AQGt42KltbPBuCK0O39\/H8rTIBEC+By8AAAAABJRU5ErkJggg==\" alt=\"DEEV\" \/>\r\n  <div class=\"brand-copy\">\r\n    <strong>Visualizador 3D Premium<\/strong>\r\n    <span>Herramienta comercial para previsualizar la implementaci\u00f3n del stand y validar la ubicaci\u00f3n del TV y el dise\u00f1o del backing.<\/span>\r\n  <\/div>\r\n<\/div>\r\n\r\n<aside id=\"panel\">\r\n  <div class=\"head\">\r\n    <div class=\"eyebrow\">DEEV \u00b7 HERRAMIENTA COMERCIAL<\/div>\r\n    <h1>Visualizador 3D del stand<\/h1>\r\n    <p class=\"head-copy\">Seleccione la categor\u00eda, cargue el dise\u00f1o del backing y, si desea, el logo de la credenza para compartir una previsualizaci\u00f3n m\u00e1s clara con su cliente.<\/p>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"section-title\">Categor\u00eda del stand<\/div>\r\n    <select id=\"standSize\">\r\n      <option value=\"diamante\" selected>DIAMANTE \u00b7 Backing 3.00 m<\/option>\r\n      <option value=\"oro\">ORO \u00b7 Backing 2.50 m<\/option>\r\n      <option value=\"plata\">PLATA \u00b7 Backing 2.00 m<\/option>\r\n      <option value=\"cobre\">COBRE \u00b7 Backing 1.50 m<\/option>\r\n    <\/select>\r\n    <div class=\"tier-badge\" id=\"tierBadge\">DIAMANTE \u00b7 TV 55\u201d \u00b7 4 bancos<\/div>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"section-title\">Backing wall<\/div>\r\n    <label class=\"upload\">\r\n      Cargar preview JPG\/PNG del dise\u00f1o\r\n      <input id=\"backingUpload\" type=\"file\" accept=\"image\/png,image\/jpeg,image\/webp\" \/>\r\n    <\/label>\r\n    <button id=\"resetBacking\" style=\"width:100%;margin-top:8px;\">Restablecer backing blanco<\/button>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"section-title\">Credenza<\/div>\r\n    <label class=\"upload\">\r\n      Cargar logo personalizado\r\n      <input id=\"logoUpload\" type=\"file\" accept=\"image\/png,image\/jpeg,image\/webp\" \/>\r\n    <\/label>\r\n    <button id=\"resetLogo\" style=\"width:100%;margin-top:8px;\">Restablecer credenza blanca<\/button>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"section-title\">Ubicaci\u00f3n del TV<\/div>\r\n\r\n    <div class=\"btn-grid\">\r\n      <button class=\"tv-preset\" data-x=\"-1\">Izquierda<\/button>\r\n      <button class=\"tv-preset active\" data-x=\"0\">Centro<\/button>\r\n      <button class=\"tv-preset\" data-x=\"1\">Derecha<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"control\">\r\n      <div class=\"range-head\">\r\n        <label>Posici\u00f3n horizontal<\/label>\r\n        <span class=\"value\" id=\"tvXValue\">0.00 m<\/span>\r\n      <\/div>\r\n      <input id=\"tvX\" type=\"range\" min=\"-1\" max=\"1\" value=\"0\" step=\"0.01\" \/>\r\n    <\/div>\r\n\r\n    <div class=\"control\">\r\n      <div class=\"range-head\">\r\n        <label>Altura al centro<\/label>\r\n        <span class=\"value\" id=\"tvYValue\">1.60 m<\/span>\r\n      <\/div>\r\n      <input id=\"tvY\" type=\"range\" min=\"1.20\" max=\"1.95\" value=\"1.60\" step=\"0.01\" \/>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"section-title\">Vistas<\/div>\r\n    <div class=\"btn-grid\">\r\n      <button class=\"view-btn active\" data-view=\"iso\">Isom\u00e9trica<\/button>\r\n      <button class=\"view-btn\" data-view=\"front\">Frontal<\/button>\r\n      <button class=\"view-btn\" data-view=\"top\">Planta<\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"switch-row\">\r\n      <div class=\"switch-copy\">\r\n        <strong>Mostrar cotas<\/strong>\r\n        <span>Dimensiones principales del m\u00f3dulo.<\/span>\r\n      <\/div>\r\n      <label class=\"switch\">\r\n        <input id=\"dimensionToggle\" type=\"checkbox\" checked \/>\r\n        <span class=\"slider\"><\/span>\r\n      <\/label>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"section-title\">Implementaci\u00f3n del stand<\/div>\r\n    <ul class=\"specs\">\r\n      <li><span>Backing wall<\/span><strong id=\"specBacking\">3.00 m \u00d7 2.50 m<\/strong><\/li>\r\n      <li><span>Credenza<\/span><strong>Logo personalizado<\/strong><\/li>\r\n      <li><span>Bancos<\/span><strong id=\"specStools\">4 tipo c\u00f3ctel<\/strong><\/li>\r\n      <li id=\"specTableRow\"><span>Mesa de vidrio<\/span><strong>\u00d8 0.70 m<\/strong><\/li>\r\n      <li><span>Televisor<\/span><strong id=\"specTV\">55\u201d<\/strong><\/li>\r\n    <\/ul>\r\n  <\/div>\r\n\r\n  <div class=\"section\">\r\n    <div class=\"section-title\">Personalizaci\u00f3n<\/div>\r\n    <ul class=\"personalization\">\r\n      <li id=\"personalDesign\">Dise\u00f1o de <strong>3 m de ancho \u00d7 2.5 m de alto<\/strong>.<\/li>\r\n      <li id=\"personalTV\">Considerar un televisor de <strong>55\u201d (121.78 \u00d7 68.5 cm)<\/strong> empotrado en el backing wall.<\/li>\r\n      <li>La posici\u00f3n del televisor ser\u00e1 definida por el cliente y deber\u00e1 indicarse mediante un <strong>mockup para validaci\u00f3n previa<\/strong>.<\/li>\r\n    <\/ul>\r\n  <\/div>\r\n<\/aside>\r\n\r\n<div id=\"hint\">Rotar: clic izquierdo \u00b7 Zoom: rueda \u00b7 Desplazar: clic derecho<\/div>\r\n<div id=\"toast\"><\/div>\r\n\r\n<script>\r\nconst container = document.getElementById(\"canvas-container\");\r\n\r\nconst scene = new THREE.Scene();\r\nscene.background = new THREE.Color(0x14161b);\r\n\r\nconst camera = new THREE.PerspectiveCamera(\r\n  40,\r\n  window.innerWidth \/ window.innerHeight,\r\n  0.1,\r\n  100\r\n);\r\n\r\nconst renderer = new THREE.WebGLRenderer({\r\n  antialias:true,\r\n  preserveDrawingBuffer:true\r\n});\r\n\r\nrenderer.setSize(window.innerWidth, window.innerHeight);\r\nrenderer.setPixelRatio(Math.min(window.devicePixelRatio,2));\r\nrenderer.shadowMap.enabled = true;\r\nrenderer.shadowMap.type = THREE.PCFSoftShadowMap;\r\nrenderer.outputEncoding = THREE.sRGBEncoding;\r\nrenderer.toneMapping = THREE.ACESFilmicToneMapping;\r\nrenderer.toneMappingExposure = 0.82;\r\ncontainer.appendChild(renderer.domElement);\r\n\r\nconst controls = new THREE.OrbitControls(camera, renderer.domElement);\r\ncontrols.enableDamping = true;\r\ncontrols.dampingFactor = 0.055;\r\ncontrols.minDistance = 2.2;\r\ncontrols.maxDistance = 8.0;\r\ncontrols.maxPolarAngle = Math.PI\/2.02;\r\n\r\nconst dimensionsGroup = new THREE.Group();\r\nscene.add(dimensionsGroup);\r\n\r\nconst STAND_CONFIGS = {\r\n  cobre:{\r\n    label:\"COBRE\", backingW:1.5, backingH:2.5, standD:2.0,\r\n    stools:2, table:false, tvInches:43, tvW:.952, tvH:.535,\r\n    tvText:\"95.2 \u00d7 53.5 cm\"\r\n  },\r\n  plata:{\r\n    label:\"PLATA\", backingW:2.0, backingH:2.5, standD:2.0,\r\n    stools:2, table:false, tvInches:43, tvW:.952, tvH:.535,\r\n    tvText:\"95.2 \u00d7 53.5 cm\"\r\n  },\r\n  oro:{\r\n    label:\"ORO\", backingW:2.5, backingH:2.5, standD:2.0,\r\n    stools:4, table:true, tvInches:55, tvW:1.2178, tvH:.685,\r\n    tvText:\"121.78 \u00d7 68.5 cm\"\r\n  },\r\n  diamante:{\r\n    label:\"DIAMANTE\", backingW:3.0, backingH:2.5, standD:2.0,\r\n    stools:4, table:true, tvInches:55, tvW:1.2178, tvH:.685,\r\n    tvText:\"121.78 \u00d7 68.5 cm\"\r\n  }\r\n};\r\n\r\nlet currentTier = \"diamante\";\r\nlet cfg = STAND_CONFIGS[currentTier];\r\nlet standW = cfg.backingW;\r\nlet standD = cfg.standD;\r\nlet backingH = cfg.backingH;\r\nlet tvW = cfg.tvW;\r\nlet tvH = cfg.tvH;\r\n\r\nlet fullBackingImage = null;\r\nlet credenzaLogoImage = null;\r\nlet standObjects = new THREE.Group();\r\nscene.add(standObjects);\r\n\r\n\/\/ ---------------- LIGHTING: intentionally reduced ----------------\r\nscene.add(new THREE.HemisphereLight(0xffffff, 0x272a31, 0.72));\r\n\r\nconst key = new THREE.DirectionalLight(0xffffff, 0.48);\r\nkey.position.set(4,6,5);\r\nkey.castShadow = true;\r\nkey.shadow.mapSize.set(1024,1024);\r\nscene.add(key);\r\n\r\nconst fill = new THREE.DirectionalLight(0xb9c7dd, 0.16);\r\nfill.position.set(-4,3,-2);\r\nscene.add(fill);\r\n\r\n\/\/ ---------------- MATERIALS ----------------\r\nconst matVenue = new THREE.MeshStandardMaterial({color:0x181a20,roughness:0.95});\r\nconst matFloor = new THREE.MeshStandardMaterial({color:0x303238,roughness:0.92});\r\nconst matBacking = new THREE.MeshStandardMaterial({color:0xffffff,roughness:0.30});\r\nconst matWhite = new THREE.MeshStandardMaterial({color:0xf7f7f5,roughness:0.34});\r\nconst matBlack = new THREE.MeshStandardMaterial({color:0x111216,roughness:0.50});\r\nconst matChrome = new THREE.MeshStandardMaterial({color:0xd8d8d8,metalness:0.88,roughness:0.14});\r\nconst matWood = new THREE.MeshStandardMaterial({color:0xc99e71,roughness:0.65});\r\nconst matGlass = new THREE.MeshPhysicalMaterial({\r\n  color:0xe4f5ff,\r\n  transparent:true,\r\n  opacity:0.56,\r\n  transmission:0.72,\r\n  roughness:0.08\r\n});\r\nconst matPot = new THREE.MeshStandardMaterial({color:0xf2f2ef,roughness:0.45});\r\nconst matLeaf1 = new THREE.MeshStandardMaterial({color:0x4f7d38,roughness:0.74});\r\nconst matLeaf2 = new THREE.MeshStandardMaterial({color:0x6c9848,roughness:0.74});\r\nconst matScreen = new THREE.MeshStandardMaterial({color:0x050608,metalness:0.70,roughness:0.12});\r\n\r\n\/\/ ---------------- VENUE FLOOR ----------------\r\nconst venue = new THREE.Mesh(new THREE.PlaneGeometry(14,11),matVenue);\r\nvenue.rotation.x = -Math.PI\/2;\r\nvenue.position.y = -0.015;\r\nvenue.receiveShadow = true;\r\nscene.add(venue);\r\n\r\nconst grid = new THREE.GridHelper(14,28,0x3c4048,0x25282f);\r\ngrid.position.y = -0.009;\r\ngrid.visible = false;\r\n\r\n\/\/ ---------------- BACKING TEXTURE ----------------\r\nconst backingCanvas = document.createElement(\"canvas\");\r\nbackingCanvas.width = 1600;\r\nbackingCanvas.height = 1600;\r\nconst backingCtx = backingCanvas.getContext(\"2d\");\r\nconst backingTexture = new THREE.CanvasTexture(backingCanvas);\r\nbackingTexture.encoding = THREE.sRGBEncoding;\r\n\r\nconst backingMaterial = new THREE.MeshStandardMaterial({\r\n  map:backingTexture,\r\n  roughness:0.31\r\n});\r\n\r\nconst logoCanvas = document.createElement(\"canvas\");\r\nlogoCanvas.width = 1000;\r\nlogoCanvas.height = 600;\r\nconst logoCtx = logoCanvas.getContext(\"2d\");\r\nconst logoTexture = new THREE.CanvasTexture(logoCanvas);\r\nlogoTexture.encoding = THREE.sRGBEncoding;\r\nconst logoMaterial = new THREE.MeshStandardMaterial({map:logoTexture,transparent:true,roughness:.30});\r\n\r\nfunction drawCredenzaLogo(){\r\n  const w=logoCanvas.width, h=logoCanvas.height;\r\n  logoCtx.clearRect(0,0,w,h);\r\n\r\n  if(credenzaLogoImage){\r\n    const scale=Math.min((w*.82)\/credenzaLogoImage.width,(h*.62)\/credenzaLogoImage.height);\r\n    const dw=credenzaLogoImage.width*scale;\r\n    const dh=credenzaLogoImage.height*scale;\r\n    logoCtx.drawImage(credenzaLogoImage,(w-dw)\/2,(h-dh)\/2,dw,dh);\r\n  }else{\r\n    logoCtx.fillStyle=\"#cfd4dc\";\r\n    logoCtx.font=\"700 88px Arial\";\r\n    logoCtx.textAlign=\"center\";\r\n    logoCtx.textBaseline=\"middle\";\r\n    logoCtx.fillText(\"TU LOGO\",w\/2,h\/2);\r\n  }\r\n\r\n  logoTexture.needsUpdate=true;\r\n}\r\n\r\nfunction drawBacking(){\r\n  const targetW=1600;\r\n  const targetH=Math.max(900,Math.round(targetW*(backingH\/standW)));\r\n  if(backingCanvas.width!==targetW || backingCanvas.height!==targetH){\r\n    backingCanvas.width=targetW;\r\n    backingCanvas.height=targetH;\r\n  }\r\n\r\n  const w = backingCanvas.width;\r\n  const h = backingCanvas.height;\r\n  backingCtx.clearRect(0,0,w,h);\r\n  backingCtx.fillStyle=\"#ffffff\";\r\n  backingCtx.fillRect(0,0,w,h);\r\n\r\n  if(fullBackingImage){\r\n    const cr = w\/h;\r\n    const ir = fullBackingImage.width\/fullBackingImage.height;\r\n    let dw,dh,dx,dy;\r\n\r\n    if(ir>cr){\r\n      dh=h;\r\n      dw=dh*ir;\r\n      dx=(w-dw)\/2;\r\n      dy=0;\r\n    }else{\r\n      dw=w;\r\n      dh=dw\/ir;\r\n      dx=0;\r\n      dy=(h-dh)\/2;\r\n    }\r\n\r\n    backingCtx.drawImage(fullBackingImage,dx,dy,dw,dh);\r\n  }else{\r\n    const grad = backingCtx.createLinearGradient(0,0,w,h);\r\n    grad.addColorStop(0,\"#ffffff\");\r\n    grad.addColorStop(1,\"#f5f7fb\");\r\n    backingCtx.fillStyle = grad;\r\n    backingCtx.fillRect(0,0,w,h);\r\n\r\n    backingCtx.fillStyle = \"rgba(18,102,176,.08)\";\r\n    backingCtx.beginPath();\r\n    backingCtx.moveTo(0,0);\r\n    backingCtx.lineTo(w*.32,0);\r\n    backingCtx.lineTo(0,h*.36);\r\n    backingCtx.closePath();\r\n    backingCtx.fill();\r\n\r\n    backingCtx.fillStyle = \"rgba(150,186,60,.10)\";\r\n    backingCtx.beginPath();\r\n    backingCtx.moveTo(w,h);\r\n    backingCtx.lineTo(w*.64,h);\r\n    backingCtx.lineTo(w,h*.58);\r\n    backingCtx.closePath();\r\n    backingCtx.fill();\r\n\r\n    backingCtx.strokeStyle = \"rgba(18,102,176,.18)\";\r\n    backingCtx.lineWidth = 4;\r\n    backingCtx.strokeRect(22,22,w-44,h-44);\r\n  }\r\n\r\n  backingTexture.needsUpdate = true;\r\n}\r\n\r\n\/\/ ---------------- TEXT LABELS ----------------\r\nfunction roundedRect(ctx,x,y,w,h,r){\r\n  ctx.beginPath();\r\n  ctx.moveTo(x+r,y);\r\n  ctx.lineTo(x+w-r,y);\r\n  ctx.quadraticCurveTo(x+w,y,x+w,y+r);\r\n  ctx.lineTo(x+w,y+h-r);\r\n  ctx.quadraticCurveTo(x+w,y+h,x+w-r,y+h);\r\n  ctx.lineTo(x+r,y+h);\r\n  ctx.quadraticCurveTo(x,y+h,x,y+h-r);\r\n  ctx.lineTo(x,y+r);\r\n  ctx.quadraticCurveTo(x,y,x+r,y);\r\n  ctx.closePath();\r\n}\r\n\r\nfunction createTextSprite(text,color=\"#ffffff\",sx=1.15,sy=.25){\r\n  const canvas=document.createElement(\"canvas\");\r\n  canvas.width=1024;\r\n  canvas.height=220;\r\n  const ctx=canvas.getContext(\"2d\");\r\n\r\n  ctx.fillStyle=\"rgba(12,13,17,.90)\";\r\n  roundedRect(ctx,10,10,1004,200,22);\r\n  ctx.fill();\r\n\r\n  ctx.strokeStyle=color;\r\n  ctx.lineWidth=6;\r\n  roundedRect(ctx,10,10,1004,200,22);\r\n  ctx.stroke();\r\n\r\n  ctx.fillStyle=color;\r\n  ctx.font=\"800 38px Arial\";\r\n  ctx.textAlign=\"center\";\r\n  ctx.textBaseline=\"middle\";\r\n  ctx.fillText(text,512,110);\r\n\r\n  const tex=new THREE.CanvasTexture(canvas);\r\n  const mat=new THREE.SpriteMaterial({map:tex,depthTest:false,depthWrite:false});\r\n  const sprite=new THREE.Sprite(mat);\r\n  sprite.scale.set(sx,sy,1);\r\n  sprite.renderOrder=1000;\r\n  return sprite;\r\n}\r\n\r\nfunction createDimensionLine(p1,p2,text,offset,color){\r\n  const group=new THREE.Group();\r\n  const lineMat=new THREE.LineBasicMaterial({color,depthTest:false});\r\n\r\n  const line=new THREE.Line(\r\n    new THREE.BufferGeometry().setFromPoints([p1,p2]),\r\n    lineMat\r\n  );\r\n  line.renderOrder=999;\r\n  group.add(line);\r\n\r\n  const dir=new THREE.Vector3().subVectors(p2,p1).normalize();\r\n  const perp=new THREE.Vector3(-dir.z,dir.y,dir.x).multiplyScalar(.06);\r\n\r\n  [p1,p2].forEach(p=>{\r\n    const tick=new THREE.Line(\r\n      new THREE.BufferGeometry().setFromPoints([\r\n        new THREE.Vector3().addVectors(p,perp),\r\n        new THREE.Vector3().subVectors(p,perp)\r\n      ]),\r\n      lineMat\r\n    );\r\n    tick.renderOrder=999;\r\n    group.add(tick);\r\n  });\r\n\r\n  const mid=new THREE.Vector3().addVectors(p1,p2).multiplyScalar(.5);\r\n  const label=createTextSprite(text,\"#ffffff\",1.20,.26);\r\n  label.position.copy(mid).add(offset);\r\n  group.add(label);\r\n\r\n  return group;\r\n}\r\n\r\n\/\/ ---------------- FURNITURE ----------------\r\nfunction createNordicStool(){\r\n  const stool=new THREE.Group();\r\n\r\n  const seat=new THREE.Mesh(\r\n    new THREE.CylinderGeometry(.205,.19,.075,32),\r\n    matWhite\r\n  );\r\n  seat.position.y=.73;\r\n  seat.castShadow=true;\r\n  stool.add(seat);\r\n\r\n  const back=new THREE.Mesh(\r\n    new THREE.BoxGeometry(.39,.22,.07),\r\n    matWhite\r\n  );\r\n  back.position.set(0,.88,.13);\r\n  back.rotation.x=-.18;\r\n  back.castShadow=true;\r\n  stool.add(back);\r\n\r\n  const pole=new THREE.Mesh(\r\n    new THREE.CylinderGeometry(.024,.024,.69,20),\r\n    matChrome\r\n  );\r\n  pole.position.y=.355;\r\n  pole.castShadow=true;\r\n  stool.add(pole);\r\n\r\n  const base=new THREE.Mesh(\r\n    new THREE.CylinderGeometry(.18,.22,.025,32),\r\n    matChrome\r\n  );\r\n  base.position.y=.0125;\r\n  stool.add(base);\r\n\r\n  const footrest=new THREE.Mesh(\r\n    new THREE.TorusGeometry(.14,.009,10,32),\r\n    matChrome\r\n  );\r\n  footrest.rotation.x=Math.PI\/2;\r\n  footrest.position.y=.32;\r\n  stool.add(footrest);\r\n\r\n  return stool;\r\n}\r\n\r\nfunction createPlanter(){\r\n  const group=new THREE.Group();\r\n\r\n  const pot=new THREE.Mesh(\r\n    new THREE.BoxGeometry(.30,.30,1.0),\r\n    matPot\r\n  );\r\n  pot.position.y=.15;\r\n  pot.castShadow=true;\r\n  group.add(pot);\r\n\r\n  for(let i=0;i<22;i++){\r\n    const leafH=.42 + Math.random()*.28;\r\n    const leaf=new THREE.Mesh(\r\n      new THREE.ConeGeometry(.033,leafH,7),\r\n      i%2===0 ? matLeaf1 : matLeaf2\r\n    );\r\n    leaf.position.set(\r\n      (Math.random()-.5)*.18,\r\n      .28+leafH\/2,\r\n      (Math.random()-.5)*.84\r\n    );\r\n    leaf.rotation.z=(Math.random()-.5)*.16;\r\n    leaf.rotation.x=(Math.random()-.5)*.10;\r\n    leaf.castShadow=true;\r\n    group.add(leaf);\r\n  }\r\n\r\n  return group;\r\n}\r\n\r\n\/\/ ---------------- DYNAMIC STAND ----------------\r\nlet tvGroup;\r\n\r\nfunction clearGroup(group){\r\n  while(group.children.length){\r\n    const child=group.children.pop();\r\n    child.traverse?.(obj=>{\r\n      if(obj.geometry) obj.geometry.dispose?.();\r\n    });\r\n  }\r\n}\r\n\r\nfunction buildStand(){\r\n  clearGroup(standObjects);\r\n  dimensionsGroup.clear();\r\n\r\n  cfg=STAND_CONFIGS[currentTier];\r\n  standW=cfg.backingW;\r\n  standD=cfg.standD;\r\n  backingH=cfg.backingH;\r\n  tvW=cfg.tvW;\r\n  tvH=cfg.tvH;\r\n\r\n  drawBacking();\r\n  drawCredenzaLogo();\r\n\r\n  \/\/ Floor: depth is used only to stage the 3D preview; contractual backing dimensions come from the selected category.\r\n  const standFloor = new THREE.Mesh(\r\n    new THREE.BoxGeometry(standW,.035,standD),\r\n    matFloor\r\n  );\r\n  standFloor.position.set(0,.0175,standD\/2);\r\n  standFloor.receiveShadow=true;\r\n  standObjects.add(standFloor);\r\n\r\n  \/\/ Backing wall\r\n  const backingWall = new THREE.Mesh(\r\n    new THREE.BoxGeometry(standW,backingH,.085),\r\n    matBacking\r\n  );\r\n  backingWall.position.set(0,backingH\/2,0);\r\n  backingWall.castShadow=true;\r\n  standObjects.add(backingWall);\r\n\r\n  const graphic = new THREE.Mesh(\r\n    new THREE.PlaneGeometry(Math.max(.1,standW-.06),backingH-.06),\r\n    backingMaterial\r\n  );\r\n  graphic.position.set(0,backingH\/2,.044);\r\n  standObjects.add(graphic);\r\n\r\n  \/\/ TV: real dimensions by category (43\" or 55\")\r\n  tvGroup = new THREE.Group();\r\n  const tvFrame = new THREE.Mesh(\r\n    new THREE.BoxGeometry(tvW,tvH,.05),\r\n    matBlack\r\n  );\r\n  tvFrame.castShadow=true;\r\n\r\n  const screen = new THREE.Mesh(\r\n    new THREE.PlaneGeometry(Math.max(.10,tvW-.05),Math.max(.10,tvH-.05)),\r\n    matScreen\r\n  );\r\n  screen.position.z=.026;\r\n  tvGroup.add(tvFrame,screen);\r\n  standObjects.add(tvGroup);\r\n\r\n  \/\/ Credenza blanca con logo personalizado\r\n  const credW=1.0, credD=.40, credH=1.0;\r\n  const cred = new THREE.Group();\r\n\r\n  const credBody = new THREE.Mesh(\r\n    new THREE.BoxGeometry(credW,credH,credD),\r\n    matWhite\r\n  );\r\n  credBody.position.y=credH\/2;\r\n  credBody.castShadow=true;\r\n  cred.add(credBody);\r\n\r\n  const credTop = new THREE.Mesh(\r\n    new THREE.BoxGeometry(1.02,.035,.42),\r\n    matWhite\r\n  );\r\n  credTop.position.y=credH+.0175;\r\n  credTop.castShadow=true;\r\n  cred.add(credTop);\r\n\r\n  const logoPlane = new THREE.Mesh(\r\n    new THREE.PlaneGeometry(.78,.46),\r\n    logoMaterial\r\n  );\r\n  logoPlane.position.set(0,.53,.202);\r\n  cred.add(logoPlane);\r\n\r\n  const hasTable=cfg.table;\r\n  const credX = hasTable ? -standW*.23 : 0;\r\n  cred.position.set(credX,0,standD-.23);\r\n  standObjects.add(cred);\r\n\r\n  let tableX=0, tableZ=0;\r\n  if(hasTable){\r\n    const table = new THREE.Group();\r\n\r\n    const glassTop = new THREE.Mesh(\r\n      new THREE.CylinderGeometry(.35,.35,.025,48),\r\n      matGlass\r\n    );\r\n    glassTop.position.y=1.05;\r\n    glassTop.castShadow=true;\r\n    table.add(glassTop);\r\n\r\n    const pole = new THREE.Mesh(\r\n      new THREE.CylinderGeometry(.025,.025,1.03,20),\r\n      matChrome\r\n    );\r\n    pole.position.y=.515;\r\n    pole.castShadow=true;\r\n    table.add(pole);\r\n\r\n    const base = new THREE.Mesh(\r\n      new THREE.CylinderGeometry(.24,.24,.018,32),\r\n      matChrome\r\n    );\r\n    base.position.y=.009;\r\n    table.add(base);\r\n\r\n    tableX = standW*.24;\r\n    tableZ = Math.max(.88,standD*.55);\r\n    table.position.set(tableX,0,tableZ);\r\n    standObjects.add(table);\r\n  }\r\n\r\n  \/\/ Bancos altos tipo c\u00f3ctel: 2 en Cobre\/Plata, 4 en Oro\/Diamante\r\n  if(!hasTable){\r\n    const xSpread=Math.min(.38,Math.max(.28,standW*.24));\r\n    const stool1=createNordicStool();\r\n    stool1.position.set(-xSpread,0,Math.max(.63,standD-.78));\r\n    stool1.rotation.y=Math.PI;\r\n    standObjects.add(stool1);\r\n\r\n    const stool2=createNordicStool();\r\n    stool2.position.set(xSpread,0,Math.max(.63,standD-.78));\r\n    stool2.rotation.y=Math.PI;\r\n    standObjects.add(stool2);\r\n  }else{\r\n    const stoolCred1=createNordicStool();\r\n    stoolCred1.position.set(credX-.22,0,Math.max(.70,standD-.72));\r\n    stoolCred1.rotation.y=Math.PI;\r\n    standObjects.add(stoolCred1);\r\n\r\n    const stoolCred2=createNordicStool();\r\n    stoolCred2.position.set(credX+.22,0,Math.max(.70,standD-.72));\r\n    stoolCred2.rotation.y=Math.PI;\r\n    standObjects.add(stoolCred2);\r\n\r\n    const rearZ = Math.max(.35,tableZ-.50);\r\n    const stoolTable1=createNordicStool();\r\n    stoolTable1.position.set(tableX-.22,0,rearZ);\r\n    stoolTable1.rotation.y=Math.PI;\r\n    standObjects.add(stoolTable1);\r\n\r\n    const stoolTable2=createNordicStool();\r\n    stoolTable2.position.set(tableX+.22,0,rearZ);\r\n    stoolTable2.rotation.y=Math.PI;\r\n    standObjects.add(stoolTable2);\r\n  }\r\n\r\n  \/\/ Cotas del backing (solo dimensiones incluidas en la especificaci\u00f3n)\r\n  dimensionsGroup.add(createDimensionLine(\r\n    new THREE.Vector3(-standW\/2,.04,standD+.25),\r\n    new THREE.Vector3(standW\/2,.04,standD+.25),\r\n    `ANCHO BACKING: ${standW.toFixed(2)} m`,\r\n    new THREE.Vector3(0,.16,0),\r\n    0x4f8cff\r\n  ));\r\n\r\n  dimensionsGroup.add(createDimensionLine(\r\n    new THREE.Vector3(-standW\/2-.28,0,0),\r\n    new THREE.Vector3(-standW\/2-.28,backingH,0),\r\n    `ALTO BACKING: ${backingH.toFixed(2)} m`,\r\n    new THREE.Vector3(-.36,0,0),\r\n    0x5fcf86\r\n  ));\r\n\r\n  updateTVPosition(true);\r\n  updateSpecs();\r\n  updateCameraBounds();\r\n}\r\n\r\nfunction updateTVPosition(resetHorizontal=false){\r\n  if(!tvGroup) return;\r\n\r\n  const maxX = Math.max(0,(standW\/2)-(tvW\/2)-.08);\r\n  const slider = document.getElementById(\"tvX\");\r\n  slider.min=(-maxX).toFixed(2);\r\n  slider.max=maxX.toFixed(2);\r\n\r\n  if(resetHorizontal) slider.value=0;\r\n\r\n  let x=parseFloat(slider.value);\r\n  if(x>maxX) x=maxX;\r\n  if(x<-maxX) x=-maxX;\r\n  slider.value=x;\r\n\r\n  const ySlider=document.getElementById(\"tvY\");\r\n  const minY=(tvH\/2)+.16;\r\n  const maxY=backingH-(tvH\/2)-.16;\r\n  ySlider.min=minY.toFixed(2);\r\n  ySlider.max=maxY.toFixed(2);\r\n\r\n  let y=parseFloat(ySlider.value);\r\n  if(y<minY) y=minY;\r\n  if(y>maxY) y=maxY;\r\n  ySlider.value=y;\r\n\r\n  tvGroup.position.set(x,y,.055);\r\n\r\n  document.getElementById(\"tvXValue\").textContent=`${x.toFixed(2)} m`;\r\n  document.getElementById(\"tvYValue\").textContent=`${y.toFixed(2)} m`;\r\n}\r\n\r\nfunction updateSpecs(){\r\n  cfg=STAND_CONFIGS[currentTier];\r\n  const fmtW=Number.isInteger(cfg.backingW) ? cfg.backingW.toFixed(0) : cfg.backingW.toFixed(1);\r\n  document.getElementById(\"specBacking\").textContent=`${fmtW} m \u00d7 ${cfg.backingH.toFixed(1)} m`;\r\n  document.getElementById(\"specTV\").textContent=`${cfg.tvInches}\u201d`;\r\n  document.getElementById(\"specStools\").textContent=`${cfg.stools} tipo c\u00f3ctel`;\r\n  document.getElementById(\"specTableRow\").style.display=cfg.table ? \"flex\" : \"none\";\r\n\r\n  document.getElementById(\"personalDesign\").innerHTML=`Dise\u00f1o de <strong>${fmtW} m de ancho \u00d7 ${cfg.backingH.toFixed(1)} m de alto<\/strong>.`;\r\n  document.getElementById(\"personalTV\").innerHTML=`Considerar un televisor de <strong>${cfg.tvInches}\u201d (${cfg.tvText})<\/strong> empotrado en el backing wall.`;\r\n  document.getElementById(\"tierBadge\").textContent=`${cfg.label} \u00b7 TV ${cfg.tvInches}\u201d \u00b7 ${cfg.stools} bancos${cfg.table ? \" \u00b7 mesa \u00d8 0.70 m\" : \"\"}`;\r\n}\r\n\r\nfunction updateCameraBounds(){\r\n  controls.target.set(0,1.05,standD*.52);\r\n  controls.update();\r\n}\r\n\r\nfunction setView(view){\r\n  document.querySelectorAll(\".view-btn\").forEach(btn=>{\r\n    btn.classList.toggle(\"active\",btn.dataset.view===view);\r\n  });\r\n\r\n  \/\/ closer camera = larger stand on screen\r\n  const maxDim=Math.max(standW,standD);\r\n\r\n  if(view===\"front\"){\r\n    camera.position.set(0,1.42,3.85 + maxDim*.18);\r\n    controls.target.set(0,1.12,standD*.45);\r\n  }else if(view===\"top\"){\r\n    camera.position.set(0,4.80 + maxDim*.18,standD*.50);\r\n    controls.target.set(0,0,standD*.50);\r\n  }else{\r\n    camera.position.set(\r\n      2.65 + standW*.20,\r\n      2.55 + maxDim*.08,\r\n      3.45 + standD*.18\r\n    );\r\n    controls.target.set(0,1.0,standD*.52);\r\n  }\r\n\r\n  controls.update();\r\n}\r\n\r\nfunction showToast(text){\r\n  const toast=document.getElementById(\"toast\");\r\n  toast.textContent=text;\r\n  toast.classList.add(\"show\");\r\n  clearTimeout(window.__toast);\r\n  window.__toast=setTimeout(()=>toast.classList.remove(\"show\"),1500);\r\n}\r\n\r\n\/\/ ---------------- UI EVENTS ----------------\r\ndocument.getElementById(\"standSize\").addEventListener(\"change\",e=>{\r\n  currentTier=e.target.value;\r\n  cfg=STAND_CONFIGS[currentTier];\r\n  standW=cfg.backingW;\r\n  standD=cfg.standD;\r\n  backingH=cfg.backingH;\r\n  tvW=cfg.tvW;\r\n  tvH=cfg.tvH;\r\n  document.querySelectorAll(\".tv-preset\").forEach(b=>b.classList.toggle(\"active\",b.dataset.x===\"0\"));\r\n  buildStand();\r\n  setView(\"iso\");\r\n});\r\n\r\ndocument.getElementById(\"tvX\").addEventListener(\"input\",()=>{\r\n  updateTVPosition();\r\n  document.querySelectorAll(\".tv-preset\").forEach(b=>b.classList.remove(\"active\"));\r\n});\r\n\r\ndocument.getElementById(\"tvY\").addEventListener(\"input\",updateTVPosition);\r\n\r\ndocument.querySelectorAll(\".tv-preset\").forEach(btn=>{\r\n  btn.addEventListener(\"click\",()=>{\r\n    document.querySelectorAll(\".tv-preset\").forEach(b=>b.classList.remove(\"active\"));\r\n    btn.classList.add(\"active\");\r\n\r\n    const factor=parseFloat(btn.dataset.x);\r\n    const maxX=Math.max(0,(standW\/2)-(tvW\/2)-.08);\r\n\r\n    let x=0;\r\n    if(factor<0) x=-maxX;\r\n    if(factor>0) x=maxX;\r\n\r\n    document.getElementById(\"tvX\").value=x;\r\n    updateTVPosition();\r\n  });\r\n});\r\n\r\ndocument.querySelectorAll(\".view-btn\").forEach(btn=>{\r\n  btn.addEventListener(\"click\",()=>setView(btn.dataset.view));\r\n});\r\n\r\ndocument.getElementById(\"dimensionToggle\").addEventListener(\"change\",e=>{\r\n  dimensionsGroup.visible=e.target.checked;\r\n});\r\n\r\ndocument.getElementById(\"backingUpload\").addEventListener(\"change\",e=>{\r\n  const file=e.target.files?.[0];\r\n  if(!file) return;\r\n\r\n  const reader=new FileReader();\r\n  reader.onload=ev=>{\r\n    const img=new Image();\r\n    img.onload=()=>{\r\n      fullBackingImage=img;\r\n      drawBacking();\r\n      showToast(\"Backing aplicado\");\r\n    };\r\n    img.src=ev.target.result;\r\n  };\r\n  reader.readAsDataURL(file);\r\n});\r\n\r\ndocument.getElementById(\"resetBacking\").addEventListener(\"click\",()=>{\r\n  fullBackingImage=null;\r\n  document.getElementById(\"backingUpload\").value=\"\";\r\n  drawBacking();\r\n  showToast(\"Backing blanco restaurado\");\r\n});\r\n\r\ndocument.getElementById(\"logoUpload\").addEventListener(\"change\",e=>{\r\n  const file=e.target.files?.[0];\r\n  if(!file) return;\r\n\r\n  const reader=new FileReader();\r\n  reader.onload=ev=>{\r\n    const img=new Image();\r\n    img.onload=()=>{\r\n      credenzaLogoImage=img;\r\n      drawCredenzaLogo();\r\n      showToast(\"Logo aplicado a la credenza\");\r\n    };\r\n    img.src=ev.target.result;\r\n  };\r\n  reader.readAsDataURL(file);\r\n});\r\n\r\ndocument.getElementById(\"resetLogo\").addEventListener(\"click\",()=>{\r\n  credenzaLogoImage=null;\r\n  document.getElementById(\"logoUpload\").value=\"\";\r\n  drawCredenzaLogo();\r\n  showToast(\"Credenza blanca restaurada\");\r\n});\r\n\r\n\/\/ ---------------- INIT ----------------\r\ndrawCredenzaLogo();\r\ndrawBacking();\r\nbuildStand();\r\nsetView(\"iso\");\r\n\r\nwindow.addEventListener(\"resize\",()=>{\r\n  camera.aspect=window.innerWidth\/window.innerHeight;\r\n  camera.updateProjectionMatrix();\r\n  renderer.setSize(window.innerWidth,window.innerHeight);\r\n});\r\n\r\nfunction animate(){\r\n  requestAnimationFrame(animate);\r\n  controls.update();\r\n  renderer.render(scene,camera);\r\n}\r\nanimate();\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>DEEV | Visualizador 3D de Stand Visualizador 3D Premium Herramienta comercial para previsualizar la implementaci\u00f3n del stand y validar la ubicaci\u00f3n del TV y el dise\u00f1o del backing. DEEV \u00b7 HERRAMIENTA COMERCIAL Visualizador 3D del stand Seleccione la categor\u00eda, cargue el dise\u00f1o del backing y, si desea, el logo de la credenza para compartir una [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":28183,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"rs_blank_template":"","rs_page_bg_color":"","slide_template_v7":"","footnotes":""},"class_list":["post-35570","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/pages\/35570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/comments?post=35570"}],"version-history":[{"count":0,"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/pages\/35570\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/pages\/28183"}],"wp:attachment":[{"href":"https:\/\/deev.pe\/en\/wp-json\/wp\/v2\/media?parent=35570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}