{"id":144165,"date":"2026-07-27T14:21:52","date_gmt":"2026-07-27T13:21:52","guid":{"rendered":"https:\/\/bonza-retheme.blz.au\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/"},"modified":"2026-07-31T09:52:40","modified_gmt":"2026-07-31T08:52:40","slug":"registro-de-30-dias-para-reequilibrar-la-flora-intestinal","status":"publish","type":"page","link":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/","title":{"rendered":"Registro de 30 d\u00edas para reequilibrar la flora intestinal"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-30-day-gut-reset-tracker\">Registro de 30 d\u00edas para reequilibrar la flora intestinal<\/h2>\n\n<p class=\"wp-block-paragraph\">\u00bfDe verdad est\u00e1 funcionando el cambio que has hecho? Treinta d\u00edas es tiempo suficiente para que el intestino de un perro responda, y demasiado tiempo para recordarlo todo con precisi\u00f3n. Este <strong>registro de 30 d\u00edas para el reinicio intestinal<\/strong> convierte el protocolo de reinicio de <em>la \u00abGu\u00eda completa de salud intestinal para propietarios de perros\u00bb<\/em> en algo que puedes ver: anota cuatro indicadores r\u00e1pidos al d\u00eda \u2014heces, energ\u00eda, apetito y si ha habido alg\u00fan brote\u2014 y el registro te muestra si los d\u00edas buenos de tu perro est\u00e1n aumentando. Te llevar\u00e1 unos veinte segundos al d\u00eda, y la primera tendencia clara aparecer\u00e1 a partir del s\u00e9ptimo d\u00eda. Es una herramienta educativa de seguimiento para ayudarte a ver el patr\u00f3n y decidir qu\u00e9 hacer a continuaci\u00f3n, no un diagn\u00f3stico.    <\/p>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<div class=\"bonza-grt\" id=\"bonzaGrt\" data-build=\"20260728-414d5b\">\n<style>\n.bonza-grt{\n  --cream:#f8ede3;\n  --paper:#ffffff;\n  --green:#2fa066;\n  --green-deep:#227a4d;\n  --tint:#eaf5ee;\n  --purple:#6e5d84;\n  --deep-purple:#574869;\n  --amber:#ffa825;\n  --amber-deep:#b06a00;\n  --caution-bg:#fff5e6;\n  --divider:#d4bfb2;\n  --field:#c3ad9b;\n  --ink:#382f2b;\n  --muted:#7a6d64;\n  --alert:#c25239;\n  \/* Bonza red, the primary CTA. Distinct from --alert, which stays reserved for\n     the vet gate and form errors. --cta-deep is the hover shade. *\/\n  --cta:#ff6256;\n  --cta-deep:#e6584d;\n  --alert-bg:#fbeeea;\n  --alert-bd:#eecabf;\n  --track:#e6d8ca;\n  background:var(--cream);\n  border:1px solid var(--divider);\n  border-radius:14px;\n  padding:28px 22px;\n  color:var(--ink);\n  font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n  font-size:15.5px;\n  line-height:1.5;\n  max-width:720px;\n  margin:0 auto;\n  box-sizing:border-box;\n}\n.bonza-grt *,.bonza-grt *:before,.bonza-grt *:after{box-sizing:border-box}\n.bonza-grt p{font-family:inherit}\n\n.bonza-grt h3.grt-eyebrow{\n  margin:0 0 10px !important;\n  padding:0 !important;\n  font-family:inherit !important;\n  font-size:19px !important;\n  font-weight:800 !important;\n  letter-spacing:.02em !important;\n  text-transform:none !important;\n  color:var(--purple) !important;\n  line-height:1.25 !important;\n}\n.bonza-grt .grt-lede{font-size:16px;font-weight:400;color:var(--muted);margin:0 0 20px}\n\n.bonza-grt button::before,\n.bonza-grt button:not(.grt-tab)::after{content:none !important;display:none !important}\n\/* Tabs swap between 500 and 800 on hover and selection. A hidden bold copy of the\n   label reserves the wider bold width, so the row does not jog sideways as the\n   weight changes. data-label on each tab feeds it. *\/\n.bonza-grt .grt-tab::after{\n  content:attr(data-label) !important;\n  display:block !important;\n  height:0 !important;\n  overflow:hidden !important;\n  visibility:hidden !important;\n  font-weight:800 !important;\n  white-space:nowrap !important;\n  pointer-events:none !important;\n}\n\n\/* Theme armour. The site theme styles bare <button> elements with its own display\n   font, uppercase transform, larger size and display:flex. Left unforced, that\n   reflows the grade tiles sideways, uppercases every label and inverts the tab\n   states. Everything a theme is likely to set is declared here and forced. *\/\n.bonza-grt button{\n  display:block !important;\n  font-family:inherit !important;\n  font-size:15px !important;\n  font-weight:700 !important;\n  line-height:1.35 !important;\n  letter-spacing:normal !important;\n  text-transform:none !important;\n  text-decoration:none !important;\n  white-space:normal !important;\n  background-image:none !important;\n  box-shadow:none !important;\n  text-shadow:none !important;\n  min-height:0 !important;\n  min-width:0 !important;\n  cursor:pointer;\n  border-radius:10px;\n  transition:background-color .12s ease,border-color .12s ease,color .12s ease;\n}\n.bonza-grt button > *{max-width:100%}\n.bonza-grt button:focus-visible{outline:2px solid var(--green-deep);outline-offset:2px}\n\n.bonza-grt input[type=\"text\"],\n.bonza-grt input[type=\"email\"],\n.bonza-grt input[type=\"number\"],\n.bonza-grt select{\n  background:var(--paper) !important;\n  background-color:var(--paper) !important;\n  border:1.5px solid var(--field) !important;\n  border-radius:10px !important;\n  color:var(--ink) !important;\n  font-family:inherit !important;\n  font-size:16px !important;\n  padding:11px 12px !important;\n  width:100%;\n  -webkit-appearance:none;\n  appearance:none;\n}\n.bonza-grt select{\n  background-image:url(\"data:image\/svg+xml;charset=utf-8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%237a6d64' d='M1 1l5 5 5-5'\/%3E%3C\/svg%3E\") !important;\n  background-repeat:no-repeat !important;\n  background-position:right 12px center !important;\n  padding-right:34px;\n}\n.bonza-grt input:focus,.bonza-grt select:focus{\n  border-color:var(--green) !important;\n  outline:none;\n  box-shadow:0 0 0 3px rgba(47,160,102,.15);\n}\n.bonza-grt label{font-size:14px;font-weight:700;display:block;margin:0 0 6px;color:var(--ink)}\n\n.bonza-grt .grt-view[hidden]{display:none !important}\n\n\/* --- daily log rows --- *\/\n\/* Deliberate exception to the suite pattern: the other Bonza tools give each step\n   its own card and numbered badge, which suits a one-shot assessment you complete\n   once. This tool is opened every day for thirty days, so the log state is a single\n   card of lightly divided rows - a quick check-in rather than a form. The richer\n   per-card treatment is kept for the progress state, where it belongs. *\/\n.bonza-grt .grt-logcard{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:18px;margin:0 0 20px}\n.bonza-grt .grt-q{padding:0 0 18px;margin:0 0 18px;border-bottom:1px solid var(--divider)}\n.bonza-grt .grt-q:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}\n.bonza-grt .grt-qlabel{font-size:17px !important;font-weight:800 !important;color:var(--green-deep) !important;margin:0 0 3px !important;line-height:1.3 !important}\n.bonza-grt .grt-qhint{font-size:14px !important;font-weight:500 !important;color:var(--muted) !important;margin:0 0 10px !important}\n\n\/* --- option buttons --- *\/\n.bonza-grt .grt-opt{\n  background:var(--paper);\n  border:1.5px solid var(--divider);\n  color:var(--ink);\n  font-size:15px !important;\n  font-weight:900 !important;\n  padding:11px 14px !important;\n  text-align:left;\n  width:100% !important;\n  display:block !important;\n}\n.bonza-grt .grt-opt:hover{border-color:var(--green);color:var(--green-deep)}\n.bonza-grt .grt-opt.is-sel,\n.bonza-grt .grt-opt.is-sel:hover,\n.bonza-grt .grt-opt.is-sel:focus,\n.bonza-grt .grt-opt.is-sel:active,\n.bonza-grt .grt-opt.is-sel:focus-visible{\n  background:var(--tint) !important;\n  background-color:var(--tint) !important;\n  border-color:var(--green) !important;\n  color:var(--green-deep) !important;\n}\n.bonza-grt .grt-opt:focus,.bonza-grt .grt-opt:active{\n  background:var(--paper);\n  background-color:var(--paper);\n}\n\n\/* --- primary \/ ghost --- *\/\n.bonza-grt .grt-btn{\n  background:var(--cta) !important;\n  background-color:var(--cta) !important;\n  border:1.5px solid var(--cta) !important;\n  color:var(--paper) !important;\n  font-size:16px !important;\n  font-weight:900 !important;\n  letter-spacing:.01em !important;\n  border-radius:12px !important;\n  min-height:52px !important;\n  padding:14px 20px !important;\n  width:100% !important;\n}\n.bonza-grt .grt-btn:hover,\n.bonza-grt .grt-btn:focus,\n.bonza-grt .grt-btn:active{\n  background:var(--cta-deep) !important;\n  background-color:var(--cta-deep) !important;\n  border-color:var(--cta-deep) !important;\n  color:var(--paper) !important;\n}\n.bonza-grt .grt-btn[disabled]{opacity:.45;cursor:not-allowed}\n.bonza-grt .grt-btn-ghost{\n  background:var(--paper);\n  border:1.5px solid var(--divider);\n  color:var(--ink);\n  font-size:13.5px !important;\n  font-weight:700 !important;\n  padding:9px 14px !important;\n  width:auto !important;\n  display:inline-block !important;\n}\n.bonza-grt .grt-btn-ghost:hover{border-color:var(--green);color:var(--green-deep)}\n\n\/* --- gate --- *\/\n.bonza-grt .grt-gate-card{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:22px 18px}\n.bonza-grt .grt-gate-card h4{font-size:17px;font-weight:800;margin:0 0 8px;color:var(--green-deep)}\n.bonza-grt .grt-gate-card p{font-size:15.5px;margin:0 0 16px;color:var(--ink)}\n.bonza-grt .grt-field{margin-bottom:14px}\n.bonza-grt .grt-consent{font-size:12.5px;line-height:1.5;color:var(--muted);margin:0 0 14px}\n.bonza-grt .grt-consent a{color:var(--green-deep);text-decoration:underline}\n.bonza-grt .grt-reassure{font-size:12.5px;color:var(--muted);text-align:center;margin:12px 0 0}\n.bonza-grt .grt-err{font-size:13.5px;font-weight:700;color:var(--alert);margin:0 0 12px}\n.bonza-grt .grt-err[hidden]{display:none !important}\n\n\/* --- tabs --- *\/\n\/* The theme paints a background on bare buttons, which previously landed on the\n   INACTIVE tab and read as if it were the selected one. Every background here is\n   forced transparent; the active tab is signalled three ways - green text, heavier\n   weight, and the underline sitting on the container's own bottom rule. *\/\n.bonza-grt .grt-tabs{display:flex;flex-wrap:wrap;margin:0 0 20px;border-bottom:2px solid var(--divider)}\n.bonza-grt .grt-tab,\n.bonza-grt .grt-tab:hover,\n.bonza-grt .grt-tab:focus,\n.bonza-grt .grt-tab:active{\n  background:transparent !important;\n  background-color:transparent !important;\n  background-image:none !important;\n  border:0 !important;\n  border-bottom:3px solid transparent !important;\n  border-radius:0 !important;\n  box-shadow:none !important;\n  font-size:15px !important;\n  font-weight:500 !important;\n  padding:10px 2px 11px !important;\n  margin:0 26px -2px 0 !important;\n  width:auto !important;\n  flex:0 0 auto;\n  white-space:nowrap !important;\n  color:var(--muted) !important;\n}\n.bonza-grt .grt-tab:hover,\n.bonza-grt .grt-tab:focus-visible{\n  color:var(--ink) !important;\n  font-weight:800 !important;\n  border-bottom-color:var(--divider) !important;\n}\n.bonza-grt .grt-tab.is-sel,\n.bonza-grt .grt-tab.is-sel:hover,\n.bonza-grt .grt-tab.is-sel:focus,\n.bonza-grt .grt-tab.is-sel:active,\n.bonza-grt .grt-tab.is-sel:focus-visible{\n  color:var(--green-deep) !important;\n  font-weight:800 !important;\n  border-bottom-color:var(--green) !important;\n  background:transparent !important;\n  background-color:transparent !important;\n}\n\/* Weight is the load-bearing signal here, so unselected sits at 500 and selected\n   at 800. An 800 vs 700 pair renders identically in families that ship only one\n   bold face, which is what made both tabs look the same weight at rest. *\/\n\n\/* --- log --- *\/\n.bonza-grt .grt-daybar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 20px;flex-wrap:wrap}\n.bonza-grt .grt-daymeta{font-size:13px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}\n.bonza-grt .grt-daybar select{width:auto !important;min-width:190px;font-size:14px !important;padding:8px 34px 8px 12px !important}\n.bonza-grt .grt-row3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}\n.bonza-grt .grt-row3 .grt-opt{text-align:center !important}\n.bonza-grt .grt-row2{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}\n.bonza-grt .grt-row2 .grt-opt{text-align:center !important}\n\n.bonza-grt .grt-grades{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}\n.bonza-grt .grt-grade{\n  display:block !important;\n  padding:8px !important;\n  text-align:center !important;\n  line-height:1.25 !important;\n  min-width:0;\n  overflow:hidden;\n}\n.bonza-grt .grt-grade img{\n  display:block !important;\n  width:100% !important;\n  height:auto !important;\n  border-radius:8px;\n  margin:0 0 6px !important;\n  background:var(--cream);\n}\n.bonza-grt .grt-grade .grt-gnum{\n  display:block !important;\n  width:100% !important;\n  font-size:17px !important;\n  font-weight:800 !important;\n  line-height:1.2 !important;\n}\n.bonza-grt .grt-grade .grt-glab{\n  display:block !important;\n  width:100% !important;\n  font-size:12.5px !important;\n  font-weight:700 !important;\n  line-height:1.3 !important;\n  color:var(--ink);\n  overflow-wrap:break-word;\n  hyphens:auto;\n}\n.bonza-grt .grt-grade.is-sel .grt-glab{color:var(--green-deep) !important}\n.bonza-grt .grt-i18n,\n.bonza-grt .grt-gdesc{display:none !important}\n.bonza-grt .grt-gradedesc{font-size:14px !important;font-weight:500 !important;color:var(--muted) !important;margin:10px 0 0;min-height:20px}\n\n.bonza-grt .grt-checks{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}\n.bonza-grt .grt-refrow{margin-top:8px}\n.bonza-grt .grt-check{font-size:14px !important;font-weight:900 !important;padding:10px 12px !important;text-align:left !important}\n.bonza-grt .grt-check.is-sel,\n.bonza-grt .grt-check.is-sel:hover,\n.bonza-grt .grt-check.is-sel:focus,\n.bonza-grt .grt-check.is-sel:active{\n  background:var(--caution-bg) !important;\n  background-color:var(--caution-bg) !important;\n  border-color:var(--amber) !important;\n  color:var(--amber-deep) !important;\n}\n.bonza-grt .grt-weight{display:flex;flex-wrap:wrap;gap:10px;align-items:center}\n.bonza-grt .grt-weight input{max-width:120px}\n.bonza-grt .grt-weight span{font-size:14px;color:var(--muted)}\n\n\/* --- progress --- *\/\n.bonza-grt .grt-hero{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:20px 18px;margin:0 0 20px}\n.bonza-grt .grt-hero-eyebrow{font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 8px}\n.bonza-grt .grt-hero-num{font-size:56px;font-weight:800;line-height:1;color:var(--green-deep);margin:0}\n.bonza-grt .grt-hero-unit{font-size:26px;font-weight:800}\n.bonza-grt .grt-hero-lab{font-size:21px;font-weight:800;color:var(--ink);margin:6px 0 0;line-height:1.25}\n.bonza-grt .grt-hero-cmp{font-size:15.5px;margin:10px 0 0;color:var(--ink)}\n.bonza-grt .grt-delta{font-weight:800}\n.bonza-grt .grt-delta.up{color:var(--green-deep)}\n.bonza-grt .grt-delta.down{color:var(--alert)}\n.bonza-grt .grt-delta.flat{color:var(--muted)}\n.bonza-grt .grt-hero-note{font-size:12.5px;color:var(--muted);margin:10px 0 0}\n.bonza-grt .grt-toggle{display:inline-flex;flex-wrap:wrap;max-width:100%;border:1.5px solid var(--divider);border-radius:999px;overflow:hidden;margin:14px 0 0;background:var(--paper)}\n.bonza-grt .grt-toggle button{\n  border:none;border-radius:0;background:transparent;color:var(--muted);\n  font-size:13px !important;font-weight:700 !important;padding:8px 14px !important;\n  width:auto !important;display:inline-block !important;\n}\n.bonza-grt .grt-toggle button.is-sel,\n.bonza-grt .grt-toggle button.is-sel:hover,\n.bonza-grt .grt-toggle button.is-sel:focus,\n.bonza-grt .grt-toggle button.is-sel:active{\n  background:var(--tint) !important;\n  background-color:var(--tint) !important;\n  color:var(--green-deep) !important;\n}\n\n.bonza-grt .grt-ringwrap{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);display:flex;align-items:center;gap:18px;padding:18px;margin:0 0 20px}\n.bonza-grt .grt-ring{flex:0 0 92px;width:92px;height:92px}\n.bonza-grt .grt-ringtext .grt-rt1{font-size:17px;font-weight:800;color:var(--green-deep);margin:0}\n.bonza-grt .grt-ringtext .grt-rt2{font-size:14px;color:var(--muted);margin:4px 0 0}\n\n.bonza-grt .grt-upgrade{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);border-left:4px solid var(--purple);padding:18px;margin:0 0 20px;position:relative}\n.bonza-grt .grt-upgrade h5{font-size:17px;font-weight:800;margin:0 0 6px;color:var(--deep-purple)}\n.bonza-grt .grt-upgrade p{font-size:15.5px;margin:0;color:var(--ink);padding-right:18px}\n.bonza-grt .grt-upgrade .grt-dismiss{position:absolute;top:10px;right:10px;background:transparent !important;border:none !important;color:var(--muted) !important;font-size:18px !important;line-height:1 !important;padding:4px 8px !important;width:auto !important;font-weight:700 !important}\n\n.bonza-grt .grt-vet{\n  background:var(--alert-bg);\n  border:1px solid var(--alert-bd);\n  border-left:4px solid var(--alert);\n  border-radius:12px;padding:18px;margin:0 0 20px;\n}\n.bonza-grt .grt-vet h5{font-size:21px;font-weight:800;margin:0 0 6px;color:var(--alert);line-height:1.25}\n.bonza-grt .grt-vet p{font-size:15.5px;margin:0 0 8px;color:var(--ink)}\n.bonza-grt .grt-vet ul{margin:0;padding-left:20px;font-size:15.5px;color:var(--ink)}\n\n.bonza-grt .grt-card{background:var(--paper);border:1px solid var(--divider);border-radius:12px;box-shadow:0 1px 2px rgba(56,47,43,.06),0 6px 20px rgba(56,47,43,.07);padding:18px;margin:0 0 20px}\n.bonza-grt .grt-card h5{font-size:17px;font-weight:800;margin:0 0 3px;color:var(--green-deep);line-height:1.3}\n.bonza-grt .grt-card .grt-cardhint{font-size:14px;font-weight:500;color:var(--muted);margin:0 0 12px}\n.bonza-grt .grt-chart{width:100%;height:auto;display:block;overflow:visible}\n.bonza-grt .grt-empty{font-size:14px;color:var(--muted);margin:0}\n\n.bonza-grt .grt-weeks{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}\n.bonza-grt .grt-week{background:var(--paper);border:1.5px solid var(--divider);border-radius:10px;padding:10px 8px;text-align:center}\n.bonza-grt .grt-week.is-now{border-color:var(--green);background:var(--tint)}\n.bonza-grt .grt-week .grt-wk{font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);display:block}\n.bonza-grt .grt-week .grt-wt{font-size:12px;font-weight:600;color:var(--muted);display:block;margin-top:3px;line-height:1.25}\n\n.bonza-grt .grt-foot{border-top:1px solid var(--divider);margin-top:22px;padding-top:16px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}\n.bonza-grt .grt-foot .grt-footnote{font-size:12.5px;color:var(--muted);margin:0;flex:1 1 100%}\n.bonza-grt .grt-disclaimer{font-size:12.5px;color:var(--muted);margin:16px 0 0;line-height:1.5}\n.bonza-grt .grt-warn{\n  background:var(--caution-bg);\n  border:1px solid var(--divider);\n  border-left:4px solid var(--amber);\n  border-radius:10px;padding:12px 14px;font-size:14px;margin:0 0 16px;color:var(--ink);\n}\n.bonza-grt .grt-toast{background:var(--tint);border:1px solid var(--green);border-radius:10px;padding:12px 14px;font-size:14px;font-weight:700;color:var(--green-deep);margin:0 0 16px}\n.bonza-grt .grt-toast[hidden]{display:none !important}\n\n\/* ---------------------------------------------------------------------------\n   SPECIFICITY ESCALATION - font-weight only.\n\n   Diagnosed on the live page: computed font-weight on .grt-tab resolved to 400\n   despite the tool declaring 500\/800 with !important. The theme sets font-weight\n   on buttons with !important at a specificity .bonza-grt button cannot beat, so\n   every weight in the tool was being overruled while font-size, colour and\n   background came through untouched. The giveaway was the tab's ::after (the\n   hidden bold label used for width reservation) rendering in Segoe UI Black\n   while the button itself rendered regular - the pseudo-element kept its weight\n   because the theme rule does not target it.\n\n   These selectors lead with the wrapper's ID, which outranks any class-based\n   rule no matter how many classes it chains. Weight is the only property\n   escalated; everything else was already winning.\n   --------------------------------------------------------------------------- *\/\n#bonzaGrt.bonza-grt .grt-tab{font-weight:500 !important}\n#bonzaGrt.bonza-grt .grt-tab:hover,\n#bonzaGrt.bonza-grt .grt-tab:focus-visible{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-tab.is-sel,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:hover,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:focus,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:active,\n#bonzaGrt.bonza-grt .grt-tab.is-sel:focus-visible{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-tab::after{font-weight:800 !important}\n\n#bonzaGrt.bonza-grt .grt-opt,\n#bonzaGrt.bonza-grt .grt-opt:hover,\n#bonzaGrt.bonza-grt .grt-opt:focus,\n#bonzaGrt.bonza-grt .grt-opt:active,\n#bonzaGrt.bonza-grt .grt-opt.is-sel{font-weight:900 !important}\n#bonzaGrt.bonza-grt .grt-check,\n#bonzaGrt.bonza-grt .grt-check.is-sel{font-weight:900 !important}\n\n#bonzaGrt.bonza-grt .grt-btn,\n#bonzaGrt.bonza-grt .grt-btn:hover,\n#bonzaGrt.bonza-grt .grt-btn:focus,\n#bonzaGrt.bonza-grt .grt-btn:active{font-weight:900 !important}\n#bonzaGrt.bonza-grt .grt-btn-ghost{font-weight:700 !important}\n\n\/* Footer actions. The theme adds vertical margin to buttons, which knocked the\n   CSV button out of line with Start over. Zero the margins, and let the two\n   share a height so their top and bottom edges match exactly. *\/\n#bonzaGrt.bonza-grt .grt-foot{align-items:stretch !important}\n#bonzaGrt.bonza-grt .grt-foot .grt-btn-ghost{\n  margin:0 !important;\n  align-self:stretch !important;\n  display:inline-flex !important;\n  align-items:center !important;\n  justify-content:center !important;\n  line-height:1.25 !important;\n}\n\n#bonzaGrt.bonza-grt .grt-grade .grt-gnum{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-grade .grt-glab{font-weight:700 !important}\n\n#bonzaGrt.bonza-grt .grt-toggle button{font-weight:700 !important}\n#bonzaGrt.bonza-grt .grt-toggle button.is-sel{font-weight:800 !important}\n\n#bonzaGrt.bonza-grt .grt-eyebrow{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-qlabel{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-qhint{font-weight:500 !important}\n#bonzaGrt.bonza-grt .grt-hero-num,\n#bonzaGrt.bonza-grt .grt-hero-lab,\n#bonzaGrt.bonza-grt .grt-delta{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-card h5,\n#bonzaGrt.bonza-grt .grt-vet h5,\n#bonzaGrt.bonza-grt .grt-upgrade h5,\n#bonzaGrt.bonza-grt .grt-gate-card h4{font-weight:800 !important}\n#bonzaGrt.bonza-grt .grt-daymeta,\n#bonzaGrt.bonza-grt .grt-week .grt-wk{font-weight:800 !important}\n\n@media (max-width:560px){\n  .bonza-grt{padding:20px 15px}\n  .bonza-grt .grt-logcard,.bonza-grt .grt-card,.bonza-grt .grt-hero,.bonza-grt .grt-ringwrap,.bonza-grt .grt-upgrade,.bonza-grt .grt-vet{padding:15px}\n  .bonza-grt .grt-grades{grid-template-columns:repeat(3,1fr)}\n  .bonza-grt .grt-checks{grid-template-columns:1fr}\n  .bonza-grt .grt-refrow .grt-opt{grid-column:1 \/ -1}\n  .bonza-grt .grt-weeks{grid-template-columns:repeat(2,1fr)}\n  .bonza-grt .grt-hero-num{font-size:46px}\n  .bonza-grt .grt-ringwrap{flex-direction:column;align-items:flex-start;gap:12px}\n  .bonza-grt .grt-daybar select{min-width:0;width:100% !important}\n  .bonza-grt .grt-toggle{width:100%;justify-content:center}\n}\n@media (prefers-reduced-motion:reduce){\n  .bonza-grt *{transition:none !important;animation:none !important}\n}\n<\/style>\n\n<h3 class=\"grt-eyebrow\">Bonza Health Tools: Registro de 30 d\u00edas para reequilibrar la flora intestinal<\/h3>\n<p class=\"grt-lede\">El programa de 30 d\u00edas funciona porque puedes ver c\u00f3mo da resultado. Anota cuatro aspectos b\u00e1sicos al d\u00eda \u2014las heces, la energ\u00eda, el apetito y si ha habido alg\u00fan brote\u2014 y f\u00edjate si los d\u00edas buenos de tu perro van aumentando. Se trata de una herramienta educativa de seguimiento, no de un diagn\u00f3stico.  <\/p>\n\n<div class=\"grt-warn\" id=\"grtStorageWarn\" hidden=\"\"><\/div>\n\n<section class=\"grt-view\" id=\"grtGate\">\n  <div class=\"grt-gate-card\">\n    <h4>Empieza a llevar un seguimiento del programa de reinicio intestinal de 30 d\u00edas de tu perro<\/h4>\n    <p>Introduce tu correo electr\u00f3nico para acceder a tu registro gratuito. Podr\u00e1s anotar el progreso de tu perro cada d\u00eda y ver c\u00f3mo evoluciona a lo largo de 30 d\u00edas. <\/p>\n    <div class=\"grt-field\">\n      <label for=\"grtDogName\">El nombre de tu perro (opcional)<\/label>\n      <input type=\"text\" id=\"grtDogName\" autocomplete=\"off\" placeholder=\"Paddy\"\/>\n    <\/div>\n    <div class=\"grt-field\">\n      <label for=\"grtEmail\">Tu direcci\u00f3n de correo electr\u00f3nico<\/label>\n      <input type=\"email\" id=\"grtEmail\" autocomplete=\"email\" inputmode=\"email\" placeholder=\"you@example.com\"\/>\n    <\/div>\n    <p class=\"grt-err\" id=\"grtGateErr\" hidden=\"\"><\/p>\n    <p class=\"grt-consent\">Si sigues adelante, aceptas recibir correos electr\u00f3nicos de Bonza sobre tu registro de restablecimiento intestinal y consejos relacionados con la salud intestinal de tu perro. Puedes darte de baja en cualquier momento. Protegeremos tus datos de acuerdo con nuestra <a href=\"https:\/\/bonza-retheme.blz.au\/es\/politica-de-privacidad\/\" target=\"_blank\" rel=\"noopener\">Pol\u00edtica de privacidad<\/a>.  <\/p>\n    <button type=\"button\" class=\"grt-btn\" id=\"grtGateBtn\">Abre mi rastreador<\/button>\n    <p class=\"grt-reassure\">Es gratis y no hace falta registrarse. Tus datos de seguimiento se guardan en este dispositivo. <\/p>\n  <\/div>\n<\/section>\n\n<section class=\"grt-view\" id=\"grtApp\" hidden=\"\">\n\n  <div class=\"grt-i18n\" id=\"grtI18n\" aria-hidden=\"true\">\n    <span data-w=\"1\">Revisar y eliminar<\/span>\n    <span data-w=\"2\">Introducir soporte<\/span>\n    <span data-w=\"3\">Observar y ajustar<\/span>\n    <span data-w=\"4\">Establecer una referencia<\/span>\n    <span data-t=\"grade\">Calificar<\/span>\n  <\/div>\n\n  <div class=\"grt-tabs\" role=\"tablist\">\n    <button type=\"button\" class=\"grt-tab is-sel\" id=\"grtTabLog\" role=\"tab\" aria-selected=\"true\" data-label=\"Log today\">Anota lo de hoy<\/button>\n    <button type=\"button\" class=\"grt-tab\" id=\"grtTabProg\" role=\"tab\" aria-selected=\"false\" data-label=\"Progress\">Progreso<\/button>\n  <\/div>\n\n  <div class=\"grt-view\" id=\"grtLog\">\n    <div class=\"grt-toast\" id=\"grtToast\" hidden=\"\"><\/div>\n\n    <div class=\"grt-daybar\">\n      <div>\n        <div class=\"grt-daymeta\" id=\"grtDayMeta\">D\u00eda 1 de 30 \u00b7 Semana 1<\/div>\n      <\/div>\n      <select id=\"grtDaySel\" aria-label=\"Which day are you logging?\"><\/select>\n    <\/div>\n\n    <div class=\"grt-logcard\">\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">\u00cdndice de heces<\/p>\n        <p class=\"grt-qhint\">Elige la opci\u00f3n que m\u00e1s se acerque en la escala de 7 puntos de Bonza. Las puntuaciones 2 y 3 corresponden al rango saludable. <\/p>\n        <div class=\"grt-grades\" id=\"grtGrades\">\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"1\"><span class=\"grt-gnum\">1<\/span><span class=\"grt-glab\">Grumos duros y secos<\/span><span class=\"grt-gdesc\">Trozos secos y separados, que salen con dificultad. Estre\u00f1imiento: suele ser un problema de fibra o de hidrataci\u00f3n. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"2\"><span class=\"grt-gnum\">2<\/span><span class=\"grt-glab\">Firme, segmentado<\/span><span class=\"grt-gdesc\">Tiene una forma bonita y est\u00e1 bien segmentado, mantiene su forma y no deja restos. Es ideal. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"3\"><span class=\"grt-gnum\">3<\/span><span class=\"grt-glab\">Tronco h\u00famedo y moldeado<\/span><span class=\"grt-gdesc\">Tiene forma de tronco y mantiene su forma, est\u00e1 un poco h\u00famedo y deja una marca leve. Est\u00e1 en buen estado. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"4\"><span class=\"grt-gnum\">4<\/span><span class=\"grt-glab\">Blando, que pierde la forma<\/span><span class=\"grt-gdesc\">Sigue teniendo forma de tronco, pero est\u00e1 blando y jugoso. Se deforma al cogerlo. Vale la pena echarle un vistazo.  <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"5\"><span class=\"grt-gnum\">5<\/span><span class=\"grt-glab\">Muy blando, parcialmente formado<\/span><span class=\"grt-gdesc\">Se encuentra en un mont\u00f3n a medio formar, en lugar de en un tronco.<\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"6\"><span class=\"grt-gnum\">6<\/span><span class=\"grt-glab\">Pelo suave sin forma definida<\/span><span class=\"grt-gdesc\">Sin forma definida, con textura de gachas. Eso es diarrea. <\/span><\/button>\n          <button type=\"button\" class=\"grt-opt grt-grade\" data-g=\"7\"><span class=\"grt-gnum\">7<\/span><span class=\"grt-glab\">Aguado<\/span><span class=\"grt-gdesc\">L\u00edquido, sin trozos s\u00f3lidos. Diarrea acuosa: vigila bien la hidrataci\u00f3n. <\/span><\/button>\n        <\/div>\n        <p class=\"grt-gradedesc\" id=\"grtGradeDesc\"><\/p>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Nivel de energ\u00eda<\/p>\n        <p class=\"grt-qhint\">En comparaci\u00f3n con lo habitual en tu perro.<\/p>\n        <div class=\"grt-row3\" id=\"grtEnergy\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"low\">Bajo<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"normal\">Normal<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"high\">Alto<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Apetito<\/p>\n        <p class=\"grt-qhint\">C\u00f3mo han comido hoy.<\/p>\n        <div class=\"grt-row3\" id=\"grtAppetite\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"poor\">Mal<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"normal\">Normal<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"eager\">Entusiasmado<\/button>\n        <\/div>\n        <div class=\"grt-row3 grt-refrow\">\n          <button type=\"button\" class=\"grt-opt grt-check\" id=\"grtRefused\">Me han negado la comida<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">\u00bfTe ha dado un brote hoy?<\/p>\n        <p class=\"grt-qhint\">Un d\u00eda en el que haya v\u00f3mitos, ganas urgentes de ir al ba\u00f1o, esfuerzo al defecar, accidentes o molestias intestinales evidentes.<\/p>\n        <div class=\"grt-row2\" id=\"grtFlare\">\n          <button type=\"button\" class=\"grt-opt\" data-v=\"no\">No ha habido brote<\/button>\n          <button type=\"button\" class=\"grt-opt\" data-v=\"yes\">Hoy ha habido un brote<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">\u00bfNotas algo raro en las heces?<\/p>\n        <p class=\"grt-qhint\">Marca todo lo que hayas visto. D\u00e9jalo en blanco si no hay nada que te corresponda. <\/p>\n        <div class=\"grt-checks\" id=\"grtFlags\">\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"black\">Negro o con aspecto de alquitr\u00e1n<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"blood\">Sangre fresca o vetas rojas<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"pale\">P\u00e1lido, gris o de color arcilla<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"worms\">Gusanos visibles o segmentos parecidos a granos de arroz<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"mucus\">Una capa espesa de moco o gelatina<\/button>\n          <button type=\"button\" class=\"grt-opt grt-check\" data-k=\"foreign\">Algo que no deber\u00edan haberse comido<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"grt-q\">\n        <p class=\"grt-qlabel\">Peso <span style=\"font-weight:600;color:var(--muted)\">(opcional)<\/span><\/p>\n        <p class=\"grt-qhint\">Una vez a la semana es m\u00e1s que suficiente. La misma b\u00e1scula, a la misma hora del d\u00eda. <\/p>\n        <div class=\"grt-weight\">\n          <input type=\"number\" id=\"grtWeight\" step=\"0.1\" min=\"0\" max=\"120\" inputmode=\"decimal\" placeholder=\"0.0\"\/>\n          <span>kg<\/span>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <button type=\"button\" class=\"grt-btn\" id=\"grtSave\">Ap\u00fantate esta fecha<\/button>\n\n    <div class=\"grt-foot\">\n      <p class=\"grt-footnote\">Tus registros se guardan \u00fanicamente en este navegador y en este dispositivo.<\/p>\n      <button type=\"button\" class=\"grt-btn-ghost\" id=\"grtExport\">Descargar mis datos (CSV)<\/button>\n      <button type=\"button\" class=\"grt-btn-ghost\" id=\"grtReset\">Empezar de nuevo<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"grt-view\" id=\"grtProgress\" hidden=\"\">\n    <div id=\"grtVetSlot\"><\/div>\n    <div id=\"grtHeroSlot\"><\/div>\n    <div id=\"grtUpgradeSlot\"><\/div>\n    <div id=\"grtRingSlot\"><\/div>\n    <div id=\"grtWeeksSlot\" class=\"grt-card\"><\/div>\n    <div id=\"grtChartsSlot\"><\/div>\n    <p class=\"grt-disclaimer\">Esta herramienta de seguimiento tiene fines educativos. Registra lo que observas y muestra la evoluci\u00f3n a lo largo del tiempo. No sirve para diagnosticar y no sustituye el consejo de un veterinario. Si tu perro no se encuentra bien, su estado empeora o te preocupa algo, habla con tu veterinario.   <\/p>\n  <\/div>\n\n<\/section>\n<\/div>\n<script src=\"data:text\/javascript;base64,KGZ1bmN0aW9uKCl7CiAgInVzZSBzdHJpY3QiOwoKICB2YXIgQ0ZHID0gewogICAgbnM6ICJib256YV9ncnRfdjEiLAogICAgcmVzZXREYXlzOiAzMCwKICAgIHNjcm9sbE9mZnNldDogMTAwLAogICAgcHJpdmFjeVVybDogImh0dHBzOi8vd3d3LmJvbnphLmRvZy9wcml2YWN5LXBvbGljeS8iLAogICAgZ3JhZGVJbWFnZXM6IFsKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtMS1oYXJkLWRyeS1sdW1wcy1jb25zdGlwYXRpb24ud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTItZmlybS1zZWdtZW50ZWQtaGVhbHRoeS1pZGVhbC53ZWJwIiwKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtMy1tb2lzdC1mb3JtZWQtbG9nLWhlYWx0aHkud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTQtc29mdC1tb2lzdC1sb3NpbmctZm9ybS53ZWJwIiwKICAgICAgImh0dHBzOi8vd3d3LmJvbnphLmRvZy93cC1jb250ZW50L3VwbG9hZHMvZG9nLXBvb3AtY2hhcnQtZ3JhZGUtNS12ZXJ5LXNvZnQtcGFydGx5LWZvcm1lZC1waWxlLndlYnAiLAogICAgICAiaHR0cHM6Ly93d3cuYm9uemEuZG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy9kb2ctcG9vcC1jaGFydC1ncmFkZS02LWZvcm1sZXNzLXNvZnQtcGlsZS1kaWFycmhvZWEud2VicCIsCiAgICAgICJodHRwczovL3d3dy5ib256YS5kb2cvd3AtY29udGVudC91cGxvYWRzL2RvZy1wb29wLWNoYXJ0LWdyYWRlLTctd2F0ZXJ5LWRpYXJyaG9lYS53ZWJwIgogICAgXSwKICAgIHVwZ3JhZGVVcmw6ICIiLAoKICAgIC8qIEtsYXZpeW8gbGVhZCBjYXB0dXJlLiBGaWxsIGJvdGggSURzIGluIGFuZCB0aGUgZ2F0ZSBzdGFydHMgc3Vic2NyaWJpbmc7CiAgICAgICBsZWF2ZSBlaXRoZXIgYmxhbmsgYW5kIHRoZSB0cmFja2VyIHJ1bnMgZXhhY3RseSBhcyBiZWZvcmUsIGNhcHR1cmluZyBub3RoaW5nLgogICAgICAgY29tcGFueUlkIGlzIHRoZSA2LWNoYXJhY3RlciBwdWJsaWMgQVBJIGtleSAoc2l0ZSBJRCkgLSBpdCBpcyBkZXNpZ25lZCB0byBiZQogICAgICAgcHVibGljIGFuZCBzYWZlIHRvIHNoaXAgaW4gY2xpZW50LXNpZGUgY29kZS4gRG8gTk9UIHB1dCBhIHByaXZhdGUga2V5IGhlcmUuICovCiAgICBrbGF2aXlvOiB7CiAgICAgIGNvbXBhbnlJZDogIlhSUjlFRCIsCiAgICAgIGxpc3RJZDogIlRTdzdiVCIsCiAgICAgIHJldmlzaW9uOiAiMjAyNi0wNy0xNSIsCiAgICAgIHNvdXJjZTogIjMwLURheSBHdXQgUmVzZXQgVHJhY2tlciIsCiAgICAgIHNlbmREb2dOYW1lOiB0cnVlLAogICAgICBtYXhUcmllczogNQogICAgfQogIH07CgogIHZhciBQQUwgPSB7CiAgICBwYXBlcjoiI2ZmZmZmZiIsIGdyZWVuOiIjMmZhMDY2IiwgZ3JlZW5EZWVwOiIjMjI3YTRkIiwgdGludDoiI2VhZjVlZSIsCiAgICBhbWJlcjoiI2ZmYTgyNSIsIGFtYmVyRGVlcDoiI2IwNmEwMCIsIGRpdmlkZXI6IiNkNGJmYjIiLCBpbms6IiMzODJmMmIiLAogICAgbXV0ZWQ6IiM3YTZkNjQiLCB0cmFjazoiI2U2ZDhjYSIKICB9OwoKICB2YXIgR1JBREVTID0gWwogICAge246MSxsYWI6IkhhcmQsIGRyeSBsdW1wcyIsZGVzYzoiU2VwYXJhdGUgZHJ5IGx1bXBzLCBwYXNzZWQgd2l0aCBlZmZvcnQuIENvbnN0aXBhdGlvbiBcdTIwMTQgdXN1YWxseSBhIGZpYnJlIG9yIGh5ZHJhdGlvbiBpc3N1ZS4ifSwKICAgIHtuOjIsbGFiOiJGaXJtLCBzZWdtZW50ZWQiLGRlc2M6IldlbGwgZm9ybWVkIGFuZCBzZWdtZW50ZWQsIGhvbGRzIGl0cyBzaGFwZSwgbGVhdmVzIG5vdGhpbmcgYmVoaW5kLiBUaGlzIGlzIGlkZWFsLiJ9LAogICAge246MyxsYWI6Ik1vaXN0LCBmb3JtZWQgbG9nIixkZXNjOiJMb2cgc2hhcGVkIGFuZCBob2xkcyBmb3JtLCBzbGlnaHRseSBtb2lzdCwgbGVhdmVzIGEgZmFpbnQgbWFyay4gSGVhbHRoeS4ifSwKICAgIHtuOjQsbGFiOiJTb2Z0LCBsb3NpbmcgZm9ybSIsZGVzYzoiU3RpbGwgbG9nIHNoYXBlZCBidXQgc29mdCBhbmQgbW9pc3QuIExvc2VzIGl0cyBzaGFwZSB3aGVuIHBpY2tlZCB1cC4gV29ydGggd2F0Y2hpbmcuIn0sCiAgICB7bjo1LGxhYjoiVmVyeSBzb2Z0LCBwYXJ0bHkgZm9ybWVkIixkZXNjOiJTaXRzIGluIGEgcGFydGx5IGZvcm1lZCBwaWxlIHJhdGhlciB0aGFuIGEgbG9nLiJ9LAogICAge246NixsYWI6IkZvcm1sZXNzIHNvZnQgcGlsZSIsZGVzYzoiTm8gZGVmaW5lZCBzaGFwZSwgcG9ycmlkZ2UtbGlrZS4gVGhpcyBpcyBkaWFycmhvZWEuIn0sCiAgICB7bjo3LGxhYjoiV2F0ZXJ5IixkZXNjOiJMaXF1aWQsIG5vIHNvbGlkIHBpZWNlcy4gV2F0ZXJ5IGRpYXJyaG9lYSBcdTIwMTQgd2F0Y2ggaHlkcmF0aW9uIGNsb3NlbHkuIn0KICBdOwogIHZhciBIRUFMVEhZID0gWzIsM107CgogIHZhciBFTkVSR1kgICA9IFt7djoibG93IixsYWI6IkxvdyJ9LHt2OiJub3JtYWwiLGxhYjoiTm9ybWFsIn0se3Y6ImhpZ2giLGxhYjoiSGlnaCJ9XTsKICB2YXIgQVBQRVRJVEUgPSBbe3Y6InBvb3IiLGxhYjoiUG9vciJ9LHt2OiJub3JtYWwiLGxhYjoiTm9ybWFsIn0se3Y6ImVhZ2VyIixsYWI6IkVhZ2VyIn1dOwogIHZhciBGTEFSRSAgICA9IFt7djoibm8iLGxhYjoiTm8gZmxhcmUtdXAifSx7djoieWVzIixsYWI6IkZsYXJlLXVwIHRvZGF5In1dOwoKICB2YXIgRkxBR1MgPSBbCiAgICB7azoiYmxhY2siLCBsYWI6IkJsYWNrIG9yIHRhci1saWtlIn0sCiAgICB7azoiYmxvb2QiLCBsYWI6IkZyZXNoIGJsb29kIG9yIHJlZCBzdHJlYWtzIn0sCiAgICB7azoicGFsZSIsICBsYWI6IlBhbGUsIGdyZXkgb3IgY2xheS1jb2xvdXJlZCJ9LAogICAge2s6Indvcm1zIiwgbGFiOiJWaXNpYmxlIHdvcm1zIG9yIHJpY2UtbGlrZSBzZWdtZW50cyJ9LAogICAge2s6Im11Y3VzIiwgbGFiOiJIZWF2eSBtdWN1cyBvciBqZWxseSBjb2F0aW5nIn0sCiAgICB7azoiZm9yZWlnbiIsIGxhYjoiU29tZXRoaW5nIHRoZXkgc2hvdWxkbid0IGhhdmUgZWF0ZW4ifQogIF07CgogIHZhciBXRUVLUyA9IFsKICAgIHt0OiJBdWRpdCAmIHJlbW92ZSJ9LAogICAge3Q6IkludHJvZHVjZSBzdXBwb3J0In0sCiAgICB7dDoiT2JzZXJ2ZSAmIGFkanVzdCJ9LAogICAge3Q6IkVzdGFibGlzaCBiYXNlbGluZSJ9CiAgXTsKCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9uemFHcnQiKTsKICBpZighcm9vdCl7IHJldHVybjsgfQoKICB2YXIgc3RvcmFnZU9LID0gdHJ1ZTsKICB2YXIgbWVtID0gbnVsbDsKCiAgZnVuY3Rpb24gdGVzdFN0b3JhZ2UoKXsKICAgIHRyeXsKICAgICAgdmFyIHQgPSAiX19ncnRfdF9fIjsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHQsIjEiKTsKICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH1jYXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9CiAgfQoKICBmdW5jdGlvbiBsb2FkKCl7CiAgICBpZighc3RvcmFnZU9LKXsgcmV0dXJuIG1lbTsgfQogICAgdHJ5ewogICAgICB2YXIgcmF3ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKENGRy5ucyk7CiAgICAgIGlmKCFyYXcpeyByZXR1cm4gbnVsbDsgfQogICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpOwogICAgfWNhdGNoKGUpeyByZXR1cm4gbnVsbDsgfQogIH0KCiAgZnVuY3Rpb24gc2F2ZSgpewogICAgaWYoIXN0b3JhZ2VPSyl7IG1lbSA9IHN0YXRlOyByZXR1cm47IH0KICAgIHRyeXsgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKENGRy5ucywgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTsgfQogICAgY2F0Y2goZSl7IHN0b3JhZ2VPSyA9IGZhbHNlOyBtZW0gPSBzdGF0ZTsgc2hvd1N0b3JhZ2VXYXJuKCk7IH0KICB9CgogIGZ1bmN0aW9uIHNob3dTdG9yYWdlV2FybigpewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFN0b3JhZ2VXYXJuIik7CiAgICBpZighZWwpeyByZXR1cm47IH0KICAgIGVsLnRleHRDb250ZW50ID0gIlRoaXMgYnJvd3NlciBpcyBibG9ja2luZyBsb2NhbCBzdG9yYWdlLCBzbyB0b2RheSdzIGVudHJpZXMgd29uJ3QgYmUgcmVtZW1iZXJlZCBhZnRlciB5b3UgY2xvc2UgdGhlIHBhZ2UuIFByaXZhdGUvaW5jb2duaXRvIG1vZGUgaXMgdGhlIHVzdWFsIGNhdXNlLiBFdmVyeXRoaW5nIGVsc2Ugc3RpbGwgd29ya3MuIjsKICAgIGVsLmhpZGRlbiA9IGZhbHNlOwogIH0KCiAgdmFyIHN0YXRlID0gbnVsbDsKCiAgZnVuY3Rpb24gYmxhbmtTdGF0ZSgpewogICAgcmV0dXJuIHsgZW1haWw6IiIsIGRvZ05hbWU6IiIsIGNvbnNlbnRBdDoiIiwgc3RhcnREYXRlOiIiLCBlbnRyaWVzOnt9LCB3ZWlnaHRzOnt9LCBoZXJvTW9kZToiYmFzZWxpbmUiLCB1cGdyYWRlRGlzbWlzc2VkOmZhbHNlLCBzdWJzY3JpYmVkOmZhbHNlLCBzdWJzY3JpYmVUcmllczowIH07CiAgfQoKICBmdW5jdGlvbiBwYWQobil7IHJldHVybiBuPDEwID8gIjAiK24gOiAiIituOyB9CiAgZnVuY3Rpb24ga2V5T2YoZCl7IHJldHVybiBkLmdldEZ1bGxZZWFyKCkrIi0iK3BhZChkLmdldE1vbnRoKCkrMSkrIi0iK3BhZChkLmdldERhdGUoKSk7IH0KICBmdW5jdGlvbiBwYXJzZUtleShrKXsgdmFyIHAgPSBrLnNwbGl0KCItIik7IHJldHVybiBuZXcgRGF0ZShwYXJzZUludChwWzBdLDEwKSwgcGFyc2VJbnQocFsxXSwxMCktMSwgcGFyc2VJbnQocFsyXSwxMCkpOyB9CiAgZnVuY3Rpb24gdG9kYXlLZXkoKXsgcmV0dXJuIGtleU9mKG5ldyBEYXRlKCkpOyB9CiAgZnVuY3Rpb24gZGF5c0JldHdlZW4oYSxiKXsKICAgIHZhciBtcyA9IHBhcnNlS2V5KGIpLmdldFRpbWUoKSAtIHBhcnNlS2V5KGEpLmdldFRpbWUoKTsKICAgIHJldHVybiBNYXRoLnJvdW5kKG1zLzg2NDAwMDAwKTsKICB9CiAgZnVuY3Rpb24gZGF5TnVtYmVyKGspeyByZXR1cm4gZGF5c0JldHdlZW4oc3RhdGUuc3RhcnREYXRlLCBrKSArIDE7IH0KICBmdW5jdGlvbiB3ZWVrT2YoZG4peyB2YXIgdyA9IE1hdGguY2VpbChkbi83KTsgaWYodzwxKXt3PTE7fSBpZih3PjQpe3c9NDt9IHJldHVybiB3OyB9CiAgZnVuY3Rpb24gZm10U2hvcnQoayl7CiAgICB2YXIgZCA9IHBhcnNlS2V5KGspOwogICAgdmFyIGRheXMgPSBbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdOwogICAgdmFyIG1vbnMgPSBbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdOwogICAgcmV0dXJuIGRheXNbZC5nZXREYXkoKV0rIiAiK2QuZ2V0RGF0ZSgpKyIgIittb25zW2QuZ2V0TW9udGgoKV07CiAgfQogIGZ1bmN0aW9uIGVzYyhzKXsKICAgIHJldHVybiBTdHJpbmcocykucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iik7CiAgfQogIGZ1bmN0aW9uIGRvZ1Bvc3Nlc3NpdmUoKXsKICAgIGlmKHN0YXRlLmRvZ05hbWUpeyByZXR1cm4gZXNjKHN0YXRlLmRvZ05hbWUpKyIncyI7IH0KICAgIHJldHVybiAiWW91ciBkb2cncyI7CiAgfQogIGZ1bmN0aW9uIGRvZ05hbWUoKXsgcmV0dXJuIHN0YXRlLmRvZ05hbWUgPyBlc2Moc3RhdGUuZG9nTmFtZSkgOiAieW91ciBkb2ciOyB9CgogIGZ1bmN0aW9uIGxvZ2dlZEtleXMoKXsKICAgIHZhciBrcyA9IFtdOwogICAgZm9yKHZhciBrIGluIHN0YXRlLmVudHJpZXMpeyBpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUuZW50cmllcyxrKSl7IGtzLnB1c2goayk7IH0gfQogICAga3Muc29ydCgpOwogICAgcmV0dXJuIGtzOwogIH0KCiAgZnVuY3Rpb24gZ29vZERheXMoa2V5cyl7CiAgICB2YXIgZ29vZCA9IDAsIG4gPSAwOwogICAgZm9yKHZhciBpPTA7aTxrZXlzLmxlbmd0aDtpKyspewogICAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba2V5c1tpXV07CiAgICAgIGlmKCFlIHx8IHR5cGVvZiBlLnN0b29sICE9PSAibnVtYmVyIil7IGNvbnRpbnVlOyB9CiAgICAgIG4rKzsKICAgICAgaWYoSEVBTFRIWS5pbmRleE9mKGUuc3Rvb2wpID4gLTEpeyBnb29kKys7IH0KICAgIH0KICAgIHJldHVybiB7IG46biwgZ29vZDpnb29kLCBwY3Q6IG4gPyBNYXRoLnJvdW5kKGdvb2QvbioxMDApIDogMCB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSBLbGF2aXlvIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24ga2xhdml5b1N1YnNjcmliZShlbWFpbCwgZG9nKXsKICAgIHZhciBLID0gQ0ZHLmtsYXZpeW87CiAgICBpZighSy5jb21wYW55SWQgfHwgIUsubGlzdElkKXsgcmV0dXJuOyB9CiAgICBpZighZW1haWwpeyByZXR1cm47IH0KICAgIGlmKHR5cGVvZiB3aW5kb3cuZmV0Y2ggIT09ICJmdW5jdGlvbiIpeyByZXR1cm47IH0KICAgIGlmKChzdGF0ZS5zdWJzY3JpYmVUcmllcyB8fCAwKSA+PSBLLm1heFRyaWVzKXsgcmV0dXJuOyB9CgogICAgc3RhdGUuc3Vic2NyaWJlVHJpZXMgPSAoc3RhdGUuc3Vic2NyaWJlVHJpZXMgfHwgMCkgKyAxOwogICAgc2F2ZSgpOwoKICAgIHZhciBwcm9wcyA9IHsgIlNpZ251cCBTb3VyY2UiOiBLLnNvdXJjZSB9OwogICAgaWYoSy5zZW5kRG9nTmFtZSAmJiBkb2cpeyBwcm9wc1siRG9nIE5hbWUiXSA9IGRvZzsgfQoKICAgIHZhciBwYXlsb2FkID0gewogICAgICBkYXRhOiB7CiAgICAgICAgdHlwZTogInN1YnNjcmlwdGlvbiIsCiAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgY3VzdG9tX3NvdXJjZTogSy5zb3VyY2UsCiAgICAgICAgICBwcm9maWxlOiB7CiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICB0eXBlOiAicHJvZmlsZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLAogICAgICAgICAgICAgICAgcHJvcGVydGllczogcHJvcHMsCiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zOiB7IGVtYWlsOiB7IG1hcmtldGluZzogeyBjb25zZW50OiAiU1VCU0NSSUJFRCIgfSB9IH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlbGF0aW9uc2hpcHM6IHsKICAgICAgICAgIGxpc3Q6IHsgZGF0YTogeyB0eXBlOiAibGlzdCIsIGlkOiBLLmxpc3RJZCB9IH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CgogICAgdHJ5ewogICAgICB3aW5kb3cuZmV0Y2goImh0dHBzOi8vYS5rbGF2aXlvLmNvbS9jbGllbnQvc3Vic2NyaXB0aW9ucy8\/Y29tcGFueV9pZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KEsuY29tcGFueUlkKSwgewogICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiwgInJldmlzaW9uIjogSy5yZXZpc2lvbiB9LAogICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLAogICAgICAgIGtlZXBhbGl2ZTogdHJ1ZQogICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgaWYocmVzICYmIChyZXMuc3RhdHVzID09PSAyMDIgfHwgcmVzLm9rKSl7CiAgICAgICAgICBzdGF0ZS5zdWJzY3JpYmVkID0gdHJ1ZTsKICAgICAgICAgIHNhdmUoKTsKICAgICAgICB9CiAgICAgIH0pWyJjYXRjaCJdKGZ1bmN0aW9uKCl7IC8qIG9mZmxpbmUgb3IgYmxvY2tlZCAtIHJldHJpZWQgb24gbmV4dCB2aXNpdCAqLyB9KTsKICAgIH1jYXRjaChlKXsgLyogbmV2ZXIgbGV0IGxlYWQgY2FwdHVyZSBicmVhayB0aGUgdG9vbCAqLyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tIGdhdGUgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiB2YWxpZEVtYWlsKHYpewogICAgcmV0dXJuIC9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF17Mix9JC8udGVzdCh2KTsKICB9CgogIGZ1bmN0aW9uIGluaXRHYXRlKCl7CiAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEdhdGVCdG4iKTsKICAgIHZhciBlcnIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R2F0ZUVyciIpOwogICAgdmFyIGVtICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRFbWFpbCIpOwogICAgdmFyIGRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREb2dOYW1lIik7CiAgICBpZighYnRuIHx8ICFlbSl7IHJldHVybjsgfQoKICAgIGZ1bmN0aW9uIGdvKCl7CiAgICAgIHZhciB2ID0gKGVtLnZhbHVlfHwiIikudHJpbSgpOwogICAgICBpZighdmFsaWRFbWFpbCh2KSl7CiAgICAgICAgZXJyLnRleHRDb250ZW50ID0gIlRoYXQgZW1haWwgZG9lc24ndCBsb29rIHJpZ2h0LiBDaGVjayBpdCBhbmQgdHJ5IGFnYWluLiI7CiAgICAgICAgZXJyLmhpZGRlbiA9IGZhbHNlOwogICAgICAgIGVtLmZvY3VzKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVyci5oaWRkZW4gPSB0cnVlOwogICAgICBzdGF0ZSA9IGJsYW5rU3RhdGUoKTsKICAgICAgc3RhdGUuZW1haWwgPSB2OwogICAgICBzdGF0ZS5kb2dOYW1lID0gKGRuICYmIGRuLnZhbHVlID8gZG4udmFsdWUudHJpbSgpLnNsaWNlKDAsNDApIDogIiIpOwogICAgICBzdGF0ZS5jb25zZW50QXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7CiAgICAgIHN0YXRlLnN0YXJ0RGF0ZSA9IHRvZGF5S2V5KCk7CiAgICAgIHNhdmUoKTsKICAgICAgb3BlbkFwcCgpOwogICAgICBrbGF2aXlvU3Vic2NyaWJlKHN0YXRlLmVtYWlsLCBzdGF0ZS5kb2dOYW1lKTsKICAgIH0KCiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBnbyk7CiAgICBlbS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24oZXYpeyBpZihldi5rZXkgPT09ICJFbnRlciIpeyBnbygpOyB9IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSBsb2cgdmlldyAtLS0tLS0tLS0tICovCgogIHZhciBkcmFmdCA9IG51bGw7CgogIGZ1bmN0aW9uIG5ld0RyYWZ0KCl7CiAgICByZXR1cm4geyBzdG9vbDpudWxsLCBlbmVyZ3k6bnVsbCwgYXBwZXRpdGU6bnVsbCwgcmVmdXNlZDpmYWxzZSwgZmxhcmU6bnVsbCwgZmxhZ3M6W10sIHdlaWdodDoiIiB9OwogIH0KCiAgZnVuY3Rpb24gc2VsZWN0ZWREYXkoKXsKICAgIHZhciBzZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RGF5U2VsIik7CiAgICByZXR1cm4gc2VsICYmIHNlbC52YWx1ZSA\/IHNlbC52YWx1ZSA6IHRvZGF5S2V5KCk7CiAgfQoKICBmdW5jdGlvbiBidWlsZERheVNlbGVjdCgpewogICAgdmFyIHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREYXlTZWwiKTsKICAgIGlmKCFzZWwpeyByZXR1cm47IH0KICAgIHZhciB0ayA9IHRvZGF5S2V5KCk7CiAgICB2YXIgY3VyRG4gPSBkYXlOdW1iZXIodGspOwogICAgdmFyIG91dCA9IFtdOwogICAgdmFyIHN0YXJ0ID0gY3VyRG4gLSA2OwogICAgaWYoc3RhcnQgPCAxKXsgc3RhcnQgPSAxOyB9CiAgICBmb3IodmFyIGRuID0gY3VyRG47IGRuID49IHN0YXJ0OyBkbi0tKXsKICAgICAgdmFyIGQgPSBwYXJzZUtleShzdGF0ZS5zdGFydERhdGUpOwogICAgICBkLnNldERhdGUoZC5nZXREYXRlKCkgKyAoZG4tMSkpOwogICAgICB2YXIgayA9IGtleU9mKGQpOwogICAgICB2YXIgbGFiZWw7CiAgICAgIGlmKGsgPT09IHRrKXsgbGFiZWwgPSAiVG9kYXkiOyB9CiAgICAgIGVsc2UgaWYoZGF5c0JldHdlZW4oayx0aykgPT09IDEpeyBsYWJlbCA9ICJZZXN0ZXJkYXkiOyB9CiAgICAgIGVsc2UgeyBsYWJlbCA9IGZtdFNob3J0KGspOyB9CiAgICAgIGxhYmVsICs9ICIgIFx1MDBiNyAgRGF5ICIgKyBkbjsKICAgICAgaWYoc3RhdGUuZW50cmllc1trXSl7IGxhYmVsICs9ICIgIFx1MjcxMyI7IH0KICAgICAgb3V0LnB1c2goJzxvcHRpb24gdmFsdWU9IicraysnIj4nK2VzYyhsYWJlbCkrJzwvb3B0aW9uPicpOwogICAgfQogICAgc2VsLmlubmVySFRNTCA9IG91dC5qb2luKCIiKTsKICAgIHNlbC52YWx1ZSA9IHRrOwogIH0KCiAgZnVuY3Rpb24gb3B0QnV0dG9uKGNscywgbGFiZWwsIHN1Yil7CiAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYi50eXBlID0gImJ1dHRvbiI7CiAgICBiLmNsYXNzTmFtZSA9ICJncnQtb3B0ICIgKyBjbHM7CiAgICBiLmlubmVySFRNTCA9IHN1YiA\/ICgnPHNwYW4gY2xhc3M9ImdydC1nbnVtIj4nK2xhYmVsKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImdydC1nbGFiIj4nK2VzYyhzdWIpKyc8L3NwYW4+JykgOiBlc2MobGFiZWwpOwogICAgcmV0dXJuIGI7CiAgfQoKICBmdW5jdGlvbiBtYXJrR3JvdXAoY29udGFpbmVyLCB2YWx1ZSwgYXR0cil7CiAgICB2YXIga2lkcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24iKTsKICAgIGZvcih2YXIgaT0wO2k8a2lkcy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIHYgPSBraWRzW2ldLmdldEF0dHJpYnV0ZShhdHRyKTsKICAgICAgaWYodmFsdWUgIT09IG51bGwgJiYgU3RyaW5nKHZhbHVlKSA9PT0gdil7IGtpZHNbaV0uY2xhc3NMaXN0LmFkZCgiaXMtc2VsIik7IH0KICAgICAgZWxzZSB7IGtpZHNbaV0uY2xhc3NMaXN0LnJlbW92ZSgiaXMtc2VsIik7IH0KICAgIH0KICB9CgogIC8qIC0tLS0tLS0tLS0gdHJhbnNsYXRhYmxlIG9wdGlvbiBsYWJlbHMgLS0tLS0tLS0tLQogICAgIEV2ZXJ5IG9wdGlvbiBsYWJlbCBpcyB3cml0dGVuIGludG8gdGhlIHBhZ2UgbWFya3VwIHNvIFdQTUwgY2FuIHRyYW5zbGF0ZQogICAgIGl0IG9uIHRoZSAvZGUvIC9lcy8gL2ZyLyAvbmwvIHZlcnNpb25zLiBUaGUgYXJyYXlzIGFib3ZlIGFyZSB0aGUgRW5nbGlzaAogICAgIGZhbGxiYWNrOiBpZiB0aGUgbWFya3VwIGlzIG1pc3Npbmcgb3IgaGFzIGJlZW4gc3RyaXBwZWQsIGVhY2ggYnVpbGRlcgogICAgIGNyZWF0ZXMgaXRzIGJ1dHRvbnMgZXhhY3RseSBhcyBpdCBkaWQgYmVmb3JlLiBUaGUga2V5IHZhbHVlcyAoZGF0YS1nLAogICAgIGRhdGEtdiwgZGF0YS1rKSBhcmUgcmUtYXNzZXJ0ZWQgZnJvbSB0aGUgYXJyYXlzIGFmdGVyIGFkb3B0aW9uLCBzbyB0aGUKICAgICB0b29sIGtlZXBzIHdvcmtpbmcgZXZlbiBpZiBhIHRyYW5zbGF0aW9uIGxheWVyIGFsdGVycyBhbiBhdHRyaWJ1dGUuICovCgogIHZhciBHUkFERV9XT1JEID0gIkdyYWRlIjsKCiAgZnVuY3Rpb24gbGFiZWxUZXh0KGVsKXsKICAgIHJldHVybiAoZWwgJiYgZWwudGV4dENvbnRlbnQpID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICIgIikudHJpbSgpIDogIiI7CiAgfQoKICBmdW5jdGlvbiBhZG9wdEkxOG4oKXsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEkxOG4iKTsKICAgIGlmKCF3cmFwKXsgcmV0dXJuOyB9CiAgICB2YXIgd3MgPSB3cmFwLnF1ZXJ5U2VsZWN0b3JBbGwoInNwYW5bZGF0YS13XSIpOwogICAgZm9yKHZhciBpPTA7aTx3cy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIG4gPSBwYXJzZUludCh3c1tpXS5nZXRBdHRyaWJ1dGUoImRhdGEtdyIpLCAxMCk7CiAgICAgIHZhciB0ID0gbGFiZWxUZXh0KHdzW2ldKTsKICAgICAgaWYodCAmJiBuID49IDEgJiYgbiA8PSBXRUVLUy5sZW5ndGgpeyBXRUVLU1tuLTFdLnQgPSB0OyB9CiAgICB9CiAgICB2YXIgZyA9IGxhYmVsVGV4dCh3cmFwLnF1ZXJ5U2VsZWN0b3IoJ3NwYW5bZGF0YS10PSJncmFkZSJdJykpOwogICAgaWYoZyl7IEdSQURFX1dPUkQgPSBnOyB9CiAgfQoKICBmdW5jdGlvbiBncmFkZURlc2NMaW5lKG4pewogICAgdmFyIGcgPSBHUkFERVNbbi0xXTsKICAgIHJldHVybiBnID8gKEdSQURFX1dPUkQgKyAiICIgKyBuICsgIiBcdTIwMTQgIiArIGcuZGVzYykgOiAiIjsKICB9CgogIGZ1bmN0aW9uIHdpcmVHcmFkZSh3cmFwLCBiLCBpZHgpewogICAgdmFyIG4gPSBwYXJzZUludChiLmdldEF0dHJpYnV0ZSgiZGF0YS1nIiksIDEwKTsKICAgIGlmKCEobiA+PSAxICYmIG4gPD0gR1JBREVTLmxlbmd0aCkpeyBuID0gaWR4ICsgMTsgfQogICAgdmFyIGcgPSBHUkFERVNbbi0xXTsKICAgIGlmKCFnKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1nIiwgbik7CgogICAgdmFyIGxhYiA9IGxhYmVsVGV4dChiLnF1ZXJ5U2VsZWN0b3IoIi5ncnQtZ2xhYiIpKTsKICAgIHZhciBkZXNjID0gbGFiZWxUZXh0KGIucXVlcnlTZWxlY3RvcigiLmdydC1nZGVzYyIpKTsKICAgIGlmKGxhYil7IGcubGFiID0gbGFiOyB9CiAgICBpZihkZXNjKXsgZy5kZXNjID0gZGVzYzsgfQogICAgYi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCBHUkFERV9XT1JEICsgIiAiICsgbiArICIsICIgKyBnLmxhYik7CgogICAgdmFyIGltZyA9IENGRy5ncmFkZUltYWdlc1tuLTFdOwogICAgaWYoaW1nICYmICFiLnF1ZXJ5U2VsZWN0b3IoImltZyIpKXsKICAgICAgdmFyIGltID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgIGltLnNyYyA9IGltZzsKICAgICAgaW0uYWx0ID0gIiI7CiAgICAgIGltLnNldEF0dHJpYnV0ZSgibG9hZGluZyIsICJsYXp5Iik7CiAgICAgIGltLm9uZXJyb3IgPSBmdW5jdGlvbigpeyBpbS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyB9OwogICAgICBpZihiLmZpcnN0Q2hpbGQpeyBiLmluc2VydEJlZm9yZShpbSwgYi5maXJzdENoaWxkKTsgfSBlbHNlIHsgYi5hcHBlbmRDaGlsZChpbSk7IH0KICAgIH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgZHJhZnQuc3Rvb2wgPSBuOwogICAgICBtYXJrR3JvdXAod3JhcCwgbiwgImRhdGEtZyIpOwogICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHcmFkZURlc2MiKTsKICAgICAgaWYoZCl7IGQudGV4dENvbnRlbnQgPSBncmFkZURlc2NMaW5lKG4pOyB9CiAgICAgIGIuYmx1cigpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBidWlsZEdyYWRlcygpewogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R3JhZGVzIik7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEtZ10iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVHcmFkZSh3cmFwLCBleGlzdGluZ1tpXSwgaSk7IH0KICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdyYXAuaW5uZXJIVE1MID0gIiI7CiAgICBmb3IodmFyIGo9MDtqPEdSQURFUy5sZW5ndGg7aisrKXsKICAgICAgKGZ1bmN0aW9uKGcsIGl4KXsKICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgIGIudHlwZSA9ICJidXR0b24iOwogICAgICAgIGIuY2xhc3NOYW1lID0gImdydC1vcHQgZ3J0LWdyYWRlIjsKICAgICAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1nIiwgZy5uKTsKICAgICAgICB2YXIgaW1nID0gQ0ZHLmdyYWRlSW1hZ2VzW2cubi0xXTsKICAgICAgICB2YXIgaHRtbCA9ICIiOwogICAgICAgIGlmKGltZyl7CiAgICAgICAgICBodG1sICs9ICc8aW1nIHNyYz0iJytlc2MoaW1nKSsnIiBhbHQ9IiIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnIj4nOwogICAgICAgIH0KICAgICAgICBodG1sICs9ICc8c3BhbiBjbGFzcz0iZ3J0LWdudW0iPicrZy5uKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImdydC1nbGFiIj4nK2VzYyhnLmxhYikrJzwvc3Bhbj4nOwogICAgICAgIGIuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICB3cmFwLmFwcGVuZENoaWxkKGIpOwogICAgICAgIHdpcmVHcmFkZSh3cmFwLCBiLCBpeCk7CiAgICAgIH0pKEdSQURFU1tqXSwgaik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB3aXJlQ2hvaWNlKHdyYXAsIGIsIGxpc3QsIGZpZWxkLCBpZHgpewogICAgdmFyIHYgPSBiLmdldEF0dHJpYnV0ZSgiZGF0YS12Iik7CiAgICB2YXIgbyA9IG51bGw7CiAgICBmb3IodmFyIGk9MDtpPGxpc3QubGVuZ3RoO2krKyl7IGlmKGxpc3RbaV0udiA9PT0gdil7IG8gPSBsaXN0W2ldOyBicmVhazsgfSB9CiAgICBpZighbyl7IG8gPSBsaXN0W2lkeF07IH0KICAgIGlmKCFvKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS12Iiwgby52KTsKCiAgICB2YXIgdCA9IGxhYmVsVGV4dChiKTsKICAgIGlmKHQpeyBvLmxhYiA9IHQ7IH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgZHJhZnRbZmllbGRdID0gby52OwogICAgICBtYXJrR3JvdXAod3JhcCwgby52LCAiZGF0YS12Iik7CiAgICAgIGIuYmx1cigpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBidWlsZENob2ljZShpZCwgbGlzdCwgZmllbGQpewogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEtdl0iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVDaG9pY2Uod3JhcCwgZXhpc3RpbmdbaV0sIGxpc3QsIGZpZWxkLCBpKTsgfQogICAgICByZXR1cm47CiAgICB9CgogICAgd3JhcC5pbm5lckhUTUwgPSAiIjsKICAgIGZvcih2YXIgaj0wO2o8bGlzdC5sZW5ndGg7aisrKXsKICAgICAgKGZ1bmN0aW9uKG8sIGl4KXsKICAgICAgICB2YXIgYiA9IG9wdEJ1dHRvbigiIiwgby5sYWIpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCJkYXRhLXYiLCBvLnYpOwogICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYik7CiAgICAgICAgd2lyZUNob2ljZSh3cmFwLCBiLCBsaXN0LCBmaWVsZCwgaXgpOwogICAgICB9KShsaXN0W2pdLCBqKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHdpcmVGbGFnKHdyYXAsIGIsIGlkeCl7CiAgICB2YXIgayA9IGIuZ2V0QXR0cmlidXRlKCJkYXRhLWsiKTsKICAgIHZhciBmID0gbnVsbDsKICAgIGZvcih2YXIgaT0wO2k8RkxBR1MubGVuZ3RoO2krKyl7IGlmKEZMQUdTW2ldLmsgPT09IGspeyBmID0gRkxBR1NbaV07IGJyZWFrOyB9IH0KICAgIGlmKCFmKXsgZiA9IEZMQUdTW2lkeF07IH0KICAgIGlmKCFmKXsgcmV0dXJuOyB9CiAgICBiLnNldEF0dHJpYnV0ZSgiZGF0YS1rIiwgZi5rKTsKCiAgICB2YXIgdCA9IGxhYmVsVGV4dChiKTsKICAgIGlmKHQpeyBmLmxhYiA9IHQ7IH0KCiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgdmFyIGl4ID0gZHJhZnQuZmxhZ3MuaW5kZXhPZihmLmspOwogICAgICBpZihpeCA+IC0xKXsgZHJhZnQuZmxhZ3Muc3BsaWNlKGl4LDEpOyBiLmNsYXNzTGlzdC5yZW1vdmUoImlzLXNlbCIpOyB9CiAgICAgIGVsc2UgeyBkcmFmdC5mbGFncy5wdXNoKGYuayk7IGIuY2xhc3NMaXN0LmFkZCgiaXMtc2VsIik7IH0KICAgICAgYi5ibHVyKCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkRmxhZ3MoKXsKICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEZsYWdzIik7CiAgICBpZighd3JhcCl7IHJldHVybjsgfQoKICAgIHZhciBleGlzdGluZyA9IHdyYXAucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uW2RhdGEta10iKTsKICAgIGlmKGV4aXN0aW5nICYmIGV4aXN0aW5nLmxlbmd0aCl7CiAgICAgIGZvcih2YXIgaT0wO2k8ZXhpc3RpbmcubGVuZ3RoO2krKyl7IHdpcmVGbGFnKHdyYXAsIGV4aXN0aW5nW2ldLCBpKTsgfQogICAgICByZXR1cm47CiAgICB9CgogICAgd3JhcC5pbm5lckhUTUwgPSAiIjsKICAgIGZvcih2YXIgaj0wO2o8RkxBR1MubGVuZ3RoO2orKyl7CiAgICAgIChmdW5jdGlvbihmLCBpeCl7CiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgICAgICBiLnR5cGUgPSAiYnV0dG9uIjsKICAgICAgICBiLmNsYXNzTmFtZSA9ICJncnQtb3B0IGdydC1jaGVjayI7CiAgICAgICAgYi5zZXRBdHRyaWJ1dGUoImRhdGEtayIsIGYuayk7CiAgICAgICAgYi50ZXh0Q29udGVudCA9IGYubGFiOwogICAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoYik7CiAgICAgICAgd2lyZUZsYWcod3JhcCwgYiwgaXgpOwogICAgICB9KShGTEFHU1tqXSwgaik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBsb2FkRHJhZnRGb3Ioayl7CiAgICBkcmFmdCA9IG5ld0RyYWZ0KCk7CiAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba107CiAgICBpZihlKXsKICAgICAgZHJhZnQuc3Rvb2wgPSAodHlwZW9mIGUuc3Rvb2wgPT09ICJudW1iZXIiKSA\/IGUuc3Rvb2wgOiBudWxsOwogICAgICBkcmFmdC5lbmVyZ3kgPSBlLmVuZXJneSB8fCBudWxsOwogICAgICBkcmFmdC5hcHBldGl0ZSA9IGUuYXBwZXRpdGUgfHwgbnVsbDsKICAgICAgZHJhZnQucmVmdXNlZCA9ICEhZS5yZWZ1c2VkOwogICAgICBkcmFmdC5mbGFyZSA9IGUuZmxhcmUgfHwgbnVsbDsKICAgICAgZHJhZnQuZmxhZ3MgPSAoZS5mbGFncyB8fCBbXSkuc2xpY2UoKTsKICAgIH0KICAgIGlmKHN0YXRlLndlaWdodHNba10gIT0gbnVsbCl7IGRyYWZ0LndlaWdodCA9IFN0cmluZyhzdGF0ZS53ZWlnaHRzW2tdKTsgfQoKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R3JhZGVzIiksIGRyYWZ0LnN0b29sLCAiZGF0YS1nIik7CiAgICBtYXJrR3JvdXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEVuZXJneSIpLCBkcmFmdC5lbmVyZ3ksICJkYXRhLXYiKTsKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0QXBwZXRpdGUiKSwgZHJhZnQuYXBwZXRpdGUsICJkYXRhLXYiKTsKICAgIG1hcmtHcm91cChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RmxhcmUiKSwgZHJhZnQuZmxhcmUsICJkYXRhLXYiKTsKCiAgICB2YXIgZGVzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHcmFkZURlc2MiKTsKICAgIGlmKGRlc2MpewogICAgICBkZXNjLnRleHRDb250ZW50ID0gZHJhZnQuc3Rvb2wgPyBncmFkZURlc2NMaW5lKGRyYWZ0LnN0b29sKSA6ICIiOwogICAgfQoKICAgIHZhciByZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0UmVmdXNlZCIpOwogICAgaWYocmVmKXsgaWYoZHJhZnQucmVmdXNlZCl7IHJlZi5jbGFzc0xpc3QuYWRkKCJpcy1zZWwiKTsgfSBlbHNlIHsgcmVmLmNsYXNzTGlzdC5yZW1vdmUoImlzLXNlbCIpOyB9IH0KCiAgICB2YXIgZncgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0RmxhZ3MiKTsKICAgIGlmKGZ3KXsKICAgICAgdmFyIGtpZHMgPSBmdy5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24iKTsKICAgICAgZm9yKHZhciBpPTA7aTxraWRzLmxlbmd0aDtpKyspewogICAgICAgIHZhciBrayA9IGtpZHNbaV0uZ2V0QXR0cmlidXRlKCJkYXRhLWsiKTsKICAgICAgICBpZihkcmFmdC5mbGFncy5pbmRleE9mKGtrKSA+IC0xKXsga2lkc1tpXS5jbGFzc0xpc3QuYWRkKCJpcy1zZWwiKTsgfSBlbHNlIHsga2lkc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1zZWwiKTsgfQogICAgICB9CiAgICB9CgogICAgdmFyIHcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICBpZih3KXsgdy52YWx1ZSA9IGRyYWZ0LndlaWdodDsgfQoKICAgIHZhciBtZXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydERheU1ldGEiKTsKICAgIGlmKG1ldGEpewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoayk7CiAgICAgIGlmKGRuID4gQ0ZHLnJlc2V0RGF5cyl7CiAgICAgICAgbWV0YS50ZXh0Q29udGVudCA9ICJEYXkgIitkbisiIFx1MDBiNyByZXNldCBjb21wbGV0ZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWV0YS50ZXh0Q29udGVudCA9ICJEYXkgIitkbisiIG9mICIrQ0ZHLnJlc2V0RGF5cysiIFx1MDBiNyBXZWVrICIrd2Vla09mKGRuKSsiOiAiK1dFRUtTW3dlZWtPZihkbiktMV0udDsKICAgICAgfQogICAgfQoKICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0U2F2ZSIpOwogICAgaWYoYnRuKXsgYnRuLnRleHRDb250ZW50ID0gc3RhdGUuZW50cmllc1trXSA\/ICJVcGRhdGUgdGhpcyBkYXkiIDogIlNhdmUgdGhpcyBkYXkiOyB9CiAgfQoKICBmdW5jdGlvbiBzYXZlRGF5KCl7CiAgICB2YXIgayA9IHNlbGVjdGVkRGF5KCk7CiAgICB2YXIgdG9hc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VG9hc3QiKTsKICAgIGlmKGRyYWZ0LnN0b29sID09PSBudWxsKXsKICAgICAgaWYodG9hc3QpewogICAgICAgIHRvYXN0LnRleHRDb250ZW50ID0gIlBpY2sgYSBzdG9vbCBzY29yZSBmaXJzdCBcdTIwMTQgaXQncyB0aGUgb25lIGZpZWxkIHRoZSB0cmVuZCBpcyBidWlsdCBvbi4iOwogICAgICAgIHRvYXN0LmhpZGRlbiA9IGZhbHNlOwogICAgICB9CiAgICAgIHZhciBnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEdyYWRlcyIpOwogICAgICBpZihnICYmIGcuc2Nyb2xsSW50b1ZpZXcpeyBnLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIn0pOyB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKHRvYXN0KXsgdG9hc3QuaGlkZGVuID0gdHJ1ZTsgfQoKICAgIHN0YXRlLmVudHJpZXNba10gPSB7CiAgICAgIHN0b29sOiBkcmFmdC5zdG9vbCwKICAgICAgZW5lcmd5OiBkcmFmdC5lbmVyZ3ksCiAgICAgIGFwcGV0aXRlOiBkcmFmdC5hcHBldGl0ZSwKICAgICAgcmVmdXNlZDogISFkcmFmdC5yZWZ1c2VkLAogICAgICBmbGFyZTogZHJhZnQuZmxhcmUsCiAgICAgIGZsYWdzOiBkcmFmdC5mbGFncy5zbGljZSgpLAogICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpCiAgICB9OwoKICAgIHZhciB3RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICB2YXIgd3YgPSB3RWwgPyBwYXJzZUZsb2F0KHdFbC52YWx1ZSkgOiBOYU47CiAgICBpZighaXNOYU4od3YpICYmIHd2ID4gMCl7IHN0YXRlLndlaWdodHNba10gPSBNYXRoLnJvdW5kKHd2KjEwKS8xMDsgfQogICAgZWxzZSBpZihzdGF0ZS53ZWlnaHRzW2tdICE9IG51bGwgJiYgKCF3RWwgfHwgd0VsLnZhbHVlID09PSAiIikpeyBkZWxldGUgc3RhdGUud2VpZ2h0c1trXTsgfQoKICAgIHNhdmUoKTsKICAgIGJ1aWxkRGF5U2VsZWN0KCk7CiAgICB2YXIgc2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydERheVNlbCIpOwogICAgaWYoc2VsKXsgc2VsLnZhbHVlID0gazsgfQogICAgbG9hZERyYWZ0Rm9yKGspOwogICAgc2hvd1RhYigicHJvZyIpOwogICAgc2Nyb2xsVG9Ub29sKCk7CiAgfQoKICBmdW5jdGlvbiBzY3JvbGxUb1Rvb2woKXsKICAgIHRyeXsKICAgICAgaWYoIXJvb3QgfHwgdHlwZW9mIHJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAiZnVuY3Rpb24iKXsgcmV0dXJuOyB9CiAgICAgIHZhciB0b3AgPSAod2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgMCk7CiAgICAgIHZhciB5ID0gcm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0b3AgLSBDRkcuc2Nyb2xsT2Zmc2V0OwogICAgICBpZih5IDwgMCl7IHkgPSAwOyB9CiAgICAgIHZhciBzbW9vdGggPSB0cnVlOwogICAgICB0cnl7CiAgICAgICAgaWYod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyl7IHNtb290aCA9IGZhbHNlOyB9CiAgICAgIH1jYXRjaChlKXt9CiAgICAgIGlmKHNtb290aCl7CiAgICAgICAgdHJ5eyB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6eSwgYmVoYXZpb3I6InNtb290aCIgfSk7IHJldHVybjsgfWNhdGNoKGUpe30KICAgICAgfQogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgeSk7CiAgICB9Y2F0Y2goZSl7fQogIH0KCiAgLyogLS0tLS0tLS0tLSB2ZXQgZ2F0ZSAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHZldENoZWNrKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgZm91bmQgPSBbXTsKICAgIHZhciByZWNlbnQgPSBrcy5zbGljZSgtMyk7CiAgICBmb3IodmFyIGk9MDtpPHJlY2VudC5sZW5ndGg7aSsrKXsKICAgICAgdmFyIGUgPSBzdGF0ZS5lbnRyaWVzW3JlY2VudFtpXV07CiAgICAgIGlmKCFlIHx8ICFlLmZsYWdzKXsgY29udGludWU7IH0KICAgICAgZm9yKHZhciBqPTA7ajxlLmZsYWdzLmxlbmd0aDtqKyspewogICAgICAgIGlmKGUuZmxhZ3Nbal0gPT09ICJmb3JlaWduIil7IGNvbnRpbnVlOyB9CiAgICAgICAgaWYoZm91bmQuaW5kZXhPZihlLmZsYWdzW2pdKSA9PT0gLTEpeyBmb3VuZC5wdXNoKGUuZmxhZ3Nbal0pOyB9CiAgICAgIH0KICAgIH0KICAgIHZhciBydW43ID0gMCwgcnVuNjcgPSAwLCBzdG9wNyA9IGZhbHNlLCBzdG9wNjcgPSBmYWxzZTsKICAgIGZvcih2YXIgbSA9IGtzLmxlbmd0aC0xOyBtID49IDA7IG0tLSl7CiAgICAgIHZhciBlbiA9IHN0YXRlLmVudHJpZXNba3NbbV1dOwogICAgICB2YXIgZyA9IGVuID8gZW4uc3Rvb2wgOiBudWxsOwogICAgICBpZighc3RvcDcpeyBpZihnID09PSA3KXsgcnVuNysrOyB9IGVsc2UgeyBzdG9wNyA9IHRydWU7IH0gfQogICAgICBpZighc3RvcDY3KXsgaWYoZyA9PT0gNiB8fCBnID09PSA3KXsgcnVuNjcrKzsgfSBlbHNlIHsgc3RvcDY3ID0gdHJ1ZTsgfSB9CiAgICAgIGlmKHN0b3A3ICYmIHN0b3A2Nyl7IGJyZWFrOyB9CiAgICB9CiAgICB2YXIgd2F0ZXJ5UnVuID0gcnVuNyA+PSAzOwogICAgdmFyIGxvb3NlUnVuID0gcnVuNjcgPj0gNTsKICAgIGlmKCFmb3VuZC5sZW5ndGggJiYgIXdhdGVyeVJ1biAmJiAhbG9vc2VSdW4peyByZXR1cm4gIiI7IH0KCiAgICB2YXIgaXRlbXMgPSBbXTsKICAgIGZvcih2YXIgZj0wOyBmPGZvdW5kLmxlbmd0aDsgZisrKXsKICAgICAgZm9yKHZhciBnMj0wOyBnMjxGTEFHUy5sZW5ndGg7IGcyKyspewogICAgICAgIGlmKEZMQUdTW2cyXS5rID09PSBmb3VuZFtmXSl7IGl0ZW1zLnB1c2goIjxsaT4iK2VzYyhGTEFHU1tnMl0ubGFiKSsiPC9saT4iKTsgfQogICAgICB9CiAgICB9CiAgICBpZih3YXRlcnlSdW4peyBpdGVtcy5wdXNoKCI8bGk+V2F0ZXJ5IHN0b29sIChncmFkZSA3KSB0aHJlZSBsb2dnZWQgZGF5cyBydW5uaW5nPC9saT4iKTsgfQogICAgZWxzZSBpZihsb29zZVJ1bil7IGl0ZW1zLnB1c2goIjxsaT5EaWFycmhvZWEgKGdyYWRlIDYgb3IgNykgZml2ZSBsb2dnZWQgZGF5cyBydW5uaW5nPC9saT4iKTsgfQoKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LXZldCI+JyArCiAgICAgICc8aDU+Qm9vayBhIHZldCBhcHBvaW50bWVudDwvaDU+JyArCiAgICAgICc8cD5Zb3VcdTIwMTl2ZSBsb2dnZWQgc29tZXRoaW5nIGluIHRoZSBsYXN0IGZldyBkYXlzIHRoYXQgbmVlZHMgYSBwcm9mZXNzaW9uYWwgbG9vayByYXRoZXIgdGhhbiBtb3JlIHRyYWNraW5nOjwvcD4nICsKICAgICAgJzx1bD4nK2l0ZW1zLmpvaW4oIiIpKyc8L3VsPicgKwogICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+S2VlcCBsb2dnaW5nIGlmIGl0IGhlbHBzIHlvdSBkZXNjcmliZSB0aGUgcGF0dGVybiB0byB5b3VyIHZldCBcdTIwMTQgYnV0IGRvblx1MjAxOXQgd2FpdCBvbiB0aGUgMzAtZGF5IHRyZW5kIHRvIGRlY2lkZS4gQ2FsbCB0aGVtLjwvcD4nICsKICAgICAgJzwvZGl2Pic7CiAgfQoKICAvKiAtLS0tLS0tLS0tIGhlcm8gLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBwY3RCbG9jayhjdXIsIHByZXZQY3QsIHByZXZMYWJlbCwgY3VyTGFiZWwsIG5vdGUpewogICAgdmFyIGRlbHRhID0gY3VyLnBjdCAtIHByZXZQY3Q7CiAgICB2YXIgY2xzID0gZGVsdGEgPiAwID8gInVwIiA6IChkZWx0YSA8IDAgPyAiZG93biIgOiAiZmxhdCIpOwogICAgdmFyIGFycm93ID0gZGVsdGEgPiAwID8gIlx1MjViMiIgOiAoZGVsdGEgPCAwID8gIlx1MjViYyIgOiAiXHUyMDEzIik7CiAgICB2YXIgY21wID0gIiI7CiAgICBpZihwcmV2UGN0ICE9PSBudWxsKXsKICAgICAgY21wID0gJzxwIGNsYXNzPSJncnQtaGVyby1jbXAiPjxzcGFuIGNsYXNzPSJncnQtZGVsdGEgJytjbHMrJyI+JythcnJvdysiICIrTWF0aC5hYnMoZGVsdGEpKyIgcG9pbnRzPC9zcGFuPiB2cyAiK2VzYyhwcmV2TGFiZWwpKyIgKCIrcHJldlBjdCsiJSk8L3A+IjsKICAgIH0KICAgIHJldHVybiAnPHAgY2xhc3M9ImdydC1oZXJvLWV5ZWJyb3ciPicrZXNjKGN1ckxhYmVsKSsnPC9wPicgKwogICAgICAnPHAgY2xhc3M9ImdydC1oZXJvLW51bSI+JytjdXIucGN0Kyc8c3BhbiBjbGFzcz0iZ3J0LWhlcm8tdW5pdCI+JTwvc3Bhbj48L3A+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbGFiIj5nb29kIGRheXMgZm9yICcrZG9nTmFtZSgpKyc8L3A+JyArCiAgICAgIGNtcCArCiAgICAgIChub3RlID8gJzxwIGNsYXNzPSJncnQtaGVyby1ub3RlIj4nK25vdGUrJzwvcD4nIDogIiIpOwogIH0KCiAgZnVuY3Rpb24gaGVyb0hUTUwoKXsKICAgIHZhciBrcyA9IGxvZ2dlZEtleXMoKTsKICAgIHZhciBuID0ga3MubGVuZ3RoOwoKICAgIGlmKG4gPCA3KXsKICAgICAgdmFyIGxlZnQgPSA3IC0gbjsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtaGVybyI+JyArCiAgICAgICAgJzxwIGNsYXNzPSJncnQtaGVyby1leWVicm93Ij5CdWlsZGluZyB5b3VyIGJhc2VsaW5lPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbnVtIj4nK24rJzxzcGFuIGNsYXNzPSJncnQtaGVyby11bml0Ij4vNzwvc3Bhbj48L3A+JyArCiAgICAgICAgJzxwIGNsYXNzPSJncnQtaGVyby1sYWIiPmRheXMgbG9nZ2VkPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tY21wIj5LZWVwIGdvaW5nIFx1MjAxNCAnK2RvZ1Bvc3Nlc3NpdmUoKSsnIGZpcnN0IHRyZW5kIHVubG9ja3MgYWZ0ZXIgJytsZWZ0KycgbW9yZSAnKyhsZWZ0PT09MT8iZGF5IjoiZGF5cyIpKycuPC9wPicgKwogICAgICAgICc8cCBjbGFzcz0iZ3J0LWhlcm8tbm90ZSI+V2VlayAxIGlzIHlvdXIgYmFzZWxpbmUuIEV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzIGlzIG1lYXN1cmVkIGFnYWluc3QgaXQsIHNvIGxvZyBpdCBob25lc3RseSByYXRoZXIgdGhhbiBvcHRpbWlzdGljYWxseS48L3A+JyArCiAgICAgICAgJzwvZGl2Pic7CiAgICB9CgogICAgdmFyIGJvZHksIG5vdGUgPSAiIjsKICAgIGlmKHN0YXRlLmhlcm9Nb2RlID09PSAicm9sbGluZyIpewogICAgICB2YXIgcmVjZW50ID0ga3Muc2xpY2UoLTcpOwogICAgICB2YXIgcHJldiA9IGtzLnNsaWNlKC0xNCwgLTcpOwogICAgICB2YXIgckN1ciA9IGdvb2REYXlzKHJlY2VudCk7CiAgICAgIGlmKHByZXYubGVuZ3RoIDwgMyl7CiAgICAgICAgbm90ZSA9ICJZb3VyIHByZXZpb3VzIDctZGF5IHdpbmRvdyBmaWxscyBvdXQgYXMgeW91IGxvZyBtb3JlIGRheXMuIjsKICAgICAgICBib2R5ID0gcGN0QmxvY2sockN1ciwgbnVsbCwgIiIsICJMYXN0IDcgbG9nZ2VkIGRheXMiLCBub3RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgclByZXYgPSBnb29kRGF5cyhwcmV2KTsKICAgICAgICBpZihwcmV2Lmxlbmd0aCA8IDcpeyBub3RlID0gIkNvbXBhcmVkIGFnYWluc3QgdGhlICIrcHJldi5sZW5ndGgrIiBkYXlzIGJlZm9yZSB0aGF0LiI7IH0KICAgICAgICBib2R5ID0gcGN0QmxvY2sockN1ciwgclByZXYucGN0LCAidGhlIDcgZGF5cyBiZWZvcmUiLCAiTGFzdCA3IGxvZ2dlZCBkYXlzIiwgbm90ZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciBiYXNlID0ga3Muc2xpY2UoMCw3KTsKICAgICAgdmFyIGxhdGVzdCA9IGtzLnNsaWNlKC03KTsKICAgICAgdmFyIGxDdXIgPSBnb29kRGF5cyhsYXRlc3QpOwogICAgICB2YXIgbEJhc2UgPSBnb29kRGF5cyhiYXNlKTsKICAgICAgaWYobiA8IDE0KXsKICAgICAgICBub3RlID0gIllvdXIgbGF0ZXN0IHdlZWsgc3RpbGwgb3ZlcmxhcHMgeW91ciBiYXNlbGluZSB3ZWVrLiBJdCBzZXBhcmF0ZXMgZnVsbHkgYXQgMTQgbG9nZ2VkIGRheXMuIjsKICAgICAgfQogICAgICBib2R5ID0gcGN0QmxvY2sobEN1ciwgbEJhc2UucGN0LCAieW91ciBmaXJzdCB3ZWVrIiwgIkxhdGVzdCB3ZWVrIiwgbm90ZSk7CiAgICB9CgogICAgdmFyIHQxID0gc3RhdGUuaGVyb01vZGUgPT09ICJiYXNlbGluZSIgPyAiIGlzLXNlbCIgOiAiIjsKICAgIHZhciB0MiA9IHN0YXRlLmhlcm9Nb2RlID09PSAicm9sbGluZyIgPyAiIGlzLXNlbCIgOiAiIjsKICAgIHZhciB0b2dnbGUgPSAnPGRpdiBjbGFzcz0iZ3J0LXRvZ2dsZSIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IkNvbXBhcmlzb24gYmFzaXMiPicgKwogICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJncnQtaG0nK3QxKyciIGRhdGEtbW9kZT0iYmFzZWxpbmUiPnZzIGZpcnN0IHdlZWs8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZ3J0LWhtJyt0MisnIiBkYXRhLW1vZGU9InJvbGxpbmciPnZzIHByZXZpb3VzIDcgZGF5czwvYnV0dG9uPicgKwogICAgICAnPC9kaXY+JzsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImdydC1oZXJvIj4nICsgYm9keSArIHRvZ2dsZSArICc8L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gdXBncmFkZUhUTUwoKXsKICAgIGlmKHN0YXRlLnVwZ3JhZGVEaXNtaXNzZWQpeyByZXR1cm4gIiI7IH0KICAgIHZhciBrcyA9IGxvZ2dlZEtleXMoKTsKICAgIGlmKGtzLmxlbmd0aCA8IDMpeyByZXR1cm4gIiI7IH0KICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LXVwZ3JhZGUiPicgKwogICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJncnQtZGlzbWlzcyIgaWQ9ImdydFVwRGlzbWlzcyIgYXJpYS1sYWJlbD0iSGlkZSB0aGlzIj5cdTAwZDc8L2J1dHRvbj4nICsKICAgICAgJzxoNT5LZWVwIHRoaXMgaGlzdG9yeSBmb3IgZ29vZDwvaDU+JyArCiAgICAgICc8cD5UaGVzZSBsb2dzIGxpdmUgaW4gdGhpcyBicm93c2VyLCBvbiB0aGlzIGRldmljZS4gQ2xlYXIgeW91ciBicm93c2luZyBkYXRhIGFuZCB0aGV5XHUyMDE5cmUgZ29uZS4gQSBCb256YSBhY2NvdW50IHdpbGwga2VlcCAnK2RvZ1Bvc3Nlc3NpdmUoKSsnIGZ1bGwgaGlzdG9yeSBzYWZlLCBzeW5jIGl0IGFjcm9zcyB5b3VyIHBob25lIGFuZCBsYXB0b3AsIGFuZCBsZXQgeW91IGFzayBxdWVzdGlvbnMgb2YgeW91ciBvd24gZGF0YS4gV2VcdTIwMTlsbCBlbWFpbCB5b3UgdGhlIG1vbWVudCBpdFx1MjAxOXMgcmVhZHkuPC9wPicgKwogICAgICAnPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHJpbmdIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgbG9nZ2VkID0ga3MubGVuZ3RoOwogICAgdmFyIGRuID0gZGF5TnVtYmVyKHRvZGF5S2V5KCkpOwogICAgdmFyIHBjdCA9IE1hdGgubWluKDEsIGxvZ2dlZCAvIENGRy5yZXNldERheXMpOwogICAgdmFyIHIgPSAzOCwgYyA9IDIgKiBNYXRoLlBJICogcjsKICAgIHZhciBkYXNoID0gKGMgKiBwY3QpLnRvRml4ZWQoMSkgKyAiICIgKyBjLnRvRml4ZWQoMSk7CiAgICB2YXIgbGluZTI7CiAgICBpZihkbiA+IENGRy5yZXNldERheXMpewogICAgICBsaW5lMiA9ICJZb3VyIDMwIGRheXMgYXJlIHVwLiBSZWFzc2VzcyBhZ2FpbnN0IFdlZWsgMSBcdTIwMTQgYW5kIGtlZXAgdGhlIGhhYml0cyB0aGF0IHdvcmtlZC4iOwogICAgfSBlbHNlIHsKICAgICAgbGluZTIgPSAiRGF5ICIrZG4rIiBvZiAiK0NGRy5yZXNldERheXMrIiBcdTAwYjcgV2VlayAiK3dlZWtPZihkbikrIjogIitXRUVLU1t3ZWVrT2YoZG4pLTFdLnQ7CiAgICB9CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImdydC1yaW5nd3JhcCI+JyArCiAgICAgICc8c3ZnIGNsYXNzPSJncnQtcmluZyIgdmlld0JveD0iMCAwIDkyIDkyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JyArCiAgICAgICc8Y2lyY2xlIGN4PSI0NiIgY3k9IjQ2IiByPSInK3IrJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjkiPjwvY2lyY2xlPicgKwogICAgICAnPGNpcmNsZSBjeD0iNDYiIGN5PSI0NiIgcj0iJytyKyciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIitQQUwuZ3JlZW4rIiIgc3Ryb2tlLXdpZHRoPSI5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1kYXNoYXJyYXk9IicrZGFzaCsnIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgNDYgNDYpIj48L2NpcmNsZT4nICsKICAgICAgJzx0ZXh0IHg9IjQ2IiB5PSI1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9IjgwMCIgZmlsbD0iIitQQUwuZ3JlZW5EZWVwKyIiPicrbG9nZ2VkKyc8L3RleHQ+JyArCiAgICAgICc8dGV4dCB4PSI0NiIgeT0iNjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOSIgZmlsbD0iIitQQUwubXV0ZWQrIiI+b2YgMzA8L3RleHQ+JyArCiAgICAgICc8L3N2Zz4nICsKICAgICAgJzxkaXYgY2xhc3M9ImdydC1yaW5ndGV4dCI+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LXJ0MSI+Jytsb2dnZWQrJyAnKyhsb2dnZWQ9PT0xPyJkYXkiOiJkYXlzIikrJyBsb2dnZWQ8L3A+JyArCiAgICAgICc8cCBjbGFzcz0iZ3J0LXJ0MiI+Jytlc2MobGluZTIpKyc8L3A+JyArCiAgICAgICc8L2Rpdj48L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2Vla3NIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgY291bnRzID0gWzAsMCwwLDBdLCBmbGFyZXMgPSBbMCwwLDAsMF0sIGdvb2QgPSBbMCwwLDAsMF07CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoa3NbaV0pOwogICAgICBpZihkbiA8IDEgfHwgZG4gPiBDRkcucmVzZXREYXlzKXsgY29udGludWU7IH0KICAgICAgdmFyIHcgPSB3ZWVrT2YoZG4pIC0gMTsKICAgICAgY291bnRzW3ddKys7CiAgICAgIHZhciBlID0gc3RhdGUuZW50cmllc1trc1tpXV07CiAgICAgIGlmKGUuZmxhcmUgPT09ICJ5ZXMiKXsgZmxhcmVzW3ddKys7IH0KICAgICAgaWYoSEVBTFRIWS5pbmRleE9mKGUuc3Rvb2wpID4gLTEpeyBnb29kW3ddKys7IH0KICAgIH0KICAgIHZhciBjdXJXID0gd2Vla09mKGRheU51bWJlcih0b2RheUtleSgpKSk7CiAgICB2YXIgb3V0ID0gJzxoNT5Zb3VyIGZvdXIgcmVzZXQgd2Vla3M8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPlN0cmFpZ2h0IGZyb20gdGhlIGVCb29rIHByb3RvY29sLiBXZWVrIDEgaXMgdGhlIGJhc2VsaW5lIGV2ZXJ5dGhpbmcgZWxzZSBpcyBtZWFzdXJlZCBhZ2FpbnN0LjwvcD48ZGl2IGNsYXNzPSJncnQtd2Vla3MiPic7CiAgICBmb3IodmFyIHcyPTA7IHcyPDQ7IHcyKyspewogICAgICB2YXIgaXNOb3cgPSAodzIrMSA9PT0gY3VyVyAmJiBkYXlOdW1iZXIodG9kYXlLZXkoKSkgPD0gQ0ZHLnJlc2V0RGF5cykgPyAiIGlzLW5vdyIgOiAiIjsKICAgICAgdmFyIGRldGFpbCA9IGNvdW50c1t3Ml0gPyAoY291bnRzW3cyXSsiLzcgbG9nZ2VkIFx1MDBiNyAiKyhjb3VudHNbdzJdID8gTWF0aC5yb3VuZChnb29kW3cyXS9jb3VudHNbdzJdKjEwMCkgOiAwKSsiJSBnb29kIikgOiAibm90IHN0YXJ0ZWQiOwogICAgICBvdXQgKz0gJzxkaXYgY2xhc3M9ImdydC13ZWVrJytpc05vdysnIj48c3BhbiBjbGFzcz0iZ3J0LXdrIj5XJysodzIrMSkrJzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3J0LXd0Ij4nK2VzYyhXRUVLU1t3Ml0udCkrJzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3J0LXd0Ij4nK2VzYyhkZXRhaWwpKyc8L3NwYW4+PC9kaXY+JzsKICAgIH0KICAgIG91dCArPSAiPC9kaXY+IjsKICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tIGNoYXJ0cyAtLS0tLS0tLS0tICovCgogIC8qIFRoZSB0cmVuZCBjaGFydHMgdXNlIGEgNjAwLXVuaXQgdmlld0JveCBzY2FsZWQgdG8gZml0IHRoZSBjYXJkLCBzbyBvbiBhIHBob25lCiAgICAgZXZlcnl0aGluZyBpbnNpZGUgc2hyaW5rcyB3aXRoIGl0IC0gYSAxMC11bml0IGF4aXMgbGFiZWwgbGFuZHMgYXQgYWJvdXQgNXB4IG9uCiAgICAgYSAzOTBweCBzY3JlZW4uIEZTQ0FMRSBpcyB0aGUgaW52ZXJzZSBvZiB0aGF0IGRpc3BsYXkgc2NhbGUsIGFwcGxpZWQgdG8gdGV4dCwKICAgICBkb3QgcmFkaWkgYW5kIGRhdGEtbGluZSB3ZWlnaHRzIHNvIHRoZXkgaG9sZCBhIGNvbnN0YW50IHBoeXNpY2FsIHNpemUuIFRoZSByaW5nCiAgICAgaXMgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkOiBpdCByZW5kZXJzIGF0IGEgZml4ZWQgOTJweCBhbmQgbmV2ZXIgc2NhbGVzLiAqLwogIHZhciBGU0NBTEUgPSAxOwoKICBmdW5jdGlvbiBmc3oobil7IHJldHVybiBNYXRoLnJvdW5kKG4gKiBGU0NBTEUgKiAxMCkgLyAxMDsgfQoKICBmdW5jdGlvbiBjaGFydFNjYWxlKCl7CiAgICB2YXIgdyA9IDA7CiAgICB0cnl7CiAgICAgIHZhciBzbG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydENoYXJ0c1Nsb3QiKTsKICAgICAgaWYoc2xvdCAmJiBzbG90LmNsaWVudFdpZHRoKXsgdyA9IHNsb3QuY2xpZW50V2lkdGggLSAzODsgfQogICAgICBlbHNlIGlmKHJvb3QgJiYgcm9vdC5jbGllbnRXaWR0aCl7IHcgPSByb290LmNsaWVudFdpZHRoIC0gNzQ7IH0KICAgIH1jYXRjaChlKXt9CiAgICBpZighdyB8fCB3IDwgMTQwKXsgcmV0dXJuIDE7IH0KICAgIHZhciBzYyA9IDYwMCAvIHc7CiAgICBpZihzYyA8IDEpeyBzYyA9IDE7IH0KICAgIGlmKHNjID4gMi40KXsgc2MgPSAyLjQ7IH0KICAgIHJldHVybiBzYzsKICB9CgoKICBmdW5jdGlvbiBzdG9vbENoYXJ0SFRNTCgpewogICAgdmFyIGtzID0gbG9nZ2VkS2V5cygpOwogICAgdmFyIHB0cyA9IFtdOwogICAgZm9yKHZhciBpPTA7aTxrcy5sZW5ndGg7aSsrKXsKICAgICAgdmFyIGRuID0gZGF5TnVtYmVyKGtzW2ldKTsKICAgICAgaWYoZG4gPCAxIHx8IGRuID4gQ0ZHLnJlc2V0RGF5cyl7IGNvbnRpbnVlOyB9CiAgICAgIHB0cy5wdXNoKHsgZDpkbiwgZzpzdGF0ZS5lbnRyaWVzW2tzW2ldXS5zdG9vbCB9KTsKICAgIH0KICAgIGlmKHB0cy5sZW5ndGggPCAyKXsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1PlN0b29sIHNjb3JlIG92ZXIgdGhlIHJlc2V0PC9oNT48cCBjbGFzcz0iZ3J0LWVtcHR5Ij5Ud28gbG9nZ2VkIGRheXMgYW5kIHRoaXMgY2hhcnQgYXBwZWFycy48L3A+PC9kaXY+JzsKICAgIH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDIxMCwgcGFkTCA9IDMwLCBwYWRSID0gMTIsIHBhZFQgPSAxNCwgcGFkQiA9IDI2OwogICAgdmFyIHB3ID0gVyAtIHBhZEwgLSBwYWRSLCBwaCA9IEggLSBwYWRUIC0gcGFkQjsKICAgIGZ1bmN0aW9uIFgoZCl7IHJldHVybiBwYWRMICsgKGQtMSkvKENGRy5yZXNldERheXMtMSkgKiBwdzsgfQogICAgZnVuY3Rpb24gWShnKXsgcmV0dXJuIHBhZFQgKyAoZy0xKS82ICogcGg7IH0KCiAgICB2YXIgcyA9ICc8c3ZnIGNsYXNzPSJncnQtY2hhcnQiIHZpZXdCb3g9IjAgMCAnK1crJyAnK0grJyIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJTdG9vbCBzY29yZSBmb3IgZWFjaCBsb2dnZWQgZGF5IG9mIHRoZSAzMC1kYXkgcmVzZXQiPic7CiAgICBzICs9ICc8cmVjdCB4PSInK3BhZEwrJyIgeT0iJytZKDIpLnRvRml4ZWQoMSkrJyIgd2lkdGg9IicrcHcrJyIgaGVpZ2h0PSInKyhZKDMpLVkoMikpLnRvRml4ZWQoMSkrJyIgZmlsbD0iIitQQUwudGludCsiIj48L3JlY3Q+JzsKICAgIHMgKz0gJzx0ZXh0IHg9IicrKHBhZEwrNikrJyIgeT0iJysoWSgyKSsxMykudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIiK1BBTC5ncmVlbisiIj5oZWFsdGh5IHJhbmdlPC90ZXh0Pic7CgogICAgZm9yKHZhciBnPTE7IGc8PTc7IGcrKyl7CiAgICAgIHMgKz0gJzxsaW5lIHgxPSInK3BhZEwrJyIgeTE9IicrWShnKS50b0ZpeGVkKDEpKyciIHgyPSInKyhXLXBhZFIpKyciIHkyPSInK1koZykudG9GaXhlZCgxKSsnIiBzdHJva2U9IiIrUEFMLnRyYWNrKyIiIHN0cm9rZS13aWR0aD0iMSI+PC9saW5lPic7CiAgICAgIHMgKz0gJzx0ZXh0IHg9IicrKHBhZEwtOCkrJyIgeT0iJysoWShnKSs0KS50b0ZpeGVkKDEpKyciIGZvbnQtc2l6ZT0iJytmc3ooMTApKyciIGZpbGw9IiIrUEFMLm11dGVkKyIiIHRleHQtYW5jaG9yPSJlbmQiPicrZysnPC90ZXh0Pic7CiAgICB9CiAgICBmb3IodmFyIHdrPTE7IHdrPD00OyB3aysrKXsKICAgICAgdmFyIHhkID0gWCh3ayo3ICsgMSk7CiAgICAgIGlmKHdrIDwgNCl7CiAgICAgICAgcyArPSAnPGxpbmUgeDE9IicreGQudG9GaXhlZCgxKSsnIiB5MT0iJytwYWRUKyciIHgyPSInK3hkLnRvRml4ZWQoMSkrJyIgeTI9IicrKHBhZFQrcGgpKyciIHN0cm9rZT0iIitQQUwuZGl2aWRlcisiIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyI+PC9saW5lPic7CiAgICAgIH0KICAgICAgcyArPSAnPHRleHQgeD0iJysoWCgod2stMSkqNysxKSs0KS50b0ZpeGVkKDEpKyciIHk9IicrKEgtOCkrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIitQQUwubXV0ZWQrIiI+Vycrd2srJzwvdGV4dD4nOwogICAgfQoKICAgIHZhciBkcGF0aCA9ICIiOwogICAgZm9yKHZhciBwPTA7cDxwdHMubGVuZ3RoO3ArKyl7CiAgICAgIGRwYXRoICs9IChwPT09MCA\/ICJNIiA6ICJMIikgKyBYKHB0c1twXS5kKS50b0ZpeGVkKDEpICsgIiAiICsgWShwdHNbcF0uZykudG9GaXhlZCgxKSArICIgIjsKICAgIH0KICAgIHMgKz0gJzxwYXRoIGQ9IicrZHBhdGgrJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC5ncmVlbkRlZXArIiIgc3Ryb2tlLXdpZHRoPSInK2ZzeigyKSsnIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjwvcGF0aD4nOwogICAgZm9yKHZhciBxPTA7cTxwdHMubGVuZ3RoO3ErKyl7CiAgICAgIHZhciBoZWFsdGh5ID0gSEVBTFRIWS5pbmRleE9mKHB0c1txXS5nKSA+IC0xOwogICAgICBzICs9ICc8Y2lyY2xlIGN4PSInK1gocHRzW3FdLmQpLnRvRml4ZWQoMSkrJyIgY3k9IicrWShwdHNbcV0uZykudG9GaXhlZCgxKSsnIiByPSInK2Zzeig0KSsnIiBmaWxsPSInKyhoZWFsdGh5ID8gUEFMLmdyZWVuIDogUEFMLnBhcGVyKSsnIiBzdHJva2U9IicrUEFMLmdyZWVuRGVlcCsnIiBzdHJva2Utd2lkdGg9IicrZnN6KDIpKyciPjwvY2lyY2xlPic7CiAgICB9CiAgICBzICs9ICI8L3N2Zz4iOwoKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5TdG9vbCBzY29yZSBvdmVyIHRoZSByZXNldDwvaDU+PHAgY2xhc3M9ImdydC1jYXJkaGludCI+TG93ZXIgaXMgZmlybWVyLiBUaGUgZ3JlZW4gYmFuZCBpcyBncmFkZXMgMiB0byAzIFx1MjAxNCB3aGVyZSB5b3Ugd2FudCBtb3N0IGRheXMgdG8gbGFuZC48L3A+JytzKyc8L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2Vla0JhcnNIVE1MKCl7CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgY291bnRzID0gWzAsMCwwLDBdLCBnb29kID0gWzAsMCwwLDBdLCBmbGFyZXMgPSBbMCwwLDAsMF07CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgZG4gPSBkYXlOdW1iZXIoa3NbaV0pOwogICAgICBpZihkbiA8IDEgfHwgZG4gPiBDRkcucmVzZXREYXlzKXsgY29udGludWU7IH0KICAgICAgdmFyIHcgPSB3ZWVrT2YoZG4pLTE7CiAgICAgIGNvdW50c1t3XSsrOwogICAgICB2YXIgZSA9IHN0YXRlLmVudHJpZXNba3NbaV1dOwogICAgICBpZihIRUFMVEhZLmluZGV4T2YoZS5zdG9vbCkgPiAtMSl7IGdvb2Rbd10rKzsgfQogICAgICBpZihlLmZsYXJlID09PSAieWVzIil7IGZsYXJlc1t3XSsrOyB9CiAgICB9CiAgICB2YXIgYW55ID0gY291bnRzWzBdK2NvdW50c1sxXStjb3VudHNbMl0rY291bnRzWzNdOwogICAgaWYoIWFueSl7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5Hb29kIGRheXMgYW5kIGZsYXJlLXVwcyBieSB3ZWVrPC9oNT48cCBjbGFzcz0iZ3J0LWVtcHR5Ij5Mb2cgYSBmZXcgZGF5cyBhbmQgeW91ciB3ZWVrbHkgY29tcGFyaXNvbiBzdGFydHMgaGVyZS48L3A+PC9kaXY+JzsKICAgIH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDIwMCwgcGFkVCA9IDE2LCBwYWRCID0gNDQsIHBhZEwgPSAzNCwgcGFkUiA9IDEyOwogICAgdmFyIHBoID0gSCAtIHBhZFQgLSBwYWRCLCBwdyA9IFcgLSBwYWRMIC0gcGFkUjsKICAgIHZhciBzbG90ID0gcHcvNDsKICAgIHZhciBzID0gJzxzdmcgY2xhc3M9ImdydC1jaGFydCIgdmlld0JveD0iMCAwICcrVysnICcrSCsnIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IlBlcmNlbnRhZ2Ugb2YgZ29vZCBkYXlzIGluIGVhY2ggcmVzZXQgd2VlayI+JzsKICAgIHZhciBsZXZlbHMgPSBbMCwyNSw1MCw3NSwxMDBdOwogICAgZm9yKHZhciBsPTA7bDxsZXZlbHMubGVuZ3RoO2wrKyl7CiAgICAgIHZhciB5ID0gcGFkVCArIHBoIC0gKGxldmVsc1tsXS8xMDApKnBoOwogICAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInK3kudG9GaXhlZCgxKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJyt5LnRvRml4ZWQoMSkrJyIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjEiPjwvbGluZT4nOwogICAgICBzICs9ICc8dGV4dCB4PSInKyhwYWRMLTgpKyciIHk9IicrKHkrNCkudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj4nK2xldmVsc1tsXSsnPC90ZXh0Pic7CiAgICB9CiAgICBmb3IodmFyIGI9MDtiPDQ7YisrKXsKICAgICAgdmFyIGN4ID0gcGFkTCArIHNsb3QqYiArIHNsb3QvMjsKICAgICAgdmFyIGJ3ID0gTWF0aC5taW4oNjQsIHNsb3QqMC41NSk7CiAgICAgIGlmKGNvdW50c1tiXSl7CiAgICAgICAgdmFyIHBjdCA9IE1hdGgucm91bmQoZ29vZFtiXS9jb3VudHNbYl0qMTAwKTsKICAgICAgICB2YXIgYmggPSAocGN0LzEwMCkqcGg7CiAgICAgICAgaWYoYmggPCAyKXsgYmggPSAyOyB9CiAgICAgICAgcyArPSAnPHJlY3QgeD0iJysoY3gtYncvMikudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoLWJoKS50b0ZpeGVkKDEpKyciIHdpZHRoPSInK2J3LnRvRml4ZWQoMSkrJyIgaGVpZ2h0PSInK2JoLnRvRml4ZWQoMSkrJyIgcng9IjQiIGZpbGw9IiIrUEFMLmdyZWVuKyIiPjwvcmVjdD4nOwogICAgICAgIHMgKz0gJzx0ZXh0IHg9IicrY3gudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoLWJoLTYpLnRvRml4ZWQoMSkrJyIgZm9udC1zaXplPSInK2ZzeigxMikrJyIgZm9udC13ZWlnaHQ9IjgwMCIgZmlsbD0iIitQQUwuZ3JlZW5EZWVwKyIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPicrcGN0KyclPC90ZXh0Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcyArPSAnPHRleHQgeD0iJytjeC50b0ZpeGVkKDEpKyciIHk9IicrKHBhZFQrcGgtOCkrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iIitQQUwubXV0ZWQrIiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bm8gZGF0YTwvdGV4dD4nOwogICAgICB9CiAgICAgIHMgKz0gJzx0ZXh0IHg9IicrY3gudG9GaXhlZCgxKSsnIiB5PSInKyhwYWRUK3BoKzE4KSsnIiBmb250LXNpemU9IicrZnN6KDExKSsnIiBmb250LXdlaWdodD0iODAwIiBmaWxsPSIiK1BBTC5pbmsrIiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2VlayAnKyhiKzEpKyc8L3RleHQ+JzsKICAgICAgdmFyIGZsID0gZmxhcmVzW2JdID09PSAxID8gIjEgZmxhcmUtdXAiIDogKGZsYXJlc1tiXSsiIGZsYXJlLXVwcyIpOwogICAgICBzICs9ICc8dGV4dCB4PSInK2N4LnRvRml4ZWQoMSkrJyIgeT0iJysocGFkVCtwaCszMykrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iJysoZmxhcmVzW2JdID8gUEFMLmFtYmVyRGVlcCA6IFBBTC5tdXRlZCkrJyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+JytmbCsnPC90ZXh0Pic7CiAgICB9CiAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInKyhwYWRUK3BoKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJysocGFkVCtwaCkrJyIgc3Ryb2tlPSIiK1BBTC5kaXZpZGVyKyIiIHN0cm9rZS13aWR0aD0iMSI+PC9saW5lPic7CiAgICBzICs9ICI8L3N2Zz4iOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1Pkdvb2QgZGF5cyBhbmQgZmxhcmUtdXBzIGJ5IHdlZWs8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPlBlcmNlbnRhZ2Ugb2YgdGhhdCB3ZWVrXHUyMDE5cyBsb2dnZWQgZGF5cyBsYW5kaW5nIGluIGdyYWRlcyAyIHRvIDMuPC9wPicrcysnPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHdlaWdodENoYXJ0SFRNTCgpewogICAgdmFyIGtzID0gW107CiAgICBmb3IodmFyIGsgaW4gc3RhdGUud2VpZ2h0cyl7IGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS53ZWlnaHRzLGspKXsga3MucHVzaChrKTsgfSB9CiAgICBrcy5zb3J0KCk7CiAgICBpZihrcy5sZW5ndGggPCAyKXsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJncnQtY2FyZCI+PGg1PldlaWdodDwvaDU+PHAgY2xhc3M9ImdydC1lbXB0eSI+TG9nIGEgd2VpZ2h0IG9uIHR3byBzZXBhcmF0ZSBkYXlzIHRvIHNlZSB0aGUgbGluZS4gV2Vla2x5IGlzIHBsZW50eS48L3A+PC9kaXY+JzsKICAgIH0KICAgIHZhciB2YWxzID0gW10sIG1pbiA9IEluZmluaXR5LCBtYXggPSAtSW5maW5pdHk7CiAgICBmb3IodmFyIGk9MDtpPGtzLmxlbmd0aDtpKyspewogICAgICB2YXIgdiA9IHN0YXRlLndlaWdodHNba3NbaV1dOwogICAgICB2YWxzLnB1c2goeyBkOiBkYXlOdW1iZXIoa3NbaV0pLCB2OiB2IH0pOwogICAgICBpZih2IDwgbWluKXsgbWluID0gdjsgfQogICAgICBpZih2ID4gbWF4KXsgbWF4ID0gdjsgfQogICAgfQogICAgdmFyIHNwYW4gPSBtYXggLSBtaW47CiAgICBpZihzcGFuIDwgMC40KXsgbWluIC09IDAuMjsgbWF4ICs9IDAuMjsgc3BhbiA9IG1heCAtIG1pbjsgfQogICAgZWxzZSB7IG1pbiAtPSBzcGFuKjAuMTU7IG1heCArPSBzcGFuKjAuMTU7IHNwYW4gPSBtYXggLSBtaW47IH0KCiAgICB2YXIgVyA9IDYwMCwgSCA9IDE4MCwgcGFkTCA9IDQwLCBwYWRSID0gMTIsIHBhZFQgPSAxNCwgcGFkQiA9IDI2OwogICAgdmFyIHB3ID0gVyAtIHBhZEwgLSBwYWRSLCBwaCA9IEggLSBwYWRUIC0gcGFkQjsKICAgIHZhciBsYXN0RGF5ID0gTWF0aC5tYXgoQ0ZHLnJlc2V0RGF5cywgdmFsc1t2YWxzLmxlbmd0aC0xXS5kKTsKICAgIGZ1bmN0aW9uIFgoZCl7IHJldHVybiBwYWRMICsgKGQtMSkvKGxhc3REYXktMSkgKiBwdzsgfQogICAgZnVuY3Rpb24gWSh2KXsgcmV0dXJuIHBhZFQgKyAoMSAtICh2LW1pbikvc3BhbikgKiBwaDsgfQoKICAgIHZhciBzID0gJzxzdmcgY2xhc3M9ImdydC1jaGFydCIgdmlld0JveD0iMCAwICcrVysnICcrSCsnIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IldlaWdodCBvdmVyIHRoZSByZXNldCI+JzsKICAgIGZvcih2YXIgdD0wO3Q8Mzt0KyspewogICAgICB2YXIgdnYgPSBtaW4gKyBzcGFuKih0LzIpOwogICAgICB2YXIgeSA9IFkodnYpOwogICAgICBzICs9ICc8bGluZSB4MT0iJytwYWRMKyciIHkxPSInK3kudG9GaXhlZCgxKSsnIiB4Mj0iJysoVy1wYWRSKSsnIiB5Mj0iJyt5LnRvRml4ZWQoMSkrJyIgc3Ryb2tlPSIiK1BBTC50cmFjaysiIiBzdHJva2Utd2lkdGg9IjEiPjwvbGluZT4nOwogICAgICBzICs9ICc8dGV4dCB4PSInKyhwYWRMLTgpKyciIHk9IicrKHkrNCkudG9GaXhlZCgxKSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj4nK3Z2LnRvRml4ZWQoMSkrJzwvdGV4dD4nOwogICAgfQogICAgdmFyIGRwID0gIiI7CiAgICBmb3IodmFyIHA9MDtwPHZhbHMubGVuZ3RoO3ArKyl7IGRwICs9IChwPT09MD8iTSI6IkwiKSArIFgodmFsc1twXS5kKS50b0ZpeGVkKDEpICsgIiAiICsgWSh2YWxzW3BdLnYpLnRvRml4ZWQoMSkgKyAiICI7IH0KICAgIHMgKz0gJzxwYXRoIGQ9IicrZHArJyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIiK1BBTC5ncmVlbkRlZXArIiIgc3Ryb2tlLXdpZHRoPSInK2ZzeigyKSsnIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjwvcGF0aD4nOwogICAgZm9yKHZhciBxPTA7cTx2YWxzLmxlbmd0aDtxKyspewogICAgICBzICs9ICc8Y2lyY2xlIGN4PSInK1godmFsc1txXS5kKS50b0ZpeGVkKDEpKyciIGN5PSInK1kodmFsc1txXS52KS50b0ZpeGVkKDEpKyciIHI9IicrZnN6KDQpKyciIGZpbGw9IiIrUEFMLmdyZWVuRGVlcCsiIj48L2NpcmNsZT4nOwogICAgfQogICAgcyArPSAnPHRleHQgeD0iJytwYWRMKyciIHk9IicrKEgtNikrJyIgZm9udC1zaXplPSInK2ZzeigxMCkrJyIgZmlsbD0iIitQQUwubXV0ZWQrIiI+RGF5IDE8L3RleHQ+JzsKICAgIHMgKz0gJzx0ZXh0IHg9IicrKFctcGFkUikrJyIgeT0iJysoSC02KSsnIiBmb250LXNpemU9IicrZnN6KDEwKSsnIiBmaWxsPSIiK1BBTC5tdXRlZCsiIiB0ZXh0LWFuY2hvcj0iZW5kIj5EYXkgJytsYXN0RGF5Kyc8L3RleHQ+JzsKICAgIHMgKz0gIjwvc3ZnPiI7CiAgICB2YXIgY2hhbmdlID0gdmFsc1t2YWxzLmxlbmd0aC0xXS52IC0gdmFsc1swXS52OwogICAgdmFyIHdvcmQgPSBjaGFuZ2UgPiAwID8gInVwIiA6IChjaGFuZ2UgPCAwID8gImRvd24iIDogImxldmVsIik7CiAgICB2YXIgaGludCA9IGNoYW5nZSA9PT0gMCA\/ICJObyBjaGFuZ2Ugc28gZmFyLiIgOiAod29yZCsiICIrTWF0aC5hYnMoY2hhbmdlKS50b0ZpeGVkKDEpKyIga2cgc2luY2UgeW91ciBmaXJzdCBlbnRyeS4iKTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZ3J0LWNhcmQiPjxoNT5XZWlnaHQ8L2g1PjxwIGNsYXNzPSJncnQtY2FyZGhpbnQiPicrZXNjKGhpbnQpKycgV2VpZ2h0IGNoYW5nZSBkdXJpbmcgYSByZXNldCBpcyB3b3J0aCBkaXNjdXNzaW5nIHdpdGggeW91ciB2ZXQgaWYgaXQgd2Fzblx1MjAxOXQgdGhlIGdvYWwuPC9wPicrcysnPC9kaXY+JzsKICB9CgogIC8qIC0tLS0tLS0tLS0gcmVuZGVyICsgdGFicyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHNldEhUTUwoaWQsIGh0bWwpewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgaWYoZWwpeyBlbC5pbm5lckhUTUwgPSBodG1sOyB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJQcm9ncmVzcygpewogICAgRlNDQUxFID0gY2hhcnRTY2FsZSgpOwogICAgc2V0SFRNTCgiZ3J0VmV0U2xvdCIsIHZldENoZWNrKCkpOwogICAgc2V0SFRNTCgiZ3J0SGVyb1Nsb3QiLCBoZXJvSFRNTCgpKTsKICAgIHNldEhUTUwoImdydFVwZ3JhZGVTbG90IiwgdXBncmFkZUhUTUwoKSk7CiAgICBzZXRIVE1MKCJncnRSaW5nU2xvdCIsIHJpbmdIVE1MKCkpOwogICAgc2V0SFRNTCgiZ3J0V2Vla3NTbG90Iiwgd2Vla3NIVE1MKCkpOwogICAgc2V0SFRNTCgiZ3J0Q2hhcnRzU2xvdCIsIHN0b29sQ2hhcnRIVE1MKCkgKyB3ZWVrQmFyc0hUTUwoKSArIHdlaWdodENoYXJ0SFRNTCgpKTsKCiAgICB2YXIgaG0gPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ncnQtaG0iKTsKICAgIGZvcih2YXIgaT0wO2k8aG0ubGVuZ3RoO2krKyl7CiAgICAgIChmdW5jdGlvbihidG4pewogICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCl7CiAgICAgICAgICBzdGF0ZS5oZXJvTW9kZSA9IGJ0bi5nZXRBdHRyaWJ1dGUoImRhdGEtbW9kZSIpOwogICAgICAgICAgc2F2ZSgpOwogICAgICAgICAgcmVuZGVyUHJvZ3Jlc3MoKTsKICAgICAgICB9KTsKICAgICAgfSkoaG1baV0pOwogICAgfQogICAgdmFyIGRpcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRVcERpc21pc3MiKTsKICAgIGlmKGRpcyl7CiAgICAgIGRpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCl7CiAgICAgICAgc3RhdGUudXBncmFkZURpc21pc3NlZCA9IHRydWU7CiAgICAgICAgc2F2ZSgpOwogICAgICAgIHJlbmRlclByb2dyZXNzKCk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2hvd1RhYih3aGljaCl7CiAgICB2YXIgdGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VGFiTG9nIik7CiAgICB2YXIgdHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0VGFiUHJvZyIpOwogICAgdmFyIHZsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydExvZyIpOwogICAgdmFyIHZwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFByb2dyZXNzIik7CiAgICBpZighdGwgfHwgIXRwIHx8ICF2bCB8fCAhdnApeyByZXR1cm47IH0KICAgIHZhciBpc0xvZyA9IHdoaWNoID09PSAibG9nIjsKICAgIHRsLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsIGlzTG9nKTsKICAgIHRwLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsICFpc0xvZyk7CiAgICB0bC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCBpc0xvZyA\/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgdHAuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwgaXNMb2cgPyAiZmFsc2UiIDogInRydWUiKTsKICAgIHZsLmhpZGRlbiA9ICFpc0xvZzsKICAgIHZwLmhpZGRlbiA9IGlzTG9nOwogICAgdGwuYmx1cigpOyB0cC5ibHVyKCk7CiAgICBpZighaXNMb2cpeyByZW5kZXJQcm9ncmVzcygpOyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tIGRhdGEgdG9vbHMgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBleHBvcnRDU1YoKXsKICAgIHZhciByb3dzID0gW1siZGF0ZSIsInJlc2V0X2RheSIsIndlZWsiLCJzdG9vbF9ncmFkZSIsImVuZXJneSIsImFwcGV0aXRlIiwicmVmdXNlZF9tZWFsIiwiZmxhcmVfdXAiLCJvYnNlcnZhdGlvbnMiLCJ3ZWlnaHRfa2ciXV07CiAgICB2YXIga3MgPSBsb2dnZWRLZXlzKCk7CiAgICB2YXIgc2VlbiA9IHt9OwogICAgZm9yKHZhciBpPTA7aTxrcy5sZW5ndGg7aSsrKXsgc2Vlbltrc1tpXV0gPSB0cnVlOyB9CiAgICBmb3IodmFyIHdrIGluIHN0YXRlLndlaWdodHMpeyBpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUud2VpZ2h0cyx3aykpeyBzZWVuW3drXSA9IHRydWU7IH0gfQogICAgdmFyIGFsbCA9IFtdOwogICAgZm9yKHZhciBzMiBpbiBzZWVuKXsgaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlZW4sczIpKXsgYWxsLnB1c2goczIpOyB9IH0KICAgIGFsbC5zb3J0KCk7CiAgICBmb3IodmFyIGo9MDtqPGFsbC5sZW5ndGg7aisrKXsKICAgICAgdmFyIGsgPSBhbGxbal07CiAgICAgIHZhciBlID0gc3RhdGUuZW50cmllc1trXSB8fCB7fTsKICAgICAgdmFyIGRuID0gZGF5TnVtYmVyKGspOwogICAgICByb3dzLnB1c2goWwogICAgICAgIGssIGRuLCB3ZWVrT2YoZG4pLAogICAgICAgICh0eXBlb2YgZS5zdG9vbCA9PT0gIm51bWJlciIgPyBlLnN0b29sIDogIiIpLAogICAgICAgIGUuZW5lcmd5IHx8ICIiLCBlLmFwcGV0aXRlIHx8ICIiLAogICAgICAgIChlLnJlZnVzZWQgPyAieWVzIiA6IChzdGF0ZS5lbnRyaWVzW2tdID8gIm5vIiA6ICIiKSksCiAgICAgICAgZS5mbGFyZSB8fCAiIiwKICAgICAgICAoZS5mbGFncyAmJiBlLmZsYWdzLmxlbmd0aCA\/IGUuZmxhZ3Muam9pbigiIHwgIikgOiAiIiksCiAgICAgICAgKHN0YXRlLndlaWdodHNba10gIT0gbnVsbCA\/IHN0YXRlLndlaWdodHNba10gOiAiIikKICAgICAgXSk7CiAgICB9CiAgICB2YXIgY3N2ID0gcm93cy5tYXAoZnVuY3Rpb24ocil7CiAgICAgIHJldHVybiByLm1hcChmdW5jdGlvbihjKXsKICAgICAgICB2YXIgdiA9IFN0cmluZyhjKTsKICAgICAgICByZXR1cm4gL1siLFxuXS8udGVzdCh2KSA\/ICciJyt2LnJlcGxhY2UoLyIvZywnIiInKSsnIicgOiB2OwogICAgICB9KS5qb2luKCIsIik7CiAgICB9KS5qb2luKCJcbiIpOwoKICAgIHRyeXsKICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbY3N2XSwge3R5cGU6InRleHQvY3N2O2NoYXJzZXQ9dXRmLTg7In0pOwogICAgICB2YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgIGEuaHJlZiA9IHVybDsKICAgICAgYS5kb3dubG9hZCA9ICJib256YS1ndXQtcmVzZXQtIiArIChzdGF0ZS5kb2dOYW1lID8gc3RhdGUuZG9nTmFtZS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksIi0iKS50b0xvd2VyQ2FzZSgpKyItIiA6ICIiKSArIHRvZGF5S2V5KCkgKyAiLmNzdiI7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGEuY2xpY2soKTsKICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7IH0sIDUwMCk7CiAgICB9Y2F0Y2goZXJyKXsKICAgICAgd2luZG93LnByb21wdCgiQ29weSB5b3VyIGRhdGE6IiwgY3N2KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHN0YXJ0T3ZlcigpewogICAgdmFyIG9rID0gd2luZG93LmNvbmZpcm0oIlRoaXMgY2xlYXJzIGV2ZXJ5IGxvZ2dlZCBkYXkgZnJvbSB0aGlzIGJyb3dzZXIgYW5kIGNhbm5vdCBiZSB1bmRvbmUuIERvd25sb2FkIHlvdXIgQ1NWIGZpcnN0IGlmIHlvdSB3YW50IHRvIGtlZXAgaXQuXG5cblN0YXJ0IG92ZXI\/Iik7CiAgICBpZighb2speyByZXR1cm47IH0KICAgIHRyeXsgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKENGRy5ucyk7IH1jYXRjaChlKXt9CiAgICBtZW0gPSBudWxsOwogICAgc3RhdGUgPSBudWxsOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEFwcCIpLmhpZGRlbiA9IHRydWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0R2F0ZSIpLmhpZGRlbiA9IGZhbHNlOwogICAgdmFyIGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEVtYWlsIik7CiAgICBpZihlbSl7IGVtLnZhbHVlID0gIiI7IH0KICB9CgogIC8qIC0tLS0tLS0tLS0gYm9vdCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIG9wZW5BcHAoKXsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRHYXRlIikuaGlkZGVuID0gdHJ1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRBcHAiKS5oaWRkZW4gPSBmYWxzZTsKICAgIGlmKCFzdGF0ZS5zdGFydERhdGUpeyBzdGF0ZS5zdGFydERhdGUgPSB0b2RheUtleSgpOyBzYXZlKCk7IH0KICAgIGlmKGRheXNCZXR3ZWVuKHN0YXRlLnN0YXJ0RGF0ZSwgdG9kYXlLZXkoKSkgPCAwKXsgc3RhdGUuc3RhcnREYXRlID0gdG9kYXlLZXkoKTsgc2F2ZSgpOyB9CiAgICBidWlsZERheVNlbGVjdCgpOwogICAgbG9hZERyYWZ0Rm9yKHNlbGVjdGVkRGF5KCkpOwogICAgc2hvd1RhYigibG9nIik7CiAgfQoKICBmdW5jdGlvbiB3aXJlKCl7CiAgICBpbml0R2F0ZSgpOwogICAgYWRvcHRJMThuKCk7CiAgICBidWlsZEdyYWRlcygpOwogICAgYnVpbGRDaG9pY2UoImdydEVuZXJneSIsIEVORVJHWSwgImVuZXJneSIpOwogICAgYnVpbGRDaG9pY2UoImdydEFwcGV0aXRlIiwgQVBQRVRJVEUsICJhcHBldGl0ZSIpOwogICAgYnVpbGRDaG9pY2UoImdydEZsYXJlIiwgRkxBUkUsICJmbGFyZSIpOwogICAgYnVpbGRGbGFncygpOwoKICAgIHZhciByZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0UmVmdXNlZCIpOwogICAgaWYocmVmKXsKICAgICAgcmVmLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsKICAgICAgICBkcmFmdC5yZWZ1c2VkID0gIWRyYWZ0LnJlZnVzZWQ7CiAgICAgICAgcmVmLmNsYXNzTGlzdC50b2dnbGUoImlzLXNlbCIsIGRyYWZ0LnJlZnVzZWQpOwogICAgICAgIHJlZi5ibHVyKCk7CiAgICAgIH0pOwogICAgfQogICAgdmFyIHcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0V2VpZ2h0Iik7CiAgICBpZih3KXsgdy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uKCl7IGRyYWZ0LndlaWdodCA9IHcudmFsdWU7IH0pOyB9CgogICAgdmFyIHNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnREYXlTZWwiKTsKICAgIGlmKHNlbCl7IHNlbC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbigpeyBsb2FkRHJhZnRGb3Ioc2VsLnZhbHVlKTsgc2VsLmJsdXIoKTsgfSk7IH0KCiAgICB2YXIgc3YgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3J0U2F2ZSIpOwogICAgaWYoc3YpeyBzdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHNhdmVEYXkpOyB9CgogICAgdmFyIHRsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFRhYkxvZyIpOwogICAgdmFyIHRwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFRhYlByb2ciKTsKICAgIGlmKHRsKXsgdGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpeyBzaG93VGFiKCJsb2ciKTsgfSk7IH0KICAgIGlmKHRwKXsgdHAuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpeyBzaG93VGFiKCJwcm9nIik7IH0pOyB9CgogICAgdmFyIGV4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydEV4cG9ydCIpOwogICAgaWYoZXgpeyBleC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGV4cG9ydENTVik7IH0KICAgIHZhciBycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncnRSZXNldCIpOwogICAgaWYocnMpeyBycy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHN0YXJ0T3Zlcik7IH0KCiAgICBkcmFmdCA9IG5ld0RyYWZ0KCk7CgogICAgdmFyIHJ6VGltZXIgPSBudWxsOwogICAgdHJ5ewogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgZnVuY3Rpb24oKXsKICAgICAgICBpZihyelRpbWVyKXsgY2xlYXJUaW1lb3V0KHJ6VGltZXIpOyB9CiAgICAgICAgcnpUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgIHRyeXsKICAgICAgICAgICAgdmFyIHZwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdydFByb2dyZXNzIik7CiAgICAgICAgICAgIGlmKHN0YXRlICYmIHZwICYmICF2cC5oaWRkZW4peyByZW5kZXJQcm9ncmVzcygpOyB9CiAgICAgICAgICB9Y2F0Y2goZSl7fQogICAgICAgIH0sIDI1MCk7CiAgICAgIH0pOwogICAgfWNhdGNoKGUpe30KCiAgICBzdG9yYWdlT0sgPSB0ZXN0U3RvcmFnZSgpOwogICAgaWYoIXN0b3JhZ2VPSyl7IHNob3dTdG9yYWdlV2FybigpOyB9CgogICAgdmFyIHNhdmVkID0gbG9hZCgpOwogICAgaWYoc2F2ZWQgJiYgc2F2ZWQuZW1haWwpewogICAgICBzdGF0ZSA9IHNhdmVkOwogICAgICBpZighc3RhdGUuZW50cmllcyl7IHN0YXRlLmVudHJpZXMgPSB7fTsgfQogICAgICBpZighc3RhdGUud2VpZ2h0cyl7IHN0YXRlLndlaWdodHMgPSB7fTsgfQogICAgICBpZighc3RhdGUuaGVyb01vZGUpeyBzdGF0ZS5oZXJvTW9kZSA9ICJiYXNlbGluZSI7IH0KICAgICAgb3BlbkFwcCgpOwogICAgICBpZighc3RhdGUuc3Vic2NyaWJlZCl7IGtsYXZpeW9TdWJzY3JpYmUoc3RhdGUuZW1haWwsIHN0YXRlLmRvZ05hbWUpOyB9CiAgICB9CiAgfQoKICBpZihkb2N1bWVudC5yZWFkeVN0YXRlID09PSAibG9hZGluZyIpewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIHdpcmUpOwogIH0gZWxzZSB7CiAgICB3aXJlKCk7CiAgfQoKfSkoKTs=\" data-no-optimize=\"1\" data-no-minify=\"1\" data-no-defer=\"1\" data-cfasync=\"false\"><\/script>\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n<h3 class=\"wp-block-heading\" id=\"h-how-the-tracker-works\">C\u00f3mo funciona el rastreador<\/h3>\n\n<p class=\"wp-block-paragraph\">Cada d\u00eda anotas cuatro cosas: una <strong>puntuaci\u00f3n de las heces<\/strong> en la misma escala de siete puntos que la <a href=\"https:\/\/bonza-retheme.blz.au\/es\/tabla-de-caca-de-perro\/\">\u00abTabla de caca de perro\u00bb<\/a>, <strong>la energ\u00eda<\/strong> de tu perro, su <strong>apetito<\/strong> y si ese d\u00eda ha habido alg\u00fan <strong>brote<\/strong> \u2014v\u00f3mitos, urgencia, esfuerzo al defecar, accidentes o malestar evidente\u2014. El peso es opcional, y con una vez a la semana basta. Ese es todo el compromiso diario, y es deliberadamente peque\u00f1o: un registro que realmente termines es mejor que uno detallado que acabes abandonando en la segunda semana.  <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Los treinta d\u00edas se agrupan en las cuatro semanas del proceso de reinicio \u2014auditar y eliminar, introducir el apoyo, observar y ajustar, establecer una nueva referencia\u2014 para que la herramienta siga el protocolo de la gu\u00eda. En la segunda semana es cuando se introduce el apoyo, lo que normalmente significa un suplemento que cubra los tres niveles bi\u00f3ticos: prebi\u00f3tico, probi\u00f3tico y postbi\u00f3tico, ya sean <a href=\"https:\/\/bonza-retheme.blz.au\/es\/suplemento-golosinas-masticables-perros\/\">los suplementos funcionales de Bonza<\/a> o una f\u00f3rmula completa similar. Y si te saltas un d\u00eda, puedes volver atr\u00e1s y completar cualquiera de los \u00faltimos siete d\u00edas en lugar de perder el hilo.  <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-what-the-good-days-number-means\">Qu\u00e9 significa el \u00abn\u00famero de d\u00edas buenos\u00bb<\/h3>\n\n<p class=\"wp-block-paragraph\">La cifra m\u00e1s importante son <strong>los \u00abd\u00edas buenos\u00bb<\/strong> de tu perro: el porcentaje de los d\u00edas que has registrado en los que sus heces se situaron dentro del rango saludable, es decir, en los grados 2 y 3. Es una cifra que responde a la pregunta que realmente te preocupa como due\u00f1o: \u00bfesto est\u00e1 funcionando? <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Puedes interpretarlo de dos maneras. <strong>\u00abEn comparaci\u00f3n con tu primera semana<\/strong> \u00bb compara tus \u00faltimos siete d\u00edas con la semana de referencia que registraste al principio, que es la comparaci\u00f3n en la que se basa el protocolo de la gu\u00eda. <strong>La comparaci\u00f3n con tus \u00faltimos siete d\u00edas<\/strong> ofrece una visi\u00f3n m\u00e1s breve y precisa, \u00fatil cuando acabas de cambiar algo y quieres saber si ha surtido efecto. Ninguna de las dos opciones aparece hasta que hayas registrado siete d\u00edas, porque antes no hay datos suficientes para hablar de una tendencia \u2014y un registro que te halague en la primera semana es peor que in\u00fatil. <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-why-week-one-matters-most\">Por qu\u00e9 la primera semana es la m\u00e1s importante<\/h3>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">La primera semana es tu punto de referencia. Todo lo que te diga el registro a partir de ah\u00ed se comparar\u00e1 con ella, as\u00ed que an\u00f3talo con sinceridad en lugar de ser optimista, incluyendo los d\u00edas malos, sobre todo los d\u00edas malos. Los usuarios suelen recordar mal lo duro que fue el punto de partida, y precisamente por eso es mejor anotarlo que intentar recordarlo. Una primera semana mala no es un fracaso. Es lo que te permite ver la mejora cuando llega. La primera semana es tambi\u00e9n cuando la gu\u00eda te pide que hagas el trabajo de verdad: revisar la alimentaci\u00f3n, eliminar lo que perjudica al microbioma y anotar cu\u00e1l es tu punto de partida en los doce indicadores. Si a\u00fan no la has le\u00eddo, el registro tiene mucho m\u00e1s sentido si lo acompa\u00f1as de <a href=\"https:\/\/bonza-retheme.blz.au\/es\/144214-2\/\" data-type=\"link\" data-id=\"https:\/\/bonza-retheme.blz.au\/free-gut-health-guide\/\">\u00abLa gu\u00eda completa de salud intestinal para due\u00f1os de perros<\/a>\u00bb.      <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-when-it-is-time-to-call-the-vet\">Cu\u00e1ndo hay que llamar al veterinario<\/h3>\n\n<p class=\"wp-block-paragraph\">La app se detiene autom\u00e1ticamente si registras algo que requiere la intervenci\u00f3n de un profesional en lugar de m\u00e1s datos: <strong>heces negras o alquitranadas<\/strong>, <strong>sangre fresca o vetas rojas<\/strong>, <strong>heces p\u00e1lidas, grises o de color arcilla<\/strong>, <strong>gusanos visibles<\/strong> o <strong>mucha mucosidad<\/strong>. Tambi\u00e9n te avisar\u00e1 si tienes una racha persistente de d\u00edas con heces acuosas, ya que la deshidrataci\u00f3n se produce r\u00e1pidamente en cachorros y en perros peque\u00f1os o mayores. Cuando eso ocurre, la herramienta deja de lado la tendencia y te dice que llames a tu veterinario, que es lo que hay que hacer.  <\/p>\n\n<p class=\"wp-block-paragraph\" id=\"h-\">Aparte de esas se\u00f1ales, f\u00edate de tu criterio y de lo que sabes de tu perro. Un rastreador solo registra lo que t\u00fa observas; no puede examinar a nadie. Si tu perro parece estar mal o hay algo que no te cuadra, pide cita y ll\u00e9vate tus registros: un mes de anotaciones diarias le resulta de gran ayuda al veterinario, y puedes descargarlo todo en forma de hoja de c\u00e1lculo directamente desde la herramienta.  <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"h-frequently-asked-questions\">Preguntas frecuentes<\/h3>\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1785156667151\"><strong class=\"schema-faq-question\"><strong>\u00bfEs gratis?<\/strong><\/strong> <p class=\"schema-faq-answer\">S\u00ed, y seguir\u00e1 siendo gratis. Solo te pedimos tu correo electr\u00f3nico una vez, cuando abras la aplicaci\u00f3n, y a partir de ah\u00ed podr\u00e1s usarla sin l\u00edmites: sin restricciones, sin periodo de prueba, sin nada que te lo impida. El correo electr\u00f3nico nos sirve para enviarte la gu\u00eda sobre salud intestinal y avisarte cuando salga la versi\u00f3n para cuentas.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156708442\"><strong class=\"schema-faq-question\"><strong>\u00bfCu\u00e1nto tiempo te lleva cada d\u00eda?<\/strong><\/strong> <p class=\"schema-faq-answer\">Unos veinte segundos. Cuatro toques, m\u00e1s un peso una vez a la semana si quieres llevar un registro. Se ha hecho a prop\u00f3sito que sea breve, porque una aplicaci\u00f3n de seguimiento solo sirve de algo si completas los treinta d\u00edas.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156772064\"><strong class=\"schema-faq-question\"><strong>\u00bfQu\u00e9 se considera un \u00abbuen d\u00eda\u00bb?<\/strong><\/strong> <p class=\"schema-faq-answer\">Un d\u00eda en el que las heces de tu perro hayan obtenido una puntuaci\u00f3n de 2 o 3 en la escala de siete puntos: firmes y segmentadas, o bien un trozo h\u00famedo y bien formado. Esos dos niveles se encuentran dentro del rango saludable, y el nivel 2 es el ideal. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156805344\"><strong class=\"schema-faq-question\"><strong>Me he saltado un d\u00eda. \u00bfLo he echado a perder? <\/strong><\/strong> <p class=\"schema-faq-answer\">No. Puedes volver atr\u00e1s y completar cualquiera de los \u00faltimos siete d\u00edas, y los porcentajes se calculan a partir de los d\u00edas que has registrado, no del calendario. Si te saltas alg\u00fan d\u00eda, solo pierdes un poco de precisi\u00f3n, nada m\u00e1s.  <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156830121\"><strong class=\"schema-faq-question\"><strong>\u00bfD\u00f3nde se guardan mis datos?<\/strong><\/strong> <p class=\"schema-faq-answer\">En tu navegador, en el dispositivo que est\u00e9s usando. Bonza no recibe los registros de tu perro. Eso tambi\u00e9n significa que tu historial est\u00e1 vinculado a ese navegador concreto: si borras los datos de navegaci\u00f3n o cambias del port\u00e1til al m\u00f3vil, no te seguir\u00e1. Puedes descargarlo todo en forma de hoja de c\u00e1lculo en cualquier momento, y estamos desarrollando una versi\u00f3n basada en la cuenta que lo mantiene a salvo y sincronizado.   <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156870202\"><strong class=\"schema-faq-question\"><strong>\u00bfPuedo rastrear a m\u00e1s de un perro?<\/strong><\/strong> <p class=\"schema-faq-answer\">En esta versi\u00f3n no \u2014 solo guarda el historial de un perro por navegador. En la versi\u00f3n basada en cuenta, la lista incluye varios perros. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156892999\"><strong class=\"schema-faq-question\"><strong>\u00bfTengo que pesar a mi perro?<\/strong><\/strong> <p class=\"schema-faq-answer\">No, el peso es opcional. Si decides medirlo, hacerlo una vez a la semana en la misma b\u00e1scula y m\u00e1s o menos a la misma hora del d\u00eda te da mucha m\u00e1s informaci\u00f3n que las lecturas diarias, que sobre todo reflejan lo que el perro ha comido y bebido, en lugar de una tendencia real. <\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1785156939494\"><strong class=\"schema-faq-question\"><strong>Las cifras est\u00e1n empeorando. \u00bfQu\u00e9 deber\u00eda hacer? <\/strong><\/strong> <p class=\"schema-faq-answer\">Primero, comprueba si ha cambiado algo: la comida, las golosinas, la rutina o alg\u00fan suplemento que hayas empezado a darle demasiado pronto. Es normal que haya unos d\u00edas de malestar durante la segunda semana, mientras el microbioma se adapta. Pero si la tendencia sigue yendo por mal camino, o si ves alguno de los signos de alerta que he mencionado antes, lo mejor es que hables con tu veterinario en lugar de seguir observando c\u00f3mo evoluciona.  <\/p> <\/div> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Registro de 30 d\u00edas para reequilibrar la flora intestinal \u00bfDe verdad est\u00e1 funcionando el cambio que has hecho? Treinta d\u00edas es tiempo suficiente para que el intestino de un perro responda, y demasiado tiempo para recordarlo todo con precisi\u00f3n. Este registro de 30 d\u00edas para el reinicio intestinal convierte el protocolo de reinicio de la [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":144158,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","inline_featured_image":false,"footnotes":""},"class_list":["post-144165","page","type-page","status-publish","has-post-thumbnail","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Registro de 30 d\u00edas para restablecer la salud intestinal | Lleva un seguimiento diario de la salud intestinal de tu perro Registro de 30 d\u00edas para reequilibrar la flora intestinal - Bonza<\/title>\n<meta name=\"description\" content=\"Herramienta gratuita para llevar un seguimiento de la salud intestinal de tu perro durante 30 d\u00edas: anota a diario las heces, la energ\u00eda, el apetito y los brotes, y comprueba si los d\u00edas buenos de tu perro van en aumento. Es solo informativo, no es un diagn\u00f3stico.\" \/>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Registro de 30 d\u00edas para reequilibrar la flora intestinal\" \/>\n<meta property=\"og:description\" content=\"Herramienta gratuita para llevar un seguimiento de la salud intestinal de tu perro durante 30 d\u00edas: anota a diario las heces, la energ\u00eda, el apetito y los brotes, y comprueba si los d\u00edas buenos de tu perro van en aumento. Es solo informativo, no es un diagn\u00f3stico.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/\" \/>\n<meta property=\"og:site_name\" content=\"Bonza\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/bonzadogfoods\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T08:52:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1100\" \/>\n\t<meta property=\"og:image:height\" content=\"619\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"WebPage\",\"FAQPage\"],\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/\",\"name\":\"Registro de 30 d\u00edas para restablecer la salud intestinal | Lleva un seguimiento diario de la salud intestinal de tu perro Registro de 30 d\u00edas para reequilibrar la flora intestinal - Bonza\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"datePublished\":\"2026-07-27T13:21:52+00:00\",\"dateModified\":\"2026-07-31T08:52:40+00:00\",\"description\":\"Herramienta gratuita para llevar un seguimiento de la salud intestinal de tu perro durante 30 d\u00edas: anota a diario las heces, la energ\u00eda, el apetito y los brotes, y comprueba si los d\u00edas buenos de tu perro van en aumento. Es solo informativo, no es un diagn\u00f3stico.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#breadcrumb\"},\"mainEntity\":[{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156667151\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156708442\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156772064\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156805344\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156830121\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156870202\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156892999\"},{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156939494\"}],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"contentUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp\",\"width\":1100,\"height\":619,\"caption\":\"Un due\u00f1o de perro que anota a diario c\u00f3mo va la salud intestinal de su perro en el registro de Bonza para el reinicio intestinal de 30 d\u00edas\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Registro de 30 d\u00edas para reequilibrar la flora intestinal\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/\",\"name\":\"Bonza\",\"description\":\"Add Years to Your Dog&#039;s Life and Life to Their Years\",\"publisher\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/#organization\",\"name\":\"Happea Chappea Limited\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png\",\"contentUrl\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/wp-content\\\/uploads\\\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png\",\"width\":512,\"height\":512,\"caption\":\"Happea Chappea Limited\"},\"image\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/bonzadogfoods\",\"https:\\\/\\\/www.instagram.com\\\/bonzadogfoods\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@bonzadogfoods\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/bonzadogfoods\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@bonzadogfoods\\\/\",\"https:\\\/\\\/www.feefo.com\\\/en-GB\\\/reviews\\\/bonza-dog\",\"https:\\\/\\\/find-and-update.company-information.service.gov.uk\\\/company\\\/10873244\"],\"description\":\"Bonza is a UK plant-based dog food and supplement brand built on a gut-first approach to canine nutrition: plant-based by consequence, not by trend. Its range comprises one complete food, Superfoods and Ancient Grains, and seven targeted Bioactive Bites supplements. Every Bonza product supports the canine gut microbiome through the Biotics Triad of prebiotics, probiotics and postbiotics, and the eight gut-organ axes that connect the gut to the skin, joints, immunity, behaviour, heart, metabolism, liver and longevity, favouring fibre diversity over fibre quantity. The range is formulated in-house by founder Glendon Lloyd, who holds a Diploma in Canine Nutrition and a Diploma in Dog Nutrigenomics, both with Distinction, alongside a board of canine veterinary nutritionists. One Gut. Whole Dog.\",\"email\":\"whistle@bonza.dog\",\"telephone\":\"01453709677\",\"legalName\":\"Happea Chappea Limited\",\"foundingDate\":\"2017-07-19\",\"vatID\":\"GB499631826\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1\",\"maxValue\":\"10\"},\"founder\":{\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/#\\\/schema\\\/person\\\/b7a7255205fb41a6ac38fdbc8e19f5f3\"}},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156667151\",\"position\":1,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156667151\",\"name\":\"\u00bfEs gratis?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed, y seguir\u00e1 siendo gratis. Solo te pedimos tu correo electr\u00f3nico una vez, cuando abras la aplicaci\u00f3n, y a partir de ah\u00ed podr\u00e1s usarla sin l\u00edmites: sin restricciones, sin periodo de prueba, sin nada que te lo impida. El correo electr\u00f3nico nos sirve para enviarte la gu\u00eda sobre salud intestinal y avisarte cuando salga la versi\u00f3n para cuentas.  \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156708442\",\"position\":2,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156708442\",\"name\":\"\u00bfCu\u00e1nto tiempo te lleva cada d\u00eda?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Unos veinte segundos. Cuatro toques, m\u00e1s un peso una vez a la semana si quieres llevar un registro. Se ha hecho a prop\u00f3sito que sea breve, porque una aplicaci\u00f3n de seguimiento solo sirve de algo si completas los treinta d\u00edas.  \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156772064\",\"position\":3,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156772064\",\"name\":\"\u00bfQu\u00e9 se considera un \u00abbuen d\u00eda\u00bb?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Un d\u00eda en el que las heces de tu perro hayan obtenido una puntuaci\u00f3n de 2 o 3 en la escala de siete puntos: firmes y segmentadas, o bien un trozo h\u00famedo y bien formado. Esos dos niveles se encuentran dentro del rango saludable, y el nivel 2 es el ideal. \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156805344\",\"position\":4,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156805344\",\"name\":\"Me he saltado un d\u00eda. \u00bfLo he echado a perder?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. Puedes volver atr\u00e1s y completar cualquiera de los \u00faltimos siete d\u00edas, y los porcentajes se calculan a partir de los d\u00edas que has registrado, no del calendario. Si te saltas alg\u00fan d\u00eda, solo pierdes un poco de precisi\u00f3n, nada m\u00e1s.  \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156830121\",\"position\":5,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156830121\",\"name\":\"\u00bfD\u00f3nde se guardan mis datos?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"En tu navegador, en el dispositivo que est\u00e9s usando. Bonza no recibe los registros de tu perro. Eso tambi\u00e9n significa que tu historial est\u00e1 vinculado a ese navegador concreto: si borras los datos de navegaci\u00f3n o cambias del port\u00e1til al m\u00f3vil, no te seguir\u00e1. Puedes descargarlo todo en forma de hoja de c\u00e1lculo en cualquier momento, y estamos desarrollando una versi\u00f3n basada en la cuenta que lo mantiene a salvo y sincronizado.   \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156870202\",\"position\":6,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156870202\",\"name\":\"\u00bfPuedo rastrear a m\u00e1s de un perro?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"En esta versi\u00f3n no \u2014 solo guarda el historial de un perro por navegador. En la versi\u00f3n basada en cuenta, la lista incluye varios perros. \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156892999\",\"position\":7,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156892999\",\"name\":\"\u00bfTengo que pesar a mi perro?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No, el peso es opcional. Si decides medirlo, hacerlo una vez a la semana en la misma b\u00e1scula y m\u00e1s o menos a la misma hora del d\u00eda te da mucha m\u00e1s informaci\u00f3n que las lecturas diarias, que sobre todo reflejan lo que el perro ha comido y bebido, en lugar de una tendencia real. \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"},{\"@type\":\"Question\",\"@id\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156939494\",\"position\":8,\"url\":\"https:\\\/\\\/bonza-retheme.blz.au\\\/es\\\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\\\/#faq-question-1785156939494\",\"name\":\"Las cifras est\u00e1n empeorando. \u00bfQu\u00e9 deber\u00eda hacer?\",\"answerCount\":1,\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Primero, comprueba si ha cambiado algo: la comida, las golosinas, la rutina o alg\u00fan suplemento que hayas empezado a darle demasiado pronto. Es normal que haya unos d\u00edas de malestar durante la segunda semana, mientras el microbioma se adapta. Pero si la tendencia sigue yendo por mal camino, o si ves alguno de los signos de alerta que he mencionado antes, lo mejor es que hables con tu veterinario en lugar de seguir observando c\u00f3mo evoluciona.  \",\"inLanguage\":\"es\"},\"inLanguage\":\"es\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Registro de 30 d\u00edas para restablecer la salud intestinal | Lleva un seguimiento diario de la salud intestinal de tu perro Registro de 30 d\u00edas para reequilibrar la flora intestinal - Bonza","description":"Herramienta gratuita para llevar un seguimiento de la salud intestinal de tu perro durante 30 d\u00edas: anota a diario las heces, la energ\u00eda, el apetito y los brotes, y comprueba si los d\u00edas buenos de tu perro van en aumento. Es solo informativo, no es un diagn\u00f3stico.","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"es_ES","og_type":"article","og_title":"Registro de 30 d\u00edas para reequilibrar la flora intestinal","og_description":"Herramienta gratuita para llevar un seguimiento de la salud intestinal de tu perro durante 30 d\u00edas: anota a diario las heces, la energ\u00eda, el apetito y los brotes, y comprueba si los d\u00edas buenos de tu perro van en aumento. Es solo informativo, no es un diagn\u00f3stico.","og_url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/","og_site_name":"Bonza","article_publisher":"https:\/\/www.facebook.com\/bonzadogfoods","article_modified_time":"2026-07-31T08:52:40+00:00","og_image":[{"width":1100,"height":619,"url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["WebPage","FAQPage"],"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/","url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/","name":"Registro de 30 d\u00edas para restablecer la salud intestinal | Lleva un seguimiento diario de la salud intestinal de tu perro Registro de 30 d\u00edas para reequilibrar la flora intestinal - Bonza","isPartOf":{"@id":"https:\/\/bonza-retheme.blz.au\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#primaryimage"},"image":{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#primaryimage"},"thumbnailUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","datePublished":"2026-07-27T13:21:52+00:00","dateModified":"2026-07-31T08:52:40+00:00","description":"Herramienta gratuita para llevar un seguimiento de la salud intestinal de tu perro durante 30 d\u00edas: anota a diario las heces, la energ\u00eda, el apetito y los brotes, y comprueba si los d\u00edas buenos de tu perro van en aumento. Es solo informativo, no es un diagn\u00f3stico.","breadcrumb":{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#breadcrumb"},"mainEntity":[{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156667151"},{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156708442"},{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156772064"},{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156805344"},{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156830121"},{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156870202"},{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156892999"},{"@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156939494"}],"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#primaryimage","url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","contentUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker.webp","width":1100,"height":619,"caption":"Un due\u00f1o de perro que anota a diario c\u00f3mo va la salud intestinal de su perro en el registro de Bonza para el reinicio intestinal de 30 d\u00edas"},{"@type":"BreadcrumbList","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bonza-retheme.blz.au\/es\/"},{"@type":"ListItem","position":2,"name":"Registro de 30 d\u00edas para reequilibrar la flora intestinal"}]},{"@type":"WebSite","@id":"https:\/\/bonza-retheme.blz.au\/es\/#website","url":"https:\/\/bonza-retheme.blz.au\/es\/","name":"Bonza","description":"Add Years to Your Dog&#039;s Life and Life to Their Years","publisher":{"@id":"https:\/\/bonza-retheme.blz.au\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bonza-retheme.blz.au\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/bonza-retheme.blz.au\/es\/#organization","name":"Happea Chappea Limited","url":"https:\/\/bonza-retheme.blz.au\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/bonza-retheme.blz.au\/es\/#\/schema\/logo\/image\/","url":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png","contentUrl":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/cropped-Favicon512-Bonza-Best-Super-Premium-Plant-based-Vegan-Vegetarian-Healthy-Dry-Dog-Food-Online-Subscri.png","width":512,"height":512,"caption":"Happea Chappea Limited"},"image":{"@id":"https:\/\/bonza-retheme.blz.au\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/bonzadogfoods","https:\/\/www.instagram.com\/bonzadogfoods\/","https:\/\/www.tiktok.com\/@bonzadogfoods","https:\/\/www.linkedin.com\/company\/bonzadogfoods\/","https:\/\/www.youtube.com\/@bonzadogfoods\/","https:\/\/www.feefo.com\/en-GB\/reviews\/bonza-dog","https:\/\/find-and-update.company-information.service.gov.uk\/company\/10873244"],"description":"Bonza is a UK plant-based dog food and supplement brand built on a gut-first approach to canine nutrition: plant-based by consequence, not by trend. Its range comprises one complete food, Superfoods and Ancient Grains, and seven targeted Bioactive Bites supplements. Every Bonza product supports the canine gut microbiome through the Biotics Triad of prebiotics, probiotics and postbiotics, and the eight gut-organ axes that connect the gut to the skin, joints, immunity, behaviour, heart, metabolism, liver and longevity, favouring fibre diversity over fibre quantity. The range is formulated in-house by founder Glendon Lloyd, who holds a Diploma in Canine Nutrition and a Diploma in Dog Nutrigenomics, both with Distinction, alongside a board of canine veterinary nutritionists. One Gut. Whole Dog.","email":"whistle@bonza.dog","telephone":"01453709677","legalName":"Happea Chappea Limited","foundingDate":"2017-07-19","vatID":"GB499631826","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1","maxValue":"10"},"founder":{"@id":"https:\/\/bonza-retheme.blz.au\/es\/#\/schema\/person\/b7a7255205fb41a6ac38fdbc8e19f5f3"}},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156667151","position":1,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156667151","name":"\u00bfEs gratis?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"S\u00ed, y seguir\u00e1 siendo gratis. Solo te pedimos tu correo electr\u00f3nico una vez, cuando abras la aplicaci\u00f3n, y a partir de ah\u00ed podr\u00e1s usarla sin l\u00edmites: sin restricciones, sin periodo de prueba, sin nada que te lo impida. El correo electr\u00f3nico nos sirve para enviarte la gu\u00eda sobre salud intestinal y avisarte cuando salga la versi\u00f3n para cuentas.  ","inLanguage":"es"},"inLanguage":"es"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156708442","position":2,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156708442","name":"\u00bfCu\u00e1nto tiempo te lleva cada d\u00eda?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Unos veinte segundos. Cuatro toques, m\u00e1s un peso una vez a la semana si quieres llevar un registro. Se ha hecho a prop\u00f3sito que sea breve, porque una aplicaci\u00f3n de seguimiento solo sirve de algo si completas los treinta d\u00edas.  ","inLanguage":"es"},"inLanguage":"es"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156772064","position":3,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156772064","name":"\u00bfQu\u00e9 se considera un \u00abbuen d\u00eda\u00bb?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Un d\u00eda en el que las heces de tu perro hayan obtenido una puntuaci\u00f3n de 2 o 3 en la escala de siete puntos: firmes y segmentadas, o bien un trozo h\u00famedo y bien formado. Esos dos niveles se encuentran dentro del rango saludable, y el nivel 2 es el ideal. ","inLanguage":"es"},"inLanguage":"es"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156805344","position":4,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156805344","name":"Me he saltado un d\u00eda. \u00bfLo he echado a perder?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"No. Puedes volver atr\u00e1s y completar cualquiera de los \u00faltimos siete d\u00edas, y los porcentajes se calculan a partir de los d\u00edas que has registrado, no del calendario. Si te saltas alg\u00fan d\u00eda, solo pierdes un poco de precisi\u00f3n, nada m\u00e1s.  ","inLanguage":"es"},"inLanguage":"es"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156830121","position":5,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156830121","name":"\u00bfD\u00f3nde se guardan mis datos?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"En tu navegador, en el dispositivo que est\u00e9s usando. Bonza no recibe los registros de tu perro. Eso tambi\u00e9n significa que tu historial est\u00e1 vinculado a ese navegador concreto: si borras los datos de navegaci\u00f3n o cambias del port\u00e1til al m\u00f3vil, no te seguir\u00e1. Puedes descargarlo todo en forma de hoja de c\u00e1lculo en cualquier momento, y estamos desarrollando una versi\u00f3n basada en la cuenta que lo mantiene a salvo y sincronizado.   ","inLanguage":"es"},"inLanguage":"es"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156870202","position":6,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156870202","name":"\u00bfPuedo rastrear a m\u00e1s de un perro?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"En esta versi\u00f3n no \u2014 solo guarda el historial de un perro por navegador. En la versi\u00f3n basada en cuenta, la lista incluye varios perros. ","inLanguage":"es"},"inLanguage":"es"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156892999","position":7,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156892999","name":"\u00bfTengo que pesar a mi perro?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"No, el peso es opcional. Si decides medirlo, hacerlo una vez a la semana en la misma b\u00e1scula y m\u00e1s o menos a la misma hora del d\u00eda te da mucha m\u00e1s informaci\u00f3n que las lecturas diarias, que sobre todo reflejan lo que el perro ha comido y bebido, en lugar de una tendencia real. ","inLanguage":"es"},"inLanguage":"es"},{"@type":"Question","@id":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156939494","position":8,"url":"https:\/\/bonza-retheme.blz.au\/es\/registro-de-30-dias-para-reequilibrar-la-flora-intestinal\/#faq-question-1785156939494","name":"Las cifras est\u00e1n empeorando. \u00bfQu\u00e9 deber\u00eda hacer?","answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"Primero, comprueba si ha cambiado algo: la comida, las golosinas, la rutina o alg\u00fan suplemento que hayas empezado a darle demasiado pronto. Es normal que haya unos d\u00edas de malestar durante la segunda semana, mientras el microbioma se adapta. Pero si la tendencia sigue yendo por mal camino, o si ves alguno de los signos de alerta que he mencionado antes, lo mejor es que hables con tu veterinario en lugar de seguir observando c\u00f3mo evoluciona.  ","inLanguage":"es"},"inLanguage":"es"}]}},"featured_image_src":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker-600x400.webp","featured_image_src_square":"https:\/\/bonza-retheme.blz.au\/wp-content\/uploads\/dog-owner-logging-daily-gut-health-30-day-gut-reset-tracker-600x600.webp","_links":{"self":[{"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/pages\/144165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/comments?post=144165"}],"version-history":[{"count":0,"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/pages\/144165\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/media\/144158"}],"wp:attachment":[{"href":"https:\/\/bonza-retheme.blz.au\/es\/wp-json\/wp\/v2\/media?parent=144165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}