{"id":7523,"date":"2026-07-26T14:30:20","date_gmt":"2026-07-26T14:30:20","guid":{"rendered":"https:\/\/h-in-q.com\/?page_id=7523"},"modified":"2026-07-26T15:49:00","modified_gmt":"2026-07-26T15:49:00","slug":"sample-quota-simulator","status":"publish","type":"page","link":"http:\/\/www.h-in-q.com\/es\/sample-quota-simulator\/","title":{"rendered":"Sample Structure &#038; Quotas Simulator \u2014 Free Tool for Market Research | H-in-Q"},"content":{"rendered":"<div class=\"hin-back-nav\" style=\"font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; padding: 14px 24px 0;\"><a style=\"color: #1d75bc; text-decoration: none; font-weight: 600; font-size: 14px;\" href=\"https:\/\/h-in-q.com\/free-tools\/\">\u2190 Back to Free Tools<\/a><\/div>\n<style> :root{   \/* ---- H-in-Q brand: dominant blue, gray, orange, white \u2014 light tones ---- *\/   --blue:#1b75bc;   --blue-deep:#135a92;   --blue-light:#29abe2;   --blue-pale:#e9f4fb;   --blue-mist:#f3f9fd;   --orange:#f28c1e;   --orange-pale:#fef3e4;   --ink:#22405c;   --ink-dim:#5d7690;   --ink-faint:#8fa3b8;   --bg:#f2f6fa;   --panel:#ffffff;   --line:#d8e3ee;   --line-soft:#e7eef5;   --mono:\"IBM Plex Mono\",\"SFMono-Regular\",ui-monospace,Menlo,Consolas,monospace;   --sans:\"Archivo\",\"Inter\",system-ui,-apple-system,\"Segoe UI\",Roboto,sans-serif; }.hinq-qs * {box-sizing:border-box;margin:0;padding:0}.hinq-qs {   background:var(--bg);color:var(--ink);   font:13.5px\/1.4 var(--sans);-webkit-font-smoothing:antialiased;   display:flex;flex-direction:column;overflow:hidden;   height:85vh;min-height:640px;max-height:920px;   border:1px solid var(--line);border-radius:14px;   margin:0 auto;max-width:1400px;box-shadow:0 4px 24px rgba(27,117,188,.08); }.hinq-qs \/* ---------- header ---------- *\/ header {   flex:0 0 auto;display:flex;align-items:center;gap:12px;   padding:8px 18px;background:var(--panel);border-bottom:2px solid var(--blue); }.hinq-qs .logo {flex:0 0 auto;display:flex;align-items:center}.hinq-qs header h1 {font-size:15px;font-weight:800;letter-spacing:.02em;text-transform:uppercase;color:var(--blue-deep)}.hinq-qs header h1 b {color:var(--orange)}.hinq-qs header .sub {color:var(--ink-dim);font-size:12px;margin-left:auto} @media(max-width:1200px){.hinq-qs header .sub {display:none}}.hinq-qs \/* ---------- 3-zone layout : INPUT | RECAP | OUTPUT ---------- *\/ .app {   flex:1 1 auto;min-height:0;   display:grid;grid-template-columns:322px 292px 1fr;gap:12px;   padding:12px 16px; }.hinq-qs .zone {min-height:0;display:flex;flex-direction:column;gap:10px;overflow-y:auto}.hinq-qs .zone::-webkit-scrollbar {width:8px}.hinq-qs .zone::-webkit-scrollbar-thumb {background:var(--line);border-radius:4px} @media(max-width:1080px){.hinq-qs {overflow:auto;height:auto;max-height:none}.hinq-qs .app {grid-template-columns:1fr;overflow:visible}.hinq-qs .zone {overflow:visible;max-height:60vh} }.hinq-qs .panel {background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 1px 2px rgba(27,117,188,.05)}.hinq-qs .panel .hd {   display:flex;align-items:center;gap:8px;padding:8px 12px;   border-bottom:1px solid var(--line-soft);   font-size:10.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:var(--blue); }.hinq-qs .panel .hd .znum {   background:var(--blue);color:#fff;border-radius:5px;   font:800 10px\/1 var(--mono);padding:4px 6px; }.hinq-qs .panel .hd::after {   content:\"\";width:6px;height:6px;border-radius:2px;   background:var(--orange);margin-left:auto;opacity:.9; }.hinq-qs .panel .bd {padding:10px 12px}.hinq-qs \/* ---------- zone 1 \u00b7 input ---------- *\/ .field {margin-bottom:10px}.hinq-qs .field label {   display:block;font-size:10.5px;font-weight:700;letter-spacing:.07em;   text-transform:uppercase;color:var(--ink-dim);margin-bottom:4px; }.hinq-qs select, .hinq-qs input[type=text], .hinq-qs input[type=number] {   width:100%;background:var(--blue-mist);border:1px solid var(--line);   color:var(--ink);border-radius:6px;padding:6px 8px;font:13px var(--sans);   outline:none;transition:border-color .15s; }.hinq-qs input[type=number] {font-family:var(--mono);font-size:12px}.hinq-qs select:focus, .hinq-qs input:focus {border-color:var(--blue-light);background:#fff}.hinq-qs select:focus-visible, .hinq-qs input:focus-visible, .hinq-qs button:focus-visible {outline:2px solid var(--blue-light);outline-offset:1px}.hinq-qs .row2 {display:grid;grid-template-columns:1fr 1fr;gap:8px}.hinq-qs .methodnote {   border:1px solid var(--line);border-left:3px solid var(--blue-light);   border-radius:6px;background:var(--blue-mist);   padding:7px 10px;font-size:11.5px;color:var(--ink-dim);margin-bottom:10px; }.hinq-qs .methodnote b {color:var(--blue-deep)}.hinq-qs .varblock {   border:1px solid var(--line);border-radius:8px;background:var(--blue-mist);   padding:8px;margin-bottom:8px; }.hinq-qs .varblock .vtop {display:grid;grid-template-columns:1fr 84px;gap:6px;margin-bottom:6px}.hinq-qs .classrow {display:grid;grid-template-columns:1fr 68px;gap:6px;margin-bottom:5px}.hinq-qs .classrow input {background:#fff}.hinq-qs .classrow input[type=number] {text-align:right}.hinq-qs .wsum {   display:flex;justify-content:space-between;   font-family:var(--mono);font-size:11px;color:var(--ink-faint);margin-top:2px; }.hinq-qs .wsum .val.off {color:var(--orange);font-weight:700}.hinq-qs .wsum .val.on {color:var(--blue-light);font-weight:700}.hinq-qs button.cta {   width:100%;border:none;border-radius:8px;cursor:pointer;   background:var(--blue);color:#fff;font:800 12.5px var(--sans);   letter-spacing:.06em;text-transform:uppercase;padding:11px;   box-shadow:inset 0 -3px 0 var(--orange);   transition:background .15s,transform .05s; }.hinq-qs button.cta:hover {background:var(--blue-deep)}.hinq-qs button.cta:active {transform:translateY(1px)}.hinq-qs .hint {font-size:11.5px;color:var(--ink-faint);margin-top:7px}.hinq-qs \/* ---------- zone 2 \u00b7 recap ---------- *\/ .kpi {   display:flex;align-items:baseline;justify-content:space-between;gap:8px;   padding:7px 12px;border-bottom:1px solid var(--line-soft); }.hinq-qs .kpi:last-child {border-bottom:none}.hinq-qs .kpi .k {font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim)}.hinq-qs .kpi .v {font:700 16px var(--mono);color:var(--blue-deep);white-space:nowrap}.hinq-qs .kpi.acc .v {color:var(--blue-light)}.hinq-qs .banner {   display:none;gap:8px;align-items:flex-start;   border:1px solid var(--orange);background:var(--orange-pale);   border-radius:10px;padding:9px 12px;font-size:12px;color:#8a5210; }.hinq-qs .banner.show {display:flex}.hinq-qs .banner b {color:var(--orange)}.hinq-qs .compare .barrow {padding:7px 12px;border-bottom:1px solid var(--line-soft)}.hinq-qs .compare .barrow:last-child {border-bottom:none}.hinq-qs .compare .top {display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:4px}.hinq-qs .compare .lbl {font-size:12px;font-weight:700;color:var(--ink)}.hinq-qs .compare .lbl small {display:block;color:var(--ink-faint);font-weight:400;font-size:10.5px}.hinq-qs .compare .n {font:800 13px var(--mono);color:var(--blue-deep);white-space:nowrap}.hinq-qs .compare .track {height:10px;background:var(--blue-pale);border-radius:5px;overflow:hidden}.hinq-qs .compare .fill {height:100%;border-radius:5px;background:linear-gradient(90deg,var(--blue),var(--blue-light));transition:width .35s ease}.hinq-qs .emptycard {   border:1.5px dashed var(--line);border-radius:10px;color:var(--ink-faint);   display:flex;align-items:center;justify-content:center;flex:1;   font-size:12.5px;text-align:center;padding:18px;background:rgba(255,255,255,.5); }.hinq-qs \/* ---------- zone 3 \u00b7 output ---------- *\/ #zoneOut {display:flex;flex-direction:column;min-height:0}.hinq-qs #outWrap {display:none;flex-direction:column;min-height:0;flex:1}.hinq-qs #outWrap.live {display:flex}.hinq-qs .tabs {display:flex;gap:5px;flex:0 0 auto}.hinq-qs .tab {   border:1px solid var(--line);border-bottom:none;background:var(--blue-mist);   color:var(--ink-dim);border-radius:8px 8px 0 0;padding:7px 12px;cursor:pointer;   font:700 11.5px var(--sans);letter-spacing:.02em; }.hinq-qs .tab.on {background:var(--panel);color:var(--blue-deep);border-color:var(--blue);border-bottom:1px solid var(--panel);margin-bottom:-1px;position:relative;z-index:1;box-shadow:inset 0 3px 0 var(--orange)}.hinq-qs .kpi.acc {box-shadow:inset 3px 0 0 var(--orange)}.hinq-qs .tabwrap {   border:1px solid var(--line);border-radius:0 10px 10px 10px;background:var(--panel);   flex:1;min-height:0;display:flex;flex-direction:column;box-shadow:0 1px 2px rgba(27,117,188,.05); }.hinq-qs .tabwrap.noround {border-radius:10px}.hinq-qs .pane {display:flex;flex-direction:column;min-height:0;flex:1}.hinq-qs .scennote {   flex:0 0 auto;padding:8px 12px;border-bottom:1px solid var(--line-soft);   font-size:12px;color:var(--ink-dim); }.hinq-qs .scennote b {color:var(--ink)}.hinq-qs .scennote .tag {   display:inline-block;font:800 10px var(--mono);letter-spacing:.08em;   background:var(--blue);color:#fff;border-radius:4px;padding:2px 6px;margin-right:7px; }.hinq-qs .pill-ok {color:var(--blue-light);font-weight:700;font-size:11px}.hinq-qs .mandatory {color:var(--orange);font-weight:800}.hinq-qs .twrap {flex:1;min-height:0;overflow:auto}.hinq-qs table {border-collapse:collapse;width:100%;font-size:12px}.hinq-qs thead th {   position:sticky;top:0;background:var(--blue-pale);z-index:2;   text-align:right;padding:7px 11px;font-size:10px;font-weight:800;   letter-spacing:.09em;text-transform:uppercase;color:var(--blue-deep);   border-bottom:1px solid var(--line);white-space:nowrap; }.hinq-qs thead th:first-child, .hinq-qs tbody td:first-child {text-align:left}.hinq-qs tbody td {   padding:5px 11px;border-bottom:1px solid var(--line-soft);   font-family:var(--mono);font-size:11.5px;text-align:right;white-space:nowrap; }.hinq-qs tbody td:first-child {font-family:var(--sans);font-weight:600;font-size:12px}.hinq-qs tbody tr:nth-child(even) td {background:var(--blue-mist)}.hinq-qs tbody tr:hover td {background:var(--blue-pale)}.hinq-qs tbody td.varhead {   font-family:var(--sans);font-weight:800;font-size:11px;letter-spacing:.08em;   text-transform:uppercase;color:var(--blue);background:var(--blue-pale)!important;   text-align:left; }.hinq-qs tfoot td {   padding:7px 11px;font:800 12px var(--mono);text-align:right;   border-top:2px solid var(--blue);color:var(--blue-deep);background:var(--blue-pale);   position:sticky;bottom:0; }.hinq-qs tfoot td:first-child {text-align:left;font-family:var(--sans)}.hinq-qs td .w-extreme {color:var(--orange);font-weight:800}.hinq-qs td input.merr, .hinq-qs td input.ncell {   width:70px;text-align:right;padding:3px 6px;background:#fff;   border:1px solid var(--line);border-radius:5px;color:var(--ink);   font:11.5px var(--mono); }.hinq-qs td input.merr:focus, .hinq-qs td input.ncell:focus {border-color:var(--blue-light)}.hinq-qs .guardrail {   flex:0 0 auto;margin:8px 12px 10px;border:1px solid var(--line);border-left:3px solid var(--orange);   border-radius:6px;padding:8px 11px;font-size:11.5px;color:var(--ink-dim);background:var(--blue-mist); }.hinq-qs .guardrail b {color:var(--ink)}.hinq-qs \/* ---------- tooltips ---------- *\/ [data-tip] {position:relative;cursor:help;border-bottom:1px dotted var(--ink-faint)}.hinq-qs [data-tip]::after {   content:attr(data-tip);   position:absolute;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);   width:min(280px,60vw);background:var(--blue-deep);border:1px solid var(--blue);   color:#fff;font:400 11.5px\/1.45 var(--sans);letter-spacing:0;text-transform:none;   padding:8px 10px;border-radius:7px;white-space:normal;text-align:left;   opacity:0;pointer-events:none;transition:opacity .15s;z-index:40;   box-shadow:0 8px 24px rgba(19,90,146,.35); }.hinq-qs [data-tip]::before {   content:\"\";position:absolute;left:50%;bottom:calc(100% + 3px);transform:translateX(-50%);   border:5px solid transparent;border-top-color:var(--blue-deep);   opacity:0;transition:opacity .15s;z-index:40; }.hinq-qs [data-tip]:hover::after, .hinq-qs [data-tip]:hover::before, .hinq-qs [data-tip]:focus-visible::after, .hinq-qs [data-tip]:focus-visible::before {opacity:1} @media (prefers-reduced-motion: reduce){.hinq-qs * {transition:none!important}} <\/style>\n<div class=\"hinq-qs\">\n<header><span class=\"logo\" aria-hidden=\"true\"><img decoding=\"async\" style=\"height: 34px; width: auto; display: block;\" src=\"https:\/\/h-in-q.com\/wp-content\/uploads\/2024\/05\/cropped-H-in-Q-Logo-300x300-1.png\" alt=\"H-in-Q logo\" \/><\/span><\/p>\n<h1>H-in-Q <b>\u00b7<\/b> Sample Structure &amp; Quotas Simulator<\/h1>\n<p><span class=\"sub\">Precision \u00b7 Feasibility \u00b7 Budget \u2014 see the trade-offs before the fieldwork starts.<\/span><\/p>\n<\/header>\n<div class=\"app\">\n<section id=\"zoneIn\" class=\"zone\">\n<div class=\"panel\">\n<div class=\"hd\"><span class=\"znum\">1<\/span>Input \u00b7 Configuration<\/div>\n<div class=\"bd\">\n<div class=\"field\"><label for=\"method\"><span data-tip=\"CROSS QUOTAS control every combination (e.g. Males 18\u201334) \u2014 powerful but demanding in the field. SIMPLE QUOTAS control each variable independently (so-called marginal quotas): much easier to fill, up to 5 variables, but combinations are left free.\">Quota method<\/span><\/label><select id=\"method\"><option selected=\"selected\" value=\"cross\">Cross quotas (interlocked cells)<\/option><option value=\"simple\">Simple quotas (marginal, up to 5 vars)<\/option><\/select><\/div>\n<div class=\"field\"><label for=\"precision\"><span data-tip=\"Ask yourself WHERE you need statistical significance. If you only report at TOTAL SAMPLE level, a perfectly representative (or weighted) sample of modest size is enough \u2014 the margin of error applies to the global N. If you must read each cell \/ class on its own, every sub-target needs its own minimum n, and the sample grows fast.\">Precision target<\/span><\/label><select id=\"precision\"><option selected=\"selected\" value=\"cell\">Per sub-target (each cell \/ class readable)<\/option><option value=\"global\">Global sample only (total-level reading)<\/option><\/select><\/div>\n<div id=\"methodNote\" class=\"methodnote\"><\/div>\n<div class=\"row2\">\n<div class=\"field\"><label for=\"nVars\">Quota variables<\/label><select id=\"nVars\"><br \/>\n<\/select><\/div>\n<div class=\"field\"><label for=\"gErr\"><span data-tip=\"Half-width of the 95% confidence interval you accept (worst case p = 50%). Smaller error \u2192 larger sample \u2192 higher cost.\">Margin of error %<\/span><\/label> <input id=\"gErr\" max=\"20\" min=\"0.5\" step=\"0.5\" type=\"number\" value=\"5\" aria-label=\"Target margin of error in percent\" \/><\/div>\n<\/div>\n<div id=\"varsHost\"><\/div>\n<p><button id=\"goBtn\" class=\"cta\">Generate plan &amp; scenarios<\/button><\/p>\n<p class=\"hint\">Weights are auto-normalized to 100% per variable if your inputs don&#8217;t add up exactly.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"zoneRecap\" class=\"zone\">\n<div id=\"emptyRecap\" class=\"emptycard\">The recap \u2014 key figures and scenario totals \u2014 appears here after generation.<\/div>\n<div id=\"recapWrap\" style=\"display: none; flex-direction: column; gap: 10px;\">\n<div class=\"panel\">\n<div class=\"hd\"><span class=\"znum\">2<\/span>Recap \u00b7 Key figures<\/div>\n<div id=\"kpis\"><\/div>\n<\/div>\n<div id=\"granBanner\" class=\"banner\"><span aria-hidden=\"true\">\u26a0<\/span> <b>Sample fragmentation risk:<\/b> <b id=\"granCount\"><\/b> cross-quota cells (more than 8). Recruiting and controlling many small cells is slow and expensive, and tiny cells make results unstable. Consider dropping a variable, merging classes \u2014 or switching to <b>simple quotas<\/b>.<\/div>\n<div class=\"panel compare\">\n<div class=\"hd\"><span id=\"compareTitle\">Total interviews per scenario<\/span><\/div>\n<div id=\"compareHost\"><\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"zoneOut\" class=\"zone\">\n<div id=\"emptyOut\" class=\"emptycard\">Define your quota plan in zone 1, then click <b>\u00a0Generate plan &amp; scenarios\u00a0<\/b> to open the detailed tables.<\/div>\n<div id=\"outWrap\">\n<div id=\"tabsBar\" class=\"tabs\" role=\"tablist\"><button class=\"tab on\" role=\"tab\" data-t=\"s1\" aria-selected=\"true\">S1 \u00b7 Proportional<\/button> <button class=\"tab\" role=\"tab\" data-t=\"s2\" aria-selected=\"false\">S2 \u00b7 Equal cells<\/button> <button class=\"tab\" role=\"tab\" data-t=\"s3\" aria-selected=\"false\">S3 \u00b7 Custom plan<\/button><\/div>\n<div id=\"tabWrap\" class=\"tabwrap\">\n<div id=\"pane-s1\" class=\"pane\"><\/div>\n<div id=\"pane-s2\" class=\"pane\" style=\"display: none;\"><\/div>\n<div id=\"pane-s3\" class=\"pane\" style=\"display: none;\"><\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>\n<\/div>\n<p><script>eval(decodeURIComponent(escape(window.atob(\"CiJ1c2Ugc3RyaWN0IjsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEgtaW4tUSDCtyBTQU1QTEUgU1RSVUNUVVJFICYgUVVPVEFTIFNJTVVMQVRPUgogICBNb2R1bGVzOiBDb25maWcgVUkgwrcgU3RhdGlzdGljYWwgRW5naW5lIMK3IFNjZW5hcmlvIFJlbmRlcmVycwogICBNb2RlcyAgOiBDUk9TUyBxdW90YXMgKGludGVybG9ja2VkKSB8IFNJTVBMRSBxdW90YXMgKG1hcmdpbmFsKQogICBUYXJnZXQgOiBwcmVjaXNpb24gUEVSIFNVQi1UQVJHRVQgfCBHTE9CQUwgc2FtcGxlIG9ubHkKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0gMCDCtyBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLSAqLwpjb25zdCAkICA9IChzLCByPWRvY3VtZW50KSA9PiByLnF1ZXJ5U2VsZWN0b3Iocyk7CmNvbnN0ICQkID0gKHMsIHI9ZG9jdW1lbnQpID0+IFsuLi5yLnF1ZXJ5U2VsZWN0b3JBbGwocyldOwpjb25zdCBmbXQgPSBuID0+IE1hdGgucm91bmQobikudG9Mb2NhbGVTdHJpbmcoImVuLVVTIik7CmNvbnN0IHBjdCA9IChuLCBkPTEpID0+IChuKjEwMCkudG9GaXhlZChkKSArICIlIjsKY29uc3QgWjk1ID0gMS45NjsKCi8qKiBTYW1wbGUgc2l6ZSBmb3IgYSBtYXJnaW4gb2YgZXJyb3IgKGRlY2ltYWwpLCA5NSUgQ0ksIHAgPSAwLjUgKi8KZnVuY3Rpb24gc2FtcGxlU2l6ZShFKXsgcmV0dXJuIE1hdGguY2VpbCgoWjk1Klo5NSowLjI1KS8oRSpFKSk7IH0KLyoqIE1hcmdpbiBvZiBlcnJvciAoaW4gJSkgYWNoaWV2ZWQgYnkgYSBzYW1wbGUgb2Ygc2l6ZSBuICovCmZ1bmN0aW9uIG1hcmdpbk9mKG4peyByZXR1cm4gbiA+IDAgPyBaOTUqTWF0aC5zcXJ0KDAuMjUvbikqMTAwIDogTmFOOyB9Ci8qKiBFZmZlY3RpdmUgc2FtcGxlIHNpemUgYWZ0ZXIgd2VpZ2h0aW5nIChLaXNoKTogKM6jIG7htaJ34bWiKcKyIC8gzqMgbuG1onfhtaLCsiAqLwpmdW5jdGlvbiBlZmZlY3RpdmVOKHJvd3MpewogIGNvbnN0IHN3ICA9IHJvd3MucmVkdWNlKChhLHIpID0+IGEgKyByLm4qci53ZWlnaHQsIDApOwogIGNvbnN0IHN3MiA9IHJvd3MucmVkdWNlKChhLHIpID0+IGEgKyByLm4qci53ZWlnaHQqci53ZWlnaHQsIDApOwogIHJldHVybiBzdzIgPiAwID8gKHN3KnN3KS9zdzIgOiAwOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0gMSDCtyBDb25maWcgVUkgLS0tLS0tLS0tLS0tLS0tLS0tICovCmNvbnN0IERFRkFVTFRTID0gWwogIHsgbmFtZToiR2VuZGVyIiwgY2xhc3NlczpbWyJNYWxlIiw0OV0sWyJGZW1hbGUiLDUxXV0gfSwKICB7IG5hbWU6IkFnZSIsICAgIGNsYXNzZXM6W1siMTjigJMzNCIsMzVdLFsiMzXigJM1NCIsMzRdLFsiNTUrIiwzMV1dIH0sCiAgeyBuYW1lOiJSZWdpb24iLCBjbGFzc2VzOltbIk5vcnRoIiw1MF0sWyJTb3V0aCIsNTBdXSB9LAogIHsgbmFtZToiQ1NQIiwgICAgY2xhc3NlczpbWyJDU1ArIiw0MF0sWyJDU1DiiJIiLDYwXV0gfSwKICB7IG5hbWU6IkhhYml0YXQiLGNsYXNzZXM6W1siVXJiYW4iLDY1XSxbIlJ1cmFsIiwzNV1dIH0KXTsKCmZ1bmN0aW9uIGlzU2ltcGxlKCl7IHJldHVybiAkKCIjbWV0aG9kIikudmFsdWUgPT09ICJzaW1wbGUiOyB9CmZ1bmN0aW9uIGlzR2xvYmFsKCl7IHJldHVybiAkKCIjcHJlY2lzaW9uIikudmFsdWUgPT09ICJnbG9iYWwiOyB9CgpmdW5jdGlvbiByZWZyZXNoTWV0aG9kTm90ZSgpewogICQoIiNtZXRob2ROb3RlIikuaW5uZXJIVE1MID0gaXNTaW1wbGUoKQogICAgPyBgPGI+U2ltcGxlIChtYXJnaW5hbCkgcXVvdGFzOjwvYj4gZWFjaCB2YXJpYWJsZSBpcyBjb250cm9sbGVkIGluZGVwZW5kZW50bHkg4oCUIGZhciBlYXNpZXIKICAgICAgIGZpZWxkd29yaywgdXAgdG8gNSB2YXJpYWJsZXMuIEJ1dCBjcm9zc2luZ3MgYXJlIGxlZnQgZnJlZTogbm90aGluZyBwcmV2ZW50cyBhbGwgeW91cgogICAgICAgMTjigJMzNCBmcm9tIGJlaW5nIG1lbi4gVXNlIGNyb3NzIHF1b3RhcyB3aGVuIHlvdSBtdXN0IHJlYWQgY29tYmluYXRpb25zLmAKICAgIDogYDxiPkNyb3NzIHF1b3Rhczo8L2I+IGV2ZXJ5IGNvbWJpbmF0aW9uIChjZWxsKSBpcyBjb250cm9sbGVkIOKAlCB0aGUgYmFzZSBzdHJ1Y3R1cmUgaXMKICAgICAgIGd1YXJhbnRlZWQsIGJ1dCBlYWNoIGV4dHJhIHZhcmlhYmxlIG11bHRpcGxpZXMgdGhlIG51bWJlciBvZiBjZWxscyB0byBmaWxsLmA7Cn0KCmZ1bmN0aW9uIHJlZnJlc2hWYXJPcHRpb25zKCl7CiAgY29uc3QgbWF4ID0gaXNTaW1wbGUoKSA\/IDUgOiAzOwogIGNvbnN0IHNlbCA9ICQoIiNuVmFycyIpOwogIGNvbnN0IGN1ciA9IE1hdGgubWluKCtzZWwudmFsdWUgfHwgMiwgbWF4KTsKICBzZWwuaW5uZXJIVE1MID0gQXJyYXkuZnJvbSh7bGVuZ3RoOm1heH0sIChfLGkpID0+CiAgICBgPG9wdGlvbiB2YWx1ZT0iJHtpKzF9IiAke2krMT09PWN1cj8ic2VsZWN0ZWQiOiIifT4ke2krMX0gdmFyaWFibGUke2k\/InMiOiIifTwvb3B0aW9uPmApLmpvaW4oIiIpOwp9CgpmdW5jdGlvbiBidWlsZFZhckJsb2NrcygpewogIGNvbnN0IG4gPSArJCgiI25WYXJzIikudmFsdWU7CiAgY29uc3QgaG9zdCA9ICQoIiN2YXJzSG9zdCIpOwogIGhvc3QuaW5uZXJIVE1MID0gIiI7CiAgZm9yKGxldCB2PTA7IHY8bjsgdisrKXsKICAgIGNvbnN0IGRlZiA9IERFRkFVTFRTW3ZdOwogICAgY29uc3QgYmxrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBibGsuY2xhc3NOYW1lID0gInZhcmJsb2NrIjsKICAgIGJsay5kYXRhc2V0LnYgPSB2OwogICAgYmxrLmlubmVySFRNTCA9IGAKICAgICAgPGRpdiBjbGFzcz0idnRvcCI+CiAgICAgICAgPGRpdj48bGFiZWw+VmFyaWFibGUgJHt2KzF9IG5hbWU8L2xhYmVsPgogICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJ2bmFtZSIgdmFsdWU9IiR7ZGVmLm5hbWV9IiBtYXhsZW5ndGg9IjI0Ij48L2Rpdj4KICAgICAgICA8ZGl2PjxsYWJlbD5DbGFzc2VzPC9sYWJlbD4KICAgICAgICAgIDxzZWxlY3QgY2xhc3M9InZjb3VudCI+JHtbMiwzLDQsNSw2XS5tYXAoayA9PgogICAgICAgICAgICBgPG9wdGlvbiB2YWx1ZT0iJHtrfSIgJHtrPT09ZGVmLmNsYXNzZXMubGVuZ3RoPyJzZWxlY3RlZCI6IiJ9PiR7a308L29wdGlvbj5gKS5qb2luKCIiKX0KICAgICAgICAgIDwvc2VsZWN0PjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2xhc3Nob3N0Ij48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0id3N1bSI+PHNwYW4+zqMgd2VpZ2h0czwvc3Bhbj48c3BhbiBjbGFzcz0idmFsIj7igJQ8L3NwYW4+PC9kaXY+YDsKICAgIGhvc3QuYXBwZW5kQ2hpbGQoYmxrKTsKICAgIGJ1aWxkQ2xhc3NSb3dzKGJsayk7CiAgICBibGsucXVlcnlTZWxlY3RvcigiLnZjb3VudCIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsICgpID0+IGJ1aWxkQ2xhc3NSb3dzKGJsaykpOwogICAgYmxrLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZSA9PiB7IGlmKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiY3ciKSkgcmVmcmVzaFN1bShibGspOyB9KTsKICB9Cn0KCmZ1bmN0aW9uIGJ1aWxkQ2xhc3NSb3dzKGJsayl7CiAgY29uc3QgdiA9ICtibGsuZGF0YXNldC52LCBrID0gK2Jsay5xdWVyeVNlbGVjdG9yKCIudmNvdW50IikudmFsdWU7CiAgY29uc3QgaG9zdCA9IGJsay5xdWVyeVNlbGVjdG9yKCIuY2xhc3Nob3N0Iik7CiAgY29uc3QgZGVmID0gREVGQVVMVFNbdl0uY2xhc3NlczsKICBob3N0LmlubmVySFRNTCA9ICIiOwogIGNvbnN0IGV2ZW4gPSArKDEwMC9rKS50b0ZpeGVkKDEpOwogIGZvcihsZXQgaT0wOyBpPGs7IGkrKyl7CiAgICBjb25zdCBubSA9IGRlZltpXSA\/IGRlZltpXVswXSA6IGBDbGFzcyAke2krMX1gOwogICAgY29uc3Qgd3QgPSBkZWZbaV0gJiYgZGVmLmxlbmd0aD09PWsgPyBkZWZbaV1bMV0gOiBldmVuOwogICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICByb3cuY2xhc3NOYW1lID0gImNsYXNzcm93IjsKICAgIHJvdy5pbm5lckhUTUwgPSBgCiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iY24iIHZhbHVlPSIke25tfSIgbWF4bGVuZ3RoPSIyMCIgYXJpYS1sYWJlbD0iQ2xhc3MgbmFtZSI+CiAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJjdyIgdmFsdWU9IiR7d3R9IiBtaW49IjAuMSIgbWF4PSIxMDAiIHN0ZXA9IjAuMSIgYXJpYS1sYWJlbD0iUG9wdWxhdGlvbiB3ZWlnaHQgJSI+YDsKICAgIGhvc3QuYXBwZW5kQ2hpbGQocm93KTsKICB9CiAgcmVmcmVzaFN1bShibGspOwp9CgpmdW5jdGlvbiByZWZyZXNoU3VtKGJsayl7CiAgY29uc3QgcyA9ICQkKCIuY3ciLCBibGspLnJlZHVjZSgoYSxpKSA9PiBhICsgKCtpLnZhbHVlIHx8IDApLCAwKTsKICBjb25zdCBlbCA9IGJsay5xdWVyeVNlbGVjdG9yKCIud3N1bSAudmFsIik7CiAgZWwudGV4dENvbnRlbnQgPSBzLnRvRml4ZWQoMSkgKyAiJSI7CiAgZWwuY2xhc3NOYW1lID0gInZhbCAiICsgKE1hdGguYWJzKHMtMTAwKSA8IC4wNSA\/ICJvbiIgOiAib2ZmIik7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLSAyIMK3IFN0YXRpc3RpY2FsIEVuZ2luZSAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KbGV0IE1PREVMID0gbnVsbDsKCmZ1bmN0aW9uIHJlYWRDb25maWcoKXsKICBjb25zdCBnRSA9IE1hdGgubWluKDIwLCBNYXRoLm1heCgwLjUsICskKCIjZ0VyciIpLnZhbHVlIHx8IDUpKSAvIDEwMDsKICBjb25zdCB2YXJzID0gJCQoIi52YXJibG9jayIpLm1hcChibGsgPT4gewogICAgY29uc3QgbmFtZSA9IGJsay5xdWVyeVNlbGVjdG9yKCIudm5hbWUiKS52YWx1ZS50cmltKCkgfHwgIlZhcmlhYmxlIjsKICAgIGNvbnN0IHJvd3MgPSAkJCgiLmNsYXNzcm93IiwgYmxrKS5tYXAociA9PiAoewogICAgICBuYW1lOiByLnF1ZXJ5U2VsZWN0b3IoIi5jbiIpLnZhbHVlLnRyaW0oKSB8fCAiQ2xhc3MiLAogICAgICB3OiAgICBNYXRoLm1heCgwLjAwMDEsICtyLnF1ZXJ5U2VsZWN0b3IoIi5jdyIpLnZhbHVlIHx8IDApCiAgICB9KSk7CiAgICBjb25zdCBzdW0gPSByb3dzLnJlZHVjZSgoYSxyKSA9PiBhICsgci53LCAwKTsKICAgIHJvd3MuZm9yRWFjaChyID0+IHIudyA9IHIudyAvIHN1bSk7IC8qIGR5bmFtaWMgbm9ybWFsaXphdGlvbiDihpIgzqMgPSAxICovCiAgICByZXR1cm4geyBuYW1lLCByb3dzIH07CiAgfSk7CiAgcmV0dXJuIHsgZ0UsIHZhcnMsIHNpbXBsZTppc1NpbXBsZSgpLCBnbG9iYWw6aXNHbG9iYWwoKSB9Owp9CgpmdW5jdGlvbiBjYXJ0ZXNpYW4odmFycyl7CiAgbGV0IGNlbGxzID0gW3sgbGFiZWw6W10sIHNoYXJlOjEgfV07CiAgZm9yKGNvbnN0IHYgb2YgdmFycyl7CiAgICBjb25zdCBuZXh0ID0gW107CiAgICBmb3IoY29uc3QgYyBvZiBjZWxscykKICAgICAgZm9yKGNvbnN0IHIgb2Ygdi5yb3dzKQogICAgICAgIG5leHQucHVzaCh7IGxhYmVsOlsuLi5jLmxhYmVsLCByLm5hbWVdLCBzaGFyZTogYy5zaGFyZSAqIHIudyB9KTsKICAgIGNlbGxzID0gbmV4dDsKICB9CiAgcmV0dXJuIGNlbGxzLm1hcCgoYyxpKSA9PiAoeyBpZDppLCBsYWJlbDpjLmxhYmVsLmpvaW4oIiDCtyAiKSwgc2hhcmU6Yy5zaGFyZSB9KSk7Cn0KCmZ1bmN0aW9uIGNvbXB1dGVNb2RlbCgpewogIGNvbnN0IGNmZyA9IHJlYWRDb25maWcoKTsKICBjb25zdCBiYXNlTiA9IHNhbXBsZVNpemUoY2ZnLmdFKTsKICBjb25zdCBNID0geyAuLi5jZmcsIGJhc2VOIH07CgogIGlmKGNmZy5zaW1wbGUpewogICAgLyogLS0tLSBTSU1QTEUgKG1hcmdpbmFsKSBxdW90YXMgLS0tLQogICAgICAgTiBpcyBkcml2ZW4gYnkgdGhlIHNtYWxsZXN0IENMQVNTIChwZXItc3VidGFyZ2V0IHByZWNpc2lvbikKICAgICAgIG9yIHNpbXBseSA9IGJhc2VOIChnbG9iYWwgcHJlY2lzaW9uKS4gQ2xhc3NlcyB0aGVuIGZpbGwgcHJvcG9ydGlvbmFsbHkuICovCiAgICBjb25zdCBtaW5TaGFyZSA9IE1hdGgubWluKC4uLmNmZy52YXJzLmZsYXRNYXAodiA9PiB2LnJvd3MubWFwKHIgPT4gci53KSkpOwogICAgTS5taW5TaGFyZSA9IG1pblNoYXJlOwogICAgTS50b3RhbCA9IGNmZy5nbG9iYWwgPyBiYXNlTiA6IE1hdGguY2VpbChiYXNlTiAvIG1pblNoYXJlKTsKICAgIE0ucGxhbiA9IGNmZy52YXJzLm1hcCh2ID0+ICh7CiAgICAgIG5hbWU6IHYubmFtZSwKICAgICAgcm93czogdi5yb3dzLm1hcChyID0+ICh7IG5hbWU6ci5uYW1lLCBzaGFyZTpyLncsIG46TWF0aC5yb3VuZChNLnRvdGFsKnIudykgfSkpCiAgICB9KSk7CiAgfSBlbHNlIHsKICAgIC8qIC0tLS0gQ1JPU1MgcXVvdGFzIC0tLS0gKi8KICAgIGNvbnN0IGNlbGxzID0gY2FydGVzaWFuKGNmZy52YXJzKTsKICAgIE0uY2VsbHMgPSBjZWxsczsKICAgIGNvbnN0IG1pblNoYXJlID0gTWF0aC5taW4oLi4uY2VsbHMubWFwKGMgPT4gYy5zaGFyZSkpOwogICAgTS5taW5TaGFyZSA9IG1pblNoYXJlOwoKICAgIGlmKGNmZy5nbG9iYWwpewogICAgICAvKiBQcmVjaXNpb24gYXQgVE9UQUwgbGV2ZWwgb25seTogTiA9IGJhc2VOIGluIGV2ZXJ5IHNjZW5hcmlvICovCiAgICAgIGNvbnN0IHQxID0gYmFzZU47CiAgICAgIE0uczEgPSBjZWxscy5tYXAoYyA9PiAoeyAuLi5jLCBuOk1hdGgucm91bmQodDEqYy5zaGFyZSkgfSkpOwogICAgICBNLnMxVG90YWwgPSBNLnMxLnJlZHVjZSgoYSxjKSA9PiBhK2MubiwgMCk7CgogICAgICBjb25zdCBuRXEgPSBNYXRoLmNlaWwoYmFzZU4gLyBjZWxscy5sZW5ndGgpOwogICAgICBNLnMyVG90YWwgPSBuRXEgKiBjZWxscy5sZW5ndGg7CiAgICAgIE0uczIgPSBjZWxscy5tYXAoYyA9PiB7CiAgICAgICAgY29uc3Qgc1NoYXJlID0gbkVxIC8gTS5zMlRvdGFsOwogICAgICAgIHJldHVybiB7IC4uLmMsIG46bkVxLCBzU2hhcmUsIHdlaWdodDpjLnNoYXJlL3NTaGFyZSB9OwogICAgICB9KTsKICAgICAgTS5zMkVmZk4gPSBlZmZlY3RpdmVOKE0uczIpOwogICAgfSBlbHNlIHsKICAgICAgLyogUHJlY2lzaW9uIFBFUiBDRUxMOiBldmVyeSBjZWxsIG11c3QgcmVhY2ggYmFzZU4gKi8KICAgICAgY29uc3QgdDEgPSBNYXRoLmNlaWwoYmFzZU4gLyBtaW5TaGFyZSk7CiAgICAgIE0uczEgPSBjZWxscy5tYXAoYyA9PiAoeyAuLi5jLCBuOk1hdGgucm91bmQodDEqYy5zaGFyZSkgfSkpOwogICAgICBNLnMxVG90YWwgPSBNLnMxLnJlZHVjZSgoYSxjKSA9PiBhK2MubiwgMCk7CgogICAgICBNLnMyVG90YWwgPSBiYXNlTiAqIGNlbGxzLmxlbmd0aDsKICAgICAgTS5zMiA9IGNlbGxzLm1hcChjID0+IHsKICAgICAgICBjb25zdCBzU2hhcmUgPSBiYXNlTiAvIE0uczJUb3RhbDsKICAgICAgICByZXR1cm4geyAuLi5jLCBuOmJhc2VOLCBzU2hhcmUsIHdlaWdodDpjLnNoYXJlL3NTaGFyZSB9OwogICAgICB9KTsKICAgICAgTS5zMkVmZk4gPSBlZmZlY3RpdmVOKE0uczIpOwogICAgfQogIH0KICBNT0RFTCA9IE07Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLSAzIMK3IFJlbmRlcmVycyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KY29uc3QgVElQUyA9IHsKICBzaGFyZSA6ICJSZWFsIHdlaWdodCBvZiB0aGlzIHN1Yi10YXJnZXQgaW4gdGhlIHBvcHVsYXRpb24gKGFmdGVyIG5vcm1hbGl6YXRpb24pLiIsCiAgZXJyICAgOiAiTWFyZ2luIG9mIGVycm9yIHJlYWRhYmxlIG9uIHRoaXMgc3ViLXRhcmdldCBBTE9ORSBhdCA5NSUgY29uZmlkZW5jZSAod29yc3QgY2FzZSBwID0gNTAlKS4gSWYgcHJlY2lzaW9uIG9ubHkgbWF0dGVycyBnbG9iYWxseSwgbGFyZ2UgdmFsdWVzIGhlcmUgYXJlIGFjY2VwdGFibGUuIiwKICB3ZWlnaHQ6ICJXZWlnaHRpbmcgZmFjdG9yID0gJSBwb3B1bGF0aW9uIMO3ICUgc2FtcGxlLiBBcHBsaWVkIGF0IGFuYWx5c2lzIHN0YWdlLCBpdCByZXN0b3JlcyBlYWNoIHJlc3BvbmRlbnQncyB0cnVlIGltcG9ydGFuY2UuIDEuMDAwID0gbm8gY29ycmVjdGlvbi4gRmFyIGZyb20gMSA9IHN0cm9uZyBkaXN0b3J0aW9uIG9mIHRoZSByYXcgZGF0YS4iLAogIHMxICAgIDogIlB1cmU6IHRoZSBzYW1wbGUgbWlycm9ycyB0aGUgcG9wdWxhdGlvbiBleGFjdGx5LCBzbyBubyB3ZWlnaHRpbmcgaXMgbmVlZGVkLiBFeHBlbnNpdmUgb25seSB3aGVuIGVhY2ggY2VsbCBtdXN0IGJlIHJlYWRhYmxlIG9uIGl0cyBvd24uIiwKICBzMiAgICA6ICJCdWRnZXQtZnJpZW5kbHkgZm9yIGNyb3NzLXRhcmdldCByZWFkaW5nOiBldmVyeSBjZWxsIGlzIGVxdWFsbHkgcHJlY2lzZSwgYnV0IHRoZSBiYXNlIG5vIGxvbmdlciBtaXJyb3JzIHRoZSBwb3B1bGF0aW9uLCBzbyB3ZWlnaHRpbmcgaXMgTUFOREFUT1JZIGZvciBhbnkgZ2xvYmFsIHJlc3VsdC4iLAogIG4gICAgIDogIkludGVydmlld3MgdG8gY29tcGxldGUgaW4gdGhpcyBzdWItdGFyZ2V0IGR1cmluZyBmaWVsZHdvcmsuIiwKICBlZmZOICA6ICJFZmZlY3RpdmUgc2FtcGxlIHNpemUgKEtpc2gpLiBXZWlnaHRpbmcgYWx3YXlzIGNvc3RzIHByZWNpc2lvbjogdGhlIHdlaWdodGVkIHNhbXBsZSBiZWhhdmVzIGxpa2UgYSBTTUFMTEVSIHVud2VpZ2h0ZWQgb25lLiBFZmZlY3RpdmUgTiA9ICjOoyBudynCsiDDtyDOoyBud8KyLiBUaGUgZ2xvYmFsIG1hcmdpbiBvZiBlcnJvciBtdXN0IGJlIGNvbXB1dGVkIG9uIHRoaXMgdmFsdWUsIG5vdCBvbiB0aGUgcmF3IE4uIiwKICBnbG9iICA6ICJNYXJnaW4gb2YgZXJyb3IgYXQgVE9UQUwgc2FtcGxlIGxldmVsLCBjb21wdXRlZCBvbiB0aGUgZWZmZWN0aXZlIE4gd2hlbiB3ZWlnaHRpbmcgYXBwbGllcy4iCn07CgpmdW5jdGlvbiBrcGlSb3coaywgdiwgdGlwLCBhY2M9ZmFsc2UpewogIHJldHVybiBgPGRpdiBjbGFzcz0ia3BpICR7YWNjPyJhY2MiOiIifSI+CiAgICA8c3BhbiBjbGFzcz0iayI+JHt0aXAgPyBgPHNwYW4gZGF0YS10aXA9IiR7dGlwfSIgdGFiaW5kZXg9IjAiPiR7a308L3NwYW4+YCA6IGt9PC9zcGFuPgogICAgPHNwYW4gY2xhc3M9InYiPiR7dn08L3NwYW4+PC9kaXY+YDsKfQoKZnVuY3Rpb24gcmVuZGVyS1BJcygpewogIGNvbnN0IG0gPSBNT0RFTDsKICBsZXQgaHRtbCA9ICIiOwogIGlmKG0uc2ltcGxlKXsKICAgIGNvbnN0IG5DbHMgPSBtLnZhcnMucmVkdWNlKChhLHYpID0+IGEgKyB2LnJvd3MubGVuZ3RoLCAwKTsKICAgIGh0bWwgPQogICAgICBrcGlSb3coIk1ldGhvZCAvIHRhcmdldCIsIGBTaW1wbGUgwrcgJHttLmdsb2JhbCA\/ICJHbG9iYWwiIDogIlBlciBjbGFzcyJ9YCwKICAgICAgICAiTWFyZ2luYWwgcXVvdGFzOiBlYWNoIHZhcmlhYmxlIGlzIGNvbnRyb2xsZWQgaW5kZXBlbmRlbnRseSwgbm8gY3Jvc3NlZCBjZWxscy4iKSArCiAgICAgIGtwaVJvdygiVmFyaWFibGVzIMK3IGNsYXNzZXMiLCBgJHttLnZhcnMubGVuZ3RofSDCtyAke25DbHN9YCkgKwogICAgICBrcGlSb3coIlNtYWxsZXN0IGNsYXNzIiwgcGN0KG0ubWluU2hhcmUpLAogICAgICAgIG0uZ2xvYmFsID8gIldpdGggYSBnbG9iYWwtb25seSB0YXJnZXQsIHNtYWxsIGNsYXNzZXMgZG9uJ3QgaW5mbGF0ZSBOIOKAlCB0aGV5IGp1c3Qgd29uJ3QgYmUgcmVhZGFibGUgb24gdGhlaXIgb3duLiIgOgogICAgICAgICJUaGUgcmFyZXN0IGNsYXNzIGFjcm9zcyBhbGwgdmFyaWFibGVzLiBJdCBkaWN0YXRlcyB0aGUgdG90YWwgTiBzbyB0aGF0IGV2ZXJ5IGNsYXNzIHJlYWNoZXMgdGhlIG1pbmltdW0gbi4iKSArCiAgICAgIGtwaVJvdygiVG90YWwgc2FtcGxlIE4iLCBmbXQobS50b3RhbCksCiAgICAgICAgbS5nbG9iYWwgPyAiTiA9IOKMiDEuOTbCsiDDlyAwLjI1IMO3IEXCsuKMiSBhdCB0b3RhbCBsZXZlbCDigJQgcmVwcmVzZW50YXRpdmVuZXNzIGlzIGtlcHQgYnkgcHJvcG9ydGlvbmFsIHF1b3Rhcywgbm8gd2VpZ2h0aW5nIG5lZWRlZC4iIDoKICAgICAgICAiTiA9IG1pbi1jbGFzcyByZXF1aXJlbWVudCDijIhiYXNlIG4gw7cgc21hbGxlc3QgY2xhc3Mgc2hhcmXijIkuIiwgdHJ1ZSk7CiAgfSBlbHNlIHsKICAgIGh0bWwgPQogICAgICBrcGlSb3coIk1ldGhvZCAvIHRhcmdldCIsIGBDcm9zcyDCtyAke20uZ2xvYmFsID8gIkdsb2JhbCIgOiAiUGVyIGNlbGwifWAsCiAgICAgICAgIkludGVybG9ja2VkIHF1b3RhczogZXZlcnkgY29tYmluYXRpb24gaXMgYSBmaWVsZHdvcmsgY2VsbCB0byBmaWxsLiIpICsKICAgICAga3BpUm93KCJDcm9zcy1xdW90YSBjZWxscyIsIG0uY2VsbHMubGVuZ3RoLAogICAgICAgICJDYXJ0ZXNpYW4gcHJvZHVjdCBvZiBhbGwgY2xhc3MgY29tYmluYXRpb25zLiBFYWNoIGNlbGwgaXMgYSBzdWItcXVvdGEgdG8gZmlsbCBhbmQgY29udHJvbC4iKSArCiAgICAgIGtwaVJvdygiU21hbGxlc3QgY2VsbCIsIHBjdChtLm1pblNoYXJlKSwKICAgICAgICBtLmdsb2JhbCA\/ICJXaXRoIGEgZ2xvYmFsLW9ubHkgdGFyZ2V0LCByYXJlIGNlbGxzIG5vIGxvbmdlciBkcml2ZSB0aGUgYnVkZ2V0IOKAlCB0aGV5IGp1c3QgY2FuJ3QgYmUgcmVhZCBvbiB0aGVpciBvd24uIiA6CiAgICAgICAgIlRoZSByYXJlc3QgY29tYmluYXRpb24uIEluIFNjZW5hcmlvIDEgaXQgZGljdGF0ZXMgdGhlIHRvdGFsIHNhbXBsZSBzaXplIOKAlCB0aGUgbWFpbiBjb3N0IGRyaXZlci4iKSArCiAgICAgIGtwaVJvdyhtLmdsb2JhbCA\/ICJSZXF1aXJlZCB0b3RhbCBOIiA6ICJNaW4uIG4gcGVyIGNlbGwiLCBmbXQobS5iYXNlTiksCiAgICAgICAgbS5nbG9iYWwgPyAibiA9IOKMiDEuOTbCsiDDlyAwLjI1IMO3IEXCsuKMiSBhcHBsaWVkIHRvIHRoZSBUT1RBTCBzYW1wbGUg4oCUIHRoaXMgaXMgYWxsIHlvdSBuZWVkIHdoZW4gc2lnbmlmaWNhbmNlIG9ubHkgbWF0dGVycyBnbG9iYWxseS4iIDoKICAgICAgICAibiA9IOKMiDEuOTbCsiDDlyAwLjI1IMO3IEXCsuKMiSDigJQgaW50ZXJ2aWV3cyBuZWVkZWQgaW4gRUFDSCBjZWxsIHRvIHJlYWQgaXQgYXQgdGhlIHRhcmdldCBtYXJnaW4gb2YgZXJyb3IuIiwgdHJ1ZSk7CiAgfQogICQoIiNrcGlzIikuaW5uZXJIVE1MID0gaHRtbDsKfQoKZnVuY3Rpb24gcmVuZGVyQmFubmVyKCl7CiAgY29uc3Qgc2hvdyA9ICFNT0RFTC5zaW1wbGUgJiYgTU9ERUwuY2VsbHMubGVuZ3RoID4gODsKICAkKCIjZ3JhbkJhbm5lciIpLmNsYXNzTGlzdC50b2dnbGUoInNob3ciLCBzaG93KTsKICBpZighTU9ERUwuc2ltcGxlKSAkKCIjZ3JhbkNvdW50IikudGV4dENvbnRlbnQgPSBNT0RFTC5jZWxscy5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHJlbmRlckNvbXBhcmUoczNUb3RhbCl7CiAgY29uc3QgaG9zdCA9ICQoIiNjb21wYXJlSG9zdCIpOwogIGlmKE1PREVMLnNpbXBsZSl7CiAgICAkKCIjY29tcGFyZVRpdGxlIikudGV4dENvbnRlbnQgPSAiVG90YWwgaW50ZXJ2aWV3cyDigJQgc2ltcGxlIHF1b3RhIHBsYW4iOwogICAgaG9zdC5pbm5lckhUTUwgPSBgCiAgICAgIDxkaXYgY2xhc3M9ImJhcnJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0idG9wIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYmwiPlNpbXBsZSBxdW90YXM8c21hbGw+JHtNT0RFTC5nbG9iYWwgPyAiZ2xvYmFsIHByZWNpc2lvbiIgOiAiZXZlcnkgY2xhc3MgcmVhZGFibGUifSDigJQgbm8gd2VpZ2h0aW5nPC9zbWFsbD48L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibiI+TiA9ICR7Zm10KE1PREVMLnRvdGFsKX08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHJhY2siPjxkaXYgY2xhc3M9ImZpbGwiIHN0eWxlPSJ3aWR0aDoxMDAlIj48L2Rpdj48L2Rpdj4KICAgICAgPC9kaXY+YDsKICAgIHJldHVybjsKICB9CiAgJCgiI2NvbXBhcmVUaXRsZSIpLnRleHRDb250ZW50ID0gIlRvdGFsIGludGVydmlld3MgcGVyIHNjZW5hcmlvIjsKICBjb25zdCBtID0gTU9ERUw7CiAgY29uc3Qgcm93cyA9IFsKICAgIFsiU2NlbmFyaW8gMSIsICJQcm9wb3J0aW9uYWwg4oCUIG5vIHdlaWdodGluZyIsIG0uczFUb3RhbF0sCiAgICBbIlNjZW5hcmlvIDIiLCAiRXF1YWwgY2VsbHMg4oCUIHdlaWdodGluZyBtYW5kYXRvcnkiLCBtLnMyVG90YWxdLAogICAgWyJTY2VuYXJpbyAzIiwgIkN1c3RvbSBwbGFuIiwgczNUb3RhbCA\/PyBtLnMyVG90YWxdCiAgXTsKICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5yb3dzLm1hcChyID0+IHJbMl0pKTsKICBob3N0LmlubmVySFRNTCA9IHJvd3MubWFwKChbdCwgcywgbl0pID0+IGAKICAgIDxkaXYgY2xhc3M9ImJhcnJvdyI+CiAgICAgIDxkaXYgY2xhc3M9InRvcCI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImxibCI+JHt0fTxzbWFsbD4ke3N9PC9zbWFsbD48L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9Im4iPk4gPSAke2ZtdChuKX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0cmFjayI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOiR7TWF0aC5tYXgoMywgbi9tYXgqMTAwKX0lIj48L2Rpdj48L2Rpdj4KICAgIDwvZGl2PmApLmpvaW4oIiIpOwp9CgpmdW5jdGlvbiB0YWJsZVNoZWxsKGhlYWRDb2xzLCBib2R5Um93cywgZm9vdENvbHMsIG5vdGUsIGV4dHJhPSIiKXsKICByZXR1cm4gYCR7bm90ZX0KICA8ZGl2IGNsYXNzPSJ0d3JhcCI+PHRhYmxlPgogICAgPHRoZWFkPjx0cj4ke2hlYWRDb2xzfTwvdHI+PC90aGVhZD4KICAgIDx0Ym9keT4ke2JvZHlSb3dzfTwvdGJvZHk+CiAgICA8dGZvb3Q+PHRyPiR7Zm9vdENvbHN9PC90cj48L3Rmb290PgogIDwvdGFibGU+PC9kaXY+JHtleHRyYX1gOwp9CgovKiAtLS0tIFNJTVBMRSBxdW90YSBwbGFuIChzaW5nbGUgcGFuZSkgLS0tLSAqLwpmdW5jdGlvbiByZW5kZXJTaW1wbGVQbGFuKCl7CiAgY29uc3QgbSA9IE1PREVMOwogIGNvbnN0IG5vdGUgPSBgPGRpdiBjbGFzcz0ic2Nlbm5vdGUiPjxzcGFuIGNsYXNzPSJ0YWciPlBMQU48L3NwYW4+CiAgICA8Yj5TaW1wbGUgKG1hcmdpbmFsKSBxdW90YXMg4oCUICR7bS5nbG9iYWwgPyAiZ2xvYmFsIHByZWNpc2lvbiIgOiAiZXZlcnkgY2xhc3MgcmVhZGFibGUifS48L2I+CiAgICBFYWNoIHZhcmlhYmxlIGlzIGZpbGxlZCBwcm9wb3J0aW9uYWxseSBhbmQgaW5kZXBlbmRlbnRseTogZmllbGR3b3JrIGlzIG11Y2ggbGlnaHRlciBhbmQgdGhlCiAgICBzYW1wbGUgc3RheXMgcmVwcmVzZW50YXRpdmUgb24gZXZlcnkgY29udHJvbGxlZCBtYXJnaW4uIDxzcGFuIGNsYXNzPSJwaWxsLW9rIj5XZWlnaHRpbmc6IG5vdCByZXF1aXJlZCDinJM8L3NwYW4+CiAgICA8c3BhbiBkYXRhLXRpcD0iU2ltcGxlIHF1b3RhcyBkbyBOT1QgY29udHJvbCBjb21iaW5hdGlvbnM6IHRoZSBjcm9zc2luZyBvZiB0d28gdmFyaWFibGVzIG1heSBkcmlmdCBmcm9tIHJlYWxpdHkgKGUuZy4gYWxsIHlvdW5nIHJlc3BvbmRlbnRzIGNvdWxkIGJlIG1lbikuIElmIHlvdSBtdXN0IGFuYWx5c2UgY3Jvc3NlZCB0YXJnZXRzLCBzd2l0Y2ggdG8gY3Jvc3MgcXVvdGFzLiIgdGFiaW5kZXg9IjAiIGNsYXNzPSJtYW5kYXRvcnkiPkNyb3NzaW5ncyBub3QgY29udHJvbGxlZCDimqA8L3NwYW4+PC9kaXY+YDsKICBjb25zdCBoZWFkID0gYDx0aD5WYXJpYWJsZSDCtyBjbGFzczwvdGg+CiAgICA8dGg+PHNwYW4gZGF0YS10aXA9IiR7VElQUy5zaGFyZX0iIHRhYmluZGV4PSIwIj5Qb3AuICU8L3NwYW4+PC90aD4KICAgIDx0aD48c3BhbiBkYXRhLXRpcD0iJHtUSVBTLm59IiB0YWJpbmRleD0iMCI+SW50ZXJ2aWV3cyAobik8L3NwYW4+PC90aD4KICAgIDx0aD48c3BhbiBkYXRhLXRpcD0iJHtUSVBTLmVycn0iIHRhYmluZGV4PSIwIj5DbGFzcyBlcnJvcjwvc3Bhbj48L3RoPmA7CiAgY29uc3QgYm9keSA9IG0ucGxhbi5tYXAodiA9PgogICAgYDx0cj48dGQgY2xhc3M9InZhcmhlYWQiIGNvbHNwYW49IjQiPiR7di5uYW1lfTwvdGQ+PC90cj5gICsKICAgIHYucm93cy5tYXAociA9PgogICAgICBgPHRyPjx0ZD4ke3IubmFtZX08L3RkPjx0ZD4ke3BjdChyLnNoYXJlKX08L3RkPjx0ZD4ke2ZtdChyLm4pfTwvdGQ+PHRkPsKxJHttYXJnaW5PZihyLm4pLnRvRml4ZWQoMSl9JTwvdGQ+PC90cj5gCiAgICApLmpvaW4oIiIpCiAgKS5qb2luKCIiKTsKICBjb25zdCBnRXJyID0gbWFyZ2luT2YobS50b3RhbCkudG9GaXhlZCgxKTsKICBjb25zdCBmb290ID0gYDx0ZD5UT1RBTCBTQU1QTEUgKGVhY2ggdmFyaWFibGUgc3VtcyB0byBOKTwvdGQ+PHRkPjEwMC4wJTwvdGQ+PHRkPk4gPSAke2ZtdChtLnRvdGFsKX08L3RkPjx0ZD7CsSR7Z0Vycn0lIGdsb2JhbDwvdGQ+YDsKICAkKCIjcGFuZS1zMSIpLmlubmVySFRNTCA9IHRhYmxlU2hlbGwoaGVhZCwgYm9keSwgZm9vdCwgbm90ZSk7Cn0KCi8qIC0tLS0gQ1JPU1Mgc2NlbmFyaW9zIC0tLS0gKi8KZnVuY3Rpb24gcmVuZGVyUzEoKXsKICBjb25zdCBtID0gTU9ERUw7CiAgY29uc3QgZ0VyciA9IG1hcmdpbk9mKG0uczFUb3RhbCkudG9GaXhlZCgxKTsKICBjb25zdCBub3RlID0gYDxkaXYgY2xhc3M9InNjZW5ub3RlIj48c3BhbiBjbGFzcz0idGFnIj5TMTwvc3Bhbj4KICAgIDxiPkdsb2JhbCByZXByZXNlbnRhdGl2ZW5lc3MuPC9iPiA8c3BhbiBkYXRhLXRpcD0iJHtUSVBTLnMxfSIgdGFiaW5kZXg9IjAiPlN0cmljdGx5IG1pcnJvcnMgdGhlIHBvcHVsYXRpb248L3NwYW4+IOKAlAogICAgJHttLmdsb2JhbAogICAgICA\/IGBOIGlzIHNldCBhdCB0b3RhbCBsZXZlbCAowrEkeyhtLmdFKjEwMCkudG9GaXhlZCgxKX0lIGdsb2JhbCk7IGNlbGxzIGZpbGwgcHJvcG9ydGlvbmFsbHkgYW5kIGFyZSBOT1QgaW5kaXZpZHVhbGx5IHJlYWRhYmxlLmAKICAgICAgOiBgdGhlIHNtYWxsZXN0IGNlbGwgKCR7cGN0KG0ubWluU2hhcmUpfSkgbXVzdCBzdGlsbCByZWFjaCBuID0gJHtmbXQobS5iYXNlTil9LCB3aGljaCBpbmZsYXRlcyB0aGUgd2hvbGUgc2FtcGxlLmB9CiAgICA8c3BhbiBjbGFzcz0icGlsbC1vayI+V2VpZ2h0aW5nOiBub3QgcmVxdWlyZWQg4pyTPC9zcGFuPjwvZGl2PmA7CiAgY29uc3QgaGVhZCA9IGA8dGg+Q3Jvc3MtcXVvdGEgY2VsbDwvdGg+CiAgICA8dGg+PHNwYW4gZGF0YS10aXA9IiR7VElQUy5zaGFyZX0iIHRhYmluZGV4PSIwIj5Qb3AuICU8L3NwYW4+PC90aD4KICAgIDx0aD48c3BhbiBkYXRhLXRpcD0iJHtUSVBTLm59IiB0YWJpbmRleD0iMCI+SW50ZXJ2aWV3cyAobik8L3NwYW4+PC90aD4KICAgIDx0aD48c3BhbiBkYXRhLXRpcD0iJHtUSVBTLmVycn0iIHRhYmluZGV4PSIwIj5DZWxsIGVycm9yPC9zcGFuPjwvdGg+YDsKICBjb25zdCBib2R5ID0gbS5zMS5tYXAoYyA9PgogICAgYDx0cj48dGQ+JHtjLmxhYmVsfTwvdGQ+PHRkPiR7cGN0KGMuc2hhcmUpfTwvdGQ+PHRkPiR7Zm10KGMubil9PC90ZD48dGQ+wrEke21hcmdpbk9mKGMubikudG9GaXhlZCgxKX0lPC90ZD48L3RyPmAKICApLmpvaW4oIiIpOwogIGNvbnN0IGZvb3QgPSBgPHRkPlRPVEFMIFNBTVBMRTwvdGQ+PHRkPjEwMC4wJTwvdGQ+PHRkPk4gPSAke2ZtdChtLnMxVG90YWwpfTwvdGQ+PHRkPsKxJHtnRXJyfSUgZ2xvYmFsPC90ZD5gOwogICQoIiNwYW5lLXMxIikuaW5uZXJIVE1MID0gdGFibGVTaGVsbChoZWFkLCBib2R5LCBmb290LCBub3RlKTsKfQoKZnVuY3Rpb24gcmVuZGVyUzIoKXsKICBjb25zdCBtID0gTU9ERUw7CiAgY29uc3QgZWZmTiA9IG0uczJFZmZOOwogIGNvbnN0IGdFZmYgPSBtYXJnaW5PZihlZmZOKS50b0ZpeGVkKDEpOwogIGNvbnN0IG5vdGUgPSBgPGRpdiBjbGFzcz0ic2Nlbm5vdGUiPjxzcGFuIGNsYXNzPSJ0YWciPlMyPC9zcGFuPgogICAgPGI+Q3Jvc3MtdGFyZ2V0IGFuYWx5c2lzJHttLmdsb2JhbCA\/ICIiIDogIiAmYW1wOyBlcXVhbCBwcmVjaXNpb24ifS48L2I+CiAgICBTYW1lIG4gaW4gZXZlcnkgY2VsbCR7bS5nbG9iYWwgPyAiICh0b3RhbCBrZXB0IGF0IHRoZSBnbG9iYWwgbWluaW11bSkiIDogYCDihpIgZXZlcnkgc3ViLXRhcmdldCByZWFkYWJsZSBhdCDCsSR7KG0uZ0UqMTAwKS50b0ZpeGVkKDEpfSVgfS4KICAgIDxzcGFuIGRhdGEtdGlwPSIke1RJUFMuczJ9IiB0YWJpbmRleD0iMCIgY2xhc3M9Im1hbmRhdG9yeSI+V2VpZ2h0aW5nIG1hbmRhdG9yeTwvc3Bhbj4g4oCUCiAgICA8c3BhbiBkYXRhLXRpcD0iJHtUSVBTLmVmZk59IiB0YWJpbmRleD0iMCI+ZWZmZWN0aXZlIE4gPSAke2ZtdChlZmZOKX08L3NwYW4+LCBnbG9iYWwgZXJyb3IgwrEke2dFZmZ9JS48L2Rpdj5gOwogIGNvbnN0IGhlYWQgPSBgPHRoPkNyb3NzLXF1b3RhIGNlbGw8L3RoPgogICAgPHRoPjxzcGFuIGRhdGEtdGlwPSIke1RJUFMuc2hhcmV9IiB0YWJpbmRleD0iMCI+UG9wLiAlPC9zcGFuPjwvdGg+CiAgICA8dGg+U2FtcGxlICU8L3RoPgogICAgPHRoPjxzcGFuIGRhdGEtdGlwPSIke1RJUFMubn0iIHRhYmluZGV4PSIwIj5JbnRlcnZpZXdzIChuKTwvc3Bhbj48L3RoPgogICAgPHRoPjxzcGFuIGRhdGEtdGlwPSIke1RJUFMud2VpZ2h0fSIgdGFiaW5kZXg9IjAiPldlaWdodDwvc3Bhbj48L3RoPmA7CiAgY29uc3QgYm9keSA9IG0uczIubWFwKGMgPT4gewogICAgY29uc3QgZXh0ID0gYy53ZWlnaHQgPCAwLjQgfHwgYy53ZWlnaHQgPiAyLjA7CiAgICByZXR1cm4gYDx0cj48dGQ+JHtjLmxhYmVsfTwvdGQ+PHRkPiR7cGN0KGMuc2hhcmUpfTwvdGQ+PHRkPiR7cGN0KGMuc1NoYXJlKX08L3RkPgogICAgICA8dGQ+JHtmbXQoYy5uKX08L3RkPgogICAgICA8dGQ+PHNwYW4gY2xhc3M9IiR7ZXh0PyJ3LWV4dHJlbWUiOiIifSI+JHtjLndlaWdodC50b0ZpeGVkKDMpfTwvc3Bhbj48L3RkPjwvdHI+YDsKICB9KS5qb2luKCIiKTsKICBjb25zdCBmb290ID0gYDx0ZD5UT1RBTCBTQU1QTEU8L3RkPjx0ZD4xMDAuMCU8L3RkPjx0ZD4xMDAuMCU8L3RkPjx0ZD5OID0gJHtmbXQobS5zMlRvdGFsKX08L3RkPjx0ZD48L3RkPmA7CiAgJCgiI3BhbmUtczIiKS5pbm5lckhUTUwgPSB0YWJsZVNoZWxsKGhlYWQsIGJvZHksIGZvb3QsIG5vdGUpOwp9CgovKiAtLS0tIFNjZW5hcmlvIDM6IGludGVyYWN0aXZlICh0d28gZmxhdm91cnMpIC0tLS0KICAgUGVyLWNlbGwgcHJlY2lzaW9uIDogZWRpdCB0aGUgbWFyZ2luIG9mIGVycm9yIHBlciBjZWxsIOKGkiBuIGZvbGxvd3MuCiAgIEdsb2JhbCBwcmVjaXNpb24gICA6IGVkaXQgbiBwZXIgY2VsbCBkaXJlY3RseSDihpIgZ2xvYmFsIGVmZmVjdGl2ZSBlcnJvciBmb2xsb3dzLiAqLwpsZXQgczNTdGF0ZSA9IFtdOwoKZnVuY3Rpb24gcmVuZGVyUzMoaW5pdGlhbD1mYWxzZSl7CiAgY29uc3QgbSA9IE1PREVMOwogIGNvbnN0IGdsb2JhbE1vZGUgPSBtLmdsb2JhbDsKCiAgaWYoaW5pdGlhbCl7CiAgICBzM1N0YXRlID0gZ2xvYmFsTW9kZQogICAgICA\/IG0uczEubWFwKGMgPT4gTWF0aC5tYXgoMSwgYy5uKSkgLyogc3RhcnQgZnJvbSBwcm9wb3J0aW9uYWwgYWxsb2NhdGlvbiAqLwogICAgICA6IG0uY2VsbHMubWFwKCgpID0+ICsobS5nRSoxMDApLnRvRml4ZWQoMSkpOyAvKiBzdGFydCBmcm9tIHRhcmdldCBlcnJvciAqLwogIH0KCiAgY29uc3QgbnMgPSBnbG9iYWxNb2RlCiAgICA\/IHMzU3RhdGUubWFwKG4gPT4gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChuKSkpCiAgICA6IHMzU3RhdGUubWFwKGUgPT4gc2FtcGxlU2l6ZShNYXRoLm1heCgwLjUsIGUpLzEwMCkpOwogIGNvbnN0IHRvdGFsID0gbnMucmVkdWNlKChhLGIpID0+IGErYiwgMCk7CgogIGNvbnN0IHJvd3MgPSBtLmNlbGxzLm1hcCgoYyxpKSA9PiB7CiAgICBjb25zdCBzU2hhcmUgPSBuc1tpXS90b3RhbDsKICAgIHJldHVybiB7IC4uLmMsIG46bnNbaV0sIHNTaGFyZSwgd2VpZ2h0OmMuc2hhcmUvc1NoYXJlIH07CiAgfSk7CiAgY29uc3QgZWZmTiA9IGVmZmVjdGl2ZU4ocm93cyk7CiAgY29uc3QgZ0VmZiA9IG1hcmdpbk9mKGVmZk4pLnRvRml4ZWQoMSk7CgogIGNvbnN0IG5vdGUgPSBgPGRpdiBjbGFzcz0ic2Nlbm5vdGUiPjxzcGFuIGNsYXNzPSJ0YWciPlMzPC9zcGFuPgogICAgPGI+RXhwZXJ0IG1vZGUg4oCUIHNtYXJ0IHRyYWRlLW9mZnMuPC9iPgogICAgJHtnbG9iYWxNb2RlCiAgICAgID8gYEVkaXQgPGI+bjwvYj4gY2VsbC1ieS1jZWxsIChib29zdCBzdHJhdGVnaWMgdGFyZ2V0cywgdHJpbSB0aGUgcmVzdCkgYW5kIHdhdGNoIHRoZSB3ZWlnaHRzIGFuZCB0aGUKICAgICAgICAgPHNwYW4gZGF0YS10aXA9IiR7VElQUy5lZmZOfSIgdGFiaW5kZXg9IjAiPmVmZmVjdGl2ZSBOPC9zcGFuPiByZS1iYWxhbmNlLiBDdXJyZW50IGdsb2JhbCBlcnJvcjogPGI+wrEke2dFZmZ9JTwvYj4gb24gZWZmZWN0aXZlIE4gPSAke2ZtdChlZmZOKX0uYAogICAgICA6IGBSZWxheCB0aGUgbWFyZ2luIG9mIGVycm9yIG9uIHNlY29uZGFyeSBjZWxscywga2VlcCBpdCB0aWdodCBvbiBzdHJhdGVnaWMgb25lcywgYW5kIHdhdGNoIE4gYW5kIHRoZQogICAgICAgICB3ZWlnaHRzIHJlLWJhbGFuY2UgaW5zdGFudGx5LiBHbG9iYWwgZXJyb3I6IMKxJHtnRWZmfSUgb24gPHNwYW4gZGF0YS10aXA9IiR7VElQUy5lZmZOfSIgdGFiaW5kZXg9IjAiPmVmZmVjdGl2ZSBOID0gJHtmbXQoZWZmTil9PC9zcGFuPi5gfTwvZGl2PmA7CgogIGNvbnN0IGVkaXRDb2wgPSBnbG9iYWxNb2RlCiAgICA\/IGA8dGg+PHNwYW4gZGF0YS10aXA9IlR5cGUgdGhlIG51bWJlciBvZiBpbnRlcnZpZXdzIHlvdSBwbGFuIGZvciBUSElTIGNlbGwuIE1vcmUgbiBvbiBzdHJhdGVnaWMgY2VsbHMgPSBmaW5lciByZWFkaW5nIHRoZXJlOyB0aGUgd2VpZ2h0cyByZXBhaXIgdGhlIGdsb2JhbCBzdHJ1Y3R1cmUuIiB0YWJpbmRleD0iMCI+biAoZWRpdCk8L3NwYW4+PC90aD5gCiAgICA6IGA8dGg+PHNwYW4gZGF0YS10aXA9IlR5cGUgeW91ciBhY2NlcHRlZCBtYXJnaW4gb2YgZXJyb3IgZm9yIFRISVMgY2VsbCBvbmx5LiBCaWdnZXIgZXJyb3IgPSBmZXdlciBpbnRlcnZpZXdzID0gbG93ZXIgY29zdC4iIHRhYmluZGV4PSIwIj5FcnJvciAlIChlZGl0KTwvc3Bhbj48L3RoPmA7CgogIGNvbnN0IGhlYWQgPSBgPHRoPkNyb3NzLXF1b3RhIGNlbGw8L3RoPgogICAgPHRoPjxzcGFuIGRhdGEtdGlwPSIke1RJUFMuc2hhcmV9IiB0YWJpbmRleD0iMCI+UG9wLiAlPC9zcGFuPjwvdGg+CiAgICAke2VkaXRDb2x9CiAgICAke2dsb2JhbE1vZGUgPyBgPHRoPjxzcGFuIGRhdGEtdGlwPSIke1RJUFMuZXJyfSIgdGFiaW5kZXg9IjAiPkNlbGwgZXJyb3I8L3NwYW4+PC90aD5gIDogYDx0aD48c3BhbiBkYXRhLXRpcD0iJHtUSVBTLm59IiB0YWJpbmRleD0iMCI+SW50ZXJ2aWV3cyAobik8L3NwYW4+PC90aD5gfQogICAgPHRoPlNhbXBsZSAlPC90aD4KICAgIDx0aD48c3BhbiBkYXRhLXRpcD0iJHtUSVBTLndlaWdodH0iIHRhYmluZGV4PSIwIj5XZWlnaHQ8L3NwYW4+PC90aD5gOwoKICBjb25zdCBib2R5ID0gcm93cy5tYXAoKGMsaSkgPT4gewogICAgY29uc3QgZXh0ID0gYy53ZWlnaHQgPCAwLjQgfHwgYy53ZWlnaHQgPiAyLjA7CiAgICBjb25zdCBpbnB1dCA9IGdsb2JhbE1vZGUKICAgICAgPyBgPGlucHV0IGNsYXNzPSJuY2VsbCIgdHlwZT0ibnVtYmVyIiBkYXRhLWk9IiR7aX0iIHZhbHVlPSIke25zW2ldfSIgbWluPSIxIiBzdGVwPSIxIiBhcmlhLWxhYmVsPSJJbnRlcnZpZXdzIGZvciAke2MubGFiZWx9Ij5gCiAgICAgIDogYDxpbnB1dCBjbGFzcz0ibWVyciIgdHlwZT0ibnVtYmVyIiBkYXRhLWk9IiR7aX0iIHZhbHVlPSIke3MzU3RhdGVbaV19IiBtaW49IjAuNSIgbWF4PSIyMCIgc3RlcD0iMC41IiBhcmlhLWxhYmVsPSJNYXJnaW4gb2YgZXJyb3IgZm9yICR7Yy5sYWJlbH0iPmA7CiAgICBjb25zdCB0aGlyZCA9IGdsb2JhbE1vZGUgPyBgwrEke21hcmdpbk9mKGMubikudG9GaXhlZCgxKX0lYCA6IGZtdChjLm4pOwogICAgcmV0dXJuIGA8dHI+PHRkPiR7Yy5sYWJlbH08L3RkPjx0ZD4ke3BjdChjLnNoYXJlKX08L3RkPgogICAgICA8dGQ+JHtpbnB1dH08L3RkPjx0ZD4ke3RoaXJkfTwvdGQ+PHRkPiR7cGN0KGMuc1NoYXJlKX08L3RkPgogICAgICA8dGQ+PHNwYW4gY2xhc3M9IiR7ZXh0PyJ3LWV4dHJlbWUiOiIifSIgJHtleHQ\/YGRhdGEtdGlwPSJFeHRyZW1lIHdlaWdodCAoPDAuNDAwIG9yID4yLjAwMCk6IGEgZmV3IHJlc3BvbmRlbnRzIHdpbGwgY2FycnkgYSBodWdlIHNoYXJlIG9mIHRoZSByZXN1bHQg4oCUIGhpZ2ggcmlzayBvZiBkYXRhIGRpc3RvcnRpb24gYW5kIHVuc3RhYmxlIGVzdGltYXRlcy4iIHRhYmluZGV4PSIwImA6IiJ9PiR7Yy53ZWlnaHQudG9GaXhlZCgzKX08L3NwYW4+PC90ZD48L3RyPmA7CiAgfSkuam9pbigiIik7CgogIGNvbnN0IGZvb3QgPSBgPHRkPlRPVEFMIFNBTVBMRTwvdGQ+PHRkPjEwMC4wJTwvdGQ+PHRkPjwvdGQ+PHRkPk4gPSAke2ZtdCh0b3RhbCl9PC90ZD48dGQ+MTAwLjAlPC90ZD48dGQ+wrEke2dFZmZ9JSBnbG9iLjwvdGQ+YDsKCiAgY29uc3QgZ3VhcmRyYWlsID0gYDxkaXYgY2xhc3M9Imd1YXJkcmFpbCI+PGI+QnVkZ2V0IGd1YXJkcmFpbDo8L2I+IGV4YWN0IHByaWNpbmcgdmFyaWVzIGJ5IGNvdW50cnksIG1ldGhvZG9sb2d5IGFuZCBpbmNpZGVuY2UgcmF0ZSDigJQKICAgIHlvdSBkZWNpZGUgd2hldGhlciBOID0gJHtmbXQodG90YWwpfSBmaXRzIHlvdXIgYnVkZ2V0LiBJZiBpdCBkb2Vzbid0OgogICAgJHtnbG9iYWxNb2RlCiAgICAgID8gInRyaW0gbiBvbiBsb3ctc3Rha2VzIGNlbGxzICh0aGUgd2VpZ2h0cyBrZWVwIHRoZSBnbG9iYWwgcmVhZGluZyB2YWxpZCDigJQgYnV0IHdhdGNoIHRoZSBlZmZlY3RpdmUgTikuIgogICAgICA6ICJ3aWRlbiB0aGUgZXJyb3Igb24gbG93LXN0YWtlcyBjZWxscywgb3IgZml4IGhhcmQgcXVvdGEgY2FwcywgdG8gYXZvaWQgY29zdCBleHBsb3Npb25zIHdoaWxlIHByb3RlY3RpbmcgcHJlY2lzaW9uIHdoZXJlIGl0IHRydWx5IG1hdHRlcnMuIn08L2Rpdj5gOwoKICAkKCIjcGFuZS1zMyIpLmlubmVySFRNTCA9IHRhYmxlU2hlbGwoaGVhZCwgYm9keSwgZm9vdCwgbm90ZSwgZ3VhcmRyYWlsKTsKICByZW5kZXJDb21wYXJlKHRvdGFsKTsKCiAgJCQoIiNwYW5lLXMzIC5tZXJyLCAjcGFuZS1zMyAubmNlbGwiKS5mb3JFYWNoKGlucCA9PiBpbnAuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBlID0+IHsKICAgIGNvbnN0IGkgPSArZS50YXJnZXQuZGF0YXNldC5pOwogICAgY29uc3QgdiA9ICtlLnRhcmdldC52YWx1ZTsKICAgIGlmKGdsb2JhbE1vZGUpeyBpZighdiB8fCB2IDwgMSkgcmV0dXJuOyBzM1N0YXRlW2ldID0gdjsgfQogICAgZWxzZSB7IGlmKCF2IHx8IHYgPCAwLjUpIHJldHVybjsgczNTdGF0ZVtpXSA9IE1hdGgubWluKDIwLCB2KTsgfQogICAgY29uc3QgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZS50YXJnZXQ7CiAgICBjb25zdCBwb3MgPSBhY3RpdmUgPyBlLnRhcmdldC5zZWxlY3Rpb25TdGFydCA6IG51bGw7CiAgICByZW5kZXJTMyhmYWxzZSk7CiAgICBpZihhY3RpdmUpewogICAgICBjb25zdCBzZWwgPSBnbG9iYWxNb2RlID8gIi5uY2VsbCIgOiAiLm1lcnIiOwogICAgICBjb25zdCBhZ2FpbiA9ICQoYCNwYW5lLXMzICR7c2VsfVtkYXRhLWk9IiR7aX0iXWApOwogICAgICBhZ2Fpbi5mb2N1cygpOwogICAgICB0cnl7IGFnYWluLnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTsgfWNhdGNoKF8pe30KICAgIH0KICB9KSk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLSA0IMK3IE9yY2hlc3RyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tICovCmxldCBnZW5lcmF0ZWQgPSBmYWxzZTsgLyogb25jZSB0cnVlLCB0aGUgZGFzaGJvYXJkIHN0YXlzIGxpdmU6IGFueSBjb25maWcgY2hhbmdlIHJlLXJ1bnMgZXZlcnl0aGluZyAqLwoKZnVuY3Rpb24gZ2VuZXJhdGUoKXsKICBnZW5lcmF0ZWQgPSB0cnVlOwogIGNvbXB1dGVNb2RlbCgpOwogICQoIiNlbXB0eVJlY2FwIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAkKCIjcmVjYXBXcmFwIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAkKCIjZW1wdHlPdXQiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICQoIiNvdXRXcmFwIikuY2xhc3NMaXN0LmFkZCgibGl2ZSIpOwogIHJlbmRlcktQSXMoKTsKICByZW5kZXJCYW5uZXIoKTsKCiAgaWYoTU9ERUwuc2ltcGxlKXsKICAgICQoIiN0YWJzQmFyIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICQoIiN0YWJXcmFwIikuY2xhc3NMaXN0LmFkZCgibm9yb3VuZCIpOwogICAgc2hvd1BhbmUoInMxIik7CiAgICByZW5kZXJTaW1wbGVQbGFuKCk7CiAgICByZW5kZXJDb21wYXJlKCk7CiAgfSBlbHNlIHsKICAgICQoIiN0YWJzQmFyIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICQoIiN0YWJXcmFwIikuY2xhc3NMaXN0LnJlbW92ZSgibm9yb3VuZCIpOwogICAgcmVuZGVyUzEoKTsKICAgIHJlbmRlclMyKCk7CiAgICByZW5kZXJTMyh0cnVlKTsgLyogYWxzbyByZW5kZXJzIHRoZSBjb21wYXJpc29uIGJhcnMgKi8KICB9Cn0KCmZ1bmN0aW9uIHNob3dQYW5lKGlkKXsKICAkJCgiLnBhbmUiKS5mb3JFYWNoKHAgPT4gcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiKTsKICAkKCIjcGFuZS0iICsgaWQpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgJCQoIi50YWIiKS5mb3JFYWNoKHggPT4gewogICAgY29uc3Qgb24gPSB4LmRhdGFzZXQudCA9PT0gaWQ7CiAgICB4LmNsYXNzTGlzdC50b2dnbGUoIm9uIiwgb24pOwogICAgeC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCBvbiA\/ICJ0cnVlIiA6ICJmYWxzZSIpOwogIH0pOwp9CgokJCgiLnRhYiIpLmZvckVhY2godCA9PiB0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc2hvd1BhbmUodC5kYXRhc2V0LnQpKSk7CiQoIiNnb0J0biIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZ2VuZXJhdGUpOwoKLyogTGl2ZSBzeW5jOiBhZnRlciB0aGUgZmlyc3QgZ2VuZXJhdGlvbiwgQU5ZIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlLXJ1bnMgdGhlCiAgIHdob2xlIGRhc2hib2FyZCwgc28gdGhlIG91dHB1dCBjYW4gbmV2ZXIgYmUgc3RhbGUgKGUuZy4gc3dpdGNoaW5nCiAgIHNpbXBsZSDihpIgY3Jvc3MgcXVvdGFzIGluc3RhbnRseSByZXN0b3JlcyB0aGUgMyBzY2VuYXJpbyB0YWJzKS4gKi8KZnVuY3Rpb24gcmVnZW5JZkxpdmUoKXsgaWYoZ2VuZXJhdGVkKSBnZW5lcmF0ZSgpOyB9CgokKCIjblZhcnMiKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoKSA9PiB7IGJ1aWxkVmFyQmxvY2tzKCk7IHJlZ2VuSWZMaXZlKCk7IH0pOwokKCIjbWV0aG9kIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKCkgPT4gewogIHJlZnJlc2hNZXRob2ROb3RlKCk7IHJlZnJlc2hWYXJPcHRpb25zKCk7IGJ1aWxkVmFyQmxvY2tzKCk7IHJlZ2VuSWZMaXZlKCk7Cn0pOwokKCIjcHJlY2lzaW9uIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgcmVnZW5JZkxpdmUpOwokKCIjZ0VyciIpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgcmVnZW5JZkxpdmUpOwovKiB2YXJpYWJsZSBuYW1lcywgY2xhc3MgY291bnRzLCBjbGFzcyBuYW1lcyBhbmQgd2VpZ2h0cyAoZGVsZWdhdGVkKSAqLwokKCIjdmFyc0hvc3QiKS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICByZWdlbklmTGl2ZSk7CiQoIiN2YXJzSG9zdCIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHJlZ2VuSWZMaXZlKTsKCnJlZnJlc2hNZXRob2ROb3RlKCk7CnJlZnJlc2hWYXJPcHRpb25zKCk7CmJ1aWxkVmFyQmxvY2tzKCk7Cg==\"))));<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2190 Back to Free Tools H-in-Q \u00b7 Sample Structure &amp; Quotas Simulator Precision \u00b7 Feasibility \u00b7 Budget \u2014 see the trade-offs before the fieldwork starts. 1Input \u00b7 Configuration Quota methodCross quotas (interlocked cells)Simple quotas (marginal, up to 5 vars) Precision targetPer sub-target (each cell \/ class readable)Global sample only (total-level reading) Quota variables Margin of&#8230;<\/p>","protected":false},"author":10,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-7523","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/pages\/7523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/comments?post=7523"}],"version-history":[{"count":4,"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/pages\/7523\/revisions"}],"predecessor-version":[{"id":7528,"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/pages\/7523\/revisions\/7528"}],"wp:attachment":[{"href":"http:\/\/www.h-in-q.com\/es\/wp-json\/wp\/v2\/media?parent=7523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}