{"id":2906,"date":"2026-10-30T12:52:35","date_gmt":"2026-10-30T11:52:35","guid":{"rendered":"https:\/\/parametricsolutions.de\/playground\/"},"modified":"2026-10-30T14:05:21","modified_gmt":"2026-10-30T13:05:21","slug":"playground","status":"publish","type":"page","link":"https:\/\/parametricsolutions.de\/de\/playground\/","title":{"rendered":"Playground"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Playground: Automation to Try Out<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Every demo here runs in your browser and shows the same idea: a few rules generate results that would otherwise be made by hand. Pick one and try it out.<\/p>\n\n\n<style>\n.ps-play__tiles{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:0 0 28px}\n.ps-play__tile{width:100%;min-width:0;height:auto!important;white-space:normal!important;display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:14px!important;font:inherit;text-align:left;color:#2e2e2e!important;background:#fff!important;border:1px solid #cfcfcf!important;border-radius:0!important;box-shadow:none!important;cursor:pointer}\n.ps-play__tile svg{width:40px;height:40px;fill:none;stroke:currentColor;stroke-width:2}\n.ps-play__tile strong{font-size:16px;line-height:1.25;font-weight:700;color:inherit}\n.ps-play__tile span{overflow-wrap:anywhere;font-size:13px;line-height:1.35;color:inherit;opacity:.75}\n.ps-play__tile:hover{border-color:#32373c!important}\n.ps-play__tile[aria-pressed=true]{color:#fff!important;background:#32373c!important;border-color:#32373c!important}\n.ps-play__text{margin:0 0 18px;max-width:760px}\n.ps-play__more{margin:16px 0 0}\n.ps-play__more a{text-decoration:underline}\n.ps-play__demo[hidden]{display:none}\n.ps-play__tiles[data-lazy=\"1\"] .ps-play__tile{position:relative}\n.ps-play__demo.is-loading{min-height:240px;background:#f4f4f2}\n.ps-play__tiles[data-lazy=\"1\"] .ps-play__tile::after{content:\"+\";position:absolute;top:10px;right:14px;font-size:22px;font-weight:400;line-height:1}\n.ps-play__tiles[data-lazy=\"1\"] .ps-play__tile[aria-pressed=true]::after{content:\"\\2212\"}\n@media (max-width:1000px){.ps-play__tiles{grid-template-columns:repeat(2,minmax(0,1fr))}.ps-play__tile:first-child{grid-column:1 \/ -1}}\n.ps-play-banner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px 24px;margin:0 0 32px;padding:22px 24px;background:#f4f4f2}\n.ps-play-banner strong{display:block;font-size:20px;line-height:1.25;color:#111}\n.ps-play-banner span{font-size:15px}\n.ps-play-banner a{padding:12px 20px;font-weight:500;color:#fff!important;background:#32373c;text-decoration:none!important}\n<\/style><div class=\"ps-play__tiles\" data-lazy=\"0\"><button type=\"button\" class=\"ps-play__tile\" data-d=\"floorplan\" aria-pressed=\"false\"><svg viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M8 10h32v28H8zM8 24h18M26 10v28\"\/><\/svg><strong>Floor Plan Generator<\/strong><span>Divide a floor in seconds.<\/span><\/button><button type=\"button\" class=\"ps-play__tile\" data-d=\"robot\" aria-pressed=\"false\"><svg viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M6 40h20M12 40l3-12 12-8 9 6-5 8\"\/><circle cx=\"15\" cy=\"28\" r=\"2.5\"\/><circle cx=\"27\" cy=\"20\" r=\"2.5\"\/><\/svg><strong>Multi-Axis Robot<\/strong><span>Draw a path and watch six axes print it.<\/span><\/button><button type=\"button\" class=\"ps-play__tile\" data-d=\"parts\" aria-pressed=\"false\"><svg viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M8 38h32M12 38V20h12v18M28 38V26h10v12\"\/><\/svg><strong>Part Generator<\/strong><span>Many variants, one script.<\/span><\/button><button type=\"button\" class=\"ps-play__tile\" data-d=\"lamella\" aria-pressed=\"false\"><svg viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path d=\"M10 10v28M16 10v28M22 10v28M28 10v28M34 10v28\"\/><\/svg><strong>Lamella Front<\/strong><span>Width, height and depth drive every part.<\/span><\/button><button type=\"button\" class=\"ps-play__tile\" data-d=\"facade\" aria-pressed=\"false\"><svg viewBox=\"0 0 48 48\" aria-hidden=\"true\"><circle cx=\"36\" cy=\"12\" r=\"4\"\/><path d=\"M8 40V16M15 40V16M22 40V16M29 40V24\"\/><\/svg><strong>Fa\u00e7ade Section<\/strong><span>Shape the fins, see every part.<\/span><\/button><\/div><section class=\"ps-play__demo\" id=\"ps-play-floorplan\" hidden><p class=\"ps-play__text\">Layout, area schedule and warnings update instantly, so you can compare variants instead of sketching each one.<\/p><style>\n.ps-conf { container-type: inline-size; font-family: inherit; color: #2e2e2e; }\n.ps-conf * { box-sizing: border-box; }\n.ps-conf__grid { display: grid; grid-template-columns: 1fr; border: 1px solid #e2e2e2; }\n.ps-conf__stage { position: relative; aspect-ratio: 4 \/ 3; background: #f4f4f2; touch-action: pan-y; cursor: grab; overflow: hidden; }\n.ps-conf__stage:active { cursor: grabbing; }\n.ps-conf__stage canvas { display: block; width: 100%; height: 100%; }\n.ps-conf__hint { position: absolute; left: 16px; bottom: 12px; font-size: 13px; color: #777; pointer-events: none; }\n.ps-conf__panel { padding: 20px; background: #fff; }\n.ps-conf__title { margin: 0 0 16px; font-size: 18px; line-height: 1.3; font-weight: 700; color: #111; }\n.ps-conf__row { margin-bottom: 13px; }\n.ps-conf__row label { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; line-height: 1.3; margin-bottom: 5px; }\n.ps-conf__row output { font-weight: 500; color: #111; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.ps-conf input[type=range] { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 24px !important; margin: 0; padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; cursor: pointer; --p: 50%; }\n.ps-conf input[type=range]::-webkit-slider-runnable-track { height: 2px; background: linear-gradient(to right, #32373c var(--p), #cfcfcf var(--p)); }\n.ps-conf input[type=range]::-moz-range-track { height: 2px; background: #cfcfcf; }\n.ps-conf input[type=range]::-moz-range-progress { height: 2px; background: #32373c; }\n.ps-conf input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 18px; margin-top: -8px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]::-moz-range-thumb { width: 14px; height: 18px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]:focus-visible { outline: 2px solid #32373c; outline-offset: 2px; }\n.ps-conf__wood { display: flex; gap: 6px; margin: 16px 0; }\n.ps-conf__wood button { flex: 1; min-height: 40px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__wood button[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 0 0 16px; padding: 14px 0; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-conf__stats div { min-width: 0; }\n.ps-conf__stats dt { font-size: 13px; line-height: 1.3; color: #777; }\n.ps-conf__stats dd { margin: 0; font-size: 17px; font-weight: 500; color: #111; font-variant-numeric: tabular-nums; }\n.ps-conf__csv { width: 100%; min-height: 46px; padding: 10px 16px; font: inherit; font-size: 16px; font-weight: 500; color: #fff; background: #32373c; border: 0; border-radius: 0; cursor: pointer; }\n.ps-conf__csv:hover { background: #111; }\n.ps-conf__csvlink { display: block; width: 100%; margin-top: 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; text-decoration: underline; background: none; border: 0; cursor: pointer; }\n.ps-conf__dim { position: absolute; left: 0; top: 0; padding: 1px 5px; font-size: 12px; line-height: 1.4; font-weight: 500; color: #111; background: rgba(244,244,242,.92); white-space: nowrap; pointer-events: none; font-variant-numeric: tabular-nums; }\n.ps-conf__dimtoggle { position: absolute; right: 12px; top: 12px; z-index: 2; min-height: 34px; padding: 4px 12px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__dimtoggle[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__error { padding: 24px; font-size: 15px; }\n@container (min-width: 760px) {\n.ps-conf__grid { grid-template-columns: minmax(0, 1fr) 320px; }\n.ps-conf__stage { aspect-ratio: auto; min-height: 620px; }\n.ps-conf__panel { border-left: 1px solid #e2e2e2; }\n}\n<\/style>\n<style>\n.ps-plan .ps-conf__stage { background: #fff; touch-action: auto; cursor: default; }\n.ps-plan .ps-conf__stage canvas { position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: block; }\n.ps-plan .ps-plan__intro { margin: -6px 0 14px; font-size: 14px; line-height: 1.4; color: #555; }\n.ps-plan .ps-plan__how { margin: 0 0 14px; padding: 0; list-style: none; font-size: 13px; line-height: 1.35; color: #2e2e2e; }\n.ps-plan .ps-plan__how li { position: relative; margin: 0 0 6px; padding-left: 18px; }\n.ps-plan .ps-plan__how i { position: absolute; left: 1px; top: 3px; width: 9px; height: 9px; background: #fff; border: 2px solid #32373c; box-sizing: border-box; }\n.ps-plan .ps-plan__how li:nth-child(2) i { border-radius: 50%; }\n.ps-plan .ps-plan__how li:nth-child(3) i { background: repeating-linear-gradient(90deg, #32373c 0 1px, #fff 1px 3px); }\n.ps-plan .ps-conf__wood { margin: 0 0 14px; }\n.ps-plan .ps-conf__warn { margin: 0 0 14px; padding: 8px 10px; font-size: 13px; line-height: 1.35; color: #111; background: #f9e4e1; border-left: 3px solid #c8321f; }\n.ps-plan .ps-conf__warn:empty { display: none; }\n.ps-plan .ps-plan__fit { margin: 0 0 14px; padding: 8px 10px; font-size: 13px; line-height: 1.35; color: #111; background: #f4f4f2; }\n.ps-plan .ps-plan__fit:empty { display: none; }\n.ps-plan .ps-plan__best { width: 100%; min-height: 40px; margin: 0 0 14px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #32373c; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-plan__best:hover { color: #fff; background: #32373c; }\n.ps-plan .ps-plan__rules { margin: 0 0 14px; font-size: 12px; line-height: 1.35; color: #777; }\n.ps-plan .ps-plan__meters { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 14px; margin: 0 0 14px; font-size: 12px; color: #2e2e2e; }\n.ps-plan .ps-plan__meters b { float: right; font-weight: 500; }\n.ps-plan .ps-plan__meters i { display: block; height: 4px; margin-top: 3px; background: #e4e4e1; }\n.ps-plan .ps-plan__meters i::after { content: ''; display: block; height: 100%; width: var(--v); background: #32373c; }\n.ps-plan .ps-plan__gbtn[aria-pressed=true] { color: #fff; background: #32373c; }\n.ps-plan .ps-plan__chips { display: flex; gap: 6px; margin: 0 0 8px; }\n.ps-plan .ps-plan__chips button { padding: 3px 8px; font: inherit; font-size: 12px; color: #2e2e2e; background: #fff; border: 1px solid #32373c; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-plan__chips button[aria-pressed=true] { color: #fff; background: #32373c; }\n.ps-plan__thumbs button { position: relative; text-align: left; } .ps-plan__thumbs canvas { display: block; width: 100%; height: auto; } .ps-plan__thumbs span { display: block; margin-top: 4px; font-weight: 700; color: #111; } .ps-plan__thumbs small { display: block; font-size: 11px; color: #666; } .ps-plan__thumbs em { position: absolute; top: 6px; left: 6px; padding: 2px 6px; font-style: normal; font-size: 10px; letter-spacing: .02em; color: #fff; background: #32373c; } .ps-plan__thumbs em.cur { color: #111; background: #e4e4e1; }\n.ps-plan__gbar { position: absolute; left: 12px; bottom: 12px; z-index: 2; display: flex; align-items: center; gap: 6px; } .ps-plan__gbar .ps-plan__gbtn { position: static; } .ps-plan__glab { margin-right: 2px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: #666; } .ps-plan__legend { position: absolute; left: 12px; right: 12px; bottom: 50px; z-index: 2; padding: 6px 10px; font-size: 12px; line-height: 1.35; color: #2e2e2e; background: rgba(255,255,255,.92); border: 1px solid #e4e4e1; } .ps-plan__coremenu { position: absolute; z-index: 4; display: flex; flex-direction: column; gap: 4px; min-width: 150px; padding: 6px; background: rgba(255,255,255,.97); border: 1px solid #e4e4e1; box-shadow: 0 3px 10px rgba(0,0,0,.12); } .ps-plan__coremenu[hidden] { display: none; } .ps-plan__coremenu small { padding: 2px 6px 4px; font-size: 10px; letter-spacing: .04em; text-transform: uppercase; color: #666; } .ps-plan__coremenu button { font: inherit; font-size: 12px; padding: 6px 10px; text-align: left; color: #111; background: #fff; border: 1px solid #d8d8d4; cursor: pointer; } .ps-plan__coremenu button:hover { border-color: #111; } .ps-plan__coremenu button[aria-pressed=true] { color: #fff; background: #111; border-color: #111; } .ps-plan__legend[hidden] { display: none; }\n.ps-plan .ps-plan__thumbs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 0 0 14px; font-size: 11px; color: #555; }\n.ps-plan .ps-plan__thumbs button { padding: 3px; font: inherit; background: #fff; border: 1px solid #d8d8d4; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-plan__thumbs button:hover, .ps-plan .ps-plan__thumbs button[aria-pressed=true] { border-color: #32373c; }\n.ps-plan .ps-plan__thumbs canvas { display: block; width: 100%; height: auto; }\n.ps-plan .ps-plan__thumbs span { display: block; padding-top: 2px; line-height: 1.2; }\n.ps-plan .ps-plan__help { margin: 0 0 16px; font-size: 13px; }\n.ps-plan .ps-plan__help summary { padding: 6px 0; font-weight: 500; color: #2e2e2e; border-bottom: 1px solid #d8d8d4; cursor: pointer; }\n.ps-plan .ps-plan__help .ps-plan__how { margin: 10px 0 0; }\n.ps-plan .ps-plan__how li i.ps-plan__round { border-radius: 50%; background: #32373c; box-shadow: inset 0 0 0 2px #fff; }\n.ps-plan .ps-plan__sub { margin: 16px 0 8px; padding-top: 12px; border-top: 1px solid #e4e4e1; }\n.ps-plan .ps-plan__actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 0 0 4px; }\n.ps-plan .ps-plan__actions button { margin: 0; font-size: 13px; }\n.ps-plan .ps-plan__actions .ps-plan__best:first-child { color: #fff; background: #32373c; }\n.ps-plan .ps-plan__stair { margin-top: 0; }\n.ps-plan .ps-plan__gbtn { position: absolute; left: 12px; bottom: 12px; z-index: 2; min-height: 30px; padding: 4px 10px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #d8d8d4; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-plan__gal .ps-plan__sub { margin-top: 0; }\n.ps-plan .ps-plan__check { margin: 0 0 14px; font-size: 12px; line-height: 1.35; color: #2e2e2e; }\n.ps-plan .ps-plan__check dl { display: grid; grid-template-columns: 1fr auto; gap: 3px 10px; margin: 0; }\n.ps-plan .ps-plan__check dt { margin: 0; font-weight: 400; color: #555; }\n.ps-plan .ps-plan__check dd { margin: 0; font-weight: 500; text-align: right; }\n.ps-plan .ps-plan__check p { margin: 0 0 6px; font-weight: 700; color: #111; }\n.ps-plan [data-g=shape] { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }\n.ps-plan [data-g=shape] button { min-width: 0; margin: 0; padding: 6px 2px; font-size: 13px; }\n.ps-plan [hidden] { display: none !important; }\n.ps-plan .ps-plan__sub { margin: 0 0 6px; font-size: 13px; font-weight: 700; color: #111; }\n.ps-plan .ps-plan__undo { left: 12px; right: auto; }\n.ps-plan .ps-plan__undo:disabled { opacity: .4; }\n.ps-plan .ps-plan__stair { margin-top: -8px; }\n.ps-plan .ps-plan__stair[aria-pressed=true] { color: #fff; background: #32373c; }\n.ps-plan .ps-conf__panel { display: block; }\n.ps-plan .ps-plan__sub { margin: 18px 0 8px; padding: 14px 0 0; border-top: 1px solid #e4e4e1; font-size: 13px; font-weight: 700; color: #111; }\n.ps-plan .ps-conf__wood { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; margin: 0 0 10px; }\n.ps-plan .ps-plan__two { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n.ps-plan .ps-conf__wood button { min-width: 0; min-height: 36px; margin: 0 -1px -1px 0; padding: 4px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #32373c; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-conf__wood button[aria-pressed=true] { position: relative; color: #fff; background: #32373c; }\n.ps-plan .ps-plan__actions { display: grid; grid-template-columns: 1fr; gap: 8px; margin: 14px 0 0; }\n.ps-plan .ps-plan__actions button { margin: 0; min-height: 40px; font-size: 14px; }\n.ps-plan .ps-plan__actions .ps-plan__best:first-child { color: #fff; background: #32373c; }\n.ps-plan .ps-plan__actions .ps-plan__best:first-child:hover { background: #111; }\n.ps-plan .ps-plan__stair { min-height: 34px !important; margin: 0; font-size: 13px !important; }\n.ps-plan .ps-plan__help { margin: 14px 0 0; font-size: 13px; }\n.ps-plan .ps-plan__help summary { padding: 8px 0 0; color: #555; border-top: 1px solid #e4e4e1; cursor: pointer; }\n.ps-plan .ps-plan__help .ps-plan__how { margin: 10px 0 0; }\n.ps-plan .ps-plan__how li i.ps-plan__round { border-radius: 50%; background: #32373c; box-shadow: inset 0 0 0 2px #fff; }\n.ps-plan .ps-conf__dimtoggle, .ps-plan .ps-plan__gbtn { min-height: 32px; padding: 4px 10px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcb; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-plan__gbtn { position: absolute; left: 12px; bottom: 12px; z-index: 2; }\n.ps-plan .ps-plan__gbtn[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-plan .ps-plan__check { overflow-x: auto; }\n.ps-plan .ps-plan__pstate { margin: 0 0 6px; padding: 6px 10px; font-size: 13px; font-weight: 700; color: #111; background: #e9f1e6; border-left: 3px solid #4f7f3a; }\n.ps-plan .ps-plan__pstate[data-st=tol] { background: #f4f0e2; border-color: #b98a1e; }\n.ps-plan .ps-plan__pstate[data-st=part] { background: #f9ebe1; border-color: #c76a00; }\n.ps-plan .ps-plan__pstate[data-st=no] { background: #f9e4e1; border-color: #c8321f; }\n.ps-plan .ps-plan__pstate[data-st=area] { background: #efe9f4; border-color: #7a3ec8; }\n.ps-plan .ps-plan__issues { margin: 0 0 14px; padding-left: 18px; font-size: 12px; line-height: 1.4; color: #2e2e2e; }\n.ps-plan .ps-plan__issues li { margin: 0 0 4px; }\n.ps-plan [data-g=prof] button[aria-pressed=true] { color: #fff; background: #32373c; }\n.ps-plan .ps-plan__alts { width: 100%; margin: 0 0 14px; border-collapse: collapse; font-size: 12px; line-height: 1.3; }\n.ps-plan .ps-plan__alts th { padding: 4px 6px 6px 0; font-weight: 500; color: #666; text-align: left; border-bottom: 1px solid #d8d8d4; }\n.ps-plan .ps-plan__alts td { padding: 6px 6px 6px 0; vertical-align: top; border-bottom: 1px solid #ecece9; }\n.ps-plan .ps-plan__alts td small { display: block; color: #777; }\n.ps-plan .ps-plan__alts tr.is-orig td { color: #666; }\n.ps-plan .ps-plan__alts button { padding: 3px 8px; font: inherit; font-size: 12px; color: #2e2e2e; background: #fff; border: 1px solid #32373c; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-plan__alts button:hover { color: #fff; background: #32373c; }\n.ps-plan .ps-plan__note { margin: 0 0 8px; font-size: 12px; line-height: 1.35; color: #666; }\n.ps-plan .ps-plan__glegend { position: absolute; left: 12px; right: 12px; bottom: 50px; z-index: 2; max-width: 420px; margin: 0; padding: 6px 8px; font-size: 12px; line-height: 1.35; color: #2e2e2e; background: rgba(255,255,255,.92); }\n.ps-plan .ps-plan__under { padding: 18px 20px 20px; background: #fff; border-top: 1px solid #e2e2e2; }\n.ps-plan .ps-plan__head { display: grid; grid-template-columns: 1fr; gap: 12px; margin: 0 0 14px; }\n.ps-plan .ps-plan__head .ps-plan__fit { margin: 0; }\n.ps-plan .ps-plan__head .ps-conf__stats { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px 14px; margin: 0; padding: 0; border: 0; }\n.ps-plan .ps-plan__meters { grid-template-columns: repeat(2, 1fr); }\n.ps-plan .ps-plan__ugrid { display: grid; grid-template-columns: 1fr; gap: 16px 28px; }\n.ps-plan .ps-plan__gal .ps-plan__sub { margin-top: 0; padding-top: 0; border-top: 0; }\n.ps-plan .ps-plan__foot { display: grid; gap: 10px; margin-top: 14px; padding-top: 14px; border-top: 1px solid #e4e4e1; }\n.ps-plan .ps-plan__foot .ps-plan__rules { margin: 0; }\n.ps-plan .ps-conf__csv { width: 100%; min-height: 40px; margin: 0; font: inherit; font-size: 14px; color: #2e2e2e !important; background: #fff !important; border: 1px solid #32373c; border-radius: 0; cursor: pointer; }\n.ps-plan .ps-conf__csv:hover { color: #fff !important; background: #32373c !important; }\n.ps-plan .ps-plan__gbar { position: absolute; left: 12px; bottom: 12px; z-index: 2; display: flex; gap: 6px; }\n.ps-plan .ps-plan__gbar .ps-plan__gbtn { position: static; left: auto; bottom: auto; }\n.ps-plan .ps-plan__how li:first-child i { width: 8px; height: 8px; left: 2px; top: 4px; border-width: 1.5px; transform: rotate(45deg); }\n.ps-plan [data-g=core] button, .ps-plan [data-g=rot] button { font-size: 12px; padding: 4px 3px; hyphens: manual; overflow-wrap: anywhere; }\n.ps-plan .ps-plan__imgrow { margin: 0 0 6px; }\n.ps-plan .ps-plan__imgrow .ps-plan__best { min-height: 34px; margin: 0; font-size: 13px; }\n.ps-plan .ps-plan__imgrows { margin: 0 0 8px; }\n.ps-plan .ps-plan__imgnote { margin: 0 0 10px; font-size: 12px; line-height: 1.35; color: #666; }\n.ps-plan .ps-plan__intro { margin: -6px 0 0; }\n.ps-plan .ps-plan__h4 { margin: 14px 0 6px; font-size: 12px; font-weight: 700; color: #111; }\n.ps-plan [data-g=shape] button:last-child { grid-column: 1 \/ -1; }\n.ps-plan .ps-plan__more { margin: 14px 0 0; font-size: 13px; border-top: 1px solid #e4e4e1; }\n.ps-plan .ps-plan__more > summary { padding: 10px 0 0; font-weight: 500; color: #2e2e2e; cursor: pointer; }\n.ps-plan .ps-plan__more .ps-plan__how { margin: 10px 0 0; }\n.ps-plan .ps-plan__more .ps-plan__check { margin: 10px 0 0; }\n.ps-plan .ps-plan__check .ps-plan__h4 { margin: 14px 0 6px; font-size: 12px; }\n.ps-plan .ps-plan__stair { width: 100%; }\n.ps-plan .ps-plan__imgrow { margin: 0; }\n.ps-plan .ps-plan__fit { margin: 0 0 14px; font-weight: 500; border-left: 3px solid #b98a1e; background: #f4f0e2; }\n.ps-plan .ps-plan__fit[data-v=good] { border-color: #4f7f3a; background: #e9f1e6; }\n.ps-plan .ps-plan__fit[data-v=bad] { border-color: #c8321f; background: #f9e4e1; }\n.ps-plan .ps-plan__fit[data-v=hint] { border-color: #32373c; background: #f4f4f2; }\n.ps-plan .ps-plan__under .ps-conf__stats { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px 14px; margin: 0 0 14px; padding: 0; border: 0; }\n.ps-plan .ps-conf__warn { font-size: 12px; }\n.ps-plan .ps-plan__altbox:empty { display: none; }\n.ps-plan .ps-plan__altbox .ps-plan__sub { margin-top: 0; padding-top: 0; border-top: 0; }\n.ps-plan .ps-plan__fold > summary { display: flex; justify-content: space-between; align-items: center; min-height: 46px; margin: 0 0 4px; padding: 0 2px; font-size: 15px; font-weight: 700; color: #111; list-style: none; cursor: pointer; border-top: 1px solid #d8d8d4; border-bottom: 1px solid #d8d8d4; }\n.ps-plan .ps-plan__fold > summary::-webkit-details-marker { display: none; }\n.ps-plan .ps-plan__fold > summary::after { content: \"+\"; font-size: 22px; font-weight: 400; line-height: 1; }\n.ps-plan .ps-plan__fold[open] > summary::after { content: \"\\2212\"; }\n.ps-plan .ps-plan__gal[open] > summary { margin-bottom: 10px; }\n.ps-plan .ps-plan__thumbs { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); margin-bottom: 4px; }\n.ps-plan .ps-plan__foot { grid-template-columns: 1fr 1fr; align-items: center; }\n.ps-plan .ps-plan__foot .ps-plan__rules { grid-column: 1 \/ -1; }\n.ps-plan .ps-conf__csv { min-height: 34px; font-size: 13px; }\n@container (min-width: 760px) { .ps-plan .ps-plan__fold > summary { display: none; } .ps-plan .ps-plan__gal .ps-plan__fold > summary { display: block; min-height: 0; margin: 0 0 8px; padding: 0; font-size: 13px; border: 0; pointer-events: none; } .ps-plan .ps-plan__gal .ps-plan__fold > summary::after { content: none; } .ps-plan .ps-conf__grid { background: #f4f4f2; grid-template-rows: auto 1fr; } .ps-plan .ps-conf__stage { height: 560px; min-height: 0; grid-column: 1; grid-row: 1; } .ps-plan .ps-conf__panel { grid-column: 2; grid-row: 1 \/ 3; background: #fff; } .ps-plan .ps-plan__under { grid-column: 1; grid-row: 2; } .ps-plan .ps-plan__under .ps-conf__stats { grid-template-columns: repeat(4, 1fr); } .ps-plan .ps-plan__meters { grid-template-columns: repeat(4, 1fr); } .ps-plan .ps-plan__foot { grid-template-columns: minmax(0, 1fr) 90px 90px; } .ps-plan .ps-plan__foot .ps-plan__rules { grid-column: auto; } }\n<\/style>\n<div class=\"ps-conf ps-plan\" id=\"ps-plan\">\n<div class=\"ps-conf__grid\">\n<div class=\"ps-conf__stage\"><canvas><\/canvas><button type=\"button\" class=\"ps-conf__dimtoggle\" aria-pressed=\"false\" data-t=\"regen\"><\/button><div class=\"ps-plan__legend\" data-no-translation hidden><\/div><div class=\"ps-plan__coremenu\" data-no-translation hidden><\/div><div class=\"ps-plan__gbar\"><button type=\"button\" class=\"ps-plan__gbtn\" aria-pressed=\"false\" data-t=\"graphBtn\"><\/button><button type=\"button\" class=\"ps-plan__gbtn ps-plan__wbtn\" aria-pressed=\"false\" data-t=\"walkBtn\"><\/button><\/div><button type=\"button\" class=\"ps-conf__dimtoggle ps-plan__undo\" aria-pressed=\"false\" data-t=\"undo\" disabled><\/button><\/div>\n<div class=\"ps-conf__panel\">\n<h3 class=\"ps-conf__title\" data-t=\"title\"><\/h3>\n<p class=\"ps-plan__intro\" data-t=\"intro\"><\/p>\n<details class=\"ps-plan__fold\" open><summary data-t=\"setHead\"><\/summary>\n<p class=\"ps-plan__sub\" data-t=\"secBuild\"><\/p>\n<div class=\"ps-conf__wood\" data-g=\"shape\" role=\"group\"><\/div>\n<div class=\"ps-conf__wood ps-plan__two\" data-g=\"floor\" role=\"group\"><\/div>\n<div class=\"ps-plan__kinkbox\" hidden><p class=\"ps-plan__h4\" data-t=\"jointHead\"><\/p><div class=\"ps-plan__kinkrows\" data-no-translation><\/div><div class=\"ps-conf__wood ps-plan__two\" data-g=\"joint\" role=\"group\"><\/div><\/div>\n<p class=\"ps-plan__sub\" data-t=\"secProg\"><\/p>\n<div class=\"ps-conf__wood ps-plan__two\" data-g=\"mode\" role=\"group\"><\/div>\n<div class=\"ps-conf__sliders\" data-no-translation><\/div>\n<div class=\"ps-plan__actions\"><button type=\"button\" class=\"ps-plan__best\" data-t=\"best\"><\/button><\/div>\n<details class=\"ps-plan__more ps-plan__gal\" data-no-translation hidden><summary data-t=\"galHead\"><\/summary><div class=\"ps-plan__chips\"><\/div><div class=\"ps-plan__thumbs\"><\/div><\/details>\n<details class=\"ps-plan__more\"><summary data-t=\"moreHead\"><\/summary>\n<p class=\"ps-plan__h4\" data-t=\"coreMenu\"><\/p>\n<div class=\"ps-conf__wood\" data-g=\"core\" role=\"group\"><\/div>\n<div class=\"ps-conf__wood\" data-g=\"rot\" role=\"group\"><\/div>\n<button type=\"button\" class=\"ps-plan__best ps-plan__stair\" aria-pressed=\"false\" data-t=\"stair2\"><\/button>\n<p class=\"ps-plan__h4\" data-t=\"secCorr\"><\/p>\n<div class=\"ps-plan__moresl\" data-no-translation><\/div>\n<div class=\"ps-plan__exist\"><p class=\"ps-plan__h4\" data-t=\"secExist\"><\/p><div class=\"ps-conf__wood ps-plan__two\" data-g=\"exist\" role=\"group\"><button type=\"button\" data-k=\"block\" data-t=\"blockBtn\"><\/button><button type=\"button\" data-k=\"win\" aria-pressed=\"false\" data-t=\"winBtn\"><\/button><\/div><div class=\"ps-plan__imgrow\"><button type=\"button\" class=\"ps-plan__best\" data-t=\"imgBtn\"><\/button><input type=\"file\" accept=\"image\/*\" hidden><\/div><div class=\"ps-plan__imgrows\" data-no-translation hidden><\/div><\/div>\n<p class=\"ps-plan__h4\" data-t=\"profHead\"><\/p>\n<div class=\"ps-conf__wood ps-plan__two\" data-g=\"prof\" role=\"group\"><\/div>\n<\/details>\n<details class=\"ps-plan__more\"><summary data-t=\"howHead\"><\/summary><ul class=\"ps-plan__how\"><li><i><\/i><span data-t=\"how1\"><\/span><\/li><li><i><\/i><span data-t=\"how2\"><\/span><\/li><li><i><\/i><span data-t=\"how3\"><\/span><\/li><li><i class=\"ps-plan__round\"><\/i><span data-t=\"how4\"><\/span><\/li><li><i class=\"ps-plan__round\"><\/i><span data-t=\"how5\"><\/span><\/li><li><i class=\"ps-plan__round\"><\/i><span data-t=\"how8\"><\/span><\/li><\/ul><\/details>\n<\/details>\n<\/div>\n<div class=\"ps-plan__under\">\n<p class=\"ps-plan__fit\" aria-live=\"polite\" data-no-translation><\/p>\n<dl class=\"ps-conf__stats\" data-no-translation><\/dl>\n<div class=\"ps-plan__meters\" data-no-translation><\/div>\n<p class=\"ps-conf__warn\" aria-live=\"polite\" data-no-translation><\/p>\n<div class=\"ps-plan__altbox\" data-no-translation><\/div>\n<details class=\"ps-plan__more\"><summary data-t=\"detailHead\"><\/summary><div class=\"ps-plan__check\" data-no-translation><\/div><\/details>\n<div class=\"ps-plan__foot\"><p class=\"ps-plan__rules\" data-t=\"rules\"><\/p><button type=\"button\" class=\"ps-conf__csv\" data-t=\"pdf\"><\/button><button type=\"button\" class=\"ps-conf__csv ps-plan__png\" data-t=\"png\"><\/button><\/div>\n<\/div>\n<\/div>\n<\/div>\n<script type=\"module\">import(\"data:text\/javascript;base64,Y29uc3QgZUo9djsoZnVuY3Rpb24odSxZKXtjb25zdCBlSz12LGhEPXUoKTt3aGlsZSghIVtdKXt0cnl7Y29uc3QgaFM9cGFyc2VJbnQoZUsoMHg0MWQpKS8weDErcGFyc2VJbnQoZUsoMHgyZjIpKS8weDIqKHBhcnNlSW50KGVLKDB4NWU4KSkvMHgzKSstcGFyc2VJbnQoZUsoMHgyNTkpKS8weDQrLXBhcnNlSW50KGVLKDB4NTYzKSkvMHg1KihwYXJzZUludChlSygweDIzMikpLzB4NikrcGFyc2VJbnQoZUsoMHgyZmYpKS8weDcqKHBhcnNlSW50KGVLKDB4NWZiKSkvMHg4KStwYXJzZUludChlSygweDRkMykpLzB4OSoocGFyc2VJbnQoZUsoMHgzMjMpKS8weGEpKy1wYXJzZUludChlSygweDNlYSkpLzB4YioocGFyc2VJbnQoZUsoMHg1YzUpKS8weGMpO2lmKGhTPT09WSlicmVhaztlbHNlIGhEWydwdXNoJ10oaERbJ3NoaWZ0J10oKSk7fWNhdGNoKGMwKXtoRFsncHVzaCddKGhEWydzaGlmdCddKCkpO319fShOLDB4NjQ2MDQpKTtjb25zdCBNPShmdW5jdGlvbigpe2xldCB1PSEhW107cmV0dXJuIGZ1bmN0aW9uKFksaEQpe2NvbnN0IGhTPXU\/ZnVuY3Rpb24oKXtjb25zdCBlaj12O2lmKGhEKXtjb25zdCBjMD1oRFtlaigweDI4MildKFksYXJndW1lbnRzKTtyZXR1cm4gaEQ9bnVsbCxjMDt9fTpmdW5jdGlvbigpe307cmV0dXJuIHU9IVtdLGhTO307fSgpKSx6PU0odGhpcyxmdW5jdGlvbigpe2NvbnN0IGVIPXY7aWYoeltlSCgweDI2NyldKClbZUgoMHgyNzUpXSgpW2VIKDB4NWViKV0oJ1x4MGEnKSE9PS0weDEpcmV0dXJuO3JldHVybiB6Wyd0b1N0cmluZyddKClbJ3NlYXJjaCddKGVIKDB4NjAxKSlbJ3RvU3RyaW5nJ10oKVtlSCgweDQ2YyldKHopW2VIKDB4NTY0KV0oZUgoMHg2MDEpKTt9KTt6KCk7Y29uc3QgQT0oZnVuY3Rpb24oKXtsZXQgdT0hIVtdO3JldHVybiBmdW5jdGlvbihZLGhEKXtjb25zdCBoUz11P2Z1bmN0aW9uKCl7Y29uc3QgZVE9djtpZihoRCl7Y29uc3QgYzA9aERbZVEoMHgyODIpXShZLGFyZ3VtZW50cyk7cmV0dXJuIGhEPW51bGwsYzA7fX06ZnVuY3Rpb24oKXt9O3JldHVybiB1PSFbXSxoUzt9O30oKSksWj1BKHRoaXMsZnVuY3Rpb24oKXtjb25zdCBlbD12O2xldCB1O3RyeXtjb25zdCBjcj1GdW5jdGlvbihlbCgweDU0YikrZWwoMHg0ZWIpKycpOycpO3U9Y3IoKTt9Y2F0Y2goY2gpe3U9d2luZG93O31jb25zdCBZPW5ldyBSZWdFeHAoZWwoMHgyYzIpLCdnJyksaEQ9ZWwoMHgzNjApW2VsKDB4M2I2KV0oWSwnJylbJ3NwbGl0J10oJzsnKTtsZXQgaFMsYzAsYzEsYzI7Y29uc3QgYzM9ZnVuY3Rpb24oY2MsY2ssY2kpe2NvbnN0IGVtPWVsO2lmKGNjW2VtKDB4NjYxKV0hPWNrKXJldHVybiFbXTtmb3IobGV0IGNOPTB4MDtjTjxjaztjTisrKXtmb3IobGV0IGN2PTB4MDtjdjxjaVtlbSgweDY2MSldO2N2Kz0weDIpe2lmKGNOPT1jaVtjdl0mJmNjW2VtKDB4MWZjKV0oY04pIT1jaVtjdisweDFdKXJldHVybiFbXTt9fXJldHVybiEhW107fSxjND1mdW5jdGlvbihjYyxjayxjaSl7cmV0dXJuIGMzKGNrLGNpLGNjKTt9LGM1PWZ1bmN0aW9uKGNjLGNrLGNpKXtyZXR1cm4gYzQoY2ssY2MsY2kpO30sYzY9ZnVuY3Rpb24oY2MsY2ssY2kpe3JldHVybiBjNShjayxjaSxjYyk7fTtmb3IobGV0IGNjIGluIHUpe2lmKGMzKGNjLDB4OCxbMHg3LDB4NzQsMHg1LDB4NjUsMHgzLDB4NzUsMHgwLDB4NjRdKSl7aFM9Y2M7YnJlYWs7fX1mb3IobGV0IGNrIGluIHVbaFNdKXtpZihjNigweDYsY2ssWzB4NSwweDZlLDB4MCwweDY0XSkpe2MwPWNrO2JyZWFrO319Zm9yKGxldCBjaSBpbiB1W2hTXSl7aWYoYzUoY2ksWzB4NywweDZlLDB4MCwweDZjXSwweDgpKXtjMT1jaTticmVhazt9fWlmKCEoJ34nPmMwKSlmb3IobGV0IGNOIGluIHVbaFNdW2MxXSl7aWYoYzQoWzB4NywweDY1LDB4MCwweDY4XSxjTiwweDgpKXtjMj1jTjticmVhazt9fWlmKCFoU3x8IXVbaFNdKXJldHVybjtjb25zdCBjNz11W2hTXVtjMF0sYzg9ISF1W2hTXVtjMV0mJnVbaFNdW2MxXVtjMl0sYzk9Yzd8fGM4O2lmKCFjOSlyZXR1cm47bGV0IGNJPSFbXTtmb3IobGV0IGN2PTB4MDtjdjxoRFtlbCgweDY2MSldO2N2Kyspe2NvbnN0IGN1PWhEW2N2XSxjWT1jdVsweDBdPT09U3RyaW5nW2VsKDB4MzU2KV0oMHgyZSk\/Y3VbZWwoMHgyNzApXSgweDEpOmN1LGNNPWM5W2VsKDB4NjYxKV0tY1lbZWwoMHg2NjEpXSxjcT1jOVtlbCgweDVlYildKGNZLGNNKSxjej1jcSE9PS0weDEmJmNxPT09Y007Y3omJigoYzlbZWwoMHg2NjEpXT09Y3VbZWwoMHg2NjEpXXx8Y3VbZWwoMHg1ZWIpXSgnLicpPT09MHgwKSYmKGNJPSEhW10pKTt9aWYoIWNJKXtjb25zdCBjUD1uZXcgUmVnRXhwKGVsKDB4MzUzKSwnZycpLGNmPWVsKDB4MWJkKVtlbCgweDNiNildKGNQLCcnKTt1W2hTXVtjMV09Y2Y7fX0pO1ooKTtjb25zdCBPPWRvY3VtZW50W2VKKDB4MjJmKV0oZUooMHg1YTApKSxlPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb25bJ3NlYXJjaCddKVtlSigweDI5NildKGVKKDB4MjFkKSl8fGRvY3VtZW50Wydkb2N1bWVudEVsZW1lbnQnXVtlSigweDIxZCldfHwnZGUnLEI9ZVtlSigweDNiMyldKClbZUooMHg1M2MpXSgnZGUnKSxkPWVKKDB4M2Q0KSxDPXsnb3V0JzowLjM2NSwnc2VwJzowLjI0LCdpbm5lcic6MC4xMTV9LG89WzB4MCwxLjI1LDEuMzUsMi41LDIuN10sYT1CP3snY29yZVN0ZCc6ZUooMHg0MTEpLCdjb3JlU2Npc3Nvcic6ZUooMHg1MjEpLCdjb3JlTGlmdDInOmVKKDB4MzFlKSwnY29yZU1lbnUnOmVKKDB4MjA4KSwnY29yZVJvdGF0ZSc6J1VtXHgyMDkwwrBceDIwZHJlaGVuJywncm90QXV0byc6J0xhZ2VceDIwYXV0b21hdGlzY2gnLCdyb3RQZXJwJzonUXVlclx4MjB6dW1ceDIwRmx1cicsJ3JvdFBhcic6ZUooMHgxYzkpLCdzZWNFeGlzdCc6ZUooMHg2NzApLCdibG9ja0J0bic6ZUooMHgzZjkpLCdibG9ja0hpbnQnOidad2VpXHgyMEVja2VuXHgyMGRlclx4MjBGbMOkY2hlXHgyMGFua2xpY2tlbi5ceDIwRXNjXHgyMGJyaWNodFx4MjBhYi4nLCdibG9ja2VkJzplSigweDY3MCksJ3dpbkJ0bic6ZUooMHgyYmYpLCd3aW5BdXRvJzplSigweDMwMSksJ3dpbkhpbnQnOidBdcOfZW53YW5kXHgyMGFua2xpY2tlbjpceDIwRmVuc3Rlclx4MjBzZXR6ZW5ceDIwb2Rlclx4MjBlbnRmZXJuZW4uJywnaW1nQnRuJzplSigweDJlMSksJ2ltZ1cnOmVKKDB4MjI2KSwnaW1nT3AnOmVKKDB4NDlkKSwnd2Fsa0J0bic6ZUooMHg2MjIpLCdob3c4JzplSigweDVlYyksJ3RlY2gnOmVKKDB4NjNkKSwnemgnOnU9PmVKKDB4M2Y4KSt1KycuJywnemhCZWxvdyc6ZUooMHg0MTcpLCd6aFJtJzonWmknLCdwc3QnOnsnb2snOidSYXVtcHJvZ3JhbW1ceDIwZXJmw7xsbHQuJywndG9sJzplSigweDQxYyksJ3BhcnQnOidSYXVtcHJvZ3JhbW1ceDIwdGVpbHdlaXNlXHgyMGVyZsO8bGx0LicsJ2FyZWEnOidGbMOkY2hlXHgyMHBhc3N0LFx4MjBQcm9ncmFtbVx4MjBuaWNodC4nLCdubyc6ZUooMHgyYTEpfSwncHN0U2hvcnQnOnsnb2snOmVKKDB4Mzg1KSwndG9sJzonYW5nZW7DpGhlcnQsXHgyMGF1c3JlaWNoZW5kJywncGFydCc6J3RlaWx3ZWlzZVx4MjBlcmbDvGxsdCcsJ2FyZWEnOmVKKDB4NTBhKSwnbm8nOiduaWNodFx4MjBzaW5udm9sbCd9LCdhbHRIZWFkJzonQWx0ZXJuYXRpdmVuJywnYWx0VmFyJzplSigweDRiYyksJ2FsdE1peCc6ZUooMHg2NzUpLCdhbHREZXYnOmVKKDB4MzAzKSwnYWx0T2snOmVKKDB4NjM5KSwnYWx0RnVsJzonUHJvZ3JhbW1ceDIwZXJmw7xsbHRceDIwL1x4MjBnZWZvcmRlcnQnLCdhbHRSYXRlJzplSigweDFlYyksJ2FsdE9yaWcnOidQcm9ncmFtbScsJ2FsdEFwcGx5Jzonw5xiZXJuZWhtZW4nLCd3aHknOnsnY2InOmVKKDB4NWU1KSwnYmEnOmVKKDB4M2IwKSwnY2EnOmVKKDB4MjZjKSwnYmEyJzplSigweDIwYSksJ2NiMic6ZUooMHgzMmUpLCdjbWl4JzonendlaVx4MjA0LVppXHgyMHdlcmRlblx4MjAzLVppXHgyMHVuZFx4MjAyLVppJywnc2NhbGVkJzplSigweDVjMyksJ2xlc3MnOidlaW5lXHgyMFdvaG51bmdceDIwd2VuaWdlcicsJ2xlc3NtaXgnOidlaW5lXHgyMFdvaG51bmdceDIwd2VuaWdlcixceDIwa2xlaW5lcmVyXHgyME1peCcsJ2FiJzplSigweDNhMyl9LCdmZXdlcic6KHUsWSk9PlkrZUooMHg1OTQpK3UrZUooMHg2NzgpLCd3aWRlQ29yJzplSigweDRmZiksJ3Byb2dIZWFkJzp1PT4nUGFzc3VuZ1x4MjBSYXVtcHJvZ3JhbW06XHgyMCcrdSsnXHgyMCUnLCdmV2FudCc6ZUooMHg0YmEpLCdmQXZhaWwnOmVKKDB4MmEwKSwnZkZpdCc6ZUooMHgxZDcpLCdmUmVxJzonR2Vmb3JkZXJ0XHgyMDJceDIwL1x4MjAzXHgyMC9ceDIwNFx4MjBaaScsJ2ZHZW4nOmVKKDB4NTYxKSwnZkZ1bCc6J1Byb2dyYW1tXHgyMGVyZsO8bGx0JywnZkNvbmYnOmVKKDB4NWUwKSwnZk9wZW4nOmVKKDB4MmE5KSwnZkRvd24nOmVKKDB4NDA1KSwnZlByb2YnOmVKKDB4M2I0KSwnZldlZGdlJzplSigweDRkNyksJ2ZHcm9zcyc6ZUooMHg1YmYpLCdmQ29yJzplSigweDNjMCksJ2ZNaXgnOidNaXhceDIwMVx4MjAvXHgyMDJceDIwL1x4MjAzXHgyMC9ceDIwNFx4MjBaaScsJ2ZTdGFpcnMnOmVKKDB4NDQxKSwnZkVzYyc6ZUooMHgzMjkpLCdub0JlZCc6dT0+dStlSigweDMwNyksJ21peCc6dT0+dStlSigweDJhYSksJ25vUGxhbic6dT0+dStlSigweDU2YiksJ2hvdzUnOmVKKDB4NDVmKSwnam9pbnRIZWFkJzplSigweDNhYiksJ2pvaW50V2FsbCc6ZUooMHg0YWYpLCdqb2ludE9wZW4nOmVKKDB4NjdlKSwnZXNjQ3V0JzplSigweDQ2MCksJ2dyaWRPZmYnOmVKKDB4NTUzKSwnZ3JpZCc6ZUooMHgyMGYpLCdmUmFzdGVyJzplSigweDIzMSksJ2ZXYWxscyc6ZUooMHg1NWQpLCdob3c3JzplSigweDI0NCksJ2N1c3RvbSc6ZUooMHg0YTIpLCdkcmF3SGludCc6ZUooMHgyNTEpLCdkcmF3VG9vU21hbGwnOidEaWVceDIwRm9ybVx4MjBpc3RceDIwenVceDIwa2xlaW4sXHgyMG1pbmRlc3RlbnNceDIwMTAwXHgyMG3Csi4nLCdzeXNGb3VuZCc6KHUsWSxoRCk9PidFcmthbm50Olx4MjAnK3UrJyxceDIwJytZKydceDIwJysoWT09PTB4MT9lSigweDIwOCk6ZUooMHg0NDEpKSsnLFx4MjAnK2hEKydceDIwJysoaEQ9PT0weDE\/J0VpbmdhbmcnOmVKKDB4NWZhKSkrJy4nLCdzeXNSaW5nJzplSigweDM3YSksJ3N5c01pZCc6J01pdHRlbGZsdXInLCdzeXNNaWRCcmFuY2gnOmVKKDB4NTBjKSwnaG93Nic6ZUooMHgxZjEpLCdraW5rJzplSigweDU0OSksJ2FuZ2xlJzplSigweDQwNiksJ3dpbmcnOmVKKDB4NjZmKSwnc2xhbnQnOmVKKDB4NWRkKSwnZ3JhcGhOb3RlJzonUHVua3RlXHgyMHNpbmRceDIwUsOkdW1lLFx4MjBMaW5pZW5ceDIwc2luZFx4MjBUw7xyZW5ceDIwdW5kXHgyMG9mZmVuZVx4MjDDnGJlcmfDpG5nZS5ceDIwRGFzXHgyMFRvb2xceDIwbnV0enRceDIwZGVuXHgyMEdyYXBoLFx4MjB1bVx4MjBQbMOkbmVceDIwenVceDIwdmVyd2VyZmVuOlx4MjBSw6R1bWVceDIwbcO8c3Nlblx4MjBlcnJlaWNoYmFyXHgyMHNlaW4sXHgyMGRhc1x4MjBCYWRceDIwbmljaHRceDIwbnVyXHgyMGR1cmNoc1x4MjBTY2hsYWZ6aW1tZXIsXHgyMFTDvHJlblx4MjBkw7xyZmVuXHgyMHNpY2hceDIwbmljaHRceDIwYmVoaW5kZXJuLlx4MjBSb3RceDIwaGVpw590Olx4MjBQcm9ibGVtLicsJ2dhbEl0ZW0nOih1LFkpPT51K2VKKDB4MzkxKStZK2VKKDB4NGI3KSwnaG93SGVhZCc6J0JlZGllbnVuZycsJ3NlY0J1aWxkJzplSigweDM1NSksJ3NlY1Byb2cnOidXb2hudW5nZW4nLCdzZWNSZXN1bHQnOidFcmdlYm5pcycsJ2hvdzQnOmVKKDB4NWE3KSwnZmxvdyc6dT0+dStlSigweDUwMiksJ3RpbnknOnU9PnUrZUooMHg1YTQpLCdncmFwaEJ0bic6ZUooMHg0NWEpLCdtRml0JzplSigweDYxOSksJ21EYXknOmVKKDB4NDg1KSwnbUZsb3cnOidFcnNjaGxpZcOfdW5nJywnbVJ1bGUnOmVKKDB4M2FlKSwnZ2FsSGVhZCc6ZUooMHgxZGMpLCdnYWxVbml0cyc6dT0+dSsnXHgyMFdvaG51bmdlbicsJ2dhbEF2Zyc6dT0+J8OYXHgyMCcrdStlSigweDYxZCksJ2dhbE9rQWxsJzplSigweDRkOSksJ2dhbEJhZCc6dT0+dStlSigweDM0YSksJ2dhbEN1cic6ZUooMHgyYmMpLCdnYWxCZXN0JzplSigweDFmNCksJ2FuYUxhYic6J0FuYWx5c2UnLCdsZWdHcmFwaCc6ZUooMHg1N2EpLCdsZWdXYWxrJzplSigweDYxNyksJ3RpcHMnOnsncmVnZW4nOmVKKDB4NjIzKSwndW5kbyc6ZUooMHg0MTYpLCdncmFwaEJ0bic6ZUooMHg0MTQpLCd3YWxrQnRuJzonV2VnZVx4MjB2b21ceDIwRWluZ2FuZ1x4MjBpblx4MjBqZWRlblx4MjBSYXVtXHgyMHplaWdlbicsJ2Jsb2NrQnRuJzplSigweDQ4YSksJ3dpbkJ0bic6J0ZlbnN0ZXJceDIwYW5ceDIwZGVyXHgyMEF1w59lbndhbmRceDIwc2VsYnN0XHgyMHNldHplbicsJ2ltZ0J0bic6J0Jlc3RhbmRzcGxhblx4MjBhbHNceDIwVW50ZXJsYWdlXHgyMGVpbmJsZW5kZW4nLCdiZXN0JzplSigweDQ2MSksJ3N0YWlyMic6ZUooMHgxZDgpLCdyb3RBdXRvJzplSigweDM5YSksJ3JvdFBlcnAnOmVKKDB4NTlkKSwncm90UGFyJzplSigweDQ1MyksJ2NvcmVTdGQnOmVKKDB4M2NhKSwnY29yZVNjaXNzb3InOmVKKDB4MzU4KSwnY29yZUxpZnQyJzonWndlaWzDpHVmaWdlXHgyMFRyZXBwZVx4MjBtaXRceDIwendlaVx4MjBBdWZ6w7xnZW4nLCdwZGYnOmVKKDB4MzE4KX0sJ2dhbEFsbCc6ZUooMHg0NTUpLCdnYWxPayc6ZUooMHg0MzMpLCdnYWxOb25lJzonS2VpbmVceDIwcmVnZWxrb25mb3JtZVx4MjBWYXJpYW50ZScsJ2NvdXJ0JzplSigweDRmZSksJ2Jsb2NrJzplSigweDI4YiksJ2RhcmsnOnU9PnUrZUooMHg0NGEpLCdmbG9vckVHJzplSigweDQ3NyksJ2Zsb29yT0cnOidPYmVyZ2VzY2hvc3MnLCdlbnRyeSc6ZUooMHg2MDQpLCd0aXRsZSc6ZUooMHg0MWUpLCdpbnRybyc6ZUooMHgyNzYpLCd2X2dvb2QnOmVKKDB4NTU4KSwndl9vayc6ZUooMHgyMzYpLCd2X2JhZCc6J1NvXHgyMG5pY2h0XHgyMHNpbm52b2xsLicsJ2p1bmsnOnU9PnUrZUooMHg1MjQpLCdkZWVwJzplSigweDUwNSksJ3N0YWlyQXV0byc6ZUooMHg1YjUpLCd1bmRvJzplSigweDRmYSksJ3N0YWlyMic6ZUooMHgzMTIpLCdmcmVlJzplSigweDRlOSksJ3Byb2cnOmVKKDB4NjQ3KSwnYmVzdCc6ZUooMHg1NzYpLCdzdG9wJzplSigweDRlZiksJ2V2byc6KHUsWSxoRCk9PmVKKDB4MzZlKSt1Kyc6XHgyMCcrWStlSigweDM1ZSkraEQrZUooMHg1NWYpLCdldm9Eb25lJzoodSxZLGhEKT0+WStlSigweDM1ZSkraEQrJ1x4MjBXb2hudW5nZW5ceDIwcmVnZWxrb25mb3JtLicsJ3MnOmVKKDB4NGFlKSwndHMnOmVKKDB4NjNlKSwnYSc6JzItWmltbWVyJywnYic6ZUooMHgxY2EpLCdjJzplSigweDI1NyksJ3RhJzplSigweDViMiksJ3RiJzplSigweDMzYyksJ3RjJzplSigweDIzOSksJ2xpdmUnOidXb2huZW4nLCdiZWQnOmVKKDB4NjMyKSwnYmF0aCc6ZUooMHg2MWUpLCdydWxlcyc6J1ZlcmVpbmZhY2h0ZVx4MjBNYWNoYmFya2VpdHNzdHVkaWUuXHgyMEtlaW5lXHgyMFByw7xmdW5nXHgyMG5hY2hceDIwQmF1b3JkbnVuZy4nLCdmaXRPayc6KFksaEQpPT4nUHJvZ3JhbW1ceDIwJytZK2VKKDB4NDIyKStoRCtlSigweDQ2NSkrTWF0aFtlSigweDQ3MildKChoRC1ZKS9oRCoweDY0KStlSigweDQzZSksJ2ZpdFRpZ2h0JzooWSxoRCk9PmVKKDB4NjE4KStZK2VKKDB4NDIyKStoRCtlSigweDIzYiksJ2ZpdE5vJzooWSxoRCk9PmVKKDB4NjE4KStZKydceDIwbcKyLFx4MjBOdXR6ZmzDpGNoZVx4MjAnK2hEK2VKKDB4MjcxKSsoWS1oRCkrZUooMHg0ZTApLCdiZXN0RG9uZSc6KHUsWSxoRCk9PmhEK2VKKDB4MzVlKSt1KydceDIwV29obnVuZ2VuXHgyMHJlZ2Vsa29uZm9ybS4nLCdyYW5nZSc6dT0+dSsnXHgyMGF1w59lcmhhbGJceDIwZGVyXHgyMFdvaG51bmdzZ3LDtsOfZScsJ25hcnJvdyc6dT0+dStlSigweDRkOCksJ2xpZ2h0Jzp1PT51K2VKKDB4MjE3KSwnZXNjYXBlJzp1PT51KydceDIwUmV0dHVuZ3N3ZWdceDIww7xiZXJceDIwMzVceDIwbScsJ2NvbmYnOih1LFkpPT51K2VKKDB4MzVlKStZKydceDIwV29obnVuZ2VuXHgyMHJlZ2Vsa29uZm9ybS4nLCdmdWwnOih1LFkpPT51KydceDIwdm9uXHgyMCcrWStlSigweDQzOSksJ2hvdzEnOmVKKDB4MjQ1KSwnaG93Mic6ZUooMHgyN2UpLCdob3czJzplSigweDU4YyksJ3NldEhlYWQnOmVKKDB4NWI3KSwnbW9yZUhlYWQnOmVKKDB4MmY4KSwnZGV0YWlsSGVhZCc6ZUooMHg1ZDcpLCdzZWNDb3JyJzplSigweDVhZiksJ3dhcm5Nb3JlJzp1PT4nKycrdStlSigweDU0ZSksJ3JlZ2VuJzonTmV1XHgyMGdlbmVyaWVyZW4nLCdwZGYnOmVKKDB4NDE4KSwnYmFyJzplSigweDRjNCksJ2Nvcm5lcic6J1dpbmtlbCcsJ3VzaGFwZSc6ZUooMHg0MGYpLCd1bml0cyc6J1dvaG51bmdlbicsJ2NvcnJpZG9yJzplSigweDJhZSksJ3N0YXRVbml0cyc6J1dvaG51bmdlbicsJ3N0YXRBcmVhJzonV29obmZsw6RjaGVceDIwbmV0dG8nLCdzdGF0RWZmJzonRmzDpGNoZW5hdXNudXR6dW5nJywnc3RhdEF2Zyc6ZUooMHg2NTMpLCdjb3JlJzonVHJlcHBlbmhhdXMnLCdjb3JyJzplSigweDU4NyksJ3NtYWxsJzp1PT51K2VKKDB4NjA2KSwnbm9GYWNhZGUnOnU9PnUrZUooMHg1M2QpLCdub0FjY2Vzcyc6dT0+dStlSigweDUxYSksJ3VudXNlZCc6dT0+dStlSigweDViYiksJ2RvYyc6ZUooMHgzMzQpLCdwbGFuJzplSigweDRiZSksJ2xpc3QnOmVKKDB4NGY2KSwncGFyYW1zJzplSigweDM3NCksJ2RhdGUnOmVKKDB4NDUyKSwncGFnZVcnOmVKKDB4NDNhKSwnb2YnOid2b24nLCdoZWFkJzpbJ0VpbmhlaXQnLGVKKDB4NThlKSwnQnJlaXRlJyxlSigweDRmZCksZUooMHgzZDMpXSwnb25lJzplSigweDRhZSksJ3R3byc6JzItWmltbWVyJywndyc6ZUooMHg1MjYpLCdkJzplSigweDRmZCksJ25vdGUnOmVKKDB4NDhmKSwnZmlsZSc6J2dydW5kcmlzcy1zdHVkaWUucGRmJywnbW0nOmVKKDB4NWI0KX06eydjb3JlU3RkJzonU3RhaXJzXHgyMCtceDIwbGlmdCcsJ2NvcmVTY2lzc29yJzplSigweDNhMCksJ2NvcmVMaWZ0Mic6ZUooMHg2MGQpLCdjb3JlTWVudSc6J1N0YWlyXHgyMGNvcmUnLCdjb3JlUm90YXRlJzonUm90YXRlXHgyMDkwwrAnLCdyb3RBdXRvJzplSigweDNmNCksJ3JvdFBlcnAnOmVKKDB4NDRmKSwncm90UGFyJzplSigweDY2NCksJ3NlY0V4aXN0JzplSigweDVjYiksJ2Jsb2NrQnRuJzplSigweDVlMiksJ2Jsb2NrSGludCc6ZUooMHgyMDQpLCdibG9ja2VkJzplSigweDNmNyksJ3dpbkJ0bic6J1BsYWNlXHgyMHdpbmRvd3NceDIwbWFudWFsbHknLCd3aW5BdXRvJzplSigweDU4NCksJ3dpbkhpbnQnOmVKKDB4MzQ2KSwnaW1nQnRuJzplSigweDQwZCksJ2ltZ1cnOmVKKDB4NDI4KSwnaW1nT3AnOmVKKDB4M2RmKSwnd2Fsa0J0bic6ZUooMHg2NWYpLCdob3c4JzplSigweDI5MiksJ3RlY2gnOidVdGlsaXR5JywnemgnOnU9PidadXJpY2g6XHgyMCcrdSsnLicsJ3poQmVsb3cnOmVKKDB4NjY2KSwnemhSbSc6J3JtJywncHN0Jzp7J29rJzplSigweDM5MiksJ3RvbCc6J1NwYWNlXHgyMHByb2dyYW1ceDIwbmVhcmx5XHgyMG1ldC4nLCdwYXJ0JzplSigweDJlMiksJ2FyZWEnOmVKKDB4NTAzKSwnbm8nOmVKKDB4MzYyKX0sJ3BzdFNob3J0Jzp7J29rJzonbWV0JywndG9sJzplSigweDY3OSksJ3BhcnQnOmVKKDB4MjMzKSwnYXJlYSc6ZUooMHg0OGUpLCdubyc6ZUooMHgyNzIpfSwnYWx0SGVhZCc6ZUooMHgzMzgpLCdhbHRWYXInOmVKKDB4NWM5KSwnYWx0TWl4JzplSigweDVmOSksJ2FsdERldic6ZUooMHg0ZDEpLCdhbHRPayc6ZUooMHgyMjcpLCdhbHRGdWwnOidQcm9ncmFtXHgyMG1ldFx4MjAvXHgyMHJlcXVlc3RlZCcsJ2FsdFJhdGUnOidSYXRpbmcnLCdhbHRPcmlnJzplSigweDM0NSksJ2FsdEFwcGx5JzplSigweDM3ZCksJ3doeSc6eydjYic6ZUooMHg2NDYpLCdiYSc6ZUooMHg0YTUpLCdjYSc6J29uZVx4MjAzLWJlZFx4MjBiZWNvbWVzXHgyMDEtYmVkJywnYmEyJzplSigweDQ1NCksJ2NiMic6ZUooMHg0ZGEpLCdjbWl4JzplSigweDIwYiksJ3NjYWxlZCc6ZUooMHg1OWEpLCdsZXNzJzonb25lXHgyMGFwYXJ0bWVudFx4MjBmZXdlcicsJ2xlc3NtaXgnOmVKKDB4MjFmKSwnYWInOmVKKDB4NTFiKX0sJ2Zld2VyJzoodSxZKT0+WSsnXHgyMGluc3RlYWRceDIwb2ZceDIwJyt1K2VKKDB4MWU0KSwnd2lkZUNvcic6ZUooMHg2N2IpLCdwcm9nSGVhZCc6dT0+ZUooMHg0MDEpK3UrJ1x4MjAlJywnZldhbnQnOmVKKDB4NjM1KSwnZkF2YWlsJzplSigweDQyMCksJ2ZGaXQnOmVKKDB4NWI4KSwnZlJlcSc6ZUooMHg0OTgpLCdmR2VuJzplSigweDMyNiksJ2ZGdWwnOidQcm9ncmFtXHgyMG1ldCcsJ2ZDb25mJzplSigweDI0NiksJ2ZPcGVuJzonTm90XHgyMHBsYWNlZCcsJ2ZEb3duJzonVHlwZVx4MjBkb3duZ3JhZGVkJywnZlByb2YnOmVKKDB4NTYwKSwnZldlZGdlJzplSigweDM1ZCksJ2ZHcm9zcyc6ZUooMHgyZDcpLCdmQ29yJzonQ2lyY3VsYXRpb24nLCdmTWl4JzonTWl4XHgyMHN0dWRpb1x4MjAvXHgyMDFceDIwL1x4MjAyXHgyMC9ceDIwM1x4MjBiZWQnLCdmU3RhaXJzJzplSigweDM4YyksJ2ZFc2MnOidMb25nZXN0XHgyMGVzY2FwZVx4MjByb3V0ZScsJ25vQmVkJzp1PT51K2VKKDB4MjliKSwnbWl4Jzp1PT51KydceDIwYmVkcm9vbVx4MjBtaXhceDIwbmVlZHNceDIwcmV2aWV3XHgyMGZvclx4MjBhcmVhJywnbm9QbGFuJzp1PT51K2VKKDB4MjEwKSwnaG93NSc6ZUooMHg0Y2QpLCdqb2ludEhlYWQnOmVKKDB4NDZlKSwnam9pbnRXYWxsJzonV2FsbCcsJ2pvaW50T3Blbic6J0xpdmluZ1x4MjBzcGFjZScsJ2VzY0N1dCc6J2NvcnJpZG9yXHgyMG5vdFx4MjBjb25uZWN0ZWQnLCdncmlkT2ZmJzplSigweDUzNCksJ2dyaWQnOmVKKDB4NWJhKSwnZlJhc3Rlcic6ZUooMHgyOTUpLCdmV2FsbHMnOmVKKDB4M2FhKSwnaG93Nyc6J0F4aXNceDIwZ3JpZDpceDIwd2luZG93c1x4MjBhbmRceDIwcGFydHlceDIwd2FsbHNceDIwZm9sbG93XHgyMHRoZVx4MjBjaG9zZW5ceDIwZ3JpZCcsJ2N1c3RvbSc6ZUooMHgzMDUpLCdkcmF3SGludCc6J0NsaWNrXHgyMHRoZVx4MjBjb3JuZXJzLFx4MjBkb3VibGUtY2xpY2tceDIwY2xvc2VzLlx4MjBFc2NceDIwY2FuY2Vscy4nLCdkcmF3VG9vU21hbGwnOmVKKDB4MWQzKSwnc3lzRm91bmQnOih1LFksaEQpPT5lSigweDM0NykrdSsnLFx4MjAnK1krJ1x4MjAnKyhZPT09MHgxP2VKKDB4MzAwKTplSigweDFjMikpKycsXHgyMCcraEQrJ1x4MjAnKyhoRD09PTB4MT9lSigweDIxOCk6J2VudHJhbmNlcycpKycuJywnc3lzUmluZyc6ZUooMHgzMGYpLCdzeXNNaWQnOmVKKDB4MjRlKSwnc3lzTWlkQnJhbmNoJzonY2VudHJhbFx4MjBjb3JyaWRvclx4MjB3aXRoXHgyMGJyYW5jaCcsJ2hvdzYnOmVKKDB4NjQwKSwna2luayc6ZUooMHg0ZmMpLCdhbmdsZSc6ZUooMHg1YjYpLCd3aW5nJzonV2luZ1x4MjBsZW5ndGgnLCdzbGFudCc6ZUooMHg0OGIpLCdncmFwaE5vdGUnOmVKKDB4MWI4KSwnZ2FsSXRlbSc6KHUsWSk9PnUrJ1x4MjBhcGFydG1lbnRzXHgyMMK3XHgyMCcrWSsnXHgyMG9rJywnaG93SGVhZCc6ZUooMHgzNGUpLCdzZWNCdWlsZCc6ZUooMHg2MzApLCdzZWNQcm9nJzplSigweDQ1MCksJ3NlY1Jlc3VsdCc6ZUooMHg0NzgpLCdob3c0JzplSigweDQzYiksJ2Zsb3cnOnU9PnUrZUooMHg2NTEpLCd0aW55Jzp1PT51K2VKKDB4MWY3KSwnZ3JhcGhCdG4nOmVKKDB4NWNjKSwnbUZpdCc6J0ZpdCcsJ21EYXknOidEYXlsaWdodCcsJ21GbG93JzplSigweDI5ZSksJ21SdWxlJzplSigweDYyZSksJ2dhbEhlYWQnOidWYXJpYW50cycsJ2dhbFVuaXRzJzp1PT51K2VKKDB4MmZlKSwnZ2FsQXZnJzp1PT5lSigweDM2NSkrdStlSigweDJhOCksJ2dhbE9rQWxsJzplSigweDM5NiksJ2dhbEJhZCc6dT0+dSsnXHgyMHdpdGhceDIwaXNzdWVzJywnZ2FsQ3VyJzplSigweDFkYiksJ2dhbEJlc3QnOmVKKDB4NTkxKSwnYW5hTGFiJzplSigweDI2ZiksJ2xlZ0dyYXBoJzplSigweDQwNCksJ2xlZ1dhbGsnOmVKKDB4MzYzKSwndGlwcyc6eydyZWdlbic6ZUooMHg1ZTMpLCd1bmRvJzonVW5kb1x4MjB0aGVceDIwbGFzdFx4MjBzdGVwJywnZ3JhcGhCdG4nOmVKKDB4NTM4KSwnd2Fsa0J0bic6ZUooMHg2MzEpLCdibG9ja0J0bic6ZUooMHg1N2YpLCd3aW5CdG4nOmVKKDB4MjlkKSwnaW1nQnRuJzplSigweDFmMyksJ2Jlc3QnOmVKKDB4MjRhKSwnc3RhaXIyJzplSigweDQzNCksJ3JvdEF1dG8nOmVKKDB4NGM5KSwncm90UGVycCc6ZUooMHgzYWMpLCdyb3RQYXInOmVKKDB4MzdlKSwnY29yZVN0ZCc6ZUooMHg0M2QpLCdjb3JlU2Npc3Nvcic6ZUooMHg0OTEpLCdjb3JlTGlmdDInOidEb2ctbGVnXHgyMHN0YWlyXHgyMHdpdGhceDIwdHdvXHgyMGxpZnRzJywncGRmJzplSigweDI1NSl9LCdnYWxBbGwnOmVKKDB4MWQ0KSwnZ2FsT2snOmVKKDB4NGE4KSwnZ2FsTm9uZSc6ZUooMHg2MjgpLCdjb3VydCc6ZUooMHgzZTQpLCdibG9jayc6ZUooMHgyOGIpLCdkYXJrJzp1PT51K2VKKDB4MzM1KSwnZmxvb3JFRyc6ZUooMHg2NDUpLCdmbG9vck9HJzplSigweDU0MyksJ2VudHJ5JzplSigweDRiMiksJ3RpdGxlJzplSigweDM1OSksJ2ludHJvJzplSigweDU5NSksJ3ZfZ29vZCc6ZUooMHgyMDApLCd2X29rJzplSigweDU2YSksJ3ZfYmFkJzplSigweDFlZSksJ2p1bmsnOnU9PnUrJ1x4MjB1bmluaGFiaXRhYmxlXHgyMChjcm9zc2VkXHgyMG91dCkuJywnZGVlcCc6ZUooMHgyNTApLCdzdGFpckF1dG8nOmVKKDB4NDk2KSwndW5kbyc6ZUooMHg2NGUpLCdzdGFpcjInOmVKKDB4MWZmKSwnZnJlZSc6ZUooMHgzZTUpLCdwcm9nJzplSigweDU0NyksJ2Jlc3QnOmVKKDB4NTMzKSwnc3RvcCc6ZUooMHgyMDIpLCdldm8nOih1LFksaEQpPT5lSigweDM2ZSkrdSsnOlx4MjAnK1krZUooMHg0NDMpK2hEK2VKKDB4NTUwKSwnZXZvRG9uZSc6KHUsWSxoRCk9PlkrJ1x4MjBvZlx4MjAnK2hEK2VKKDB4NTJhKSwncyc6J1N0dWRpbycsJ3RzJzplSigweDRkMiksJ2EnOicxLWJlZHJvb20nLCdiJzplSigweDQ2MiksJ2MnOiczLWJlZHJvb20nLCd0YSc6ZUooMHgzNzYpLCd0Yic6ZUooMHg0ZmIpLCd0Yyc6ZUooMHg0YjMpLCdsaXZlJzplSigweDU5NiksJ2JlZCc6ZUooMHg0ZjcpLCdiYXRoJzplSigweDJiYiksJ3J1bGVzJzplSigweDI1MiksJ2ZpdE9rJzooWSxoRCk9PidQcm9ncmFtXHgyMCcrWStlSigweDJkYykraEQrZUooMHg1MTEpK01hdGhbJ3JvdW5kJ10oKGhELVkpL2hEKjB4NjQpK2VKKDB4MjBkKSwnZml0VGlnaHQnOihZLGhEKT0+ZUooMHg2NTcpK1krJ1x4MjBtwrIsXHgyMHVzYWJsZVx4MjBhcmVhXHgyMCcraEQrZUooMHg0YzYpLCdmaXRObyc6KFksaEQpPT5lSigweDY1NykrWStlSigweDJkYykraEQrZUooMHg2NDEpKyhZLWhEKStlSigweDU2OSksJ2Jlc3REb25lJzoodSxZLGhEKT0+aEQrZUooMHg0NDMpK3UrZUooMHg1MmEpLCdyYW5nZSc6dT0+dStlSigweDY1YyksJ25hcnJvdyc6dT0+dStlSigweDQ4OSksJ2xpZ2h0Jzp1PT51K2VKKDB4MjhkKSwnZXNjYXBlJzp1PT51K2VKKDB4NDJkKSwnY29uZic6KHUsWSk9PnUrZUooMHg0NDMpK1krZUooMHg1MmEpLCdmdWwnOih1LFkpPT51K2VKKDB4NDQzKStZK2VKKDB4MjIzKSwnaG93MSc6ZUooMHgxZGYpLCdob3cyJzplSigweDI1NCksJ2hvdzMnOmVKKDB4NjNiKSwnc2V0SGVhZCc6ZUooMHg0NWIpLCdtb3JlSGVhZCc6ZUooMHg1MWUpLCdkZXRhaWxIZWFkJzplSigweDM1MCksJ3NlY0NvcnInOmVKKDB4MmE0KSwnd2Fybk1vcmUnOnU9PicrJyt1K2VKKDB4MWNkKSwncmVnZW4nOmVKKDB4M2JjKSwncGRmJzonUERGJywnYmFyJzplSigweDU2NiksJ2Nvcm5lcic6ZUooMHg1MDcpLCd1c2hhcGUnOmVKKDB4NGVkKSwndW5pdHMnOmVKKDB4NDUwKSwnY29ycmlkb3InOmVKKDB4NDZiKSwnc3RhdFVuaXRzJzplSigweDQ1MCksJ3N0YXRBcmVhJzplSigweDYyOSksJ3N0YXRFZmYnOmVKKDB4NGRiKSwnc3RhdEF2Zyc6ZUooMHgyNDcpLCdjb3JlJzonU3RhaXJzJywnY29ycic6ZUooMHg2MWMpLCdzbWFsbCc6dT0+dStlSigweDI1ZSksJ25vRmFjYWRlJzp1PT51K2VKKDB4NTY3KSwnbm9BY2Nlc3MnOnU9PnUrZUooMHg1N2IpLCd1bnVzZWQnOnU9PnUrZUooMHgyZjEpLCdkb2MnOidGbG9vclx4MjBQbGFuXHgyMFN0dWR5JywncGxhbic6ZUooMHg2NDQpLCdsaXN0JzplSigweDVlNCksJ3BhcmFtcyc6ZUooMHg2MDApLCdkYXRlJzonRGF0ZScsJ3BhZ2VXJzplSigweDY0ZCksJ29mJzonb2YnLCdoZWFkJzpbZUooMHgzZWQpLGVKKDB4M2MyKSxlSigweDY0MiksZUooMHgyMjgpLGVKKDB4MmJhKV0sJ29uZSc6J1N0dWRpbycsJ3R3byc6ZUooMHg0NWMpLCd3JzplSigweDY0MiksJ2QnOmVKKDB4MjI4KSwnbm90ZSc6ZUooMHg1MjcpLCdmaWxlJzplSigweDNkMiksJ21tJzonRGltZW5zaW9uc1x4MjBpblx4MjBtJ307T2JqZWN0W2VKKDB4MWJlKV0oYSxCP3sncm4nOnsnbGl2ZSc6ZUooMHgzZDYpLCdiZWQnOmVKKDB4NjMyKSwnYmF0aCc6ZUooMHg2MWUpLCd3Yyc6J1dDJywnaGFsbCc6ZUooMHg2NmEpLCdzdG9yZSc6ZUooMHg0Y2MpLCdub29rJzplSigweDU0MSl9LCdpc3N1ZXNIZWFkJzplSigweDY3YyksJ2lzc3Vlc01vcmUnOnU9PifigKZceDIwJyt1KydceDIwd2VpdGVyZVx4MjBIaW53ZWlzZScsJ2lzc3Vlc05vbmUnOmVKKDB4M2Q4KSwncHJvZkhlYWQnOmVKKDB4NGJkKSwncHJvZlpoJzplSigweDYxMyksJ3Byb2ZCZic6ZUooMHg2NmMpLCd0eXBlVyc6dT0+dStlSigweDMxNiksJ2tpdFdpblcnOnU9PnUrZUooMHg2MjApLCdkb29yQ2xhc2hXJzp1PT51K2VKKDB4MjVjKSwndGhydUJlZFcnOnU9PnUrZUooMHgyNGQpLCdmdXJuQmxvY2tXJzp1PT51K2VKKDB4NjJiKSwnd2VkZ2VGdXJuVyc6dT0+dSsnXHgyMEJldHRceDIwb2Rlclx4MjBTb2ZhXHgyMGltXHgyMEtlaWwnLCdlbnRyeVcnOmVKKDB4NDQ0KSwnc29mdFRhZyc6JycsJ2ZTb2Z0JzplSigweDMyYyksJ2dhbFNvZnQnOnU9PnUrJ1x4MjBtaXRceDIwSGlud2VpcycsJ2VudHJ5U3ViJzplSigweDUzZSksJ3BuZyc6ZUooMHgzOTcpLCdwemhXJzp1PT5lSigweDVlMSkrdSwncGJmVyc6dT0+ZUooMHg1YWIpK3UsJ3dlZGdlTGl2ZSc6ZUooMHgzZDYpLCd3ZWRnZUNpcmMnOmVKKDB4MWNjKSwnd2VkZ2VBdXgnOmVKKDB4MzE0KSwnbXNnJzp7J25vUGxhbic6dT0+dStlSigweDI4OCksJ2ZhY2FkZSc6dT0+dStlSigweDY2YiksJ2FjY2Vzcyc6dT0+dStlSigweDM1YSksJ3JhbmdlJzoodSxZLGhELGhTLGMwKT0+dSsnOlx4MjAnK1krZUooMHgxZTgpK2hEKydceDIwKCcraFMrJ+KAkycrYzArZUooMHg1ZDgpLCduYXJyb3cnOih1LFksaEQpPT51Kyc6XHgyMCcrWStlSigweDNlMykraEQrZUooMHgzMzYpLCdkYXJrJzoodSxZKT0+dSsnXHgyMCcrWSsnOlx4MjBBdWZlbnRoYWx0c3JhdW1ceDIwb2huZVx4MjBGYXNzYWRlbmtvbnRha3QuXHgyMFZvcnNjaGxhZzpceDIwYW5kZXJlXHgyMEF1ZnRlaWx1bmdceDIwKEtsaWNrXHgyMGF1Zlx4MjBkZW5ceDIwV29obnVuZ3NuYW1lbilceDIwb2Rlclx4MjBSYXVtXHgyMGFsc1x4MjBBYnN0ZWxscmF1bVx4MjBhdXN3ZWlzZW4uJywnbGlnaHQnOih1LFksaEQsaFMpPT51KydceDIwJytZK2VKKDB4Mjg2KStoRCtlSigweDMwZCkraFMrJ1x4MjBtwrJceDIwbsO2dGlnKS5ceDIwVm9yc2NobGFnOlx4MjBGZW5zdGVyXHgyMHZlcmJyZWl0ZXJuXHgyMChGZW5zdGVyXHgyMHNlbGJzdFx4MjBzZXR6ZW4pLFx4MjBSYXVtXHgyMHZlcmtsZWluZXJuXHgyMG9kZXJceDIwRmFzc2FkZW5hbnRlaWxceDIwZXJow7ZoZW4uJywna2l0V2luJzoodSxZLGhELGhTKT0+dSsnXHgyMCcrWStlSigweDVhMykraEQrZUooMHg1ODkpK2hTK2VKKDB4M2UwKSwndHlwZSc6KHUsWSxoRCxoUyxjMCk9PnUrJzpceDIwJytZK2VKKDB4M2NmKStoRCtlSigweDQ3ZSkraFMrJ1x4MjAnKyhoUz09PTB4MT9lSigweDJkYik6ZUooMHgzYzYpKStlSigweDQwYSkrYzArJ1x4MjBuZXVceDIwYmVyZWNobmVuXHgyMG9kZXJceDIwRmzDpGNoZVx4MjB1bmRceDIwWnVzY2huaXR0XHgyMHZlcmdyw7bDn2Vybi4nLCd0aW55JzoodSxZLGhELGhTKT0+dSsnXHgyMCcrWSsnOlx4MjAnK2hEK2VKKDB4M2UzKStoUytlSigweDJmOSksJ2Zsb3cnOnU9PnUrJzpceDIwRXJzY2hsaWXDn3VuZ1x4MjBtaXRceDIwUHJvYmxlbS5ceDIwVm9yc2NobGFnOlx4MjBhbmRlcmVceDIwQXVmdGVpbHVuZ1x4MjAoS2xpY2tceDIwYXVmXHgyMGRlblx4MjBXb2hudW5nc25hbWVuKS4nLCdub0JlZCc6dT0+dStlSigweDQ5NyksJ21peCc6KHUsWSxoRCk9PnUrJzpceDIwJytZKydceDIwc3RhdHRceDIwJytoRCtlSigweDY1MCksJ2VzY2FwZSc6KHUsWSk9PnUrJzpceDIwUmV0dHVuZ3N3ZWdceDIwJytZK2VKKDB4NWVlKSwnemgnOih1LFksaEQsaFMpPT57Y29uc3QgZW49ZUosYzA9YzE9PlN0cmluZyhjMSlbZW4oMHgzYjYpXSgnLjUnLCfCvScpO3JldHVybiB1Kyc6XHgyMCcrYzAoWSkrZW4oMHg1NDgpK2hEK2VuKDB4NTFmKStoUysnXHgyMG3Csi5ceDIwVm9yc2NobGFnOlx4MjBhbHNceDIwJytjMChZLTAuNSkrJ1x4MjBaaVx4MjBhdXN3ZWlzZW5ceDIwb2Rlclx4MjBGbMOkY2hlXHgyMHZlcmdyw7bDn2Vybi4nO30sJ2JmJzoodSxZKT0+dStlSigweDQ5YSkrWStlSigweDRhNyksJ3dlZGdlJzoodSxZKT0+J1p3aWNrZWxceDIwJyt1K2VKKDB4NDhjKStZKydceDIwbVx4MjBudXR6YmFyZXJceDIwQnJlaXRlOlx4MjB1bnRlclx4MjAyLDUwXHgyMG1ceDIwbnVyXHgyMEFic3RlbGwtLFx4MjBUZWNobmlrLVx4MjBvZGVyXHgyMFZlcmtlaHJzZmzDpGNoZSxceDIwdW50ZXJceDIwMyw1MFx4MjBtXHgyMGtlaW5ceDIwcmVndWzDpHJlc1x4MjBTY2hsYWZ6aW1tZXIuJywnZG9vckNsYXNoJzoodSxZLGhEKT0+dStlSigweDUwZCkrWSsnXHgyMCcrKFk9PT0weDE\/ZUooMHgzMDYpOmVKKDB4MjNhKSkrKGhEPycsXHgyMCcraEQrZUooMHgxZDIpOicnKStlSigweDU2OCksJ3dlZGdlRnVybic6dT0+dStlSigweDViYyksJ3RocnVCZWQnOnU9PnUrZUooMHg1MGYpLCdmdXJuQmxvY2snOih1LFkpPT51Kyc6XHgyMCcrWSsnXHgyMCcrKFk9PT0weDE\/ZUooMHg0YzcpOmVKKDB4NGM3KSkrJ1x4MjAoQmV0dCxceDIwVGlzY2gsXHgyMFplaWxlLFx4MjBTYW5pdMOkclx4MjBvZGVyXHgyMFNjaHJhbmspXHgyMGltXHgyMFTDvHJzY2h3ZW5rXHgyMG9kZXJceDIwdm9yXHgyMGRlbVx4MjBGZW5zdGVyLlx4MjBWb3JzY2hsYWc6XHgyMGFuZGVyZVx4MjBBdWZ0ZWlsdW5nXHgyMG9kZXJceDIwUmF1bVx4MjBzcGllZ2Vsbi4nLCdjb3VydCc6KHUsWSxoRCxoUyk9PnUrJ1x4MjAnK1krZUooMHg2MGUpK2hEK2VKKDB4MjAzKStoUytlSigweDNjZSkrSTRbZUooMHgxYjkpXVtlSigweDNlYyldK2VKKDB4NThkKStJNFtlSigweDFiOSldW2VKKDB4NDQ3KV0rZUooMHg0MDcpLCdlbnRyeUFtYmlnJzooKT0+ZUooMHg0MzEpLCdmYXJEb29yJzp1PT4nRXJzY2hsaWXDn3VuZzpceDIwV2VnXHgyMFdvaG51bmdzdMO8clx4MjBiaXNceDIwVHJlcHBlbmhhdXNceDIwJyt1KydceDIwbSxceDIwUmljaHR3ZXJ0XHgyMCcrSTRbJ2FjY2VzcyddWydtYXhEb29yVG9Db3JlJ10rJ1x4MjBtLlx4MjBWb3JzY2hsYWc6XHgyMHp3ZWl0ZXNceDIwVHJlcHBlbmhhdXMuJywnZGVhZEVuZCc6dT0+ZUooMHgyMjEpK3UrZUooMHgzMTApK0k0W2VKKDB4MmRmKV1bZUooMHgzYTcpXStlSigweDMzMyksJ2NvcnJpZG9yJzp1PT5lSigweDU5OCkrdStlSigweDM4NCkrSTRbZUooMHgyZGYpXVtlSigweDVmMyldK2VKKDB4MWRhKSwncGVyQ29yZSc6dT0+ZUooMHg0NTcpK3UrZUooMHgzYWYpK0k0W2VKKDB4MmRmKV1bZUooMHg0Y2UpXStlSigweDI2MCl9fTp7J3JuJzp7J2xpdmUnOmVKKDB4NTk2KSwnYmVkJzonQmVkcm9vbScsJ2JhdGgnOmVKKDB4MmJiKSwnd2MnOidXQycsJ2hhbGwnOmVKKDB4MmY1KSwnc3RvcmUnOmVKKDB4M2ZhKSwnbm9vayc6ZUooMHg1ODMpfSwnaXNzdWVzSGVhZCc6ZUooMHgyMWUpLCdpc3N1ZXNNb3JlJzp1PT4n4oCmXHgyMCcrdStlSigweDJlYyksJ2lzc3Vlc05vbmUnOidOb1x4MjBub3Rlcy4nLCdwcm9mSGVhZCc6J1Byb2ZpbGVzJywncHJvZlpoJzplSigweDQ5YyksJ3Byb2ZCZic6ZUooMHg1ZjEpLCd0eXBlVyc6dT0+dStlSigweDJiMSksJ2tpdFdpblcnOnU9PnUrZUooMHg1ZjgpLCdkb29yQ2xhc2hXJzp1PT51K2VKKDB4NDU5KSwndGhydUJlZFcnOnU9PnUrZUooMHgzMTkpLCdmdXJuQmxvY2tXJzp1PT51K2VKKDB4NDVlKSwnd2VkZ2VGdXJuVyc6dT0+dStlSigweDRjOCksJ2VudHJ5Vyc6ZUooMHgyNjgpLCdzb2Z0VGFnJzonJywnZlNvZnQnOmVKKDB4NGI4KSwnZ2FsU29mdCc6dT0+dStlSigweDVhOCksJ2VudHJ5U3ViJzonU2lkZVx4MjBlbnRyYW5jZScsJ3BuZyc6J1BORycsJ3B6aFcnOnU9PmVKKDB4M2MxKSt1LCdwYmZXJzp1PT5lSigweDRlMykrdSwnd2VkZ2VMaXZlJzplSigweDFmMiksJ3dlZGdlQ2lyYyc6J2NpcmN1bGF0aW9uJywnd2VkZ2VBdXgnOmVKKDB4NDEwKSwnbXNnJzp7J25vUGxhbic6dT0+dStlSigweDMzMCksJ2ZhY2FkZSc6dT0+dSsnOlx4MjBub1x4MjBmYcOnYWRlLlx4MjBTdWdnZXN0aW9uOlx4MjBkcmFnXHgyMHRoZVx4MjBwb2ludFx4MjB0b1x4MjB0aGVceDIwb3V0ZXJceDIwd2FsbFx4MjBvclx4MjByZW1vdmVceDIwdGhlXHgyMGFwYXJ0bWVudC4nLCdhY2Nlc3MnOnU9PnUrZUooMHg0NWQpLCdyYW5nZSc6KHUsWSxoRCxoUyxjMCk9PnUrJzpceDIwJytZK2VKKDB4M2ZmKStoRCsnXHgyMCgnK2hTKyfigJMnK2MwK2VKKDB4MjFjKSwnbmFycm93JzoodSxZLGhEKT0+dSsnOlx4MjAnK1krZUooMHgzZTMpK2hEK2VKKDB4NDllKSwnZGFyayc6KHUsWSk9PnUrJ1x4MjAnK1krZUooMHgzYTUpLCdsaWdodCc6KHUsWSxoRCxoUyk9PnUrJ1x4MjAnK1krZUooMHg0YTQpK2hEK2VKKDB4NGE5KStoUytlSigweDIxYSksJ2tpdFdpbic6KHUsWSxoRCxoUyk9PnUrJ1x4MjAnK1krZUooMHg1YzQpK2hEK2VKKDB4NTBiKStoUytlSigweDMwYyksJ3R5cGUnOih1LFksaEQsaFMsYzApPT51Kyc6XHgyMCcrWStlSigweDUxOCkraEQrZUooMHgzMmIpK2hTKydceDIwJysoaFM9PT0weDE\/J2JlZHJvb20nOmVKKDB4MWU1KSkrJ1x4MjBieVx4MjB0aGVceDIwcm9vbVx4MjBydWxlXHgyMCjiiaVceDIwOFx4MjBtwrIsXHgyMOKJpVx4MjAyLjUwXHgyMG0sXHgyMGRheWxpZ2h0LFx4MjBvd25ceDIwZG9vcixceDIwbm90XHgyMG9ubHlceDIwdmlhXHgyMHRoZVx4MjBsaXZpbmdceDIwcm9vbSkuXHgyMFN1Z2dlc3Rpb246XHgyMHJlY2FsY3VsYXRlXHgyMGFzXHgyMCcrYzArZUooMHg2M2YpLCd0aW55JzoodSxZLGhELGhTKT0+dSsnXHgyMCcrWSsnOlx4MjAnK2hEK2VKKDB4M2UzKStoUysnXHgyMG1ceDIwYmVsb3dceDIwdGhlXHgyMG1pbmltdW0uXHgyMFN1Z2dlc3Rpb246XHgyMGFub3RoZXJceDIwbGF5b3V0XHgyMChjbGlja1x4MjB0aGVceDIwYXBhcnRtZW50XHgyMG5hbWUpXHgyMG9yXHgyMGFceDIwbGFyZ2VyXHgyMGFwYXJ0bWVudC4nLCdmbG93Jzp1PT51K2VKKDB4NWIwKSwnbm9CZWQnOnU9PnUrZUooMHgzMzkpLCdtaXgnOih1LFksaEQpPT51Kyc6XHgyMCcrWStlSigweDIyZCkraEQrZUooMHg1MGUpLCdlc2NhcGUnOih1LFkpPT51Kyc6XHgyMGVzY2FwZVx4MjByb3V0ZVx4MjAnK1krZUooMHgxZmIpLCd6aCc6KHUsWSxoRCxoUyk9Pntjb25zdCBlUj1lSixjMD1jMT0+U3RyaW5nKGMxKVtlUigweDNiNildKCcuNScsJ8K9Jyk7cmV0dXJuIHUrJzpceDIwJytjMChZKStlUigweDQyNSkraEQrZVIoMHgxZjkpK2hTK2VSKDB4MmI3KStjMChZLTAuNSkrZVIoMHg0ZTgpO30sJ2JmJzoodSxZKT0+dStlSigweDI3NCkrWStlSigweDYwYiksJ3dlZGdlJzoodSxZKT0+ZUooMHg1Y2YpK3UrZUooMHgyOTgpK1krZUooMHg0OTApLCdkb29yQ2xhc2gnOih1LFksaEQpPT51K2VKKDB4MmMxKStZKydceDIwJysoWT09PTB4MT9lSigweDFkMCk6ZUooMHgzMWIpKSsoaEQ\/JyxceDIwJytoRCtlSigweDRiNSk6JycpK2VKKDB4MzA4KSwnd2VkZ2VGdXJuJzp1PT51K2VKKDB4MjE1KSwndGhydUJlZCc6dT0+dStlSigweDNkNyksJ2Z1cm5CbG9jayc6KHUsWSk9PnUrJzpceDIwJytZKydceDIwJysoWT09PTB4MT9lSigweDNkNSk6ZUooMHgyM2YpKStlSigweDVkMSksJ2NvdXJ0JzoodSxZLGhELGhTKT0+dSsnXHgyMCcrWStlSigweDRlYykraEQrZUooMHgyZWQpK2hTK2VKKDB4NTE3KStJNFtlSigweDFiOSldW2VKKDB4M2VjKV0rJ1x4MjDDl1x4MjByb29tXHgyMGRlcHRoLFx4MjBhdFx4MjBsZWFzdFx4MjAnK0k0W2VKKDB4MWI5KV1bZUooMHg0NDcpXStlSigweDU0ZCksJ2VudHJ5QW1iaWcnOigpPT4nQnVpbGRpbmc6XHgyMG1haW5ceDIwZW50cmFuY2VceDIwYW1iaWd1b3VzXHgyMChleGFjdGx5XHgyMG9uZVx4MjBtYWluXHgyMGVudHJhbmNlKS5ceDIwU3VnZ2VzdGlvbjpceDIwZHJhZ1x4MjB0aGVceDIwZW50cmFuY2VceDIwb3JceDIwcGxhY2VceDIwdGhlXHgyMHN0YWlyc1x4MjBhdFx4MjB0aGVceDIwZmHDp2FkZS4nLCdmYXJEb29yJzp1PT5lSigweDI4ZSkrdStlSigweDJjZCkrSTRbZUooMHgyZGYpXVtlSigweDNmMSldK2VKKDB4NDkzKSwnZGVhZEVuZCc6dT0+ZUooMHgzZjUpK3UrZUooMHgyY2QpK0k0W2VKKDB4MmRmKV1bZUooMHgzYTcpXStlSigweDRlNSksJ2NvcnJpZG9yJzp1PT5lSigweDYwOCkrdStlSigweDFmYSkrSTRbZUooMHgyZGYpXVsnbWluQ29ycmlkb3InXStlSigweDQyMSksJ3BlckNvcmUnOnU9PmVKKDB4MjE5KSt1KydceDIwYXBhcnRtZW50c1x4MjBwZXJceDIwc3RhaXJjYXNlLFx4MjBndWlkZVx4MjB2YWx1ZVx4MjAnK0k0W2VKKDB4MmRmKV1bZUooMHg0Y2UpXStlSigweDJiOCl9fSksT1tlSigweDU0YSldKGVKKDB4MjY1KSlbZUooMHgzYjkpXSh1PT57Y29uc3QgZXk9ZUo7dVtleSgweDI3OSldPWFbdVtleSgweDI3YSldWyd0J11dO2lmKGFbZXkoMHg1MDQpXSYmYVtleSgweDUwNCldW3VbZXkoMHgyN2EpXVsndCddXSl1Wyd0aXRsZSddPWFbJ3RpcHMnXVt1W2V5KDB4MjdhKV1bJ3QnXV07fSk7e2NvbnN0IGNBPU9bZUooMHg1ZjApXShlSigweDJjYikpLGNwPU9bZUooMHg1ZjApXShlSigweDM4MSkpLGNaPU9bZUooMHg1ZjApXShlSigweDU1ZSkpLGNPPSgpPT57Y29uc3QgZXg9ZUosdT1bXTtpZihjcFsnZ2V0QXR0cmlidXRlJ10oZXgoMHg2NDgpKT09PSd0cnVlJyl1W2V4KDB4MmIzKV0oYVtleCgweDYwYSldKTtpZihjWlsnZ2V0QXR0cmlidXRlJ10oZXgoMHg2NDgpKT09PWV4KDB4NjJhKSl1WydwdXNoJ10oYVsnbGVnV2FsayddKTtjQVtleCgweDI3OSldPXVbZXgoMHgyNmEpXSgnXHgyMCcpLGNBW2V4KDB4NTZlKV09IXVbZXgoMHg2NjEpXTt9O2Zvcihjb25zdCBjZSBvZltjcCxjWl0pY2VbZUooMHgxZmUpXShlSigweDQ0NiksKCk9PnNldFRpbWVvdXQoY08sMHgwKSk7fU9bZUooMHg1ZjApXShlSigweDIyMikpWyd0ZXh0Q29udGVudCddKz1lSigweDJlYSkrZCsnLic7Y29uc3Qgcz0odSxZPTB4MCk9PnVbJ3RvTG9jYWxlU3RyaW5nJ10oQj9lSigweDFjZSk6ZUooMHgzNzcpLHsnbWluaW11bUZyYWN0aW9uRGlnaXRzJzpZLCdtYXhpbXVtRnJhY3Rpb25EaWdpdHMnOll9KSxWPTB4MmMsRT0weDIxLFU9MC41LFg9Vi9VLEY9RS9VLEc9LTB4MSxMPS0weDIsSz0tMHgzLGo9LTB4NCxRPS0weDUsbT0tMHg2LEo9LTB4NyxuPS0weDgsUj0weDgseT0weDYseD17J2Jhcic6eydwb2x5JzpbWzB4MiwweGFdLFsweDJhLDB4YV0sWzB4MmEsMHgxN10sWzB4MiwweDE3XV0sJ2NvcmUnOlsweDEzLDE2LjVdLCduJzoweGN9LCdjb3JuZXInOnsncG9seSc6W1sweDMsMHgzXSxbMHgyMywweDNdLFsweDIzLDB4MWVdLFsweDE2LDB4MWVdLFsweDE2LDB4MTBdLFsweDMsMHgxMF1dLCdjb3JlJzpbMHgxOCwweGJdLCduJzoweGV9LCd1c2hhcGUnOnsncG9seSc6W1sweDMsMHgzXSxbMHgyOSwweDNdLFsweDI5LDB4MWVdLFsweDFkLDB4MWVdLFsweDFkLDB4MTBdLFsweGYsMHgxMF0sWzB4ZiwweDFlXSxbMHgzLDB4MWVdXSwnY29yZSc6WzEwLjUsMTAuNV0sJ24nOjB4MTJ9LCdzbGFudCc6eydwb2x5JzpbWzB4MywweDldLFsweDI5LDB4M10sWzB4MjksMHgxNl0sWzB4MywweDE2XV0sJ2NvcmUnOlsweDE0LDB4Y10sJ24nOjB4Y30sJ2Jsb2NrJzp7J3BvbHknOltbMHg0LDB4M10sWzB4MjgsMHgzXSxbMHgyOCwweDFlXSxbMHg0LDB4MWVdXSwnY29yZSc6WzB4MTQsMHhhXSwnbic6MHgxMn19LGc9NC41LHQ9NS41LEQ9KCk9PltJcCxJUCxJZl1bZUooMHgyYTYpXShCb29sZWFuKSxTPXU9PnVbMHgyXXx8ZyxJMD11PT51WzB4M118fHQsSTE9KHUsWSk9PnVbMHgwXTxZWzB4MF0rUyhZKSsweDEmJllbMHgwXTx1WzB4MF0rUyh1KSsweDEmJnVbMHgxXTxZWzB4MV0rSTAoWSkrMHgxJiZZWzB4MV08dVsweDFdK0kwKHUpKzB4MTtmdW5jdGlvbiBJMihZKXtjb25zdCBlUz1lSjtpZihZWzB4NF0pe2NvbnN0IGM2PVMoWSksYzc9STAoWSksYzg9WVsweDVdLGM5PVlbMHg0XSxjST1jOT09PSdzJ3x8Yzk9PT0nbic\/YzY6YzcsY3I9KGM5PT09J3MnfHxjOT09PSduJz9jNzpjNiktYzgsY2g9YzgrY3IsY2M9Y3I+PTUuNSxjaz1jOCsoY2M\/Y3ItMC4zOjIuNTIpLGNpPShjeixjUCk9PmM5PT09J3MnP1tZWzB4MF0rY3osWVsweDFdK2NQXTpjOT09PSduJz9bWVsweDBdK2N6LFlbMHgxXStjNy1jUF06Yzk9PT0nZSc\/W1lbMHgwXStjUCxZWzB4MV0rY3pdOltZWzB4MF0rYzYtY1AsWVsweDFdK2N6XSxjTj0oY3osY1AsY2YsY0IpPT5bY2koY3osY1ApLGNpKGNmLGNQKSxjaShjZixjQiksY2koY3osY0IpLGNpKGN6LGNQKV0sY3Y9W10sY3U9W10sY1k9YzgrMS40NTtpZihZWzB4Nl0pe2NvbnN0IGN6PShjcyxjVixjRSxjVSk9Pntjb25zdCBlZz12LGNYPWNWLWNzLGNXPVtdO2ZvcihsZXQgY0Y9MHgwO2NGPD0weDg7Y0YrKyl7Y29uc3QgY0c9Y0YvMHg4Kk1hdGhbJ1BJJ10vMHgyO2NXWydwdXNoJ10oY2koY3MrY1gqTWF0aFtlZygweDY2NyldKGNHKSxjRStjWCpNYXRoWydjb3MnXShjRykpKTt9cmV0dXJueydnYXAnOltjaShjcyxjRSksY2koY1YsY0UpXSwnbGVhZic6W2NpKGNzLGNFKSxjaShjcyxjRStjWCldLCdhcmMnOmNXLCdpbm5lcic6Y1V9O30sY1A9W10sY2Y9KGNzLGNWKT0+e2NvbnN0IGV0PXYsY0U9W107Zm9yKGxldCBjVT0weDA7Y1U8PTB4ZTtjVSsrKXtjb25zdCBjWD1jVS8weGUqTWF0aFsnUEknXSoweDI7Y0VbZXQoMHgyYjMpXShjaShjcyswLjA3Kk1hdGhbZXQoMHg0YmYpXShjWCksYzgrY1YrMC4wNypNYXRoW2V0KDB4NjY3KV0oY1gpKSk7fXJldHVybiBjRTt9LGNCPShjcyxjVixjRSk9PltbY2koY3MsYzgrY1YpLGNpKGNzLWNFKjAuMjIsYzgrY1YtMC4xKV0sW2NpKGNzLGM4K2NWKSxjaShjcy1jRSowLjIyLGM4K2NWKzAuMSldXSxjYj0oY3MsY1YpPT5jaShjcyxjOCtjViksY2Q9Yzg+PTIuMixjQz1ZWzB4N109PT0weDI\/MHgyOjB4MSxjVD1ZWzB4Nl09PT0weDI\/MHg3OjB4NSxjbz1bXSxjdz0oY3MsY1YsY0UpPT57Y29uc3QgZUQ9djtjdVtlRCgweDJiMyldKFtjaShjcyxjViksY2koY3MrMC41LGNWKV0sW2NpKGNzKzEuNCxjViksY2koY3MrMS45NSxjVildLFtjaShjcyxjViksY2koY3MsY1YrMi4wNSldKTtpZighY0UpY3VbZUQoMHgyYjMpXShbY2koY3MrMS45NSxjViksY2koY3MrMS45NSxjVisyLjA1KV0pO2N2W2VEKDB4MmIzKV0oY04oY3MrMC4zLGNWKzAuMzIsY3MrMS42LGNWKzEuOCksW2NpKGNzKzAuMyxjViswLjMyKSxjaShjcysxLjYsY1YrMS44KV0sW2NpKGNzKzEuNixjViswLjMyKSxjaShjcyswLjMsY1YrMS44KV0sW2NpKGNzKzAuNSxjViswLjEpLGNpKGNzKzAuOTUsY1YrMC4xKV0sW2NpKGNzKzAuOTUsY1YrMC4xOCksY2koY3MrMS40LGNWKzAuMTgpXSxbY2koY3MrMC41LGNWKSxjaShjcyswLjUsY1YrMC4zMildLFtjaShjcysxLjQsY1YpLGNpKGNzKzEuNCxjViswLjMyKV0pO307aWYoWVsweDZdPT09MHgyKXtjb25zdCBjcz0xLjIsY1Y9NS44O2ZvcihsZXQgY0U9MHgwO2NFPD0weDEwO2NFKyspe2NvbnN0IGNVPWNzK2NFKjAuMjg3NTtjdlsncHVzaCddKFtjYihjVSwwLjE1KSxjYihjVSwxLjI1KV0sW2NiKGNVLDEuMzUpLGNiKGNVLDIuNDUpXSk7fWN2W2VTKDB4MmIzKV0oY2YoY3MrMC4xNCwwLjcpLFtjYihjcyswLjE0LDAuNyksY2IoY1YtMC4zLDAuNyldLC4uLmNCKGNWLTAuMywwLjcsMHgxKSxjZihjVi0wLjE0LDEuOSksW2NiKGNWLTAuMTQsMS45KSxjYihjcyswLjMsMS45KV0sLi4uY0IoY3MrMC4zLDEuOSwtMHgxKSksY3VbZVMoMHgyYjMpXShbY2IoY3MsMS4zKSxjYihjViwxLjMpXSxbY2IoY3MsMS4zKSxjYihjcyxjcildLFtjYihjViwxLjMpLGNiKGNWLDB4MCldKSxjb1tlUygweDJiMyldKFswLjIsMS4xXSxbNS45LDYuOF0pO2lmKGNkKXtjdVsncHVzaCddKFtjaSgzLjUsMHgwKSxjaSgzLjUsYzgpXSksY3coMy41LGM4LTIuMDUsIVtdKTtpZihjQz09PTB4MiljdygxLjU1LGM4LTIuMDUsIVtdKTt9fWVsc2V7Y29uc3QgY1g9MS4yNSxjVz1jWCsyLjUyLGNGPWNYKzEuNDU7Y3ZbZVMoMHgyYjMpXShjTihjWCxjOCsxLjI1LGNXLGM4KzEuMzUpKTtmb3IobGV0IGNHPTB4MDtjRzw9MHg5O2NHKyspe2NvbnN0IGNMPWNYK2NHKjAuMjg7Y3ZbZVMoMHgyYjMpXShbY2IoY0wsMC4xNSksY2IoY0wsMS4yNSldKTtpZihjTD49Y0YpY3ZbZVMoMHgyYjMpXShbY2IoY0wsMS4zNSksY2IoY0wsMi40NSldKTt9Y3ZbZVMoMHgyYjMpXShbY2IoY0YtMC4zMiwxLjM1KSxjYihjRi0wLjE4LDEuNyksY2IoY0YtMC4zLDEuOCksY2IoY0YtMC4wNSwweDIpLGNiKGNGLTAuMTcsMi4xKSxjYihjRiwyLjQ1KV0pLGN2W2VTKDB4MmIzKV0oY2YoY1grMC4xNCwwLjcpLFtjYihjWCswLjE0LDAuNyksY2IoY1QtMC42LDAuNyksY2IoY1QtMC42LDEuOSksY2IoY0YrMC41LDEuOSldLC4uLmNCKGNGKzAuNSwxLjksLTB4MSkpLGNvW2VTKDB4MmIzKV0oWzAuMjUsMS4xNV0pO2lmKGNkKXtmb3IobGV0IGNLPTB4MDtjSzxjQztjSysrKWN3KGNULTEuOTUqKGNLKzB4MSksYzgtMi4wNSxjSz09PTB4MCk7fX1jdVtlUygweDJiMyldKFtjaSgweDAsMHgwKSxjaSgweDAsY2gpXSxbY2koMHgwLGNoKSxjaShjSSxjaCldLFtjaShjSSwweDApLGNpKGNJLGNoKV0pO2NvbnN0IGNhPWNqPT57Y29uc3QgQjA9ZVM7bGV0IGNIPTB4MDtmb3IoY29uc3QgW2NRLGNsXW9mIGNvKXtjdVtCMCgweDJiMyldKFtjaShjSCxjaiksY2koY1EsY2opXSksY0g9Y2w7fWN1W0IwKDB4MmIzKV0oW2NpKGNILGNqKSxjaShjVCxjaildKTt9O2NhKDB4MCk7Zm9yKGNvbnN0IFtjaixjSF1vZiBjbyljUFtlUygweDJiMyldKGN6KGNqLGNILDB4MCwhW10pKTtpZihjOD4weDApe2NhKGM4KTtmb3IoY29uc3QgW2NRLGNsXW9mIGNvKWNQW2VTKDB4MmIzKV0oY3ooY1EsY2wsYzgsISFbXSkpO31pZighY2Qpe2N1W2VTKDB4MmIzKV0oW2NpKGNULGM4KSxjaShjVCxjaCldLFtjaShjVCxjOCsyLjA1KSxjaShjSSxjOCsyLjA1KV0pO2xldCBjbT1jVDtmb3IobGV0IGNKPTB4MDtjSjxjQyYmY20rMS45PD1jSSswLjA1O2NKKyspe2N3KGNtLGM4LGNtKzEuOTU+PWNJLTAuMDUpLGNtKz0xLjk1O31pZihjST5jbSswLjA1KWN1W2VTKDB4MmIzKV0oW2NpKGNtLGM4KSxjaShjSSxjOCldKTtpZihjOD4weDApY3VbZVMoMHgyYjMpXShbY2koY1QsMHgwKSxjaShjVCxjOCldKTt9cmV0dXJueyd0aGluJzpjdiwnYm9sZCc6Y3UsJ2xhYic6Yzg+PTB4MSYmIShjZCYmY0M9PT0weDIpP2NpKFlbMHg2XT09PTB4Mj9jZD8xLjc1OjMuNTpjZD8oY1QtMS45NSkvMHgyOmNULzB4MixjOC8weDIpOm51bGwsJ2Rvb3JzJzpjUH07fWN2WydwdXNoJ10oY04oMS4yNSxjOCwxLjM1LGNrKSk7aWYoY2Mpe2NvbnN0IGNuPU1hdGhbZVMoMHg1M2IpXSgoY2stYzgpLzAuMjgpO2ZvcihsZXQgY3g9MHgwO2N4PD1jbjtjeCsrKXtjb25zdCBjZz1jOCtjeCowLjI4O2N2W2VTKDB4MmIzKV0oW2NpKDAuMTUsY2cpLGNpKDEuMjUsY2cpXSxbY2koMS4zNSxjZyksY2koMi40NSxjZyldKTt9Y3ZbZVMoMHgyYjMpXShbY2koMC43LGM4KzAuMTQpLGNpKDAuNyxjay0wLjMpXSxbY2koMC43LGNrLTAuMyksY2koMC42LGNrLTAuNTIpXSxbY2koMC43LGNrLTAuMyksY2koMC44LGNrLTAuNTIpXSxbY2koMS45LGNrLTAuMTQpLGNpKDEuOSxjOCswLjMpXSxbY2koMS45LGM4KzAuMyksY2koMS44LGM4KzAuNTIpXSxbY2koMS45LGM4KzAuMyksY2koMHgyLGM4KzAuNTIpXSk7Y29uc3QgY1I9W107Zm9yKGxldCBjdD0weDA7Y3Q8PTB4ZTtjdCsrKXtjb25zdCBjRD1jdC8weGUqTWF0aFsnUEknXSoweDI7Y1JbZVMoMHgyYjMpXShjaSgwLjcrMC4wNypNYXRoW2VTKDB4NGJmKV0oY0QpLGM4KzAuMTQrMC4wNypNYXRoW2VTKDB4NjY3KV0oY0QpKSk7fWN2W2VTKDB4MmIzKV0oY1IpO2NvbnN0IGN5PVtdO2ZvcihsZXQgY1M9MHgwO2NTPD0weGU7Y1MrKyl7Y29uc3QgazA9Y1MvMHhlKk1hdGhbJ1BJJ10qMHgyO2N5W2VTKDB4MmIzKV0oY2koMS45KzAuMDcqTWF0aFtlUygweDRiZildKGswKSxjay0wLjE0KzAuMDcqTWF0aFsnc2luJ10oazApKSk7fWN2W2VTKDB4MmIzKV0oY3kpO31lbHNle2ZvcihsZXQgazI9MHgwO2syPD0weDk7azIrKyl7Y29uc3QgazM9YzgrazIqMC4yODtjdltlUygweDJiMyldKFtjaSgwLjE1LGszKSxjaSgxLjI1LGszKV0pO2lmKGszPD1jWSljdltlUygweDJiMyldKFtjaSgxLjM1LGszKSxjaSgyLjQ1LGszKV0pO31jdltlUygweDJiMyldKFtjaSgxLjM1LGNZKzAuMzIpLGNpKDEuNyxjWSswLjE4KSxjaSgxLjgsY1krMC4zKSxjaSgweDIsY1krMC4wNSksY2koMi4xLGNZKzAuMTcpLGNpKDIuNDUsY1kpXSksY3ZbZVMoMHgyYjMpXShbY2koMC43LGM4KzAuMTQpLGNpKDAuNyxjayswLjYpLGNpKDEuOSxjayswLjYpLGNpKDEuOSxjWSswLjUpXSxbY2koMS45LGNZKzAuNSksY2koMS44LGNZKzAuNzIpXSxbY2koMS45LGNZKzAuNSksY2koMHgyLGNZKzAuNzIpXSk7Y29uc3QgazE9W107Zm9yKGxldCBrND0weDA7azQ8PTB4ZTtrNCsrKXtjb25zdCBrNT1rNC8weGUqTWF0aFsnUEknXSoweDI7azFbZVMoMHgyYjMpXShjaSgwLjcrMC4wNypNYXRoWydjb3MnXShrNSksYzgrMC4xNCswLjA3Kk1hdGhbZVMoMHg2NjcpXShrNSkpKTt9Y3ZbJ3B1c2gnXShrMSk7fWN1W2VTKDB4MmIzKV0oW2NpKDIuNTUsYzgpLGNpKDIuNTUsY2gpXSxbY2koMi41NSxjOCksY2koMy4wNSxjOCldLFtjaSgyLjU1LGM4KzIuMDUpLGNpKGNJLGM4KzIuMDUpXSxbY2koMHgwLGNoKSxjaShjSSxjaCldKTtjb25zdCBjTT1jST49Ni4zP1syLjU1LDQuNV06WzIuNTVdO2xldCBjcT0yLjU1O2Zvcihjb25zdCBrNiBvZiBjTSl7Y3VbZVMoMHgyYjMpXShbY2koazYrMS40LGM4KSxjaShrNisxLjk1LGM4KV0pO2lmKGs2PjIuNTUpY3VbZVMoMHgyYjMpXShbY2koazYsYzgpLGNpKGs2KzAuNSxjOCldLFtjaShrNixjOCksY2koazYsYzgrMi4wNSldKTtjdltlUygweDJiMyldKGNOKGs2KzAuMyxjOCswLjMyLGs2KzEuNixjOCsxLjgpLFtjaShrNiswLjMsYzgrMC4zMiksY2koazYrMS42LGM4KzEuOCldLFtjaShrNisxLjYsYzgrMC4zMiksY2koazYrMC4zLGM4KzEuOCldLFtjaShrNiswLjUsYzgrMC4xKSxjaShrNiswLjk1LGM4KzAuMSldLFtjaShrNiswLjk1LGM4KzAuMTgpLGNpKGs2KzEuNCxjOCswLjE4KV0sW2NpKGs2KzAuNSxjOCksY2koazYrMC41LGM4KzAuMzIpXSxbY2koazYrMS40LGM4KSxjaShrNisxLjQsYzgrMC4zMildKSxjcT1rNisxLjk1O31pZihjST5jcSswLjA1KWN1W2VTKDB4MmIzKV0oW2NpKGNxLGM4KSxjaShjSSxjOCldKTtyZXR1cm57J3RoaW4nOmN2LCdib2xkJzpjdSwnbGFiJzpjaShjSS8weDIsYzgvMHgyKX07fWlmKFlbMHgyXSl7Y29uc3Qgazc9WVsweDNdPllbMHgyXSxrOD1NYXRoW2VTKDB4NDNjKV0oWVsweDJdLFlbMHgzXSksazk9TWF0aFtlUygweDQ1MSldKFlbMHgyXSxZWzB4M10pLGtJPShrWSxrTSk9Pms3P1tZWzB4MF0ra1ksWVsweDFdK2tNXTpbWVsweDBdK2tNLFlbMHgxXStrWV0sa3I9W10sa2M9azgvMHgyLGtrPU1hdGhbZVMoMHg0M2MpXSgxLjMsazkqMC4yNiksa2k9azkta2ssa049TWF0aFtlUygweDQ1MSldKDB4MyxNYXRoWydmbG9vciddKChraS1raykvMC4yOCkpLGt2PShrWSxrTSxrcSxreik9PltrSShrWSxrTSksa0koa3Esa00pLGtJKGtxLGt6KSxrSShrWSxreildO2tyW2VTKDB4MmIzKV0oa3Yoa2MtMC4xLGtrLGtjKzAuMSxraSksW2tJKDAuMixrayksa0koMC4yLGtpKV0sW2tJKGs4LTAuMixrayksa0koazgtMC4yLGtpKV0pO2ZvcihsZXQga1k9MHgwO2tZPD1rTjtrWSsrKXtjb25zdCBrTT1raytrWSooa2kta2spL2tOO2tyW2VTKDB4MmIzKV0oW2tJKDAuMixrTSksa0koa2MtMC4xLGtNKV0pO2lmKGtZPGtOKjAuNTUpa3JbJ3B1c2gnXShba0koa2MrMC4xLGtNKSxrSShrOC0wLjIsa00pXSk7fWNvbnN0IGt1PWtrKyhraS1raykqMC41ODtyZXR1cm4ga3JbJ3B1c2gnXShba0koa2MrMC4xLGt1KSxrSShrOC0wLjIsa3UtMC4zKV0pLGtyWydwdXNoJ10oW2tJKGtjLzB4MiswLjA1LGtrKzAuMiksa0koa2MvMHgyKzAuMDUsa2krMC4zKSxrSShrYytrYy8weDIsa2krMC4zKSxrSShrYytrYy8weDIsa2srKGtpLWtrKSowLjQ1KV0pLHsndGhpbic6a3IsJ2JvbGQnOltdfTt9Y29uc3QgaEQ9KGtxLGt6KT0+W1lbMHgwXStrcSxZWzB4MV0ra3pdLGhTPVtdLGMwPVtdLGMxPShrcSxreixrUCxrZik9PltoRChrcSxreiksaEQoa1Asa3opLGhEKGtQLGtmKSxoRChrcSxrZildLGMyPTEuMyxjMz0zLjgyLGM0PTAuMjg7YzBbZVMoMHgyYjMpXShbaEQoMy45NSwwLjEyKSxoRCgzLjk1LDIuNCldKSxoU1tlUygweDJiMyldKGMxKGMyLDEuNSxjMywxLjgpLGMxKGMyKzAuMDYsMS41OCxjMy0wLjA2LDEuNzIpKTtmb3IobGV0IGtxPTB4MDtrcTw9MHg5O2txKyspe2NvbnN0IGt6PWMyK2txKmM0O2hTW2VTKDB4MmIzKV0oW2hEKGt6LDAuMiksaEQoa3osMS41KV0pO2lmKGt6PDIuNSloU1tlUygweDJiMyldKFtoRChreiwxLjgpLGhEKGt6LDMuMSldKTtlbHNle2ZvcihsZXQga1A9MHgwO2tQPDB4NTtrUCsrKWhTWydwdXNoJ10oW2hEKGt6LDEuODUra1AqMC4yNiksaEQoa3osMS45OCtrUCowLjI2KV0pO319aFNbZVMoMHgyYjMpXShbaEQoMC4yLDAuMiksaEQoYzMsMC4yKV0sW2hEKDAuMiwzLjEpLGhEKGMzLDMuMSldLFtoRChjMywwLjIpLGhEKGMzLDEuNSldKSxoU1tlUygweDJiMyldKFtoRCgyLjM1LDMuMTUpLGhEKDIuNTUsMi41NSksaEQoMi4zOCwyLjQ1KSxoRCgyLjYyLDIuMyksaEQoMi40NSwyLjIpLGhEKDIuNjUsMS43NSldKSxoU1tlUygweDJiMyldKFtoRCgzLjY4LDIuNDUpLGhEKDAuNzgsMi40NSksaEQoMC43OCwwLjg1KSxoRCgzLjUsMC44NSldLFtoRCgzLjUsMC44NSksaEQoMy4yNiwwLjcyKV0sW2hEKDMuNSwwLjg1KSxoRCgzLjI2LDAuOTgpXSk7Y29uc3QgYzU9W107Zm9yKGxldCBrZj0weDA7a2Y8MHhlO2tmKyspe2NvbnN0IGtBPWtmLzB4ZSpNYXRoWydQSSddKjB4MjtjNVtlUygweDJiMyldKGhEKDMuNjgrMC4wOCpNYXRoW2VTKDB4NGJmKV0oa0EpLDIuNDUrMC4wOCpNYXRoW2VTKDB4NjY3KV0oa0EpKSk7fXJldHVybiBoU1tlUygweDJiMyldKGM1KSxjMFsncHVzaCddKGMxKDQuMTUsMC4yLDUuOCwyLjI1KSksaFNbJ3B1c2gnXShjMSg0LjQsMC40NSw1LjU1LDEuODUpLGMxKDQuNSwwLjI1LDUuNDUsMC4zOCksW2hEKDQuNCwwLjQ1KSxoRCg1LjU1LDEuODUpXSxbaEQoNS41NSwwLjQ1KSxoRCg0LjQsMS44NSldLFtoRCg0LjU1LDIuMDMpLGhEKDQuOTUsMi4wMyldLFtoRCgweDUsMi4wMyksaEQoNS40LDIuMDMpXSxbaEQoNC41NSwxLjg1KSxoRCg0LjU1LDIuMjUpXSxbaEQoNS40LDEuODUpLGhEKDUuNCwyLjI1KV0pLHsndGhpbic6aFMsJ2JvbGQnOmMwfTt9Y29uc3QgSTM9eydhJzp7J2FyZWEnOjB4MmQsJ21pbic6MHgxOSwnbWF4JzoweDNhLCdiZWRzJzoweDF9LCdiJzp7J2FyZWEnOjB4NDQsJ21pbic6MHgzYSwnbWF4JzoweDUwLCdiZWRzJzoweDJ9LCdjJzp7J2FyZWEnOjB4NTgsJ21pbic6MHg0ZSwnbWF4JzoweDY0LCdiZWRzJzoweDN9fSxJND17J3Byb2cnOnsncmVzZXJ2ZSc6MC4xLCd0b2wnOjAuMSwncGFydCc6MC4zLCdmdWxmaWxUb2wnOjAuNzUsJ2Z1bGZpbFBhcnQnOjAuNX0sJ2RheSc6eydzaGFyZSc6MHgxLzB4OCwnd2luSCc6MS40LCd3aW5NYXgnOjIuNCwnd2luTWluJzowLjksJ25vb2tNaW4nOjB4OH0sJ2JlZHJvb20nOnsnbWluQXJlYSc6MHg4LCdtaW5XaWR0aCc6Mi41fSwnd2VkZ2UnOnsnbm9MaXZpbmcnOjIuNSwnbm9CZWQnOjMuNX0sJ3Byb2ZpbGVzJzp7J3poJzp7J21pbic6ezEuNToweDJkLDB4MjoweDM3LDIuNToweDNjLDB4MzoweDQ2LDMuNToweDUwLDB4NDoweDVhLDQuNToweDVmLDB4NToweDY0fX0sJ2JmJzp7J2hhbGxXJzoxLjIsJ3R1cm4nOjEuNX19LCdlcnJvcnMnOnsnaGFyZCc6W2VKKDB4NjI2KSxlSigweDY2NSksZUooMHgyZGYpLCdkYXJrJyxlSigweDIzZSksJ2tpdFdpbicsZUooMHgzNGYpLGVKKDB4NTFjKSxlSigweDU3MiksZUooMHg2NmUpLGVKKDB4NGEzKSxlSigweDRmOSldLCdzb2Z0JzpbZUooMHg2MzYpLGVKKDB4Mjk3KSwndGlueScsZUooMHg0ODgpLGVKKDB4MWMxKSwnZXNjYXBlJ10sJ3NvZnRQZW5hbHR5JzoweDE0fSwnY291cnQnOnsnbWluV2lkdGgnOjB4OCwnZGVwdGhGYWN0b3InOjB4Mn0sJ2FjY2Vzcyc6eydtYXhEb29yVG9Db3JlJzoweDFlLCdkZWFkRW5kJzoweGYsJ21pbkNvcnJpZG9yJzoxLjUsJ3VuaXRzUGVyQ29yZSc6MHg4LCdoYWxsRG9vcnMnOjB4Mn19LEk1PW5ldyBTZXQoSTRbZUooMHgyZjApXVtlSigweDYyZCldKSxJNj11PT57Y29uc3QgQjE9ZUosWT1PYmplY3RbQjEoMHgxYmEpXSh1W0IxKDB4NDYzKV0pW0IxKDB4MmE2KV0oKFtoRCxoU10pPT5oUyk7cmV0dXJuIHVbQjEoMHg2N2EpXT1ZWydmaWx0ZXInXSgoW2hEXSk9PiFJNVtCMSgweDMwYildKGhEKSlbJ21hcCddKChbaERdKT0+aEQpLHVbQjEoMHg2MmQpXT1ZW0IxKDB4MmE2KV0oKFtoRF0pPT5JNVtCMSgweDMwYildKGhEKSlbJ21hcCddKChbaERdKT0+aEQpLCF1WydoYXJkJ11bQjEoMHg2NjEpXTt9LEk3PXsndW5pdHMnOjB4YywnY29ycmlkb3InOjEuNSwnYSc6MHg0LCdiJzoweDMsJ2MnOjB4MSwnZmxvb3InOidlZycsJ2VudHJ5UG9zJzpudWxsLCd1bml0c1dhbnRlZCc6bnVsbCwnZ3JpZCc6MHgwLCdhbmdsZSc6MHgxOSwnd2luZyc6MHgxYSwnam9pbnQnOidvcGVuJywnd2luJzplSigweDU1YSksJ2ltZ1cnOjB4MWUsJ2ltZ09wJzoweDI4LCdjb3JlJzplSigweDQ4ZCksJ2NvcmVSb3QnOidhdXRvJywncHJvZmlsZXMnOnsnemgnOiFbXSwnYmYnOiFbXX19O2xldCBJOD1bXSxJOT1bXSxJST1udWxsLElyPSFbXSxJaD1udWxsLEljPSgpPT57fSxJaz1lSigweDUzNCk7Y29uc3QgSWk9KHUsWSk9PklrPT09ZUooMHg1MzQpP3U+PTB4NTA\/MHgzOnU+PTB4M2E\/MHgyOnU+PTB4MWU\/MHgxOjB4MDpJM1tZXVsnYmVkcyddO2xldCBJTj1udWxsLEl2PVtdLEl1PW51bGwsSVk9bnVsbCxJTT1udWxsLElxPSFbXSxJej0nYXV0bycsSVA9bnVsbCxJZj1udWxsLElBPVtdLElwPVsweDAsMHgwXSxJWj1bXSxJTz1lSigweDYzYyksSWU9bnVsbCxJQj0weDE7Y29uc3QgSWI9KCk9Pntjb25zdCBCMj1lSix1PVtdO2ZvcihsZXQgWT0weDA7WTxJQVtCMigweDY2MSldO1krKyl7Y29uc3QgaEQ9SUFbWV0saFM9SUFbKFkrMHgxKSVJQVtCMigweDY2MSldXTtpZihoRFsweDBdIT09aFNbMHgwXSYmaERbMHgxXSE9PWhTWzB4MV0pdVsncHVzaCddKFtoRCxoU10pO31yZXR1cm4gdTt9LElkPSh1LFkpPT5JYSh1LFkpfHxJYigpWydzb21lJ10oKFtoRCxoU10pPT57Y29uc3QgQjM9ZUosYzA9aFNbMHgwXS1oRFsweDBdLGMxPWhTWzB4MV0taERbMHgxXSxjMj1NYXRoW0IzKDB4NDUxKV0oMHgwLE1hdGhbJ21pbiddKDB4MSwoKHUtaERbMHgwXSkqYzArKFktaERbMHgxXSkqYzEpLyhjMCpjMCtjMSpjMSkpKTtyZXR1cm4gTWF0aFtCMygweDQ3NSldKHUtaERbMHgwXS1jMipjMCxZLWhEWzB4MV0tYzIqYzEpPDEuMTt9KSxJQz0odSxZKT0+dVsweDBdPT09WVsweDBdJiZ1WzB4MV09PT1ZWzB4MV0sSVQ9KHUsWSk9PiEhSXUmJklDKHUsSXVbMHgwXSkmJklDKFksSXVbMHgxXSksSW89KCk9PkliKClbJ2ZpbHRlciddKChbdSxZXSk9PiFJVCh1LFkpKSxJdz0odSxZKT0+SW8oKVtlSigweDY2OCldKChbaEQsaFNdKT0+e2NvbnN0IEI0PWVKLGMwPWhTWzB4MF0taERbMHgwXSxjMT1oU1sweDFdLWhEWzB4MV0sYzI9TWF0aFsnbWF4J10oMHgwLE1hdGhbQjQoMHg0M2MpXSgweDEsKCh1LWhEWzB4MF0pKmMwKyhZLWhEWzB4MV0pKmMxKS8oYzAqYzArYzEqYzEpKSk7cmV0dXJuIE1hdGhbQjQoMHg0NzUpXSh1LWhEWzB4MF0tYzIqYzAsWS1oRFsweDFdLWMyKmMxKTwxLjE7fSksSWE9KHUsWSk9Pntjb25zdCBCNT1lSjtpZighSXUpcmV0dXJuIVtdO2NvbnN0IFtoRCxoU109SXUsYzA9aFNbMHgwXS1oRFsweDBdLGMxPWhTWzB4MV0taERbMHgxXSxjMj1NYXRoW0I1KDB4NDUxKV0oMHgwLE1hdGhbJ21pbiddKDB4MSwoKHUtaERbMHgwXSkqYzArKFktaERbMHgxXSkqYzEpLyhjMCpjMCtjMSpjMSkpKTtyZXR1cm4gTWF0aFsnaHlwb3QnXSh1LWhEWzB4MF0tYzIqYzAsWS1oRFsweDFdLWMyKmMxKTwxLjE7fSxJcz11PT57Y29uc3QgQjY9ZUo7SUE9dVsncG9seSddLElwPXVbQjYoMHg0OWIpXSxJUD11W0I2KDB4NWU3KV0sSWY9dVtCNigweDUxOSldLElaPXVbQjYoMHg0ODEpXSxJdT11W0I2KDB4NTQwKV0sSVk9dVsnYmFzZSddLElNPXU7fSxJVj11PT57Y29uc3QgQjc9ZUo7dVtCNygweDQ5YildPUlwLHVbQjcoMHg1ZTcpXT1JUCx1W0I3KDB4NTE5KV09SWYsdVtCNygweDQ4MSldPUlaO30sSUU9KHUsWSk9Plt1Wyd0J11bMHgwXStZWzB4MF0qTWF0aFtlSigweDRiZildKHVbJ2EnXSktWVsweDFdKk1hdGhbZUooMHg2NjcpXSh1WydhJ10pLHVbJ3QnXVsweDFdK1lbMHgwXSpNYXRoW2VKKDB4NjY3KV0odVsnYSddKStZWzB4MV0qTWF0aFsnY29zJ10odVsnYSddKV0sSVU9KHUsWSk9Pntjb25zdCBCOD1lSixoRD1ZWzB4MF0tdVsndCddWzB4MF0saFM9WVsweDFdLXVbJ3QnXVsweDFdO3JldHVybltoRCpNYXRoW0I4KDB4NGJmKV0odVsnYSddKStoUypNYXRoW0I4KDB4NjY3KV0odVsnYSddKSwtaEQqTWF0aFtCOCgweDY2NyldKHVbJ2EnXSkraFMqTWF0aFtCOCgweDRiZildKHVbJ2EnXSldO30sSVg9KCk9Pntjb25zdCBCOT1lSjtsZXQgdT0weDA7Zm9yKGxldCBZPTB4MDtZPElBW0I5KDB4NjYxKV07WSsrKXtjb25zdCBoRD1JQVtZXSxoUz1JQVsoWSsweDEpJUlBW0I5KDB4NjYxKV1dO3UrPWhEWzB4MF0qaFNbMHgxXS1oU1sweDBdKmhEWzB4MV07fXJldHVybiB1PjB4MDt9LElXPSh1LFksaEQ9SUEpPT57Y29uc3QgQkk9ZUo7bGV0IGhTPSFbXTtmb3IobGV0IGMwPTB4MCxjMT1oRFsnbGVuZ3RoJ10tMHgxO2MwPGhEW0JJKDB4NjYxKV07YzE9YzArKylpZihoRFtjMF1bMHgxXT5ZIT09aERbYzFdWzB4MV0+WSYmdTwoaERbYzFdWzB4MF0taERbYzBdWzB4MF0pKihZLWhEW2MwXVsweDFdKS8oaERbYzFdWzB4MV0taERbYzBdWzB4MV0pK2hEW2MwXVsweDBdKWhTPSFoUztyZXR1cm4gaFM7fSxJRj0odSxZPUlBKT0+e2NvbnN0IEJyPWVKLGhEPVModSksaFM9STAodSk7cmV0dXJuW1sweDAsMHgwXSxbaEQsMHgwXSxbaEQsaFNdLFsweDAsaFNdLFtoRC8weDIsaFMvMHgyXV1bQnIoMHg0MzUpXShjMD0+SVcodVsweDBdK2MwWzB4MF0qMC45OTkrMC4wMDEsdVsweDFdK2MwWzB4MV0qMC45OTkrMC4wMDEsWSkpJiYhSThbQnIoMHg2NjgpXShjMD0+dVsweDBdPGMwWzB4Ml0mJmMwWzB4MF08dVsweDBdK2hEJiZ1WzB4MV08YzBbMHgzXSYmYzBbMHgxXTx1WzB4MV0raFMpO307ZnVuY3Rpb24gSUcodSl7Y29uc3QgQmg9ZUo7SXQoKTtjb25zdCBZPTMuMjUsaEQ9SUFbQmgoMHgzN2YpXSgoYzQsYzUpPT57Y29uc3QgQmM9QmgsYzY9SUFbKGM1KzB4MSklSUFbJ2xlbmd0aCddXSxjNz1NYXRoW0JjKDB4NDc1KV0oYzZbMHgwXS1jNFsweDBdLGM2WzB4MV0tYzRbMHgxXSk7cmV0dXJueydhJzpjNCwndXgnOihjNlsweDBdLWM0WzB4MF0pL2M3LCd1eSc6KGM2WzB4MV0tYzRbMHgxXSkvYzcsJ2wnOmM3LCd1c2UnOk1hdGhbQmMoMHg0NTEpXSgweDAsYzctMHg2KX07fSlbQmgoMHgyYTYpXShjND0+YzRbJ2wnXT49MHhlKSxoUz1oRFtCaCgweDRiMCldKChjNCxjNSk9PmM0K2M1W0JoKDB4MWM3KV0sMHgwKSxjMD1oUy91LGMxPVtdO2xldCBjMj1jMC8weDI7Y29uc3QgYzM9KGM0LGM1KT0+SVcoYzQsYzUpJiZEKClbJ2V2ZXJ5J10oYzY9PiEoYzQ+YzZbMHgwXS0weDEmJmM0PGM2WzB4MF0rUyhjNikrMHgxJiZjNT5jNlsweDFdLTB4MSYmYzU8YzZbMHgxXStJMChjNikrMHgxKSk7Zm9yKGNvbnN0IGM0IG9mIGhEKXtmb3IoO2MyPGM0W0JoKDB4MWM3KV0mJmMxW0JoKDB4NjYxKV08dTtjMis9YzApe2NvbnN0IGM1PWM0WydhJ11bMHgwXStjNFsndXgnXSooMHgzK2MyKSxjNj1jNFsnYSddWzB4MV0rYzRbJ3V5J10qKDB4MytjMik7Zm9yKGNvbnN0IGM3IG9mWzB4MSwtMHgxXSl7Y29uc3QgYzg9YzUtYzRbJ3V5J10qWSpjNyxjOT1jNitjNFsndXgnXSpZKmM3O2lmKElXKGM4LGM5KSYmSVcoYzUtYzRbJ3V5J10qMC41KmM3LGM2K2M0Wyd1eCddKjAuNSpjNykpe2lmKGMzKGM4LGM5KSljMVtCaCgweDJiMyldKHsnaWQnOklCKyssJ3gnOk1hdGhbQmgoMHg0NzIpXShjOCoweDIpLzB4MiwneSc6TWF0aFtCaCgweDQ3MildKGM5KjB4MikvMHgyfSk7YnJlYWs7fX19YzItPWM0Wyd1c2UnXTt9Zm9yKGxldCBjST0weDA7YzFbQmgoMHg2NjEpXTx1JiZjSTwweDNjO2NJKyspe2xldCBjcj1udWxsLGNoPTB4MDtmb3IobGV0IGNjPTB4MTtjYzxFO2NjKz0weDEpZm9yKGxldCBjaz0weDE7Y2s8Vjtjays9MHgxKXtpZighYzMoY2ssY2MpfHwhSVcoY2stMHgyLGNjKXx8IUlXKGNrKzB4MixjYyl8fCFJVyhjayxjYy0weDIpfHwhSVcoY2ssY2MrMHgyKSljb250aW51ZTtsZXQgY2k9MHgzYjlhY2EwMDtmb3IoY29uc3QgY04gb2YgYzEpY2k9TWF0aFtCaCgweDQzYyldKGNpLE1hdGhbJ2h5cG90J10oY05bJ3gnXS1jayxjTlsneSddLWNjKSk7Y2k+Y2gmJihjaD1jaSxjcj1bY2ssY2NdKTt9aWYoIWNyKWJyZWFrO2MxW0JoKDB4MmIzKV0oeydpZCc6SUIrKywneCc6Y3JbMHgwXSwneSc6Y3JbMHgxXX0pO31JWj1jMTtpZihJaz09PUJoKDB4MmVlKSl7Y29uc3QgY3Y9SU0mJklNW0JoKDB4MmVlKV0\/SU1bQmgoMHgyZWUpXTpJNztJWltCaCgweDNiOSldKGNQPT57Y1BbJ3QnXT0nYic7fSk7Y29uc3QgY3U9SXQoKSxjWT1jdVsnY29tcHMnXVtCaCgweDM3ZildKGNQPT5jUFtCaCgweDIxMyldKSxjTT1jdVsnY29tcHMnXVtCaCgweDM3ZildKCgpPT4weDApO0laW0JoKDB4M2I5KV0oY1A9Pntjb25zdCBCaz1CaDtpZihjUFtCaygweDIyZSldIT09dW5kZWZpbmVkKWNNW2NQW0JrKDB4MjJlKV1dKys7fSk7Y29uc3QgY3E9W107Zm9yKGNvbnN0IGNQIG9mWydjJywnYicsJ2EnXSlmb3IobGV0IGNmPTB4MDtjZjxjdltjUF07Y2YrKyljcVsncHVzaCddKGNQKTtjb25zdCBjej1jdVtCaCgweDUzOSldWydtYXAnXSgoKT0+W10pO2Zvcihjb25zdCBjQiBvZiBjcSl7bGV0IGNiPS0weDEsY2Q9LTB4M2I5YWNhMDA7Y1lbQmgoMHgzYjkpXSgoY0MsY1QpPT57Y29uc3QgQmk9Qmg7aWYoY3pbY1RdW0JpKDB4NjYxKV0+PWNNW2NUXSlyZXR1cm47Y29uc3QgY289Y0MvTWF0aFtCaSgweDQ1MSldKDB4MSxjTVtjVF0tY3pbY1RdW0JpKDB4NjYxKV0pO2NvPmNkJiYoY2Q9Y28sY2I9Y1QpO30pO2lmKGNiPDB4MClicmVhaztjeltjYl1bJ3B1c2gnXShjQiksY1lbY2JdLT1JM1tjQl1bQmgoMHgyMTMpXTt9Y3pbQmgoMHgzYjkpXSgoY0MsY1QpPT57Y29uc3QgQk49QmgsY289SVpbJ2ZpbHRlciddKGN3PT5jd1tCTigweDIyZSldPT09Y1QpO2NvWydmb3JFYWNoJ10oKGN3LGNhKT0+e2N3Wyd0J109Y0NbY2FdfHwnYSc7fSk7fSk7fWVsc2UgSUgoMHg1KSxJaigpLElMKCksSUsoKSxJTCgpO31mdW5jdGlvbiBJTCgpe2NvbnN0IEJ2PWVKO2lmKCFJTXx8SXZbMHgwXSE9PUlNfHwhSU1bQnYoMHg1YTEpXXx8STdbQnYoMHg0N2IpXSE9PUJ2KDB4NTQwKSlyZXR1cm47Y29uc3QgdT1JTVtCdigweDNkZSldWzB4MV07Zm9yKGNvbnN0IFkgb2ZbSTdbQnYoMHgzNGIpXT49MHgwXSl7Y29uc3QgaEQ9SU1bQnYoMHg1YTEpXVtZP0J2KDB4NWVmKTonYm90J10saFM9SVpbQnYoMHgyYTYpXShjMD0+IWMwWydkcm9wcGVkJ10mJmMwWyd5J108dT09PVkpW0J2KDB4NTc4KV0oKGMwLGMxKT0+YzFbJ3gnXS1jMFsneCddKTtpZighaFNbQnYoMHg2NjEpXSljb250aW51ZTtoU1sweDBdWyd4J109aEQtMHgzO2lmKGhTWzB4MV0mJmhTWzB4MV1bJ3gnXT5oRC0weDkpaFNbMHgxXVsneCddPWhELTB4OTt9fWZ1bmN0aW9uIElLKCl7Y29uc3QgQnU9ZUo7Zm9yKGxldCB1PTB4MDt1PDB4YTt1Kyspe2NvbnN0IFk9SXQoKSxoRD1ZW0J1KDB4MzU3KV1bQnUoMHgzN2YpXShjNT0+e2NvbnN0IEJZPUJ1LGM2PWM1W0JZKDB4MmI5KV1bQlkoMHgyYTYpXShjNz0+e2NvbnN0IEJNPUJZLGM4PShjNyVYKzAuNSkqVSxjOT0oTWF0aFsnZmxvb3InXShjNy9YKSswLjUpKlU7cmV0dXJuIWM1W0JNKDB4NTU1KV1bQk0oMHg2NjgpXShjST0+Y0lbJ2snXSE9PUJNKDB4NWZkKSYmYzg+PWNJWydiJ11bMHgwXSYmYzg8PWNJWydiJ11bMHgyXSYmYzk+PWNJWydiJ11bMHgxXSYmYzk8PWNJWydiJ11bMHgzXSk7fSk7cmV0dXJueydyJzpjNSwncmVzdCc6YzZ9O30pW0J1KDB4MmE2KV0oYzU9Pntjb25zdCBCcT1CdSxjNj1jNVtCcSgweDI2MildW0JxKDB4NjYxKV0qVSpVO2lmKGM2PDB4MTR8fGM1WydyJ11bJ2FyZWEnXS1jNjwweDFjKXJldHVybiFbXTtpZighYzVbQnEoMHgyNjIpXVtCcSgweDY2OCldKGM5PT57Y29uc3QgQno9QnEsY0k9YzklWCxjcj1NYXRoW0J6KDB4NTNiKV0oYzkvWCk7cmV0dXJuW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXVtCeigweDY2OCldKChbY2gsY2NdKT0+e2NvbnN0IEJQPUJ6LGNrPWNJK2NoLGNpPWNyK2NjO3JldHVybiBjaz49MHgwJiZjaT49MHgwJiZjazxYJiZjaTxGJiZZW0JQKDB4MjhhKV1bY2kqWCtja109PT1MO30pO30pKXJldHVybiFbXTtjb25zdCBjNz1jNVtCcSgweDI2MildW0JxKDB4MzdmKV0oYzk9PmM5JVgpLGM4PWM1W0JxKDB4MjYyKV1bJ21hcCddKGM5PT5NYXRoWydmbG9vciddKGM5L1gpKTtyZXR1cm4gTWF0aFtCcSgweDQzYyldKE1hdGhbJ21heCddKC4uLmM3KS1NYXRoW0JxKDB4NDNjKV0oLi4uYzcpLE1hdGhbQnEoMHg0NTEpXSguLi5jOCktTWF0aFsnbWluJ10oLi4uYzgpKSpVPj0zLjU7fSlbQnUoMHg1NzgpXSgoYzUsYzYpPT5jNltCdSgweDI2MildW0J1KDB4NjYxKV0tYzVbQnUoMHgyNjIpXVsnbGVuZ3RoJ10pWzB4MF07aWYoaEQpe2NvbnN0IGM1PWhEWydyZXN0J11bQnUoMHg2NjEpXSxjNj1oRFtCdSgweDI2MildW0J1KDB4NGIwKV0oKGM5LGNJKT0+YzkrY0klWCwweDApL2M1LGM3PWhEWydyZXN0J11bQnUoMHg0YjApXSgoYzksY0kpPT5jOStNYXRoWydmbG9vciddKGNJL1gpLDB4MCkvYzUsYzg9eydpZCc6SUIrKywneCc6TWF0aFtCdSgweDQ3MildKChjNiswLjUpKlUqMHgyKS8weDIsJ3knOk1hdGhbQnUoMHg0NzIpXSgoYzcrMC41KSpVKjB4MikvMHgyfTtpZihJVyhjOFsneCddLGM4Wyd5J10pKXtJWltCdSgweDJiMyldKGM4KTtjb250aW51ZTt9fWNvbnN0IGhTPVsuLi5ZW0J1KDB4MzU3KV1dW0J1KDB4NTc4KV0oKGM5LGNJKT0+Y0lbQnUoMHgyMTMpXS1jOVtCdSgweDIxMyldKVsweDBdO2lmKCFoUylyZXR1cm47Y29uc3QgYzA9WVtCdSgweDM1NyldW0J1KDB4MmE2KV0oYzk9PmM5W0J1KDB4MjEzKV0+PTB4M2MmJk1hdGhbQnUoMHg0NTEpXShjOVsndyddLGM5WydkJ10pL01hdGhbQnUoMHg0M2MpXShjOVsndyddLGM5WydkJ10pPjIuNClbQnUoMHg1NzgpXSgoYzksY0kpPT5jSVsnYXJlYSddLWM5W0J1KDB4MjEzKV0pWzB4MF07aWYoaFNbJ2FyZWEnXTw9MHg1ZiYmIWMwKXJldHVybjtpZihoU1tCdSgweDIxMyldPD0weDVmKXtjb25zdCBjOT1jMFsndyddPj1jMFsnZCddLGNJPWM5P2MwWyd3J10vMHg0OjB4MCxjcj1jOT8weDA6YzBbJ2QnXS8weDQsY2g9eydpZCc6SUIrKywneCc6TWF0aFsncm91bmQnXSgoYzBbJ2N4J10rY0kpKjB4MikvMHgyLCd5JzpNYXRoWydyb3VuZCddKChjMFsnY3knXStjcikqMHgyKS8weDJ9O2lmKCFJVyhjaFsneCddLGNoWyd5J10pKXJldHVybjtjMFtCdSgweDNjNSldWyd4J109TWF0aFtCdSgweDQ3MildKChjMFsnY3gnXS1jSSkqMHgyKS8weDIsYzBbQnUoMHgzYzUpXVsneSddPU1hdGhbQnUoMHg0NzIpXSgoYzBbJ2N5J10tY3IpKjB4MikvMHgyLElaW0J1KDB4MmIzKV0oY2gpO2NvbnRpbnVlO31jb25zdCBjMT1oU1sndyddPj1oU1snZCddLGMyPWMxP2hTWyd3J10vMHg0OjB4MCxjMz1jMT8weDA6aFNbJ2QnXS8weDQsYzQ9eydpZCc6SUIrKywneCc6TWF0aFsncm91bmQnXSgoaFNbJ2N4J10rYzIpKjB4MikvMHgyLCd5JzpNYXRoW0J1KDB4NDcyKV0oKGhTWydjeSddK2MzKSoweDIpLzB4Mn07aWYoIUlXKGM0Wyd4J10sYzRbJ3knXSkpcmV0dXJuO2hTW0J1KDB4M2M1KV1bJ3gnXT1NYXRoW0J1KDB4NDcyKV0oKGhTWydjeCddLWMyKSoweDIpLzB4MixoU1tCdSgweDNjNSldWyd5J109TWF0aFtCdSgweDQ3MildKChoU1snY3knXS1jMykqMHgyKS8weDIsSVpbJ3B1c2gnXShjNCk7fX1mdW5jdGlvbiBJaigpe2NvbnN0IEJmPWVKO2ZvcihsZXQgdT0weDA7dTwweDY7dSsrKXtjb25zdCBZPUl0KCksaEQ9WVsnY29tcHMnXVtCZigweDJhNildKGMxPT4hYzFbJ24nXSYmYzFbQmYoMHgyMTMpXT49MHgxMilbJ3NvcnQnXSgoYzEsYzIpPT5jMltCZigweDIxMyldLWMxW0JmKDB4MjEzKV0pWzB4MF07aWYoIWhEKXJldHVybjtjb25zdCBoUz1bLi4uWVtCZigweDM1NyldXVtCZigweDU3OCldKChjMSxjMik9PmMxW0JmKDB4MjEzKV0tYzJbQmYoMHgyMTMpXSlbMHgwXSxjMD1JWltCZigweDJiNSldKGMxPT5jMVtCZigweDJmZCldKXx8aFMmJmhTW0JmKDB4M2M1KV07aWYoIWMwKXJldHVybjtjMFsneCddPU1hdGhbQmYoMHg0NzIpXShoRFsneCddKjB4MikvMHgyLGMwWyd5J109TWF0aFtCZigweDQ3MildKGhEWyd5J10qMHgyKS8weDI7fX1mdW5jdGlvbiBJSCh1KXtjb25zdCBCQT1lSjtmb3IobGV0IFk9MHgwO1k8dTtZKyspe2NvbnN0IGhEPUl0KCk7aWYoaERbJ3JlZ2lvbnMnXVsnbGVuZ3RoJ108MHgyKXJldHVybjtjb25zdCBoUz1bLi4uaERbQkEoMHgzNTcpXV1bQkEoMHg1NzgpXSgoYzQsYzUpPT5jNVtCQSgweDIxMyldLWM0W0JBKDB4MjEzKV0pLGMwPWhTWzB4MF0sYzE9aFNbaFNbQkEoMHg2NjEpXS0weDFdO2lmKGMwWydhcmVhJ108PTB4NWYmJmMxW0JBKDB4MjEzKV0+PTB4MWUpcmV0dXJuO2lmKGMwW0JBKDB4MjEzKV08YzFbQkEoMHgyMTMpXSoweDIpcmV0dXJuO2xldCBjMj1NYXRoW0JBKDB4NDcyKV0oKGMwWydjeCddKyhjMFsndyddPj1jMFsnZCddP2MwWyd3J10vMHg0OjB4MCkpKjB4MikvMHgyLGMzPU1hdGhbQkEoMHg0NzIpXSgoYzBbJ2N5J10rKGMwWyd3J10+PWMwWydkJ10\/MHgwOmMwWydkJ10vMHg0KSkqMHgyKS8weDI7aWYoIUlXKGMyLGMzKSl7Y29uc3QgYzQ9YzBbQkEoMHgyYjkpXVtNYXRoW0JBKDB4NTNiKV0oYzBbQkEoMHgyYjkpXVtCQSgweDY2MSldLzB4MildO2MyPShjNCVYKzAuNSkqVSxjMz0oTWF0aFtCQSgweDUzYildKGM0L1gpKzAuNSkqVTt9YzFbQkEoMHgzYzUpXVsneCddPWMyLGMxWydzZWVkJ11bJ3knXT1jMzt9fWZ1bmN0aW9uIElRKCl7Y29uc3QgQnA9ZUo7aWYoSU0pcmV0dXJuIElrPT09QnAoMHgyZWUpJiZJTVsncHJvZyddP01hdGhbQnAoMHg0NTEpXSgweDEsSU1bQnAoMHgyZWUpXVsnYSddK0lNWydwcm9nJ11bJ2InXStJTVsncHJvZyddWydjJ10pOklNW0JwKDB4MzJhKV07cmV0dXJuIElrPT09QnAoMHgyZWUpP01hdGhbJ21heCddKDB4MSxJN1snYSddK0k3WydiJ10rSTdbJ2MnXSk6STdbJ3VuaXRzJ107fWZ1bmN0aW9uIElsKCl7Y29uc3QgQlo9ZUosdT1JN1tCWigweDM0YildKk1hdGhbJ1BJJ10vMHhiNCxZPTB4ZCxoRD1ZLzB4MipNYXRoW0JaKDB4MzdiKV0odS8weDIpLGhTPTB4MWEsYzA9MHgzLGMxPTB4NCxjMj1JN1tCWigweDI5MSldLGMzPXsncG9seSc6W1sweDMsYzBdLFsweDMraFMraEQsYzBdLFsweDMraFMtaEQsYzArWV0sWzB4MyxjMCtZXV0sJ2NvcmUnOltNYXRoW0JaKDB4NTNiKV0oKDB4MWQtTWF0aFtCWigweDNhZCldKGhEKS00LjUpKjB4MikvMHgyLEk3W0JaKDB4MzRiKV0+PTB4MD8weGE6MHg0XSwnY29yZTInOm51bGwsJ2NvcmUzJzpudWxsLCdzZWVkcyc6W10sJ2EnOjB4MCwndCc6WzB4MCwweDBdLCdiYXNlJzpudWxsLCd1bml0cyc6MHg4fTtjM1tCWigweDU0MCldPVtjM1tCWigweDNjNCldWzB4MV0sYzNbQlooMHgzYzQpXVsweDJdXTtjb25zdCBjND17J3BvbHknOltbYzEtaEQsYzBdLFtjMStjMixjMF0sW2MxK2MyLGMwK1ldLFtjMStoRCxjMCtZXV0sJ2NvcmUnOm51bGwsJ2NvcmUyJzpudWxsLCdjb3JlMyc6bnVsbCwnc2VlZHMnOltdLCdhJzp1LCdiYXNlJzpudWxsLCd1bml0cyc6MHg4fTtjNFtCWigweDU0MCldPVtjNFtCWigweDNjNCldWzB4M10sYzRbQlooMHgzYzQpXVsweDBdXTtjb25zdCBjNT1bMHgzK2hTLGMwK1kvMHgyXSxjNj1bYzEsYzArWS8weDJdO2M0Wyd0J109W2M1WzB4MF0tKGM2WzB4MF0qTWF0aFtCWigweDRiZildKHUpLWM2WzB4MV0qTWF0aFtCWigweDY2NyldKHUpKSxjNVsweDFdLShjNlsweDBdKk1hdGhbQlooMHg2NjcpXSh1KStjNlsweDFdKk1hdGhbQlooMHg0YmYpXSh1KSldLGMzW0JaKDB4M2RlKV09YzUsYzRbJ21pZCddPWM2LGM0W0JaKDB4NDRiKV09W2MxK2MyLGMwK1kvMHgyXSxJdj1bYzMsYzRdO31mdW5jdGlvbiBJbSgpe2NvbnN0IEJPPWVKLFt1LFldPUl2O0lzKHUpO2NvbnN0IGhEPUl0KCk7SVYodSk7bGV0IGhTPTB4M2I5YWNhMDA7Zm9yKGxldCBjMD0weDA7YzA8aERbJ293biddW0JPKDB4NjYxKV07YzArKylpZihoRFtCTygweDI4YSldW2MwXT09PUwmJk1hdGhbQk8oMHg0NzUpXSgoYzAlWCswLjUpKlUtdVtCTygweDNkZSldWzB4MF0sKE1hdGhbQk8oMHg1M2IpXShjMC9YKSswLjUpKlUtdVtCTygweDNkZSldWzB4MV0pPDIuNSloUz1NYXRoW0JPKDB4NDNjKV0oaFMsaERbJ3dhbGsnXVtjMF0pO1lbJ2Jhc2UnXT17J3gnOllbQk8oMHgzZGUpXVsweDBdLCd5JzpZW0JPKDB4M2RlKV1bMHgxXSwnZCc6aFM8MHg1ZjVlMTAwP2hTOjB4MH07fWZ1bmN0aW9uIElKKCl7Y29uc3QgQmU9ZUo7SWwoKTtpZihJaz09PUJlKDB4MmVlKSl7SW4oKTtyZXR1cm47fWxldCB1PTB4MCxZPTB4MDtJdltCZSgweDNiOSldKChoRCxoUyk9Pntjb25zdCBCQj1CZTtpZihoUylJbSgpO0lzKGhEKSxJN1tCQigweDMyYSldPWhEWyd1bml0cyddLHJOKCksaERbQkIoMHgzMmEpXT1JN1sndW5pdHMnXSxJVihoRCksdSs9aERbJ3VuaXRzJ107fSksSTdbQmUoMHgzMmEpXT11LHJJPScnLHIzW0JlKDB4MzJhKV0mJnIzW0JlKDB4MzJhKV0oKTt9ZnVuY3Rpb24gSW4oKXtjb25zdCBCZD1lSix1PWhEPT57Y29uc3QgQmI9djtsZXQgaFM9MHgwO2ZvcihsZXQgYzA9MHgwO2MwPGhEW0JiKDB4M2M0KV1bQmIoMHg2NjEpXTtjMCsrKXtjb25zdCBjMT1oRFtCYigweDNjNCldW2MwXSxjMj1oRFtCYigweDNjNCldWyhjMCsweDEpJWhEW0JiKDB4M2M0KV1bJ2xlbmd0aCddXTtoUys9YzFbMHgwXSpjMlsweDFdLWMyWzB4MF0qYzFbMHgxXTt9cmV0dXJuIE1hdGhbQmIoMHgzYWQpXShoUykvMHgyO30sWT1JdltCZCgweDRiMCldKChoRCxoUyk9PmhEK3UoaFMpLDB4MCk7aWYoSWs9PT1CZCgweDJlZSkpe2NvbnN0IGhEPUl2WydtYXAnXShjMD0+dShjMCkvWSk7bGV0IGhTPXsnYSc6STdbJ2EnXSwnYic6STdbJ2InXSwnYyc6STdbJ2MnXX07SXZbQmQoMHgzYjkpXSgoYzAsYzEpPT57Y29uc3QgQkM9QmQ7YzBbQkMoMHgyZWUpXT1jMT09PUl2W0JDKDB4NjYxKV0tMHgxP3suLi5oU306eydhJzpNYXRoW0JDKDB4NDcyKV0oSTdbJ2EnXSpoRFtjMV0pLCdiJzpNYXRoW0JDKDB4NDcyKV0oSTdbJ2InXSpoRFtjMV0pLCdjJzpNYXRoW0JDKDB4NDcyKV0oSTdbJ2MnXSpoRFtjMV0pfTtmb3IoY29uc3QgYzIgb2ZbJ2EnLCdiJywnYyddKXtjMFtCQygweDJlZSldW2MyXT1NYXRoW0JDKDB4NDNjKV0oYzBbQkMoMHgyZWUpXVtjMl0saFNbYzJdKSxoU1tjMl0tPWMwW0JDKDB4MmVlKV1bYzJdO319KTt9ZWxzZSBJdltCZCgweDNiOSldKGMwPT57Y29uc3QgQlQ9QmQ7YzBbQlQoMHgyZWUpXT1udWxsO30pO0l2W0JkKDB4M2I5KV0oKGMwLGMxKT0+e2NvbnN0IEJvPUJkO2lmKGMxKUltKCk7SXMoYzApLGMwWyd1bml0cyddPU1hdGhbQm8oMHg0NTEpXSgweDEsTWF0aFtCbygweDQ3MildKEk3W0JvKDB4MzJhKV0qdShjMCkvWSkpLElHKElRKCkpLElWKGMwKTt9KTt9ZnVuY3Rpb24gTigpe2NvbnN0IFR3PVsndjJmVXphJywnQ012S0R3bkwnLCdDaG5LeFcnLCdydzUwQ01mVXkydScsJ21ZMUl6d3EnLCd6TnZZQktMVXpNOCcsJ2lnclZCM2paaWdMVWlock96c2JPeXdYUycsJ2lnV0d1VycsJ2lnOVInLCdxeGJIQ05yVHp3NTBDWWIzQXhyT2lnNVZEZ3ZaJywnemc5VkNHJywnck1aZFBnbk96dzVJendySENNeScsJ0QyOU9CRycsJ3ZNZllBd2ZVRGd1JywndWhqVnpNTFN6cScsJ3IzajFCTXJZQXhuWicsJ3kyOVonLCdwZ1hIeU12U2lnelZDSjBJJywnQzNyVkNhJywneU1mMEFhJywnenc1MENOTHREd2knLCd1TUxMejJ2UycsJ2ljOEcnLCdpZzNjU0pPR0RnTE5BaHFHek1MMGxjYjFCTXJMQ0lhWG1jYUxpaGpMQzJ2WURNdVUnLCd0Q28yeU12UycsJ2lnakx6Y2JWQ0liWkIyekhpZ0xVaWdlR0Qydkt6MnUnLCd2Z0hMaWhyVkIyV0dDZ0xKQTNtR0RnSExpaG4weXdMWWloYlZDMkwwQXc5VScsJ0JNdjAnLCdDMm5IQmd2SycsJ3F3alpEZ3ZTQmhqSER3MCcsJ3Joakh6WWIwQWd1R0QyTFV6WWJMQk1xNmlnbk95dzVOenNiMEFndUdBMkxVQVcnLCdEdzVQRGhucXp4amRCM2pMJywnend6TScsJ3p4bkp5eGJMJywncXhqTHlxJywndTNyMXpnTFYnLCdvd2ZSRHZmUnVhJywnRHhuSHlNWEwnLCd6Z3ZaQXhqTHplakx6aG0nLCd6MlhWeU1mU3EyOVRDZzlaQXhyTHQzYkxDTWYwQXc5VScsJ3dORFB5MlRMQmNiSEJzYmxCTUxKQVcnLCdpaFAxaWhuSkFnMUhCY2JWemd2WWloUDFpZ1hIQk1DJywneXdYU3pzYll6d0RMQmdUVkJNelZDTTAnLCdEaERWaWRtVHlNdktpZ2pMeTI5VHpzYVlsd2pMemEnLCd1M2JIeTJ1R3p3ek1Bd25Qenc1SkVxJywnQ2c5UEJOckxDRycsJ0JNOW1BeHpMJywnQTJMMHRnTDJ6cScsJ0NnZllEaG0nLCdpZzNjU0k0Jywnek52WUJLalNCMm5SdlcnLCd6Z2Y1QmdMTkFocnF5eG5aJywncXduSnp4blpBd2pTenNiV0NNOU1Bd1hMb0lhJywncGM5S0RkNDh6Z3FHemdmMHlzMVpwc2knLCdpZzBVaWZuMXoyRExDM3JQQjI0NmlnMVZETXVHRGdITGlobjB5d0xZQ1liVkNJYlpBZzlZRGd2VWlock96c2JKQjNqWUF3clZDSTQnLCd5MjlZenUxTEJOdScsJ3l4akx5dXpQRGEnLCdpaGpUaWc5WWlndlVCZ2ZZejJ1VScsJ3JOakxBc2JMQ01UMUJNckxCRycsJ0NOdlUnLCdFMzBVeTI5VUMzcllEd24wQjNpT2lOakxEaHZZQkliMEFnTFppSUtPaWNLJywnb0liSkIzdllEaExIQ01xR3pNaGRQMmZLenNXR3kyOTFDTnFHJywndnMxWkFnZld6cScsJ0JNOTB6eG0nLCd0M2IwQXcxUHp4ajFCTUNHQzNyVkNoYkxCRycsJ0JNZjBEeGpIQmZEUHpock8nLCdpSWJaRGd2V3BzaScsJ2xOYlpseGJTeXc1RngzRElEZzQnLCdDZ2ZZeXcxWicsJ0RnZll6MnYwJywnQzI5MUNNbkxsd0xVJywnck1aZFBnbk96dzVTQXhuMHpxJywncU12S0NNOVZCcScsJ3pNWEhEZTFIQ2EnLCdEMnZLejJ2Z0R4alUnLCd1U284eTJUTlc2clV6MkxOJywnbUkxSXp3cScsJ3F3NU5CZ3ZLJywndmdMTHpNdScsJ3N3NVV6dzVPQjJ5Jywnck1YMUNJYjZEc2JJQ012UERjV0d5TUwwRGd1R0RNdllDTUxVejJ2WUJJNCcsJ3pnZjUnLCdsTmJabHduVkJNekZ4Mm5aREcnLCdpZmxkUGh2VHpzYlVBd25PRGNiWkF3NVVETTlTQmNiTENOakxBd25PeU1mWScsJ3F4akx5c2JNQXhyWmxjYldDTTlOQ01mVGlnclZ6eG1HQk05MGxHJywnRGdMV0NXJywncjJ2SVc2cjF6Z3VHRU51R0RnTEx6SWJNVzdYWWlmckh6MnZaQmdMSkFocUdBdzRHemd2WWllMVBEaHJMbEcnLCd6SzlXenc0JywndGMxWkFnZld6cScsJ3oyZlN0MlRiQmdXJywnenc1MENOTHgnLCdyTVpkUGduT3pzYld5eG5aRGNXR3VoalZ6M2pIQncwR0JNTEpBaHEnLCdpZzNjU0liUEJObjB6d2ZLaWc5TWlhJywndHdMMERndlN6TVgxQ0liVEF4cUdxd2o2RDJ2UHpXJywnb0lidVc3WFl6TVpkVmdETEJjYlJCMlhTQXdyUHp4akxCSWFPJywnaWdqTHpoalZCMjFaaWd6VkNJYjBBZ3VHeXhiSENOclR6dzUwaWhuUEVNdVVpZm4xejJETEMzclBCMjQ2aWcxVkRNdUdEZ0hMaWhiVkF3NTBsY2JKQWdmVXoydUdEZ0hMaWhyNUNndUdCM2lHeXc1VkRnSExDSWJTeXhMVkR4cVUnLCdvSWJ4QjJIVUNNZjFCc1dHcU1mS2xjYnhxWWJWemd2WWllclB6d1hMaWc1MUNJYktEeGpKQWNiTEF3NEd1Mm5PQmdmTUVNTFRCd3ZZaWd2WUNNdlB5MkhJeXhpVWlmelZDTm5KQWdYSHpaT0d5dzVLenhqTGllZjF6TnJMQXdYMUJNQ0drZVRTQXduUmlnZjF6SWJLenc0R3YyOU9CTnZVejNuVXl3MUxCSUtVJywncGM5U0F0NCcsJ2lnM2NTSk9Hek1MMENZV0cnLCd4c2FWcTI5MUJOcUcnLCdCTTl1eXdqU3pxJywneTI5WXp1OU16RycsJ0J3TFknLCd6TUxTenEnLCdpZzBHQk12THpndktpY0cnLCdpaERQRGdHRycsJ3kyOVl6dG0nLCdpZzlPQk11R3JNWDFDTlAxejJmVXpXJywnQjI1TGlkZVR5TXZLaWdqTHkyOVR6eG1HbUkxSXp3cScsJ3pNWFZEVycsJ0EyNUx6dWpMemEnLCd0dzlZenNicENoclBCMjVaJywnaWczY1NJYlV6eHIwQlliMUJOckxDSWJLenhpR3dTbzhDTW5PenhpR3JTbzJDTXJMQ0kxbkF3NUt6eG4wek1aZFBnbk96c2IyQjI0RycsJ3pOdlN6TUxTdWdmWURhJywndTJuT3l3bk9EZ3ZTV1ExMENNdldDZ3UnLCdsTmJabHhiU3l3NUZ4Mm5PQXhiWicsJ2lkNCsnLCdpaHZVeU12M0IySFV5TWZZaWNIS0R4akpBZ0RMQTNqTER4UDBrczQnLCdDM0dXJywncU5qTEF4ckwnLCd1MkxUQ2dYUHpNTEx6Y2JNendmWkF3alBCZ0wwRXNiWkRodktFc2JNQjNpR0F3WFNEeG4wQ01mMEF3OVVsSWJvQjNxR3kySEx5MlRMemNiSHoyZlBCTm4waWdqMUF3WEtBdzVOaWhqTHozdlN5eHJQQjI1WmxHJywnQzNMWnVNTFV6VycsJ0Jndk1EYScsJ2lnZld5eGowQnd2VURobUd5MjlUQ2dYUHl3NTBsRycsJ2lnQ0cnLCdjSmFXbWRhV21kYVdtZGFHbkp1MW1adUd6SWFrJywnQ2hHRycsJ0MzcllCMlRMJywnemdmNUJnTE5BaHJzenhmMUF4akx6YScsJ0MzckxDYScsJ3pnTFR2RycsJ0MzYlNBd25MJywndDNiMEF3MVBFTXUnLCd6TmpMenEnLCdDM3JZQjJUTHVNdkpEYScsJ0NoR0dpTG5XeXduTGllRFlCM3JMQzJTSWxjYlp5dzVabHhuTENNTE0nLCdBdzVKQmh2S3p4bScsJ3EySEx5MlNHeXduSnp4blppZ2ZaaWdlR3ozakhDZ0cnLCd5MjlUQ2htJywneXdYMHNndkh6YScsJ3pNWFZCM2knLCdDM3JIQ05yWnYyTDBBYScsJ2lnOU9CTXVHck1mWkMyZkt6cScsJ3RNdkl6dzVMQXc1Tnl3NU4nLCdDM3JIRGVmMnpXJywnQjNiTEJHJywndE1MWnkySEwnLCdsTmJabHhiU3l3NUZ4MmZTRGdqVkVhJywndnhiV3p4aUd6TVhWQjNpJywnRGd2SkFhJywneXhiV0JnTEp5eHJQQjI0VkNnck0nLCdDMkhIQ011JywndTNiSHkydUdDaGpWejNqSEJxJywnaWZQUGlnMVBEY2EnLCdyMnZSQk1MSkEzcScsJ0N4dkxDTkx0endYTHkzclZDS2ZTQmEnLCdDTXYwRHhqVWljSE1EdzVKRGdMVkJJR1BpYScsJ0MyVFBDYScsJ2lnMFBsSWJ0RHdETnp4bjBBdzlVb0liWXp3cjF5MnVHQ005VkJzYkt6eGIwQWNiVkNJYkxCTVhIQ01ETGlock96c2JKQjN2WURjNCcsJ2loRExBeHJMQ011JywnaWM5c0IyOTBpZGVHbWNic2lkNCtjTm4weXhqMEVoakx6R08nLCdpZ25WQnhiU0F3ZlVEYzQnLCdwYzlXcEpYMHl3alN6c2JKQmdmWkNaMElDaG1UQ2dYSEJMOUZ5d1gwQ1lpK3BocklCMnI1cEcnLCd5TVhWeTJUTHphJywnek5qTEFxJywnaVpDM25XJywnQ005VkJ4bScsJ0MyOU15cScsJ0QyTFV6ZzkzQ1cnLCdyM3YwbEcnLCdpY2FHdHNhWG9HJywneXh2MEJXJywneTJISEJNREwnLCdjSXVMcnU5Z2NHJywndjJmVXpnZklFTnZOJywndzJySERnZVREZDEzeXdYUnFOclV4cScsJ2loakx6MnZTQTI5VXpNOVlCczQnLCd1aGpWek1MU3pzYlR6eHFHbFliTnp3NUxDTWYwendxJywncjJ2VXp4alB6eGowaWRpR2xZYVppYzhHbmNiQUFxJywnQ2c5UEJOckxDS0xLJywnbnVyUXlMcktyRycsJ0MydkhDTW5PJywnaTJ5MHpKck1tRycsJ3FNZlknLCdpaERQRGdIVkR4cUd6TWhkUDJmS3pxJywna3M0R3ZNOVlDMm5PQmdmTm9JYmJCTm5KQWdYSHpZYjN6d25PQzJ2U0JJYlZ6Z3ZZaWZ0ZFZoaUdETXZZQzJ2MEVNdlVsY2JaQjI1WkRjYkhCTXJMQ011R3F4dk1EZ3ZQQmh2VXpZYU9zMlhQeTJTR3l4dk1pZ3JMQklieEIySFVEdzVOQzI1SEJ3dlVrczQnLCdpZzNjU0liWkFnOVlEYzQnLCd2eG5IeU1YTGxHJywnaWc5T0JNdUd1TWYxQndmMXpOckxBd1gxQk1DJywnRDJMVXpnOTMnLCdCTTltQXh6UEJNQycsJ0FnTEt6Z3ZVJywneXd6MHp4aScsJ0MzckhEZXZNekcnLCdDMkhWRFcnLCdEZ0hZRHVqTHphJywnemc5VkNLblN5eG5PdlcnLCdDM0tXJywnQzNMWnJNOTFCTXEnLCd0M2IwQXcxUHp4akxCRycsJ3BoYUd5MlhIQzNtOWlOYlpseGJTeXc1RngzbjF5SWkrJywnQzI5WURhJywnemd2TENhJywndWh2VUEzckxvSWJzVzZyMUJ3dVVpZVhQQk1MTEJKT0d2bW84Q012VWxJYnNCM3E2aWZiWUIyalN6dzBVJywnaWhEUERnSFZEeHFHeTI5WUNNTEtCM2lHeXduSnp4blonLCdCMnpNQzJ2MHYyTEtEZ0cnLCdDTXZYdEcnLCdwaG5UeXdYU3BHJywncU1YVnkyU0d5dzRHeXhqTHlzV0d6czVObEliWnp4ajJBd25MQ1liVkNJYll6eHJIQXc1THpjYjFDMnUnLCdEMnZLejJ2YkR4RycsJ0F3MU52VycsJ0R3NVpBZ0xNRGEnLCdxd1hKQjN6TCcsJ3YyTFV6ZzkzQ1liSER4clZCd2YwQXdtJywnaWN1OGwyaStwZ0tHQzNyNUJndTlpSTBUREpPJywneTI5WXp2alZEYScsJ3JNWDFDRycsJ0QyZllCSzFWQ011JywnaWczY1NJYlpEZ2YwRGNhJywnejJ2MHZoakhCTm5NQjNqVCcsJ0J3ZjB5MkhMQ1cnLCd2aGpMQ2hiTEJNSEhEeG1HRU1MTEFndlVpZzlLenhpR3l3NTBBeGJXenc0NmllMUxCU284JywnaW1veGlmakhEdzEwQXd2TXpzV0dCd0xVemd2WkRndlVDWWEnLCd2aExXJywnek1MU0JmckxFaHEnLCd5MjlZQ01MS0IzaScsJ3VNdkpCMjFUenc1S3p3cScsJ2labVltWkNaeVcnLCdBMnY1JywnaWhuMHl4cjBpYScsJ3VnTEpBWWJIaWhuT3l4YkxsY2JLQ01mTmlnTFVpaHJPenNiV0JnZlVsRycsJ3RnTDJBdzVOJywnQXc1VXp4aml2ZTFtJywncnhqWnkySFNBd3hkTjN2VXpaT0dyTVgxQ01qWXp3TDB6c2EnLCd5TTkwRGc5VCcsJ0MybkhCZ3ZLaWhyVmlock96c2JIRE1mUEJnZklCZ3VHeXhqTHlxJywncGRXR2wxcjVDZ3VHbDB6VkJOcUdsMW4xeU5yNUNndUdsMXI1Q2d1WGljOWN5eG5Mck05VURjYVZzZ3ZTRE12MEF3bkhsdWpWQmdxR2wwdlV5MjlLQXc1TmljOXhBdzViQk5uUHJ3NUpCMnJQQk1DR3BKNCcsJ0J3TEt6Z1hMJywndmhqTENoYkxCTUhIRHhtR25jVzFpbW94aWRxR0JzYlhEd3ZZaWdMVWlnckxCSWJnQmh2WScsJ0J2ajFCZ3UnLCd6d3JOenEnLCdDaG1UQ2dYSEJHJywneTN2MENXJywnbE5iWmx4YlN5dzVGeDJUUEJNVElCM0cnLCdvSWJsVzdYSkFndlVFTXZQQmd1R0JnTEx6M3FHRE05WWlnckxDSWJMQXc1NkF3RExCSWJnenc1WkRndllFTTlVenNXR3JNdlVDM3JMQ1NvMnpNelVEdzVOaWEnLCdpZlBQQncxTENJYjZEc2JSQmd2UEJHJywnQWc5WkRhJywnemdmWUFXJywncndMVXoyZlV6WWI2QXd2T3p3NDZpZnRkVmhpR0RNdllDMm5PQXd2SXp3NCcsJ2loRFBEZ0dHQk05MHp4bScsJ0Iyek0nLCd6TUxVemVMVXpndjQnLCd1aGpWek1MU2lnakhDTmpQenhqTHpOakxBdE9HJywneTI5VURnZlBCTm0nLCdDZ3ZZcTI5WXpxJywnQnhuTicsJ3JNWDFDSWIxQk1xR3VNZlpEZ3ZZJywnb0liSHkybkxDM21HQ2hqVnlNWExCc2FPQ005VkJzYjFCTmpMeXduT3l3alN6c1dHeU1mMEFjYlZDSWJ4cVliVkJNWDVpaHJPQ005MXoyR0dCZ0wyQXc1TmlnOVlpZ2pMemhqVkIyMFNpZ3JWQjNqWmlnOUlDM3JZRHduMGlndkh5MkdHQjNyT3p4aVBsSWJ0RHdETnp4bjBBdzlVb0liSEJNOTBBZ3ZZaWdYSEV3OTFEY2FPeTJYUHkyU0dEZ0hMaWdmV3l4ajBCd3ZVRGNiVXl3MUxrczQnLCdETDlWQVcnLCdtSTFBQXEnLCdCMjVTQjJmSycsJ3R3aGROMnVHQXc0R0JxJywnd05ETEF4ckxDWWJ1Q012V0NndlVBZ2YxQ1liTENNRmRQZzU2RGNhT3VNdjBEaHZVejNuM3p3Q1BsRycsJ3FNdlV6Y2JIQk1EU3pxJywncndMVUMzckxCZ1gxQk1ETEJHJywncXhqTHlzYk1BeHEnLCdEaGpIQXdYTENHTzhwY2FWdTJMNnpzYScsJ3F4SFBDWWJOQ01MSycsJ2lnM2NTSWIxQk1ETEJOdjBFTnEnLCdvSWJjenhyMGxjYnRCMnpIaWc5S3p4aUd2Z0xaeTJHR0MzckxBaHFHQXcwR3MydlBCY2JIQkliS3p4aUdDMm5PQ1NvS3oydlVpZXpIQzNuSHpndVVpZnpWQ05uSkFnWEh6Wk9HeXc1S3p4akxpZWYxek5yTEF3WDFCTUNTaWVUTEF3V0d5d1haaWVmSUMzckxCZ1hZeXh2VGxjYmxXN1hKQWd1U2llakh6Y2JWemd2WWllelNEeGlVJywnQjNiWicsJ3pOalZCdW5WQ0cnLCdyMnZaeTJIVkMzbk1CbW9LeTJITCcsJ0JndlpDMjFQRWEnLCdDTUxOQWhxJywnRHc1UERobnh5dzUwendxJywneXh2TWlnclB6c2IyenhqTVc3WE55TWZZenNiZ0Jtb0t5MkhMaWhuUnl3WFB6eGowJywnb0liUkF4ckpBZ3ZVaWhqMUJJYlBCSWJNQ005VURjYlZ6SWIwQWd1R0IyNVNFc2IzQXc1S0IzQ0dFTTlVenNXR0IzYkxCTUxVellhJywnbXR5Mm5kclJ6eHZUdUt1JywnekxESEJOcScsJ3pMakxDcScsJ0J3ZlVEd2ZTJywndk1mWUF3ZlVEYScsJ3l4Yld6dzVLJywncnhIUEMzclBCTUNHeU52UEJnclBCTUMnLCd1TTlWQnNiaENNZldBYScsJ3p4SDBDTWUnLCdCTXZMemEnLCd2MnZLejJ1RycsJ3pNOVVEYScsJ2ljSEl6d3FTaWhySHlNWExsY2JSQXhySkFndlVpaGoxQklXR0MyZlVBeHJIQ05LR0IzaUdEMmZZemhqVnlNdVBpZ0xVaWdlR3pnOVZDSWJaRDJMVXpZYlZDSWJQQkliTUNNOVVEY2JWekliSGloRFBCTXJWRFk0R3Uzdk56MnZaRGdMVkJKT0d5dzVWRGdITENJYlN5eExWRHhxR0IzaUdCd0xZQ005WWlock96c2JZQjI5VGxHJywndzJySERnZVR6WjFKQjNqTHhxJywnRDJmVURhJywnemd2WkFXJywnQ01MVXpXJywnaWN1UCcsJ3JndjB5d0xTQ1liMUJNcUdzZ0xVRDJ2UEMydScsJ2lnM2NTSUtVaWZ6VkNObkpBZ1hIelpPR3VodlVBM3FHRE12WUMybk9Bd3ZJenc0R0IyckxDSWJ1RXhhR1c2clV6Z3ZZQkk0JywnQ01ESXlzR1dsZGFTbWNXVW5zSycsJ2labVptWmVZenEnLCdCTXZJenc0JywneTI5VEJ3OVVyTnZZQkcnLCd1Mm5PQ1NvS3pXJywnQ01ESXlzR1ludHVTbUp1MWxkaTFuc1dVb2NLJywnQzNyWUIyVEx1M3I1Qmd1JywndU12Tnp3WFJCMjVNQjNqVCcsJ3VoalZ6TUxTaWZSZFZoalB5Mkc2aWEnLCdxTVhWeTJUTHpjYkhDTXZIJywndTJmVHpzYlp6eHIwQXc1TkNZV0dCTXYzaWdYSEV3OTFEYScsJ3F4akx5c2JaeTJITHpodlN6cScsJ3p3TFV6c2EwbHZQUGloRFBDTXFHbVkxQUFxJywnQ2dmWURhJywneTI5WXp0aScsJ290aTBzdkxzcTNESicsJ3kyWEx5eGpzenduMCcsJ0RodkknLCdBdzVLenhIcHpHJywndjI5T0JOdlV6M25VeXcxTGlnZlVEZ0xXQ2d2VW9JYlV6eHVHeXh2TURndlBCZ3ZVJywnaTJxNW5acVh5VycsJ2ltbzh5TXZZaWRtMWlnMFVpZnpWQ05uSkFnWEh6Wk9HRU5ETEF4ckxDWWJ1Q012V0NndlVBZ2YxQ1liVnpndllpZnJZenhiV3p3NU95eHZaaWh6TENObkpBZ0xMeU12VWxHJywnRGc5VycsJ0N4dkxDTkx0endYTHkzclZDRycsJ3F3bkp6eG5aQXdqU3pxJywnRGdmTicsJ0J3TFVxMjlZQ01MS0IzaScsJ3BkV0dsMXI1Q2d1R2wwelZCTnFHbDFuMXlOcjVDZ3VHbDFyNUNndVhpYzljeXhuTHJNOVVEY2FWc2d2U0RNdjBBd25IaWM5ZkJNblZ6Z0xVellhVnYyTFVxdzVaQXV2VXkyOUtBdzVOaWQ0KycsJ0F3MUh6MnVWQ2c1TicsJ3JndlRCWWJTQXcxUERjYll6d2ZKQWd2S2xJYmdEd1hTaWh6TENOblBCMjRHQjI0R0NNdlhEd3ZaRGRPR0FnZlNCZzlhQ2dmWXl3MUxEaGpQeTNuVkJodjBBdzlVQ1k1S3pxJywnenhuSnEzdjAnLCdpZ3oxQ001UERodll6c2JQQkliTUNNOVVEY2JWekliMEFndUdEMkxVemc5M2loUFZCTXUnLCd0d0w0aWRlR2xZYVlpYzhHbVliSXp3cScsJ3J3TFV6OG9LQk1ETCcsJ29kaTJvdGk0QWh2VENNdjEnLCdCMlhWJywnQk05VkFXJywnaVptWm1XJywnaWcwRycsJ3VnZll5dzFMRGd2WUNXJywna2NHT2xJU1BrWUtSa3NTSycsJ2laZVhtcScsJ0Qydkt6MnZnRHhqVXZXJywncndMVXoyZlV6VycsJ3oyZlN1MjlNRGEnLCdpaHZVRGd2WWlkaTFpZzNjU0cnLCd6SzFQRWEnLCdxd25KenhuWm9JYkpCM2pZQXdyVkNJYjNBd3IwQWNhJywnQTJMVXphJywnQmd2TnIzakhDZ0cnLCdvWWJlc3U0R210R1duZGFUbUpPR0FnZlNCY2FYbEppV2lnMFNpaHIxQ001UEJNQ0dDM2JIeTJ1R21zNDFtY2RkTFlhWGxKdVdpZzBQbElidER3RE56eG4wQXc5VW9JYkpEeHFHQWdmU0JjYkhCTXFHeU1mMEFjYjNBd3JMQ0k0JywnQ2dmWUMydScsJ21JYlNBd3owQ1cnLCdvSWJpQjJ6TXl4blp5d3JMbGNiaUIyeUcnLCdCTTkwenEnLCd6MmZTcU12WkRhJywnaWRhR0IyalFjRycsJ0NNREl5c0cxbVlXNG1jV1ltSnFTbEplUCcsJ3dTbzhDTW5PenhpR3JTbzJDTXJMQ016U1c2ckpBZ3ZVJywnektyVkQyNCcsJ0JnTFV6dnJWJywnQ005VkJxJywndjJ2TnpzYjJCMjBHdjI5T0JOdlV6M25MQXc1Tnl3NU5pZ0xVaWdQTHpndlVpZmpIRHcwVScsJ3VoalZ6M2pIQncwRycsJ3VnZlpDM3ZVelcnLCd6Z2YweXMxVUJZMTBDTWZVQzJYSERnTFZCRycsJ0RndjREZWpIQzJ2U0F3NUwnLCdxMjlZQ01MS0IzaScsJ2lnM2NTSWJVenhyMEJXJywncU1mSycsJ2toYll6d3pMQ05tVENNdktEd25MemMxVEIzclBCMjQ2aWhqTHpodkp6c0snLCdpZTNkVE1qTEJjYjJCM2lHemd2WWllekxCTm4wenhqNkIyNUwnLCdBMkwwdjJMVScsJ3RnZjF6TkRMejJ1JywncjJYTEF3bk96c2JmQXc1WkRndlNCaHZVejJ2VWxjYlV6eHZMaWVmMXpOckxBd1gxQk1DJywnQzNMWnR3TEtxTmpIQk1uTycsJ0FndlB6MkgwJywnQk05cUJnZlUnLCd1Zm1UJywndE04R3kyOVRDZ1hQeXc1MGloekhDTUxIQk5xJywndE12MGlnWFBETUxVelliSENNdkgnLCdEaGoxenEnLCdpZTNkVE1qTEJjYlBCc2J1VzdYWUMybk9EMnZVQVliVnpndllpaHpWQ0liS3p3MEdyTXZVQzNyTENHJywnRGdIWUR1WFBETXUnLCdBZ2ZZemEnLCd1TnZTenhtJywnQnc5Mnp3cScsJ3FOdlBCZ3JQQk1DJywndTJIVkRZYllCM3YwenhtR3pOalZCc2IwQWd1R3p3NTBDTWZVeTJ1R0RnOEd6eHpMQ05LR0NNOVZCcScsJ3Uybk9CZ2ZNenc0JywnQWdmU0JhJywneTNqTHl4ckxyd1hMQnd2VURhJywncXhqTHlzYlV6d3ZLendxJywnQ01mVXoydScsJ0EyTFVBVycsJ0JNOWJ5Mm5MQzNtJywndU12Tnp3WFJCMjVNQjNqVGljOEd6MnZVenhqUHp4ajAnLCd3MnJIRGdlVHpaMU1CZzlWQ0wwJywncmhqSHpZYjBBZ3VHQzNySEF4alppZzlZaWhySENjYjBBZ3ZUb0liVHp3NTEnLCd5TWZZJywndmd2SkFnNVBBVycsJ21zMUFBcScsJ2lnOVlpZ3ZVQmdmWXoydUd5eGpMeXNiSEJNcUd5M3YwbEcnLCdxM3ZaRGc5VGlobk95eGJMb0liS0NNZjNpaHJPenNiVkR4clNBdzVMbGNiMEFndUdEZzlWQmNiV0F3blJDWWJKQXhqSkR3WEhEZ0xWQklXR0MzckhBeGpaaWdmVXpjYkxCTnJZeXc1SnpxJywnaWczY1NKT0cnLCd2MkxLRGdHJywnenh6VnJnOVV6cScsJ3JNWFZCM2lHQ2dYSEJHJywncjNqVkR3NUtpZ3pTQjI5WScsJ0IyNUxpZG1UeU12S2lnakx5MjlUenhtR21JMUl6d3EnLCd1TWYxQnhiWUIyRFl5dzFUJywneXhqUHlzMVdDTXZaQzJ2SycsJ0NNOTAnLCdDTXZKRGEnLCdpYzlpendMTkFocUcnLCdDMjlNRGZySHpXJywndWdmTnpxJywndnc1S0JXJywnQmdMVXp1UFZBdzQnLCdpZm5KQWdYSHpOUFBCdzFMQ0liTVc3WFlpZ3JQenNieEIySFVEdzVOQzJEWVc3QmROMnVVaWZ6VkNObkpBZ1hIelpPR3VodlVBM3FHRE12WUMybk9Bd3ZJenc0U2lmcjVDY2RkUGc1S3p4alVpZzlLenhpR3l3NUt6eGpMaWVmMXpOckxBd1gxQk1DVScsJ2loalZCMjFaaWc1VkRjYldDTTlXenhqU0VzYll6d2ZKQWdmSUJndScsJ0NnOVBCTnJMQ0xyNUNndScsJ3R3TDBEZ1hMQ011R3IzbGRUU29GenEnLCduZGFXaWEnLCdDaG4wdTJIVkNOcScsJ0JnZjVCM3YwJywndWhqVnozakhCc2EnLCd5TTlLRXEnLCd6TVhWQjNqZnJXJywnaTJxWXpkakp6cScsJ3pNZlRBd1g1JywnaWc5MURoblB6Z3VHRGdITGlodlVBeHFHQzJMNnpxJywnejNqVkRXJywnRDJ2S3oydScsJ3VNOTFEZ3ZaJywnQ2hqUEJxJywnQmd2VXozck8nLCd6TGJZQjJ5JywnQ2dYSEJHJywncXdYVkJNQ0d5MjlZQ01MS0IzaScsJ3pNZkp5d3JMJywneU12U0IzQ0dtQ2s5aWhqVCcsJ0MyTFUnLCdDMjlUenEnLCdBMkwwdnc1S3p4anhBdzQnLCdyZ0xMQmd1Jywnb0liUnp3TFV6c2JneXhuWnl3ckxsSWJ3QjNqWnkySFN5d0M2aWZiMUJNVDBpZ2ZVaWdyUHpzYmJEQ29Genc1M3l3NUtpaFBQendITEJJYlZ6Z3ZZaWZEVkFnNTFCTUNHenc1MHpNdllCTXZVbEcnLCdxTWZZQ01MTENNdk1DTXZQJywnQk12NERldlN6dzFMQk5ydEF3alNBdzVOJywnemc5VkNLblN5eG5PJywndG1vS0JNRExpZXpTVzdYTnp3VycsJ3FNdlpEZ2ZVemEnLCdBdzVXRHhyQkRoTFd6dDFNQXdYTHhxJywneXdySycsJ3pnTFRzYScsJ3kyWFB6dzUwd2EnLCd0d0w0aWRpR2xZYVppYzhHbmNiQUFxJywnaVppWW1HJywnRDJ2S3oydlonLCdpZkRWQWc1MUJNRExCSWJUVzd6TkJnTEpBYzQnLCd5eGJXQ005NEF3MUhEZ3ZLbGNiWkR3ek1Bd25Qenc1MCcsJ0MyOU1EYScsJ3EyOVlDTUxLQjNpR0RnOVZpaERQemd1U2loYlN6d2ZaenNiWXp3cjF5MnVVJywnc2dMVUQydlBDMnUnLCdDaG4wJywndjI5T0JOakhEdzAnLCdyZzkwQ1liSENNdUdDTTlWQnhtU2lnWFBCTXZaaWdmWXpzYktCMjlZQ1liSEJNcUdCM2JMQkliSkIyNVV6d24wQXc5VUNZNEd2Z0hMaWhyVkIyV0dEeG5MQ1liMEFndUd6M2pIQ2dHR0RnOEdDTXZRenduMGloYlN5dzVab0liWUIyOVRDWWJURHhuMGlnakxpaGpMeXduT3l3alN6c1dHRGdITGlnakhEZ0hZQjI5VGlnNVZEY2JWQk1YNWlock9DTTkxejJHR3lzYkl6d3JZQjI5VGxjYktCMjlZQ1liVER4bjBpZzVWRGNiSUJnOUpBWWJMeXduT2lnOTBBZ3ZZbElic3p3cUdCd3ZIQk5tR3lzYldDTTlJQmd2VGxHJywneTI5MUNOcScsJ3p3NTBDTUxMQ1cnLCd5TTlTemEnLCdEZ0hZRHVqTHpmQycsJ3l3alZ0MFQxQ2ZMY0RkUDJ1d2ptQmhidXFMYkhFTTFMcjI1UnZ2bkF6dVBNdHcxenkxQycsJ3l4blpBd0RVJywnektmMnl3TFMnLCdEaExXenZDJywnQndMNCcsJ0MzckhBeGpKeXhuTENXJywnekt2WnlXJywnRGdMMEJndScsJ3cyckhEZ2VUeloxUUIyTFVEZjAnLCd5MjlXRXEnLCdEeG5MJywnQTJ2NXpnOTNCRycsJ3Rtb0tCTURaaWhQMUJzYmdCaHZZJywnbVkxQUF3MVR6eGknLCdpZGFHbWNhJywndk12WUEydk9DTm5NQm1vS3kySEwnLCdpZzFWQ011Jywnemd1VHJldScsJ0JNdjBxeGpMeXEnLCdDZ2ZQQ0cnLCd6aGpIRDBIUEJOcScsJ2lmdGRWaGpMQkliUEJJYkt6eGlHcmdMTEJndScsJ3ZnSExpaG5PeXhiTGlnTFppaHJWQlliWkJ3ZlNCY1dHeXhxR0JndkhDM3FHbXRhV2lnM2NTSTQnLCdxd1hTJywneTJpWScsJ3kzdllDMjlZJywnck1aZFBnbk96dzVXeXhuWkR3NU4nLCd3TkRMQXhyTENZYnVDTXZXQ2d2VUFnZjFDWWJNVzdYWWlnckxCSWJzenhyMER3NU5DM0RMelcnLCdCd3ZKQWdmVUF3bkhCYScsJ2lnMFVpZnpWQ05uSkFnWEh6Wk9Hck1YMUNNall6d0wwenNiTENNSmRUTUhMQkk0JywncTN2WUNNdlVEYScsJ3ZNZllBd2ZVRGd2VScsJ0JNOWd5d25Iemd1JywnQTJMMHYyTFV2VycsJ3Joakh6WWJIaWduVkNNNUxDSk9HeTJISEJNRExpaHJPenNiWkFnZld6cScsJ0VNSG5BdzQnLCd5d1hTJywnemc5VkNLblN5eG5PdEcnLCd6S3oxQmEnLCdpZ2ZXeXhqMEJ3dlVEaG1HQ2c5WkMyTElCZ3VVJywneU12S0NNOVZCeG0nLCdDTnZOJywnejNqUHphJywnaWczY1NJYkhEQ29GenhqT3l3WElpZ3JMQ0liaENTbzJXNTlMaWdCZFZoaUcnLCdDM3JZQXc1TkF3ejUnLCdpSjQ4bDJyS3BKV1Z6Z0wycEcnLCdpWm0xbnRiTG1hJywncU12M3p4ajBEdzVOJywncGRXR2wxcjVDZ3VHbDBuSERnZlNCMkNHbDFiSHoydlppZGlHbWNic2lkNCsnLCd0TTkwaWhuTEJOblB5TVhMaWdYUEEydUdEZ0hQQ1k0JywndzJySERnZVREZDFJenhuMHhxJywncGdpKycsJ3J3TE56dzVMaWV6VkNNMDZpZnZUQ01MWkNZYjZ6d0xKQWc1TEJJV0d6Z2ZaaWZyVkIyV0dEOG9LQWdYMGlldllDMm5PQmdMTFc1OTFCTUNTaWZyWXp4Yld6dzVPeXh2WmlodlV6Y2JmQXc1Tnl3NU4nLCdCZ0wyQXc1TicsJ3UySFZEWWJIQkliTEVnTFpEZ0xVelliV0JnZlVpZ2ZaaWh2VXpndllCZ2Y1JywncncxV3pNdk9CaHZVelcnLCdDTTkweXhyTCcsJ3oyWFZ5TWZTcXdYV0FnZScsJ2loalZCMjBHRGc5VmloblR5d1hTJywneU1YVnkyUycsJ2lnM2NTSWJVenhxR3lNdlNCM0NHRGdITGlmUDFDTUxKQWNiWkR3alpBd3I1aWcxUEJNTFREdzBHQjJ5RycsJ2lnMEd5TXZTQjNDRycsJ2lnOTJ6eGlHbVp1R0JzNEd1M3ZOejJ2WkRnTFZCSk9HQzJ2SkIyNUtpaG4weXdMWXkyZlp6c2JWQ0liVEIzekxpaHJPenNiWkRnZlBDTm1VJywneTJISENLblZ6Z3ZiRGEnLCdCdXJIRXEnLCd5d3JLcnh6TEJOcm1BeG4wenc1TENHJywndTJ2SkIyNUtpaG4weXdMWXkyZlp6cScsJ3IyOVZ6YzQnLCdsczFXJywndTNyVkNjYlZDaHJQQndMNkF3NU4nLCdpZzBHeU5qTEF4cVNpZzdkVE5yUHpZYScsJ3EyWFB5MlNHRGhEVmlnblZDTTVMQ05tR0IyeUdEZ0hMaWdmWXp3ZVVpZXZaeVliSnl3NUp6d1habEcnLCdDZzlQQk5yTENNbkhCTW5MQmEnLCd5MjlVeTJmMCcsJ3pNZlknLCd2aGpMQ2hiTEJNSEhEeG0nLCd5M2pWQzNuT3l3TFknLCdFTkRMQXNhWmx2UFBpaERMQ01yTEJJYVlsdlBQJywnRGhEVmlkbVR5TXZLaWdqTHkyOVR6c2FZbHdqTHpjYkhCTXFHbXMxSXp3cScsJ0NoalZ6RycsJ2ljdUdDTXZaenhqMnpzNCcsJ0MyMUhCZ1cnLCdxd25PQzNqSEMzckxDRycsJ2loRFBEZ0hWRHhxR0NNOVZCc2JTeXhMVkR4cScsJ0MydjBxeHIwQ01MSUR4ckwnLCdsTmJabHhiU3l3NUZ4MmpMQzNxJywneXhqTHlxJywneU12SycsJ29JYkl6d3FTaWhuVnpNZUdCM2lHRGdmSUJndUdDM3JIQk1yWmlnTFVpaHJPenNiM3p3ck56c2JIRGNiMEFndUdDMlhIQk5yTHpjYk15Q29OeXdyTGxJYnREd0ROenhuMEF3OVVvSWJIQk05MEFndllpZ1hIRXc5MURjV0dEMnZLejJ1R3l4bUdDM3JWQ011U2lnVFBEZ25Penc0U2lnakhEZ0dHQjNpR0FnZlNCYzQnLCdDMkxLenZuVkJnOCcsJ2loUDFpaERMQk1MTmllekxCTm4wenhqTUJtb0t5MkhMJywnenc1MENNZlV5MnUnLCdxd25KenhuWm9JYScsJ2lnM2NTSWJVend2S3p3cVBsSWJ0RHdETnp4bjBBdzlVb0liM0F3ckxCSWIwQWd1R0QyTFV6ZzkzaWNIV0JnZkp6c2IzQXc1S0IzRFppZzFIQk52SEJnWDVrc1dHQzJIWUF3NVJpaHJPenNiWUIyOVRpZzlZaWdmS3pjYk15Q29OeXdyTGxHJywneU5LVycsJ2lnM2NTSUtVaWZuMXoyRExDM3JQQjI0NmlnMVZETXVHRGdITGloYlZBdzUwaWc5WWlnbk95dzVOenNiMEFndUdEaExXenM0JywnQmdmVXpXJywndE05MHp4bScsJ0IyNUxpZ2ZXeXhqMEJ3dlVEY2JNenhETENJV0dDMjFIQmdYTENJYlRBeEcnLCdsTmJabHduVkJNekZ4M24weXhyWicsJ3J4alp5MkhTQXd4ZE4zdlV6Wk9HdTNyUHkySE1CaHZZaWEnLCdsTmJabHhiU3l3NUZ4M2oxQmd2WicsJ2loakxDeHZMQzNyTHpjYkhDZ2ZZRGcxTEJOclppaGJTeXduTHpjNCcsJ0J3OTJ6dnJWJywnaWdHR3pHJywncU1MU3pnall6d0wwenEnLCdxMjlUQ2dYUHl3NTBpYzhHejJ2VXp4akhEZ3ZLJywncmd2V0RnRycsJ0MzREhDYScsJ0MyTDZ6cScsJ0NnOVcnLCdDMkxLenEnLCdpZ0xVQzNyTHl3cUdCMnlHJywneTI5VENhJywnejJ2MHJ3WExCd3ZVRGVqNXN3cScsJ3p4bkonLCd1TWZaRGd2WXpNWmRQZ25PenNieEIySFVEdzVOenc0JywnbXRHNG90QzBtTERPdk0xU0FxJywnQ2dmWURnWDVpZzFMRGEnLCdDMnYwdGdMVXp1ckhDMkcnLCd6TnZZQktqU0IyblJDVycsJ3FOakhEd25PeU1mWWxHJywnQzNySERmdlVBeHJaJywneTN2MCcsJ25jMUFBcScsJ3VnZkhDTXUnLCdpZzNjU0pPR0NnZlpDM3FHQk52WWlnVFV5eGJXbGNiMUJOckxDSWFYbWNhTGlmakxDMnZZRE11VScsJ0JnTDJ6cScsJ3kyOU16TXZMJywnQmdMTkFocScsJ0NnTEx5MnZaJywneXhySEJKaScsJ2laekhuTWUyeXEnLCdDM3JWQ011Jywnek05VURlekhCd0xTRXEnLCdxd25PQzNqSEMzckxDSk9Hck12VUMzckxDSWIxQk1xR3YyOU9CTnZVejNuMENNdlVCTkZkUGc1S3pzYk1CMlhOenc0R3pndlRpZ0RMRDhvS0FnWDB6dzRHdU1mWkRndlknLCdyd25SenNiNkF3dk96dzQ2aWV6VkNNMEdXNnJVemd2WUJHJywncTI5VENnWFB5dzUwJywncXh6TENNZk56c2JaQXhQTCcsJ0JNOXh5d1hTJywnbE5iWmx4YlN5dzVGeDJESEJhJywndmhqNWlndjJ6eGo1aWdmV3l4ajBCd3ZVRGNiSkIzdlVEY2JIQk1xR0NnTEpBWWIwQWd1R3lNdlpEYScsJ3oydjBzeHJMQnEnLCd6S25WQk15JywnaWZqSER3MEdCTnZZaW1vOHlNdllpZm5KQWdYSHpOUFBCdzFMQ0cnLCd5MnZVRGhqSEJjYkpCM2pZQXdyVkNHJywnRGd2NERlZlNBd0RVJywncU52UEJnclBCTUNHRGc5Vmlnckx6eGFHek05WWlnckhFd1hQejJIMGlnTFVpaHJPenNiVEF3cktCZ3VVJywncnduUnp3NEd5dzVSQmdMSkEydlVsY2JlQjNiV3p3WFJCZ0xKQVliWnkySFNBd3hkTjNxVWlldlp5WWJJQ01MSkFocUd5d2lVJywndTJMVENnWFB6TUxMemNiTXp3ZlpBd2pQQmdMMEVzYlpEaHZLRXM0R3RNOEd5TnZQQmdyUEJNQ0d5MjlLenNiSkFndkpBWTQnLCdCZzkxQk1ETCcsJ3Joakh6WWJIaWhiVkF3NTBvSWJUQjN6TGlnZlVpZ2ZXeXhqMEJ3dlVEYzRHdmdmV29JYll6dzFWRE11R0F4cScsJ3VnWEhCSVdHeXhqTHl4bUd5dzVLaWdmV3l4ajBCd3ZVRGNiU0F4bjBpZ2ZaaWZiZXJHJywnQk05MycsJ25jMUFBdzFUenhpJywnQTI1THpxJywnbkp5M21KQzJBMnYzcjBuZCcsJ2lnblRpYzlqQnRhR3JnOEd1cScsJ3BjOTFCZDQnLCdpZnRkVmhqTUJtbzh6MnZTaWdUVkJnWFB6Z0xMQ012VScsJ3hzYVZ1TXZaQjN2WXkydlppYScsJ2lodlV6Z3ZZaWRpMWlnM2NTRycsJ2xOYlpseGJTeXc1Rngybk96d25SJywnbElid0Izalp5MkhTeXdDNmloUDN6d0wwenhtR3ZoakxDaGJMQk1ISER4bVUnLCdEZzlTJywnQ012WkRhJywneTJmVXkydlN5d2pTenEnLCdDM2JTQXhxJywndzJySERnZVREZjAnLCd5MjlVekcnLCd5TUxVemEnLCdCd2ZQQkliTEJOcll5dzVKenNiSEJ3alB6M3ZWRHhtJywndzJySERnZVR5d1gweHEnLCdBTTlQQkcnLCdpMnkzemRMS25hJywnendMVXpzYTBsdlBQaWhEUENNcUdtSTFBQXEnLCdpZGFHdUcnLCdDZ3ZZQ2EnLCdxdzVIQmhMWkF4bScsJ0MyWFB5MnUnLCdpZzNjU0pPR3J4bUd6TXZPQmd2VWlhJywnQk05MGlobkxCTm5QeU1YTCcsJ3pnTFpEZ2ZVeTJ1Jywnb0liVUIzcUd5d25KenhuWkF3alN6c2FPJywnRGc5dERoalBCTUMnLCdyTTlZQnNiM1c2ck9CZ3ZVbGNiUEJzYnFCZ2ZVaWhQUHp3SExCSTQnLCd6TUxTQmZqTHkzcScsJ0JNOXV5d2pTenV6UEVndksnLCdEZ3Y0RGVuVkJOckxCTnEnLCd6Z2YweXhuTERhJywnQWdMVURhJywnQmdMVXp1bkhDYScsJ0NNREl5c0dXbGRhU21jV1VtZEdQJywndWh2VUEzcUdFTUxMQWd2VW9JYnhCMkhVRHc1TmloekxDTm5KQWdMTHlNdlVsSWJiQk5yUENoYkxCSk9Henc1MHpNdllCTXZVJywnendyTnp4bScsJ3pOdllCS2pTQjJuUnRHJywnRU1IY3p3WFZEVycsJ3l4YldCaEsnLCd5TVhWeTJUWicsJ2xOYlpseGJTeXc1Rngzck9EdzFJQ1cnLCdCTXY0RGVMSycsJ29JYmd6dzVaRGd2WVc3ek16TTUxQk1DRycsJ3ozakhDZ0cnLCdvSWJSendMVXpzYnN5eHZUeXh2TURndlBCaHZVelliTnp3ejFCTXJMQkk0R3ZNOVlDMm5PQmdmTm9JYnFEdzVSRGNiMnp4alp5MkhQendqTEJJYlZ6Z3ZZaWZEVkFnNTFCTUNHQndMMGlnckxDSWJveXduT3lNZllEMjlPQk52VXpZYjZEeG5IQncxTEJNWEx6MnZVbEcnLCdEMkxVc2dMVURhJywnQjNEVScsJ3FNWFZ5MlMnLCd6TVhWQjNqcHJXJywnaWhyVkJZYlNBeHIwQmd1R0QyTFV6ZzkzaWdmWXp3ZScsJ3F3bkp6eG5ab0liSENnZllEZzFMQk5xR3pnOVZDSWIwQlliWkRnZlBDTm1HJywnaWM5eXQyalF6d24waWRXOGljOWpCdGFHbnNhV2lmaUdwSjQnLCdEMnZLejJ2ZEF4akonLCdEMkxVelcnLCd2Z2ZXaWdmVWlnZld5eGowQnd2VURjYlV5dzFMb0liVXp4Q0dCZ2Y1QjN2MCcsJ0MyZjJ6cScsJ0QyTFUnLCdyM2pQemNiSENNdkhpZzlNaWdmV3l4ajBCd3ZVRGhtJywnejJ2MCcsJ0JNZllDTTkzJywnaWczY1NJYjNBeHJPaWEnLCdsTmJLekcnLCdCdzlLendXJywnaWhEUERnSFZEeHFHeU12S0NNOVZCcScsJ0NNdkhCZWpMemhtJywndWdYSHkydUdEMkxVemc5M0NZYlZCSWIwQWd1R0IzdjB6eGlHRDJmU0JjYjVCM3ZZQzJ2U3pHJywncTJMWXkzdlN5eHJQQjI0JywnejJmVycsJ3ZNdll6U284ejJqSENJYlV6eHIwQlcnLCd1TWYxQnhiWUIyRFl5dzFUaWhiSEMzbjBpZzVQeTJIMGxHJywnejNqVkMzbScsJ2ladkhudEMxbUcnLCdxMjlZQ01MS0IzaUd5dzVLaWdEWUF3cScsJ0MydjAnLCd6TUxTRGd2WScsJ3kyOVl6dXJWQjNqWicsJ2lnM2NTSWJVenhxJywndE1MSkFocUdEdzUwenhqTnp3all5d25PRGEnLCdpZm5KQWdYSHpOUFBCdzFMQ05QSEFnV0dDZ2ZaQzNxR0JNTEpBaHFHRU52VGlmUFB6d1cnLCdCZ0xaRGEnLCdDM3JIRGVmWXp3ZScsJ3p3NTBDTksnLCdyTVgxQ01qWXp3TDB6cScsJ0RnOTF5MkcnLCd6Z0xVenU1VkIyUycsJ2locjVDZ3VHeU12U0IzQ0dDTTlWQnNiWUR3WEwnLCdDM3JIQXhqYkR4clYnLCdDaHZaQWEnLCdpZzNjU0lkY1RZYScsJ3pNTFV6YScsJ0MzcjF6Z0xWJywnaWczY1NJNEd1M3ZOejJ2WkRnTFZCSk9Hemd2SkJnZll6c2JIQ1lhJywnbElidER3RE56eG4wQXc5VW9JYlp6d25WQk1xR0MzckhBeGpKeXhuTGxHJywneTJ2U0JobScsJ3RNdjBpZ2ZZendlJywncU1mMEFhJywncXdUMER3dlNCYScsJ2kybTRtWmlYekcnLCdpbWszaWhiSENNZlR6eHJZQXduWkIyWDFEZ0xWQk5tVXpndScsJ3JNdlVDM3JMQ0liWnp3WElDM3FHQzJ2MEVNdlUnLCd5d1gwJywnb0liS0IyOVlpZ1hMeXh6TENZYkpCMlhTQXdyTGljRycsJ3czZnd3dUxxRWhINUVMamx2d0R5cUtUTXN4SGxzTFBzc01QaXEwRGVEMXY2cTJ6ZXNMbmt5TVBOdnU1WEV4UE12Znp5QU5IaHJ1NUlydUgzQWZyMnZOTFF5S0RydTNEZkVmYm11dUhqdHZQdHowRGRFTWpuekxQbHJ1UG11MHp3QTBqQURMMCcsJ0JNOUt6eG0nLCdETWZZQXdmVURhJywneTJ2U0JhJywnQWdmU0JlclZCM2paJywnaWZyTWlhJywnemhqSEQxclZCMW5UeXdYUycsJ3BnclNwRycsJ2tzYnVBSWJmdmEnLCdsTmJabHhiU3l3NUZ4MlhMejJ2VXphJywnRE1mU0R3dlonLCdpZzBTaWdEMUF3ckxpaHpIQmh2TGlhJywnQ2c5UEJOckxDTTFWRE11JywnQzJYSEJOcScsJ3pOdlN0RycsJ0RNZlNEd3UnLCdDMnZXJywnQXcxTnQzYScsJ2tjTEMnLCdEaHZZQkcnLCdEZ0xVRXEnLCdyTVhWQjNpR3l4akx5cScsJ3BjOVpCd2ZTQmQ0OGwzcktwSlgwemQ0JywneTIxUEVhJywnRDJMVXF4djBCVycsJ3Uybk9CZ2ZNRU1MVEJ3dlknLCdpZzNjU0lXR0R4bkh5TVhMaWdmWXp3ZUcnLCdDTWZVemc5VCcsJ0J3TFl2cScsJ3l3bkp6eG5aJywnQ01ESXlzR1dsZGFTbWNXVW5adVAnLCdyM2oxQk1yWUF4blpsdWpQQmdxR0JnZkt6dzQnLCd1M2JIeTJ1R0NoalZ6M2pIQnNiV3l4ajBCaEtHQnd2MGxHJywncGRXR2wxcjVDZ3VHbDFiSHoydlppYzlsQXdyWmlmUycsJ0NoakxETXZVRGVyTHpNZjFCaHEnLCdsTmJabHhiU3l3NUZ4MkxUejNqVkQzbScsJ3pLRFlCM25aJywnaWM5ZEIyWFZDTG5XeXduTGljOWV6eHpQeTJ2c3IwaUdsMGpQRGhucXp4amRCMjFXQjI1TEJOcUdvY2FWck1MU0RndllpYzllcTFyZXp3blZ6Z3VHbDBYTEJNRDBBY2EnLCdEMkxVemc5M3QzYkxCTUxVejBmWXp3ZScsJ3cyckhEZ2VUeloxVEIyckx4cScsJ2lmekxDTm5QQjI0RycsJ0NobVR5MjlVekw5RkNNOTMnLCdpZzFWQ011R0JNOTB6eG0nLCdpZzBHRDJMS3pzV0cnLCdDaGpWelcnLCdCZ0xNRGRpJywnenhqWUIzalonLCdpZzNjU0liMUJOdlp6d3EnLCdtSnU0bUtIVHExYnlDRycsJ3pOdllCRycsJ3p3NTBDTkxxQjNtJywnc2dmU0JhJywnQjN2MCcsJ0QyTFVzYScsJ3YydlBEZ3ZZenNicENoclBCMjVMQkcnLCdpZzBHRHc1MHp4aUd6Z3ZUaWUxUEJNckxDM3JUeUNvRmxJYndCM2paeTJIU3l3QzZpZ2ZVemd2WXpzYmJEd3owendMU0R3NU5pY0hsQmdMSkFZYkhEd3lHemd2VWlmRFZBZzUxQk1EWkJNZlR6dzRQaWc5S3p4aUd6M2xkVFNvRnp4akxpZkRWQWc1MUJNQ1UnLCd6MnYwcTI5VURndjREYScsJ3lNWFInLCdwZFdHbDFyNUNndUdsMWJIejJ1R2wxYkhDTXZVRGNhWWlkYUd1SWFWdHd2S0F3ZmNCM0dHd1phR21jYScsJ3poalZDaGJMemEnLCdpZ2ZXeXhqMEJ3dlVEaG0nLCduMlgyemd2MUFHJywnQzNySEF4akp5eG5MJywnck12VUMzckxDSWJIRHhyVkJ3ZjBBeG5KQWEnLCd5TnYwRGEnLCdyTVpkUGduT3pxJywnQmdMVXp2RFB6aHJPJywncTN2WkRnOVRpaG5PeXhiTCcsJ3VnZkhDRycsJ2lnOU9CTXVHdTJuT0JnZk1FTUxUQnd2WScsJ2tzNEd1M3ZOejJ2WkRnTFZCSk9HeTJISEJNRExpaHJPenNiT0F3NU56c2JaQXdyTGlnOVlpZzFWRE11R0RnSExpZ3JWQjNpU2lndlNDMnVHeXc1VkRnSExDSWJTeXhMVkR4cUdrZ25TQXduUmlock96c2JIQ2dmWURnMUxCTnFHQk1mVHpzS1UnLCdsTmJabHhiU3l3NUZ4M2JVelcnLCdsTmJabHhiU3l3NUZ4MnpWQmdxJywnQWdmWicsJ2lnM2NTSTRHdTN2TnoydlpEZ0xWQkpPR0NOdlVpZzlVaWhyT3pzYlBCTTVMQ0liM3l3WFNsY2JIQk05MEFndllpZ1hIRXc5MURjYlZDSWJUQXhqWUIzaUdEZ0hMaWhqVkIyMFUnLCdpZzNjU0liMUJOckxDSWFYbFpHR3pndllpZTVMRGhyVmx1RFlEdzVLek1aZFBnbk96c2FPJywnaW1rM2lhJywnQ01MVXpZYkpCM2pZQXdyVkNJYjNBeHJPaWduVkR4ajBFd2ZZemEnLCdpZzBTaWZqUHkySDBEMnZZRGNhJywneTJYSEMzbm95dzFMJywnd05ETEF4ckxDWWJ1Q012V0NndlVBZ2YxQ1cnLCd5TWZLJywndE12SXp3NU1CbW9LeTJITCcsJ3lNdktDVycsJ2lmcjVDY2IxQk5yTENJYkFBdzFUenhqWXp3RExCYScsJ3pMblZ6TnEnLCd1Z1hIQklXR3JNWmRQZ25Penc0R0R3NUtpZkRWQWc1MUJNRFpCZ0xaRGd1R3l3WFppZmJlckcnLCdpaGpWQjIwR0IyNVNFc2IyQXdlR3lNdktDTTlWQnEnLCdtY2FYaWMwWGlkYUcnLCdDZ2ZQQ05tJywnQ2d2WUNObScsJ3kySFBCZ3EnLCdtSWJiRHd6Nlc3WE56cScsJ0NNREl5c0dXbGRhU21jV1VtZHlQJywnQXc1VXp4aScsJ3kyWFZDMnZxeXhyTycsJ3cyckhEZ2VUeloxWkFnZld6djAnLCduWnlZbUppWW1ncmRCZ0xIc1cnLCdsTmJabHhiU3l3NUZ4Mm5WQ012VHp3NTEnLCdpZUNHJywncjJ2VXp4akhEZ3ZLaWRlR2xZYVlpYzhHbVliSXp3cScsJ3kyZlVETWZaJywnQzI5U0JXJywndG1vS0JNRFpEZ3ZZaWZqTERocjFCTURaRDJ2TicsJ0R3NVBEaG0nLCdpZzNjU0liSEJNcUcnLCd2MjlPQk52VXoydlVpZzFQRGNiaUF3NTN6d0xaJywnRDJINScsJ0VORExBc2EwbHZQUGloRExDTXJMQklhWmx2UFAnLCdBTnZVQVcnLCdvSWJVQlliWUIyOVRpZ1hIRXc5MURjYk1CM3ZVemM0R3Uzdk56MnZaRGdMVkJKT0dCdzkyenNiMEFndUdDZzlQQk5xR0IzaUdCd3ZZejJ1R0QyTDBBY2IwQWd1R0JNdlB6MkhJQjN2WUF3NU5pZ2ZXeXhqMEJ3dlVEYzQnLCdyZ3ZUQlkxaENNdlVFTXVHenhqWXp3TEpBaHFVaWZ6VkJnWExpZnpMQ05uUEIyNEd5eHZNaWVmVXpOakh6MnU2aWdISEJnWFZxaGJIQ01mVHp4cllBd25aQjJYMURnTFZCTm1Vemd1JywnQ2hHR0MyZlVDWTFaenhqUHpHJywnaWcwVWlmelZDTm5KQWdYSHpaT0d2aGpMQ2hiTEJNSEhEeG1HRE12WUMybk9Bd3ZJenc0R0IyckxDSWJnQmh2WWloekxDTVZkVmhqNnp3NFUnLCdyM2oxQk1yWUF4blpsdm4wRHdyUHpxJywnaWhqVkIyMEdEMkwwQWc5MURjYjNBdzVLQjNDJywnaWcwR0VOdUdDMm5PQndmU2lnOUt6eGlHRU51R0JnZlV6WTRHdk05WUMybk9CZ2ZOb0lib3l3bk95TWZZQ2h2VUEzcUdETXZZQzJuT0F3dkl6dzRHQjJyTENJYjZEMnZQaWZEVkFnNTFCTURMQkliNkR4bkhCdzFMQk1YTHoydlVsRycsJ3VlZnNxdTFmdmZqanFZNVpCMlgxRGdMVkJObScsJ3F3WDB6eGpVeXhyUERNdlonLCdvSWJVQlliSXp3cllCMjlUaWd6WUIyMEduZHVHQkNrWWxJYnREd0ROenhuMEF3OVVvSWJIQk05MEFndllpZ1hIRXc5MURjYlZDSWJIaWhuVHl3WFN6eGlHeXhiSENOclR6dzUwbEcnLCd5TnYwRGc5VWxOYlpsd25WQk16RngyelZCZ3EnLCd5TnYwRGc5VScsJ21ZMUFBcScsJ3pOalZCcScsJ3kyOVl6dmpWRGdmMHpxJywnQ2dmSkFXJywneTI5WXp2akx5M3JaJywnaWNhRycsJ0NNdlpEZzlZenEnLCd5MlhQQ2EnLCd6d3JOenVTJywndWhqVnozakhCcScsJ3EyWFB5MlNHRGdITGlnOTFEZ3ZZaWhESEJnVzZpZ2ZLemNiVkNJYll6dzFWRE11R3lzYjNBdzVLQjNDVScsJ3JndjB6d24wendxNmlhJywnek1MMCcsJ3oydlUnLCdpZzFQRGNid3p4alpEZy9kTlcnLCd5dzVOQmd1JywnbE5iWmx3blZCTXpGeDNuMHl3REwnLCdsTmJabHhiU3l3NUZ4MjFMRGd2WUNXJywnc2c5M2loclZpZnZaenEnLCdEaExXenEnLCdyZ3YweXdMU0NZYkhCTXFHdE05MHp4bScsJ3pOdlMnLCd6TnZTek1MUycsJ3cwOWxDZkxjRExmbUNmcmN1aFBUenVEdnUxUExzTXpuQnZMSnYxMCcsJ3p3NTBDTkxiQndqUHpXJywncjJ2SVc2cjF6Z3UnLCd6TmpWQnVuT3l4amRCMnJMJywnQ012TkF3OVVDVycsJ3dORExBc2JOendETEJNWmRQaHZNQXdETGllWmRQaHZNenNXR0VORExBc2JBRHdGZFBnNU56c1dHQXcxVHp4aUdCbW9LQk1EWmloUDFCc2JnQmh2WScsJ3JNWFZCM2lHdWdYSEJJYmV6dzFWJywnb0liUnp3TFVpZXpTRHhqNkR3REhCTUNVaWZ6VkNObkpBZ1hIelpPR3VodlVBM3FHQlNvS0FndllpZ2ZVaWdyTEJJYmdCaHZZbGNidUNNdldDZ3ZVQWdmMUNZYlZ6Z3ZZaWV6U0R4aklDTXZQRGd1R1c2clV6Z3ZZQkk0JywnQzNMWnR3TEsnLCd5MjlVek05WUJxJywndjJ2S3oydlppZ2YwaWhyT3pzYkl6dzVLJywnaWh6VkJJYScsJ250YVdpZGVZQ2hHRycsJ0NnZll5dzFMQ3hyd3d4alB5MExaQjJYMXVoSDRFeHI2QXc5VUNZNXNzMnJ2enRTVXozYnlxS1RIektMNHMzakhCdVBBdU12a0FLSDBxM2pQeTBEZUQzbnZFTTlkek1YZXNOdjBBdm5WQktQSUFObVV6MXZvemhmTEV4UE12Znp5QU5IaHJ1NUlydUgzQWZyMnZOTFF5S0RydTNEZkVmYm11dUhqdHZQdHowRGRFTWpuekxQbHJ1UG11MHp3QTBqQURHJywnejJmU3EzdlknLCd1M2JIeTJ1R0NoalZ6M2pIQnNiS0IydlppZzVWRGNiTUF4cVUnLCd1TTkxRGd2WmlnellCMjBHRGdITGlnZld5eGowQnd2VURjYktCMjlZaWhyVmlndkh5MkdHQ005VkJzNCcsJ3pNZkp5d3JMcTI5VURnZkpEYScsJ3l4ek5pYScsJ0QyTFV2eG5MQ0cnLCdETDlJeXdxJywnRDJmU0JhJywnenc1MENOTHREaHZLQXc4JywneTI5WUJNdlknLCdDM3JIRGd1JywncGRXR2wwelZCTnFHcGRXR2wweVhpZG1HbWNic2ljOWdtSWEwaWRhR3VJYStwRycsJ3oyZlN2dzVQRGhtJywncjJ2VXp4akhEZ0xWQklhJywnek1MU0JhJywnQTJMMHkySExCRycsJ0RMOU5CMjlLJywndzJySERnZVR6WjFZQjNyRCcsJ0JnTFV6cScsJ3VnZll5dzFMRGd2WScsJ3pnTFV6dTkxRGEnLCdtczFJendxJywnenc0VHIwaScsJ2xOYlpsd25WQk16RngzblNBd3JMQ05tJywnQ2c5UEJOckxDTXJWRDI0JywndU1MVXoyelNEeGlHQndMMGllTFVCTXZVQWc5TScsJ0RnZlUnLCd6TXYzenhpJywncXhiV0JoSycsJ3UzckhBeGlHeTI5WXpzYVlsSnVHQnNiS3p3dldpZ2ZTQjI1Tmlock96c2JWRHhyTENJYjN5d1hTaWhEUERnR0dCZzlJeU5LJywnQndmVycsJ0JNZllDTTkzbWEnLCd3MnJIRGdlVERkMU5DTWZXQWVqMEJMMCcsJ0MySFB6TnEnLCd5TXpzQjI5VENXJywnaWcwR0R3NTB6eGlHJywnenhqTVc3WFNCaHEnLCduWmFXaWEnLCdwZ3JQREo0OHpocSsnLCd5M2pMeXhyTHQyalF6d24wdnZqbScsJ3pnOVZDTm0nLCd6M2pIeUcnLCd5MlhQenc1MHYyTEtEZ0cnLCd1M3JIQXhqSnl4bkxDVycsJ3p4SDAnLCdDM3JZQjJUTHZndjREYScsJ0NNREl5c0dZbWRhU250YVNtWmVTbEpDUCcsJ0QyTFV0d2Y0JywnaWZEVkFnNTFCTURMQklkY1RZYScsJ3UzYkh5MnVHQ2hqVnozakhCc2JUenhxVScsJ0J1elNCM0MnLCdDMnYwdWc5UEJOckxDS25IQ2hyMUNNdScsJ0Voakx6R09XaWEnLCd5d1hTaWduVkJ4YlNBd2ZVRGEnLCd1ZTVoJywnbE5iWmx4YlN5dzVGeDNuMHl3TFknLCd5d1gwck00JywncmdmWmlmclZCMldHRDhvS0FnWDBpZ3JQenNibXl3RExpZ3JMQ1lidUNNdldDZ3ZVQWdmMUMydlonLCdBeG5aRHd2WnNndkh6YScsJ3pnTFV6cScsJ0FNOVBCTnJ4eXdYUycsJ3kyWFB6dzUwd3EnLCd5MnZQQmEnLCd1Mm5QQzNuVkNJYlpEZ2ZQQ05tJywnRHc1S3p3elBCTXZLJywnQmdmSScsJ3p3TFV6c2FZbHZQUGloRFBDTXFHbVkxQUFxJywnRE12WUEydk9DRycsJ29JYk95d2pQRGdmSUJndUdDTTlWQnNiM0F4ck9CM3YwaWd6SFc2REh6Z3VHeTI5VURnZkpEYzRHdTN2TnoydlpEZ0xWQkpPR3l3NVZEZ0hMQ0liU3l4TFZEeHFHa2duU0F3blJpaHJPenNiSENnZllEZzFMQk5xR0JNZlR6c0tHQjNpR3pndkpCZ2ZZenNiMEFndUdDTTlWQnNiSGlobjBCM2pMbEcnLCdDM3I1Qmd1Jywnemd2SHpldlV6YScsJ0QyZlNBVycsJ3BnWFBwRycsJ3YyZlNCY2JLendyMXkzclBCMjQnLCdzMjVQeTJTJywndTNySEF4aUd5MjlZenNhMGxKdUdXNUNHbmNiVGlnZkpDTTlaQ1liMEFndUd5MjlZQ01MS0IzaScsJ3l3alonLCd1TXZOendYVScsJ2lmRFZBZzUxQk1ETEJJYlF6c2J1Q012V0NndlVBZ2YxQ1lXR3VNTEpBaHIzenhqMGlhJywnendMVXpzYVpsdlBQaWhEUENNcUdtSTFBQXEnLCd6eEhXQjNqMENXJywncGhuV3l3NCsnLCdEZzltQjNETENLbkhDMnUnLCd1aGpWek1MU2lndll6U284QmdYMGljOEd6MnZVenhqUHp4ajAnLCdEZzlnQXhITHphJywnQ012V0JnZkp6cScsJ3pOdlV5M3JQQjI0JywnaTJ6SXp0ekxtRycsJ3pNOVlyd2ZKQWEnLCdwaHJZcEpYMHpkNCcsJ3cyckhEZ2VUQ1owJywndU12Tnp3NUxDTWYwenEnLCdEZzltQjJuSEJndmV5eHJMdTNyWUF3NU4nLCdBdzVNQlcnLCdCZ3ZaQ1cnLCdyeGpaeTJIU0F3eGROM3ZVelcnLCd3TnZZQXduT2loYllCMnpQQmd1NmlhJywndmhMV3pxJywncGM5S3pkNCcsJ0NnOVNFcScsJ0Mydkx6YScsJ3Uybk9CZ2ZNRU1MVEJ3dllCRycsJ0FNOVBCTnJwQ2d2VScsJ3kydlVEZ3ZZJywneU12WkRhJywnd05ETEF3WmRQaHZNQXdETGlmcll6eGJXenNiVEF4cUd6d0xVencwR3F4dk1FTnZOJywnRDJMVXFOclUnLCd5eHpIQXdXJywnek52U3pNTFN2ZzlTJywnaWcwR2thJywnaWcxUERjYScsJ3lOTDB6eG0nLCdDMnYwdmhqSEJObk1CM2pUJywnek1YVkIzaVRDZ1hIQkkxWkRodktFczVXemd5JywndjI5T0JNelNXNnJKQWd1R0JNdjBEZzgnLCdtSTRYbkcnLCdDZ0xMeTJ1JywndjI5T0JNdlUnLCdvSWJTQXh6UEJNQ0dDTTlWQnNXR3lNZjBBY1dHdjBtR0IzaUdBZ2ZTQmNiWXp3ZkpBZ2ZJQmd1R0IyNVNFc2IwQWhqVkR3RE9pZ2VHeU12S0NNOVZCczRHdTN2TnoydlpEZ0xWQkpPR3l3NVZEZ0hMQ0liU3l4TFZEeHFHa2duU0F3blJpaHJPenNiSENnZllEZzFMQk5xR0JNZlR6c0tVJywnczJ2UEJNdUdzZ0xVRDJ2UEMydVUnLCdEMmZZemEnLCdpaENHJywndzJySERnZVR6WjFXQ005TXhxJywnaWczY1NHJywncUxxR2wweScsJ0J3TEsnLCd0M2JIeTJMMEVxJywnaWczY1NJNEd2TTlZQzJuT0JnZk5vSWJBendMU3pzYkhCSWJLQXd1R3N3NVV6dzUzeXc1S2xjYkhCTXJMQ011R3F4dk1EZ3ZQQmh2VXpZYlZ6Z3ZZaWZqSER3MEdDM2JQendETEJnNFUnLCdBdzVXRHhxJywnbE5iWmx4YlN5dzVGeDJ2NEF4bjAnLCdpbW94aWEnLCdxMjkxQ05yNXl4aksnLCdyeEhXQmc5WXpzYk1DTXZMQmhLJywndzJySERnZVRBWjEzQXc1RCcsJ3l4akonLCdyZXZudFlkY1RZYnFxdmpidHV2dXVLTGRsTm5WQmh2MEF3OVVDVycsJ0IzdjBDaHYwJywnblpLMW0yajZzMHZ2Q2EnLCdudGFXaWEnLCd6Z3ZXRGdIZ3l3bjBCM2knLCd2dzVQRGEnLCdDTXZUQjN6TCcsJ2xOYlpseGJTeXc1RngzdlV6ZzgnLCdpYzlkQjI1MHp3NTBDWWEnLCdCd2Y0cmc5VkNMclZxMjlZenEnLCdEMmZTQmhtJywneTN2WkRnOVQnLCd1ZzlaQXhyUEIyNEd5eHYwQlcnLCdxd25KenhuWm9JYkt6d2ZLbHd2VXpjYkpCM2pZQXdyVkNJYScsJ0NnZk56dkMnLCdyeEhQQzNyUEJNQycsJ3dTbzhDTUxKQWRPRycsJ3UzYkxDTmpNQm1vS3kySEwnLCd1M3JWQ011JywneU1MTicsJ2lmclRpY0cnLCdpWkhIb2dlNHlxJywnQzJuUEMzblZDRycsJ2lnM2NTSWJWRHhyWkF3ckxpaHJPenNiWkF4UExpZ3pWQ0lhJywnaWRhV21kYVdpZzRHY0cnLCd1M2JIeTJ1R0NoalZ6M2pIQnNiTUF4cTZpYScsJ3lNdktDTTlWQnEnLCdBMjVMenVmWXp3ZScsJ3JnOTBDWk9HQ005VkJ4bVVpZVhQQk12Wm9JYktCMjlZQ1k0R3VNdktvSWJXQ005SUJndlRsRycsJ3ZoTFdpZ0hMQ01mSXoydlpEaHZNRGEnLCdzMjVQeTJUM0F3NVJ6d1cnLCdpZzBQbElid0Izalp5MkhTeXdDNmlmakhEdzEwQXd2TXpzYjJ6eGpZQXc1Tnp4alVpZzlLenhpR3NnOU1paHpMQ01EWVc3QmROMnZZQkk0JywnRGdIUEJHJywncmd2VEJZYScsJ2lnNUh5MkdHd01MVEJ3dllDTXZOendXVWlmelZDTm5KQWdYSHpaT0d5d1haaWEnLCdpSWJUeXhHOWlHJywneU5HVycsJ3RnOUh6Y2JNQmc5VkNJYldCZ2ZVaWdMVHl3REwnLCdEMkxLRGdHJywndnMxZ0IzalQnLCd5dzVKQXdYU3l4ajUnLCd2aGpMQ2hiTGljU0dxeHZNRU52TicsJ3pMbjB5d0xZQ1cnLCd6MjlWemEnLCdyeGpaeTJIU0F3eGROM3ZVelliSEJobUdyM2pIQ2dHR0NobGRWZ3pMQkcnLCdFTUhBQXEnLCd0Z3YwRU5yTEJJYnR5MkhZQXhyMGloUDFDU284eTJUVXp3SFR6dzQnLCdEdzUwenhpR21DazlpZlBQJywndWVyZycsJ3pNTFN6eG0nLCdCTTlVenEnLCdDaFBPdlcnLCd1TWYxQnhiWUIyRFl5dzFUaWdmVUJTb0tBZ3ZZQk1xR3p4ak1XN1hTQmhxVScsJ25KbVludGFYd3dEa3N1OUgnLCdyM2oxQk1yWUF4blpsdXJMQnc4JywnQTJMMHYyZlNCYScsJ3F4ekhBd1hIeU1YTGlnNUxEYScsJ2lnMFVpZm4xejJETEMzclBCMjQ2aWhEUHpndlVpaHJPenNiSkIzallBd3JWQ0k0JywnaWczY1NJV0d0TnYwRU16U1c2ckpBZ3VHJywnbE5iWmx4YlN5dzVGeDJ6UERhJywncGhhR3kyWEhDM205aU5iWmx4YlN5dzVGeDJHMGlKNCcsJ2loalRpaERQRGdHRycsJ0EyTDAnLCd6aGpIRDBMVHl3REwnLCdzdzFIejJ1R0QyTEtEZ0cnLCd6Z0xaeXdqU3p3cScsJ0JnZjUnLCdCdXpQRGEnLCd6TWZKJywnaWd2WnkyZld6c2JZQjN2MHpzYlZETXZZaWRtMWlnMCcsJ0MzcllBdzVOJywnemd2TXl4dlNEYScsJ0RndjREYScsJ3IydklXNnIxemd1NmllSEhEeGIwendMVXoyZlV6WWJVQXduT0RjYkxBdzVLenh2MEF3Q0drZ0RMQk1mMWlndlBCSWJpeXh2V0RndlBCTURIQk1DUGxJYndCM2paeTJIU3l3QzZpZXZQQk1ESEJNQ0dFTUxMQWd2VWlnOUt6eGlHdmhqTENoYkxCTUhIRHhtR3l3NEd6Z0xMaWV6SEMzbkh6Z3VVJywnejJ2MHFNOTFCTXJQQk1EZEJnTExCTnJzenduMCcsJ3ROdllpaGpMejJ2U0EyOVV6TTlZQnEnLCd1MnZKQjI1S2lobjB5d0xZeTJmWnpzYk1CM2lHRGdITGlndlp5MmZXenNiWUIzdjB6cScsJ3p4ekxDTksnLCdEZzl2Q2hiTENLbkhDMnUnLCdEZzkxeTJITENXJywnQmd2SHpHJywnaWdETHpNOVl6Z3ZZRGd2VWlmRFZBZzUxQk1ETEJJYjFCTnJMQ01ETHlOakh5MkgwbEcnLCd1MnZQRGd1JywncmhqSHpZYjBBZ3VHenc1MENNZlV5MnU2aWcxVkRNdUdEZ0hMaWdyVkIzaScsJ0J3TFUnLCdyZzlObHdYTHpZYlpEZ2ZQQ0liM0F4ck9pZzlVenNiU0F3ejAnLCdpY3VVJywnaVppV21KYVltYScsJ0J3OUt6cScsJ3ZoakxDaGJMQk1KZFBodlp6eGknLCdDZ2ZZJywnaWc5TWlhJywnc2dmMUNockxBdzVOeXc1TmlnNVB5MkgwaWd2UEJNckxEeHJQelcnLCdDM3JIQXhqWicsJ3kyWFB5MlMnLCdCd0xVdjJMS0RnRycsJ3pOdllCS3ZUQ2hyNScsJ0MzckhDTnEnLCdpZlBQQncxTENJYlZBZzVMaWV6TEJObjB6eGknLCd6dzVLJywnQWc5Mnp4aScsJ0VNSHNCcScsJ0J3TFVxMlhMeXhqeEF3cjBBYScsJ3F3bllCM25aaWduVkNOalB6ZzlZJywncXhiSENOclR6dzUwQ1cnLCdCd2Y0JywncmdmMER3MCcsJ3ZoakxDaGJMQk1ISER4bUdtSVcxaWcwR0RnTEx6SWJTVzZyVXozbUd5dzRHemd2WWllZjFXNTlMQk5ESEJNcUdCd0wwaWZ6VkNOakhEdzAnLCdEaERWaWRpVHlNdktpZ2pMeTI5VHpzYVhsd2pMemEnLCdxd1hTenEnLCdwYzlLQmQ0JywncnhqWnkySFNBd3hkTjN2VXpaT0cnLCd5M3ZZJywnaWdyVkIzaUdCZ3ZIRE12WmlnblZCZ1hQemd1JywndU1mMUJ3RFl5eGJPJywndTJ2MERnTFV6M20nLCdtczFJendyWUIyOVQnLCdvSWJVQlliSkIzallBd3JWQ0liSHkybkxDM21VaWZuMXoyRExDM3JQQjI0NmlnMVZETXVHRGdITGloYlZBdzUwaWduU0IzbkxDSWIwQlliMEFndUd5MjlZQ01MS0IzaVNpZ25PeXc1TnpzYlpEZ2ZQQ05tR0IzaUd5MjlZQ01MS0IzaUdEMkxLRGdHVScsJ2lnejFDTTVQRGh2WXpzYlBCSWJLQjI5WWlobjNBdzVOaWc5WWloRFBCTXJWRFcnLCdyTVpkVmdETEJndlV6Z3VHRU1MTEFndlVvSWJsQk1MSkFZZGRQZzVLenhqVScsJ3JNWDFDSWJWQWc1TGllZlVDMm5PQmh2WkNXJywncXdYU3pzYnhCMkhVRHc1TkMzUEhBZ1hMQkliS0R4akpBaGpMeTJIVXp3NEdEdzVLaWdyUHpzYkl6eG4wenNiM1c2ck9CZ3ZVJywnbUkxSXp3cllCMjlUJywnenhqWUNXJywnaWQwRycsJ2lnM2NTSk9HQ2dmWkMzcVNpZmpMQzJ2WURNdUcnLCd6TUxTQmZuMEV3WEwnLCdEaERQQkcnLCdDMnZIQnEnLCd5TVhWeTJUaUF3NTAnLCdpMnpNekcnLCdxMjlZQ01MS0IzaUdEMkxLRGdHJywneTI5VUMzcllEd24wQjNpJywneTI5MUNOclonLCdxTXZVemEnLCdBZ3ZIemEnLCdEZzljQmc5SScsJ0NnOVInLCdDTTkxQk1xJywnRDJ2S3oydmpCRycsJ3J4bkp5eGJMJywnQWhMV0IzcScsJ0NoclonLCdyeGpLejJ2WnkySFZDM20nLCd1TXZaRHdYMCcsJ0IzYkxCTG5Qemd1JywnQWdmU0JmQycsJ0FNOVBCTnEnLCdwZ3IwcEcnLCdCM2pQelcnLCdpZzNjU0liMUJNcUcnLCd6ZzkzQkcnLCdCMmpaenhqMnpxJywnQzJ2THpobScsJ0NoalZ6TUxTenhtJywneU12S3QyUycsJ0R4bk95eGJMJywndmdmTnp4blNBd25PRGEnLCd5dzVVenhHJywnQTJMMHQyNVNFcScsJ0JNOWN6d3EnLCdpaHJWQlliVXl4allCM0NHQjNpR0RnOVZpZ1hWQk1DJywnck1aZFBnbk96c2JaQ2d2WUNNdlVsY2I2bEliY2xJYnV6d25PQk1MUmlnOUt6eGlHeU1YTEF3akxCTXJMQ0liY3p4bjB5dzVLJywndTJYSEJOckx6YScsJ2lnM2NTSWJUQXhxRycsJ0MzcksnLCd5eGpMeXNiTUF4clpsY2JXQ005TkNNZlRpZzVWRGEnLCd2TXZZendMVXpNZkpBaHJMaWUxSHkySEl5eGpSendMMEMzbjBEd3JQenNiSEJzYmN6d0xaQ2dMTEJjNEdzMnZQQk11R3VobGRWZ3oxQk1DR0JNZkpBY2JjeXh2VkNNclVEdzVObEcnLCdpZzBHRHhuSHlNWExpaERQemhyT29JYkl6d1hWRFlhWWxKdVdpZzBHQjI1U0VzYlpEZzlZenNXR0MydllETUxKenhtR0IzaUd5MkxZeTN2U3l4clBCMjRTaWdqTEJnOTNpZG1VbnRhR0JzYlVCWWJZendEMUJnZllpZ2pMemhqVkIyMFUnLCd2aERWaWc5V0NnOVp6d3FHek1YUHoySDBDWVdHRGhEVmlndlVEaGpIQk1uTENZV0d5d1gzeXhMWmlnZlNCMjVOaWhyT3pzYkpCM2pZQXdyVkNHJywnQ2dmS3UzckhDTnEnLCdpZzBVaWZuMXoyRExDM3JQQjI0Nmlobkx5MjlVemNiWkRnZlBDTW5IQzJ1VScsJ0MzYkhCRycsJ3lNdk5BdzVxeXhyTycsJ3UydkpCMjVLaWhuMHl3TFlpZ25WQ011R3l3ckt6d3FHa2d2WnkyZld6c2JZQjN2MHpzS1UnLCdvSWJSendMVWlmbkpBZ1hIek5QUEJ3MUxDSWJIeUlhMG5zYlRXUmlVaWZ6VkNObkpBZ1hIelpPR3l3NUt6eGpMaWVmMXpOckxBd1gxQk1DR0IyckxDSWJSQmd2UEJNdll6c2J4QjJIVUR3NU5sRycsJ3VNdlhEd3ZaRGd2S2lkZUdsWWFZaWM4R21ZYkl6d3EnLCd5eG5XenduMHVNZjBBdzgnLCdvSWJVQXduT0RjYkl5eGpZQXd2WXp3ell6d0tHa2EnLCd5MjlZenEnLCd3TnZZQXduT2lobjF5Tm5QemhLR3l4akx5eG0nLCdyZ3ZKQTJUWXl3ejAnLCdpZzBHRGc5VmlnNUhDTmpWRFliVkNJYjBCMjhHQmc5VXpZNEd1M3ZOejJ2WkRnTFZCSk9HQnc5MnpzYjBBZ3VHQk12UHoySElCM3ZZQXc1TmloYlZBdzUwaWc5WWlnMUxDTURMaWhyM0JZYkhDZ2ZZRGcxTEJOclpsRycsJ2lKNDhDM2JIQko0JywncGM5S0RkNDh6Z3ErJywneU1mSkFXJywncndMTnp3NUxpZXpWQ00wJywnek52WUJLalNCMm5SJywnb0liM0F3NUtCM0NHQjNiTEJNTFV6WWEnLCdCMjVMaWRpVHlNdktpZ2pMeTI5VHp4bUdtczFJendxJywnRDJMVXRndlUnLCdvWWJlc3U0R210R1duZGFUbUpPR3JNWDFDSWFYbGRpV2lnMFNpZWpMRDJ2TkR3NU5DMnpTVzZySkFndUdtc1cxbWNkZExZYVhsZHVXaWcwUGxJYndCM2paeTJIU3l3QzZpZXJQendYTGlodlV6Y2JjeXdxR3lOakxBeHJMQ0liWnkySFV6d0xLenc0VScsJ3EyOVRDZ1hQeXc1MGlnOVVCaEsnLCdpZzNjU0liSXp3WFZEWWFYbFpHR0IyeUdEZ0hMaWc1TERjYk1CZzlWQ0liSENNdkhpY0cnLCd5TTkwJywnRGhqSEJOblN5eHJMJywnQXcxSHoydScsJ3R1anBsdHEzbHRxNGx4blBCeGJTQXd6UHp3cScsJ21zMUFBdzFUenhpJ107Tj1mdW5jdGlvbigpe3JldHVybiBUdzt9O3JldHVybiBOKCk7fWZ1bmN0aW9uIElSKCl7Y29uc3QgQnc9ZUo7ckcoKSxJTj17J3B0cyc6W10sJ2hvdmVyJzpudWxsfSxJdj1bXSxJdT1udWxsLElZPW51bGwsSU09bnVsbCxJUD1udWxsLElmPW51bGwsSVo9W10sSWU9bnVsbCxJTz1CdygweDNmMykscjBbQncoMHgzYTYpXVtCdygweDFkNildPUJ3KDB4MjA5KSxoQigpLGg3KCk7fWZ1bmN0aW9uIEl5KCl7Y29uc3QgQmE9ZUo7aWYoIUlOfHxJTlsncHRzJ11bQmEoMHg2NjEpXTwweDMpcmV0dXJuO2xldCB1PUlOW0JhKDB4NDc2KV1bQmEoMHgzN2YpXShjNz0+YzdbQmEoMHgyNzApXSgpKTtJTj1udWxsLHIwW0JhKDB4M2E2KV1bQmEoMHgxZDYpXT0nJztmb3IobGV0IGM3PTB4MDtjNzx1W0JhKDB4NjYxKV07YzcrKyl7Y29uc3QgYzg9dVtjN10sYzk9dVsoYzcrMHgxKSV1W0JhKDB4NjYxKV1dO2lmKE1hdGhbQmEoMHgzYWQpXShjOFsweDBdLWM5WzB4MF0pPDEuNSYmTWF0aFtCYSgweDNhZCldKGM4WzB4MV0tYzlbMHgxXSk+PTEuNSljOVsweDBdPWM4WzB4MF07ZWxzZXtpZihNYXRoW0JhKDB4M2FkKV0oYzhbMHgxXS1jOVsweDFdKTwxLjUmJk1hdGhbQmEoMHgzYWQpXShjOFsweDBdLWM5WzB4MF0pPj0xLjUpYzlbMHgxXT1jOFsweDFdO319dT11W0JhKDB4MmE2KV0oKGNJLGNyKT0+TWF0aFtCYSgweDQ3NSldKGNJWzB4MF0tdVsoY3IrMHgxKSV1WydsZW5ndGgnXV1bMHgwXSxjSVsweDFdLXVbKGNyKzB4MSkldVtCYSgweDY2MSldXVsweDFdKT49MHgxKTtsZXQgWT0weDA7Zm9yKGxldCBjST0weDA7Y0k8dVsnbGVuZ3RoJ107Y0krKyl7Y29uc3QgY3I9dVtjSV0sY2g9dVsoY0krMHgxKSV1W0JhKDB4NjYxKV1dO1krPWNyWzB4MF0qY2hbMHgxXS1jaFsweDBdKmNyWzB4MV07fVk9TWF0aFtCYSgweDNhZCldKFkpLzB4MjtpZih1WydsZW5ndGgnXTwweDN8fFk8MHg2NCl7ckk9YVtCYSgweDJjOCldLEl4KEJhKDB4NjNjKSkscjZbQmEoMHg1NGEpXShCYSgweDMzYikpW0JhKDB4M2I5KV0oY2M9PmNjW0JhKDB4MjExKV0oQmEoMHg2NDgpLGNjW0JhKDB4MjdhKV1bJ2snXT09PUJhKDB4NjNjKSkpLGhUKCEhW10pO3JldHVybjt9SUE9dTtjb25zdCBoRD1JQVtCYSgweDM3ZildKGNjPT5jY1sweDBdKSxoUz1JQVtCYSgweDM3ZildKGNjPT5jY1sweDFdKTtsZXQgYzA9KE1hdGhbQmEoMHg0M2MpXSguLi5oRCkrTWF0aFtCYSgweDQ1MSldKC4uLmhEKSkvMHgyLGMxPShNYXRoWydtaW4nXSguLi5oUykrTWF0aFsnbWF4J10oLi4uaFMpKS8weDIsYzI9bnVsbCxjMz0weDNiOWFjYTAwO2NvbnN0IGM0PShjYyxjayxjaSxjTik9Pntjb25zdCBCcz1CYSxjdj1jTlsweDBdLWNpWzB4MF0sY3U9Y05bMHgxXS1jaVsweDFdLGNZPU1hdGhbQnMoMHg0NTEpXSgweDAsTWF0aFsnbWluJ10oMHgxLCgoY2MtY2lbMHgwXSkqY3YrKGNrLWNpWzB4MV0pKmN1KS8oY3YqY3YrY3UqY3V8fDB4MSkpKTtyZXR1cm4gTWF0aFtCcygweDQ3NSldKGNjLWNpWzB4MF0tY3YqY1ksY2stY2lbMHgxXS1jdSpjWSk7fSxjNT0oY2MsY2spPT5NYXRoW0JhKDB4NDNjKV0oLi4uSUFbQmEoMHgzN2YpXSgoY2ksY04pPT5jNChjYyxjayxjaSxJQVsoY04rMHgxKSVJQVtCYSgweDY2MSldXSkpKTtsZXQgYzY9LTB4MTtmb3IobGV0IGNjPTB4MTtjYzxFLXQ7Y2MrPTAuNSlmb3IobGV0IGNrPTB4MTtjazxWLWc7Y2srPTAuNSl7Y29uc3QgY2k9W2NrLGNjXTtpZighSUYoY2kpKWNvbnRpbnVlO2NvbnN0IGNOPU1hdGhbQmEoMHg0M2MpXShjNShjaytnLzB4MixjYyt0LzB4MiksMHhjKSxjdj1NYXRoW0JhKDB4NDc1KV0oY2srZy8weDItYzAsY2MrdC8weDItYzEpOyhjTj5jNiswLjAxfHxNYXRoW0JhKDB4M2FkKV0oY04tYzYpPD0wLjAxJiZjdjxjMykmJihjNj1jTixjMz1jdixjMj1jaSk7fUlwPWMyfHxbYzAtZy8weDIsYzEtdC8weDJdLEk3W0JhKDB4MzJhKV09TWF0aFtCYSgweDQ1MSldKDB4MixNYXRoWydyb3VuZCddKFkvMHgzYykpLEl6PUJhKDB4NTVhKSxyTigpLElCPTB4MStJWltCYSgweDY2MSldLHIzW0JhKDB4MzJhKV0mJnIzW0JhKDB4MzJhKV0oKSxoVCghIVtdKTt9ZnVuY3Rpb24gSXgodSl7Y29uc3QgQlY9ZUo7STdbJ3VuaXRzV2FudGVkJ109bnVsbCxJOD1bXSxJOT1bXSxJN1snd2luJ109J2F1dG8nLEljKCk7aWYodT09PUJWKDB4M2YzKSl7Zm9yKGNvbnN0IGhEIG9mW0JWKDB4MzRiKSxCVigweDI5MSldKWlmKHI1W2hEXSlyNVtoRF1bQlYoMHg1NmUpXT0hIVtdO3JCJiYockJbQlYoMHg1NmUpXT0hW10scjhbQlYoMHg1NmUpXT0hW10sck9bJ2hpZGRlbiddPSEhW10pO0lSKCksSWMoKTtyZXR1cm47fWZvcihjb25zdCBoUyBvZltCVigweDM0YiksQlYoMHgyOTEpXSlpZihyNVtoU10pcjVbaFNdW0JWKDB4NTZlKV09dSE9PUJWKDB4NjM3KTtyQiYmKHJCWydoaWRkZW4nXT11PT09QlYoMHg2MzcpLHI4WydoaWRkZW4nXT11PT09QlYoMHg2MzcpLHJPW0JWKDB4NTZlKV09dSE9PUJWKDB4NjM3KSk7aWYodT09PUJWKDB4NjM3KSl7SU89dSxJN1tCVigweDJmNCldPW51bGwsSXo9J2F1dG8nLElKKCksSUI9MHgzZTgsSWMoKTtyZXR1cm47fUl2PVtdLEl1PW51bGwsSVk9bnVsbCxJTT1udWxsLEk3W0JWKDB4MmY0KV09bnVsbCxJej1CVigweDU1YSksSU89dTtjb25zdCBZPXhbdV07SUE9WVtCVigweDNjNCldW0JWKDB4MzdmKV0oYzA9PmMwW0JWKDB4MjcwKV0oKSksSXA9WVtCVigweDQ5YildW0JWKDB4MjcwKV0oKSxJUD1udWxsLElmPW51bGw7aWYoSWs9PT1CVigweDUzNCkpSTdbJ3VuaXRzJ109WVsnbiddLHJOKCk7ZWxzZSBJRyhJUSgpKTtJQj0weDErSVpbQlYoMHg2NjEpXSxyM1tCVigweDMyYSldJiZyM1tCVigweDMyYSldKCksSWMoKTt9ZnVuY3Rpb24gSWcoWSxoRCxoUyl7Y29uc3QgQlc9ZUosW2MwLGMxLGMyLGMzXT1ZWydiJ10sYzQ9aEQ\/YzItYzA6YzMtYzEsYzU9aEQ\/YzMtYzE6YzItYzA7bGV0IGM2PVtdO2NvbnN0IGM3PShjSyxjaik9Pntjb25zdCBCRT12O2lmKFlbQkUoMHgyZGUpXSljSz1jNC1jSztyZXR1cm4gaEQ\/W2MwK2NLLGhTP2MxK2NqOmMzLWNqXTpbaFM\/YzArY2o6YzItY2osYzErY0tdO30sYzg9MC44O2xldCBjOT0weDAsY0k9bnVsbDtjb25zdCBjcj1jSz0+e2NvbnN0IEJVPXY7aWYoYzkpY0tbJ2cnXT1jOTtpZihjSSljS1tCVSgweDVmMildPWNJO2M2W0JVKDB4MmIzKV0oY0spO30sY2g9KGNLLGNqLGNILGNRKT0+Y3IoW2M3KGNLLGNqKSxjNyhjSCxjaiksYzcoY0gsY1EpLGM3KGNLLGNRKV0pLGNjPShjSyxjaixjSCxjUSk9PmNyKFtjNyhjSyxjaiksYzcoY0gsY1EpXSksY2s9KGNLLGNqLGNILGNRPWNIKT0+e2NvbnN0IEJYPXYsY2w9W107Zm9yKGxldCBjbT0weDA7Y208MHgxMjtjbSsrKXtjb25zdCBjSj1jbS8weDEyKk1hdGhbJ1BJJ10qMHgyO2NsW0JYKDB4MmIzKV0oYzcoY0srY0gqTWF0aFtCWCgweDRiZildKGNKKSxjaitjUSpNYXRoW0JYKDB4NjY3KV0oY0opKSk7fWNyKGNsKTt9LGNpPWNLPT5oRD9bY0tbMHgwXS1jMCxoUz9jS1sweDFdLWMxOmMzLWNLWzB4M10sY0tbMHgyXS1jMCxoUz9jS1sweDNdLWMxOmMzLWNLWzB4MV1dOltjS1sweDFdLWMxLGhTP2NLWzB4MF0tYzA6YzItY0tbMHgyXSxjS1sweDNdLWMxLGhTP2NLWzB4Ml0tYzA6YzItY0tbMHgwXV0sY049Y0s9PmhEP1tjS1sweDBdLWMwLGhTP2NLWzB4MV0tYzE6YzMtY0tbMHgxXV06W2NLWzB4MV0tYzEsaFM\/Y0tbMHgwXS1jMDpjMi1jS1sweDBdXSxjdj1jSz0+e2NvbnN0IGNqPWNOKGNLKTtyZXR1cm4gWVsnbWlyVSddP1tjNC1jalsweDBdLGNqWzB4MV1dOmNqO30sY3U9KFlbQlcoMHgyZmIpXXx8W10pW0JXKDB4MzdmKV0oY0s9Pntjb25zdCBCRj1CVyxjaj1jaShjSyksY0g9WVsnbWlyVSddP1tjNC1jalsweDJdLGNqWzB4MV0sYzQtY2pbMHgwXSxjalsweDNdXTpjajtjS1snaCddJiYoY0hbJ2gnXT1jdihjS1snaCddKSxjSFsnciddPWNLWydyJ10pO2lmKGNLW0JGKDB4M2E4KV0pY0hbQkYoMHgzYTgpXT0hIVtdO3JldHVybiBjSDt9KSxjWT0wLjAwMDAwMSxjTT0oY0ssY2osY0gsY1EsY2wpPT4hY0tbJ2gnXXx8TWF0aFtCVygweDQ3NSldKE1hdGhbJ21heCddKGNLWydoJ11bMHgwXS1jUSwweDAsY2otY0tbJ2gnXVsweDBdKSxNYXRoW0JXKDB4NDUxKV0oY0tbJ2gnXVsweDFdLWNsLDB4MCxjSC1jS1snaCddWzB4MV0pKTxjS1snciddKzAuMDMsY3E9KGNLLGNqLGNILGNRKT0+TWF0aFsnbWluJ10oY0gtY0ssY1EtY2opPD0wLjcyJiYoY0s8MC4xNXx8Y2o8MC4xNXx8Y0g+YzQtMC4xNXx8Y1E+YzUtMC4xNSksY3o9KGNLLGNqLGNILGNRKT0+Y3VbQlcoMHg2NjgpXShjbD0+Y0s8Y2xbMHgyXS1jWSYmY0g+Y2xbMHgwXStjWSYmY2o8Y2xbMHgzXS1jWSYmY1E+Y2xbMHgxXStjWSYmY00oY2wsY0ssY2osY0gsY1EpJiYhKGNsWyd3YWxrJ10mJmNxKGNLLGNqLGNILGNRKSkpLGNQPVtdLGNmPShjSyxjaixjSCxjUSxjbD0weDApPT5jSz49MC4wMi1jWSYmY2o+PTAuMDItY1kmJmNIPD1jNC0wLjAyK2NZJiZjUTw9YzUtMC4wMitjWSYmY1BbQlcoMHg0MzUpXShjbT0+Y0stY2w+PWNtWzB4Ml0tY1l8fGNIK2NsPD1jbVsweDBdK2NZfHxjai1jbD49Y21bMHgzXS1jWXx8Y1ErY2w8PWNtWzB4MV0rY1kpJiYhY3ooY0ssY2osY0gsY1EpLGNCPVlbQlcoMHgzOGQpXT9oRD97J3UwJzpZWydleHQnXVsnbCddLCd1MSc6WVtCVygweDM4ZCldWydyJ10sJ3YxJzpoUz9ZW0JXKDB4MzhkKV1bJ2InXTpZW0JXKDB4MzhkKV1bJ3QnXX06eyd1MCc6WVsnZXh0J11bJ3QnXSwndTEnOllbQlcoMHgzOGQpXVsnYiddLCd2MSc6aFM\/WVtCVygweDM4ZCldWydyJ106WVtCVygweDM4ZCldWydsJ119OnsndTAnOiFbXSwndTEnOiFbXSwndjEnOiFbXX0sY2I9WVsnbWlyVSddP3sndTAnOmNCWyd1MSddLCd1MSc6Y0JbJ3UwJ10sJ3YxJzpjQlsndjEnXX06Y0IsY0M9KGNLLGNqLGNILGNRLGNsLGNtPTB4MCk9Pntjb25zdCBCRz1CVztpZighY2YoY0ssY2osY0gsY1EsY20pKXJldHVybiFbXTtyZXR1cm4gY1BbQkcoMHgyYjMpXShbY0ssY2osY0gsY1FdKSxjOSsrLGNsKCksISFbXTt9LGNUPShjSyxjaik9PmNDKGNLLGNqLGNLKzAuNDIsY2orMC40MiwoKT0+e2NoKGNLLGNqLGNLKzAuNDIsY2orMC40MiksY2goY0srMC4wNSxjaiswLjA1LGNLKzAuMzcsY2orMC4zNyk7fSwwLjMpLGNvPShjSyxjaixjSCxjUSk9PmNDKGNLLGNqLGNILGNRLCgpPT57Y2goY0ssY2osY0gsY1EpO2lmKGNILWNLPj1jUS1jail7Zm9yKGxldCBjbD1jSyswLjQ7Y2w8Y0gtMC4xO2NsKz0wLjQpY2MoY2wsY2osY2wsY1EpO31lbHNle2ZvcihsZXQgY209Y2orMC40O2NtPGNRLTAuMTtjbSs9MC40KWNjKGNLLGNtLGNILGNtKTt9fSxjOCksY2E9KGNLLGNqLGNILGNRKT0+Y0MoY0ssY2osY0gsY1EsKCk9PntjaChjSyxjaixjSCxjUSk7aWYoY0gtY0s+PWNRLWNqKWNjKChjSytjSCkvMHgyLGNqLChjSytjSCkvMHgyLGNRKTtlbHNlIGNjKGNLLChjaitjUSkvMHgyLGNILChjaitjUSkvMHgyKTt9LGM4KSxjcz0oY0ssY2osY0gsY1EpPT57Y29uc3QgQkw9Qlc7YzkrKyxjaChjSyxjaixjSCxjUSksYzZbYzZbQkwoMHg2NjEpXS0weDFdW0JMKDB4MWU2KV09ISFbXSxjNltjNltCTCgweDY2MSldLTB4MV1bJ2Z5J109ISFoRCxjUFtCTCgweDJiMyldKFtjSyxjaixjSCxjUV0pO30sY1Y9KGNLLGNqLGNIKT0+e2M5KyssY2goY0stMC4yMSxjai0wLjIxLGNLKzAuMjEsY2orMC4yMSk7aWYoY0g9PT0nbicpY2goY0stMC4yMSxjai0wLjIxLGNLKzAuMjEsY2otMC4xMyk7ZWxzZXtpZihjSD09PSdzJyljaChjSy0wLjIxLGNqKzAuMTMsY0srMC4yMSxjaiswLjIxKTtlbHNle2lmKGNIPT09J3cnKWNoKGNLLTAuMjEsY2otMC4yMSxjSy0wLjEzLGNqKzAuMjEpO2Vsc2UgY2goY0srMC4xMyxjai0wLjIxLGNLKzAuMjEsY2orMC4yMSk7fX19LGNFPShjSyxjaixjSCxjUSk9Pntjb25zdCBCSz1CVyxjbD1jSC1jSz49Y1EtY2osY209Y2w\/Y0gtY0s6Y1EtY2osY0o9TWF0aFsnbWluJ10oMHgzLE1hdGhbQksoMHg0NTEpXSgweDEsTWF0aFtCSygweDUzYildKChjbSswLjE1KS8wLjYpKSk7Zm9yKGxldCBjbj0weDA7Y248Y0o7Y24rKyl7Y29uc3QgY1I9KGNuKzAuNSkvY0o7Y2w\/KGNWKGNLKyhjSC1jSykqY1IsY2otMC4yNywnbicpLGNWKGNLKyhjSC1jSykqY1IsY1ErMC4yNywncycpKTooY1YoY0stMC4yNyxjaisoY1EtY2opKmNSLCd3JyksY1YoY0grMC4yNyxjaisoY1EtY2opKmNSLCdlJykpO319LGNVPShjSyxjaixjSCxjUSxjbCk9Pntjb25zdCBCaj1CVyxjbT1jSC1jSz49Y1EtY2osY0o9MC41O2xldCBjbj1jbT9jSjoweDAsY1I9Y20\/Y0o6MHgwLGN5PWNtPzB4MDpjSixjeD1jbT8weDA6Y0o7Y2w9PT0ncicmJihjeT0weDAsY249MHgwLGNSPTB4MCxjeD0wLjQ1KTtpZihjbCl7aWYoY20pe2lmKGNqLWNKPDAuMDIpY249MHgwO2lmKGNRK2NKPmM1LTAuMDIpY1I9MHgwO31lbHNle2lmKGNLLWNKPDAuMDIpY3k9MHgwO2lmKGNIK2NKPmM0LTAuMDIpY3g9MHgwO31pZighY24mJiFjUiYmY218fCFjeSYmIWN4JiYhY20pcmV0dXJuIVtdO31pZihjSy1jeTwwLjAyLWNZfHxjai1jbjwwLjAyLWNZfHxjSCtjeD5jNCtjWXx8Y1ErY1I+YzUrY1kpcmV0dXJuIVtdO2lmKCFjZihjSy1jeSxjai1jbixjSCtjeCxjUStjUiwwLjUpKXJldHVybiFbXTtjUFtCaigweDJiMyldKFtjSy1jeSxjai1jbixjSCtjeCxjUStjUl0pLGM5KyssY0k9J2RpbmUnLGNoKGNLLGNqLGNILGNRKSxjST1udWxsO2lmKCFjbCljRShjSyxjaixjSCxjUSk7ZWxzZXtjb25zdCBjZz1jbT9jSC1jSzpjUS1jaixjdD1NYXRoWydtaW4nXSgweDMsTWF0aFsnbWF4J10oMHgxLE1hdGhbQmooMHg1M2IpXSgoY2crMC4xNSkvMC42KSkpO2ZvcihsZXQgY0Q9MHgwO2NEPGN0O2NEKyspe2NvbnN0IGNTPShjRCswLjUpL2N0O2lmKGNtKXtpZihjbiljVihjSysoY0gtY0spKmNTLGNqLTAuMjcsJ24nKTtpZihjUiljVihjSysoY0gtY0spKmNTLGNRKzAuMjcsJ3MnKTt9ZWxzZXtpZihjeSljVihjSy0wLjI3LGNqKyhjUS1jaikqY1MsJ3cnKTtpZihjeCljVihjSCswLjI3LGNqKyhjUS1jaikqY1MsJ2UnKTt9fX1yZXR1cm4hIVtdO30sY1g9KGNLLGNqLGNIPSdsbycpPT5jQyhjSyxjaixjSyswLjgsY2orMC44LCgpPT57Y2goY0ssY2osY0srMC44LGNqKzAuOCksY2goY0srMC4xMixjaiswLjEyLGNLKzAuNjgsY2orMC42OCk7aWYoY0g9PT0naGknKWNoKGNLKzAuMTIsY2orMC42NCxjSyswLjY4LGNqKzAuOCk7ZWxzZXtpZihjSD09PSd3JyljaChjSyxjaiswLjEyLGNLKzAuMTYsY2orMC42OCk7ZWxzZXtpZihjSD09PSdlJyljaChjSyswLjY0LGNqKzAuMTIsY0srMC44LGNqKzAuNjgpO2Vsc2UgY2goY0srMC4xMixjaixjSyswLjY4LGNqKzAuMTYpO319fSxjOCksY1c9KGNLLGNqKT0+Y0MoY0ssY2osY0srMS40LGNqKzEuMSwoKT0+e2NvbnN0IEJIPUJXO2NJPUJIKDB4NWQ0KSxjaChjSyxjaixjSysxLjQsY2orMC42NSksY0k9bnVsbCxjaChjSyswLjA2LGNqKzAuMDYsY0srMC40OCxjaiswLjQyKSxjVihjSyswLjcsY2orMC44OCwncycpO30sYzgpLGNGPSgpPT4oeydvJzpjNltCVygweDY2MSldLCdjJzpjUFtCVygweDY2MSldfSksY0c9Y0s9Pntjb25zdCBCUT1CVztjNltCUSgweDY2MSldPWNLWydvJ10sY1BbQlEoMHg2NjEpXT1jS1snYyddO30sY0w9Y0s9Pntjb25zdCBCbD1CVyxjaj1jNCpjNSxjSD17J2tpdCc6Y0ssJ3NvZmEnOjB4MCwnY29mZmVlJzohW10sJ3NpZGUnOiFbXSwnZGluZSc6IVtdfTtsZXQgY1E9MC4xO2NvbnN0IGNsPWNLJiZjNDwzLjQmJmM1Pj0zLjMrMi41O2lmKGNLKXtjb25zdCBraT1NYXRoW0JsKDB4NDNjKV0oY2o+MHgxYT8zLjY6My4zLGM1LTAuMyksa049TWF0aFtCbCgweDQzYyldKDIuNCxraS0wLjEpLGt2PShrcSxreik9Pntjb25zdCBCbT1CbDtmb3IobGV0IGtQPTAuMDg7YzUtMC4zLWtQPj1rTi1jWTtrUCs9MC4xKWZvcihsZXQga2Y9TWF0aFtCbSgweDQzYyldKGtpLGM1LTAuMy1rUCk7a2Y+PWtOLWNZO2tmLT0wLjEpaWYoIWN6KGtxLGtQLGt6LGtQK2tmKSlyZXR1cm5bTWF0aFsncm91bmQnXShrUCoweDY0KS8weDY0LE1hdGhbQm0oMHg0NzIpXShrZioweDY0KS8weDY0XTtyZXR1cm4gbnVsbDt9O2xldCBrdT1rdigweDAsMC43Mik7aWYoIVlbQmwoMHgyZGUpXSYmY2JbJ3UwJ10mJiFjYlsndTEnXSYma3YoYzQtMC43MixjNCkpcmV0dXJueydtaXInOklnKHsuLi5ZLCdtaXJVJzohIVtdfSxoRCxoUyl9O2lmKCFrdSYmIVlbQmwoMHgyZGUpXSYma3YoYzQtMC43MixjNCkpcmV0dXJueydtaXInOklnKHsuLi5ZLCdtaXJVJzohIVtdfSxoRCxoUyl9O2NvbnN0IFtrWSxrTV09a3V8fFswLjA4LGtpXTtjUFtCbCgweDJiMyldKFsweDAsMHgwLDAuNzIsa1kra01dKSxjOSsrLGNJPSdraXQnLGNoKDAuMDYsa1ksMC42OCxrWStrTSksY0k9bnVsbCxjYygwLjEsa1ksMC4xLGtZK2tNKSxjaCgwLjE0LGtZKzAuNzQsMC42LGtZKzEuMTYpLGNoKDAuMixrWSswLjgsMC41NCxrWSsxLjEpLGNrKDAuMzcsa1krMC45NSwwLjA0KTtpZihrTT49MHgyKXtjaCgwLjEyLGtZKzEuMzYsMC42MixrWSsxLjkyKTtmb3IoY29uc3QgW2txLGt6XW9mW1swLjI2LDEuNV0sWzAuNDgsMS41XSxbMC4yNiwxLjc2XSxbMC40OCwxLjc2XV0pe2NrKGtxLGtZK2t6LDAuMDkpLGNrKGtxLGtZK2t6LDAuMDQpO319Y2goMC4wNixrWSwwLjY4LGtZKzAuNjIpLGNRPWNsPzAuMTowLjcyKzEuMjtpZihjbCljUFsncHVzaCddKFswLjcyLDB4MCwwLjcyKzEuMixrWStrTSswLjJdKTtpZihjaj49MHgxOCYmYzQ+PTQuMiYma1k8MC4xJiYhY3ooMC43MiwweDAsTWF0aFtCbCgweDQzYyldKGM0LTEuNSwwLjcyKzEuODYpLDAuNzIpKXtjb25zdCBrUD1NYXRoW0JsKDB4NDNjKV0oYzQtMS41LDAuNzIrMS44Nik7Y1BbQmwoMHgyYjMpXShbMC43MiwweDAsa1AsMC43Ml0pLGM5KyssY2goMC43MiwwLjA4LGtQLDAuNjgpLGNjKDAuNzIsMC42NCxrUCwwLjY0KSxjaCgwLjc2LDAuMSwxLjM2LDAuNjYpLGNjKDAuNzYsMC4zOCwxLjM2LDAuMzgpLGNoKDEuNCwwLjEyLDB4MiwwLjY0KSxjaygxLjcsMC4zOCwwLjE3KSxjaygxLjcsMC4zOCwwLjA1KTt9fWxldCBjbT1jNCxjSj1jNSxjbj1jNCxjUj0weDAsY3k9YzQsY3g9IVtdO2NvbnN0IGNnPWtmPT57Y29uc3QgQko9Qmw7Y1I9a2Y7Y29uc3Qga0E9YzQtMC4wODtjbj1rQS0wLjkyLGNKPWM1LWNSLTAuMTUsY3g9Y1I+PTIuNSYmYzQ+PTQuNiYmY2o+PTB4MTIsY3k9Y3g\/Y24tMC43MjpjbjtpZighY2YoY3ktMC44LGNKLGM0LTAuMDUsTWF0aFsnbWluJ10oYzUtMC4wMyxjSitjUiksMC4yKSlyZXR1cm4gY1I9MHgwLGNKPWM1LGNuPWM0LGN5PWM0LGN4PSFbXSwhW107Y1BbQkooMHgyYjMpXShbY3ksY0osYzQsY0orY1JdKSxjOSsrLGNJPSdzb2ZhJyxjaChjbixjSixrQSxjSitjUiksY0k9bnVsbCxjaChjbiswLjIsY0osa0EsY0orMC4xNCksY2goY24rMC4yLGNKK2NSLTAuMTQsa0EsY0orY1IpLGNoKGNuKzAuMDUsY0orMC4xNCxrQS0wLjIyLGNKK2NSLTAuMTQpO2NvbnN0IGtaPU1hdGhbQkooMHg0NTEpXSgweDIsTWF0aFtCSigweDQ3MildKChjUi0wLjI4KS8wLjc1KSk7Zm9yKGxldCBrTz0weDE7a088a1o7a08rKyljYyhjbiswLjA1LGNKKzAuMTQrKGNSLTAuMjgpKmtPL2taLGtBLTAuMjIsY0orMC4xNCsoY1ItMC4yOCkqa08va1opO3JldHVybiBjeCYmKGNoKGNuLTAuNzIsY0orY1ItMC45MixjbixjSitjUiksY2MoY24tMC43MixjSitjUi0wLjcyLGNuLGNKK2NSLTAuNzIpKSxjSFtCSigweDU1NildPWtmLCEhW107fSxjdD0oKT0+e2NvbnN0IEJuPUJsLGtmPU1hdGhbQm4oMHg0M2MpXSgyLjIsTWF0aFtCbigweDQ1MSldKDEuMywoYzQtMC45Mi1jUSkqMC41NSkpLGtBPWN5LTAuMDgsa1o9a0Eta2Y7aWYoYzQ+PTMuOCYma1o+PWNRLTAuMiYmIWN4JiZjZihrWixjSiswLjEsa0EsTWF0aFtCbigweDQzYyldKGM1LTAuMSxjSitjUi0wLjEpLDAuNSkpe2NzKGtaLGNKKzAuMSxrQSxNYXRoW0JuKDB4NDNjKV0oYzUtMC4xLGNKK2NSLTAuMSkpO2NvbnN0IGtkPVtrQS0wLjQtMC4yNSxjSitjUi8weDJdO3JldHVybiBjOSsrLGNoKGtkWzB4MF0tMC4yNSxrZFsweDFdLTAuNSxrZFsweDBdKzAuMjUsa2RbMHgxXSswLjUpLGNtPWtaLGNIW0JuKDB4MjNkKV09ISFbXSwhIVtdO31pZihjeCl7Y29uc3Qga0M9Y3ktMC4wNS1rZjtpZihrQz49Y1EtMC4zJiZjZihrQyxjSiswLjEsY3ktMC4wNSxjSitjUi0weDEpKXtjcyhrQyxjSiswLjEsY3ktMC4wNSxjSitjUi0weDEpO2NvbnN0IGtUPVtjeS0wLjA1LTAuNC0wLjI1LGNKKyhjUi0wLjkpLzB4Ml07cmV0dXJuIGM5KyssY2goa1RbMHgwXS0wLjI1LGtUWzB4MV0tMC40NSxrVFsweDBdKzAuMjUsa1RbMHgxXSswLjQ1KSxjbT1rQyxjSFtCbigweDIzZCldPSEhW10sISFbXTt9fWNvbnN0IGtPPTAuNDUsa2U9TWF0aFtCbigweDQzYyldKDB4MSxNYXRoW0JuKDB4NDUxKV0oMC42LGNSLTAuNikpLGtCPWN5LTAuNC1rTyxrYj1jSisoY1Ita2UpLzB4MjtpZihrQj49Y1EtMC4wNSYmY0Moa0Isa2Isa0Ira08sa2Ira2UsKCk9PntjaChrQixrYixrQitrTyxrYitrZSksY2Moa0Isa2Ira2UvMHgyLGtCK2tPLGtiK2tlLzB4Mik7fSwwLjA1KSlyZXR1cm4gY209a0IsY0hbQm4oMHgyM2QpXT0hIVtdLCEhW107cmV0dXJuIGNtPWN5LCFbXTt9LGNEPSgpPT57Y29uc3QgQlI9Qmw7Zm9yKGNvbnN0IFtrZixrQV1vZltbY24rMC4yLGNKLTAuNV0sW2NuKzAuMixjSitjUiswLjA1XSxbY3ktMC41LGNKK2NSLTAuNDVdXSlpZihjQyhrZixrQSxrZiswLjQ1LGtBKzAuNDUsKCk9PntjaChrZixrQSxrZiswLjQ1LGtBKzAuNDUpLGNrKGtmKzAuMjI1LGtBKzAuMjI1LDAuMTQpO30sMC4wNSkpcmV0dXJuIGNIW0JSKDB4MjJjKV09ISFbXSwhIVtdO3JldHVybiFbXTt9LGNTPWNqPj0weDNjPzEuODpjaj49MHgxND8xLjQ6MS4yO2xldCBrMT1udWxsO2NvbnN0IGszPWNVLGs0PShrZixrQSxrWixrTyxrZSk9Pntjb25zdCBCeT1CbCxrQj1rMyhrZixrQSxrWixrTyxrZSk7aWYoa0IpazE9Y1BbY1BbQnkoMHg2NjEpXS0weDFdO3JldHVybiBrQjt9LGs1PShrZixrQSxrWik9Pntjb25zdCBCeD1CbDtpZihZWydub0RpbmUnXSlyZXR1cm4hW107aWYoa0Epe2lmKCFjS3x8Y1E8MHgxKXJldHVybiFbXTtjb25zdCBrZT1jUS0wLjMsa0I9TWF0aFtCeCgweDQzYyldKGM1LGNKKTtmb3IoY29uc3Qga2Igb2ZbMS4xLDAuOV0pe2lmKGtCLWtiPDAuMiljb250aW51ZTtjb25zdCBrZD1rWj9bMC4xXTpbKGtCLWtiKS8weDJdO2ZvcihsZXQga0M9MC4xO2tDPD1rQi1rYi0wLjErY1k7a0MrPTAuMilrZFtCeCgweDJiMyldKE1hdGhbQngoMHg0NzIpXShrQyoweDY0KS8weDY0KTtmb3IoY29uc3Qga1Qgb2Yga2QpaWYoazQoa2Usa1Qsa2UrMC42LGtUK2tiLCdyJykpcmV0dXJuISFbXTt9cmV0dXJuIVtdO31jb25zdCBrTz1bY1MsMS44LDEuNCwxLjJdW0J4KDB4MmE2KV0oKGtvLGthLGtzKT0+a288PWNTJiZrc1snaW5kZXhPZiddKGtvKT09PWthKTtpZigha2YpZm9yKGNvbnN0IGtvIG9mIGtPKXtjb25zdCBrYT1jSi0wLjIsa3M9YzQtY1EtMC4zO2lmKGthPj0xLjk1JiZrcz49a28pe2NvbnN0IGtFPWNRKyhjSyYma3M+PWtvKzEuOSYmYzU+PTIuNj8wLjA1Oihrcy1rbykvMHgyKSxrVT1NYXRoW0J4KDB4NDUxKV0oMC41NSxrYS8weDItMC40NSk7aWYoazQoa0Usa1Usa0Ura28sa1UrMC45KSlyZXR1cm4hIVtdO31jb25zdCBrVj1jbS0wLjYtY1E7aWYoa1Y+PTEuOCYmYzU+PWtvKzAuMil7Y29uc3Qga1g9Y1ErKGtWLTAuOSkvMHgyLGtXPShjNS1rbykvMHgyO2lmKGs0KGtYLGtXLGtYKzAuOSxrVytrbykpcmV0dXJuISFbXTt9fWZvcihjb25zdCBrRiBvZiBrTylmb3IoY29uc3Qga0cgb2ZbISFbXSwhW11dKXtjb25zdCBrTD1rRz9rRjowLjksa0s9a0c\/MC45OmtGLGtqPWtHPzB4MDowLjUsa0g9TWF0aFtCeCgweDQzYyldKGM1LGNKKS0wLjAyLWtLLShrRz8wLjU6MHgwKSxrUT1bXTtmb3IobGV0IGttPWtHPzAuNTU6MC4xO2ttPD1rSDtrbSs9MC4yNSlrUVtCeCgweDJiMyldKGttKTtpZihrSD49KGtHPzAuNTU6MC4xKSYmKCFrUVtCeCgweDY2MSldfHxrSC1rUVtrUVtCeCgweDY2MSldLTB4MV0+MC4wMSkpa1FbQngoMHgyYjMpXShrSCk7Zm9yKGNvbnN0IGtKIG9mIGtRKWZvcihjb25zdCBrbiBvZltjUSswLjA1K2tqLGNRKyhjNC1jUS0wLjMta0wpLzB4Ml0pe2lmKGtuLWtqPDAuMDJ8fGtuK2tMK2tqPmM0LTAuMDIpY29udGludWU7aWYoazQoa24sa0osa24ra0wsa0ora0spKXJldHVybiEhW107fX1mb3IoY29uc3Qga1Igb2ZbMS40LDEuMl0pe2lmKGtSPmNTKzAuMDEpY29udGludWU7aWYoYzQtY1E+PWtSKzAuNCYmY0o+PTEuNil7Y29uc3Qga3k9Y1ErMC4yLGt4PTAuMDY7aWYoazQoa3ksa3gsa3kra1Isa3grMC44LCEhW10pKXJldHVybiEhW107fWlmKGNtLWNRPj0xLjUmJmM1Pj1rUiswLjQpe2NvbnN0IGtnPWNRKzAuMDYsa3Q9KE1hdGhbQngoMHg0M2MpXShjNSxjSitjUikta1IpLzB4MjtpZihrNChrZyxrdCxrZyswLjgsa3Qra1IsISFbXSkpcmV0dXJuISFbXTt9fWlmKGNLJiZjND49Mi42KXtjb25zdCBrRD1NYXRoW0J4KDB4NDNjKV0oMS40LGM0LWNRLTAuMyk7aWYoa0Q+PTEuMSYmazQoY1ErMC4xLDAuMDYsY1ErMC4xK2tELDAuODYsISFbXSkpcmV0dXJuISFbXTt9aWYoY0smJmM1Pj0xLjYpe2NvbnN0IGtTPU1hdGhbQngoMHg0NTEpXSgwLjMsKE1hdGhbQngoMHg0M2MpXShjNSxjSiktMS4yKS8weDIpO2Zvcihjb25zdCBpMCBvZlswLjc1LDAuNl0pe2NvbnN0IGkxPWM0LTAuMDYtaTA7aWYoaTE+PWNRLShpMD4wLjc\/MC4xMjowLjM1KSYmazQoaTEsa1MsaTEraTAsa1MrMS4yLCEhW10pKXJldHVybiEhW107fX1yZXR1cm4hW107fSxrNj1rZj0+e2NvbnN0IEJnPUJsO2lmKCFjZyhrZikpcmV0dXJuIVtdO3JldHVybiBjdCgpfHxjRCgpLGNQW0JnKDB4MmIzKV0oW2N5LTAuOCxjSixjeSxjSitjUl0pLCEhW107fSxrNz1rZj0+e2NvbnN0IEJ0PUJsLGtBPWM1LTAuMDgsa1o9a0EtMC45MixrTz1jNC0wLjA4LGtlPWtPLWtmO2lmKGtlPChjSyYmIWNsPzAuNzIrMHgxOmNRKS0wLjAyfHwhY2Yoa2Usa1otMC42LGM0LTAuMDUsYzUtMC4wMywwLjIpKXJldHVybiFbXTtjUFtCdCgweDJiMyldKFtrZSxrWixjNCxjNV0sW2tlLGtaLTAuNixrTyxrWl0pLGM5KyssY0k9QnQoMHg1NTYpLGNoKGtlLGtaLGtPLGtBKSxjST1udWxsLGNoKGtlLGtaKzAuMixrZSswLjE0LGtBKSxjaChrTy0wLjE0LGtaKzAuMixrTyxrQSksY2goa2UrMC4xNCxrWiswLjA1LGtPLTAuMTQsa0EtMC4yMik7Y29uc3Qga0I9TWF0aFsnbWF4J10oMHgyLE1hdGhbQnQoMHg0NzIpXSgoa2YtMC4yOCkvMC43NSkpO2ZvcihsZXQga0M9MHgxO2tDPGtCO2tDKyspY2Moa2UrMC4xNCsoa2YtMC4yOCkqa0Mva0Isa1orMC4wNSxrZSswLjE0KyhrZi0wLjI4KSprQy9rQixrQS0wLjIyKTtjSFtCdCgweDU1NildPWtmO2NvbnN0IGtiPWtlLTAuNSxrZD1jNS0wLjUzO2lmKGNDKGtiLGtkLGtiKzAuNDUsa2QrMC40NSwoKT0+e2NoKGtiLGtkLGtiKzAuNDUsa2QrMC40NSksY2soa2IrMC4yMjUsa2QrMC4yMjUsMC4xNCk7fSwwLjA1KSljSFtCdCgweDIyYyldPSEhW107cmV0dXJuISFbXTt9LGs4PWNGKCk7bGV0IGs5PSFbXSxrST1NYXRoW0JsKDB4NDUxKV0oMS45LE1hdGhbQmwoMHg0M2MpXSgweDMsYzUqMC42MikpO2NvbnN0IGtyPShjND49MHgzfHxjbCYmYzQ+PTIuMykmJmM1Pj0yLjYsa2M9KCk9Pntjb25zdCBCRD1CbDtjRyhrOCksY1I9MHgwLGNKPWM1LGNuPWM0LGNtPWM0LGN5PWM0LGN4PSFbXSxjSFtCRCgweDU1NildPTB4MCxjSFtCRCgweDIzZCldPWNIW0JEKDB4MjJjKV09IVtdLGsxPW51bGw7fSxraz0oKT0+a3ImJihrNihrSSl8fGs2KDEuOSl8fGs2KDEuNikpO2lmKGNLKWs5PWs1KCFbXSksa3ImJiFraygpJiYoa2MoKSxrOT1rNSghIVtdKSwha2soKSYmKGtjKCksazk9azUoISFbXSwhIVtdKSwoIWs5fHwha2soKSkmJihrYygpLGs5PWs1KCEhW10sISFbXSwhIVtdKSwoIWs5fHwhKGs3KDEuOSl8fGs3KDEuNil8fGs3KDEuNSl8fGs3KDEuNCl8fGs3KDEuMykpKSYmKGtjKCksazk9azUoIVtdKSkpKSk7ZWxzZXtraygpLGs5PWs1KCFbXSk7aWYoIWs5JiZjUil7a2MoKSxrOT1rNSghIVtdKXx8azUoIVtdKTtpZihjNT49Mi40KWs2KDEuOSl8fGs2KDEuNik7fX1jSFtCbCgweDM5YyldPWs5O2NqPj0weGUmJihjYShjUSswLjEsMC4wNixNYXRoWydtaW4nXShjNC0wLjUsY1ErMS45KSwwLjQ2KSxjbyhjNC0wLjQyLDAuNSxjNC0wLjA2LE1hdGhbJ21pbiddKGNKLTAuMiwyLjYpKSk7aWYoY1ImJmNqPj0weDE2JiZjbS0wLjk+PWNRKWNYKGNtLTAuOSxjSitNYXRoW0JsKDB4NDUxKV0oMHgwLChjUi0wLjgpLzB4MiksJ3cnKTtpZihjaj49MHgxMCl7Zm9yKGNvbnN0IFtrZixrQV1vZltbMC4wOCxjNS0wLjVdLFtjNC0wLjUsMC4wOF0sW2NRLGM1LTAuNV1dKWlmKGNUKGtmLGtBKSlicmVhazt9YzZbQmwoMHgzYmUpXT1jSDt9O2lmKFlbJ2snXT09PSdiYXRoJyl7aWYoYzQ+PTEuNiYmYzU+PTEuNil7Y29uc3QgY0s9YzYsY2o9W107Zm9yKGNvbnN0IGNRIG9mWyEhW10sIVtdXSlmb3IoY29uc3QgY2wgb2ZbISFbXSwhW11dKWNqW0JXKDB4MmIzKV0oeydmYXInOmNRLCdsZWZ0JzpjbH0pO2NvbnN0IGNIPWNtPT57Y29uc3QgQlM9QlcsY0o9Y3k9PmNtW0JTKDB4MjA3KV0\/YzUtY3k6Y3ksY249Y21bQlMoMHg1MjkpXT8wLjM3OmM0LTAuMzcsY1I9Y21bJ2xlZnQnXT9jNC0wLjQ6MC40O2M5KyssY2goY24tMC4yNSxjSigwLjA0KSxjbiswLjI1LGNKKDAuMikpLGNrKGNuLGNKKDAuNDgpLDAuMTksMC4yNyksY2soY24sY0ooMC40NiksMC4xMywwLjE5KSxjOSsrLGNoKGNSLTAuMzIsY0ooMC4wNSksY1IrMC4zMixjSigwLjQ4KSksY2soY1IsY0ooMC4yNyksMC4yLDAuMTQpLGNrKGNSLGNKKDAuMjcpLDAuMDMpLGNjKGNSLGNKKDAuMDUpLGNSLGNKKDAuMTQpKTtpZihZW0JTKDB4NWVhKV0mJmM0Pj0yLjEmJmM1Pj0xLjcpe2NvbnN0IGN5PWNtW0JTKDB4NTI5KV0\/YzQtMC44NDowLjA2O2M5KyssY2goY3ksY0ooYzUtMC4wNiksY3krMC43OCxjSihjNS0xLjc2KSksY2goY3krMC4wOCxjSihjNS0wLjE0KSxjeSswLjcsY0ooYzUtMS42OCkpLGNrKGN5KzAuMzksY0ooYzUtMC4zMiksMC4wNSk7fWVsc2V7aWYoYzQ+PTB4MiYmYzU+PTIuMil7Y29uc3QgY3g9Y21bQlMoMHg1MjkpXT9jNC0xLjAyOjAuMDg7YzkrKyxjaChjeCxjSihjNS0wLjA4KSxjeCswLjk0LGNKKGM1LTEuMDIpKSxjaChjeCswLjA2LGNKKGM1LTAuMTQpLGN4KzAuODgsY0ooYzUtMC45NikpLGNrKGN4KzAuNDcsY0ooYzUtMC41NSksMC4wNSk7fX19O2NIKGNqWzB4MF0pLGNLW0JXKDB4Mzk5KV09KCk9PmNqWydzbGljZSddKDB4MSlbQlcoMHgzN2YpXShjbT0+e2NvbnN0IGNKPWM2O2M2PVtdLGNIKGNtKTtjb25zdCBjbj1jNjtyZXR1cm4gYzY9Y0osY247fSk7fX1lbHNle2lmKFlbJ2snXT09PUJXKDB4MjE0KSl7Y29uc3QgY209KGNnLGN0KT0+Y2c+PWN0KzB4MipjOD9jODpjZz49Y3QrMS4yPzAuNjotMHgxLGNKPWNnPT5jbShjZywxLjYyKSxjbj1jSihjNSksY1I9KGNnLGN0LGNELGNTKT0+IWN6KGNnLGN0LGNELGNTKTtpZihjbjwweDAmJiFZW0JXKDB4NjQ5KV0mJiFZWydjaGlsZCddJiZjSihjNCk+PTB4MCYmYzU+PTIuMylyZXR1cm4gSWcoey4uLlksJ3JvdCc6ISFbXX0sIWhELGhTKTtjb25zdCBjeT0oKT0+e2NvbnN0IGIwPUJXO2lmKGM0PDIuMnx8YzU8MS4yKXJldHVybiBudWxsO2Zvcihjb25zdCBjZyBvZlsweDAsYzUtMHgxXSlmb3IobGV0IGN0PTB4MDtjdDw9YzQtMi4xK2NZO2N0Kz0wLjEpaWYoY1IoY3QsY2csY3QrMi4xLGNnKzB4MSkpcmV0dXJuW01hdGhbYjAoMHg0NzIpXShjdCoweDY0KS8weDY0LGNnXTtyZXR1cm4gbnVsbDt9LGN4PWNnPT57Y29uc3QgYjE9QlcsW2N0LGNEXT1jZ3x8WzB4MCwweDBdO2NQW2IxKDB4MmIzKV0oW2N0LGNELGN0KzIuMSxjRCsweDFdKSxjOSsrLGNJPWIxKDB4MjE0KSxjaChjdCswLjA2LGNEKzAuMDYsY3QrMi4wNixjRCswLjk2KSxjST1udWxsLGNoKGN0KzAuMTIsY0QrMC4xMixjdCsweDIsY0QrMC45KSxjaChjdCswLjE4LGNEKzAuMTgsY3QrMC42NixjRCswLjg0KSxjYyhjdCswLjgyLGNEKzAuMTIsY3QrMC44MixjRCswLjkpLGNjKGN0KzEuNzIsY0QrMC45LGN0KzB4MixjRCswLjYyKSxjQyhjdCsyLjE0LGNEKzAuMDgsY3QrMi41OCxjRCswLjUyLCgpPT57Y2goY3QrMi4xNCxjRCswLjA4LGN0KzIuNTYsY0QrMC41KSxjayhjdCsyLjM1LGNEKzAuMjksMC4xMiksY2soY3QrMi4zNSxjRCswLjI5LDAuMDUpO30pO2NvbnN0IGNTPWszPT57Y29uc3QgYjI9YjEsazQ9azM\/YzQtMC42NjowLjA2LGs1PWszP2M0LTAuMDY6MC42NixrNj1NYXRoW2IyKDB4NDNjKV0oYzUtMC4wOCwyLjIpO3JldHVybiBjQyhrNCwwLjA4LGs1LGs2LCgpPT57Y0k9J3dhcmQnLGNoKGs0LDAuMDgsazUsazYpLGNJPW51bGwsY2MoazM\/azQrMC4zOms1LTAuMywwLjA4LGszP2s0KzAuMzprNS0wLjMsazYpO2ZvcihsZXQgazc9MC41ODtrNzxrNi0wLjE7azcrPTAuNSljYyhrNCxrNyxrNSxrNyk7fSxjOCk7fSxrMD0oY2JbJ3UwJ10\/MHgxOjB4MCkrKGNiWyd1MSddPzB4MToweDApKyhjYlsndjEnXT8weDE6MHgwKSxrMT0oY2JbJ3UxJ10mJiFjYlsndTAnXT9bIVtdLCEhW11dOlshIVtdLCFbXV0pW2IxKDB4MmE2KV0oazM9PiEoazM\/Y2JbJ3UxJ106Y2JbJ3UwJ10pfHxrMD49MHgyJiZjNS1NYXRoW2IxKDB4NDNjKV0oYzUtMC4wOCwyLjIpKzAuMDg+PTEuNik7bGV0IGsyPSFbXTtmb3IoY29uc3QgazMgb2YgazEpaWYoY1MoazMpKXtrMj0hIVtdO2JyZWFrO31pZighazIpe2NvbnN0IGs0PShrNSxrNixrNyxrOCk9PmNDKGs1LGs2LGs3LGs4LCgpPT57Y29uc3QgYjM9YjE7Y0k9YjMoMHgzZDkpLGNoKGs1LGs2LGs3LGs4KSxjST1udWxsO2lmKGs3LWs1Pj1rOC1rNil7Y2MoazUsKGs2K2s4KS8weDIsazcsKGs2K2s4KS8weDIpO2ZvcihsZXQgazk9azUrMC41O2s5PGs3LTAuMTtrOSs9MC41KWNjKGs5LGs2LGs5LGs4KTt9ZWxzZXtjYygoazUrazcpLzB4MixrNiwoazUrazcpLzB4MixrOCk7Zm9yKGxldCBrST1rNiswLjU7a0k8azgtMC4xO2tJKz0wLjUpY2MoazUsa0ksazcsa0kpO319LDAuNik7WTpmb3IoY29uc3QgazUgb2ZbISFbXSwhW11dW2IxKDB4MmE2KV0oazY9PiEoazY\/Y2JbJ3UxJ106Y2JbJ3UwJ10pfHxrMD49MHgyJiZjNS0xLjI+PTEuNikpZm9yKGxldCBrNj0wLjA4O2s2KzEuMjw9YzUtMC4wOCtjWTtrNis9MC4xKWlmKGs0KGs1P2M0LTAuNjY6MC4wNixrNixrNT9jNC0wLjA2OjAuNjYsazYrMS4yKSlicmVhayBZO31pZighY1coMC4xLGM1LTEuMSkpY1coTWF0aFtiMSgweDQ1MSldKDAuMSxjNC0yLjIpLGM1LTEuMSk7aWYoYzQ+PTB4MyljbyhNYXRoW2IxKDB4NDUxKV0oMC42LGM0LTIuNCksYzUtMC40MixjNC0wLjk1LGM1LTAuMDYpO3JldHVybiBjNjt9O2lmKChjbjwweDB8fFlbQlcoMHgzMWQpXSkmJmM0Pj0yLjImJmM1Pj0xLjIpcmV0dXJuIGN4KGN5KCkpO2lmKCFZW0JXKDB4NjQ5KV0mJmM0Pj0yLjMmJmM1Pj0yLjImJmM0LTIuODE8YzgmJmM1PDAuNjYrYzgrMS42OCYmKGM1LTIuODE+PWM4fHxjND49MC42NitjOCsxLjY4JiZjNT49Mi4xK2M4KzAuMSkpcmV0dXJuIElnKHsuLi5ZLCdyb3QnOiEhW119LCFoRCxoUyk7aWYoYzQ+PTIuMyYmYzU+PTIuMil7Y29uc3QgY2c9YzYsY3Q9azA9Pntjb25zdCBiND1CVyxrMT1jbShjNSxrMCk7aWYoazE8MHgwKXJldHVybltdO2NvbnN0IGsyPWsxLGszPWM1LWswLWsxO2xldCBrND1NYXRoW2I0KDB4NDNjKV0oazMsTWF0aFtiNCgweDQ1MSldKGsyLGM1LzB4Mi1rMC8weDIpKTtpZihjNC0yLjgxPGM4JiZrMz49MC42NitjOClrND1NYXRoW2I0KDB4NDUxKV0oazQsTWF0aFtiNCgweDQzYyldKGszLDAuNjYrYzgpKTtlbHNle2lmKGM0LTIuODE8YzgmJmM1LTAuNjYtYzgtazA+PWsyKWs0PU1hdGhbYjQoMHg0M2MpXShrNCxNYXRoW2I0KDB4NDUxKV0oazIsTWF0aFsncm91bmQnXSgoYzUtMC42Ni1jOC1rMCkqMHgxNCkvMHgxNCkpO31jb25zdCBrNT1bazQsazMsazJdO2ZvcihsZXQgazY9azI7azY8PWszK2NZO2s2Kz0wLjEpazVbYjQoMHgyYjMpXShNYXRoW2I0KDB4NDcyKV0oazYqMHg2NCkvMHg2NCk7cmV0dXJuIGs1WydmaWx0ZXInXSgoazcsazgsazkpPT5rNz49azItMC4wMSYmazc8PWszKzAuMDEmJms5W2I0KDB4NWFhKV0oa0k9Pk1hdGhbYjQoMHgzYWQpXShrSS1rNyk8MC4wNSk9PT1rOClbYjQoMHgzN2YpXShrNz0+KHsndic6azcsJ2J3JzprMCwnb2snOmNSKDAuMDYsazcsMi4xLGs3K2swKX0pKVsnc29ydCddKChrNyxrOCk9Pms4WydvayddLWs3WydvayddKTt9O2xldCBjRD1jdCgxLjYyKTtpZighY0RbQlcoMHg2NjEpXXx8IWNEWzB4MF1bJ29rJ10pe2NvbnN0IGswPWN0KDEuNDIpO2lmKGswW0JXKDB4NjYxKV0mJmswWzB4MF1bJ29rJ10pY0Q9azA7fWlmKCFjRFsnbGVuZ3RoJ118fCFjRFsweDBdWydvayddKXtjb25zdCBrMT1jeSgpO2lmKGsxfHwhY0RbQlcoMHg2NjEpXSlyZXR1cm4gY3goazEpO31jb25zdCBjUz0oe3Y6azIsYnc6azN9KT0+e2NvbnN0IGI1PUJXO2NQWydsZW5ndGgnXT0weDAsY1BbJ3B1c2gnXShbMHgwLGsyLDIuMTIsazIrazNdKSxjOSsrLGNJPWI1KDB4MjE0KSxjaCgwLjA2LGsyLDIuMSxrMitrMyksY0k9bnVsbCxjaCgwLjEyLGsyKzAuMDUsMi4wNSxrMitrMy0wLjA1KSxjaCgwLjE4LGsyKzAuMTIsMC42NixrMitrMy8weDItMC4wNSksY2goMC4xOCxrMitrMy8weDIrMC4wNSwwLjY2LGsyK2szLTAuMTIpLGNjKDAuODIsazIrMC4wNSwwLjgyLGsyK2szLTAuMDUpLGNjKDEuNzIsazIrazMtMC4wNSwyLjA1LGsyK2szLTAuMzgpO2Zvcihjb25zdCBrNyBvZltrMi0wLjUsazIrazMrMC4wNF0pY0MoMC4wOCxrNywwLjUyLGs3KzAuNDQsKCk9PntjaCgwLjA4LGs3LDAuNSxrNyswLjQyKSxjaygwLjI5LGs3KzAuMjEsMC4xMiksY2soMC4yOSxrNyswLjIxLDAuMDUpO30pO2NvbnN0IGs0PShrOCxrOSxrSSxrcixrYyk9PmNDKGs4LGs5LGtJLGtyLCgpPT57Y29uc3QgYjY9YjU7Y0k9YjYoMHgzZDkpLGNoKGs4LGs5LGtJLGtyKSxjST1udWxsO2lmKGtJLWs4Pj1rci1rOSl7Y2MoazgsKGs5K2tyKS8weDIsa0ksKGs5K2tyKS8weDIpO2ZvcihsZXQga2s9azgrMC41O2trPGtJLTAuMTtrays9MC41KWNjKGtrLGs5LGtrLGtyKTt9ZWxzZXtjYygoazgra0kpLzB4MixrOSwoazgra0kpLzB4Mixrcik7Zm9yKGxldCBraT1rOSswLjU7a2k8a3ItMC4xO2tpKz0wLjUpY2Moazgsa2ksa0ksa2kpO319LGtjKSxrNT0oY2JbJ3UwJ10\/MHgxOjB4MCkrKGNiWyd1MSddPzB4MToweDApKyhjYlsndjEnXT8weDE6MHgwKSxrNj0oazgsazksa0kpPT57aWYoKGs4PT09J3UxJyYmY2JbJ3UxJ118fGs4PT09J3UwJyYmY2JbJ3UwJ10pJiYoazU8MHgyfHxjNS1rOTwxLjYpKXJldHVybiFbXTtpZihrOD09PSd2MScmJmNiWyd2MSddJiYoazU8MHgyfHxjNC1rOTwxLjYpKXJldHVybiFbXTtpZihrOD09PSd1MScpe2ZvcihsZXQga3I9MC4wODtrcitrOTw9YzUtMC4wOCtjWTtrcis9MC4xKWlmKGs0KGM0LTAuNjYsa3IsYzQtMC4wNixrcitrOSxrSSkpcmV0dXJuISFbXTt9ZWxzZXtpZihrOD09PSd2MCcpe2ZvcihsZXQga2M9MC41NTtrYytrOTw9YzQtMC4wNitjWTtrYys9MC4xKWlmKGs0KGtjLDAuMDYsa2MrazksMC42NixrSSkpcmV0dXJuISFbXTt9ZWxzZXtpZihrOD09PSd2MScpe2ZvcihsZXQga2s9MC41NTtraytrOTw9YzQtMC4wNitjWTtrays9MC4xKWlmKGs0KGtrLGM1LTAuNjYsa2srazksYzUtMC4wNixrSSkpcmV0dXJuISFbXTt9ZWxzZXtpZihrOD09PSd1MCcpe2ZvcihsZXQga2k9MC41NTtraStrOTw9YzUtMC4wOCtjWTtraSs9MC4xKWlmKGs0KDAuMDYsa2ksMC42NixraStrOSxrSSkpcmV0dXJuISFbXTt9fX19cmV0dXJuIVtdO307e2NvbnN0IGs4PVsuLi5jYlsndTEnXT9bXTpbJ3UxJ10sJ3YwJywuLi5jYlsndTAnXT9bXTpbJ3UwJ10sLi4uY2JbJ3YxJ10\/W106Wyd2MSddLC4uLmNiWyd1MSddP1sndTEnXTpbXSwuLi5jYlsndTAnXT9bJ3UwJ106W10sLi4uY2JbJ3YxJ10\/Wyd2MSddOltdXTtsZXQgazk9IVtdO2Zvcihjb25zdCBrSSBvZiBrOCl7Zm9yKGNvbnN0IGtyIG9mW2M4LDAuNl0pe2Zvcihjb25zdCBrYyBvZlsxLjgsMS41LDEuMl0paWYoazYoa0ksa2Msa3IpKXtrOT0hIVtdO2JyZWFrO31pZihrOSlicmVhazt9aWYoazkpYnJlYWs7fX1pZihjND49My42KXtjb25zdCBraz1jNC0wLjc1LGtpPTIuMjU7aWYoa2sta2k+PTB4MSljcyhraSxrMiswLjE1LGtrLGsyK2szLTAuMTUpO31pZihjNCpjNT49MHhlKWNXKE1hdGhbYjUoMHg0NTEpXSgwLjYsYzQtMi4yKSxjNS0xLjEpO2NvKDAuNixjNS0wLjQyLE1hdGhbYjUoMHg0M2MpXShjNC0wLjgsMi4yKSxjNS0wLjA2KTt9O2NTKGNEWzB4MF0pLGNnW0JXKDB4Mzk5KV09KCk9PmNEWydzbGljZSddKDB4MSlbQlcoMHgzN2YpXShrMj0+e2NvbnN0IGszPWM2O2M2PVtdLGNTKGsyKTtjb25zdCBrND1jNjtyZXR1cm4gYzY9azMsazQ7fSk7fX1lbHNle2lmKFlbJ2snXT09PSd3Yycpe2lmKGM0Pj0wLjkmJmM1Pj0weDEpe2NvbnN0IGsyPWM2LGszPShrNyxrOCk9Pms3WzB4MF08azhbMHgyXSswLjEyJiZrOFsweDBdPGs3WzB4Ml0rMC4xMiYmazdbMHgxXTxrOFsweDNdKzAuMDUmJms4WzB4MV08azdbMHgzXSswLjA1LGs0PVtdLGs1PShrNyxrOCk9PntjOSsrLGs4PyhjaChrNy0wLjIsYzUtMC4yMixrNyswLjIsYzUtMC4wNSksY2soazcsYzUtMC41LDAuMTgsMC4yNiksY2soazcsYzUtMC40OCwwLjEyLDAuMTgpKTooY2goazctMC4yLDAuMDUsazcrMC4yLDAuMjIpLGNrKGs3LDAuNSwwLjE4LDAuMjYpLGNrKGs3LDAuNDgsMC4xMiwwLjE4KSk7fSxrNj1rNz0+e2NvbnN0IGI3PUJXO2s1KGs3Wyd0dSddLGs3WydmYXInXSksYzkrKztpZihrN1tiNygweDM2OCldKXtjb25zdCBrOD1rN1tiNygweDIwNyldPzAuMDY6YzUtMC4zNDtjaChjNC8weDItMC4yNSxrOCxjNC8weDIrMC4yNSxrOCswLjI4KSxjayhjNC8weDIsazgrMC4xNCwwLjE3LDAuMSk7fWVsc2V7Y29uc3Qgazk9azdbYjcoMHg1MjkpXT8wLjA1OmM0LTAuMzU7Y2goazksazdbJ3ZjJ10tMC4yMyxrOSswLjMsazdbJ3ZjJ10rMC4yMyksY2soazkrMC4xNSxrN1sndmMnXSwwLjEsMC4xNik7fX07Zm9yKGNvbnN0IGs3IG9mWyFbXSwhIVtdXSlmb3IoY29uc3Qgazggb2YgYzQ+PTEuMj9bYzQvMHgyLDAuMzQsYzQtMC4zNF06W2M0LzB4Ml0pe2NvbnN0IGs5PVtrOC0wLjIsazc\/YzUtMC43NjowLjA1LGs4KzAuMixrNz9jNS0wLjA1OjAuNzZdO2lmKGM1Pj0xLjYpazRbQlcoMHgyYjMpXSh7J3R1JzprOCwnZmFyJzprNywnd2FsbCc6ISFbXX0pO2Zvcihjb25zdCBrSSBvZlshIVtdLCFbXV0pZm9yKGNvbnN0IGtyIG9mW2M1LzB4MixjNS0wLjMsMC4zXSlpZihrcj49MC4yNSYma3I8PWM1LTAuMjUmJiFrMyhrOSxba0k\/MC4wNTpjNC0wLjM1LGtyLTAuMjMsa0k\/MC4zNTpjNC0wLjA1LGtyKzAuMjNdKSlrNFtCVygweDJiMyldKHsndHUnOms4LCdmYXInOms3LCdsZWZ0JzprSSwndmMnOmtyfSk7fWs0W0JXKDB4NjYxKV0mJihrNihrNFsweDBdKSxrMltCVygweDM5OSldPSgpPT5rNFsnc2xpY2UnXSgweDEpW0JXKDB4MzdmKV0oa2M9Pntjb25zdCBraz1jNjtjNj1bXSxrNihrYyk7Y29uc3Qga2k9YzY7cmV0dXJuIGM2PWtrLGtpO30pKTt9fWVsc2V7aWYoWVsnayddPT09QlcoMHg1ZmQpJiYhWVtCVygweDQyNildJiYhWVsnbm9UYWJsZSddJiYhWVtCVygweDVhNildJiZjNCpjNT49KFlbQlcoMHgyNDgpXT80LjU6MHg4KSYmTWF0aFtCVygweDQzYyldKGM0LGM1KT49MHgyKXtjb25zdCBrYz1jNCpjNT49MHhlPzIuNDpjNCpjNT49MHg4PzEuODoxLjIsa2s9YzQ+PWM1O2lmKGtrKXtpZighY1UoKGM0LWtjKS8weDIsYzUvMHgyLTAuNDUsKGM0K2tjKS8weDIsYzUvMHgyKzAuNDUpKWNVKChjNC0xLjIpLzB4MixjNS8weDItMC40NSwoYzQrMS4yKS8weDIsYzUvMHgyKzAuNDUpO31lbHNle2lmKCFjVShjNC8weDItMC40NSwoYzUta2MpLzB4MixjNC8weDIrMC40NSwoYzUra2MpLzB4MikpY1UoYzQvMHgyLTAuNDUsKGM1LTEuMikvMHgyLGM0LzB4MiswLjQ1LChjNSsxLjIpLzB4Mik7fWNvbnN0IGtpPShrTixrdixrdSxrWSk9PmNDKGtOLGt2LGt1LGtZLCgpPT57Y2goa04sa3Ysa3Usa1kpO2lmKGt1LWtOPj1rWS1rdiljYygoa04ra3UpLzB4Mixrdiwoa04ra3UpLzB4MixrWSk7ZWxzZSBjYyhrTiwoa3Yra1kpLzB4MixrdSwoa3Yra1kpLzB4Mik7fSwwLjMpO2lmKGtrKWtpKDAuMSwwLjA2LE1hdGhbQlcoMHg0M2MpXShjNC0wLjIsMS43KSwwLjQ2KXx8a2koMC4xLGM1LTAuNDYsTWF0aFtCVygweDQzYyldKGM0LTAuMiwxLjcpLGM1LTAuMDYpO2Vsc2Uga2koMC4wNiwwLjEsMC40NixNYXRoW0JXKDB4NDNjKV0oYzUtMC4yLDEuNykpfHxraShjNC0wLjQ2LDAuMSxjNC0wLjA2LE1hdGhbQlcoMHg0M2MpXShjNS0wLjIsMS43KSk7fWVsc2V7aWYoWVsnayddPT09J25vb2snJiYhWVtCVygweDQyNildJiYhWVtCVygweDVhNildJiZjNCpjNT49My41JiZNYXRoWydtaW4nXShjNCxjNSk+PTEuMyl7aWYoIWNXKDAuMDgsMC4wOCkpe2lmKGM0Pj1jNSljYSgwLjA4LDAuMDYsTWF0aFtCVygweDQzYyldKGM0LTAuMSwweDIpLDAuNDYpO2Vsc2UgY2EoMC4wNiwwLjA4LDAuNDYsTWF0aFtCVygweDQzYyldKGM1LTAuMSwweDIpKTt9aWYoYzQ+PWM1KWNvKE1hdGhbQlcoMHg0NTEpXSgxLjYsYzQtMS42KSxjNS0wLjQyLGM0LTAuMDYsYzUtMC4wNik7ZWxzZSBjbyhjNC0wLjQyLE1hdGhbJ21heCddKDEuMyxjNS0xLjYpLGM0LTAuMDYsYzUtMC4wNik7aWYoYzQqYzU+PTB4OCYmY1goYzQtMC45LGM1LTAuOSwnaGknKSljVChjNC0xLjQsYzUtMC41KTt9ZWxzZXtpZihZWydrJ109PT1CVygweDYzMykpe2NvbnN0IGtOPWM0Pj1jNSxrdj1rTj9jNDpjNTtpZihrdj49MS40JiZNYXRoW0JXKDB4NDNjKV0oYzQsYzUpPj0weDEpe2NvbnN0IGt1PU1hdGhbQlcoMHg0M2MpXSgxLjIsa3YtMC40KSxrWT0oa3Yta3UpLzB4MixrTT0oa3osa1Asa2Ysa0EpPT5jQyhreixrUCxrZixrQSwoKT0+e2NoKGt6LGtQLGtmLGtBKTtpZihrZi1rej49a0Eta1Ape2NjKGt6LChrUCtrQSkvMHgyLGtmLChrUCtrQSkvMHgyKTtmb3IobGV0IGtwPWt6KzAuMjtrcDxrZi0wLjE7a3ArPTAuMyljayhrcCwoa1Ara0EpLzB4MiwwLjAzKTt9ZWxzZXtjYygoa3ora2YpLzB4MixrUCwoa3ora2YpLzB4MixrQSk7Zm9yKGxldCBrWj1rUCswLjI7a1o8a0EtMC4xO2taKz0wLjMpY2soKGt6K2tmKS8weDIsa1osMC4wMyk7fX0sMC4wNSksa3E9KGt6LGtQLGtmLGtBKT0+Y0Moa3osa1Asa2Ysa0EsKCk9PntjaChreixrUCxrZixrQSksY2goa3orMC4wNCxrUCswLjA0LGtmLTAuMDQsa0EtMC4wNCk7fSwwLjA1KTtpZihrTil7Y29uc3Qga3o9a00oa1ksMC4wNixrWStrdSwwLjQ0KT8wLjA2OmtNKGtZLGM1LTAuNDQsa1kra3UsYzUtMC4wNik\/YzUtMC40NDotMHgxO2lmKGt6Pj0weDAmJmt2Pj0yLjgpa3Eoa1kra3UrMC4xLGt6KzAuMDIsa1kra3UrMC45LGt6KzAuMzYpfHxrcShrWS0wLjksa3orMC4wMixrWS0wLjEsa3orMC4zNik7fWVsc2V7Y29uc3Qga1A9a00oMC4wNixrWSwwLjQ0LGtZK2t1KT8wLjA2OmtNKGM0LTAuNDQsa1ksYzQtMC4wNixrWStrdSk\/YzQtMC40NDotMHgxO2lmKGtQPj0weDAmJmt2Pj0yLjgpa3Eoa1ArMC4wMixrWStrdSswLjEsa1ArMC4zNixrWStrdSswLjkpfHxrcShrUCswLjAyLGtZLTAuOSxrUCswLjM2LGtZLTAuMSk7fX19ZWxzZXtpZihZWydrJ109PT1CVygweDI0Mil8fFlbJ2snXT09PSdub29rJyYmIVlbQlcoMHg0MjYpXSl7Y29uc3Qga2Y9YzQqYzUsa0E9YzQ+PWM1O2lmKGtmPj0weDYmJk1hdGhbJ21pbiddKGM0LGM1KT49MS45KXtjaCgwLjA4LDAuMDgsMS40OCwwLjc4KSxjaCgwLjE0LDAuMTQsMC41NiwwLjUpLGNrKDAuNzgsMS4wNCwwLjIyKSxjaygwLjc4LDEuMDQsMC4wOSk7aWYoYzU+PTIuMil7Y2goYzQtMC40MiwwLjA4LGM0LTAuMDYsTWF0aFtCVygweDQzYyldKGM1LTAuMSwyLjEpKTtmb3IobGV0IGtwPTAuNDU7a3A8TWF0aFtCVygweDQzYyldKGM1LTAuMSwyLjEpO2twKz0wLjQpY2MoYzQtMC40MixrcCxjNC0wLjA2LGtwKTt9fWVsc2V7aWYoa2Y+PTIuMiYmTWF0aFtCVygweDQzYyldKGM0LGM1KT49MHgxKXtjaCgwLjA4LDAuMDgsMC42OCwwLjY4KSxjaygwLjM4LDAuMzgsMC4yMiksY2soMC4zOCwwLjM4LDAuMTMpO2lmKGtBJiZjND49MS41KWNoKDAuNzIsMC4wOCwxLjMyLDAuNjgpLGNrKDEuMDIsMC4zOCwwLjIyKTtlbHNlIWtBJiZjNT49MS41JiYoY2goMC4wOCwwLjcyLDAuNjgsMS4zMiksY2soMC4zOCwxLjAyLDAuMjIpKTt9ZWxzZXtpZihNYXRoW0JXKDB4NDUxKV0oYzQsYzUpPj0wLjkpe2lmKGtBKXtjaCgwLjA2LDAuMDYsYzQtMC4wNiwwLjQ2KTtmb3IobGV0IGtaPTAuNDU7a1o8YzQtMC4xO2taKz0wLjQpY2Moa1osMC4wNixrWiwwLjQ2KTt9ZWxzZXtjaCgwLjA2LDAuMDYsMC40NixjNS0wLjA2KTtmb3IobGV0IGtPPTAuNDU7a088YzUtMC4xO2tPKz0wLjQpY2MoMC4wNixrTywwLjQ2LGtPKTt9fX19fWVsc2V7aWYoWVsnayddPT09QlcoMHg2MzMpJiZNYXRoWydtYXgnXShjNCxjNSk+PTIuMiYmTWF0aFtCVygweDQzYyldKGM0LGM1KT49MS41KXtjb25zdCBrZT0oa0Isa2Isa2Qsa0MpPT57Y2goa0Isa2Isa2Qsa0MpO2lmKGtkLWtCPj1rQy1rYil7Y2Moa0IsKGtiK2tDKS8weDIsa2QsKGtiK2tDKS8weDIpO2ZvcihsZXQga1Q9a0IrMC41O2tUPGtkLTAuMTtrVCs9MC41KWNjKGtULGtiLGtULGtDKTt9ZWxzZXtjYygoa0Ira2QpLzB4MixrYiwoa0Ira2QpLzB4MixrQyk7Zm9yKGxldCBrbz1rYiswLjU7a288a0MtMC4xO2tvKz0wLjUpY2Moa0Isa28sa2Qsa28pO319O2lmKGM0Pj1jNSlrZSgwLjQsMC4wNixNYXRoW0JXKDB4NDNjKV0oYzQtMC4zLDEuOSksMC42NCk7ZWxzZSBrZSgwLjA2LGM1LTEuNSwwLjY0LGM1LTAuMSk7fWVsc2V7aWYoKFlbJ2snXT09PUJXKDB4NWZkKXx8WVsnayddPT09QlcoMHgzNzApKSYmWVtCVygweDQyNildKXtjb25zdCBrQj1NYXRoW0JXKDB4NDNjKV0oYzQtMC4wOCwzLjYpO2NJPUJXKDB4NDI2KSxjaCgwLjA2LDAuMDYsa0IsMC42OCksY0k9bnVsbCxjYygwLjA2LDAuMTIsa0IsMC4xMik7a0I+PTEuNSYmY2goMC4xLDAuMSwwLjcyLDAuNjQpO2tCPj0weDImJihjaCgwLjkyLDAuMTUsMS40NiwwLjYpLGNoKDAuOTgsMC4yMSwxLjQsMC41NCksY2soMS4xOSwwLjM3LDAuMDQpKTtpZihrQj49Mi44KXtjaCgxLjcyLDAuMTIsMi4zLDAuNjQpO2Zvcihjb25zdCBba2Isa2Rdb2ZbWzEuODgsMC4yNl0sWzIuMTQsMC4yNl0sWzEuODgsMC41XSxbMi4xNCwwLjVdXSl7Y2soa2Isa2QsMC4wOSksY2soa2Isa2QsMC4wNCk7fX19ZWxzZXtpZihZWydrJ109PT1CVygweDI1OCkpe2lmKGM0Pj0xLjgmJmM1Pj0xLjgmJllbQlcoMHg1ZTYpXT09PUJXKDB4MzljKSl7Y29uc3Qga0M9YzQqYzU+PTB4OT8xLjg6MS40O2lmKCFjVSgoYzQta0MpLzB4MixjNS8weDItMC40NSwoYzQra0MpLzB4MixjNS8weDIrMC40NSkpY1UoKGM0LTEuMikvMHgyLGM1LzB4Mi0wLjQ1LChjNCsxLjIpLzB4MixjNS8weDIrMC40NSk7Y2EoMC4zLDAuMDYsTWF0aFtCVygweDQzYyldKGM0LTAuMywyLjEpLDAuNDYpLGNUKGM0LTAuNSxjNS0wLjUpO31lbHNle2lmKGM0Pj0yLjQmJmM1Pj0yLjYmJmM0KmM1Pj0weDcpY1coTWF0aFtCVygweDQ1MSldKDAuMTUsYzQtMS42KSxjNS0xLjE1KSxjbygwLjEsMC4wNixNYXRoW0JXKDB4NDNjKV0oYzQtMC4yNSwxLjcpLDAuNDIpLGNYKDAuMTUsYzUtMHgxLCdoaScpLGNUKGM0LTAuNSwwLjEpO2Vsc2V7aWYoYzQ+PTEuOCYmYzU+PTEuOCl7Y29uc3Qga1Q9TWF0aFtCVygweDQzYyldKGM0LTAuMywyLjgpLGtvPU1hdGhbQlcoMHg0M2MpXShjNS0wLjMsMi40KSxrYT1NYXRoWydtYXgnXSgwLjE1LChjNC1rVCkvMHgyKSxrcz1NYXRoW0JXKDB4NDUxKV0oMC4xNSxjNS0wLjIta28pO2NzKGthLGtzLGthK2tULGtzK2tvKTtjb25zdCBrVj1rYSswLjEsa0U9a3Mra28tMC45O2M5KyssY2goa1Ysa0Usa1YrMC44LGtFKzAuOCksY2goa1YrMC4xMixrRSswLjEyLGtWKzAuNjgsa0UrMC42OCksY2goa1YrMC4xMixrRSswLjY0LGtWKzAuNjgsa0UrMC44KSxjOSsrLGNrKGtWKzEuMixrRSswLjQsMC4yNSksY2soa1YrMS4yLGtFKzAuNCwwLjE5KSxrbz49MS45JiYoYzkrKyxjaChrViswLjE1LGtFLTAuNzUsa1YrMC42NSxrRS0wLjI1KSxjayhrViswLjQsa0UtMC41LDAuMTcpKSxrVD49Mi4yJiYoYzkrKyxjaChrYStrVC0wLjUsa3MrMC4wNSxrYStrVC0wLjA4LGtzKzAuNDcpLGNoKGthK2tULTAuNDUsa3MrMC4xLGthK2tULTAuMTMsa3MrMC40MikpO319fX1lbHNle2lmKFlbJ2snXT09PSdsaXZlJyYmWVsna2l0T25seSddKXtpZihjND49MHgyJiZjNT49MHgyKXtZWydub0RpbmUnXT0hIVtdO2NvbnN0IGtVPWNMKCEhW10pO2lmKGtVJiZrVVtCVygweDUxNSldKXJldHVybiBrVVtCVygweDUxNSldO319ZWxzZXtpZihZWydrJ109PT0nbGl2ZScmJmM0Pj0weDImJmM1Pj0weDIpe2NvbnN0IGtYPWNMKFlbQlcoMHg0MjYpXSE9PSFbXSk7aWYoa1gmJmtYW0JXKDB4NTE1KV0pcmV0dXJuIGtYWydtaXInXTt9fX19fX19fX19fX1yZXR1cm4gYzY7fWZ1bmN0aW9uIEl0KCl7Y29uc3QgYjg9ZUosWT1uZXcgSW50MTZBcnJheShYKkYpWydmaWxsJ10oRyksaEQ9KGtaLGtPKT0+a08qWCtrWjtsZXQgaFM9MHgwO2ZvcihsZXQga1o9MHgwO2taPEY7a1orKylmb3IobGV0IGtPPTB4MDtrTzxYO2tPKyspSVcoKGtPKzAuNSkqVSwoa1orMC41KSpVKSYmKFlbaEQoa08sa1opXT1qLGhTKyspO2Zvcihjb25zdCBrZSBvZiBJOClmb3IobGV0IGtCPU1hdGhbYjgoMHg0NzIpXShrZVsweDFdL1UpO2tCPE1hdGhbYjgoMHg0NzIpXShrZVsweDNdL1UpO2tCKyspZm9yKGxldCBrYj1NYXRoW2I4KDB4NDcyKV0oa2VbMHgwXS9VKTtrYjxNYXRoW2I4KDB4NDcyKV0oa2VbMHgyXS9VKTtrYisrKWlmKGtiPj0weDAmJmtCPj0weDAmJmtiPFgmJmtCPEYmJllbaEQoa2Isa0IpXT09PWopWVtoRChrYixrQildPW47Y29uc3QgYzE9bmV3IEludDE2QXJyYXkoWCpGKVtiOCgweDM2ZildKDB4MjcwZiksYzI9bmV3IEludDMyQXJyYXkoWCpGKTtsZXQgYzM9MHgwLGM0PTB4MDtmb3IobGV0IGtkPTB4MDtrZDxGO2tkKyspZm9yKGxldCBrQz0weDA7a0M8WDtrQysrKXtjb25zdCBrVD1oRChrQyxrZCk7WVtrVF09PT1HJiYoYzFba1RdPTB4MCxjMltjNCsrXT1rVCk7fXdoaWxlKGMzPGM0KXtjb25zdCBrbz1jMltjMysrXSxrYT1rbyVYLGtzPShrby1rYSkvWDtmb3IoY29uc3QgW2tWLGtFXW9mW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXSl7Y29uc3Qga1U9a2Era1Ysa1g9a3Mra0U7aWYoa1U8MHgwfHxrWDwweDB8fGtVPj1YfHxrWD49Riljb250aW51ZTtjb25zdCBrVz1oRChrVSxrWCk7YzFba1ddPmMxW2tvXSsweDEmJihjMVtrV109YzFba29dKzB4MSxjMltjNCsrXT1rVyk7fX1jb25zdCBjNT1uZXcgRmxvYXQzMkFycmF5KFgqRilbJ2ZpbGwnXSgweDNiOWFjYTAwKSxjNj1uZXcgSW50MzJBcnJheShYKkYpWydmaWxsJ10oLTB4MSksYzc9W10sYzg9KGtGLGtHKT0+e2NvbnN0IGI5PWI4O2M3W2I5KDB4MmIzKV0oW2tGLGtHXSk7bGV0IGtLPWM3WydsZW5ndGgnXS0weDE7d2hpbGUoa0s+MHgwKXtjb25zdCBraj1rSy0weDE+PjB4MTtpZihjN1tral1bMHgwXTw9Yzdba0tdWzB4MF0pYnJlYWs7W2M3W2tqXSxjN1trS11dPVtjN1trS10sYzdba2pdXSxrSz1rajt9fSxjOT0oKT0+e2NvbnN0IGJJPWI4LGtGPWM3WzB4MF0sa0c9YzdbJ3BvcCddKCk7aWYoYzdbYkkoMHg2NjEpXSl7YzdbMHgwXT1rRztsZXQga0s9MHgwO2Zvcig7Oyl7bGV0IGtqPWtLO2NvbnN0IGtIPTB4MiprSysweDEsa1E9a0grMHgxO2lmKGtIPGM3W2JJKDB4NjYxKV0mJmM3W2tIXVsweDBdPGM3W2tqXVsweDBdKWtqPWtIO2lmKGtRPGM3W2JJKDB4NjYxKV0mJmM3W2tRXVsweDBdPGM3W2tqXVsweDBdKWtqPWtRO2lmKGtqPT09a0spYnJlYWs7W2M3W2tqXSxjN1trS11dPVtjN1trS10sYzdba2pdXSxrSz1rajt9fXJldHVybiBrRjt9LGNJPWtGPT57Y29uc3QgYnI9Yjg7Zm9yKGNvbnN0IGtHIG9mIGtGKXtjNVtrR109MHgwLGM4KDB4MCxrRyk7fXdoaWxlKGM3W2JyKDB4NjYxKV0pe2NvbnN0IFtrSyxral09YzkoKTtpZihrSz5jNVtral0pY29udGludWU7Y29uc3Qga0g9a2olWCxrUT0oa2ota0gpL1g7Zm9yKGNvbnN0IFtrbCxrbV1vZltbMHgxLDB4MF0sWy0weDEsMHgwXSxbMHgwLDB4MV0sWzB4MCwtMHgxXV0pe2NvbnN0IGtKPWtIK2tsLGtuPWtRK2ttO2lmKGtKPDB4MHx8a248MHgwfHxrSj49WHx8a24+PUYpY29udGludWU7Y29uc3Qga3k9aEQoa0osa24pO2lmKFlba3ldPT09R3x8WVtreV09PT1uKWNvbnRpbnVlO2NvbnN0IGt4PWtLKzB4MStNYXRoW2JyKDB4NDUxKV0oMHgwLDB4Yy1jMVtreV0pKjAuOSsoYzZba2pdPj0weDAmJmtqLWM2W2tqXSE9PWt5LWtqPzEuNToweDApO2t4PGM1W2t5XSYmKGM1W2t5XT1reCxjNltreV09a2osYzgoa3gsa3kpKTt9fX0sY3I9bmV3IFVpbnQ4QXJyYXkoWCpGKSxjYz1JQVsnbGVuZ3RoJ10sY2s9a0Y9Pntjb25zdCBrRz1JQVsoa0YtMHgxK2NjKSVjY10sa0s9SUFba0ZdLGtqPUlBWyhrRisweDEpJWNjXSxrSD0oa0tbMHgwXS1rR1sweDBdKSooa2pbMHgxXS1rS1sweDFdKS0oa0tbMHgxXS1rR1sweDFdKSooa2pbMHgwXS1rS1sweDBdKTtyZXR1cm4ga0g+MHgwPT09SVgoKTt9LGNOPUlaWydmaWx0ZXInXShrRj0+e2NvbnN0IGJoPWI4LGtHPWhEKE1hdGhbYmgoMHg0M2MpXShYLTB4MSxNYXRoWydmbG9vciddKGtGWyd4J10vVSkpLE1hdGhbYmgoMHg0M2MpXShGLTB4MSxNYXRoW2JoKDB4NTNiKV0oa0ZbJ3knXS9VKSkpO3JldHVybiBZW2tHXSE9PUc7fSk7bGV0IGN1PSFbXSxjWT1udWxsO2NvbnN0IGNNPW5ldyBVaW50OEFycmF5KFgqRik7e2NvbnN0IGtGPW5ldyBJbnQxNkFycmF5KFgqRilbYjgoMHgzNmYpXSgweDI3MGYpLGtHPW5ldyBJbnQzMkFycmF5KFgqRik7bGV0IGtLPTB4MCxraj0weDA7Zm9yKGxldCBrbT0weDA7a208WVtiOCgweDY2MSldO2ttKyspWVtrbV09PT1HJiYoa0Zba21dPTB4MCxrR1traisrXT1rbSk7d2hpbGUoa0s8a2ope2NvbnN0IGtKPWtHW2tLKytdLGtuPWtKJVgsa3k9KGtKLWtuKS9YO2ZvcihsZXQga3g9LTB4MTtreDw9MHgxO2t4KyspZm9yKGxldCBrZz0tMHgxO2tnPD0weDE7a2crKyl7Y29uc3Qga3Q9a24ra2csa0Q9a3kra3g7aWYoa3Q8MHgwfHxrRDwweDB8fGt0Pj1YfHxrRD49Riljb250aW51ZTtjb25zdCBrUz1oRChrdCxrRCk7a0Zba1NdPmtGW2tKXSsweDEmJihrRltrU109a0Zba0pdKzB4MSxrR1traisrXT1rUyk7fX1jb25zdCBrSD1NYXRoW2I4KDB4NDcyKV0oKDYuNStJN1tiOCgweDU5MCldLzB4MikvVSksa1E9bmV3IFVpbnQ4QXJyYXkoWCpGKTtsZXQga2w9bnVsbDtmb3IobGV0IGkwPTB4MDtpMDxZW2I4KDB4NjYxKV07aTArKyl7aWYoa1FbaTBdfHxrRltpMF08a0h8fFlbaTBdPT09Ryljb250aW51ZTtjb25zdCBpMT1baTBdO2tRW2kwXT0weDE7bGV0IGkyPTB4MDtmb3IobGV0IGk0PTB4MDtpNDxpMVsnbGVuZ3RoJ107aTQrKyl7Y29uc3QgaTU9aTFbaTRdLGk2PWk1JVgsaTc9KGk1LWk2KS9YO2kyPU1hdGhbYjgoMHg0NTEpXShpMixrRltpNV0pO2Zvcihjb25zdCBbaTgsaTldb2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCBpST1pNitpOCxpcj1pNytpOTtpZihpSTwweDB8fGlyPDB4MHx8aUk+PVh8fGlyPj1GKWNvbnRpbnVlO2NvbnN0IGloPWhEKGlJLGlyKTsha1FbaWhdJiZrRltpaF0+PWtIJiYoa1FbaWhdPTB4MSxpMVtiOCgweDJiMyldKGloKSk7fX1jb25zdCBpMz1pMVsnZmlsdGVyJ10oaWM9PmtGW2ljXSpVPj05LjUpW2I4KDB4NjYxKV07aWYoaTIqVT45LjUmJmkzKlUqVT49MHgxMCYmKCFrbHx8aTFbYjgoMHg2NjEpXT5rbFsnbGVuZ3RoJ10pKWtsPWkxO31pZihrbCl7bGV0IGljPTB4M2I5YWNhMDAsaWs9LTB4MSxpaT0weDNiOWFjYTAwLGlOPS0weDE7Y29uc3QgaXY9W107Zm9yKGNvbnN0IGl1IG9mIGtsKXtjTVtpdV09MHgxO2NvbnN0IGlZPWl1JVgsaU09KGl1LWlZKS9YO2ljPU1hdGhbYjgoMHg0M2MpXShpYyxpWSksaWs9TWF0aFtiOCgweDQ1MSldKGlrLGlZKSxpaT1NYXRoW2I4KDB4NDNjKV0oaWksaU0pLGlOPU1hdGhbJ21heCddKGlOLGlNKTt9Zm9yKGNvbnN0IGlxIG9mIGtsKXtjb25zdCBpej1pcSVYLGlQPShpcS1peikvWDtbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dW2I4KDB4NjY4KV0oKFtpQSxpcF0pPT4hY01baEQoaXoraUEsaVAraXApXSkmJihjcltpcV09MHgxLGl2W2I4KDB4MmIzKV0oaXEpKTt9Y1k9eydieDAnOmljLCdieDEnOmlrLCdieTAnOmlpLCdieTEnOmlOfSxjdT0hIVtdLGNJKGl2KTt9fWZvcihsZXQgaUE9MHgwO2lBPGNjO2lBKyspe2NvbnN0IGlwPShpQSsweDEpJWNjLGlaPUlBW2lBXSxpTz1JQVtpcF0saWU9TWF0aFtiOCgweDQ3NSldKGlPWzB4MF0taVpbMHgwXSxpT1sweDFdLWlaWzB4MV0pO2lmKCFjayhpQSl8fCFjayhpcCl8fGllPjB4MTR8fElUKGlaLGlPKSljb250aW51ZTtpZihJdSYmKElDKGlaLEl1WzB4MF0pfHxJQyhpWixJdVsweDFdKXx8SUMoaU8sSXVbMHgwXSl8fElDKGlPLEl1WzB4MV0pKSljb250aW51ZTtjb25zdCBpQj0oaU9bMHgwXS1pWlsweDBdKS8gaWUsaUM9KGlPWzB4MV0taVpbMHgxXSkvIGllLGlUPShpWlsweDBdK2lPWzB4MF0pLzB4Mixpbz0oaVpbMHgxXStpT1sweDFdKS8weDI7bGV0IGl3PS1pQyxpcz1pQjshSVcoaVQraXcsaW8raXMpJiYoaXc9LWl3LGlzPS1pcyk7Y29uc3QgaVY9W107bGV0IGlFPSFbXTtmb3IobGV0IGlYPVUvMHgyO2lYPDB4M2M7aVgrPVUpe2NvbnN0IGlXPU1hdGhbYjgoMHg1M2IpXSgoaVQraXcqaVgpL1UpLGlGPU1hdGhbJ2Zsb29yJ10oKGlvK2lzKmlYKS9VKTtpZihpVzwweDB8fGlGPDB4MHx8aVc+PVh8fGlGPj1GKWJyZWFrO2NvbnN0IGlHPWhEKGlXLGlGKTtpZihZW2lHXT09PUd8fFlbaUddPT09bilicmVhaztpZihjcltpR10pe2lFPSEhW107YnJlYWs7fWlWW2I4KDB4MmIzKV0oaUcpO31pZighaVZbYjgoMHg2NjEpXSljb250aW51ZTtsZXQgaVU9aVZbYjgoMHg2NjEpXS0weDE7aWYoIWlFJiYhSXUpe2xldCBpTD0tMHgxO2lWW2I4KDB4M2I5KV0oKGlLLGlqKT0+e2MxW2lLXT49aUwmJihpTD1jMVtpS10saVU9aWopO30pO31mb3IobGV0IGlLPTB4MDtpSzw9aVU7aUsrKyljcltpVltpS11dPTB4MTtpZighY3UpY3U9ISFbXSxjSShpVltiOCgweDI3MCldKDB4MCxpVSsweDEpKTtlbHNle2lmKCFpRSl7bGV0IGlqPWM2W2lWW2lVXV07d2hpbGUoaWo+PTB4MCYmIWNyW2lqXSl7Y3JbaWpdPTB4MSxpaj1jNltpal07fX19fWlmKCFjdSYmSXApe2NvbnN0IGlIPWhEKE1hdGhbJ2Zsb29yJ10oKElwWzB4MF0rUyhJcCkvMHgyKS9VKSxNYXRoW2I4KDB4NTNiKV0oKElwWzB4MV0rSTAoSXApLzB4MikvVSkpO2NyW2lIXT0weDEsY0koW2lIXSk7fWlmKGN1KWZvcihsZXQgaVE9MHgwO2lRPDB4MztpUSsrKXtjb25zdCBpbD1uZXcgSW50MTZBcnJheShYKkYpW2I4KDB4MzZmKV0oMHgyNzBmKSxpbT1uZXcgSW50MzJBcnJheShYKkYpO2xldCBpSj0weDAsaVI9MHgwO2ZvcihsZXQgTmg9MHgwO05oPGNyW2I4KDB4NjYxKV07TmgrKyljcltOaF0mJihpbFtOaF09MHgwLGltW2lSKytdPU5oKTt3aGlsZShpSjxpUil7Y29uc3QgTmM9aW1baUorK10sTms9TmMlWCxOaT0oTmMtTmspL1g7Zm9yKGxldCBOTj0tMHgxO05OPD0weDE7Tk4rKylmb3IobGV0IE52PS0weDE7TnY8PTB4MTtOdisrKXtjb25zdCBOdT1OaytOdixOTT1OaStOTjtpZihOdTwweDB8fE5NPDB4MHx8TnU+PVh8fE5NPj1GKWNvbnRpbnVlO2NvbnN0IE5xPWhEKE51LE5NKTtpZihZW05xXT09PUd8fFlbTnFdPT09bnx8aWxbTnFdPD1pbFtOY10rMHgxKWNvbnRpbnVlO2lsW05xXT1pbFtOY10rMHgxLGltW2lSKytdPU5xO319Y29uc3QgaXk9TWF0aFsncm91bmQnXSgoUi0weDEpL1UpLGl4PW5ldyBVaW50OEFycmF5KFgqRik7bGV0IGlnPW51bGw7Zm9yKGxldCBOej0weDA7Tno8WVtiOCgweDY2MSldO056Kyspe2lmKGl4W056XXx8WVtOel0hPT1qfHxpbFtOel08PWl5KWNvbnRpbnVlO2NvbnN0IE5QPVtOel07aXhbTnpdPTB4MTtmb3IobGV0IE5mPTB4MDtOZjxOUFsnbGVuZ3RoJ107TmYrKyl7Y29uc3QgTkE9TlBbTmZdLE5wPU5BJVgsTlo9KE5BLU5wKS9YO2Zvcihjb25zdCBbTk8sTmVdb2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCBOQj1OcCtOTyxOYj1OWitOZTtpZihOQjwweDB8fE5iPDB4MHx8TkI+PVh8fE5iPj1GKWNvbnRpbnVlO2NvbnN0IE5kPWhEKE5CLE5iKTshaXhbTmRdJiZZW05kXT09PWomJmlsW05kXT5peSYmKGl4W05kXT0weDEsTlBbYjgoMHgyYjMpXShOZCkpO319aWYoTlBbJ2xlbmd0aCddKlUqVT49MHgzYyYmKCFpZ3x8TlBbJ2xlbmd0aCddPmlnW2I4KDB4NjYxKV0pKWlnPU5QO31pZighaWcpYnJlYWs7bGV0IGl0PTB4MCxpRD0weDAsaVM9MHgzYjlhY2EwMCxOMD0tMHgxLE4xPTB4M2I5YWNhMDAsTjI9LTB4MTtmb3IoY29uc3QgTkMgb2YgaWcpe2NvbnN0IE5UPU5DJVgsTm89KE5DLU5UKS9YO2l0Kz1OVCxpRCs9Tm8saVM9TWF0aFtiOCgweDQzYyldKGlTLE5UKSxOMD1NYXRoW2I4KDB4NDUxKV0oTjAsTlQpLE4xPU1hdGhbJ21pbiddKE4xLE5vKSxOMj1NYXRoW2I4KDB4NDUxKV0oTjIsTm8pO31jb25zdCBOMz1NYXRoW2I4KDB4NDcyKV0oaXQvIGlnW2I4KDB4NjYxKV0pLE40PU1hdGhbYjgoMHg0NzIpXShpRC8gaWdbYjgoMHg2NjEpXSksTjU9TjAtaVM+PU4yLU4xLE42PW5ldyBTZXQoaWcpLE43PU1hdGhbYjgoMHg0NzIpXSg2LjUvVSk7bGV0IE44PVtdLE45PTB4M2I5YWNhMDA7Zm9yKGxldCBOdz1ONT9OMTppUztOdzw9KE41P04yOk4wKTtOdysrKXtjb25zdCBOYT1bXTtsZXQgTnM9MHgwO2Zvcihjb25zdCBORSBvZlstMHgxLDB4MV0pZm9yKGxldCBOVT1ORTwweDA\/MHgwOjB4MTtOVTwweDUwO05VKyspe2NvbnN0IE5XPU41P04zK05FKk5VOk53LE5GPU41P053Ok40K05FKk5VO2lmKE5XPDB4MHx8TkY8MHgwfHxOVz49WHx8TkY+PUZ8fFlbaEQoTlcsTkYpXT09PUd8fFlbaEQoTlcsTkYpXT09PW58fFlbaEQoTlcsTkYpXT09PUspYnJlYWs7Y29uc3QgTkc9aEQoTlcsTkYpO2lmKGNyW05HXSlicmVhaztOYVtiOCgweDJiMyldKE5HKTtpZihONltiOCgweDMwYildKE5HKSlOcysrO31pZihOYVsnbGVuZ3RoJ108MHg4fHxOczxOYVtiOCgweDY2MSldKjAuNSljb250aW51ZTtjb25zdCBOVj1OYVtiOCgweDRiMCldKChOTCxOSyk9Pk5MK01hdGhbYjgoMHgzYWQpXShjMVtOS10tTjcpLDB4MCkvTmFbJ2xlbmd0aCddLU5hW2I4KDB4NjYxKV0qMC4wNTtOVjxOOSYmKE45PU5WLE44PU5hKTt9aWYoTjhbYjgoMHg2NjEpXTwweDgpYnJlYWs7Zm9yKGNvbnN0IE5MIG9mIE44KWNyW05MXT0weDE7bGV0IE5JPU44W2I4KDB4NGIwKV0oKE5LLE5qKT0+aWxbTmpdPGlsW05LXT9OajpOSyxOOFsweDBdKSxOcj0weDA7d2hpbGUoTkk+PTB4MCYmTnIrKzwweDE5MCl7Y29uc3QgTks9YzZbTkldO2lmKE5LPDB4MClicmVhaztpZihjcltOS10mJiFOOFtiOCgweDUzNyldKE5LKSlicmVhaztjcltOS109MHgxLE5JPU5LO31jSShOOCk7fWNvbnN0IGNxPU5qPT5oRChNYXRoW2I4KDB4NDNjKV0oWC0weDEsTWF0aFtiOCgweDUzYildKE5qWyd4J10vVSkpLE1hdGhbYjgoMHg0M2MpXShGLTB4MSxNYXRoW2I4KDB4NTNiKV0oTmpbJ3knXS9VKSkpLGN6PVIvVTtmb3IoY29uc3QgTmogb2YgY04pe2xldCBOSD0hW107Zm9yKGxldCBOSj0weDA7Tko8Y3JbYjgoMHg2NjEpXSYmIU5IO05KKyspaWYoY3JbTkpdKXtjb25zdCBObj1OSiVYLE5SPShOSi1ObikvWDtpZihNYXRoWydtYXgnXShNYXRoW2I4KDB4M2FkKV0oTmpbJ3gnXS9VLU5uKSxNYXRoW2I4KDB4M2FkKV0oTmpbJ3knXS9VLU5SKSk8Y3opTkg9ISFbXTt9aWYoTkgpY29udGludWU7bGV0IE5RPWNxKE5qKTtjb25zdCBObD1OUSVYLE5tPShOUS1ObCkvWDt3aGlsZShOUT49MHgwJiZZW05RXSE9PUsmJiFjcltOUV0pe2NvbnN0IE55PU5RJVgsTng9KE5RLU55KS9YO2lmKE1hdGhbYjgoMHg0NTEpXShNYXRoW2I4KDB4M2FkKV0oTnktTmwpLE1hdGhbYjgoMHgzYWQpXShOeC1ObSkpPj1jeiljcltOUV09MHgxO05RPWM2W05RXTt9fWNvbnN0IGNQPU1hdGhbYjgoMHg0NzIpXShJN1tiOCgweDU5MCldL1UpLGNmPS1NYXRoW2I4KDB4NTNiKV0oY1AvMHgyKSxjQj1jZitjUCxjYj0oTmcsTnQsTkQsTlMpPT57Y29uc3QgYmM9Yjg7bGV0IHYxPTB4MDtmb3IobGV0IHYyPU1hdGhbYmMoMHg0NzIpXShOdC9VKTt2MjxNYXRoW2JjKDB4NDcyKV0oTlMvVSk7djIrKylmb3IobGV0IHYzPU1hdGhbYmMoMHg0NzIpXShOZy9VKTt2MzxNYXRoWydyb3VuZCddKE5EL1UpO3YzKyspaWYodjM+PTB4MCYmdjI+PTB4MCYmdjM8WCYmdjI8RiYmY3JbaEQodjMsdjIpXSl2MSsrO3JldHVybiB2MTt9O2Zvcihjb25zdCBOZyBvZltJUCxJZl0pe2lmKCFOZ3x8IWNiKE5nWzB4MF0sTmdbMHgxXSxOZ1sweDBdK05nWzB4Ml0sTmdbMHgxXStOZ1sweDNdKSljb250aW51ZTtjb25zdCBOdD1OZ1sweDNdPk5nWzB4Ml07Zm9yKGxldCBORD0wLjU7TkQ8MHhjO05EKz0wLjUpe2NvbnN0IE5TPVstTkQsTkRdW2I4KDB4MzdmKV0odjE9Pk50P1tOZ1sweDBdLE5nWzB4MV0rdjEsTmdbMHgyXSxOZ1sweDNdXTpbTmdbMHgwXSt2MSxOZ1sweDFdLE5nWzB4Ml0sTmdbMHgzXV0pW2I4KDB4MmI1KV0odjE9PklGKHYxKSYmIWNiKHYxWzB4MF0sdjFbMHgxXSx2MVsweDBdK3YxWzB4Ml0sdjFbMHgxXSt2MVsweDNdKSk7aWYoTlMpe05nWzB4MF09TlNbMHgwXSxOZ1sweDFdPU5TWzB4MV07YnJlYWs7fX19Y29uc3QgY2Q9KHYxLHYyKT0+e2ZvcihsZXQgdjM9Y2Y7djM8Y0I7djMrKylmb3IobGV0IHY0PWNmO3Y0PGNCO3Y0Kyspe2NvbnN0IHY1PXYxK3Y0LHY2PXYyK3YzO2lmKHY1Pj0weDAmJnY2Pj0weDAmJnY1PFgmJnY2PEYmJmNyW2hEKHY1LHY2KV0pcmV0dXJuISFbXTt9cmV0dXJuIVtdO30sY0M9djE9Pntjb25zdCBiaz1iODtpZihJdSlyZXR1cm4gMHgwO2NvbnN0IHYyPXYxWzB4NF09PT0ncyd8fHYxWzB4NF09PT0nbicsdjM9TWF0aFsncm91bmQnXSh2MVsweDVdL1UpLHY0PU1hdGhbJ3JvdW5kJ10odjFbMHg2XS9VKSx2NT1NYXRoW2JrKDB4NDcyKV0odjFbMHg3XS9VKSx2Nj1NYXRoW2JrKDB4NDcyKV0odjFbMHg4XS9VKSx2Nz1NYXRoW2JrKDB4NTNiKV0oKHYzK3Y1KS8weDIpLHY4PU1hdGhbYmsoMHg1M2IpXSgodjQrdjYpLzB4Mik7bGV0IHY5PTB4MDtmb3IoY29uc3QgW3ZJLHZyLHZoLHZjXW9mIHYyP1tbdjMtMHgxLHY4LC0weDEsMHgwXSxbdjUsdjgsMHgxLDB4MF1dOltbdjcsdjQtMHgxLDB4MCwtMHgxXSxbdjcsdjYsMHgwLDB4MV1dKXtsZXQgdms9MHgwO2Zvcig7dms8MHg4O3ZrKyspe2NvbnN0IHZpPXZJK3ZoKnZrLHZOPXZyK3ZjKnZrO2lmKHZpPDB4MHx8dk48MHgwfHx2aT49WHx8dk4+PUZ8fFlbaEQodmksdk4pXT09PUd8fGNkKHZpLHZOKSlicmVhazt9aWYodms+MHgwJiZ2azwweDcpdjkrPTB4YTt9cmV0dXJuIHY5O307aWYoSXApe2NvbnN0IHYxPWNQKlUsdjI9STdbYjgoMHg0OWIpXT09PWI4KDB4M2ZlKSx2Mz1JN1tiOCgweDQ5YildPT09YjgoMHgyZWYpPzYuNTo0LjUsdjQ9djErKHYyPzB4NjoweDQpLHY1PXYyP2I4KDB4NDQyKTpJN1tiOCgweDU4NildLHY2PXYyPzB4MjoweDEsdjc9dmk9PnZpLTIuNT49MHgxP3ZpLTIuNToweDAsdjg9djI\/MHg3OjB4NSx2OT1JN1tiOCgweDQ5YildPT09YjgoMHgyZWYpPzB4NDoweDIsdkk9SXBbMHgwXStTKElwKS8weDIsdnI9SXBbMHgxXStJMChJcCkvMHgyLHZoPXZpPT5NYXRoW2I4KDB4NDcyKV0odmkqMHgyKS8weDIsdmM9KHZpLHZOLHZ2LHZ1LHZZLHZNLHZxKT0+e2NvbnN0IGJpPWI4O2xldCB2ej0weDYzO2ZvcihsZXQgdlA9MHgwO3ZQPHZ2O3ZQKyspe2xldCB2Zj0weDA7Zm9yKDt2ZjwweGM7dmYrKyl7Y29uc3QgdkE9dmkrdnUqdlArdk0qdmYsdnA9dk4rdlkqdlArdnEqdmY7aWYodkE8MHgwfHx2cDwweDB8fHZBPj1YfHx2cD49Rnx8WVtoRCh2QSx2cCldPT09R3x8WVtoRCh2QSx2cCldPT09bnx8Y3JbaEQodkEsdnApXSlicmVhazt9dno9TWF0aFsnbWluJ10odnosdmYpO31yZXR1cm4gTWF0aFtiaSgweDQzYyldKDB4Nix2eipVKTt9LHZrPSh2aSx2Tix2dix2dSx2WSk9Pntjb25zdCB2TT0odkEsdnApPT57Y29uc3QgYk49dix2Wj1NYXRoW2JOKDB4NDcyKV0odnAvVSksdk89dmk\/TWF0aFtiTigweDQ3MildKHZBL1UpOnZOPjB4MD9NYXRoW2JOKDB4NDcyKV0oKHZZK3YxKS9VKTpNYXRoW2JOKDB4NDcyKV0odlkvVSktMHgxLHZlPXZpP3ZOPjB4MD9NYXRoW2JOKDB4NDcyKV0oKHZ1K3YxKS9VKTpNYXRoW2JOKDB4NDcyKV0odnUvVSktMHgxOk1hdGhbYk4oMHg0NzIpXSh2QS9VKTtyZXR1cm4gdmModk8sdmUsdlosdmk\/MHgxOjB4MCx2aT8weDA6MHgxLHZpPzB4MDp2Tix2aT92TjoweDApO307bGV0IHZxPXZNKHZoKHZ2LXY4LzB4MiksdjgpO2lmKHZxPDIuNSlyZXR1cm4gbnVsbDtjb25zdCB2ej12OCsodjcodnEpPj0yLjI\/MHgwOnY5KSx2UD12aCh2di12ei8weDIpO3ZxPXZNKHZQLHZ6KTtpZih2cTwyLjUpcmV0dXJuIG51bGw7aWYodmkpe2NvbnN0IHZBPXZOPjB4MD92dSt2MTp2dS12cTtyZXR1cm5bdlAsdkEsdnosdnEsdk4+MHgwPydzJzonbicsdlAsdkEsdlArdnosdkErdnEsdjZdO31jb25zdCB2Zj12Tj4weDA\/dlkrdjE6dlktdnE7cmV0dXJuW3ZmLHZQLHZxLHZ6LHZOPjB4MD8nZSc6J3cnLHZmLHZQLHZmK3ZxLHZQK3Z6LHY2XTt9O2Zvcihjb25zdCB2aSBvZlsweGEsMHg1YV0pe2xldCB2Tj1udWxsLHZ2PTB4M2I5YWNhMDA7Zm9yKGxldCB2dT0weDA7dnU8Y3JbJ2xlbmd0aCddO3Z1Kyspe2lmKCFjclt2dV0pY29udGludWU7Y29uc3Qgdlk9dnUlWCx2TT0odnUtdlkpL1gsdnE9KHZZKzAuNSkqVSx2ej0odk0rMC41KSpVO2lmKE1hdGhbJ2FicyddKHZxLXZJKT52aXx8TWF0aFsnYWJzJ10odnotdnIpPnZpKWNvbnRpbnVlO2NvbnN0IHZQPVtdLHZmPSh2TStjZikqVSx2QT0odlkrY2YpKlUsdnA9dmgodnEtdjMvMHgyKSx2Wj12aCh2ei12My8weDIpO2lmKHZZKzB4MTxYJiZjclt2dSsweDFdfHx2WT4weDAmJmNyW3Z1LTB4MV0pe2lmKHY1IT09YjgoMHg0NDIpKXZQW2I4KDB4MmIzKV0oW3ZwLHZmLHYzLHY0LCdzJyx2cCx2Zit2MSx2cCt2Myx2Zit2NF0sW3ZwLHZmK3YxLXY0LHYzLHY0LCduJyx2cCx2Zit2MS12NCx2cCt2Myx2Zl0pO2lmKHY1IT09YjgoMHgyNmUpKWZvcihjb25zdCB2TyBvZlsweDEsLTB4MV0pe2NvbnN0IHZlPXZrKCEhW10sdk8sdnEsdmYsdkEpO2lmKHZlKXZQW2I4KDB4MmIzKV0odmUpO319aWYodk0rMHgxPEYmJmNyW3Z1K1hdfHx2TT4weDAmJmNyW3Z1LVhdKXtpZih2NSE9PSdwYXInKXZQW2I4KDB4MmIzKV0oW3ZBLHZaLHY0LHYzLCdlJyx2QSt2MSx2Wix2QSt2NCx2Wit2M10sW3ZBK3YxLXY0LHZaLHY0LHYzLCd3Jyx2QSt2MS12NCx2Wix2QSx2Wit2M10pO2lmKHY1IT09YjgoMHgyNmUpKWZvcihjb25zdCB2QiBvZlsweDEsLTB4MV0pe2NvbnN0IHZiPXZrKCFbXSx2Qix2eix2Zix2QSk7aWYodmIpdlBbYjgoMHgyYjMpXSh2Yik7fX1mb3IoY29uc3QgdmQgb2YgdlApe2lmKCFJRih2ZCl8fFtJUCxJZl1bYjgoMHg2NjgpXSh2bz0+dm8mJkkxKHZkLHZvKSkpY29udGludWU7Y29uc3QgdkM9Y1kmJmNNW2hEKE1hdGhbYjgoMHg0M2MpXShYLTB4MSxNYXRoW2I4KDB4NTNiKV0oKHZkWzB4NV0rdmRbMHg3XSkvMHgyL1UpKSxNYXRoW2I4KDB4NDNjKV0oRi0weDEsTWF0aFtiOCgweDUzYildKCh2ZFsweDZdK3ZkWzB4OF0pLzB4Mi9VKSkpXSx2VD1NYXRoW2I4KDB4NDc1KV0odmRbMHgwXSt2ZFsweDJdLzB4Mi12SSx2ZFsweDFdK3ZkWzB4M10vMHgyLXZyKStjYih2ZFsweDVdLHZkWzB4Nl0sdmRbMHg3XSx2ZFsweDhdKSoweDFlKyhjWSYmIXZDPzB4ODoweDApK2NDKHZkKSsodmRbMHg5XSYmdjU9PT1iOCgweDU1YSk\/MHhlOjB4MCk7dlQ8dnYmJih2dj12VCx2Tj12ZCk7fX1pZih2Til7SXBbMHgwXT12TlsweDBdLElwWzB4MV09dk5bMHgxXSxJcFsweDJdPXZOWzB4Ml0sSXBbMHgzXT12TlsweDNdLElwWzB4NF09dk5bMHg0XSxJcFsweDVdPXZOWzB4OV0\/djcodk5bMHg0XT09PSdzJ3x8dk5bMHg0XT09PSduJz92TlsweDNdOnZOWzB4Ml0pOnYxLElwWzB4Nl09dk5bMHg5XXx8MHgwLElwWzB4N109STdbYjgoMHg0OWIpXT09PWI4KDB4MmVmKT8weDI6MHgxO2JyZWFrO319fWZvcihjb25zdCB2byBvZiBEKCkpe2NvbnN0IHZ3PU1hdGhbJ3JvdW5kJ10odm9bMHgwXS9VKSx2YT1NYXRoWydyb3VuZCddKHZvWzB4MV0vVSksdnM9dncrUyh2bykvVSx2Vj12YStJMCh2bykvVTtmb3IobGV0IHZFPXZhO3ZFPHZWO3ZFKyspZm9yKGxldCB2VT12dzt2VTx2czt2VSsrKWlmKHZVPj0weDAmJnZFPj0weDAmJnZVPFgmJnZFPEYmJllbaEQodlUsdkUpXSE9PUcpWVtoRCh2VSx2RSldPUs7fWZvcihjb25zdCB2WCBvZiBEKClbJ2ZpbHRlciddKHZXPT52VyE9PUlwKSl7Y29uc3Qgdlc9STAodlgpPlModlgpLHZGPU1hdGhbYjgoMHg1M2IpXSgodlhbMHgwXStTKHZYKS8weDIpL1UpLHZHPU1hdGhbYjgoMHg1M2IpXSgodlhbMHgxXStJMCh2WCkvMHgyKS9VKSx2TD1NYXRoWydyb3VuZCddKHZYWzB4MF0vVSksdks9TWF0aFtiOCgweDQ3MildKHZYWzB4MV0vVSksdmo9dkwrUyh2WCkvVSx2SD12SytJMCh2WCkvVTtsZXQgdlE9IVtdO2Zvcihjb25zdCBbdm0sdkosdm4sdlJdb2Ygdlc\/W1t2Rix2Sy0weDEsMHgwLC0weDFdLFt2Rix2SCwweDAsMHgxXV06W1t2TC0weDEsdkcsLTB4MSwweDBdLFt2aix2RywweDEsMHgwXV0pe2NvbnN0IHZ5PVtdO2ZvcihsZXQgdng9MHgwO3Z4PDB4Yzt2eCsrKXtjb25zdCB2Zz12bSt2bip2eCx2dD12Sit2Uip2eDtpZih2ZzwweDB8fHZ0PDB4MHx8dmc+PVh8fHZ0Pj1GfHxZW2hEKHZnLHZ0KV09PT1HfHxZW2hEKHZnLHZ0KV09PT1ufHxZW2hEKHZnLHZ0KV09PT1LKWJyZWFrO2lmKGNyW2hEKHZnLHZ0KV0pe3Z5W2I4KDB4M2I5KV0odkQ9Pntjclt2RF09MHgxO30pLHZRPSEhW107YnJlYWs7fXZ5W2I4KDB4MmIzKV0oaEQodmcsdnQpKTt9aWYodlEpYnJlYWs7fWlmKHZRKWNvbnRpbnVlO2xldCB2bD1jNltoRCh2Rix2RyldO3doaWxlKHZsPj0weDAmJiFjclt2bF0pe2NyW3ZsXT0weDEsdmw9YzZbdmxdO319e2NvbnN0IHZEPXUxPT5ZW3UxXSE9PUcmJllbdTFdIT09bix2Uz11MT0+Y3JbdTFdfHxZW3UxXT09PUs7bGV0IHUwPS0weDE7aWYoSXApe2NvbnN0IHUxPU1hdGhbYjgoMHg1M2IpXSgoSXBbMHgwXStTKElwKS8weDIpL1UpLHUyPU1hdGhbYjgoMHg1M2IpXSgoSXBbMHgxXStJMChJcCkvMHgyKS9VKTtsZXQgdTM9MHgzYjlhY2EwMDtmb3IobGV0IHU0PTB4MDt1NDxjclsnbGVuZ3RoJ107dTQrKylpZih2Uyh1NCkpe2NvbnN0IHU1PU1hdGhbYjgoMHgzYWQpXSh1NCVYLXUxKStNYXRoWydhYnMnXShNYXRoW2I4KDB4NTNiKV0odTQvWCktdTIpO3U1PHUzJiYodTM9dTUsdTA9dTQpO319aWYodTA+PTB4MClmb3IobGV0IHU2PTB4MDt1NjwweDg7dTYrKyl7Y29uc3QgdTc9bmV3IFVpbnQ4QXJyYXkoWCpGKSx1OD1bdTBdO3U3W3UwXT0weDE7d2hpbGUodThbYjgoMHg2NjEpXSl7Y29uc3QgdWM9dThbYjgoMHgyMmIpXSgpLHVrPXVjJVgsdWk9KHVjLXVrKS9YO2Zvcihjb25zdCBbdU4sdXZdb2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCB1dT11ayt1Tix1WT11aSt1djtpZih1dTwweDB8fHVZPDB4MHx8dXU+PVh8fHVZPj1GKWNvbnRpbnVlO2NvbnN0IHVNPWhEKHV1LHVZKTshdTdbdU1dJiZ2Uyh1TSkmJih1N1t1TV09MHgxLHU4W2I4KDB4MmIzKV0odU0pKTt9fWxldCB1OT0tMHgxO2ZvcihsZXQgdXE9MHgwO3VxPGNyW2I4KDB4NjYxKV07dXErKylpZihjclt1cV0mJiF1N1t1cV0pe3U5PXVxO2JyZWFrO31pZih1OTwweDApYnJlYWs7Y29uc3QgdUk9bmV3IEludDMyQXJyYXkoWCpGKVsnZmlsbCddKC0weDIpLHVyPVt1OV07dUlbdTldPS0weDE7bGV0IHVoPS0weDE7d2hpbGUodXJbYjgoMHg2NjEpXSYmdWg8MHgwKXtjb25zdCB1ej11cltiOCgweDM4MildKCksdVA9dXolWCx1Zj0odXotdVApL1g7Zm9yKGNvbnN0IFt1QSx1Wl1vZltbMHgxLDB4MF0sWy0weDEsMHgwXSxbMHgwLDB4MV0sWzB4MCwtMHgxXV0pe2NvbnN0IHVPPXVQK3VBLHVlPXVmK3VaO2lmKHVPPDB4MHx8dWU8MHgwfHx1Tz49WHx8dWU+PUYpY29udGludWU7Y29uc3QgdUI9aEQodU8sdWUpO2lmKHVJW3VCXSE9PS0weDJ8fCF2RCh1QikpY29udGludWU7dUlbdUJdPXV6O2lmKHU3W3VCXSl7dWg9dUI7YnJlYWs7fXVyW2I4KDB4MmIzKV0odUIpO319aWYodWg8MHgwKWJyZWFrO2ZvcihsZXQgdWI9dUlbdWhdO3ViPj0weDA7dWI9dUlbdWJdKWlmKFlbdWJdIT09Syljclt1Yl09MHgxO319Y29uc3QgY1Q9KHVkLHVDLHVULHVvLHVhKT0+e2lmKHVkWzB4NF0pe2NvbnN0IHVzPSh1QyswLjUpKlUsdVY9KHVUKzAuNSkqVSx1RT11ZFsweDRdPT09J3MnP3VWLXVkWzB4MV06dWRbMHg0XT09PSduJz91ZFsweDFdK0kwKHVkKS11Vjp1ZFsweDRdPT09J2UnP3VzLXVkWzB4MF06dWRbMHgwXStTKHVkKS11cztyZXR1cm4gdUU8PXVkWzB4NV07fXJldHVybiB1ZFsweDJdP3VkWzB4M10+dWRbMHgyXT91YSE9PTB4MDp1byE9PTB4MDohIVtdO307Zm9yKGxldCB1ZD0weDA7dWQ8Rjt1ZCsrKWZvcihsZXQgdUM9MHgwO3VDPFg7dUMrKylpZihjcltoRCh1Qyx1ZCldPT09MHgxKXtmb3IobGV0IHVUPWNmO3VUPGNCO3VUKyspZm9yKGxldCB1bz1jZjt1bzxjQjt1bysrKXtjb25zdCB1YT11Qyt1byx1cz11ZCt1VDtpZih1YT49MHgwJiZ1cz49MHgwJiZ1YTxYJiZ1czxGJiZZW2hEKHVhLHVzKV09PT1qKVlbaEQodWEsdXMpXT1MO319Y29uc3QgY289W107aWYoY1kpe2NvbnN0IHVWPW5ldyBVaW50OEFycmF5KFgqRik7Zm9yKGxldCB1RT0weDA7dUU8WVtiOCgweDY2MSldO3VFKyspe2lmKCFjTVt1RV18fFlbdUVdIT09anx8dVZbdUVdKWNvbnRpbnVlO2NvbnN0IHVVPVt1RV07dVZbdUVdPTB4MTtsZXQgdVg9MHgzYjlhY2EwMCx1Vz0tMHgxLHVGPTB4M2I5YWNhMDAsdUc9LTB4MSx1TD0weDAsdUs9MHgwO2ZvcihsZXQgdUg9MHgwO3VIPHVVW2I4KDB4NjYxKV07dUgrKyl7Y29uc3QgdVE9dVVbdUhdLHVsPXVRJVgsdW09KHVRLXVsKS9YO3VYPU1hdGhbYjgoMHg0M2MpXSh1WCx1bCksdVc9TWF0aFsnbWF4J10odVcsdWwpLHVGPU1hdGhbYjgoMHg0M2MpXSh1Rix1bSksdUc9TWF0aFtiOCgweDQ1MSldKHVHLHVtKSx1TCs9dWwsdUsrPXVtO2Zvcihjb25zdCBbdUosdW5db2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCB1Uj1oRCh1bCt1Six1bSt1bik7Y01bdVJdJiZZW3VSXT09PWomJiF1Vlt1Ul0mJih1Vlt1Ul09MHgxLHVVW2I4KDB4MmIzKV0odVIpKTt9fWNvbnN0IHVqPU1hdGhbYjgoMHg0M2MpXSh1Vy11WCsweDEsdUctdUYrMHgxKSpVPj0weDQ7Zm9yKGNvbnN0IHVnIG9mIHVVKXtZW3VnXT11aj9HOlE7aWYodWopaFMtLTt9aWYodWopY29bYjgoMHgyYjMpXShbKHVML3VVW2I4KDB4NjYxKV0rMC41KSpVLCh1Sy91VVtiOCgweDY2MSldKzAuNSkqVV0pO319Y29uc3QgY2E9W10sY3M9KHV0LHVELHVTLFkwLFkxLFkyLFkzKT0+e2NvbnN0IGJ2PWI4LFk0PVt1dC11UypZMyx1RC1ZMCpZM10sWTU9W3V0K3VTKlkzLHVEK1kwKlkzXSxZNj1bWTRbMHgwXS1ZMSpZMyoweDIsWTRbMHgxXS1ZMipZMyoweDJdLFk3PVtdO2ZvcihsZXQgWTg9MHgwO1k4PD0weDg7WTgrKyl7Y29uc3QgWTk9WTgvMHg4Kk1hdGhbJ1BJJ10vMHgyO1k3W2J2KDB4MmIzKV0oW1k0WzB4MF0rKC1ZMSpNYXRoW2J2KDB4NGJmKV0oWTkpK3VTKk1hdGhbYnYoMHg2NjcpXShZOSkpKlkzKjB4MixZNFsweDFdKygtWTIqTWF0aFtidigweDRiZildKFk5KStZMCpNYXRoW2J2KDB4NjY3KV0oWTkpKSpZMyoweDJdKTt9cmV0dXJueydnYXAnOltZNCxZNV0sJ2xlYWYnOltZNCxZNl0sJ2FyYyc6WTd9O307aWYoSTdbYjgoMHg1M2IpXT09PSdlZycmJkk3WydlbnRyeVBvcyddKXtjb25zdCBbdXQsdURdPUk3W2I4KDB4MmY0KV0sdVM9KFkxLFkyKT0+WTE8MHgwfHxZMjwweDB8fFkxPj1YfHxZMj49Rj9HOllbaEQoWTEsWTIpXSxZMD1bXTtmb3IobGV0IFkxPTB4MDtZMTxGO1kxKyspZm9yKGxldCBZMj0weDA7WTI8WDtZMisrKXtjb25zdCBZMz11UyhZMixZMSk7aWYoWTM9PT1HfHxZMz09PUspY29udGludWU7Zm9yKGNvbnN0IFtZNCxZNV1vZltbMHgxLDB4MF0sWy0weDEsMHgwXSxbMHgwLDB4MV0sWzB4MCwtMHgxXV0pe2lmKHVTKFkyK1k0LFkxK1k1KSE9PUd8fElhKChZMiswLjUpKlUsKFkxKzAuNSkqVSkpY29udGludWU7Y29uc3QgWTY9KFkyKzAuNStZNCowLjUpKlUsWTc9KFkxKzAuNStZNSowLjUpKlU7WTBbYjgoMHgyYjMpXSh7J3gnOlkyLCd5JzpZMSwnZHgnOlk0LCdkeSc6WTUsJ3B4JzpZNiwncHknOlk3LCdkJzpNYXRoW2I4KDB4NDc1KV0oWTYtdXQsWTctdUQpfSk7fX1ZMFtiOCgweDU3OCldKChZOCxZOSk9Plk4WydkJ10tWTlbJ2QnXSk7Zm9yKGNvbnN0IFk4IG9mIFkwWydzbGljZSddKDB4MCwweDE5MCkpe2xldCBZOT0hW10sWUk9ISFbXSxZcj0weDA7Zm9yKGxldCBZaD0weDA7WWg8MHgzYyYmWUk7WWgrKyl7Y29uc3QgWWM9dVMoWThbJ3gnXS1ZOFsnZHgnXSpZaCxZOFsneSddLVk4WydkeSddKlloKTtpZihZYz09PUd8fFljPT09bil7WUk9IVtdO2JyZWFrO31mb3IobGV0IFlrPS0weDM7WWs8PTB4MztZaysrKXtjb25zdCBZaT1ZOFsneCddLVk4WydkeCddKlloKyhZOFsnZHknXT9ZazoweDApLFlOPVk4Wyd5J10tWThbJ2R5J10qWWgrKFk4WydkeCddP1lrOjB4MCk7aWYodVMoWWksWU4pPT09SylZST0hW107fWlmKCFZSSlicmVhaztpZihZYz09PUwpe1k5PSEhW107YnJlYWs7fVlyKys7fWlmKCFZSXx8IVk5KWNvbnRpbnVlO2ZvcihsZXQgWXY9MHgwO1l2PFlyO1l2KyspZm9yKGxldCBZdT0tMHgyO1l1PD0weDI7WXUrKyl7Y29uc3QgWVk9WThbJ3gnXS1ZOFsnZHgnXSpZdisoWThbJ2R5J10\/WXU6MHgwKSxZTT1ZOFsneSddLVk4WydkeSddKll2KyhZOFsnZHgnXT9ZdToweDApO2lmKHVTKFlZLFlNKT09PWopWVtoRChZWSxZTSldPUw7fWNhW2I4KDB4MmIzKV0oeyd4JzpZOFsncHgnXSwneSc6WThbJ3B5J10sJ254JzpZOFsnZHgnXSwnbnknOlk4WydkeSddLCdwcmltJzohIVtdLCdkJzpjcyhZOFsncHgnXSxZOFsncHknXSxZOFsnZHknXT8weDE6MHgwLFk4WydkeCddPzB4MToweDAsWThbJ2R4J10sWThbJ2R5J10sMC42NSl9KTticmVhazt9fWNvbnN0IGNWPVlxPT57Y29uc3QgYnU9YjgsWXo9TWF0aFtidSgweDQ3MildKFlxWzB4MF0vVSksWVA9TWF0aFtidSgweDQ3MildKFlxWzB4MV0vVSksWWY9WXorUyhZcSkvVSxZQT1ZUCtJMChZcSkvVSxZcD1NYXRoW2J1KDB4NTNiKV0oKFl6K1lmKS8weDIpLFlaPU1hdGhbYnUoMHg1M2IpXSgoWVArWUEpLzB4MiksWU89KFlULFlvKT0+WVQ8MHgwfHxZbzwweDB8fFlUPj1YfHxZbz49Rj9HOllbaEQoWVQsWW8pXTtsZXQgWWU9bnVsbDtmb3IoY29uc3QgW1lULFlvLFl3LFlhLFlzXW9mW1sweDAsLTB4MSxZcCxZUC0weDEsJ3MnXSxbMHgwLDB4MSxZcCxZQSwnbiddLFstMHgxLDB4MCxZei0weDEsWVosJ2UnXSxbMHgxLDB4MCxZZixZWiwndyddXSl7aWYoWXFbMHg0XSYmWXFbMHg0XSE9PVlzKWNvbnRpbnVlO2xldCBZVj0weDA7d2hpbGUoWU8oWXcrWVQqWVYsWWErWW8qWVYpIT09RyYmWU8oWXcrWVQqWVYsWWErWW8qWVYpIT09biYmWU8oWXcrWVQqWVYsWWErWW8qWVYpIT09SyYmWVY8MHgzYylZVisrO2lmKFlPKFl3K1lUKllWLFlhK1lvKllWKT09PUcmJighWWV8fFlWPFllWydkJ10pKVllPXsnZCc6WVYsJ2R4JzpZVCwnZHknOllvLCdzeCc6WXcsJ3N5JzpZYX07fWlmKCFZZXx8WWVbJ2QnXTwweDcpcmV0dXJuIG51bGw7Y29uc3QgWUI9WWVbJ3N4J10rWWVbJ2R4J10qKFllWydkJ10tMHgxKSxZYj1ZZVsnc3knXStZZVsnZHknXSooWWVbJ2QnXS0weDEpLFlkPVllWydkeCddPyhZZVsnZHgnXT4weDA\/WUIrMHgxOllCKSpVOihZQiswLjUpKlUsWUM9WWVbJ2R5J10\/KFllWydkeSddPjB4MD9ZYisweDE6WWIpKlU6KFliKzAuNSkqVTtyZXR1cm57J2NlbGwnOmhEKFlCLFliKSwndG9wJzpZZSwnY3gnOllkLCdjeSc6WUN9O307aWYoSTdbJ2Zsb29yJ109PT0nZWcnKWZvcihjb25zdCBZcSBvZiBEKCkpe2lmKFlxPT09SXAmJihJdltiOCgweDY2MSldfHxjYVtiOCgweDY2OCldKFlBPT5ZQVtiOCgweDY2MCldKSkpY29udGludWU7Y29uc3QgWXo9Y1YoWXEpO2lmKCFZeiljb250aW51ZTtjb25zdCB7dG9wOllQfT1ZeixZZj0oWUEsWXApPT5ZQTwweDB8fFlwPDB4MHx8WUE+PVh8fFlwPj1GP0c6WVtoRChZQSxZcCldO2ZvcihsZXQgWUE9MHgwO1lBPFlQWydkJ107WUErKylmb3IobGV0IFlwPS0weDI7WXA8PTB4MjtZcCsrKXtjb25zdCBZWj1ZUFsnc3gnXStZUFsnZHgnXSpZQSsoWVBbJ2R5J10\/WXA6MHgwKSxZTz1ZUFsnc3knXStZUFsnZHknXSpZQSsoWVBbJ2R4J10\/WXA6MHgwKTtpZihZZihZWixZTyk9PT1qKVlbaEQoWVosWU8pXT1MO31jYVtiOCgweDJiMyldKHsneCc6WXpbJ2N4J10sJ3knOll6WydjeSddLCdueCc6WVBbJ2R4J10sJ255JzpZUFsnZHknXSwncHJpbSc6WXE9PT1JcCwnZCc6Y3MoWXpbJ2N4J10sWXpbJ2N5J10sWVBbJ2R5J10\/MHgxOjB4MCxZUFsnZHgnXT8weDE6MHgwLFlQWydkeCddLFlQWydkeSddLDAuNjUpfSk7fWxldCBjRT0tMHgxO2lmKEk3W2I4KDB4NTNiKV09PT0nb2cnJiZJaz09PWI4KDB4NTM0KSYmSXApe2lmKEk3W2I4KDB4MmY0KV0pe2NvbnN0IFtZZSxZQl09STdbYjgoMHgyZjQpXTtsZXQgWWI9bnVsbDtmb3IobGV0IFlkPTB4MDtZZDxGO1lkKyspZm9yKGxldCBZQz0weDA7WUM8WDtZQysrKXtjb25zdCBZVD1oRChZQyxZZCk7aWYoWVtZVF09PT1HfHxZW1lUXT09PUt8fElhKChZQyswLjUpKlUsKFlkKzAuNSkqVSkpY29udGludWU7Zm9yKGNvbnN0IFtZbyxZd11vZltbMHgxLDB4MF0sWy0weDEsMHgwXSxbMHgwLDB4MV0sWzB4MCwtMHgxXV0paWYoWVtoRChZQytZbyxZZCtZdyldPT09Ryl7Y29uc3QgWWE9KFlDKzAuNStZbyowLjUpKlUsWXM9KFlkKzAuNStZdyowLjUpKlUsWVY9TWF0aFtiOCgweDQ3NSldKFlhLVllLFlzLVlCKTtpZighWWJ8fFlWPFliWydkJ10pWWI9eydjZWxsJzpZVCwnZCc6WVZ9O319aWYoWWIpY0U9WWJbYjgoMHgyYzUpXTt9ZWxzZSBjRT1jVihJcCk\/LltiOCgweDJjNSldPz8tMHgxO31jb25zdCBjVT1bXTtpZihJTSYmSU1bYjgoMHgzZGUpXSl7Y29uc3QgWUU9SXZbMHgwXT09PUlNLFlVPUlNW2I4KDB4NTQwKV1bMHgwXSxZWD1JTVtiOCgweDU0MCldWzB4MV0sWVc9WVVbMHgxXTxZWFsweDFdP1lVOllYLFlGPVlVWzB4MV08WVhbMHgxXT9ZWDpZVSxZRz1NYXRoWydhYnMnXShZVVsweDBdLVlYWzB4MF0pLzB4MixZTD1JTVtiOCgweDNkZSldWzB4MF0sWUs9SU1bYjgoMHgzZGUpXVsweDFdL1UsWWo9STdbYjgoMHgzNGIpXT49MHgwO0lNW2I4KDB4NWExKV09e30sSU1bYjgoMHgyMzgpXT0weDA7aWYoIVlFKXtjb25zdCBZSD1Zaj9ZRjpZVyxZUT1NYXRoW2I4KDB4NDcyKV0oKE1hdGhbYjgoMHg0NTEpXShZSFsweDBdLFlMKSsyLjIpL1UpO2xldCBZbD0weDA7Zm9yKGxldCBZbT0weDA7WW08RjtZbSsrKWZvcihsZXQgWUo9MHgwO1lKPFlRO1lKKyspe2lmKFltPFlLPT09WWopY29udGludWU7Y29uc3QgWW49aEQoWUosWW0pO1lbWW5dPT09aiYmKFlbWW5dPUk3W2I4KDB4NTNiKV09PT0nZWcnP0w6bSxZbCsrKTt9SU1bYjgoMHg0NzMpXT17J2FyZWEnOllsKlUqVSwna2luZCc6STdbJ2Zsb29yJ109PT0nZWcnP2I4KDB4M2E0KTpiOCgweDVkYil9O2lmKEk3WydmbG9vciddPT09J2VnJyl7Y29uc3QgWVI9KFlIWzB4MF0rWVEqVSkvMHgyLFl5PVlIWzB4MV0sWXg9WWo\/MHgxOi0weDE7Y2FbYjgoMHgyYjMpXSh7J3gnOllSLCd5JzpZeSwnbngnOjB4MCwnbnknOll4LCdwcmltJzohIVtdLCdkJzpjcyhZUixZeSwweDEsMHgwLDB4MCxZeCwwLjY1KX0pO319aWYoSTdbJ2pvaW50J109PT0nb3Blbicpe2NvbnN0IFlnPVlqLFl0PVlnP1lXOllGLFlEPU1hdGhbJ21heCddKFlFPzIuNjoweDMsMy4yLVlHLzB4MiksWVM9WUU\/WUwtWUQ6WUwrWUQsTTA9TWF0aFtiOCgweDQ3MildKFlTL1UpO0lNWydjdXRzJ11bWWc\/YjgoMHg1ZWYpOidib3QnXT1NMCpVO2xldCBNMT0weDAsTTI9MHgzYjlhY2EwMCxNMz0tMHgxO2ZvcihsZXQgTTQ9MHgwO000PEY7TTQrKylmb3IobGV0IE01PTB4MDtNNTxYO001Kyspe2lmKChZRT9NNTxNMDpNNT49TTApfHxNNDxZSyE9PVlnKWNvbnRpbnVlO2NvbnN0IE02PWhEKE01LE00KTtpZihZW002XSE9PWopY29udGludWU7WVtNNl09SixNMSsrLE0yPU1hdGhbYjgoMHg0M2MpXShNMixNNCksTTM9TWF0aFtiOCgweDQ1MSldKE0zLE00KTt9aWYoTTEpe2NvbnN0IE03PVlFP1tNMCpVLE0yKlUsWUwsKE0zKzB4MSkqVV06W1lMLE0yKlUsTTAqVSwoTTMrMHgxKSpVXSxNOD1ZRT9bTTAqVSxNMipVLE1hdGhbYjgoMHg0NTEpXShZVVsweDBdLFlYWzB4MF0pKzAuNSwoTTMrMHgxKSpVXTpbTWF0aFtiOCgweDQzYyldKFlVWzB4MF0sWVhbMHgwXSktMC41LE0yKlUsTTAqVSwoTTMrMHgxKSpVXSxNOT0oTTIrTTMrMHgxKS8weDIqVSxNST0oTTktWVVbMHgxXSkvKFlYWzB4MV0tWVVbMHgxXSksTXI9W1lVWzB4MF0rKFlYWzB4MF0tWVVbMHgwXSkqTUksTTldLE1oPU03WzB4Ml0tTTdbMHgwXSxNYz0hWUUmJk1oPj1JNFtiOCgweDY1ZSldW2I4KDB4NDg4KV0mJk03WzB4M10tTTdbMHgxXT49MHgzLE1rPU1oPEk0Wyd3ZWRnZSddW2I4KDB4NTZkKV0\/YjgoMHg1ZGIpOk1jPydiZWQnOmI4KDB4NGJiKTtjVVtiOCgweDJiMyldKHsndG9wJzpZZywncm9vbSc6TWMsJ3VzZSc6TWssJ3V3JzpNaCwnYXJlYSc6TTEqVSpVLCdiJzpNNywnZ2InOk04LCdzZWFtJzpNciwnZnVybic6TWs9PT1iOCgweDVkYik\/W106SWcoeydrJzpNYz8nYmVkJzpiOCgweDI1OCksJ3BhcnQnOllFP2I4KDB4MzljKTpiOCgweDI1MyksJ2InOk03fSwhIVtdLCFZZyl9KTt9fX1jb25zdCBjWD1EKClbJ21hcCddKE1pPT57Y29uc3QgYlk9YjgsTU49eyd4MCc6TWF0aFtiWSgweDQ3MildKE1pWzB4MF0vVSksJ3kwJzpNYXRoW2JZKDB4NDcyKV0oTWlbMHgxXS9VKSwneDEnOk1hdGhbYlkoMHg0NzIpXSgoTWlbMHgwXStTKE1pKSkvVSksJ3kxJzpNYXRoW2JZKDB4NDcyKV0oKE1pWzB4MV0rSTAoTWkpKS9VKX07Zm9yKGNvbnN0IFtNdixNdV1vZltbMHgwLC0weDFdLFsweDAsMHgxXSxbLTB4MSwweDBdLFsweDEsMHgwXV0pe2NvbnN0IE1ZPVtdO2lmKE12KXtmb3IobGV0IE1NPU1OWyd5MCddO01NPE1OWyd5MSddO01NKyspTVlbYlkoMHgyYjMpXShNTSk7fWVsc2V7Zm9yKGxldCBNcT1NTlsneDAnXTtNcTxNTlsneDEnXTtNcSsrKU1ZW2JZKDB4MmIzKV0oTXEpO31mb3IobGV0IE16PTB4MDtNejwweDc7TXorKyl7Y29uc3QgTVA9TXY\/KE12PDB4MD9NTlsneDAnXTpNTlsneDEnXSkrTXYqTXorKE12PDB4MD8tMHgxOjB4MCk6KE11PDB4MD9NTlsneTAnXTpNTlsneTEnXSkrTXUqTXorKE11PDB4MD8tMHgxOjB4MCksTWY9TVo9Pk12P1tNUCxNWl06W01aLE1QXSxNQT1NWj0+e2NvbnN0IFtNTyxNZV09TWYoTVopO3JldHVybiBNTzwweDB8fE1lPDB4MHx8TU8+PVh8fE1lPj1GP0c6WVtoRChNTyxNZSldO30sTXA9TVlbJ2ZpbHRlciddKE1aPT5NQShNWik9PT1qKVtiWSgweDY2MSldO2lmKE1wPT09TVlbYlkoMHg2NjEpXSljb250aW51ZTtpZihNcHx8IU16fHxNWVtiWSgweDY2OCldKE1aPT5NQShNWik9PT1LKSlicmVhaztmb3IobGV0IE1aPTB4MDtNWjxNejtNWisrKXtjb25zdCBNTz1Ndj9NdjwweDA\/TU5bJ3gwJ10tMHgxLU1aOk1OWyd4MSddK01aOk11PDB4MD9NTlsneTAnXS0weDEtTVo6TU5bJ3kxJ10rTVo7Zm9yKGNvbnN0IE1lIG9mIE1ZKVlbTXY\/aEQoTU8sTWUpOmhEKE1lLE1PKV09Szt9aWYoTXY8MHgwKU1OWyd4MCddLT1NejtpZihNdj4weDApTU5bJ3gxJ10rPU16O2lmKE11PDB4MClNTlsneTAnXS09TXo7aWYoTXU+MHgwKU1OWyd5MSddKz1NejticmVhazt9fXJldHVybiBNTjt9KSxjVz1YKzB4MSxjRj1uZXcgSW50MzJBcnJheShjVyooRisweDEpKSxjRz1NYXRoW2I4KDB4NDcyKV0oMy41L1UpO2ZvcihsZXQgTWk9MHgwO01pPEY7TWkrKylmb3IobGV0IE1OPTB4MDtNTjxYO01OKyspY0ZbKE1pKzB4MSkqY1crTU4rMHgxXT1jRltNaSpjVytNTisweDFdK2NGWyhNaSsweDEpKmNXK01OXS1jRltNaSpjVytNTl0rKFlbaEQoTU4sTWkpXT09PWo\/MHgxOjB4MCk7Y29uc3QgY0w9bmV3IEludDMyQXJyYXkoY1cqKEYrMHgxKSk7Zm9yKGxldCBNdj0weDA7TXYrY0c8PUY7TXYrKylmb3IobGV0IE11PTB4MDtNdStjRzw9WDtNdSsrKWNGWyhNditjRykqY1crTXUrY0ddLWNGW012KmNXK011K2NHXS1jRlsoTXYrY0cpKmNXK011XStjRltNdipjVytNdV09PT1jRypjRyYmKGNMW012KmNXK011XSsrLGNMW012KmNXK011K2NHXS0tLGNMWyhNditjRykqY1crTXVdLS0sY0xbKE12K2NHKSpjVytNdStjR10rKyk7Zm9yKGxldCBNWT0weDA7TVk8RjtNWSsrKWZvcihsZXQgTU09MHgxO01NPFg7TU0rKyljTFtNWSpjVytNTV0rPWNMW01ZKmNXK01NLTB4MV07Zm9yKGxldCBNcT0weDE7TXE8RjtNcSsrKWZvcihsZXQgTXo9MHgwO016PFg7TXorKyljTFtNcSpjVytNel0rPWNMWyhNcS0weDEpKmNXK016XTtmb3IobGV0IE1QPTB4MDtNUDxGO01QKyspZm9yKGxldCBNZj0weDA7TWY8WDtNZisrKWlmKFlbaEQoTWYsTVApXT09PWomJmNMW01QKmNXK01mXTw9MHgwKVlbaEQoTWYsTVApXT1RO3tjb25zdCBNQT1uZXcgVWludDhBcnJheShYKkYpO2ZvcihsZXQgTXA9MHgwO01wPFlbYjgoMHg2NjEpXTtNcCsrKXtpZihZW01wXSE9PVF8fE1BW01wXSljb250aW51ZTtjb25zdCBNWj1bTXBdO01BW01wXT0weDE7bGV0IE1PPSFbXTtmb3IobGV0IE1lPTB4MDtNZTxNWltiOCgweDY2MSldO01lKyspe2NvbnN0IE1CPU1aW01lXSxNYj1NQiVYLE1kPShNQi1NYikvWDtmb3IoY29uc3QgW01DLE1UXW9mW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXSl7Y29uc3QgTW89TWIrTUMsTXc9TWQrTVQ7aWYoTW88MHgwfHxNdzwweDB8fE1vPj1YfHxNdz49Riljb250aW51ZTtjb25zdCBNYT1oRChNbyxNdyk7aWYoWVtNYV09PT1LKU1PPSEhW107WVtNYV09PT1RJiYhTUFbTWFdJiYoTUFbTWFdPTB4MSxNWltiOCgweDJiMyldKE1hKSk7fX1pZihNTyYmTVpbJ2xlbmd0aCddKlUqVTw9MHgxOSl7Zm9yKGNvbnN0IE1zIG9mIE1aKVlbTXNdPW07fX19Y29uc3QgY0s9bmV3IFVpbnQ4QXJyYXkoWCpGKSxjaj1bXTtjTltiOCgweDNiOSldKE1WPT57TVZbJ2Ryb3BwZWQnXT0hW107fSk7Y29uc3QgY0g9TVY9Pntjb25zdCBiTT1iOCxNRT1NYXRoW2JNKDB4NDNjKV0oWC0weDEsTWF0aFsnZmxvb3InXShNVlsneCddL1UpKSxNVT1NYXRoW2JNKDB4NDNjKV0oRi0weDEsTWF0aFtiTSgweDUzYildKE1WWyd5J10vVSkpO2lmKFlbaEQoTUUsTVUpXT09PWopcmV0dXJuIGhEKE1FLE1VKTtmb3IobGV0IE1YPTB4MTtNWDwweDNjO01YKyspe2xldCBNVz0tMHgxLE1GPTB4M2I5YWNhMDA7Zm9yKGxldCBNRz0tTVg7TUc8PU1YO01HKyspZm9yKGxldCBNTD0tTVg7TUw8PU1YO01MKyspe2lmKE1hdGhbYk0oMHg0NTEpXShNYXRoW2JNKDB4M2FkKV0oTUwpLE1hdGhbYk0oMHgzYWQpXShNRykpIT09TVgpY29udGludWU7Y29uc3QgTUs9TUUrTUwsTWo9TVUrTUc7aWYoTUs8MHgwfHxNajwweDB8fE1LPj1YfHxNaj49Rnx8WVtoRChNSyxNaildIT09ailjb250aW51ZTtjb25zdCBNSD1NYXRoW2JNKDB4NDc1KV0oTUwsTUcpO01IPE1GJiYoTUY9TUgsTVc9aEQoTUssTWopKTt9aWYoTVc+PTB4MClyZXR1cm4gTVc7fXJldHVybi0weDE7fSxjUT1uZXcgTWFwKGNOW2I4KDB4MzdmKV0oTVY9PltNVixjSChNVildKSksY2w9W10sY209KE1WLE1FKT0+e2NvbnN0IGJxPWI4O2lmKCFNRVsnbGVuZ3RoJ10pcmV0dXJuO2lmKE1FW2JxKDB4NjYxKV09PT0weDEpe2NvbnN0IE1nPWNqWydsZW5ndGgnXTtjalticSgweDJiMyldKHsnc2VlZCc6TUVbMHgwXSwnY2VsbHMnOltdfSk7Zm9yKGNvbnN0IE10IG9mIE1WKXtZW010XT1NZyxjaltNZ11bYnEoMHgyYjkpXVsncHVzaCddKE10KTt9cmV0dXJuO31sZXQgTVU9MHgzYjlhY2EwMCxNWD0tMHgxLE1XPTB4M2I5YWNhMDAsTUY9LTB4MTtmb3IoY29uc3QgTUQgb2YgTVYpe2NvbnN0IE1TPU1EJVgscTE9KE1ELU1TKS9YO01VPU1hdGhbYnEoMHg0M2MpXShNVSxNUyksTVg9TWF0aFticSgweDQ1MSldKE1YLE1TKSxNVz1NYXRoWydtaW4nXShNVyxxMSksTUY9TWF0aFticSgweDQ1MSldKE1GLHExKTt9Y29uc3QgTUc9TUVbJ21hcCddKHEyPT5xMlsneCddKSxNTD1NRVticSgweDM3ZildKHEyPT5xMlsneSddKTtsZXQgTUs9TVgtTVU+PU1GLU1XO2lmKE1LJiZNYXRoWydtYXgnXSguLi5NRyk9PT1NYXRoWydtaW4nXSguLi5NRykpTUs9IVtdO2Vsc2V7aWYoIU1LJiZNYXRoW2JxKDB4NDUxKV0oLi4uTUwpPT09TWF0aFticSgweDQzYyldKC4uLk1MKSlNSz0hIVtdO31jb25zdCBNaj1xMj0+TUs\/cTJbJ3gnXTpxMlsneSddLE1IPVsuLi5NRV1bYnEoMHg1NzgpXSgocTIscTMpPT5NaihxMiktTWoocTMpfHxxMlsnaWQnXS1xM1snaWQnXSksTVE9TUhbYnEoMHg2NjEpXS8weDI7bGV0IE1sPU1hdGhbYnEoMHg1M2IpXShNUSksTW09LTB4MTtmb3IobGV0IHEyPTB4MTtxMjxNSFsnbGVuZ3RoJ107cTIrKyl7Y29uc3QgcTM9KE1qKE1IW3EyXSktTWooTUhbcTItMHgxXSkrMC4wMSkvKDB4MStNYXRoWydhYnMnXShxMi1NUSkpO3EzPk1tJiYoTW09cTMsTWw9cTIpO31sZXQgTUo9TWF0aFticSgweDQ3MildKChNaihNSFtNbC0weDFdKStNaihNSFtNbF0pKS8weDIpLE1uPVtdLE1SPVtdO2Zvcihjb25zdCBxNCBvZiBEKCkpe2NvbnN0IHE1PU1LP3E0WzB4MV06cTRbMHgwXSxxNj1NSz9xNFsweDFdK0kwKHE0KTpxNFsweDBdK1MocTQpLHE3PShNSz9NVzpNVSkqVSxxOD0oKE1LP01GOk1YKSsweDEpKlU7aWYocTY8PXE3fHxxNT49cTgpY29udGludWU7Zm9yKGNvbnN0IHE5IG9mW01LP3E0WzB4MF06cTRbMHgxXSxNSz9xNFsweDBdK1MocTQpOnE0WzB4MV0rSTAocTQpXSlpZihNYXRoW2JxKDB4M2FkKV0oTUotcTkpPD0yLjI1JiZNYXRoW2JxKDB4M2FkKV0oTUotcTkpPjAuMDEpTUo9TWF0aFticSgweDQ3MildKHE5KjB4MikvMHgyO317Y29uc3QgcUk9b1tJN1ticSgweDFlNyldXTtpZihxSSl7Y29uc3QgcXI9TUs\/TWF0aFticSgweDQzYyldKC4uLklBW2JxKDB4MzdmKV0ocWM9PnFjWzB4MF0pKTpNYXRoWydtaW4nXSguLi5JQVticSgweDM3ZildKHFjPT5xY1sweDFdKSk7TUo9TWF0aFticSgweDQ3MildKChxcitNYXRoWydyb3VuZCddKChNSi1xcikvcUkpKnFJKSoweDIpLzB4Mjt9fWNvbnN0IE15PXFjPT57Y29uc3QgcWs9cWMlWCxxaT0ocWMtcWspL1g7cmV0dXJuIE1LPyhxayswLjUpKlU6KHFpKzAuNSkqVTt9O2Zvcihjb25zdCBxYyBvZiBNVikoTXkocWMpPE1KP01uOk1SKVticSgweDJiMyldKHFjKTtpZihJaz09PWJxKDB4MmVlKSl7Y29uc3QgcWs9cVk9PkkzW3FZWyd0J118fCdiJ11bYnEoMHgyMTMpXSxxaT1NSFticSgweDI3MCldKDB4MCxNbClbYnEoMHg0YjApXSgocVkscU0pPT5xWStxayhxTSksMHgwKSxxTj1NSFticSgweDRiMCldKChxWSxxTSk9PnFZK3FrKHFNKSwweDApLHF2PVsuLi5NVl1bYnEoMHg1NzgpXSgocVkscU0pPT5NeShxWSktTXkocU0pKSxxdT1NYXRoW2JxKDB4NDcyKV0ocXZbYnEoMHg2NjEpXSpxaS9xTik7TW49cXZbYnEoMHgyNzApXSgweDAscXUpLE1SPXF2W2JxKDB4MjcwKV0ocXUpO31pZighTW5bJ2xlbmd0aCddfHwhTVJbYnEoMHg2NjEpXSl7Y29uc3QgcVk9Wy4uLk1WXVticSgweDU3OCldKChxeixxUCk9Pk15KHF6KS1NeShxUCkpLHFNPU1hdGhbJ2Zsb29yJ10ocVlbYnEoMHg2NjEpXSpNbC9NSFsnbGVuZ3RoJ10pO01uPXFZW2JxKDB4MjcwKV0oMHgwLHFNKSxNUj1xWVticSgweDI3MCldKHFNKTt9Y29uc3QgTXg9cXo9Pntjb25zdCBiej1icTtpZighcXpbYnooMHg2NjEpXSlyZXR1cm4gMHgwO2xldCBxUD0weDNiOWFjYTAwLHFmPS0weDE7Zm9yKGNvbnN0IHFBIG9mIHF6KXtjb25zdCBxcD1NeShxQSk7cVA9TWF0aFsnbWluJ10ocVAscXApLHFmPU1hdGhbYnooMHg0NTEpXShxZixxcCk7fXJldHVybiBxZi1xUCtVO307aWYoTXgoTW4pPHl8fE14KE1SKTx5KXtjb25zdCBxej1NeChNbik8TXgoTVIpPzB4MDpNSFticSgweDY2MSldLTB4MTtNSFtxel1bYnEoMHgyZmQpXT0hIVtdLGNtKE1WLE1IW2JxKDB4MmE2KV0oKHFQLHFmKT0+cWYhPT1xeikpO3JldHVybjt9Y20oTW4sTUhbJ3NsaWNlJ10oMHgwLE1sKSksY20oTVIsTUhbYnEoMHgyNzApXShNbCkpO307Zm9yKGxldCBNVj0weDA7TVY8RjtNVisrKWZvcihsZXQgTUU9MHgwO01FPFg7TUUrKyl7Y29uc3QgTVU9aEQoTUUsTVYpO2lmKFlbTVVdIT09anx8Y0tbTVVdKWNvbnRpbnVlO2NvbnN0IE1YPVtNVV07Y0tbTVVdPTB4MTtmb3IobGV0IE1LPTB4MDtNSzxNWFtiOCgweDY2MSldO01LKyspe2NvbnN0IE1qPU1YW01LXSxNSD1NaiVYLE1RPShNai1NSCkvWDtmb3IoY29uc3QgW01sLE1tXW9mW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXSl7Y29uc3QgTUo9TUgrTWwsTW49TVErTW07aWYoTUo8MHgwfHxNbjwweDB8fE1KPj1YfHxNbj49Riljb250aW51ZTtjb25zdCBNUj1oRChNSixNbik7WVtNUl09PT1qJiYhY0tbTVJdJiYoY0tbTVJdPTB4MSxNWFtiOCgweDJiMyldKE1SKSk7fX1jb25zdCBNVz1uZXcgU2V0KE1YKSxNRj1jTltiOCgweDJhNildKE15PT5NV1snaGFzJ10oY1FbYjgoMHgyOTYpXShNeSkpKSxNRz1jbFtiOCgweDY2MSldO3tsZXQgTXk9MHgwLE14PTB4MDtmb3IoY29uc3QgTWcgb2YgTVgpe015Kz1NZyVYLE14Kz1NYXRoW2I4KDB4NTNiKV0oTWcvWCk7fWNsW2I4KDB4MmIzKV0oeydhcmVhJzpNWFsnbGVuZ3RoJ10qVSpVLCd4JzooTXkvTVhbJ2xlbmd0aCddKzAuNSkqVSwneSc6KE14L01YW2I4KDB4NjYxKV0rMC41KSpVLCduJzpNRlsnbGVuZ3RoJ119KTt9TUZbYjgoMHgzYjkpXShNdD0+e2NvbnN0IGJQPWI4O010W2JQKDB4MjJlKV09TUc7fSk7bGV0IE1MPU1YO2lmKElrPT09J3Byb2cnJiZNRltiOCgweDY2MSldJiYhY1kpe2NvbnN0IE10PU1GW2I4KDB4NGIwKV0oKE1ELE1TKT0+TUQrSTNbTVNbJ3QnXXx8J2InXVtiOCgweDIxMyldLDB4MCkvKFUqVSk7aWYoTXQ8TVhbYjgoMHg2NjEpXSl7bGV0IE1EPTB4M2I5YWNhMDAsTVM9LTB4MSxxMT0weDNiOWFjYTAwLHEyPS0weDE7Zm9yKGNvbnN0IHE3IG9mIE1YKXtjb25zdCBxOD1xNyVYLHE5PShxNy1xOCkvWDtNRD1NYXRoW2I4KDB4NDNjKV0oTUQscTgpLE1TPU1hdGhbYjgoMHg0NTEpXShNUyxxOCkscTE9TWF0aFtiOCgweDQzYyldKHExLHE5KSxxMj1NYXRoW2I4KDB4NDUxKV0ocTIscTkpO31jb25zdCBxMz1NUy1NRD49cTItcTEscTQ9cUk9Pntjb25zdCBxcj1xSSVYO3JldHVybiBxMz9xcjoocUktcXIpL1g7fSxxNT1NRlsncmVkdWNlJ10oKHFJLHFyKT0+cUkrKHEzP3FyWyd4J106cXJbJ3knXSksMHgwKS9NRltiOCgweDY2MSldL1UscTY9Wy4uLk1YXVsnc29ydCddKChxSSxxcik9Pk1hdGhbYjgoMHgzYWQpXShxNChxSSktcTUpLU1hdGhbYjgoMHgzYWQpXShxNChxciktcTUpKTtNTD1xNltiOCgweDI3MCldKDB4MCxNYXRoWydyb3VuZCddKE10KSk7fX1pZihjWSYmTUZbYjgoMHg2NjEpXSl7Y29uc3QgcUk9cWs9Pntjb25zdCBiZj1iOCxxaT1xayVYLHFOPShxay1xaSkvWDtyZXR1cm4gcWk8Y1lbYmYoMHg0MGMpXT8weDA6cWk+Y1lbJ2J4MSddPzB4MTpxTjxjWVtiZigweDIxYildPzB4MjpxTj5jWVsnYnkxJ10\/MHgzOjB4NDt9LHFyPVtbXSxbXSxbXSxbXSxbXV07Zm9yKGNvbnN0IHFrIG9mIE1MKXFyW3FJKHFrKV1bYjgoMHgyYjMpXShxayk7Y29uc3QgcWM9bmV3IFNldChNRik7cXJbYjgoMHgzYjkpXShxaT0+e2NvbnN0IGJBPWI4O2lmKCFxaVtiQSgweDY2MSldKXJldHVybjtjb25zdCBxTj1uZXcgU2V0KHFpKSxxdj1NRltiQSgweDJhNildKHFZPT5xTlsnaGFzJ10oY1FbYkEoMHgyOTYpXShxWSkpKTtxdltiQSgweDNiOSldKHFZPT5xY1snZGVsZXRlJ10ocVkpKTtsZXQgcXU9cWk7aWYoSWs9PT1iQSgweDJlZSkmJnF2W2JBKDB4NjYxKV0pe2NvbnN0IHFZPXF2W2JBKDB4NGIwKV0oKHFNLHF6KT0+cU0rSTNbcXpbJ3QnXXx8J2InXVtiQSgweDIxMyldLDB4MCkvKFUqVSk7aWYocVk8cWlbYkEoMHg2NjEpXSl7Y29uc3QgcU09cWlbJ21hcCddKHFwPT5xcCVYKSxxej1xaVtiQSgweDM3ZildKHFwPT5NYXRoWydmbG9vciddKHFwL1gpKSxxUD1NYXRoW2JBKDB4NDUxKV0oLi4ucU0pLU1hdGhbYkEoMHg0M2MpXSguLi5xTSk+PU1hdGhbYkEoMHg0NTEpXSguLi5xeiktTWF0aFsnbWluJ10oLi4ucXopLHFmPXF2W2JBKDB4NGIwKV0oKHFwLHFaKT0+cXArKHFQP3FaWyd4J106cVpbJ3knXSksMHgwKS9xdltiQSgweDY2MSldL1UscUE9cXA9PnFQP3FwJVg6TWF0aFtiQSgweDUzYildKHFwL1gpO3F1PVsuLi5xaV1bYkEoMHg1NzgpXSgocXAscVopPT5NYXRoW2JBKDB4M2FkKV0ocUEocXApLXFmKS1NYXRoW2JBKDB4M2FkKV0ocUEocVopLXFmKSlbYkEoMHgyNzApXSgweDAsTWF0aFtiQSgweDQ3MildKHFZKSk7fX1jbShxdSxxdik7fSk7fWVsc2UgY20oTUwsTUYpO31jaltiOCgweDNiOSldKHFpPT57Y29uc3QgYnA9YjgscU49bmV3IFNldChxaVticCgweDJiOSldKSxxdj1uZXcgU2V0KCk7bGV0IHF1PVtdO2Zvcihjb25zdCBxWSBvZiBxaVticCgweDJiOSldKXtpZihxdlticCgweDMwYildKHFZKSljb250aW51ZTtjb25zdCBxTT1bcVldO3F2W2JwKDB4NjcyKV0ocVkpO2ZvcihsZXQgcXo9MHgwO3F6PHFNWydsZW5ndGgnXTtxeisrKXtjb25zdCBxUD1xTVtxel0scWY9cVAlWCxxQT0ocVAtcWYpL1g7Zm9yKGNvbnN0IFtxcCxxWl1vZltbMHgxLDB4MF0sWy0weDEsMHgwXSxbMHgwLDB4MV0sWzB4MCwtMHgxXV0pe2NvbnN0IHFPPXFmK3FwLHFlPXFBK3FaO2lmKHFPPDB4MHx8cWU8MHgwfHxxTz49WHx8cWU+PUYpY29udGludWU7Y29uc3QgcUI9aEQocU8scWUpO3FOW2JwKDB4MzBiKV0ocUIpJiYhcXZbJ2hhcyddKHFCKSYmKHF2W2JwKDB4NjcyKV0ocUIpLHFNW2JwKDB4MmIzKV0ocUIpKTt9fWlmKHFNW2JwKDB4NjYxKV0+cXVbYnAoMHg2NjEpXSlxdT1xTTt9aWYocXVbYnAoMHg2NjEpXTxxaVticCgweDJiOSldW2JwKDB4NjYxKV0pe2NvbnN0IHFiPW5ldyBTZXQocXUpO2Zvcihjb25zdCBxZCBvZiBxaVticCgweDJiOSldKWlmKCFxYlsnaGFzJ10ocWQpKVlbcWRdPWo7cWlbYnAoMHgyYjkpXT1xdTt9fSk7aWYoSWs9PT1iOCgweDUzNCkpe2NvbnN0IHFpPW5ldyBVaW50OEFycmF5KFgqRik7Zm9yKGxldCBxTj0weDA7cU48WVtiOCgweDY2MSldO3FOKyspe2lmKFlbcU5dIT09anx8cWlbcU5dKWNvbnRpbnVlO2NvbnN0IHF2PVtxTl07cWlbcU5dPTB4MTtjb25zdCBxdT1uZXcgTWFwKCk7Zm9yKGxldCBxUD0weDA7cVA8cXZbYjgoMHg2NjEpXTtxUCsrKXtjb25zdCBxZj1xdltxUF0scUE9cWYlWCxxcD0ocWYtcUEpL1g7Zm9yKGNvbnN0IFtxWixxT11vZltbMHgxLDB4MF0sWy0weDEsMHgwXSxbMHgwLDB4MV0sWzB4MCwtMHgxXV0pe2NvbnN0IHFlPXFBK3FaLHFCPXFwK3FPO2lmKHFlPDB4MHx8cUI8MHgwfHxxZT49WHx8cUI+PUYpY29udGludWU7Y29uc3QgcWI9aEQocWUscUIpLHFkPVlbcWJdO2lmKHFkPT09aiYmIXFpW3FiXSlxaVtxYl09MHgxLHF2WydwdXNoJ10ocWIpO2Vsc2V7aWYocWQ+PTB4MClxdVtiOCgweDJhNSldKHFkLChxdVsnZ2V0J10ocWQpfHwweDApKzB4MSk7fX19Y29uc3QgcVk9cXZbYjgoMHg2NjEpXSpVKlUscU09cXVbYjgoMHgyMmEpXT9bLi4ucXVbJ2VudHJpZXMnXSgpXVtiOCgweDU3OCldKChxQyxxVCk9PnFUWzB4MV0tcUNbMHgxXSlbMHgwXVsweDBdOi0weDEscXo9cU0+PTB4MCYmKHFZPDB4MTJ8fHFZPD0weDI4JiZxdVtiOCgweDI5NildKHFNKSpVPj0weDMmJmNqW3FNXVtiOCgweDJiOSldW2I4KDB4NjYxKV0qVSpVK3FZPD0weDVmKTtpZihxeilmb3IoY29uc3QgcUMgb2YgcXYpe1lbcUNdPXFNLGNqW3FNXVtiOCgweDJiOSldW2I4KDB4MmIzKV0ocUMpO31lbHNle2lmKHFZPj0weDEyKXtsZXQgcVQ9MHgwLHFvPTB4MDtmb3IoY29uc3QgcXcgb2YgcXYpe3FUKz1xdyVYLHFvKz1NYXRoWydmbG9vciddKHF3L1gpO31jbFtiOCgweDJiMyldKHsnYXJlYSc6cVksJ3gnOihxVC9xdlsnbGVuZ3RoJ10rMC41KSpVLCd5JzoocW8vcXZbJ2xlbmd0aCddKzAuNSkqVSwnbic6MHgwfSk7fX19fWNqWydzb3J0J10oKHFhLHFzKT0+cWFbYjgoMHgzYzUpXVsneSddLXFzW2I4KDB4M2M1KV1bJ3knXXx8cWFbYjgoMHgzYzUpXVsneCddLXFzW2I4KDB4M2M1KV1bJ3gnXSk7bGV0IGNKPW51bGwsY249MHgwO2lmKElNJiZJdlsweDBdPT09SU0mJkk3W2I4KDB4NDdiKV09PT1iOCgweDU0MCkmJklNW2I4KDB4M2RlKV0pe2NvbnN0IHFhPUk3W2I4KDB4MzRiKV0+PTB4MCxxcz1JTVsnY3V0cyddJiZJTVtiOCgweDVhMSldW3FhP2I4KDB4NWVmKTpiOCgweDRhYSldLHFWPWNVW2I4KDB4MmE2KV0ocUU9PnFFW2I4KDB4NWVmKV09PT1xYSlbYjgoMHg0YjApXSgocUUscVUpPT5xRStxVVtiOCgweDIxMyldLDB4MCk7aWYoTnVtYmVyWydpc0Zpbml0ZSddKHFzKSYmcVY+MHgwKWZvcihjb25zdCBxRSBvZiBjail7bGV0IHFVPTB4MDtmb3IoY29uc3QgcVggb2YgcUVbYjgoMHgyYjkpXSl7Y29uc3QgcVc9KHFYJVgrMC41KSpVLHFGPShNYXRoW2I4KDB4NTNiKV0ocVgvWCkrMC41KSpVO2lmKHFGPElNWydtaWQnXVsweDFdPT09cWEmJk1hdGhbJ2FicyddKHFXLXFzKTwwLjgpcVUrKzt9cVU+Y24mJihjbj1xVSxjSj1xRSk7fWlmKGNKKWNKW2I4KDB4NDAzKV09cVY7fWxldCBjUj1udWxsO2lmKGNFPj0weDApe2NvbnN0IHFHPWNqW2I4KDB4MzdmKV0ocUw9Pntjb25zdCBiWj1iODtsZXQgcUs9MHgzYjlhY2EwMCxxaj0hW10scUg9IVtdO2Zvcihjb25zdCBxUSBvZiBxTFsnY2VsbHMnXSl7Y29uc3QgcWw9cVElWCxxbT1NYXRoW2JaKDB4NTNiKV0ocVEvWCk7cUs9TWF0aFsnbWluJ10ocUssTWF0aFsnaHlwb3QnXShxbC1jRSVYLHFtLU1hdGhbYlooMHg1M2IpXShjRS9YKSkpO2Zvcihjb25zdCBbcUoscW5db2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCBxUj1xbCtxSixxeT1xbStxbixxeD1xUjwweDB8fHF5PDB4MHx8cVI+PVh8fHF5Pj1GP0c6WVtoRChxUixxeSldO2lmKHF4PT09RyYmIUlhKChxbCswLjUpKlUsKHFtKzAuNSkqVSkpcWo9ISFbXTtpZihxeD09PUwpcUg9ISFbXTt9fXJldHVybnsncic6cUwsJ2Rpc3RhbmNlJzpxSywnZmFjYWRlJzpxaiwnYWNjZXNzJzpxSH07fSlbYjgoMHgyYTYpXShxTD0+cUxbYjgoMHgyNzMpXTw9MHg1JiZxTFtiOCgweDY2NSldJiZxTFtiOCgweDJkZildJiZxTFsnciddW2I4KDB4MmI5KV1bYjgoMHg2NjEpXSpVKlU+PTB4MWUmJnFMWydyJ11bJ2NlbGxzJ11bJ2xlbmd0aCddKlUqVTwweDJhKVtiOCgweDU3OCldKChxTCxxSyk9PnFMW2I4KDB4MjczKV0tcUtbYjgoMHgyNzMpXSk7aWYocUdbYjgoMHg2NjEpXSljUj1xR1sweDBdWydyJ107fWlmKElrPT09YjgoMHg1MzQpJiYhY1kmJmNqW2I4KDB4NjYxKV0+PTB4Myl7Y29uc3QgcUw9KHFqLHFIKT0+cWo8MHgwfHxxSDwweDB8fHFqPj1YfHxxSD49Rj9HOllbaEQocWoscUgpXSxxSz1uZXcgU2V0KCk7Zm9yKGxldCBxaj0weDA7cWo8WVtiOCgweDY2MSldO3FqKyspe2lmKFlbcWpdIT09TCljb250aW51ZTtjb25zdCBxSD1xaiVYLHFRPShxai1xSCkvWDtmb3IoY29uc3QgW3FsLHFtXW9mW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXSl7aWYocUwocUgtcWwscVEtcW0pIT09THx8cUwocUgrcWwscVErcW0pPT09THx8cUwocUgrcWwscVErcW0pPDB4MCYmcUwocUgrcWwscVErcW0pIT09Ryljb250aW51ZTtpZihJYSgocUgrMC41K3FsKSpVLChxUSswLjUrcW0pKlUpKWNvbnRpbnVlO2NvbnN0IHFKPXFsIT09MHgwLHFuPXFKP3FIOnFRO3FLW2I4KDB4NjcyKV0ocWwrJywnK3FtKycsJytxbik7fX1mb3IoY29uc3QgcVIgb2YgcUspe2NvbnN0IFtxeSxxeCxxZ109cVJbJ3NwbGl0J10oJywnKVtiOCgweDM3ZildKE51bWJlcikscUQ9cXkhPT0weDAscVM9cXkrcXgsejA9elk9PnFEP3pZJVg6TWF0aFtiOCgweDUzYildKHpZL1gpLHoxPXpZPT5xRD9NYXRoWydmbG9vciddKHpZL1gpOnpZJVgsejI9W107Zm9yKGxldCB6WT0weDA7elk8WVtiOCgweDY2MSldO3pZKyspaWYoWVt6WV09PT1MJiZ6MCh6WSk9PT1xZyl7Y29uc3Qgek09elklWCx6cT0oelktek0pL1g7aWYocUwoek0rcXksenErcXgpIT09TCYmcUwoek0tcXksenEtcXgpPT09TCl6MltiOCgweDJiMyldKHpZKTt9aWYoIXoyW2I4KDB4NjYxKV0pY29udGludWU7Y29uc3QgejM9bmV3IFNldCgpO2Zvcihjb25zdCB6eiBvZiB6Mil7Y29uc3QgelA9enolWCx6Zj0oenotelApL1g7Zm9yKGNvbnN0IFt6QSx6cF1vZiBxRD9bWzB4MCwweDFdLFsweDAsLTB4MV1dOltbMHgxLDB4MF0sWy0weDEsMHgwXV0pe2NvbnN0IHpaPXFMKHpQK3pBLHpmK3pwKTtpZih6Wj49MHgwKXozW2I4KDB4NjcyKV0oelopO319aWYoejNbJ3NpemUnXSE9PTB4Miljb250aW51ZTtjb25zdCBbejQsejVdPVsuLi56M10sejY9ek89PmNqW2I4KDB4MmI1KV0oemU9PnplWydjZWxscyddW2I4KDB4NjYxKV0mJllbemVbYjgoMHgyYjkpXVsweDBdXT09PXpPKSx6Nz16Nih6NCksejg9ejYoejUpO2lmKCF6N3x8IXo4fHx6Nz09PXo4fHx6N1tiOCgweDQwMyldfHx6OFtiOCgweDQwMyldKWNvbnRpbnVlO2NvbnN0IHo5PXpPPT57Y29uc3QgYk89Yjg7bGV0IHplPTB4M2I5YWNhMDAsekI9LTB4M2I5YWNhMDA7Zm9yKGNvbnN0IHpiIG9mIHpPW2JPKDB4MmI5KV0pe2NvbnN0IHpkPXowKHpiKTt6ZT1NYXRoW2JPKDB4NDNjKV0oemUsemQpLHpCPU1hdGhbJ21heCddKHpCLHpkKTt9cmV0dXJuIHFTPjB4MD9bemUsekJdOlt6Qix6ZV07fSx6ST16OSh6NyksenI9ejkoejgpLHpoPU1hdGhbYjgoMHgzYWQpXSh6SVsweDFdLXpJWzB4MF0pKzB4MSx6Yz1NYXRoW2I4KDB4M2FkKV0oenJbMHgxXS16clsweDBdKSsweDE7aWYoemg+MHhlfHx6Yz4weGV8fHpoPDB4OHx8emM8MHg4KWNvbnRpbnVlO2NvbnN0IHprPXFTPjB4MD9NYXRoW2I4KDB4NDUxKV0oeklbMHgwXSx6clsweDBdKTpNYXRoW2I4KDB4NDNjKV0oeklbMHgwXSx6clsweDBdKSx6aT16Tz0+WVt6T109PT1MJiYocVM+MHgwP3owKHpPKT49emsmJnowKHpPKTw9cWc6ejAoek8pPD16ayYmejAoek8pPj1xZyksek49W107bGV0IHp2PSFbXTtmb3IobGV0IHpPPTB4MDt6TzxZW2I4KDB4NjYxKV07ek8rKyl7aWYoIXppKHpPKSljb250aW51ZTt6TltiOCgweDJiMyldKHpPKTtjb25zdCB6ZT16TyVYLHpCPSh6Ty16ZSkvWDtmb3IoY29uc3QgW3piLHpkXW9mW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXSl7Y29uc3QgekM9cUwoemUremIsekIremQpO2lmKHpDPj0weDAmJnpDIT09ejQmJnpDIT09ejUpenY9ISFbXTtpZih6Qz09PUt8fHpDPT09bXx8ekM9PT1KfHx6Qz09PW4penY9ISFbXTt9fWlmKHp2fHwhek5bJ2xlbmd0aCddKWNvbnRpbnVlO2NvbnN0IHp1PSh6N1tiOCgweDJiOSldW2I4KDB4NjYxKV0rejhbYjgoMHgyYjkpXVtiOCgweDY2MSldK3pOW2I4KDB4NjYxKV0pKlUqVTtpZih6dTwweDNjfHx6dT4weDVmKWNvbnRpbnVlO2Zvcihjb25zdCB6VCBvZiB6OFtiOCgweDJiOSldKXt6N1tiOCgweDJiOSldW2I4KDB4MmIzKV0oelQpLFlbelRdPXo0O31mb3IoY29uc3Qgem8gb2Ygek4pe3o3WydjZWxscyddWydwdXNoJ10oem8pLFlbem9dPXo0O316N1tiOCgweDQ2ZildPXsnZHgnOnF5LCdkeSc6cXh9LGNqW2I4KDB4NTMyKV0oY2pbYjgoMHg1ZWIpXSh6OCksMHgxKTticmVhazt9fWNqW2I4KDB4M2I5KV0oKHp3LHphKT0+e2NvbnN0IGJlPWI4O2xldCB6cz0weDAselY9MHgwLHpFPTB4M2I5YWNhMDAselU9MHgzYjlhY2EwMCx6WD0tMHgxLHpXPS0weDEsekY9IVtdLHpHPW51bGw7Y29uc3Qgekw9e30seks9bmV3IFNldCh6d1tiZSgweDJiOSldKTtmb3IoY29uc3Qgem4gb2YgendbYmUoMHgyYjkpXSl7WVt6bl09emE7Y29uc3QgelI9em4lWCx6eT0oem4telIpL1g7enMrPXpSLHpWKz16eSx6RT1NYXRoW2JlKDB4NDNjKV0oekUselIpLHpYPU1hdGhbYmUoMHg0NTEpXSh6WCx6UikselU9TWF0aFtiZSgweDQzYyldKHpVLHp5KSx6Vz1NYXRoW2JlKDB4NDUxKV0oelcsenkpO2Zvcihjb25zdCBbengsemddb2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCB6dD16Uit6eCx6RD16eSt6Zyx6Uz16dDwweDB8fHpEPDB4MHx8enQ+PVh8fHpEPj1GPy0weDE6aEQoenQsekQpLFAwPXpTPDB4MD9HOllbelNdO2lmKFAwPT09RyYmIUlhKCh6UiswLjUpKlUsKHp5KzAuNSkqVSkpekY9ISFbXTtpZihQMD09PUwpe2NvbnN0IFAxPU1hdGhbYmUoMHg0NzUpXSh6UipVLXp3W2JlKDB4M2M1KV1bJ3gnXSx6eSpVLXp3W2JlKDB4M2M1KV1bJ3knXSksUDI9engrJywnK3pnO2lmKCF6R3x8UDE8ekdbJ2QnXSl6Rz17J3gnOnpSLCd5Jzp6eSwnZHgnOnp4LCdkeSc6emcsJ2QnOlAxfTtpZighekxbUDJdfHxQMTx6TFtQMl1bJ2QnXSl6TFtQMl09eyd4Jzp6UiwneSc6enksJ2R4Jzp6eCwnZHknOnpnLCdkJzpQMX07fX19endbJ25vJ109emErMHgxLHp3WydpZCddPSdXJytTdHJpbmcoemErMHgxKVtiZSgweDQ5MildKDB4MiwnMCcpLHp3W2JlKDB4MjEzKV09endbYmUoMHgyYjkpXVtiZSgweDY2MSldKlUqVSsoendbYmUoMHg0MDMpXXx8MHgwKSx6d1snY3gnXT0oenMvendbYmUoMHgyYjkpXVtiZSgweDY2MSldKzAuNSkqVSx6d1snY3knXT0oelYvendbYmUoMHgyYjkpXVsnbGVuZ3RoJ10rMC41KSpVLHp3Wyd3J109KHpYLXpFKzB4MSkqVSx6d1snZCddPSh6Vy16VSsweDEpKlUsendbYmUoMHg2NjUpXT16Rix6d1tiZSgweDRiOSldPXpHLHp3WydvayddPSFbXSx6d1tiZSgweDM4OSldPVtdLHp3W2JlKDB4NWNkKV09W10sendbJ3QnXT1Jaz09PWJlKDB4MmVlKSYmendbYmUoMHgzYzUpXVsndCddP3p3WydzZWVkJ11bJ3QnXTp6d1tiZSgweDIxMyldPDB4M2E\/J2EnOnp3W2JlKDB4MjEzKV08MHg1MD8nYic6J2MnO2NvbnN0IHpqPUkzW3p3Wyd0J11dO2xldCB6SD0weDA7Zm9yKGNvbnN0IFAzIG9mIHp3W2JlKDB4MmI5KV0pe2NvbnN0IFA0PVAzJVgsUDU9KFAzLVA0KS9YO2Zvcihjb25zdCBbUDYsUDddb2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCBQOD1QNCtQNixQOT1QNStQNyxQST1QODwweDB8fFA5PDB4MHx8UDg+PVh8fFA5Pj1GP0c6WVtoRChQOCxQOSldO2lmKFBJPT09RyYmIUlhKChQNCswLjUpKlUsKFA1KzAuNSkqVSkpekgrPVU7fX1jb25zdCB6UT1Jaz09PWJlKDB4NTM0KT9NYXRoW2JlKDB4NDNjKV0oSWkoendbJ2FyZWEnXSx6d1sndCddKSxNYXRoW2JlKDB4NDUxKV0oMHgxLE1hdGhbYmUoMHg1M2IpXSgoekgrKHp3W2JlKDB4NDAzKV0\/MHgzOjB4MCktMy40KS8zLjEpKSk6STNbendbJ3QnXV1bJ2JlZHMnXTt6d1tiZSgweDRkNSldPXpRLHp3WydmYWMnXT16SCx6d1tiZSgweDQ2MyldPXsncmFuZ2UnOnp3WydhcmVhJ108empbYmUoMHg0M2MpXSowLjk1fHwoSWs9PT1iZSgweDJlZSk\/endbYmUoMHgyMTMpXT56altiZSgweDQ1MSldKjEuMDU6endbJ2FyZWEnXT4weDVmKSwnbmFycm93JzpNYXRoW2JlKDB4NDNjKV0oendbJ3cnXSx6d1snZCddKTwweDN8fE1hdGhbYmUoMHg0NTEpXSh6d1sndyddLHp3WydkJ10pL01hdGhbYmUoMHg0M2MpXSh6d1sndyddLHp3WydkJ10pPihNYXRoW2JlKDB4NDNjKV0oendbJ3cnXSx6d1snZCddKTw0LjY\/MHg0OjIuNiksJ2xpZ2h0Jzp6d1snZmFjYWRlJ10mJnpIKjAuNzU8endbYmUoMHgyMTMpXSowLjcvMHg4LCdmYWNhZGUnOiF6d1snZmFjYWRlJ10sJ2FjY2Vzcyc6IXp3W2JlKDB4NGI5KV19LHp3W2JlKDB4MzJmKV09IXp3W2JlKDB4NjY1KV18fCF6R3x8TWF0aFtiZSgweDQzYyldKHp3Wyd3J10sendbJ2QnXSk8Mi44fHxNYXRoW2JlKDB4NDUxKV0oendbJ3cnXSx6d1snZCddKS9NYXRoW2JlKDB4NDNjKV0oendbJ3cnXSx6d1snZCddKT4weDV8fHp3W2JlKDB4MjEzKV08MHgxMix6d1tiZSgweDM2OSldPUk3WydmbG9vciddPT09J29nJyYmSWs9PT1iZSgweDUzNCkmJnp3PT09Y1ImJnp3WydhcmVhJ10+PTB4MWUmJnp3WydhcmVhJ108MHgyYSYmendbJ2ZhY2FkZSddJiYhIXp3W2JlKDB4NGI5KV0sendbYmUoMHg1NTUpXT1bXTtjb25zdCB6bD16d1snY2VsbHMnXVtiZSgweDY2MSldPT09TWF0aFtiZSgweDQ3MildKHp3Wyd3J10vVSooendbJ2QnXS9VKSk7bGV0IHptPW51bGw7aWYoIXpsKXtjb25zdCBQcj1uZXcgQXJyYXkoelgtekUrMHgyKVtiZSgweDM2ZildKDB4MCk7bGV0IFBoPTB4MDtmb3IobGV0IFBjPXpVO1BjPD16VztQYysrKXtjb25zdCBQaz1bXTtmb3IobGV0IFBpPXpFO1BpPD16WCsweDE7UGkrKyl7Y29uc3QgUE49UGktekU7UHJbUE5dPVBpPD16WCYmektbYmUoMHgzMGIpXShoRChQaSxQYykpP1ByW1BOXSsweDE6MHgwO2xldCBQdj1QTjt3aGlsZShQa1tiZSgweDY2MSldJiZQa1tQa1tiZSgweDY2MSldLTB4MV1bMHgxXT49UHJbUE5dKXtjb25zdCBbUHUsUFldPVBrW2JlKDB4MjJiKV0oKSxQTT1QWSooUE4tUHUpO1BNPlBoJiYoUGg9UE0sem09eyd4MCc6ekUrUHUsJ3gxJzp6RStQTi0weDEsJ3kwJzpQYy1QWSsweDEsJ3kxJzpQY30pLFB2PVB1O31pZihQcltQTl0+MHgwKVBrW2JlKDB4MmIzKV0oW1B2LFByW1BOXV0pO319aWYoUGg8endbYmUoMHgyYjkpXVtiZSgweDY2MSldKjAuMyl6bT1udWxsO31jb25zdCB6Sj1QcT0+e2NvbnN0IGJCPWJlO2xldCBQej16bT96bVsneDAnXTp6RSxQUD16bT96bVsneDEnXTp6WCxQZj16bT96bVsneTAnXTp6VSxQQT16bT96bVsneTEnXTp6VztpZih6bSl7Y29uc3QgZjQ9UHFbJ2R4J108MHgwP1BxWyd4J106UHosZjU9UHFbJ2R4J10+MHgwP1BxWyd4J106UFAsZjY9UHFbJ2R5J108MHgwP1BxWyd5J106UGYsZjc9UHFbJ2R5J10+MHgwP1BxWyd5J106UEE7bGV0IGY4PTB4MDtmb3IobGV0IGY5PWY2O2Y5PD1mNztmOSsrKWZvcihsZXQgZkk9ZjQ7Zkk8PWY1O2ZJKyspaWYoektbYkIoMHgzMGIpXShoRChmSSxmOSkpKWY4Kys7ZjgvKChmNS1mNCsweDEpKihmNy1mNisweDEpKT49MC45MyYmKFB6PWY0LFBQPWY1LFBmPWY2LFBBPWY3KTt9Y29uc3QgUHA9UHoqVSxQWj0oUFArMHgxKSpVLFBPPVBmKlUsUGU9KFBBKzB4MSkqVSxQQj0tUHFbJ2R4J10sUGI9LVBxWydkeSddLFBkPVBiIT09MHgwLFBDPVBkP1BlLVBPOlBaLVBwLFBUPVBkP1BaLVBwOlBlLVBPLFBvPVBkP1BwOlBPLFBhPShmcixmaCxmYyxmayk9Pntjb25zdCBiYj1iQixmaT1mdT0+UEI+MHgwfHxQYj4weDA\/UGQ\/UE8rZnU6UHArZnU6UGQ\/UGUtZnU6UFotZnUsZk49ZmkoZmMpLGZ2PWZpKGZrKTtyZXR1cm4gUGQ\/W1BwK2ZyLE1hdGhbYmIoMHg0M2MpXShmTixmdiksUHArZmgsTWF0aFtiYigweDQ1MSldKGZOLGZ2KV06W01hdGhbYmIoMHg0M2MpXShmTixmdiksUE8rZnIsTWF0aFtiYigweDQ1MSldKGZOLGZ2KSxQTytmaF07fSxQcz0oZnIsZmgpPT57Y29uc3QgZmM9UGEoZnIsZnIsZmgsZmgpO3JldHVybltmY1sweDBdLGZjWzB4MV1dO30sUFY9KGZyLGZoLGZjLGZrLGZpLGZOLGZ2PTAuODUpPT57Y29uc3QgYmQ9YkIsZnU9UHMoZnIsZmgpLGZZPVBzKGZyK2ZjKmZ2LGZoK2ZrKmZ2KSxmTT1QcyhmcitmaSpmdixmaCtmTipmdiksZnE9W107Zm9yKGxldCBmej0weDA7Zno8PTB4ODtmeisrKXtjb25zdCBmUD1mei8weDgqTWF0aFsnUEknXS8weDIsZmY9TWF0aFtiZCgweDRiZildKGZQKSxmQT1NYXRoW2JkKDB4NjY3KV0oZlApO2ZxW2JkKDB4MmIzKV0oUHMoZnIrKGZpKmZmK2ZjKmZBKSpmdixmaCsoZk4qZmYrZmsqZkEpKmZ2KSk7fXp3W2JkKDB4Mzg5KV1bJ3B1c2gnXSh7J2dhcCc6W2Z1LGZZXSwnbGVhZic6W2Z1LGZNXSwnYXJjJzpmcX0pO30sUEU9Mi4yLFBVPTEuOCxQWD1NYXRoW2JCKDB4NDUxKV0oMi4yLE1hdGhbJ21pbiddKDIuNCxQQy0zLjQpKSxQRj0oZnIsZmgpPT5QZD9NYXRoW2JCKDB4NDNjKV0oZnJbMHgyXSxmaFsweDJdKS1NYXRoW2JCKDB4NDUxKV0oZnJbMHgwXSxmaFsweDBdKTpNYXRoWydtaW4nXShmclsweDNdLGZoWzB4M10pLU1hdGhbJ21heCddKGZyWzB4MV0sZmhbMHgxXSk7bGV0IFBHPXphJTB4Mj09PTB4MTtjb25zdCBQTD1mcj0+e2NvbnN0IGJDPWJCLGZoPU1hdGhbYkMoMHg1M2IpXSgoUG8rZnIpL1UpLGZjPVBkP2ZoOlBxWyd4J10sZms9UGQ\/UHFbJ3knXTpmaDtpZihmYzwweDB8fGZrPDB4MHx8ZmM+PVh8fGZrPj1GfHwhektbYkMoMHgzMGIpXShoRChmYyxmaykpKXJldHVybiBudWxsO2NvbnN0IGZpPWZjK1BxWydkeCddLGZOPWZrK1BxWydkeSddLGZ2PWZpPDB4MHx8Zk48MHgwfHxmaT49WHx8Zk4+PUY\/RzpZW2hEKGZpLGZOKV07cmV0dXJuIGZ2PT09TD97J3gnOmZjLCd5JzpmaywnZHgnOlBxWydkeCddLCdkeSc6UHFbJ2R5J10sJ2QnOjB4MH06bnVsbDt9LFBLPShmcixmaCk9PlBMKGZyP1BULShmaCtQRStQVS8weDIpOmZoK1BFK1BVLzB4MiksUGo9ZnI9Pntjb25zdCBiVD1iQixmaD1NYXRoW2JUKDB4NDcyKV0oZnJbMHgwXS9VKSxmYz1NYXRoW2JUKDB4NDcyKV0oZnJbMHgxXS9VKSxmaz1NYXRoW2JUKDB4NDcyKV0oZnJbMHgyXS9VKSxmaT1NYXRoW2JUKDB4NDcyKV0oZnJbMHgzXS9VKSxmTj0oZnUsZlksZk0sZnEpPT57Zm9yKGxldCBmej0weDA7Zno8MHgxODtmeisrKXtjb25zdCBmUD1mdStmTSpmeixmZj1mWStmcSpmejtpZihmUDwweDB8fGZmPDB4MHx8ZlA+PVh8fGZmPj1GfHxZW2hEKGZQLGZmKV09PT1HKXJldHVybiFJYSgoZlArMC41KSpVLChmZiswLjUpKlUpO2lmKFlbaEQoZlAsZmYpXSE9PXphfHx6bHx8UFIoKGZQKzAuNSkqVSwoZmYrMC41KSpVKT49MHgwKXJldHVybiFbXTt9cmV0dXJuIVtdO307bGV0IGZ2PTB4MDtmb3IobGV0IGZ1PWZoO2Z1PGZrO2Z1Kyspe2lmKGZOKGZ1LGZjLTB4MSwweDAsLTB4MSkpZnYrKztpZihmTihmdSxmaSwweDAsMHgxKSlmdisrO31mb3IobGV0IGZZPWZjO2ZZPGZpO2ZZKyspe2lmKGZOKGZoLTB4MSxmWSwtMHgxLDB4MCkpZnYrKztpZihmTihmayxmWSwweDEsMHgwKSlmdisrO31yZXR1cm4gZnYqVT49MHgxO30sUFE9KGZyLGZoKT0+e2NvbnN0IGJvPWJCLGZjPVtNYXRoW2JvKDB4NDUxKV0oZnJbMHgxXSxmaFsnYiddWzB4MV0pLE1hdGhbJ21pbiddKGZyWzB4M10sZmhbJ2InXVsweDNdKV0sZms9W01hdGhbYm8oMHg0NTEpXShmclsweDBdLGZoWydiJ11bMHgwXSksTWF0aFtibygweDQzYyldKGZyWzB4Ml0sZmhbJ2InXVsweDJdKV07aWYoKE1hdGhbYm8oMHgzYWQpXShmclsweDBdLWZoWydiJ11bMHgyXSk8MC4wNXx8TWF0aFsnYWJzJ10oZnJbMHgyXS1maFsnYiddWzB4MF0pPDAuMDUpJiZmY1sweDFdLWZjWzB4MF0+PTAuOTUpe2NvbnN0IGZpPU1hdGhbYm8oMHgzYWQpXShmclsweDBdLWZoWydiJ11bMHgyXSk8MC4wNT9mclsweDBdOmZyWzB4Ml0sZk49KGZjWzB4MF0rZmNbMHgxXSkvMHgyO3JldHVybltbZmksZk4tMC40M10sW2ZpLGZOKzAuNDNdXTt9aWYoKE1hdGhbYm8oMHgzYWQpXShmclsweDFdLWZoWydiJ11bMHgzXSk8MC4wNXx8TWF0aFtibygweDNhZCldKGZyWzB4M10tZmhbJ2InXVsweDFdKTwwLjA1KSYmZmtbMHgxXS1ma1sweDBdPj0wLjk1KXtjb25zdCBmdj1NYXRoW2JvKDB4M2FkKV0oZnJbMHgxXS1maFsnYiddWzB4M10pPDAuMDU\/ZnJbMHgxXTpmclsweDNdLGZ1PShma1sweDBdK2ZrWzB4MV0pLzB4MjtyZXR1cm5bW2Z1LTAuNDMsZnZdLFtmdSswLjQzLGZ2XV07fXJldHVybiBudWxsO30sUGw9KGZyLGZoKT0+e2NvbnN0IGJhPWJCLGZjPWZyWzB4MF0sZms9ZnJbMHgxXSxmaT1NYXRoWydoeXBvdCddKGZrWzB4MF0tZmNbMHgwXSxma1sweDFdLWZjWzB4MV0pLGZOPShma1sweDBdLWZjWzB4MF0pL2ZpLGZ2PShma1sweDFdLWZjWzB4MV0pL2ZpLGZ1PShmY1sweDBdK2ZrWzB4MF0pLzB4MixmWT0oZmNbMHgxXStma1sweDFdKS8weDIsZk09KGZoWzB4MF0rZmhbMHgyXSkvMHgyLWZ1LGZxPShmaFsweDFdK2ZoWzB4M10pLzB4Mi1mWTtsZXQgZno9LWZ2LGZQPWZOO2Z6KmZNK2ZQKmZxPDB4MCYmKGZ6PS1meixmUD0tZlApO2NvbnN0IGZmPVtdO2ZvcihsZXQgZkE9MHgwO2ZBPD0weDg7ZkErKyl7Y29uc3QgZnA9ZkEvMHg4Kk1hdGhbJ1BJJ10vMHgyO2ZmW2JhKDB4MmIzKV0oW2ZjWzB4MF0rKGZ6Kk1hdGhbYmEoMHg0YmYpXShmcCkrZk4qTWF0aFtiYSgweDY2NyldKGZwKSkqZmksZmNbMHgxXSsoZlAqTWF0aFtiYSgweDRiZildKGZwKStmdipNYXRoW2JhKDB4NjY3KV0oZnApKSpmaV0pO31yZXR1cm57J2dhcCc6W2ZjLGZrXSwnbGVhZic6W2ZjLFtmY1sweDBdK2Z6KmZpLGZjWzB4MV0rZlAqZmldXSwnYXJjJzpmZn07fSxQbT0oKCgpPT57Y29uc3QgYnM9YkI7aWYoemwpcmV0dXJuIG51bGw7Y29uc3QgZnI9Zk09Pntjb25zdCBmcT1mTSVYLGZ6PShmTS1mcSkvWDtyZXR1cm4gZnE+PVB6JiZmcTw9UFAmJmZ6Pj1QZiYmZno8PVBBO30sZmg9bmV3IFNldChbLi4uektdW2JzKDB4MmE2KV0oZk09PiFmcihmTSkpKTtpZihmaFsnc2l6ZSddPDB4MjQpcmV0dXJuIG51bGw7bGV0IGZjPTB4M2I5YWNhMDAsZms9MHgzYjlhY2EwMCxmaT0tMHgxLGZOPS0weDE7Zm9yKGNvbnN0IGZNIG9mIGZoKXtjb25zdCBmcT1mTSVYLGZ6PU1hdGhbJ2Zsb29yJ10oZk0vWCk7ZmM9TWF0aFticygweDQzYyldKGZjLGZxKSxmaT1NYXRoW2JzKDB4NDUxKV0oZmksZnEpLGZrPU1hdGhbJ21pbiddKGZrLGZ6KSxmTj1NYXRoW2JzKDB4NDUxKV0oZk4sZnopO31jb25zdCBmdj1uZXcgQXJyYXkoZmktZmMrMHgyKVsnZmlsbCddKDB4MCk7bGV0IGZ1PTB4MCxmWT1udWxsO2ZvcihsZXQgZlA9Zms7ZlA8PWZOO2ZQKyspe2NvbnN0IGZmPVtdO2ZvcihsZXQgZkE9ZmM7ZkE8PWZpKzB4MTtmQSsrKXtjb25zdCBmcD1mQS1mYztmdltmcF09ZkE8PWZpJiZmaFsnaGFzJ10oaEQoZkEsZlApKT9mdltmcF0rMHgxOjB4MDtsZXQgZlo9ZnA7d2hpbGUoZmZbYnMoMHg2NjEpXSYmZmZbZmZbYnMoMHg2NjEpXS0weDFdWzB4MV0+PWZ2W2ZwXSl7Y29uc3QgW2ZPLGZlXT1mZlticygweDIyYildKCksZkI9ZmUqKGZwLWZPKTtmQj5mdSYmKGZ1PWZCLGZZPVtmYytmTyxmUC1mZSsweDEsZmMrZnAsZlArMHgxXSksZlo9Zk87fWlmKGZ2W2ZwXT4weDApZmZbJ3B1c2gnXShbZlosZnZbZnBdXSk7fX1pZighZll8fGZ1PDB4MjR8fE1hdGhbYnMoMHg0M2MpXShmWVsweDJdLWZZWzB4MF0sZllbMHgzXS1mWVsweDFdKTwweDYpcmV0dXJuIG51bGw7cmV0dXJuW2ZZWzB4MF0qVSxmWVsweDFdKlUsZllbMHgyXSpVLGZZWzB4M10qVV07fSkoKSksUEo9KCk9Pntjb25zdCBiVj1iQixmcj16d1tiVigweDU1NSldW2JWKDB4MmE2KV0oZmg9PmZoWydrJ109PT1iVigweDIxNCkpWydsZW5ndGgnXTtpZighUG18fGZyPj16USlyZXR1cm4gZnI7cmV0dXJuIHp3W2JWKDB4NTU1KV1bYlYoMHg2NjgpXShmaD0+KGZoWydrJ109PT0naGFsbCd8fGZoWydrJ109PT1iVigweDIzYyl8fGZoWydrJ109PT1iVigweDVmZCkmJiFmaFsna2l0J10pJiZQUShQbSxmaCkpP2ZyKzB4MTpmcjt9LFBuPShmcixmaCxmYyk9Pntjb25zdCBiRT1iQixmaz1mYz09PWJFKDB4MjJjKXx8ZmM9PT1iRSgweDIxNiksZmk9ZmM9PT1iRSgweDMyOCl8fGZjPT09YkUoMHgyMTYpO3p3W2JFKDB4NTU1KV09W10sendbYkUoMHgzODkpXT1bXSx6d1tiRSgweDVjZCldPVtdO2NvbnN0IGZOPVBULWZoLGZ2PWZmPT5mcj9QVC0oZmYrZmgpOmZmK2ZoLGZ1PShmZixmQSxmcCxmWik9PlBhKE1hdGhbYkUoMHg0M2MpXShmdihmZiksZnYoZkEpKSxNYXRoWydtYXgnXShmdihmZiksZnYoZkEpKSxmcCxmWiksZlk9KGZmLGZBLGZwLGZaLGZPLGZlLGZCKT0+UFYoZnYoZmYpLGZBLGZyPy1mcDpmcCxmWixmcj8tZk86Zk8sZmUsZkIpLGZNPShmZixmQSxmcCxmWik9Pnp3W2JFKDB4Mzg5KV1bYkUoMHgyYjMpXSh7J2dhcCc6W1BzKGZ2KGZmKSxmQSksUHMoZnYoZnApLGZaKV19KSxmcT1QRStQVTtsZXQgZno9Zmk\/MHgwOnpqW2JFKDB4MzE1KV07Y29uc3QgZlA9Zk4tZnE7aWYoZmM9PT1iRSgweDM3Myl8fGZjPT09YkUoMHgyYjYpKXtjb25zdCBmZj1mYz09PWJFKDB4MzczKT9QQzpQWDtpZihmaD49MHgxKXp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjQyKSwnYic6ZnUoLWZoLDB4MCwweDAsZmYpfSk7IXp3WydlbnRyeVN0dWRpbyddJiYoendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6J2JhdGgnLCdiJzpmdSgweDAsUEUsMHgwLGZmKX0seydrJzpiRSgweDYzMyksJ2InOmZ1KFBFLGZxLDB4MCxmZil9KSxmWShQRSxNYXRoW2JFKDB4NDUxKV0oMC4xNSxmZi0weDEpLDB4MCwweDEsLTB4MSwweDAsMC44KSk7aWYoZmM9PT1iRSgweDJiNikpe2lmKHp3W2JFKDB4MzY5KV0pe2NvbnN0IGZBPVBkPyhQcVsneCddKzAuNSkqVS1QcDooUHFbJ3knXSswLjUpKlUtUE8sZnA9ZnI\/UFQtZkE6ZkEsZlo9TWF0aFtiRSgweDQzYyldKGZOLVBFLE1hdGhbYkUoMHg0NTEpXShQVSxmcCswLjI1KSk7endbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHg2MzMpLCdiJzpmdSgweDAsZlosMHgwLFBYKX0seydrJzpiRSgweDRjMiksJ2InOmZ1KGZaLGZaK1BFLDB4MCxQWCl9KSxmWShmWixQWC8weDIsMHgwLDB4MSwweDEsMHgwLDAuOCksZk0oMC4zLFBYLDEuMyxQWCk7aWYoZk4tZlotUEU+PTAuOSl6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDVmZCksJ2tpdCc6IVtdLCdiJzpmdShmWitQRSxmTiwweDAsUFgpfSk7endbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyM2MpLCdraXQnOiEhW10sJ2InOmZ1KDB4MCxmTi0yLjIsUFgsUEMpfSx7J2snOmJFKDB4MjE0KSwnbm9XYWxsJzohIVtdLCdiJzpmdShmTi0yLjIsZk4sUFgsUEMpfSksZk0oZk4tMi4yLFBYKzAuMyxmTi0yLjIsUFgrMS4yKTt9ZWxzZSBmTi1mcT49MC45JiYoendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyNDIpLCdiJzpmdShmcSxmTiwweDAsUFgpfSksZlkoZnEsMC41LDB4MCwweDEsMHgxLDB4MCwwLjc1KSksendbYkUoMHg1NTUpXVsncHVzaCddKHsnayc6YkUoMHgyM2MpLCdraXQnOiEhW10sJ2InOmZ1KC1maCxmTj49MHg1P2ZOLTIuMjpmTixQWCxQQyl9KSxmTShQRSswLjMsUFgsUEUrMS4zLFBYKSxmTj49MHg1JiYoendbJ3Jvb21zJ11bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjE0KSwnbm9XYWxsJzohIVtdLCdiJzpmdShmTi0yLjIsZk4sUFgsUEMpfSksZk0oZk4tMi4yLFBYKzAuMyxmTi0yLjIsUFgrMS4yKSk7fWVsc2V7aWYoTWF0aFtiRSgweDQzYyldKE1hdGhbYkUoMHg0NTEpXSgweDEselEpLE1hdGhbYkUoMHg1M2IpXSgoZk4tZnEtNC4yKS8yLjkpKT49MHgyJiZQQz49NC42KXtjb25zdCBmTz1mTi1mcSxmZT1NYXRoW2JFKDB4NDNjKV0oelEsTWF0aFsnZmxvb3InXSgoZk8tNC4yKS8yLjkpKSxmQj1NYXRoW2JFKDB4NDUxKV0oMi45LE1hdGhbJ21pbiddKDMuNiwoZk8tNC4yKS9mZSkpLGZkPWZPLWZlKmZCLGZDPTEuMTt6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDYzMyksJ2InOmZ1KGZxLGZOLDB4MCxmQyl9LHsnayc6J2xpdmUnLCdraXQnOiEhW10sJ2InOmZ1KGZxLGZxK2ZkLGZDLFBDKX0pLGZNKGZxLDAuMTUsZnEsZkMtMC4xKSxmTShmcSswLjMsZkMsZnErTWF0aFtiRSgweDQzYyldKGZkLTAuMywxLjYpLGZDKTtmb3IobGV0IGZUPTB4MDtmVDxmZTtmVCsrKXtjb25zdCBmbz1mcStmZCtmVCpmQjt6d1sncm9vbXMnXVtiRSgweDJiMyldKHsnayc6YkUoMHgyMTQpLCdiJzpmdShmbyxmbytmQixmQyxQQyl9KSxmWShmbyswLjE1LGZDLDB4MSwweDAsMHgwLDB4MSwwLjg1KTt9fWVsc2V7Y29uc3QgZnc9Zk4tZnE+PTUuNjt6d1tiRSgweDU1NSldWydwdXNoJ10oeydrJzonbGl2ZScsJ2tpdCc6ISFbXSwnYic6ZnUoZnEsZnc\/Zk4tMi44OmZOLDB4MCxQQyl9KSxmTShmcSwwLjMsZnEsTWF0aFtiRSgweDQzYyldKFBDLTAuMywxLjUpKTtpZihmdyl6d1tiRSgweDU1NSldWydwdXNoJ10oeydrJzpiRSgweDIxNCksJ2InOmZ1KGZOLTIuOCxmTiwweDAsUEMpfSksZlkoZk4tMi44LDAuMywweDAsMHgxLDB4MSwweDAsMC44NSk7ZWxzZXtpZihmTi1mcT49NC45KXtjb25zdCBmYT16d1sncm9vbXMnXVt6d1tiRSgweDU1NSldWydsZW5ndGgnXS0weDFdO2ZhWydiJ109ZnUoZnEsZk4tMi4xLDB4MCxQQyksendbJ3Jvb21zJ11bJ3B1c2gnXSh7J2snOidiZWQnLCdub1dhbGwnOiEhW10sJ2InOmZ1KGZOLTIuMSxmTiwweDAsUEMpfSksZk0oZk4tMi4xLDAuMyxmTi0yLjEsMS4zKTt9fX19cmV0dXJuIHp3Wydyb29tcyddW2JFKDB4MmE2KV0oZnM9PmZzWydrJ109PT1iRSgweDIzYykmJiFQaihmc1snYiddKSlbYkUoMHg2NjEpXSt6d1tiRSgweDU1NSldW2JFKDB4MmE2KV0oZnM9PmZzWydrJ109PT1iRSgweDIxNCkmJiFQaihmc1snYiddKSlbYkUoMHg2NjEpXTt9aWYoZmM9PT1iRSgweDY1Yikpe2NvbnN0IGZzPS1maCxmVj1mTixmRT1mVi1mcyxmVT0yLjU1LGZYPU1hdGhbJ21pbiddKHpqW2JFKDB4MzE1KV0sTWF0aFsnZmxvb3InXSgoZkUtMi42KS9mVSkpLGZXPWZFLWZYKmZVLGZGPU1hdGhbYkUoMHg0M2MpXSg0LjgsUEMtMy4yKSxmRz0weDEsZkw9UEMtZkYtZkcsZks9ZkwrZkcsZmo9ZnMrUEUrUFUsZkg9ZmorMS4yNTtpZihmWDwweDJ8fGZXPDIuNnx8ZkYqZlc8MHhjfHxmTDwyLjE1fHxQQzw3LjIpcmV0dXJuIDB4M2U4O3p3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4NGMyKSwnYic6ZnUoZnMsZnMrUEUsMHgwLGZMKX0seydrJzpiRSgweDYzMyksJ2InOmZ1KGZzK1BFLGZqLDB4MCxmTCl9LHsnayc6J3djJywnYic6ZnUoZmosZkgsMHgwLGZMKX0seydrJzpiRSgweDVmZCksJ2tpdCc6IVtdLCdiJzpmdShmSCxmViwweDAsZkwpfSx7J2snOmJFKDB4NjMzKSwnYic6ZnUoZnMsZlYsZkwsZkspfSksZlkoZnMrUEUsZkwvMHgyLDB4MCwweDEsLTB4MSwweDAsMC44KSxmWShmaixmTC8weDIsMHgwLDB4MSwweDEsMHgwLDAuNzUpLGZNKGZzK1BFKzAuMyxmTCxmcytQRSsxLjMsZkwpLGZNKGZIKzAuMixmTCxmSCsxLjIsZkwpO2ZvcihsZXQgZm09MHgwO2ZtPGZYO2ZtKyspe2NvbnN0IGZKPWZzK2ZtKmZVLGZuPWZKK2ZVO3p3W2JFKDB4NTU1KV1bJ3B1c2gnXSh7J2snOmJFKDB4MjE0KSwnYic6ZnUoZkosZm4sZkssUEMpfSksZlkoKGZKK2ZuKS8weDItMC40LGZLLDAuOCwweDAsMHgwLDB4MSwwLjg1KTt9Y29uc3QgZlE9ZnMrZlgqZlU7cmV0dXJuIHp3Wydyb29tcyddWydwdXNoJ10oeydrJzpiRSgweDIzYyksJ2tpdCc6ISFbXSwnYic6ZnUoZlEsZlYsZkssUEMpfSksZk0oZlErMC4zNSxmSyxmUSsxLjM1LGZLKSx6d1tiRSgweDU1NSldWydmaWx0ZXInXShmUj0+KGZSWydrJ109PT1iRSgweDIzYyl8fGZSWydrJ109PT1iRSgweDIxNCkpJiYhUGooZlJbJ2InXSkpW2JFKDB4NjYxKV07fWlmKGZjPT09J2hlYWQnKXtjb25zdCBmUj1NYXRoW2JFKDB4NDNjKV0oMy40LE1hdGhbJ21heCddKDB4MyxmTiowLjI1KSksZnk9ZlIsZng9Zk4tZlIsZmc9Mi42LGZ0PTEuNyxmRD1NYXRoW2JFKDB4NDNjKV0oMy40LE1hdGhbJ21heCddKDB4MixmeC1meS0zLjIpKSxmUz0oZk4tZkQpLzB4MixBMD1mUytmRCxBMT1NYXRoW2JFKDB4NDUxKV0oMHgyLE1hdGhbJ21pbiddKDB4NCx6USkpO3JldHVybiB6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDYzMyksJ2InOmZ1KGZTLEEwLDB4MCxmZyl9LHsnayc6YkUoMHg0YzIpLCdiJzpmdShmeSxmUywweDAsZnQpLCd0dWInOiFbXX0seydrJzpiRSgweDYzMyksJ2InOmZ1KGZ5LGZTLGZ0LGZnKX0seydrJzond2MnLCdiJzpmdShBMCxmeCwweDAsZnQpfSx7J2snOmJFKDB4NjMzKSwnYic6ZnUoQTAsZngsZnQsZmcpfSksZlkoZlMsMC40LDB4MCwweDEsLTB4MSwweDAsMC44KSxmWShBMCwwLjQsMHgwLDB4MSwweDEsMHgwLDAuNyksZk0oZlMsZnQrMC4xLGZTLGZnLTAuMSksZk0oQTAsZnQrMC4xLEEwLGZnLTAuMSksendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyM2MpLCdraXQnOiEhW10sJ2InOmZ1KGZ5LGZ4LGZnLFBDKX0pLGZNKGZTKzAuMyxmZyxBMC0wLjMsZmcpLEExPj0weDMmJlBDPj01Ljg\/KHp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjE0KSwnYic6ZnUoMHgwLGZ5LDB4MCwzLjQpfSx7J2snOmJFKDB4MjE0KSwnYic6ZnUoMHgwLGZ5LDMuNCxQQyl9KSxmWShmeSxmdCswLjA1LDB4MCwweDEsLTB4MSwweDAsMC44NSksZlkoZnksMy43LDB4MCwweDEsLTB4MSwweDAsMC44NSkpOih6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDIxNCksJ2InOmZ1KDB4MCxmeSwweDAsUEMpLCd3cic6WzAuMDgsMi4yXX0pLGZZKGZ5LGZ0KzAuMDUsMHgwLDB4MSwtMHgxLDB4MCwwLjg1KSksQTE+PTB4NCYmUEM+PTUuOD8oendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6J2JlZCcsJ2InOmZ1KGZ4LGZOLDB4MCwzLjQpfSx7J2snOidiZWQnLCdiJzpmdShmeCxmTiwzLjQsUEMpfSksZlkoZngsZnQrMC4wNSwweDAsMHgxLDB4MSwweDAsMC44NSksZlkoZngsMy43LDB4MCwweDEsMHgxLDB4MCwwLjg1KSk6KHp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjE0KSwnYic6ZnUoZngsZk4sMHgwLFBDKSwnd3InOltmeCswLjA4LGZ4KzIuMl19KSxmWShmeCxmdCswLjA1LDB4MCwweDEsMHgxLDB4MCwwLjg1KSksendbJ3Jvb21zJ11bJ2ZpbHRlciddKEEyPT4oQTJbJ2snXT09PSdiZWQnfHxBMlsnayddPT09YkUoMHgyM2MpKSYmIVBqKEEyWydiJ10pKVtiRSgweDY2MSldO31pZihmYz09PWJFKDB4MzZhKSl7Y29uc3QgQTI9My4yLEEzPTB4MixBND1BMixBNT1BMitBMyxBNj1BNStQRSxBNz16d1tiRSgweDIxMyldPj0weDMyPzEuNDoweDEsQTg9TWF0aFtiRSgweDQ1MSldKDQuMixNYXRoW2JFKDB4NDNjKV0oNC42LGZOKjAuNDcpKTt6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDIxNCksJ2InOmZ1KC1maCxBMiwweDAsUFgpfSx7J2snOidoYWxsJywnYic6ZnUoQTQsQTUsMHgwLFBYKX0seydrJzonYmF0aCcsJ2InOmZ1KEE1LEE2LDB4MCxQWCl9KSx6d1sncm9vbXMnXVt6d1tiRSgweDU1NSldW2JFKDB4NjYxKV0tMHgxXVtiRSgweDVlYSldPXp3WydhcmVhJ10+PTB4MzcsZlkoQTQsMC4zLDB4MCwweDEsLTB4MSwweDAsMC44NSksZlkoQTUsTWF0aFtiRSgweDQ1MSldKDAuNjUsUFgtMC45NSksMHgwLDB4MSwweDEsMHgwLDAuOCk7aWYoZk4tQTY+PUE3KzAuOSl6d1sncm9vbXMnXVtiRSgweDJiMyldKHsnayc6J3djJywnYic6ZnUoQTYsQTYrQTcsMHgwLFBYKX0seydrJzpiRSgweDVmZCksJ2tpdCc6IVtdLCdiJzpmdShBNitBNyxmTiwweDAsUFgpfSksZlkoQTYrQTcsMC42NSwweDAsMHgxLC0weDEsMHgwLDAuNyk7ZWxzZXtpZihmTi1BNj49MC45KXp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4NWZkKSwna2l0JzohW10sJ2InOmZ1KEE2LGZOLDB4MCxQWCl9KTt9cmV0dXJuIHp3Wydyb29tcyddW2JFKDB4MmIzKV0oeydrJzpiRSgweDIxNCksJ2InOmZ1KC1maCxBOCxQWCxQQyksJ3dyJzpmcj9bQTgrZmgtMi4yLEE4K2ZoLTAuMDhdOlswLjA4LDIuMl19LHsnayc6YkUoMHgyM2MpLCdraXQnOiEhW10sJ2InOmZ1KEE4LGZOLFBYLFBDKX0pLGZZKEE0KzAuMDUsUFgsMHgxLDB4MCwweDAsMHgxLDAuODUpLGZNKE1hdGhbYkUoMHg0NTEpXShBOCswLjEsQTQrMHgxKSxQWCxNYXRoW2JFKDB4NDNjKV0oQTUtMC4wNSxBOCsweDEpLFBYKSx6d1tiRSgweDU1NSldW2JFKDB4MmE2KV0oQTk9PihBOVsnayddPT09YkUoMHgyMTQpfHxBOVsnayddPT09YkUoMHgyM2MpKSYmIVBqKEE5WydiJ10pKVsnbGVuZ3RoJ107fWlmKGZjPT09YkUoMHg1OWYpfHxmYz09PWJFKDB4MzQ0KSl7aWYoZmM9PT1iRSgweDU5Zikpe3p3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4NjMzKSwnYic6ZnUoMHgwLFBVLDB4MCxQWCl9LHsnayc6YkUoMHg0YzIpLCdiJzpmdShQVSxmcSwweDAsUFgpfSksZlkoUFUsMC42NSwweDAsMHgxLDB4MSwweDAsMC44KTtpZihmTi1mcT49MC45KXp3W2JFKDB4NTU1KV1bJ3B1c2gnXSh7J2snOmJFKDB4NWZkKSwna2l0JzohW10sJ2InOmZ1KGZxLGZOLDB4MCxQWCl9KTtpZihmaD49MHgxKXp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOidub29rJywna2l0JzohW10sJ2InOmZ1KC1maCwweDAsMHgwLFBYKX0pO2NvbnN0IEE5PWZOPj01LjQsQUk9QTk\/Zk4tKGZOPj02LjE\/My4xOjIuNik6Zk47endbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyM2MpLCdraXQnOiEhW10sJ2InOmZ1KC1maCxBSSxQWCxQQyl9KSxmTSgwLjMsUFgsMS4zLFBYKSxBOSYmKHp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOidiZWQnLCdiJzpmdShBSSxmTixQWCxQQyl9KSxmWShBSSxQWCswLjMsMHgwLDB4MSwweDEsMHgwLDAuODUpKTt9ZWxzZXtjb25zdCBBcj1mTj49Ni4xPzMuMToyLjY7endbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHg2MzMpLCdiJzpmdSgweDAsUFUsMHgwLFBYKX0seydrJzpiRSgweDVmZCksJ2tpdCc6IVtdLCdiJzpmdShQVSxmTi1QRSwweDAsUFgpfSx7J2snOmJFKDB4NGMyKSwnYic6ZnUoZk4tUEUsZk4sMHgwLFBYKX0pLGZZKGZOLVBFLDAuNjUsMHgwLDB4MSwweDEsMHgwLDAuOCk7aWYoZmg+PTB4MSl6d1tiRSgweDU1NSldWydwdXNoJ10oeydrJzpiRSgweDVmZCksJ2tpdCc6IVtdLCdiJzpmdSgtZmgsMHgwLDB4MCxQWCl9KTt6d1sncm9vbXMnXVtiRSgweDJiMyldKHsnayc6J2JlZCcsJ2InOmZ1KC1maCxBcixQWCxQQyl9LHsnayc6YkUoMHgyM2MpLCdraXQnOiEhW10sJ2InOmZ1KEFyLGZOLFBYLFBDKX0pLGZZKDAuNDUsUFgsMHgxLDB4MCwweDAsMHgxLDAuODUpLGZNKEFyKzAuMyxQWCxNYXRoW2JFKDB4NDNjKV0oZk4tUEUtMC4xLEFyKzEuMyksUFgpO31yZXR1cm4gendbYkUoMHg1NTUpXVtiRSgweDJhNildKEFoPT4oQWhbJ2snXT09PWJFKDB4MjNjKXx8QWhbJ2snXT09PWJFKDB4MjE0KSkmJiFQaihBaFsnYiddKSlbYkUoMHg2NjEpXTt9aWYoZmM9PT0nbmFycm93J3x8ZmM9PT0nbmFycm93MCcpe2NvbnN0IEFoPTIuMixBYz1mYz09PSduYXJyb3cwJz8weDA6UEMtQWg+PTUuNj9NYXRoW2JFKDB4NDNjKV0oMy4xLE1hdGhbYkUoMHg0NzIpXSgoUEMtQWgpLzB4MioweDIpLzB4Mik6MHgwO2lmKGZoPj0weDEpendbJ3Jvb21zJ11bYkUoMHgyYjMpXSh7J2snOidzdG9yZScsJ2InOmZ1KC1maCwweDAsMHgwLEFoKX0pO3JldHVybiB6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDRjMiksJ2InOmZ1KDB4MCxQRSwweDAsQWgpLCd0dWInOiFbXX0seydrJzpiRSgweDYzMyksJ2InOmZ1KFBFLGZOLDB4MCxBaCl9KSxmWShQRSwxLjI1LDB4MCwweDEsLTB4MSwweDAsMC44KSx6d1tiRSgweDU1NSldWydwdXNoJ10oeydrJzpiRSgweDIzYyksJ2tpdCc6ISFbXSwnYic6ZnUoLWZoLGZOLEFoLFBDLUFjKX0pLGZNKFBFKzAuMyxBaCxNYXRoWydtaW4nXShmTi0wLjIsUEUrMS40KSxBaCksQWMmJih6d1sncm9vbXMnXVtiRSgweDJiMyldKHsnayc6YkUoMHgyMTQpLCdiJzpmdSgtZmgsZk4sUEMtQWMsUEMpLCd3cic6WzAuMDgsMi4yXX0pLGZZKGZOLTB4MSxQQy1BYywweDEsMHgwLDB4MCwweDEsMC44NSkpLHp3Wydyb29tcyddWydmaWx0ZXInXShBaz0+KEFrWydrJ109PT1iRSgweDIxNCl8fEFrWydrJ109PT1iRSgweDIzYykpJiYhUGooQWtbJ2InXSkpW2JFKDB4NjYxKV07fWlmKGZjPT09YkUoMHgzM2YpKXtjb25zdCBBaz1NYXRoW2JFKDB4NDUxKV0oMHgxLHpRKSxBaT1QQz43LjUsQU49QWk\/TWF0aFtiRSgweDQ3MildKChQQy00LjgpKjB4MikvMHgyOlBYLEF2PXp3W2JFKDB4MjEzKV0+PTB4Mzc\/MS40OjB4MCxBdT1mTi1BdixBWT1NYXRoW2JFKDB4NDUxKV0oMi45LE1hdGhbYkUoMHg0M2MpXSgweDQsKGZOLTMuNCkvQWspKSxBTT1mTi1BaypBWSxBcT1BWS1maCxBej1BWStBTTtpZihmaD49MHgxKXp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjQyKSwnYic6ZnUoLWZoLDB4MCwweDAsQU4pfSk7endbYkUoMHg1NTUpXVsncHVzaCddKHsnayc6J2JhdGgnLCdiJzpmdSgweDAsUEUsMHgwLFBYKSwndHViJzp6d1tiRSgweDIxMyldPj0weDM3fSksZlkoUEUsTWF0aFtiRSgweDQ1MSldKDAuNjUsUFgtMC45NSksMHgwLDB4MSwtMHgxLDB4MCwwLjgpO2lmKCFBaSYmQXUtZnE+PTB4MSYmTWF0aFtiRSgweDQzYyldKEF1LEF6KS1NYXRoW2JFKDB4NDUxKV0oZnEsQXEpPj0weDEpe2NvbnN0IEFBPU1hdGhbYkUoMHg0NTEpXShmcSxBcSksQXA9TWF0aFtiRSgweDQzYyldKEF1LEF6KTt6d1sncm9vbXMnXVtiRSgweDJiMyldKHsnayc6YkUoMHg2MzMpLCdiJzpmdShQRSxBQSwweDAsQU4pfSx7J2snOmJFKDB4NWZkKSwna2l0JzohW10sJ25vV2FsbCc6ISFbXSwnYic6ZnUoQUEsQXAsMHgwLEFOKX0pO2lmKEF1LUFwPj0wLjkpendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyNDIpLCdiJzpmdShBcCxBdSwweDAsQU4pfSksZlkoQXAsTWF0aFtiRSgweDQ1MSldKDAuMyxBTi0wLjkpLDB4MCwweDEsMHgxLDB4MCwwLjcpO2Vsc2V7aWYoQXUtQXA+MC4wNSl6d1sncm9vbXMnXVt6d1sncm9vbXMnXVsnbGVuZ3RoJ10tMHgxXVsnYiddPWZ1KEFBLEF1LDB4MCxBTik7fX1lbHNle2lmKEF1LWZxPj0xLjUmJkFOLTEuMj49MS4yKXp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4NjMzKSwnYic6ZnUoUEUsZnEsMHgwLEFOKX0seydrJzpiRSgweDYzMyksJ2InOmZ1KGZxLEF1LEFOLTEuMixBTil9LHsnayc6YkUoMHgyNDIpLCdiJzpmdShmcSxBdSwweDAsQU4tMS4yKX0pLGZNKGZxLEFOLTEuMSxmcSxBTi0wLjEpLGZZKGZxKzAuMyxBTi0xLjIsMHgxLDB4MCwweDAsLTB4MSwwLjcpO2Vsc2UgendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6J2hhbGwnLCdiJzpmdShQRSxBdSwweDAsQU4pfSk7fUFpJiYoendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyNDIpLCdiJzpmdSgweDAsUEUsUFgsQU4pfSksZlkoUEUsUFgrMC4xLDB4MCwweDEsLTB4MSwweDAsMC43KSk7aWYoQXYpe3p3Wydyb29tcyddW2JFKDB4MmIzKV0oeydrJzond2MnLCdiJzpmdShBdSxmTiwweDAsUFgpfSksZlkoQXUsTWF0aFtiRSgweDQ1MSldKDAuMyxQWC0wLjkpLDB4MCwweDEsMHgxLDB4MCwwLjcpO2lmKEFpKXp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOidzdG9yZScsJ2InOmZ1KEF1LGZOLFBYLEFOKX0pO31jb25zdCBBUD1Baz09PTB4MT9bYkUoMHgyMTQpLGJFKDB4MjNjKV06W2JFKDB4MjE0KSxiRSgweDIzYyksLi4uQXJyYXkoQWstMHgxKVtiRSgweDM2ZildKCdiZWQnKV07bGV0IEFmPS1maDtmb3IoY29uc3QgQVogb2YgQVApe2NvbnN0IEFPPUFaPT09J2xpdmUnP0FNK2ZoOkFZLEFlPUFmK0FPO2lmKEFaPT09YkUoMHgyMTQpKXt6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDIxNCksJ2InOmZ1KEFmLEFlLEFOLFBDKSwnd3InOltBZiswLjA4LEFmKzIuMl19KTtjb25zdCBBQj1NYXRoW2JFKDB4NDUxKV0oQWYsUEUpKzAuMDUsQWI9TWF0aFtiRSgweDQzYyldKEFlLEF1KS0wLjA1O2lmKEFiLUFCPj0wLjkpZlkoQUIsQU4sMHgxLDB4MCwweDAsMHgxLDAuODUpO31lbHNle3p3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjNjKSwna2l0JzohIVtdLCdiJzpmdShBZixBZSxBTixQQyl9KTtjb25zdCBBZD1NYXRoW2JFKDB4NDNjKV0oTWF0aFtiRSgweDQ1MSldKChBZitBZSkvMHgyLFBFKzAuNyksQXUtMC43KTtmTShBZC0wLjYsQU4sQWQrMC42LEFOKTt9QWY9QWU7fXJldHVybiB6d1tiRSgweDU1NSldW2JFKDB4MmE2KV0oQUM9PihBQ1snayddPT09YkUoMHgyMTQpfHxBQ1snayddPT09YkUoMHgyM2MpKSYmIVBqKEFDWydiJ10pKVtiRSgweDY2MSldO31pZihmYz09PWJFKDB4NDY3KSl7Y29uc3QgQUM9Zk4tMi4xNTtpZihmaD49MHgxKXp3Wydyb29tcyddW2JFKDB4MmIzKV0oeydrJzpiRSgweDI0MiksJ2InOmZ1KC1maCwweDAsMHgwLFBYKX0pO3p3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4NGMyKSwnYic6ZnUoMHgwLFBFLDB4MCxQWCksJ3R1Yic6endbYkUoMHgyMTMpXT49MHgzN30pLGZZKFBFLE1hdGhbYkUoMHg0NTEpXSgwLjY1LFBYLTAuOTUpLDB4MCwweDEsLTB4MSwweDAsMC44KTtpZihBQy1mcT49MS41JiZQWC0xLjI+PTEuMil6d1sncm9vbXMnXVtiRSgweDJiMyldKHsnayc6YkUoMHg2MzMpLCdiJzpmdShQRSxmcSwweDAsUFgpfSx7J2snOmJFKDB4NjMzKSwnYic6ZnUoZnEsQUMsUFgtMS4yLFBYKX0seydrJzonc3RvcmUnLCdiJzpmdShmcSxBQywweDAsUFgtMS4yKX0pLGZNKGZxLFBYLTEuMSxmcSxQWC0wLjEpLGZZKGZxKzAuMyxQWC0xLjIsMHgxLDB4MCwweDAsLTB4MSwwLjcpO2Vsc2UgendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHg2MzMpLCdiJzpmdShQRSxBQywweDAsUFgpfSk7cmV0dXJuIHp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOnp3W2JFKDB4MjEzKV0+PTB4MzI\/J3djJzpiRSgweDI0MiksJ2InOmZ1KEFDLGZOLDB4MCxQWCl9KSxmWShBQyxNYXRoW2JFKDB4NDUxKV0oMC4zLFBYLTAuOSksMHgwLDB4MSwweDEsMHgwLDAuNyksendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6J2JlZCcsJ2InOmZ1KC1maCxQRSswLjk1LFBYLFBDKSwnd3InOmZyP1tQRSswLjk1K2ZoLTIuMixQRSswLjk1K2ZoLTAuMDhdOlswLjA4LDIuMl19KSxmWShQRSswLjA1LFBYLDB4MSwweDAsMHgwLDB4MSwwLjg1KSx6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDIzYyksJ2tpdCc6ISFbXSwnYic6ZnUoUEUrMC45NSxmTi0zLjEsUFgsUEMpfSksZk0oUEUrMS4yLFBYLFBFKzIuNCxQWCksendbJ3Jvb21zJ11bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjE0KSwnYic6ZnUoZk4tMy4xLGZOLFBYLFBDKX0pLGZZKGZOLTMuMDUsUFgsMHgxLDB4MCwweDAsMHgxLDAuODUpLHp3W2JFKDB4NTU1KV1bYkUoMHgyYTYpXShBVD0+KEFUWydrJ109PT1iRSgweDIxNCl8fEFUWydrJ109PT1iRSgweDIzYykpJiYhUGooQVRbJ2InXSkpWydsZW5ndGgnXTt9aWYoZmspe2lmKGZ6PjB4MSlmej0weDE7Y29uc3QgQVQ9Zno\/TWF0aFtiRSgweDQ3MildKFBDKjAuNTUqMHgyKS8weDI6UEMsQW89Zno\/TWF0aFtiRSgweDQzYyldKFBDLEFUKzEuMik6UFg7endbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHg0YzIpLCdiJzpmdSgweDAsUEUsMHgwLFBYKX0seydrJzonaGFsbCcsJ2InOmZ1KFBFLGZxLDB4MCxBbyl9KSxmWShQRSwwLjY1LDB4MCwweDEsLTB4MSwweDAsMC44KTtpZihmaD49MHgxKXp3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOidzdG9yZScsJ2InOmZ1KC1maCwweDAsMHgwLFBDKX0pO2lmKFBDLVBYPj0weDEpe3p3W2JFKDB4NTU1KV1bJ3B1c2gnXSh7J2snOmJFKDB4MjQyKSwnYic6ZnUoMHgwLFBFLFBYLFBDKX0pO2lmKEFvPlBYKzAuOSlmWShQRSxQWCswLjEsMHgwLDB4MSwtMHgxLDB4MCwwLjc1KTtlbHNlIGZNKFBFLFBYLFBFKzAuOSxQWCk7fWlmKFBDLUFvPj0wLjUpe3p3Wydyb29tcyddWydwdXNoJ10oeydrJzpiRSgweDI0MiksJ2InOmZ1KFBFLGZxLEFvLFBDKX0pO2lmKFBDLUFvPj0wLjkpZk0oUEUrMC4zNSxBbyxQRSsxLjI1LEFvKTt9endbJ3Jvb21zJ11bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjNjKSwna2l0JzohIVtdLCdiJzpmdShmcSxmTiwweDAsQVQpfSksZk0oZnEsMC42LGZxLDEuNzUpLGZ6JiYoendbYkUoMHg1NTUpXVsncHVzaCddKHsnayc6YkUoMHgyMTQpLCdiJzpmdShmcSxmTixBVCxQQyksJ3dyJzpmcj9bZk4tZnEtMi4yLGZOLWZxLTAuMDhdW2JFKDB4MzdmKV0oQXc9PkF3K2ZxK2ZoLWZxKTpbZnErMC4wOCxmcSsyLjJdfSksZlkoZnEsQVQrMC4xNSwweDAsMHgxLDB4MSwweDAsMC44NSkpO31lbHNle2NvbnN0IEF3PWZjIT09YkUoMHgzZmIpJiZQQz43LjU\/TWF0aFtiRSgweDQ3MildKChQQy00LjgpKjB4MikvMHgyOlBYO3p3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOidiYXRoJywnYic6ZnUoMHgwLFBFLDB4MCxQWCl9LHsnayc6YkUoMHg2MzMpLCdiJzpmdShQRSxmcSwweDAsQXcpfSksZlkoUEUsTWF0aFtiRSgweDQ1MSldKDAuNjUsUFgtMC45NSksMHgwLDB4MSwtMHgxLDB4MCwwLjgpLHp3W2JFKDB4NTU1KV1bendbJ3Jvb21zJ11bJ2xlbmd0aCddLTB4Ml1bJ3R1YiddPXp3W2JFKDB4MjEzKV0+PTB4Mzc7QXc+UFgrMC44JiYoendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyNDIpLCdiJzpmdSgweDAsUEUsUFgsQXcpfSksZlkoUEUsUFgrMC4xLDB4MCwweDEsLTB4MSwweDAsMC43KSk7aWYoZmM9PT0nYmlnJyl7Y29uc3QgQUY9TWF0aFtiRSgweDQzYyldKDQuMixNYXRoW2JFKDB4NDUxKV0oMy4yLChmTi1mcSkqMC4zMikpLEFHPXpqW2JFKDB4MzE1KV0+PTB4MyYmZk4tZnE+PTMuNiszLjIrMy4yLEFMPWZOLUFGLShBRz8zLjI6MHgwKSxBSz1BTCsoQUc\/My4yOjB4MCk7aWYoZmg+PTB4MSl6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDI0MiksJ2InOmZ1KC1maCwweDAsMHgwLFBYKX0pO3JldHVybiB6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzonaGFsbCcsJ2InOmZ1KGZxLEFLLDB4MCwxLjIpfSksZk0oZnEsMC4xNSxmcSwxLjA1KSx6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzond2MnLCdiJzpmdShBTC0xLjMsQUwsMS4yLFBYKX0pLGZZKEFMLTEuMywxLjIsMHgxLDB4MCwweDAsLTB4MSwwLjY1KSx6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzonbm9vaycsJ2tpdCc6IVtdLCdiJzpmdShmcSxBTC0xLjMsMS4yLFBYKX0pLGZNKGZxKzAuMjUsMS4yLGZxKzEuMTUsMS4yKSx6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzonYmVkJywnYic6ZnUoLWZoLGZxLFBYLFBDKSwnd3InOmZyP1tmcStmaC0yLjIsZnErZmgtMC4wOF06WzAuMDgsMi4yXX0pLGZZKFBFKzAuMyxQWCwweDEsMHgwLDB4MCwweDEsMC45KSx6d1tiRSgweDU1NSldWydwdXNoJ10oeydrJzonbGl2ZScsJ2tpdCc6ISFbXSwnYic6ZnUoZnEsQUwsUFgsUEMpfSx7J2snOmJFKDB4MjE0KSwnYic6ZnUoQUssZk4sMHgwLFBDKX0pLGZZKEFLLDAuMTUsMHgwLDB4MSwweDEsMHgwLDAuODUpLEFHJiYoendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHgyMTQpLCdiJzpmdShBTCxBSywxLjIsUEMpfSksZlkoQUwrMC4zLDEuMiwweDEsMHgwLDB4MCwweDEsMC44NSkpLHp3W2JFKDB4NTU1KV1bYkUoMHgyYTYpXShBaj0+KEFqWydrJ109PT1iRSgweDIxNCl8fEFqWydrJ109PT1iRSgweDIzYykpJiYhUGooQWpbJ2InXSkpWydsZW5ndGgnXTt9Y29uc3QgQWE9ZmMhPT1iRSgweDIyOSkmJmZoPj0weDImJmZOPj0weDYsQXM9Zk4tMy42LEFWPU1hdGhbJ21pbiddKGZOLEFzKzAuOTUpLEFFPUFhP0FzOmZjIT09J3N3YXAnJiZmTi1maD49MHg3JiZmTi1mcT49MHgxP01hdGhbYkUoMHg0M2MpXSgzLjYsZk4tMy40KTpQRSswLjk1LEFVPWZOLEFYPUFhP0FWOmZxLEFXPWZOLUFYO2lmKGZoPj0weDEpendbYkUoMHg1NTUpXVtiRSgweDJiMyldKEFhP3snayc6YkUoMHg1ZmQpLCdraXQnOiFbXSwnbm9XYWxsJzohIVtdLCdiJzpmdSgtZmgsMHgwLDB4MCxBdyl9Onsnayc6YkUoMHgyNDIpLCdiJzpmdSgtZmgsMHgwLDB4MCxBdyl9KTtpZihBYSl6d1tiRSgweDU1NSldW2JFKDB4MmI1KV0oQWo9PkFqWydrJ109PT0naGFsbCcpWydiJ109ZnUoUEUsQVYsMHgwLEF3KTtpZihBYSl6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDIzYyksJ2tpdCc6ISFbXSwnYic6ZnUoLWZoLEFzLEF3LFBDKX0seydrJzpiRSgweDIxNCksJ2InOmZ1KEFzLGZOLEF3LFBDKX0pLGZNKFBFKzAuMyxBdyxQRSsxLjUsQXcpLGZZKEFzKzAuMDUsQXcsMHgxLDB4MCwweDAsMHgxLDAuODUpO2Vsc2V7aWYoZmM9PT1iRSgweDIyOSkpendbYkUoMHg1NTUpXVsncHVzaCddKHsnayc6YkUoMHgyM2MpLCdraXQnOiEhW10sJ2InOmZ1KC1maCxBRSxBdyxQQyl9LHsnayc6YkUoMHgyMTQpLCdiJzpmdShBRSxBVSxBdyxQQyl9KSxmTShQRSxBdyxQRSswLjg1LEF3KSxmWShQRSswLjk1LEF3LDB4MSwweDAsMHgwLDB4MSwwLjg1KTtlbHNle3p3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOmJFKDB4MjE0KSwnYic6ZnUoLWZoLEFFLEF3LFBDKSwnd3InOmZyP1tBRStmaC0yLjIsQUUrZmgtMC4wOF06WzAuMDgsMi4yXX0pLGZZKFBFLEF3LDB4MSwweDAsMHgwLDB4MSwwLjg1KSx6d1tiRSgweDU1NSldW2JFKDB4MmIzKV0oeydrJzpiRSgweDIzYyksJ2tpdCc6ISFbXSwnYic6ZnUoQUUsQVUsQXcsUEMpfSk7aWYoZnEtMC4wNS1NYXRoW2JFKDB4NDUxKV0oUEUrMHgxLEFFKzAuMSk+PTAuNilmTShNYXRoWydtYXgnXShQRSsweDEsQUUrMC4xKSxBdyxmcS0wLjA1LEF3KTt9fWlmKEFXPj0wLjkpe2xldCBBaj1BWDtpZighQWEmJnp3W2JFKDB4MjEzKV0+PTB4MzcmJkFXPj0xLjIpe2NvbnN0IEFRPU1hdGhbYkUoMHg0M2MpXSgxLjQsQVcpO3p3W2JFKDB4NTU1KV1bYkUoMHgyYjMpXSh7J2snOid3YycsJ2InOmZ1KEFqLEFqK0FRLDB4MCxBdz5QWD9QWDpBdyl9KSxmWShBaixNYXRoW2JFKDB4NDUxKV0oMC4yLFBYLTAuOTUpLDB4MCwweDEsMHgxLDB4MCwwLjcpLEFqKz1BUTtpZihBdz5QWCl6d1tiRSgweDU1NSldWydwdXNoJ10oeydrJzpiRSgweDI0MiksJ2InOmZ1KGZxLGZxK0FRLFBYLEF3KX0pO31jb25zdCBBSD1mTi1BajtpZihBSD49MC45KXtjb25zdCBBbD1mdShBaixmTiwweDAsQXcpLEFtPXp3W2JFKDB4NTU1KV1bYkUoMHgyYjUpXShBSj0+QUpbJ2snXT09PWJFKDB4MjNjKSk7aWYoQUg+PTB4MSYmQW0mJlBGKEFsLEFtWydiJ10pPj0weDEpendbYkUoMHg1NTUpXVtiRSgweDJiMyldKHsnayc6YkUoMHg1ZmQpLCdraXQnOiFbXSwnbm9XYWxsJzohIVtdLCdiJzpBbH0pO2Vsc2V7aWYoQWEpendbYkUoMHg1NTUpXVsncHVzaCddKHsnayc6J3N0b3JlJywnYic6QWx9KSxmWShBaiswLjMsQXcsMHgxLDB4MCwweDAsLTB4MSwwLjcpO2Vsc2V7aWYoQUg8MS42KXp3W2JFKDB4NTU1KV1bJ3B1c2gnXSh7J2snOidzdG9yZScsJ2InOkFsfSk7ZWxzZSB6d1tiRSgweDU1NSldWydwdXNoJ10oeydrJzpiRSgweDVmZCksJ2tpdCc6IVtdLCdiJzpBbH0pO319fX19cmV0dXJuIHp3Wydyb29tcyddW2JFKDB4MmE2KV0oQUo9PihBSlsnayddPT09J2JlZCd8fEFKWydrJ109PT1iRSgweDIzYykpJiYhUGooQUpbJ2InXSkpW2JFKDB4NjYxKV07fSxQUj0oZnIsZmgpPT56d1tiQigweDU1NSldWydmaW5kSW5kZXgnXShmYz0+ZnI+PWZjWydiJ11bMHgwXSYmZnI8PWZjWydiJ11bMHgyXSYmZmg+PWZjWydiJ11bMHgxXSYmZmg8PWZjWydiJ11bMHgzXSksUHk9ZnI9Pntjb25zdCBiVT1iQjtmb3IobGV0IGZwPTB4MDtmcDx6d1tiVSgweDU1NSldW2JVKDB4NjYxKV07ZnArKyl7Y29uc3QgZlo9endbYlUoMHg1NTUpXVtmcF07aWYoZlpbJ2snXSE9PWJVKDB4MjQyKSljb250aW51ZTtjb25zdCBmTz16d1tiVSgweDM4OSldW2JVKDB4NjY4KV0oZmU9Pntjb25zdCBiWD1iVTtpZighZmVbYlgoMHg0MzgpXSlyZXR1cm4hW107Y29uc3QgZkI9ZmVbJ2dhcCddLGZkPShmQlsweDBdWzB4MF0rZkJbMHgxXVsweDBdKS8weDIsZkM9KGZCWzB4MF1bMHgxXStmQlsweDFdWzB4MV0pLzB4MixmVD1NYXRoW2JYKDB4M2FkKV0oZkJbMHgwXVsweDFdLWZCWzB4MV1bMHgxXSk8MC4wMTtyZXR1cm4oZlQ\/UFIoZmQsZkMtMC4yNSk6UFIoZmQtMC4yNSxmQykpPT09ZnB8fChmVD9QUihmZCxmQyswLjI1KTpQUihmZCswLjI1LGZDKSk9PT1mcDt9KTtpZighZk8pZlpbJ2snXT1iVSgweDVmZCk7fWNvbnN0IGZoPXp3W2JVKDB4NTU1KV1bJ21hcCddKGZlPT4oeyd4JzooZmVbJ2InXVsweDBdK2ZlWydiJ11bMHgyXSkvMHgyLCd5JzooZmVbJ2InXVsweDFdK2ZlWydiJ11bMHgzXSkvMHgyLCdrJzpmZVsnayddfSkpLGZjPVtdLGZrPShmclsneCddKzAuNStmclsnZHgnXSowLjUpKlUsZmk9KGZyWyd5J10rMC41K2ZyWydkeSddKjAuNSkqVSxmTj1may1mclsnZHgnXSowLjMsZnY9ZmktZnJbJ2R5J10qMC4zO2xldCBmdT1QUihmTixmdik7aWYoZnU8MHgwKXtsZXQgZmU9MHgxO3p3Wydyb29tcyddW2JVKDB4M2I5KV0oKGZCLGZkKT0+e2NvbnN0IGJXPWJVLGZDPU1hdGhbYlcoMHg0NTEpXShmQlsnYiddWzB4MF0tZk4sMHgwLGZOLWZCWydiJ11bMHgyXSksZlQ9TWF0aFsnbWF4J10oZkJbJ2InXVsweDFdLWZ2LDB4MCxmdi1mQlsnYiddWzB4M10pLGZvPU1hdGhbYlcoMHg0NzUpXShmQyxmVCk7Zm88ZmUmJihmZT1mbyxmdT1mZCk7fSk7fWlmKGZ1PDB4MCl7bGV0IGZCPTB4NDt6d1tiVSgweDU1NSldWydmb3JFYWNoJ10oKGZkLGZDKT0+e2NvbnN0IGJGPWJVO2lmKGZkWydrJ10hPT1iRigweDYzMykpcmV0dXJuO2NvbnN0IGZUPU1hdGhbYkYoMHg0NTEpXShmZFsnYiddWzB4MF0tZk4sMHgwLGZOLWZkWydiJ11bMHgyXSksZm89TWF0aFtiRigweDQ1MSldKGZkWydiJ11bMHgxXS1mdiwweDAsZnYtZmRbJ2InXVsweDNdKSxmdz1NYXRoW2JGKDB4NDc1KV0oZlQsZm8pO2Z3PGZCJiYoZkI9ZncsZnU9ZkMpO30pO31mb3IoY29uc3QgZmQgb2YgendbYlUoMHgzODkpXSl7Y29uc3QgZkM9ZmRbYlUoMHgyOWYpXSxmVD0oZkNbMHgwXVsweDBdK2ZDWzB4MV1bMHgwXSkvMHgyLGZvPShmQ1sweDBdWzB4MV0rZkNbMHgxXVsweDFdKS8weDIsZnc9TWF0aFtiVSgweDNhZCldKGZDWzB4MF1bMHgxXS1mQ1sweDFdWzB4MV0pPDAuMDEsZmE9Znc\/UFIoZlQsZm8tMC4yNSk6UFIoZlQtMC4yNSxmbyksZnM9Znc\/UFIoZlQsZm8rMC4yNSk6UFIoZlQrMC4yNSxmbyk7aWYoZmE+PTB4MCYmZnM+PTB4MCYmZmEhPT1mcylmY1sncHVzaCddKFtmYSxmcyxmVCxmbywhZmRbJ2xlYWYnXSwhIWZkW2JVKDB4NDM4KV1dKTt9endbJ3Jvb21zJ11bYlUoMHgzYjkpXSgoZlYsZkUpPT57Y29uc3QgYkc9YlU7aWYoZlZbJ2snXSE9PWJHKDB4NWZkKSlyZXR1cm47endbYkcoMHg1NTUpXVsnZm9yRWFjaCddKChmVSxmWCk9Pntjb25zdCBiTD1iRztpZihmRT09PWZYKXJldHVybjtjb25zdCBmVz1NYXRoW2JMKDB4NDNjKV0oZlZbJ2InXVsweDJdLGZVWydiJ11bMHgyXSktTWF0aFtiTCgweDQ1MSldKGZWWydiJ11bMHgwXSxmVVsnYiddWzB4MF0pLGZGPU1hdGhbYkwoMHg0M2MpXShmVlsnYiddWzB4M10sZlVbJ2InXVsweDNdKS1NYXRoWydtYXgnXShmVlsnYiddWzB4MV0sZlVbJ2InXVsweDFdKTtpZigoTWF0aFsnYWJzJ10oZlcpPDAuMDImJmZGPjAuOHx8TWF0aFtiTCgweDNhZCldKGZGKTwwLjAyJiZmVz4wLjgpJiZbYkwoMHg2MzMpLCdsaXZlJyxiTCgweDIxNCksYkwoMHg1ZmQpXVtiTCgweDUzNyldKGZVWydrJ10pJiYhZmNbYkwoMHg2NjgpXShmRz0+ZkdbMHgwXT09PWZFJiZmR1sweDFdPT09Zlh8fGZHWzB4MF09PT1mWCYmZkdbMHgxXT09PWZFKSlmY1tiTCgweDJiMyldKFtmRSxmWCwoZmhbZkVdWyd4J10rZmhbZlhdWyd4J10pLzB4MiwoZmhbZkVdWyd5J10rZmhbZlhdWyd5J10pLzB4MiwhIVtdLCFbXV0pO30pO30pO2NvbnN0IGZZPWZWPT57Y29uc3QgYks9YlUsZkU9Zlc9PnR5cGVvZiBmVj09PWJLKDB4M2I3KT9mVih6d1tiSygweDU1NSldW2ZXXSk6endbYksoMHg1NTUpXVtmV11bJ2snXT09PWZWLGZVPW5ldyBTZXQoZnU+PTB4MD9bZnVdOltdKSxmWD1bLi4uZlVdO3doaWxlKGZYW2JLKDB4NjYxKV0pe2NvbnN0IGZXPWZYW2JLKDB4MjJiKV0oKTtmb3IoY29uc3QgZkYgb2YgZmMpe2NvbnN0IGZHPWZGWzB4MF09PT1mVz9mRlsweDFdOmZGWzB4MV09PT1mVz9mRlsweDBdOi0weDE7aWYoZkc8MHgwfHxmVVtiSygweDMwYildKGZHKXx8ZlYmJmZFKGZHKSljb250aW51ZTtmVVsnYWRkJ10oZkcpLGZYWydwdXNoJ10oZkcpO319cmV0dXJuIGZVO30sZk09ZlkobnVsbCksZnE9ZlkoJ2JlZCcpLGZ6PWZZKCdsaXZlJyksZlA9ZlkoZlY9PmZWWydrJ109PT1iVSgweDIxNCl8fGZWWydrJ109PT0nbGl2ZScpLGZmPXp3W2JVKDB4NTU1KV1bYlUoMHgyYTYpXSgoZlYsZkUpPT5mVlsnayddPT09YlUoMHgyMTQpJiZmTVsnaGFzJ10oZkUpJiYhZnpbYlUoMHgzMGIpXShmRSkpW2JVKDB4NjYxKV07bGV0IGZBPXp3W2JVKDB4NTU1KV1bYlUoMHgyYTYpXSgoZlYsZkUpPT4hZk1bJ2hhcyddKGZFKSYmZlZbJ2snXSE9PWJVKDB4NWZkKSYmIWZWW2JVKDB4NWJlKV0pW2JVKDB4NjYxKV07endbYlUoMHg1NTUpXVtiVSgweDNiOSldKChmVixmRSk9Pntjb25zdCBiaj1iVTtpZihmVlsnayddIT09YmooMHg0YzIpJiZmVlsnayddIT09J3djJylyZXR1cm47Y29uc3QgZlU9ZmNbYmooMHg2NjgpXShmWD0+ZlhbMHg1XSYmKGZYWzB4MF09PT1mRXx8ZlhbMHgxXT09PWZFKSYmW2JqKDB4NjMzKSxiaigweDVmZCldWydpbmNsdWRlcyddKHp3W2JqKDB4NTU1KV1bZlhbMHgwXT09PWZFP2ZYWzB4MV06ZlhbMHgwXV1bJ2snXSkpO2lmKCFmVSlmQSs9ZlZbJ2snXT09PSd3Yyc\/MHg0OjB4MztpZighZlBbYmooMHgzMGIpXShmRSkpZkErPTB4NDt9KTtmb3IobGV0IGZWPTB4MDtmVjx6d1tiVSgweDU1NSldW2JVKDB4NjYxKV07ZlYrKylmb3IobGV0IGZFPWZWKzB4MTtmRTx6d1tiVSgweDU1NSldW2JVKDB4NjYxKV07ZkUrKyl7Y29uc3QgZlU9endbYlUoMHg1NTUpXVtmVl0sZlg9endbYlUoMHg1NTUpXVtmRV0sZlc9TWF0aFtiVSgweDQzYyldKGZVWydiJ11bMHgyXSxmWFsnYiddWzB4Ml0pLU1hdGhbYlUoMHg0NTEpXShmVVsnYiddWzB4MF0sZlhbJ2InXVsweDBdKSxmRj1NYXRoW2JVKDB4NDNjKV0oZlVbJ2InXVsweDNdLGZYWydiJ11bMHgzXSktTWF0aFtiVSgweDQ1MSldKGZVWydiJ11bMHgxXSxmWFsnYiddWzB4MV0pO2lmKGZXPjAuMDUmJmZGPjAuMDUpZkErPTB4NTt9cmV0dXJuIGZBKz16d1tiVSgweDU1NSldW2JVKDB4MmE2KV0oZkc9PmZHWydrJ109PT1iVSgweDIxNCkmJiFmR1tiVSgweDI0OCldfHxmR1snayddPT09YlUoMHgyNDIpKVtiVSgweDJhNildKGZHPT57Y29uc3QgYkg9YlUsZkw9endbYkgoMHg1NTUpXVtiSCgweDVlYildKGZHKTtyZXR1cm4hZmNbYkgoMHg2NjgpXShmSz0+ZktbMHg1XSYmKGZLWzB4MF09PT1mTHx8ZktbMHgxXT09PWZMKSk7fSlbYlUoMHg2NjEpXSoweDIsZkErPXp3W2JVKDB4NTU1KV1bJ3JlZHVjZSddKChmRyxmTCxmSyk9PmZHKyhmTFsnayddPT09J2JhdGgnJiYhZnFbYlUoMHgzMGIpXShmSyk\/MHgxOjB4MCksMHgwKSx7J25vZGVzJzpmaCwnZWRnZXMnOmZjLCdzdGFydCc6ZnUsJ2N4JzpmaywnY3knOmZpLCdiYWQnOmZBLCd0aHJ1TGl2ZSc6ZmYsJ3RocnVCZWQnOnp3Wydyb29tcyddW2JVKDB4MmE2KV0oKGZHLGZMKT0+KGZHWydrJ109PT1iVSgweDIzYyl8fGZHWydrJ109PT1iVSgweDRjMil8fGZHWydrJ109PT0nd2MnfHxmR1snayddPT09YlUoMHg2MzMpKSYmZk1bYlUoMHgzMGIpXShmTCkmJiFmcVtiVSgweDMwYildKGZMKSlbJ2xlbmd0aCddLCdhbGwnOmZNLCdub0xpdmUnOmZ6LCdvd24nOnp3W2JVKDB4NTU1KV1bYlUoMHgzN2YpXSgoZkcsZkwpPT5mY1tiVSgweDY2OCldKGZLPT5mS1sweDVdJiYoZktbMHgwXT09PWZMfHxmS1sweDFdPT09ZkwpKSl9O30sUHg9ZnI9Pntjb25zdCBiUT1iQjtmb3IoY29uc3QgW2ZoLGZjXW9mW1tmclsnYiddWzB4MF0tMC4yNSwoZnJbJ2InXVsweDFdK2ZyWydiJ11bMHgzXSkvMHgyXSxbZnJbJ2InXVsweDJdKzAuMjUsKGZyWydiJ11bMHgxXStmclsnYiddWzB4M10pLzB4Ml1dKXtjb25zdCBmaz1NYXRoW2JRKDB4NTNiKV0oZmgvVSksZmk9TWF0aFtiUSgweDUzYildKGZjL1UpO2lmKGZrPj0weDAmJmZpPj0weDAmJmZrPFgmJmZpPEYmJllbaEQoZmssZmkpXT09PUopcmV0dXJuISFbXTt9cmV0dXJuIVtdO30sUGc9KCk9Pntjb25zdCBibD1iQixmcj16d1tibCgweDM4OSldWydmaWx0ZXInXShmYz0+ZmNbJ2xlYWYnXSlbYmwoMHgzN2YpXShmYz0+e2NvbnN0IGJtPWJsLGZrPWZjW2JtKDB4NDM4KV1bMHgwXSxmaT1mY1snbGVhZiddWzB4MV0sZk49ZmNbJ2dhcCddWzB4MV0sZnY9W2ZrWzB4MF0sZk5bMHgwXSxmaVsweDBdLGZOWzB4MF0rZmlbMHgwXS1ma1sweDBdXSxmdT1bZmtbMHgxXSxmTlsweDFdLGZpWzB4MV0sZk5bMHgxXStmaVsweDFdLWZrWzB4MV1dO3JldHVybltNYXRoW2JtKDB4NDNjKV0oLi4uZnYpLE1hdGhbYm0oMHg0M2MpXSguLi5mdSksTWF0aFtibSgweDQ1MSldKC4uLmZ2KSxNYXRoW2JtKDB4NDUxKV0oLi4uZnUpXTt9KTtsZXQgZmg9MHgwO2ZvcihsZXQgZmM9MHgwO2ZjPGZyW2JsKDB4NjYxKV07ZmMrKylmb3IobGV0IGZrPWZjKzB4MTtmazxmcltibCgweDY2MSldO2ZrKyspaWYoZnJbZmNdWzB4MF08ZnJbZmtdWzB4Ml0tMC4wNSYmZnJbZmtdWzB4MF08ZnJbZmNdWzB4Ml0tMC4wNSYmZnJbZmNdWzB4MV08ZnJbZmtdWzB4M10tMC4wNSYmZnJbZmtdWzB4MV08ZnJbZmNdWzB4M10tMC4wNSlmaCsrO3JldHVybiBmaDt9LFB0PSgpPT57Y29uc3QgYko9YkIsZnI9endbJ3Jvb21zJ11bYkooMHgyYTYpXShmaD0+ZmhbJ2snXT09PWJKKDB4NjMzKSlbYkooMHg0YjApXSgoZmgsZmMpPT5maCsoZmNbJ2InXVsweDJdLWZjWydiJ11bMHgwXSkqKGZjWydiJ11bMHgzXS1mY1snYiddWzB4MV0pLDB4MCkvTWF0aFtiSigweDQ1MSldKDB4MSx6d1tiSigweDIxMyldKTtyZXR1cm4gTWF0aFtiSigweDQ1MSldKDB4MCxmci0wLjE4KSoweDEyYzt9LFBEPSgpPT57Y29uc3QgYlI9YkIsZnI9KGZoLGZjKT0+e2NvbnN0IGJuPXYsZms9TWF0aFtibigweDUzYildKGZoL1UpLGZpPU1hdGhbJ2Zsb29yJ10oZmMvVSk7cmV0dXJuIGZrPj0weDAmJmZpPj0weDAmJmZrPFgmJmZpPEYmJllbaEQoZmssZmkpXT09PUs7fTtyZXR1cm4gendbYlIoMHg1NTUpXVtiUigweDJhNildKGZoPT5maFsnayddPT09J2JlZCcmJltbZmhbJ2InXVsweDBdLTAuMjUsKGZoWydiJ11bMHgxXStmaFsnYiddWzB4M10pLzB4Ml0sW2ZoWydiJ11bMHgyXSswLjI1LChmaFsnYiddWzB4MV0rZmhbJ2InXVsweDNdKS8weDJdLFsoZmhbJ2InXVsweDBdK2ZoWydiJ11bMHgyXSkvMHgyLGZoWydiJ11bMHgxXS0wLjI1XSxbKGZoWydiJ11bMHgwXStmaFsnYiddWzB4Ml0pLzB4MixmaFsnYiddWzB4M10rMC4yNV1dW2JSKDB4NjY4KV0oZmM9PmZyKGZjWzB4MF0sZmNbMHgxXSkpKVtiUigweDY2MSldKjB4MTQrKHp3W2JSKDB4NTU1KV1bJ3NvbWUnXShmaD0+ZmhbJ2snXT09PWJSKDB4MjQyKSk\/MHgwOjB4Nik7fSxQUz16d1tiQigweDIxMyldLSh6d1sna25lZUFyZWEnXXx8MHgwKSxmMD1mcj0+e2NvbnN0IGJ5PWJCLGZoPWZyWydiJ11bMHgyXS1mclsnYiddWzB4MF0sZmM9ZnJbJ2InXVsweDNdLWZyWydiJ11bMHgxXTtyZXR1cm57J2EnOmZoKmZjLCdzJzpNYXRoW2J5KDB4NDNjKV0oZmgsZmMpfTt9LGYxPSgpPT56d1tiQigweDU1NSldW2JCKDB4MmE2KV0oZnI9Pntjb25zdCBieD1iQixmaD1mMChmcik7cmV0dXJuIGZyWydrJ109PT1ieCgweDIxNCkmJihmaFsncyddPChmcltieCgweDI0OCldPzB4MjoyLjUpfHxmaFsnYSddPChmclsnbm9XYWxsJ10\/NS41OjB4OCkpfHxmclsnayddPT09YngoMHgyM2MpJiYoZmhbJ3MnXTwoendbYngoMHg1NTUpXVsnc29tZSddKGZjPT5mY1snayddPT09YngoMHg1ZmQpJiYhZmNbYngoMHgyNDgpXSYmKGZjWydiJ11bMHgyXS1mY1snYiddWzB4MF0pKihmY1snYiddWzB4M10tZmNbJ2InXVsweDFdKT49MHg4KT8yLjI6Mi42KXx8ZmhbJ2EnXTwoendbYngoMHg1NTUpXVsnc29tZSddKGZjPT5mY1snayddPT09YngoMHg1ZmQpJiYhZmNbYngoMHgyNDgpXSYmKGZjWydiJ11bMHgyXS1mY1snYiddWzB4MF0pKihmY1snYiddWzB4M10tZmNbJ2InXVsweDFdKT49MHg4KT83LjU6UFM8MHgyMz84LjU6UFM8MHgzMj8weGI6MHhlKSk7fSlbYkIoMHg2NjEpXSxmMj0oKT0+endbYkIoMHg1NTUpXVtiQigweDRiMCldKChmcixmaCk9Pntjb25zdCBiZz1iQixmYz1mMChmaCksZms9ZmhbJ2snXT09PWJnKDB4MjE0KT8weGQ6ZmhbJ2snXT09PWJnKDB4MjNjKT9NYXRoW2JnKDB4NDUxKV0oMHgxNCxQUyowLjQyKToweDA7cmV0dXJuIGZyKyhmaz9NYXRoW2JnKDB4M2FkKV0oZmNbJ2EnXS1maykvZms6MHgwKTt9LDB4MCksZjM9W2JCKDB4NGExKSxiQigweDIyOSksYkIoMHg0NjcpLGJCKDB4MzNmKSxiQigweDI5NyksYkIoMHgzODApLGJCKDB4MjJjKSxiQigweDNmYiksYkIoMHg2NWIpLCdsaW5lJyxiQigweDJiNiksYkIoMHgzNmEpXTtpZihQQz49MHgzJiZQVD49NC4zKXtsZXQgZnI9bnVsbDtjb25zdCBmaD1bXSxmYz16YSUweDI9PT0weDEsZms9UGQ\/KFBxWyd4J10rMC41KSpVLVBwOihQcVsneSddKzAuNSkqVS1QTyxmaT1maz5QVC8weDI7aWYoendbYkIoMHg0NmYpXSl7Y29uc3QgZk49UEwoUFQvMHgyKXx8UEwoUFQvMHgyLTAuNSl8fFBMKFBULzB4MiswLjUpO2lmKGZOJiZQVD49MHg5JiZQQz49MHg1KXtjb25zdCBmdj1QbighW10sMHgwLCdoZWFkJyksZnU9UHkoZk4pLGZZPWZ2KjB4OTYrZnVbYkIoMHgzMTMpXSoweDY0K1BnKCkqMHgxOStmMSgpKjB4MjgrZjIoKSoweGM7ZmhbYkIoMHgyYjMpXSh7J3YnOmZZLCdmJzohW10sJ29mZic6MHgwLCdsYXknOmJCKDB4NDZmKSwnZW50cnknOmZOfSk7fX1lbHNlIGZvcihjb25zdCBmTSBvZiB6d1snZW50cnlTdHVkaW8nXT9bZmldOltmYywhZmNdKXtsZXQgZnE9endbYkIoMHgzNjkpXT8weDA6LTB4MSxmej16d1tiQigweDM2OSldP1BxOm51bGw7aWYoIXp3W2JCKDB4MzY5KV0pZm9yKGxldCBmUD0weDA7ZlA8PVBULTQuMztmUCs9MC41KXtjb25zdCBmZj1QSyhmTSxmUCk7aWYoZmYpe2ZxPWZQLGZ6PWZmO2JyZWFrO319aWYoZnE8MHgwKWNvbnRpbnVlO2Zvcihjb25zdCBmQSBvZiB6d1tiQigweDM2OSldP1tiQigweDJiNildOmYzKXtjb25zdCBmcD1mQVtiQigweDUzYyldKCdzaWRlJyk7aWYoZnAmJihQVC1mcTwzLjgrMHgzfHxQQz4weGIpKWNvbnRpbnVlO2lmKGZBPT09J2JpZycmJihQVC1mcTwxMC42fHxQQzwweDV8fHp3W2JCKDB4MjEzKV08MHgzYSkpY29udGludWU7aWYoZkE9PT1iQigweDM2YSkmJihQVC1mcTw3LjZ8fFBDPDUuNXx8elE8MHgyKSljb250aW51ZTtpZihmQT09PWJCKDB4NDY3KSYmKFBULWZxPDkuNHx8UEM8MHg1fHxQQz43LjYpKWNvbnRpbnVlO2lmKGZBPT09J3BhY2snJiYoUFQtZnE8Mi45Kk1hdGhbYkIoMHg0NTEpXSgweDEselEpKzMuNnx8UEM8MHg1KSljb250aW51ZTtpZihmQVtiQigweDUzYyldKGJCKDB4Mjk3KSkmJihQVC1mcTw0LjN8fFBULWZxPj01LjJ8fFBDPDYuNSkpY29udGludWU7aWYoZkE9PT1iQigweDM4MCkmJighUG18fFBDPjkuNSkpY29udGludWU7aWYoIWZBW2JCKDB4NTNjKV0oJ25hcnJvdycpJiZmQSE9PSdsaW5lJyYmUFQtZnE8MHg1KWNvbnRpbnVlO2lmKGZBPT09YkIoMHgzNzMpJiYoUEM+NS4yfHxQVC1mcTw2LjUpKWNvbnRpbnVlO2lmKGZBPT09YkIoMHgyYjYpJiYoendbYkIoMHgyMTMpXT49MHgyYXx8UEM8NC42KSljb250aW51ZTtpZihQQzw0LjQmJmZBIT09YkIoMHgzNzMpKWNvbnRpbnVlO2NvbnN0IGZaPWZBPT09YkIoMHgzNmEpP1BMKGZNP1BULShmcSs0LjIpOmZxKzQuMik6Zno7aWYoIWZaKWNvbnRpbnVlO2NvbnN0IGZPPVBuKGZNLGZxLGZBKSxmZT1QeShmWiksZkI9UGcoKSxmZD1mMSgpO2lmKHp3W2JCKDB4MzY5KV0mJihmT3x8ZmVbYkIoMHgzMTMpXXx8ZkJ8fGZkKSljb250aW51ZTtjb25zdCBmQz1mTyoweDk2K2ZlW2JCKDB4MzEzKV0qMHg2NCtmZVtiQigweDYyYyldKihQUz49MHgzYz8weDNjOjB4ZikrZkIqMHgxOStNYXRoW2JCKDB4M2FkKV0oelEtUEooKSkqMHg2NCsoZkE9PT1iQigweDNmYik\/LTB4YToweDApKyhmQT09PSdzd2FwJz8weDI6MHgwKSsoZkE9PT1iQigweDMzZik\/LTB4MzoweDApKyhmQVtiQigweDUzYyldKGJCKDB4Mjk3KSk\/MHhjOjB4MCkrKGZBPT09YkIoMHgyYjYpPzB4NjoweDApKyhmQT09PWJCKDB4MzczKSYmUEM+PTQuND8weDEyOjB4MCkrZmQqMHgyOCtmMigpKjB4YysoZnA\/MHg1OjB4MCkrKGZBW2JCKDB4NTM3KV0oYkIoMHg1ZmMpKT96d1snYXJlYSddPjB4M2M\/MHg0NjoweDE0OjB4MCkrKGZBPT09YkIoMHg0ZGUpPzB4ODoweDApKyhJTSYmSU1bJ2N1dCddIT09dW5kZWZpbmVkJiZJN1tiQigweDQ3YildPT09YkIoMHg1NDApP3p3W2JCKDB4NTU1KV1bJ2ZpbHRlciddKGZUPT5mVFsnayddIT09YkIoMHgyM2MpJiZmVFsnayddIT09YkIoMHg1ZmQpJiZQeChmVCkpW2JCKDB4NjYxKV0qMHgxOSsoendbYkIoMHg1NTUpXVsnc29tZSddKGZUPT5mVFsnayddPT09J2xpdmUnJiZQeChmVCkpPzB4MDoweDFlKToweDApKyhmTSE9PWZjPzB4MToweDApK2ZxLShmM1t6YSUweDNdPT09ZkE\/MHg0OjB4MCkrUHQoKStQRCgpO2ZoW2JCKDB4MmIzKV0oeyd2JzpmQywnZic6Zk0sJ29mZic6ZnEsJ2xheSc6ZkEsJ2VudHJ5JzpmWn0pO319aWYoIWZoW2JCKDB4NjYxKV0mJnp3W2JCKDB4MzY5KV0pendbYkIoMHgzNjkpXT0hW107aWYoKCFmaFtiQigweDY2MSldfHxmaFsnZXZlcnknXShmVD0+ZlRbYkIoMHg1YTkpXT49MHgxKSkmJlBUPj0zLjgpe2NvbnN0IGZUPUlNJiZJTVtiQigweDIzOCldIT09dW5kZWZpbmVkJiZJN1tiQigweDQ3YildPT09YkIoMHg1NDApO2Zvcihjb25zdCBmbyBvZltmYywhZmNdKWZvcihsZXQgZnc9MHgwO2Z3PD1QVC0zLjg7ZncrPTAuNSl7Y29uc3QgZmE9UEwoZm8\/UFQtKGZ3K1BVLzB4Mik6ZncrUFUvMHgyKTtpZighZmEpY29udGludWU7Zm9yKGNvbnN0IGZzIG9mIGZUJiZQVC1mdz49NS40P1tiQigweDU5ZiksYkIoMHgzNDQpXTpbYkIoMHg1OWYpXSl7Y29uc3QgZlY9UG4oZm8sZncsZnMpLGZFPVB5KGZhKSxmVT1mVioweDY0K2ZFW2JCKDB4MzEzKV0qMHg2NCtmRVsndGhydUxpdmUnXSooUFM+PTB4M2M\/MHgzYzoweGYpK1BnKCkqMHgxOStNYXRoW2JCKDB4M2FkKV0oelEtendbYkIoMHg1NTUpXVsnZmlsdGVyJ10oZlg9PmZYWydrJ109PT1iQigweDIxNCkpW2JCKDB4NjYxKV0pKjB4NjQrZjEoKSoweDI4K2YyKCkqMHhjK2Z3KyhmbyE9PWZjPzB4MToweDApKyhmVD96d1tiQigweDU1NSldW2JCKDB4MmE2KV0oZlg9PmZYWydrJ10hPT1iQigweDIzYykmJmZYWydrJ10hPT1iQigweDVmZCkmJlB4KGZYKSlbYkIoMHg2NjEpXSoweDE5Kyh6d1tiQigweDU1NSldW2JCKDB4NjY4KV0oZlg9PmZYWydrJ109PT1iQigweDIzYykmJlB4KGZYKSk\/MHgwOjB4MWUpOjB4MCkrUHQoKStQRCgpO2ZoW2JCKDB4MmIzKV0oeyd2JzpmVSwnZic6Zm8sJ29mZic6ZncsJ2xheSc6ZnMsJ2VudHJ5JzpmYX0pO319fWlmKGZoW2JCKDB4NjYxKV0pe2ZoWydzb3J0J10oKGZXLGZGKT0+ZldbJ3YnXS1mRlsndiddKTtjb25zdCBmWD1NYXRoW2JCKDB4NDNjKV0oZmhbYkIoMHg2NjEpXSwweDYpO2ZyPWZoWyh6d1tiQigweDNjNSldWydhbHQnXXx8MHgwKSVmWF07fWlmKGZyKXt6d1snZG9vciddPWZyW2JCKDB4MmFkKV0sendbYkIoMHg0NjMpXVtiQigweDVhNildPVBuKGZyWydmJ10sZnJbJ29mZiddLGZyW2JCKDB4NDJhKV0pPjB4MCx6d1tiQigweDI4NyldPVB5KGZyW2JCKDB4MmFkKV0pLHp3W2JCKDB4NDYzKV1bYkIoMHg1MWMpXT16d1snZ3JhcGgnXVtiQigweDMxMyldPjB4MCx6d1tiQigweDQ2MyldW2JCKDB4NTcyKV09endbYkIoMHgyODcpXVtiQigweDU3MildPjB4MCx6d1tiQigweDQ2MyldWyd0aW55J109ZjEoKT4weDAsendbYkIoMHgzNDgpXT1NYXRoW2JCKDB4NDUxKV0oMHgwLE1hdGhbYkIoMHg0NzIpXSgweDY0LWYyKCkqMHgxNikpLHp3W2JCKDB4NjU2KV09ZnJbJ2xheSddO2lmKCF6bCl7Zm9yKGNvbnN0IGZ5IG9mIHp3Wydyb29tcyddKWZ5W2JCKDB4NTQwKV09bnVsbDt9aWYoIXpsKWZvcihjb25zdCBmeCBvZiB6d1tiQigweDU1NSldKXtpZihmeFsnayddIT09J2xpdmUnJiZmeFsnayddIT09YkIoMHg1ZmQpKWNvbnRpbnVlO2NvbnN0IGZnPShmUyxBMCk9Pntjb25zdCBidD1iQixBMT1NYXRoW2J0KDB4NTNiKV0oZlMvVSksQTI9TWF0aFtidCgweDUzYildKEEwL1UpO3JldHVybiBBMT49MHgwJiZBMj49MHgwJiZBMTxYJiZBMjxGJiZZW2hEKEExLEEyKV09PT16YSYmUFIoZlMsQTApPDB4MDt9LGZ0PShmeFsnYiddWzB4MF0rZnhbJ2InXVsweDJdKS8weDIsZkQ9KGZ4WydiJ11bMHgxXStmeFsnYiddWzB4M10pLzB4MjtmeFsnb3BlbiddPVtmZyhmdCxmeFsnYiddWzB4MV0tMC4yNSksZmcoZnhbJ2InXVsweDJdKzAuMjUsZkQpLGZnKGZ0LGZ4WydiJ11bMHgzXSswLjI1KSxmZyhmeFsnYiddWzB4MF0tMC4yNSxmRCldO31mb3IoY29uc3QgZlMgb2YgendbYkIoMHg1NTUpXSl7aWYoZlNbJ2snXSE9PWJCKDB4MjNjKSYmZlNbJ2snXSE9PWJCKDB4NWZkKSljb250aW51ZTtjb25zdCBBMD0oZlNbJ2InXVsweDFdK2ZTWydiJ11bMHgzXSkvMHgyLEExPShBNCxBNSk9Pntjb25zdCBiRD1iQixBNj1NYXRoW2JEKDB4NTNiKV0oQTQvVSksQTc9TWF0aFsnZmxvb3InXShBNS9VKTtyZXR1cm4gQTY+PTB4MCYmQTc+PTB4MCYmQTY8WCYmQTc8RiYmWVtoRChBNixBNyldPT09Sjt9LEEyPUExKGZTWydiJ11bMHgwXS0wLjI1LEEwKSxBMz1BMShmU1snYiddWzB4Ml0rMC4yNSxBMCk7aWYoQTJ8fEEzKXtmU1tiQigweDU0MCldPWZTW2JCKDB4NTQwKV18fFshW10sIVtdLCFbXSwhW11dO2lmKEEzKWZTW2JCKDB4NTQwKV1bMHgxXT0hIVtdO2lmKEEyKWZTWydvcGVuJ11bMHgzXT0hIVtdO319Y29uc3QgZlc9bmV3IFNldCgpO2lmKCF6bCYmSW8oKVtiQigweDY2MSldKWZvcihjb25zdCBBNCBvZiB6d1tiQigweDU1NSldKXtjb25zdCBBNT1NYXRoW2JCKDB4NDcyKV0oQTRbJ2InXVsweDBdL1UpLEE2PU1hdGhbYkIoMHg0NzIpXShBNFsnYiddWzB4MV0vVSksQTc9TWF0aFtiQigweDQ3MildKEE0WydiJ11bMHgyXS9VKSxBOD1NYXRoW2JCKDB4NDcyKV0oQTRbJ2InXVsweDNdL1UpO0E0W2JCKDB4MzhkKV09W107Zm9yKGNvbnN0IFtBOSxBSSxBcixBaCxBY11vZltbMHgwLDB4MCwtMHgxLEE1LEE3XSxbMHgyLDB4MCwweDEsQTUsQTddLFsweDMsLTB4MSwweDAsQTYsQThdLFsweDEsMHgxLDB4MCxBNixBOF1dKXtjb25zdCBBaz1bXTtsZXQgQWk9IVtdO2ZvcihsZXQgQXY9QWg7QXY8QWM7QXYrKyl7Y29uc3QgQXU9QUk\/QUk+MHgwP0E3OkE1LTB4MTpBdixBWT1Bcj9Bcj4weDA\/QTg6QTYtMHgxOkF2O2xldCBBTT1BdSxBcT1BWSxBej0weDA7d2hpbGUoQXo8MHg3JiZBTT49MHgwJiZBcT49MHgwJiZBTTxYJiZBcTxGJiZZW2hEKEFNLEFxKV09PT16YSYmIWZXW2JCKDB4MzBiKV0oaEQoQU0sQXEpKSYmUFIoKEFNKzAuNSkqVSwoQXErMC41KSpVKTwweDApe0FNKz1BSSxBcSs9QXIsQXorKzt9Y29uc3QgQVA9QU08MHgwfHxBcTwweDB8fEFNPj1YfHxBcT49Rj9HOllbaEQoQU0sQXEpXTtpZighQXope2lmKEFQIT09Ryl7QWk9ISFbXTticmVhazt9Y29udGludWU7fWlmKEFQIT09R3x8QXo+PTB4N3x8IUl3KChBTS1BSSswLjUpKlUsKEFxLUFyKzAuNSkqVSkpe0FpPSEhW107YnJlYWs7fUFrW2JCKDB4MmIzKV0oW0F1LEFZLEF6XSk7fWlmKEFpfHwhQWtbYkIoMHg2NjEpXSljb250aW51ZTtBNFtiQigweDU0MCldPUE0W2JCKDB4NTQwKV18fFshW10sIVtdLCFbXSwhW11dLEE0WydvcGVuJ11bQTldPSEhW107Y29uc3QgQU49KEE0WydiZSddfHxBNFsnYiddKVtiQigweDI3MCldKCk7Zm9yKGNvbnN0IFtBZixBQSxBcF1vZiBBaylmb3IobGV0IEFaPTB4MDtBWjxBcDtBWisrKXtjb25zdCBBTz1BZitBSSpBWixBZT1BQStBcipBWjtmV1tiQigweDY3MildKGhEKEFPLEFlKSksQTRbYkIoMHgzOGQpXVtiQigweDJiMyldKFtBTypVLEFlKlUsKEFPKzB4MSkqVSwoQWUrMHgxKSpVXSksQU5bMHgwXT1NYXRoW2JCKDB4NDNjKV0oQU5bMHgwXSxBTypVKSxBTlsweDFdPU1hdGhbYkIoMHg0M2MpXShBTlsweDFdLEFlKlUpLEFOWzB4Ml09TWF0aFtiQigweDQ1MSldKEFOWzB4Ml0sKEFPKzB4MSkqVSksQU5bMHgzXT1NYXRoW2JCKDB4NDUxKV0oQU5bMHgzXSwoQWUrMHgxKSpVKTt9QTRbJ2JlJ109QU47fX1pZighemwpZm9yKGNvbnN0IEFCIG9mIHp3W2JCKDB4NTU1KV0pe2lmKEFCWydrJ109PT0nYmF0aCd8fEFCWydrJ109PT0nd2MnKWNvbnRpbnVlO2Zvcihjb25zdCBbQWIsQWQsQUNdb2ZbWzB4MCwweDAsLTB4MV0sWzB4MiwweDAsMHgxXSxbMHgzLC0weDEsMHgwXSxbMHgxLDB4MSwweDBdXSl7Y29uc3QgQVQ9TWF0aFtiQigweDQ3MildKEFCWydiJ11bMHgwXS9VKSxBbz1NYXRoWydyb3VuZCddKEFCWydiJ11bMHgxXS9VKSxBdz1NYXRoW2JCKDB4NDcyKV0oQUJbJ2InXVsweDJdL1UpLEFhPU1hdGhbYkIoMHg0NzIpXShBQlsnYiddWzB4M10vVSksQXM9QWQ\/QW86QVQsQVY9QWQ\/QWE6QXcsQUU9W107bGV0IEFVPS0weDEsQVg9QVY+QXM7Zm9yKGxldCBBRj1BcztBRjxBViYmQVg7QUYrKyl7bGV0IEFHPUFkP0FkPjB4MD9BdzpBVC0weDE6QUYsQUw9QUM\/QUM+MHgwP0FhOkFvLTB4MTpBRixBSz0weDA7Y29uc3QgQWo9W107d2hpbGUoQUs8MHgzJiZBRz49MHgwJiZBTD49MHgwJiZBRzxYJiZBTDxGJiZZW2hEKEFHLEFMKV09PT16YSYmIWZXW2JCKDB4MzBiKV0oaEQoQUcsQUwpKSYmUFIoKEFHKzAuNSkqVSwoQUwrMC41KSpVKTwweDApe0FqW2JCKDB4MmIzKV0oaEQoQUcsQUwpKSxBRys9QWQsQUwrPUFDLEFLKys7fWNvbnN0IEFIPUFHPDB4MHx8QUw8MHgwfHxBRz49WHx8QUw+PUY\/RzpZW2hEKEFHLEFMKV07aWYoIUFLfHxBSz4weDJ8fEFIIT09R3x8SWEoKEFHLUFkKzAuNSkqVSwoQUwtQUMrMC41KSpVKXx8QVU+PTB4MCYmQUshPT1BVSl7QVg9IVtdO2JyZWFrO31BVT1BSyxBRVtiQigweDJiMyldKC4uLkFqKTt9aWYoIUFYfHxBVTwweDEpY29udGludWU7Zm9yKGNvbnN0IEFRIG9mIEFFKWZXW2JCKDB4NjcyKV0oQVEpO2NvbnN0IEFXPUFVKlU7aWYoQWI9PT0weDApQUJbJ2InXVsweDFdLT1BVztlbHNle2lmKEFiPT09MHgyKUFCWydiJ11bMHgzXSs9QVc7ZWxzZXtpZihBYj09PTB4MylBQlsnYiddWzB4MF0tPUFXO2Vsc2UgQUJbJ2InXVsweDJdKz1BVzt9fWlmKEFCW2JCKDB4NTQwKV0pQUJbYkIoMHg1NDApXVtBYl09IVtdO319aWYoIXpsKWZvcihsZXQgQWw9MHgwO0FsPDB4MztBbCsrKXtjb25zdCBBbT1wOT0+UFIoKHA5JVgrMC41KSpVLChNYXRoW2JCKDB4NTNiKV0ocDkvWCkrMC41KSpVKT49MHgwLEFKPW5ldyBTZXQoendbJ2NlbGxzJ11bYkIoMHgyYTYpXShwOT0+IUFtKHA5KSYmIWZXW2JCKDB4MzBiKV0ocDkpKSk7aWYoQUpbYkIoMHgyMmEpXTwweDgpYnJlYWs7bGV0IEFuPTB4M2I5YWNhMDAsQVI9MHgzYjlhY2EwMCxBeT0tMHgxLEF4PS0weDE7Zm9yKGNvbnN0IHA5IG9mIEFKKXtjb25zdCBwST1wOSVYLHByPU1hdGhbYkIoMHg1M2IpXShwOS9YKTtBbj1NYXRoW2JCKDB4NDNjKV0oQW4scEkpLEF5PU1hdGhbJ21heCddKEF5LHBJKSxBUj1NYXRoW2JCKDB4NDNjKV0oQVIscHIpLEF4PU1hdGhbJ21heCddKEF4LHByKTt9Y29uc3QgQWc9bmV3IEFycmF5KEF5LUFuKzB4MilbYkIoMHgzNmYpXSgweDApO2xldCBBdD0weDAsQUQ9MHgwLEFTPW51bGw7Y29uc3QgcDI9KHBoLHBjKT0+KHBoPDB4MHx8cGM8MHgwfHxwaD49WHx8cGM+PUZ8fFlbaEQocGgscGMpXT09PUcpJiYhSWEoKHBoKzAuNSkqVSwocGMrMC41KSpVKSxwMz1waD0+e2ZvcihsZXQgcGM9cGhbMHgwXTtwYzxwaFsweDJdO3BjKyspaWYocDIocGMscGhbMHgxXS0weDEpfHxwMihwYyxwaFsweDNdKSlyZXR1cm4hIVtdO2ZvcihsZXQgcGs9cGhbMHgxXTtwazxwaFsweDNdO3BrKyspaWYocDIocGhbMHgwXS0weDEscGspfHxwMihwaFsweDJdLHBrKSlyZXR1cm4hIVtdO3JldHVybiFbXTt9O2ZvcihsZXQgcGg9QVI7cGg8PUF4O3BoKyspe2NvbnN0IHBjPVtdO2ZvcihsZXQgcGs9QW47cGs8PUF5KzB4MTtwaysrKXtjb25zdCBwaT1way1BbjtBZ1twaV09cGs8PUF5JiZBSltiQigweDMwYildKGhEKHBrLHBoKSk\/QWdbcGldKzB4MToweDA7bGV0IHBOPXBpO3doaWxlKHBjW2JCKDB4NjYxKV0mJnBjW3BjW2JCKDB4NjYxKV0tMHgxXVsweDFdPj1BZ1twaV0pe2NvbnN0IFtwdixwdV09cGNbYkIoMHgyMmIpXSgpLHBZPXB1KihwaS1wdikscE09W0FuK3B2LHBoLXB1KzB4MSxBbitwaSxwaCsweDFdLHBxPXBZKihwMyhwTSk\/MS40OjB4MSk7cHE+QUQmJihBRD1wcSxBdD1wWSxBUz1wTSkscE49cHY7fWlmKEFnW3BpXT4weDApcGNbJ3B1c2gnXShbcE4sQWdbcGldXSk7fX1pZighQVN8fEF0PDB4OHx8TWF0aFsnbWluJ10oQVNbMHgyXS1BU1sweDBdLEFTWzB4M10tQVNbMHgxXSk8MHgzKWJyZWFrO2xldCBwND1bQVNbMHgwXSpVLEFTWzB4MV0qVSxBU1sweDJdKlUsQVNbMHgzXSpVXTtjb25zdCBwNT16d1tiQigweDU1NSldW2JCKDB4MmE2KV0ocHo9PnB6WydrJ109PT1iQigweDIxNCkpWydsZW5ndGgnXTx6USxwNj1wNFsweDJdLXA0WzB4MF0scDc9cDRbMHgzXS1wNFsweDFdO2xldCBwOD0hW107aWYocDUmJk1hdGhbYkIoMHg0M2MpXShwNixwNyk+PTIuOCYmcDYqcDc+PTB4OSl7bGV0IHB6PXA0W2JCKDB4MjcwKV0oKTtpZihNYXRoWydtYXgnXShwNixwNyk+PTYuNSl7Y29uc3QgcGY9KFBwK1BaKS8weDIscEE9KFBPK1BlKS8weDI7aWYocDY+cDcpcHo9KHA0WzB4MF0rcDRbMHgyXSkvMHgyPHBmP1twNFsweDBdLHA0WzB4MV0scDRbMHgwXSszLjUscDRbMHgzXV06W3A0WzB4Ml0tMy41LHA0WzB4MV0scDRbMHgyXSxwNFsweDNdXTtlbHNlIHB6PShwNFsweDFdK3A0WzB4M10pLzB4MjxwQT9bcDRbMHgwXSxwNFsweDFdLHA0WzB4Ml0scDRbMHgxXSszLjVdOltwNFsweDBdLHA0WzB4M10tMy41LHA0WzB4Ml0scDRbMHgzXV07fWxldCBwUD1udWxsO2Zvcihjb25zdCBwcCBvZltiQigweDYzMyksYkIoMHg1ZmQpLGJCKDB4MjNjKV0pe2Zvcihjb25zdCBwWiBvZiB6d1sncm9vbXMnXSl7aWYocFpbJ2snXSE9PXBwfHxwWlsnayddPT09YkIoMHg1ZmQpJiZwWltiQigweDQyNildKWNvbnRpbnVlO2NvbnN0IHBPPVBRKHB6LHBaKTtpZihwTyl7cFA9cE87YnJlYWs7fX1pZihwUClicmVhazt9aWYocFAmJlBqKHB6KSl7cDg9ISFbXSx6d1sncm9vbXMnXVtiQigweDJiMyldKHsnayc6YkIoMHgyMTQpLCdiJzpwen0pLHp3W2JCKDB4Mzg5KV1bYkIoMHgyYjMpXShQbChwUCxweikpO2lmKHB6W2JCKDB4NjY4KV0oKHBlLHBCKT0+TWF0aFtiQigweDNhZCldKHBlLXA0W3BCXSk+MC4wMSkpe2NvbnN0IHBlPXA2PnA3P3B6WzB4MF0+cDRbMHgwXT9bcDRbMHgwXSxwNFsweDFdLHB6WzB4MF0scDRbMHgzXV06W3B6WzB4Ml0scDRbMHgxXSxwNFsweDJdLHA0WzB4M11dOnB6WzB4MV0+cDRbMHgxXT9bcDRbMHgwXSxwNFsweDFdLHA0WzB4Ml0scHpbMHgxXV06W3A0WzB4MF0scHpbMHgzXSxwNFsweDJdLHA0WzB4M11dLHBCPXsnayc6YkIoMHg1ZmQpLCdraXQnOiFbXSwnYic6cGV9O3BCW2JCKDB4MmYzKV09SWcocEIsUGQsUEI+MHgwfHxQYj4weDApLHp3W2JCKDB4NTU1KV1bYkIoMHgyYjMpXShwQik7fX19aWYoIXA4KXtjb25zdCBwYj17J2snOmJCKDB4NWZkKSwna2l0JzohW10sJ2InOnA0fTtwYlsnZnVybiddPUlnKHBiLFBkLFBCPjB4MHx8UGI+MHgwKSx6d1sncm9vbXMnXVtiQigweDJiMyldKHBiKTt9fXtjb25zdCBwZD17J2hhbGwnOjB4MCwnbm9vayc6MHgxLCdsaXZlJzoweDIsJ2JlZCc6MHgzfSxwQz1wVD0+endbYkIoMHgzODkpXVsnc29tZSddKHBvPT57Y29uc3QgYlM9YkIscHc9cG9bYlMoMHgyOWYpXSxwYT0ocHdbMHgwXVsweDBdK3B3WzB4MV1bMHgwXSkvMHgyLHBzPShwd1sweDBdWzB4MV0rcHdbMHgxXVsweDFdKS8weDI7cmV0dXJuIHBhPj1wVFsnYiddWzB4MF0tMC4zJiZwYTw9cFRbJ2InXVsweDJdKzAuMyYmcHM+PXBUWydiJ11bMHgxXS0wLjMmJnBzPD1wVFsnYiddWzB4M10rMC4zO30pO2ZvcihsZXQgcFQ9MHgwO3BUPDB4MjtwVCsrKWZvcihjb25zdCBwbyBvZiB6d1tiQigweDU1NSldKXtpZighKHBvWydrJ109PT1iQigweDIzYyl8fHBvWydrJ109PT1iQigweDVmZCkmJiFwb1tiQigweDQyNildKXx8cEMocG8pKWNvbnRpbnVlO2xldCBwdz1udWxsO2Zvcihjb25zdCBwYSBvZiB6d1sncm9vbXMnXSl7aWYocGE9PT1wb3x8cGRbcGFbJ2snXV09PT11bmRlZmluZWR8fHBhWydrJ109PT1iQigweDVmZCkmJnBhW2JCKDB4NDI2KV18fHBhWydrJ109PT1iQigweDIxNCkmJnBvWydrJ109PT1iQigweDIzYyl8fHBhWydrJ10hPT1iQigweDYzMykmJiFwQyhwYSkpY29udGludWU7Y29uc3QgcHM9TWF0aFsnbWluJ10ocG9bJ2InXVsweDNdLHBhWydiJ11bMHgzXSktTWF0aFtiQigweDQ1MSldKHBvWydiJ11bMHgxXSxwYVsnYiddWzB4MV0pLHBWPU1hdGhbYkIoMHg0M2MpXShwb1snYiddWzB4Ml0scGFbJ2InXVsweDJdKS1NYXRoW2JCKDB4NDUxKV0ocG9bJ2InXVsweDBdLHBhWydiJ11bMHgwXSk7bGV0IHBFPW51bGw7aWYocHM+PTAuOSYmTWF0aFtiQigweDNhZCldKHBvWydiJ11bMHgyXS1wYVsnYiddWzB4MF0pPDAuMDUpcEU9WyEhW10scG9bJ2InXVsweDJdLE1hdGhbYkIoMHg0NTEpXShwb1snYiddWzB4MV0scGFbJ2InXVsweDFdKSxNYXRoW2JCKDB4NDNjKV0ocG9bJ2InXVsweDNdLHBhWydiJ11bMHgzXSldO2Vsc2V7aWYocHM+PTAuOSYmTWF0aFtiQigweDNhZCldKHBvWydiJ11bMHgwXS1wYVsnYiddWzB4Ml0pPDAuMDUpcEU9WyEhW10scG9bJ2InXVsweDBdLE1hdGhbJ21heCddKHBvWydiJ11bMHgxXSxwYVsnYiddWzB4MV0pLE1hdGhbYkIoMHg0M2MpXShwb1snYiddWzB4M10scGFbJ2InXVsweDNdKV07ZWxzZXtpZihwVj49MC45JiZNYXRoW2JCKDB4M2FkKV0ocG9bJ2InXVsweDNdLXBhWydiJ11bMHgxXSk8MC4wNSlwRT1bIVtdLHBvWydiJ11bMHgzXSxNYXRoW2JCKDB4NDUxKV0ocG9bJ2InXVsweDBdLHBhWydiJ11bMHgwXSksTWF0aFtiQigweDQzYyldKHBvWydiJ11bMHgyXSxwYVsnYiddWzB4Ml0pXTtlbHNle2lmKHBWPj0wLjkmJk1hdGhbYkIoMHgzYWQpXShwb1snYiddWzB4MV0tcGFbJ2InXVsweDNdKTwwLjA1KXBFPVshW10scG9bJ2InXVsweDFdLE1hdGhbYkIoMHg0NTEpXShwb1snYiddWzB4MF0scGFbJ2InXVsweDBdKSxNYXRoWydtaW4nXShwb1snYiddWzB4Ml0scGFbJ2InXVsweDJdKV07fX19aWYoIXBFKWNvbnRpbnVlO2NvbnN0IHBVPXBkW3BhWydrJ11dKjB4YS0ocEVbMHgzXS1wRVsweDJdKTtpZighcHd8fHBVPHB3WydzYyddKXB3PXsnc2MnOnBVLCdzZWFtJzpwRSwnYmVkJzpwYVsnayddPT09YkIoMHgyMTQpfTt9aWYocHcpe2lmKHB3W2JCKDB4MjE0KV0pcG9bYkIoMHg1MTMpXT0hIVtdO2NvbnN0IFtwWCxwVyxwRixwR109cHdbJ3NlYW0nXSxwTD1wRy1wRj49MHgyPzEuMjowLjkscEs9KHBGK3BHKS8weDI7endbYkIoMHgzODkpXVtiQigweDJiMyldKHsnZ2FwJzpwWD9bW3BXLHBLLXBMLzB4Ml0sW3BXLHBLK3BMLzB4Ml1dOltbcEstcEwvMHgyLHBXXSxbcEsrcEwvMHgyLHBXXV19KTt9ZWxzZXtpZihwVCYmcG9bJ2snXT09PWJCKDB4NWZkKSlwb1tiQigweDUxMyldPSEhW107fX19e2NvbnN0IHBqPVB5KGZyW2JCKDB4MmFkKV0pLHBIPW5ldyBTZXQoKTt7Y29uc3QgcFE9cGpbJ3N0YXJ0J10+PTB4MD9bcGpbYkIoMHg0NDkpXV06W10scGw9bmV3IFNldChwUSk7d2hpbGUocFFbYkIoMHg2NjEpXSl7Y29uc3QgcG09cFFbYkIoMHgyMmIpXSgpO2Zvcihjb25zdCBwSiBvZiBwalsnZWRnZXMnXSl7Y29uc3QgcG49cEpbMHgwXT09PXBtP3BKWzB4MV06cEpbMHgxXT09PXBtP3BKWzB4MF06LTB4MTtwbj49MHgwJiYhcGxbYkIoMHgzMGIpXShwbikmJihwbFtiQigweDY3MildKHBuKSxwUVtiQigweDJiMyldKHBuKSk7fX1wbFtiQigweDNiOSldKHBSPT5wSFtiQigweDY3MildKHBSKSk7fXp3W2JCKDB4NTU1KV1bYkIoMHgzYjkpXSgocFIscGcpPT57Y29uc3QgZDA9YkI7aWYocFJbJ2snXSE9PWQwKDB4NWZkKXx8cEhbZDAoMHgzMGIpXShwZykpcmV0dXJuO2NvbnN0IFtwdCxwRCxwUyxaMF09cFJbJ2InXSxaMT0oWjUsWjYpPT57Y29uc3QgZDE9ZDAsWjc9TWF0aFtkMSgweDUzYildKFo1L1UpLFo4PU1hdGhbZDEoMHg1M2IpXShaNi9VKTtyZXR1cm4gWjc+PTB4MCYmWjg+PTB4MCYmWjc8WCYmWjg8RiYmWVtoRChaNyxaOCldPT09TDt9LFoyPShwdCtwUykvMHgyLFozPShwRCtaMCkvMHgyO2xldCBaND1udWxsO2lmKFoxKFoyLFowKzAuMjUpJiZwUy1wdD49MC45KVo0PVtbWjItMC40LFowXSxbWjIrMC40LFowXV07ZWxzZXtpZihaMShaMixwRC0wLjI1KSYmcFMtcHQ+PTAuOSlaND1bW1oyLTAuNCxwRF0sW1oyKzAuNCxwRF1dO2Vsc2V7aWYoWjEocFMrMC4yNSxaMykmJlowLXBEPj0wLjkpWjQ9W1twUyxaMy0wLjRdLFtwUyxaMyswLjRdXTtlbHNle2lmKFoxKHB0LTAuMjUsWjMpJiZaMC1wRD49MC45KVo0PVtbcHQsWjMtMC40XSxbcHQsWjMrMC40XV07fX19WjQmJihwUlsnayddPWQwKDB4MjQyKSxwUlsnZnJvbUNvciddPSEhW10scFJbZDAoMHgyZjMpXT1bXSx6d1tkMCgweDM4OSldW2QwKDB4MmIzKV0oeydnYXAnOlo0fSkpO30pO317Y29uc3QgcFI9ZnJbYkIoMHgyYWQpXSxwZz0ocFJbJ3gnXSswLjUrcFJbJ2R4J10qMC41KSpVLXBSWydkeCddKjAuMyxwdD0ocFJbJ3knXSswLjUrcFJbJ2R5J10qMC41KSpVLXBSWydkeSddKjAuMyxwRD16d1tiQigweDU1NSldW1BSKHBnLHB0KV07aWYocEQmJnBEWydrJ109PT0nbm9vaycmJiFwRFtiQigweDQyNildKXtjb25zdCBwUz16d1sncm9vbXMnXVtiQigweDJiNSldKFowPT5aMFsnayddPT09YkIoMHg2MzMpKTtpZihwUyl7cERbJ2snXT1iQigweDYzMykscERbYkIoMHgyZjMpXT1bXTt7Y29uc3QgWjI9cERbJ2InXVsweDJdLXBEWydiJ11bMHgwXT49cERbJ2InXVsweDNdLXBEWydiJ11bMHgxXSxaMz1aMj9wRFsnYiddWzB4MF06cERbJ2InXVsweDFdLFo0PVoyP3BEWydiJ11bMHgyXTpwRFsnYiddWzB4M10sWjU9WjI\/cGc6cHQsWjY9WjI\/W3BTWydiJ11bMHgwXSxwU1snYiddWzB4Ml1dOltwU1snYiddWzB4MV0scFNbJ2InXVsweDNdXTtpZihaNC1aMz4zLjYpe2NvbnN0IFo3PU1hdGhbYkIoMHg0NTEpXShaMyxNYXRoW2JCKDB4NDNjKV0oWjUtMS4yLE1hdGhbYkIoMHg0NTEpXShaNlsweDBdLFozKSkpLFo4PU1hdGhbYkIoMHg0M2MpXShaNCxNYXRoW2JCKDB4NDUxKV0oWjUrMS4yLE1hdGhbYkIoMHg0M2MpXShaNlsweDFdLFo0KSkpLFo5PVoyPyhwRFsnYiddWzB4MV0rcERbJ2InXVsweDNdKS8weDI6KHBEWydiJ11bMHgwXStwRFsnYiddWzB4Ml0pLzB4Mjtmb3IoY29uc3QgW1pJLFpyLFpoXW9mW1taMyxaNyxaN10sW1o4LFo0LFo4XV0pe2lmKFpyLVpJPDEuMiljb250aW51ZTt6d1sncm9vbXMnXVtiQigweDJiMyldKHsnayc6YkIoMHgyNDIpLCdiJzpaMj9bWkkscERbJ2InXVsweDFdLFpyLHBEWydiJ11bMHgzXV06W3BEWydiJ11bMHgwXSxaSSxwRFsnYiddWzB4Ml0sWnJdfSksendbYkIoMHgzODkpXVsncHVzaCddKHsnZ2FwJzpaMj9bW1poLFo5LTAuMzddLFtaaCxaOSswLjM3XV06W1taOS0wLjM3LFpoXSxbWjkrMC4zNyxaaF1dfSk7fVoyPyhwRFsnYiddWzB4MF09WjcscERbJ2InXVsweDJdPVo4KToocERbJ2InXVsweDFdPVo3LHBEWydiJ11bMHgzXT1aOCk7fX1jb25zdCBaMD1bTWF0aFtiQigweDQ1MSldKHBEWydiJ11bMHgxXSxwU1snYiddWzB4MV0pLE1hdGhbYkIoMHg0M2MpXShwRFsnYiddWzB4M10scFNbJ2InXVsweDNdKV0sWjE9W01hdGhbYkIoMHg0NTEpXShwRFsnYiddWzB4MF0scFNbJ2InXVsweDBdKSxNYXRoW2JCKDB4NDNjKV0ocERbJ2InXVsweDJdLHBTWydiJ11bMHgyXSldO2lmKE1hdGhbYkIoMHgzYWQpXShwRFsnYiddWzB4MF0tcFNbJ2InXVsweDJdKTwwLjA1fHxNYXRoWydhYnMnXShwRFsnYiddWzB4Ml0tcFNbJ2InXVsweDBdKTwwLjA1KXtjb25zdCBaYz1NYXRoW2JCKDB4M2FkKV0ocERbJ2InXVsweDBdLXBTWydiJ11bMHgyXSk8MC4wNT9wRFsnYiddWzB4MF06cERbJ2InXVsweDJdO2lmKFowWzB4MV0tWjBbMHgwXT4wLjcpendbJ2Rvb3JzJ11bYkIoMHgyYjMpXSh7J2dhcCc6W1taYyxaMFsweDBdKzAuMV0sW1pjLE1hdGhbYkIoMHg0M2MpXShaMFsweDFdLTAuMSxaMFsweDBdKzEuMSldXX0pO31lbHNle2lmKFoxWzB4MV0tWjFbMHgwXT4wLjcpe2NvbnN0IFprPU1hdGhbYkIoMHgzYWQpXShwRFsnYiddWzB4MV0tcFNbJ2InXVsweDNdKTwwLjA1P3BEWydiJ11bMHgxXTpwRFsnYiddWzB4M107endbYkIoMHgzODkpXVtiQigweDJiMyldKHsnZ2FwJzpbW1oxWzB4MF0rMC4xLFprXSxbTWF0aFsnbWluJ10oWjFbMHgxXS0wLjEsWjFbMHgwXSsxLjEpLFprXV19KTt9fX19endbYkIoMHgyODcpXT1QeShwUiksendbYkIoMHg1NTUpXVtiQigweDNiOSldKChaaSxaTik9Pntjb25zdCBkMj1iQjtpZihaaVsnayddIT09ZDIoMHgyNDIpfHx6d1tkMigweDI4NyldW2QyKDB4MjdmKV1bJ3NvbWUnXShaTT0+Wk1bMHgwXT09PVpOfHxaTVsweDFdPT09Wk4pKXJldHVybjtjb25zdCBadj1bZDIoMHg2MzMpLGQyKDB4NWZkKSxkMigweDIzYyksZDIoMHgyMTQpXTtpZihaaVtkMigweDViZSldKXJldHVybjtsZXQgWnU9bnVsbCxaWT0weDk7Zm9yKGNvbnN0IFpNIG9mIHp3W2QyKDB4NTU1KV0pe2lmKFpNPT09WmkpY29udGludWU7Y29uc3QgWnE9WnZbZDIoMHg1ZWIpXShaTVsnayddKTtpZihacTwweDB8fFpxPj1aWSljb250aW51ZTtjb25zdCBaej1bTWF0aFtkMigweDQ1MSldKFppWydiJ11bMHgxXSxaTVsnYiddWzB4MV0pLE1hdGhbZDIoMHg0M2MpXShaaVsnYiddWzB4M10sWk1bJ2InXVsweDNdKV0sWlA9W01hdGhbZDIoMHg0NTEpXShaaVsnYiddWzB4MF0sWk1bJ2InXVsweDBdKSxNYXRoWydtaW4nXShaaVsnYiddWzB4Ml0sWk1bJ2InXVsweDJdKV07bGV0IFpmPW51bGw7aWYoKE1hdGhbZDIoMHgzYWQpXShaaVsnYiddWzB4MF0tWk1bJ2InXVsweDJdKTwwLjA1fHxNYXRoWydhYnMnXShaaVsnYiddWzB4Ml0tWk1bJ2InXVsweDBdKTwwLjA1KSYmWnpbMHgxXS1aelsweDBdPj0wLjc1KXtjb25zdCBaQT1NYXRoWydhYnMnXShaaVsnYiddWzB4MF0tWk1bJ2InXVsweDJdKTwwLjA1P1ppWydiJ11bMHgwXTpaaVsnYiddWzB4Ml0sWnA9KFp6WzB4MF0rWnpbMHgxXSkvMHgyO1pmPVtbWkEsWnAtMC4zN10sW1pBLFpwKzAuMzddXTt9ZWxzZXtpZigoTWF0aFsnYWJzJ10oWmlbJ2InXVsweDFdLVpNWydiJ11bMHgzXSk8MC4wNXx8TWF0aFtkMigweDNhZCldKFppWydiJ11bMHgzXS1aTVsnYiddWzB4MV0pPDAuMDUpJiZaUFsweDFdLVpQWzB4MF0+PTAuNzUpe2NvbnN0IFpaPU1hdGhbZDIoMHgzYWQpXShaaVsnYiddWzB4MV0tWk1bJ2InXVsweDNdKTwwLjA1P1ppWydiJ11bMHgxXTpaaVsnYiddWzB4M10sWk89KFpQWzB4MF0rWlBbMHgxXSkvMHgyO1pmPVtbWk8tMC4zNyxaWl0sW1pPKzAuMzcsWlpdXTt9fVpmJiYoWnU9WmYsWlk9WnEpO31pZihadSl6d1tkMigweDM4OSldW2QyKDB4MmIzKV0oeydnYXAnOlp1fSk7fSksendbYkIoMHgyODcpXT1QeShwUiksendbYkIoMHg0NjMpXVtiQigweDUxYyldPXp3W2JCKDB4Mjg3KV1bYkIoMHgzMTMpXT4weDAsendbYkIoMHg0NjMpXVtiQigweDU3MildPXp3WydncmFwaCddW2JCKDB4NTcyKV0+MHgwO31mb3IoY29uc3QgWmkgb2YgendbJ3Jvb21zJ10pe2NvbnN0IFtaTixadixadSxaWV09WmlbJ2InXSxaTT0oWmUsWkIpPT57Y29uc3QgZDM9YkIsWmI9TWF0aFtkMygweDUzYildKFplL1UpLFpkPU1hdGhbZDMoMHg1M2IpXShaQi9VKTtpZihaYjwweDB8fFpkPDB4MHx8WmI+PVh8fFpkPj1GKXJldHVybiBHO3JldHVybiBZW2hEKFpiLFpkKV07fSxacT0oWmUsWkIpPT57Y29uc3QgZDQ9YkI7aWYoWkIpcmV0dXJuIDB4MDtsZXQgWmI9MHgwLFpkPTB4MCxaQz0weDAsWlQ9MHgwO2Zvcihjb25zdCBbWm8sWnddb2YgWmUpe2NvbnN0IFphPVpNKFpvLFp3KTtpZihaYT09PUcpe2lmKCFJYShabyxadykpWmIrKzt9ZWxzZXtpZihaYT09PUope31lbHNle2lmKFphIT09emEpWmQrKztlbHNle2NvbnN0IFpzPVBSKFpvLFp3KTtpZihacz49MHgwJiZ6d1tkNCgweDU1NSldW1pzXVsnayddPT09J25vb2snJiZ6d1tkNCgweDU1NSldW1pzXVtkNCgweDI0OCldKVpUKys7ZWxzZSBaQysrO319fX1pZihaVD49MHgyJiYhWkMmJiFaZCYmIVpiKXJldHVybiAweDA7aWYoWmI+PTB4MilyZXR1cm4gQ1tkNCgweDJmNildO2lmKFpkPj0weDIpcmV0dXJuIENbZDQoMHgyZDIpXS8weDI7aWYoWkM+PTB4MXx8WmQpcmV0dXJuIFppWydrJ109PT1kNCgweDVmZCl8fFppWydub1dhbGwnXT8weDA6Q1tkNCgweDMyMCldLzB4MjtyZXR1cm4gMHgwO30sWno9KFpOK1p1KS8weDIsWlA9KFp2K1pZKS8weDIsWmY9KFplLFpCLFpiLFpkKT0+W1taZSxaQl0sWyhaZStaYikvMHgyLChaQitaZCkvMHgyXSxbWmIsWmRdXSxaQT1acShaZihaTiswLjMsWnYtMC4yNSxadS0wLjMsWnYtMC4yNSksWmlbJ29wZW4nXSYmWmlbYkIoMHg1NDApXVsweDBdKSxacD1acShaZihadSswLjI1LFp2KzAuMyxadSswLjI1LFpZLTAuMyksWmlbYkIoMHg1NDApXSYmWmlbJ29wZW4nXVsweDFdKSxaWj1acShaZihaTiswLjMsWlkrMC4yNSxadS0wLjMsWlkrMC4yNSksWmlbYkIoMHg1NDApXSYmWmlbYkIoMHg1NDApXVsweDJdKSxaTz1acShaZihaTi0wLjI1LFp2KzAuMyxaTi0wLjI1LFpZLTAuMyksWmlbYkIoMHg1NDApXSYmWmlbJ29wZW4nXVsweDNdKTtaaVsnYyddPVp1LVpOLVpPLVpwPjAuNiYmWlktWnYtWkEtWlo+MC42P1taTitaTyxaditaQSxadS1acCxaWS1aWl06WmlbJ2InXVtiQigweDI3MCldKCksWmlbJ3d0J109W1pBLFpwLFpaLFpPXTtpZihaaVsnayddPT09YkIoMHgyM2MpJiZQeChaaSkpWmlbYkIoMHg0ODcpXT0hIVtdO31jb25zdCBmRj1aZT0+e2NvbnN0IGQ2PWJCLFpCPVplWydiJ10sWmI9KFpvLFp3KT0+e2NvbnN0IGQ1PXYsWmE9TWF0aFtkNSgweDUzYildKFpvL1UpLFpzPU1hdGhbZDUoMHg1M2IpXShady9VKTtyZXR1cm4gWmE8MHgwfHxaczwweDB8fFphPj1YfHxacz49Rnx8WVtoRChaYSxacyldPT09Rzt9LFpkPShaQlsweDBdK1pCWzB4Ml0pLzB4MixaQz0oWkJbMHgxXStaQlsweDNdKS8weDIsWlQ9ISEoWmVbZDYoMHgzOGQpXSYmWmVbZDYoMHgzOGQpXVtkNigweDY2MSldJiZaZVtkNigweDU0MCldKTtyZXR1cm57J2wnOlpiKFpCWzB4MF0tMC4zLFpDKXx8WlQmJlplWydvcGVuJ11bMHgzXSwncic6WmIoWkJbMHgyXSswLjMsWkMpfHxaVCYmWmVbZDYoMHg1NDApXVsweDFdLCd0JzpaYihaZCxaQlsweDFdLTAuMyl8fFpUJiZaZVtkNigweDU0MCldWzB4MF0sJ2InOlpiKFpkLFpCWzB4M10rMC4zKXx8WlQmJlplW2Q2KDB4NTQwKV1bMHgyXX07fSxmRz0oWmUsWkIpPT57Y29uc3QgZDc9YkI7WmVbJ2Z1cm4nXT1JZyh7Li4uWmUsJ2InOlplWydjJ10sJ2V4dCc6ZkYoWmUpLCdjaGlsZCc6WmVbJ2snXT09PWQ3KDB4MjE0KSYmendbZDcoMHg1NTUpXVtkNygweDY2OCldKFpiPT5aYlsnayddPT09ZDcoMHgyMTQpJiZaYiE9PVplJiYoWmJbJ2InXVsweDJdLVpiWydiJ11bMHgwXSkqKFpiWydiJ11bMHgzXS1aYlsnYiddWzB4MV0pPihaZVsnYiddWzB4Ml0tWmVbJ2InXVsweDBdKSooWmVbJ2InXVsweDNdLVplWydiJ11bMHgxXSkrMC4wMSksLi4uWkJ9LFBkLFBCPjB4MHx8UGI+MHgwKSxaZVtkNygweDRiNCldPVplW2Q3KDB4MmYzKV1bJ2luZm8nXXx8bnVsbDt9LGZMPSgpPT57Y29uc3QgZDg9YkIsWmU9WkI9PlpCPT09ZDgoMHgyM2MpPzB4MDpaQj09PWQ4KDB4NWZkKT8weDI6MHgxO2Zvcihjb25zdCBaQiBvZlsuLi56d1tkOCgweDU1NSldXVsnc29ydCddKChaYixaZCk9PlplKFpiWydrJ10pLVplKFpkWydrJ10pKSl7ZGVsZXRlIFpCW2Q4KDB4NDQ4KV07aWYoWkJbJ2snXT09PWQ4KDB4MjNjKSlaQltkOCgweDM3NSldPSFbXTtpZihaQlsnayddPT09ZDgoMHg1ZmQpJiYhWkJbZDgoMHg0MjYpXSl7Y29uc3QgWmI9ZkYoWkIpO1pCW2Q4KDB4NWE2KV09IVpCW2Q4KDB4MjQ4KV0mJiEoWmJbJ2wnXXx8WmJbJ3InXXx8WmJbJ3QnXXx8WmJbJ2InXSkmJiEoWkJbJ2V4dCddJiZaQltkOCgweDM4ZCldW2Q4KDB4NjYxKV0pO31aQlsnayddPT09ZDgoMHg1ZmQpJiYhWkJbZDgoMHg0MjYpXSYmKFpCWydkaW5lTm9vayddPSFbXSxaQltkOCgweDUxMyldPVpCW2Q4KDB4Mjc4KV18fCFbXSk7aWYoWkJbJ2snXT09PWQ4KDB4NWZkKSYmIVpCW2Q4KDB4NDI2KV0mJiFaQltkOCgweDUxMyldJiYhWkJbZDgoMHgyYjApXSl7Y29uc3QgWmQ9WkJbJ2MnXXx8WkJbJ2InXSxaQz0oWmRbMHgyXS1aZFsweDBdKSooWmRbMHgzXS1aZFsweDFdKTtpZihaQz49KFpCW2Q4KDB4MjQ4KV0\/NC41OjB4OCkmJk1hdGhbZDgoMHg0M2MpXShaZFsweDJdLVpkWzB4MF0sWmRbMHgzXS1aZFsweDFdKT49MHgyJiYhWkJbJ2RhcmsnXSl7Y29uc3QgWlQ9endbJ3Jvb21zJ11bZDgoMHg1ZWIpXShaQiksWm89endbZDgoMHg1NTUpXVtkOCgweDJiNSldKChadyxaYSk9Plp3WydrJ109PT0nbGl2ZScmJlp3W2Q4KDB4NGI0KV0mJnp3W2Q4KDB4Mjg3KV0mJnp3W2Q4KDB4Mjg3KV1bZDgoMHgyN2YpXVtkOCgweDY2OCldKFpzPT5ac1sweDBdPT09WlQmJlpzWzB4MV09PT1aYXx8WnNbMHgxXT09PVpUJiZac1sweDBdPT09WmEpKTtpZihabyYmIShab1tkOCgweDRiNCldW2Q4KDB4MzljKV0mJlpvW2Q4KDB4NGI0KV1bJ3NvZmEnXSkpe2NvbnN0IFp3PVtab1tkOCgweDJmMyldLFpvWydmdXJuSW5mbyddXTtmRyhabyx7J25vRGluZSc6ISFbXX0pO2NvbnN0IFphPVpvW2Q4KDB4NGI0KV1bZDgoMHg1NTYpXT9JZyh7Li4uWkIsJ2InOlpCWydjJ118fFpCWydiJ10sJ2V4dCc6ZkYoWkIpLCdub1RhYmxlJzohW119LFBkLFBCPjB4MHx8UGI+MHgwKTpbXTtab1snZnVybkluZm8nXVtkOCgweDU1NildJiZaYVtkOCgweDY2OCldKFpzPT5ac1tkOCgweDVmMildPT09ZDgoMHgzOWMpKT8oWm9bZDgoMHgzNzUpXT0hIVtdLFpCW2Q4KDB4MmIwKV09ISFbXSk6KFpvW2Q4KDB4Mzc1KV09IVtdLGZHKFpvLHt9KSk7fWlmKCFaQltkOCgweDJiMCldJiZ6d1tkOCgweDU1NSldW2Q4KDB4NjY4KV0oWnM9PlpzWydrJ109PT1kOCgweDIzYykmJlpzW2Q4KDB4NGI0KV0mJlpzW2Q4KDB4NGI0KV1bJ2RpbmUnXSkpWkJbZDgoMHg1MTMpXT0hIVtdO319ZkcoWkIsWkJbZDgoMHgzNzUpXT97J25vRGluZSc6ISFbXX06e30pO319O2ZMKCk7Zm9yKGNvbnN0IFplIG9mIHp3W2JCKDB4Mzg5KV0pe2lmKCFaZVsnbGVhZiddKWNvbnRpbnVlO2NvbnN0IFpCPVplWydnYXAnXSxaYj1NYXRoW2JCKDB4M2FkKV0oWkJbMHgwXVsweDFdLVpCWzB4MV1bMHgxXSk8MC4wMSxaZD1NYXRoW2JCKDB4NDc1KV0oWkJbMHgxXVsweDBdLVpCWzB4MF1bMHgwXSxaQlsweDFdWzB4MV0tWkJbMHgwXVsweDFdKTtpZihaZDwwLjMpY29udGludWU7Y29uc3QgWkM9KFplW2JCKDB4NDM4KV1bMHgxXVsweDBdLVplW2JCKDB4NDM4KV1bMHgwXVsweDBdKS9aZCxaVD0oWmVbYkIoMHg0MzgpXVsweDFdWzB4MV0tWmVbYkIoMHg0MzgpXVsweDBdWzB4MV0pL1pkLFpvPShaQlsweDBdWzB4MF0rWkJbMHgxXVsweDBdKS8weDIsWnc9KFpCWzB4MF1bMHgxXStaQlsweDFdWzB4MV0pLzB4MixaYT1QUihabytaQyowLjMsWncrWlQqMC4zKTtpZihaYTwweDApY29udGludWU7Y29uc3QgWnM9endbYkIoMHg1NTUpXVtaYV1bJ2InXSxaVj1abD0+WmI\/TWF0aFsnbWluJ10oWmxbMHgwXS1ac1sweDBdLFpzWzB4Ml0tWmxbMHgwXSk6TWF0aFtiQigweDQzYyldKFpsWzB4MV0tWnNbMHgxXSxac1sweDNdLVpsWzB4MV0pLFpFPVpWKFpCWzB4MF0pLFpVPVpWKFpCWzB4MV0pLFpYPSh6d1sncm9vbXMnXVtaYV1bYkIoMHgyZjMpXXx8W10pW2JCKDB4MzdmKV0oWmw9Pntjb25zdCBkOT1iQixabT1abFtkOSgweDM3ZildKFpuPT5ablsweDBdKSxaSj1abFtkOSgweDM3ZildKFpuPT5ablsweDFdKTtyZXR1cm5bTWF0aFtkOSgweDQzYyldKC4uLlptKSxNYXRoWydtaW4nXSguLi5aSiksTWF0aFtkOSgweDQ1MSldKC4uLlptKSxNYXRoW2Q5KDB4NDUxKV0oLi4uWkopXTt9KSxaVz1abD0+e2NvbnN0IGRJPWJCLFptPVtNYXRoW2RJKDB4NDNjKV0oWmxbMHgwXSxabFsweDBdK1pDKlpkLFpsWzB4MF0rKFpCWzB4MF1bMHgwXStaQlsweDFdWzB4MF0tWmxbMHgwXSoweDIpKSxNYXRoW2RJKDB4NDNjKV0oWmxbMHgxXSxabFsweDFdK1pUKlpkLFpsWzB4MV0rKFpCWzB4MF1bMHgxXStaQlsweDFdWzB4MV0tWmxbMHgxXSoweDIpKSxNYXRoW2RJKDB4NDUxKV0oWmxbMHgwXSxabFsweDBdK1pDKlpkLFpsWzB4MF0rKFpCWzB4MF1bMHgwXStaQlsweDFdWzB4MF0tWmxbMHgwXSoweDIpKSxNYXRoWydtYXgnXShabFsweDFdLFpsWzB4MV0rWlQqWmQsWmxbMHgxXSsoWkJbMHgwXVsweDFdK1pCWzB4MV1bMHgxXS1abFsweDFdKjB4MikpXTtyZXR1cm4gWlhbZEkoMHgyYTYpXShaSj0+WkpbMHgwXTxabVsweDJdJiZabVsweDBdPFpKWzB4Ml0mJlpKWzB4MV08Wm1bMHgzXSYmWm1bMHgxXTxaSlsweDNdKVtkSSgweDY2MSldO30sWkY9WlcoWkJbMHgwXSksWkc9WlcoWkJbMHgxXSk7aWYoWkc+WkZ8fFpHPT09WkYmJlpVKzAuMTU+PVpFKWNvbnRpbnVlO2NvbnN0IFpMPVpCWzB4MV0sWks9WkJbMHgwXSxaaj0oWktbMHgwXS1aTFsweDBdKS9aZCxaSD0oWktbMHgxXS1aTFsweDFdKS9aZCxaUT1bXTtmb3IobGV0IFpsPTB4MDtabDw9MHg4O1psKyspe2NvbnN0IFptPVpsLzB4OCpNYXRoWydQSSddLzB4MjtaUVsncHVzaCddKFtaTFsweDBdKyhaQypNYXRoW2JCKDB4NGJmKV0oWm0pK1pqKk1hdGhbYkIoMHg2NjcpXShabSkpKlpkLFpMWzB4MV0rKFpUKk1hdGhbYkIoMHg0YmYpXShabSkrWkgqTWF0aFsnc2luJ10oWm0pKSpaZF0pO31aZVtiQigweDI5ZildPVtaTCxaS10sWmVbYkIoMHg0MzgpXT1bWkwsW1pMWzB4MF0rWkMqWmQsWkxbMHgxXStaVCpaZF1dLFplW2JCKDB4M2U3KV09WlE7fXtjb25zdCBaSj1PMz0+e2NvbnN0IGRyPWJCLE80PU8zW2RyKDB4NDM4KV1bMHgwXSxPNT1PM1tkcigweDQzOCldWzB4MV0sTzY9TzNbZHIoMHgyOWYpXVsweDFdLE83PVtPNFsweDBdLE82WzB4MF0sTzVbMHgwXSxPNlsweDBdK081WzB4MF0tTzRbMHgwXV0sTzg9W080WzB4MV0sTzZbMHgxXSxPNVsweDFdLE82WzB4MV0rTzVbMHgxXS1PNFsweDFdXSxPOT1bTWF0aFtkcigweDQzYyldKC4uLk83KSxNYXRoW2RyKDB4NDNjKV0oLi4uTzgpLE1hdGhbZHIoMHg0NTEpXSguLi5PNyksTWF0aFtkcigweDQ1MSldKC4uLk84KV07cmV0dXJuIE85WydoJ109TzQsTzlbJ3InXT1NYXRoW2RyKDB4NDc1KV0oTzVbMHgwXS1PNFsweDBdLE81WzB4MV0tTzRbMHgxXSksTzk7fSxabj0oTzMsTzQpPT5NYXRoW2JCKDB4NDc1KV0oTWF0aFtiQigweDQ1MSldKE8zWydoJ11bMHgwXS1PNFsweDJdLDB4MCxPNFsweDBdLU8zWydoJ11bMHgwXSksTWF0aFtiQigweDQ1MSldKE8zWydoJ11bMHgxXS1PNFsweDNdLDB4MCxPNFsweDFdLU8zWydoJ11bMHgxXSkpPE8zWydyJ10tMC4wMixaUj0oTzMsTzQpPT5PM1sweDBdPE80WzB4Ml0tMC4wMyYmTzRbMHgwXTxPM1sweDJdLTAuMDMmJk8zWzB4MV08TzRbMHgzXS0wLjAzJiZPNFsweDFdPE8zWzB4M10tMC4wMyYmWm4oTzMsTzQpJiZabihPNCxPMyksWnk9KE8zLE80LE81KT0+e2NvbnN0IGRoPWJCLE82PU1hdGhbJ2h5cG90J10oTzVbMHgwXS1PNFsweDBdLE81WzB4MV0tTzRbMHgxXSksTzc9TzNbJ2xlYWYnXSxPOD1NYXRoW2RoKDB4NDc1KV0oTzdbMHgxXVsweDBdLU83WzB4MF1bMHgwXSxPN1sweDFdWzB4MV0tTzdbMHgwXVsweDFdKXx8TzYsTzk9KE83WzB4MV1bMHgwXS1PN1sweDBdWzB4MF0pL084LE9JPShPN1sweDFdWzB4MV0tTzdbMHgwXVsweDFdKS9POCxPcj0oTzVbMHgwXS1PNFsweDBdKS9PNixPaD0oTzVbMHgxXS1PNFsweDFdKS9PNixPYz1bXTtmb3IobGV0IE9rPTB4MDtPazw9MHg4O09rKyspe2NvbnN0IE9pPU9rLzB4OCpNYXRoWydQSSddLzB4MjtPY1tkaCgweDJiMyldKFtPNFsweDBdKyhPOSpNYXRoW2RoKDB4NGJmKV0oT2kpK09yKk1hdGhbZGgoMHg2NjcpXShPaSkpKk82LE80WzB4MV0rKE9JKk1hdGhbZGgoMHg0YmYpXShPaSkrT2gqTWF0aFsnc2luJ10oT2kpKSpPNl0pO31PM1snZ2FwJ109W080LE81XSxPM1tkaCgweDQzOCldPVtPNCxbTzRbMHgwXStPOSpPNixPNFsweDFdK09JKk82XV0sTzNbZGgoMHgzZTcpXT1PYzt9LFp4PU8zPT57Y29uc3QgZGM9YkIsTzQ9TzNbZGMoMHgyOWYpXSxPNT0oTzRbMHgwXVsweDBdK080WzB4MV1bMHgwXSkvMHgyLE82PShPNFsweDBdWzB4MV0rTzRbMHgxXVsweDFdKS8weDIsTzc9TWF0aFtkYygweDNhZCldKE80WzB4MF1bMHgxXS1PNFsweDFdWzB4MV0pPDAuMDE7cmV0dXJuW083P1BSKE81LE82LTAuMjUpOlBSKE81LTAuMjUsTzYpLE83P1BSKE81LE82KzAuMjUpOlBSKE81KzAuMjUsTzYpXTt9LFpnPShPMyxPNCk9Plp4KE8zKVsnZXZlcnknXShPNT0+e2NvbnN0IGRrPWJCO2lmKE81PDB4MClyZXR1cm4hIVtdO2NvbnN0IE82PXp3W2RrKDB4NTU1KV1bTzVdWydiJ107cmV0dXJuIE80W2RrKDB4NDM1KV0oTzc9Pk83WzB4MF0+PU82WzB4MF0tMC4wMiYmTzdbMHgwXTw9TzZbMHgyXSswLjAyJiZPN1sweDFdPj1PNlsweDFdLTAuMDImJk83WzB4MV08PU82WzB4M10rMC4wMik7fSksWnQ9endbYkIoMHgzODkpXVsnZmlsdGVyJ10oTzM9Pk8zW2JCKDB4NDM4KV0pLFpEPU8zPT5adFtiQigweDJhNildKChPNCxPNSk9Pk81IT09TzMpW2JCKDB4MzdmKV0oWkopLFpTPU8zPT57Y29uc3QgZGk9YkIsTzQ9WkooWnRbTzNdKTtyZXR1cm4gWkQoTzMpW2RpKDB4MmE2KV0oTzU9PlpSKE80LE81KSlbZGkoMHg2NjEpXTt9O2ZvcihsZXQgTzM9MHgwO08zPFp0W2JCKDB4NjYxKV07TzMrKyl7aWYoIVpTKE8zKSljb250aW51ZTtjb25zdCBPND1adFtPM10sTzU9TzRbYkIoMHgyOWYpXVtiQigweDM3ZildKE9JPT5PSVtiQigweDI3MCldKCkpLE82PU80W2JCKDB4NDM4KV1bJ21hcCddKE9JPT5PSVsnc2xpY2UnXSgpKSxPNz1PNFtiQigweDNlNyldLE84PVtdO084W2JCKDB4MmIzKV0oKCk9Plp5KE80LE81WzB4MV0sTzVbMHgwXSkpO2Zvcihjb25zdCBPSSBvZlswLjMsLTAuMywwLjYsLTAuNl0pe2NvbnN0IE9yPVtPNVsweDFdWzB4MF0tTzVbMHgwXVsweDBdLE81WzB4MV1bMHgxXS1PNVsweDBdWzB4MV1dLE9oPU1hdGhbYkIoMHg0NzUpXShPclsweDBdLE9yWzB4MV0pfHwweDEsT2M9TzVbYkIoMHgzN2YpXShPaz0+W09rWzB4MF0rT3JbMHgwXS9PaCpPSSxPa1sweDFdK09yWzB4MV0vT2gqT0ldKTtPOFtiQigweDJiMyldKCgpPT57aWYoIVpnKE80LE9jKSlyZXR1cm4hW107cmV0dXJuIFp5KE80LE9jWzB4MF0sT2NbMHgxXSksISFbXTt9KSxPOFtiQigweDJiMyldKCgpPT57aWYoIVpnKE80LE9jKSlyZXR1cm4hW107cmV0dXJuIFp5KE80LE9jWzB4MV0sT2NbMHgwXSksISFbXTt9KTt9bGV0IE85PSFbXTtmb3IoY29uc3QgT2sgb2YgTzgpe2lmKE9rKCk9PT0hW10pY29udGludWU7aWYoIVpTKE8zKSl7Tzk9ISFbXTticmVhazt9fSFPOSYmKE80W2JCKDB4MjlmKV09TzUsTzRbYkIoMHg0MzgpXT1PNixPNFtiQigweDNlNyldPU83KTt9bGV0IE8wPTB4MDtmb3IobGV0IE9pPTB4MDtPaTxadFsnbGVuZ3RoJ107T2krKylmb3IobGV0IE9OPU9pKzB4MTtPTjxadFtiQigweDY2MSldO09OKyspaWYoWlIoWkooWnRbT2ldKSxaSihadFtPTl0pKSlPMCsrO2NvbnN0IE8xPXp3Wydyb29tcyddWydtYXAnXSgoT3YsT3UpPT5PdlsnayddPT09YkIoMHg2MzMpP091Oi0weDEpW2JCKDB4MmE2KV0oT3Y9Pk92Pj0weDApO2xldCBPMj0weDA7Zm9yKGNvbnN0IE92IG9mIE8xKXtjb25zdCBPdT1adFtiQigweDJhNildKE9NPT5QUihPTVtiQigweDQzOCldWzB4MV1bMHgwXSxPTVtiQigweDQzOCldWzB4MV1bMHgxXSk9PT1PdiksT1k9T3VbYkIoMHgzN2YpXShaSik7TzI9TWF0aFtiQigweDQ1MSldKE8yLE9ZW2JCKDB4MmE2KV0oKE9NLE9xKT0+T1lbYkIoMHg2NjgpXSgoT3osT1ApPT5PUCE9PU9xJiZaUihPTSxPeikpKVsnbGVuZ3RoJ10pO316d1tiQigweDFlMildPU8wLHp3W2JCKDB4MmM2KV09TzIsendbYkIoMHg0NjMpXVsnZG9vckNsYXNoJ109TzA+MHgwfHxPMj5JNFtiQigweDJkZildWydoYWxsRG9vcnMnXTt9Y29uc3QgZks9endbYkIoMHgzODkpXVtiQigweDM3ZildKE9NPT57Y29uc3QgZE49YkIsT3E9T01bJ2dhcCddO2lmKE9NWydsZWFmJ10pe2NvbnN0IE9QPU9NW2ROKDB4NDM4KV1bMHgwXSxPZj1PTVtkTigweDQzOCldWzB4MV0sT0E9T3FbMHgxXSxPcD1bT1BbMHgwXSxPQVsweDBdLE9mWzB4MF0sT0FbMHgwXStPZlsweDBdLU9QWzB4MF1dLE9aPVtPUFsweDFdLE9BWzB4MV0sT2ZbMHgxXSxPQVsweDFdK09mWzB4MV0tT1BbMHgxXV0sT089W01hdGhbZE4oMHg0M2MpXSguLi5PcCksTWF0aFtkTigweDQzYyldKC4uLk9aKSxNYXRoW2ROKDB4NDUxKV0oLi4uT3ApLE1hdGhbZE4oMHg0NTEpXSguLi5PWildO3JldHVybiBPT1snaCddPU9QLE9PWydyJ109TWF0aFtkTigweDQ3NSldKE9mWzB4MF0tT1BbMHgwXSxPZlsweDFdLU9QWzB4MV0pLE9PO31jb25zdCBPej1PcVsweDBdWzB4MV09PT1PcVsweDFdWzB4MV07cmV0dXJuW01hdGhbZE4oMHg0M2MpXShPcVsweDBdWzB4MF0sT3FbMHgxXVsweDBdKS0oT3o\/MHgwOjAuOCksTWF0aFsnbWluJ10oT3FbMHgwXVsweDFdLE9xWzB4MV1bMHgxXSktKE96PzAuODoweDApLE1hdGhbZE4oMHg0NTEpXShPcVsweDBdWzB4MF0sT3FbMHgxXVsweDBdKSsoT3o\/MHgwOjAuOCksTWF0aFtkTigweDQ1MSldKE9xWzB4MF1bMHgxXSxPcVsweDFdWzB4MV0pKyhPej8wLjg6MHgwKV07fSk7e2NvbnN0IE9NPWZyWydlbnRyeSddLE9xPShPTVsneCddKzAuNStPTVsnZHgnXSowLjUpKlUsT3o9KE9NWyd5J10rMC41K09NWydkeSddKjAuNSkqVSxPUD1PTVsnZHknXT8wLjU1OjEuMDUsT2Y9T01bJ2R4J10\/MC41NToxLjA1O2ZLW2JCKDB4MmIzKV0oW09xLU9QLE96LU9mLE9xK09QLE96K09mXSk7fWlmKHp3W2JCKDB4Mjg3KV0pendbYkIoMHg1NTUpXVtiQigweDNiOSldKChPQSxPcCk9Pntjb25zdCBkdj1iQjtpZihPQVsnayddIT09J2xpdmUnJiZPQVsnayddIT09ZHYoMHgyMTQpJiZPQVsnayddIT09ZHYoMHg1ZmQpKXJldHVybjtjb25zdCBPWj16d1tkdigweDI4NyldW2R2KDB4MjdmKV1bZHYoMHgyYTYpXShPTz0+IU9PWzB4NF0mJihPT1sweDBdPT09T3B8fE9PWzB4MV09PT1PcCkpW2R2KDB4MzdmKV0oT089PltPT1sweDJdLE9PWzB4M11dKTtpZih6d1tkdigweDI4NyldW2R2KDB4NDQ5KV09PT1PcClPWltkdigweDJiMyldKFt6d1tkdigweDI4NyldWydjeCddLHp3W2R2KDB4Mjg3KV1bJ2N5J11dKTtmb3IobGV0IE9PPTB4MTtPTzxPWltkdigweDY2MSldO09PKyspe2NvbnN0IFtPZSxPQl09T1pbMHgwXSxbT2IsT2RdPU9aW09PXSxPQz1PVD0+e2NvbnN0IGR1PWR2O3JldHVybiBPVFtkdSgweDNhOCldPSEhW10sT1Q7fTtmS1sncHVzaCddKE9DKFtNYXRoWydtaW4nXShPZSxPYiktMC4zNSxPQi0wLjM1LE1hdGhbZHYoMHg0NTEpXShPZSxPYikrMC4zNSxPQiswLjM1XSksT0MoW09iLTAuMzUsTWF0aFtkdigweDQzYyldKE9CLE9kKS0wLjM1LE9iKzAuMzUsTWF0aFtkdigweDQ1MSldKE9CLE9kKSswLjM1XSkpO319KTtjb25zdCBmaj1PQT0+e2NvbnN0IGRZPWJCLE9wPU9BWydtYXAnXShPTz0+T09bMHgwXSksT1o9T0FbZFkoMHgzN2YpXShPTz0+T09bMHgxXSk7cmV0dXJuW01hdGhbZFkoMHg0M2MpXSguLi5PcCksTWF0aFtkWSgweDQzYyldKC4uLk9aKSxNYXRoW2RZKDB4NDUxKV0oLi4uT3ApLE1hdGhbZFkoMHg0NTEpXSguLi5PWildO30sZkg9KE9BLE9wKT0+IU9BWydoJ118fE1hdGhbYkIoMHg0NzUpXShNYXRoW2JCKDB4NDUxKV0oT0FbJ2gnXVsweDBdLU9wWzB4Ml0sMHgwLE9wWzB4MF0tT0FbJ2gnXVsweDBdKSxNYXRoWydtYXgnXShPQVsnaCddWzB4MV0tT3BbMHgzXSwweDAsT3BbMHgxXS1PQVsnaCddWzB4MV0pKTxPQVsnciddKzAuMDMsZlE9KE9BLE9wKT0+TWF0aFsnbWluJ10oT0FbMHgyXS1PQVsweDBdLE9BWzB4M10tT0FbMHgxXSk8PTAuNzImJihPQVsweDBdLU9wWzB4MF08MC4xNXx8T0FbMHgxXS1PcFsweDFdPDAuMTV8fE9wWzB4Ml0tT0FbMHgyXTwwLjE1fHxPcFsweDNdLU9BWzB4M108MC4xNSksZm09KE9BLE9wKT0+T0FbMHgwXTxPcFsweDJdJiZPcFsweDBdPE9BWzB4Ml0mJk9BWzB4MV08T3BbMHgzXSYmT3BbMHgxXTxPQVsweDNdJiZmSChPQSxPcCkmJmZIKE9wLE9BKSxmSj0oT0EsT3AsT1opPT5mbShPQSxPcCkmJiEoT3BbYkIoMHgzYTgpXSYmT1omJmZRKE9BLE9aKSksZm49KE9BLE9wKT0+T0FbYkIoMHgyYTYpXShPWj0+e2NvbnN0IGRNPWJCLE9PPWZqKE9aKTtyZXR1cm4gZktbZE0oMHg2NjgpXShPZT0+ZkooT08sT2UsT3ApKTt9KVtiQigweDY2MSldO2Zvcihjb25zdCBPQSBvZiB6d1tiQigweDU1NSldKXtjb25zdCBPcD1PQVsnYyddfHxPQVsnYiddO09BWydibGsnXT1mS1tiQigweDJhNildKE9aPT5mbShPWixPcCkmJk1hdGhbYkIoMHg0M2MpXShPWlsweDJdLE9wWzB4Ml0pLU1hdGhbJ21heCddKE9aWzB4MF0sT3BbMHgwXSk+MC4wNiYmTWF0aFtiQigweDQzYyldKE9aWzB4M10sT3BbMHgzXSktTWF0aFtiQigweDQ1MSldKE9aWzB4MV0sT3BbMHgxXSk+MC4wNilbYkIoMHgzN2YpXShPWj0+e2NvbnN0IGRxPWJCLE9PPVtNYXRoW2RxKDB4NDUxKV0oT1pbMHgwXSxPcFsweDBdKSxNYXRoW2RxKDB4NDUxKV0oT1pbMHgxXSxPcFsweDFdKSxNYXRoW2RxKDB4NDNjKV0oT1pbMHgyXSxPcFsweDJdKSxNYXRoW2RxKDB4NDNjKV0oT1pbMHgzXSxPcFsweDNdKV07T1pbJ2gnXSYmKE9PWydoJ109T1pbJ2gnXSxPT1snciddPU9aWydyJ10pO2lmKE9aW2RxKDB4M2E4KV0pT09bZHEoMHgzYTgpXT0hIVtdO3JldHVybiBPTzt9KTt9ZkwoKTtjb25zdCBmUj1PWj0+T1pbJ2snXT09PSd3Yyd8fE9aWydrJ109PT1iQigweDRjMil8fE9aWydrJ109PT1iQigweDI0Mik\/MHgwOjB4MTtmb3IoY29uc3QgT1ogb2ZbLi4uendbJ3Jvb21zJ11dW2JCKDB4NTc4KV0oKE9PLE9lKT0+ZlIoT08pLWZSKE9lKSkpe2lmKCFPWlsnZnVybiddfHwhT1pbJ2Z1cm4nXVtiQigweDY2MSldKWNvbnRpbnVlO2NvbnN0IE9PPU9aWydjJ118fE9aWydiJ10sT2U9KE9ULE9vLE93KT0+T1RbYkIoMHgzN2YpXShPYT0+e2NvbnN0IGR6PWJCLE9zPU9hWydtYXAnXShPVj0+W09vP09PWzB4MF0rT09bMHgyXS1PVlsweDBdOk9WWzB4MF0sT3c\/T09bMHgxXStPT1sweDNdLU9WWzB4MV06T1ZbMHgxXV0pO2lmKE9hWydnJ10pT3NbJ2cnXT1PYVsnZyddO2lmKE9hW2R6KDB4NWYyKV0pT3NbZHooMHg1ZjIpXT1PYVsndGFnJ107cmV0dXJuIE9hWydydWcnXSYmKE9zW2R6KDB4MWU2KV09ISFbXSxPc1snZnknXT1PYVsnZnknXSksT3M7fSksT0I9T1pbYkIoMHgyZjMpXTtsZXQgT2I9T0IsT2Q9Zm4oT2IsT08pO2lmKE9kJiYhZlIoT1opJiYoT09bMHgyXS1PT1sweDBdKSooT09bMHgzXS1PT1sweDFdKTw0LjUpe2xldCBPVD0hW107endbYkIoMHgzODkpXVtiQigweDNiOSldKChPbyxPdyk9Pntjb25zdCBkUD1iQjtpZighT29bZFAoMHg0MzgpXXx8IWZtKGZLW093XSxPTykpcmV0dXJuO2NvbnN0IE9hPU9vW2RQKDB4NDM4KV1bMHgwXSxPcz1Pb1tkUCgweDQzOCldWzB4MV07aWYoT3NbMHgwXTxPT1sweDBdLTAuM3x8T3NbMHgwXT5PT1sweDJdKzAuM3x8T3NbMHgxXTxPT1sweDFdLTAuM3x8T3NbMHgxXT5PT1sweDNdKzAuMylyZXR1cm47Y29uc3QgT1Y9T29bZFAoMHgyOWYpXSxPRT1NYXRoW2RQKDB4NDc1KV0oT1ZbMHgxXVsweDBdLU9WWzB4MF1bMHgwXSxPVlsweDFdWzB4MV0tT1ZbMHgwXVsweDFdKSxPVT1NYXRoW2RQKDB4NDc1KV0oT1ZbMHgwXVsweDBdLU9hWzB4MF0sT1ZbMHgwXVsweDFdLU9hWzB4MV0pPDAuMDE\/T1ZbMHgxXTpPVlsweDBdLE9YPShPYVsweDBdLU9zWzB4MF0pL09FLE9XPShPYVsweDFdLU9zWzB4MV0pL09FLE9GPShPVVsweDBdLU9hWzB4MF0pL09FLE9HPShPVVsweDFdLU9hWzB4MV0pL09FLE9MPVtdO2ZvcihsZXQgT1E9MHgwO09RPD0weDg7T1ErKyl7Y29uc3QgT2w9T1EvMHg4Kk1hdGhbJ1BJJ10vMHgyO09MW2RQKDB4MmIzKV0oW09hWzB4MF0rKE9YKk1hdGhbZFAoMHg0YmYpXShPbCkrT0YqTWF0aFsnc2luJ10oT2wpKSpPRSxPYVsweDFdKyhPVypNYXRoW2RQKDB4NGJmKV0oT2wpK09HKk1hdGhbJ3NpbiddKE9sKSkqT0VdKTt9T29bZFAoMHg0MzgpXT1bT2EsW09hWzB4MF0rT1gqT0UsT2FbMHgxXStPVypPRV1dLE9vW2RQKDB4M2U3KV09T0w7Y29uc3QgT0s9T29bZFAoMHg0MzgpXVsweDFdLE9qPVtPYVsweDBdLE9VWzB4MF0sT0tbMHgwXSxPVVsweDBdK09LWzB4MF0tT2FbMHgwXV0sT0g9W09hWzB4MV0sT1VbMHgxXSxPS1sweDFdLE9VWzB4MV0rT0tbMHgxXS1PYVsweDFdXTtmS1tPd109W01hdGhbZFAoMHg0M2MpXSguLi5PaiksTWF0aFtkUCgweDQzYyldKC4uLk9IKSxNYXRoW2RQKDB4NDUxKV0oLi4uT2opLE1hdGhbZFAoMHg0NTEpXSguLi5PSCldLGZLW093XVsnaCddPU9hLGZLW093XVsnciddPU9FLE9UPSEhW107fSk7aWYoT1QpT2Q9Zm4oT2IsT08pO31jb25zdCBPQz1PZCYmT0JbYkIoMHgzOTkpXT9bT0IsLi4uT0JbYkIoMHgzOTkpXSgpXTpbT0JdO2Zvcihjb25zdCBPbyBvZiBPQylmb3IoY29uc3QgW093LE9hXW9mW1sweDAsMHgwXSxbMHgxLDB4MF0sWzB4MCwweDFdLFsweDEsMHgxXV0pe2lmKCFPZClicmVhaztpZihPbz09PU9CJiYhT3cmJiFPYSljb250aW51ZTtpZihPWlsnayddPT09YkIoMHgyM2MpfHxPWlsnayddPT09YkIoMHgyMTQpKXtpZihQZD9PYTpPdyljb250aW51ZTt9Y29uc3QgT3M9T3d8fE9hP09lKE9vLE93LE9hKTpPbyxPVj1mbihPcyxPTyk7T1Y8T2QmJihPYj1PcyxPZD1PVik7fWlmKE9kKXtjb25zdCBPRT1PYltiQigweDM3ZildKGZqKSxPVT1PYltiQigweDM3ZildKChPSyxPaik9Pk9qKSxPWD1PSz0+e3doaWxlKE9VW09LXSE9PU9LKU9LPU9VW09LXTtyZXR1cm4gT0s7fSxPVz0oT0ssT2opPT5PS1sweDBdPD1PalsweDJdKzAuMTImJk9qWzB4MF08PU9LWzB4Ml0rMC4xMiYmT0tbMHgxXTw9T2pbMHgzXSswLjEyJiZPalsweDFdPD1PS1sweDNdKzAuMTI7Zm9yKGxldCBPSz0weDA7T0s8T2JbYkIoMHg2NjEpXTtPSysrKWZvcihsZXQgT2o9T0srMHgxO09qPE9iW2JCKDB4NjYxKV07T2orKylpZihPYltPS11bJ2cnXXx8T2JbT2pdWydnJ10\/T2JbT0tdWydnJ109PT1PYltPal1bJ2cnXTpPVyhPRVtPS10sT0VbT2pdKSlPVVtPWChPSyldPU9YKE9qKTtjb25zdCBPRj1uZXcgU2V0KCk7T0VbYkIoMHgzYjkpXSgoT0gsT1EpPT57Y29uc3QgZGY9YkI7aWYoZktbZGYoMHg2NjgpXShPbD0+ZkooT0gsT2wsT08pKSlPRltkZigweDY3MildKE9YKE9RKSk7fSk7Y29uc3QgT0c9T1pbJ2MnXXx8T1pbJ2InXSxPTD1uZXcgU2V0KCk7Zm9yKGNvbnN0IE9IIG9mWy4uLk9GXSl7Y29uc3QgT1E9T2JbYkIoMHgzN2YpXSgoT1IsT3kpPT5PeSlbJ2ZpbHRlciddKE9SPT5PWChPUik9PT1PSCksT2w9W01hdGhbJ21pbiddKC4uLk9RW2JCKDB4MzdmKV0oT1I9Pk9FW09SXVsweDBdKSksTWF0aFtiQigweDQzYyldKC4uLk9RW2JCKDB4MzdmKV0oT1I9Pk9FW09SXVsweDFdKSksTWF0aFsnbWF4J10oLi4uT1FbYkIoMHgzN2YpXShPUj0+T0VbT1JdWzB4Ml0pKSxNYXRoW2JCKDB4NDUxKV0oLi4uT1FbYkIoMHgzN2YpXShPUj0+T0VbT1JdWzB4M10pKV0sT209ZktbYkIoMHgyYTYpXShPUj0+ZkooT2wsT1IsT08pKSxPSj1PbFsweDBdLU9HWzB4MF08MC4xNXx8T0dbMHgyXS1PbFsweDJdPDAuMTUsT249T2xbMHgxXS1PR1sweDFdPDAuMTV8fE9HWzB4M10tT2xbMHgzXTwwLjE1O2Zvcihjb25zdCBbT1IsT3ldb2YgT0omJiFPbj9bWzB4MCwweDFdLFsweDAsLTB4MV1dOk9uJiYhT0o\/W1sweDEsMHgwXSxbLTB4MSwweDBdXTpbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtsZXQgT3g9MHgwO2Zvcihjb25zdCBPdCBvZiBPbSlPeD1NYXRoW2JCKDB4NDUxKV0oT3gsT1I+MHgwP090WzB4Ml0tT2xbMHgwXTpPUjwweDA\/T2xbMHgyXS1PdFsweDBdOk95PjB4MD9PdFsweDNdLU9sWzB4MV06T2xbMHgzXS1PdFsweDFdKTtPeCs9MC4wNTtpZihPeD4xLjYpY29udGludWU7Y29uc3QgT2c9W09sWzB4MF0rT1IqT3gsT2xbMHgxXStPeSpPeCxPbFsweDJdK09SKk94LE9sWzB4M10rT3kqT3hdO2lmKE9nWzB4MF08T0dbMHgwXS0wLjAyfHxPZ1sweDFdPE9HWzB4MV0tMC4wMnx8T2dbMHgyXT5PR1sweDJdKzAuMDJ8fE9nWzB4M10+T0dbMHgzXSswLjAyfHxmS1tiQigweDY2OCldKE9EPT5mSihPZyxPRCxPTykpfHxPRVsnc29tZSddKChPRCxPUyk9Pk9YKE9TKSE9PU9IJiYhT0ZbYkIoMHgzMGIpXShPWChPUykpJiZmbShPZyxPRCkpKWNvbnRpbnVlO2Zvcihjb25zdCBPRCBvZiBPUSl7Y29uc3QgT1M9T2JbT0RdW2JCKDB4MzdmKV0oZTI9PltlMlsweDBdK09SKk94LGUyWzB4MV0rT3kqT3hdKTtPU1snZyddPU9iW09EXVsnZyddLE9TW2JCKDB4NWYyKV09T2JbT0RdW2JCKDB4NWYyKV0sT1NbYkIoMHgxZTYpXT1PYltPRF1bYkIoMHgxZTYpXSxPU1snZnknXT1PYltPRF1bJ2Z5J10sT2JbT0RdPU9TO31PTFtiQigweDY3MildKE9IKTticmVhazt9fU9iPU9iW2JCKDB4MmE2KV0oKGUyLGUzKT0+IU9GW2JCKDB4MzBiKV0oT1goZTMpKXx8T0xbYkIoMHgzMGIpXShPWChlMykpKTt9e2NvbnN0IGUyPShlMyxlNCk9PmUzWzB4MF08ZTRbMHgyXSswLjA1JiZlNFsweDBdPGUzWzB4Ml0rMC4wNSYmZTNbMHgxXTxlNFsweDNdKzAuMDUmJmU0WzB4MV08ZTNbMHgzXSswLjA1O09iPU9iWydmaWx0ZXInXShlMz0+IWUzW2JCKDB4MWU2KV18fE9iWydzb21lJ10oZTQ9PiFlNFtiQigweDFlNildJiZlNFtiQigweDY2MSldPjB4MiYmZTIoZmooZTQpLGZqKGUzKSkpKTt9T1pbYkIoMHgyZjMpXT1PYjtpZighT2JbYkIoMHg2NjEpXSYmT1pbJ2snXSE9PSdoYWxsJyl7Y29uc3QgW2UzLGU0LGU1LGU2XT1PWlsnYyddfHxPWlsnYiddO2lmKChlNS1lMykqKGU2LWU0KT49MHgzKWZvcihjb25zdCBlNyBvZltbZTMrMC4xNSxlNCswLjA2LGU1LTAuMTUsZTQrMC40Nl0sW2UzKzAuMTUsZTYtMC40NixlNS0wLjE1LGU2LTAuMDZdLFtlMyswLjA2LGU0KzAuMTUsZTMrMC40NixlNi0wLjE1XSxbZTUtMC40NixlNCswLjE1LGU1LTAuMDYsZTYtMC4xNV1dKXtpZihlN1sweDJdLWU3WzB4MF08MC44fHxlN1sweDNdLWU3WzB4MV08MC4zfHxmS1tiQigweDY2OCldKGVJPT5mbShlNyxlSSkpKWNvbnRpbnVlO2NvbnN0IGU4PVtbZTdbMHgwXSxlN1sweDFdXSxbZTdbMHgyXSxlN1sweDFdXSxbZTdbMHgyXSxlN1sweDNdXSxbZTdbMHgwXSxlN1sweDNdXV0sZTk9W107aWYoZTdbMHgyXS1lN1sweDBdPj1lN1sweDNdLWU3WzB4MV0pe2ZvcihsZXQgZUk9ZTdbMHgwXSswLjQ7ZUk8ZTdbMHgyXS0wLjE7ZUkrPTAuNCllOVtiQigweDJiMyldKFtbZUksZTdbMHgxXV0sW2VJLGU3WzB4M11dXSk7fWVsc2V7Zm9yKGxldCBlcj1lN1sweDFdKzAuNDtlcjxlN1sweDNdLTAuMTtlcis9MC40KWU5WydwdXNoJ10oW1tlN1sweDBdLGVyXSxbZTdbMHgyXSxlcl1dKTt9T1pbYkIoMHgyZjMpXT1bZTgsLi4uZTldLE9aW2JCKDB4NDQ4KV09ISFbXTticmVhazt9fX17Y29uc3QgZWg9ZktbYkIoMHgyYTYpXShlYz0+IWVjW2JCKDB4M2E4KV0pO3p3W2JCKDB4MjgwKV09MHgwLHp3WydmdXJuQmxvY2tzJ109W107Zm9yKGNvbnN0IGVjIG9mIHp3Wydyb29tcyddKWZvcihjb25zdCBlayBvZiBlY1tiQigweDJmMyldfHxbXSl7aWYoIWVrW2JCKDB4NWYyKV18fGVrWydsZW5ndGgnXTwweDMpY29udGludWU7Y29uc3QgZWk9ZmooZWspLGVOPWVoW2JCKDB4MmI1KV0oZXY9PmZtKGVpLGV2KSk7ZU4mJih6d1snZnVybkJsb2NrTiddKyssendbYkIoMHgyMzUpXVtiQigweDJiMyldKHsncm9vbSc6ZWNbJ2snXSwndGFnJzpla1tiQigweDVmMildLCdiJzplaVtiQigweDM3ZildKGV2PT4rZXZbYkIoMHgzYjUpXSgweDIpKSwneic6Wy4uLmVOXVsnbWFwJ10oZXY9PitldltiQigweDNiNSldKDB4MikpLCdoJzplTlsnaCddLCdyJzplTlsnciddfSkpO316d1snZXJycyddWydmdXJuQmxvY2snXT16d1tiQigweDI4MCldPjB4MDt9aWYoSWs9PT1iQigweDUzNCkpe2NvbnN0IGV2PXp3W2JCKDB4NTU1KV1bYkIoMHgyYTYpXShldT0+ZXVbJ2snXT09PWJCKDB4MjE0KSlbYkIoMHg2NjEpXTt6d1tiQigweDNhMildPXp3WydsYXlvdXQnXT09PSdzdHVkaW8nPydzJzpldj09PTB4MD8ncyc6ZXY9PT0weDE\/J2EnOmV2PT09MHgyPydiJzonYyc7fX1lbHNlIHp3Wydyb29tcyddPVtdLHp3Wydkb29ycyddPVtdLHp3W2JCKDB4NWNkKV09W107fX07aWYoekcmJih6bHx8em0pKWZvcihjb25zdCBQcSBvZlt6RywuLi5PYmplY3RbYmUoMHgyY2MpXSh6TClbYmUoMHgyYTYpXShQej0+UHohPT16RyldKXt6SihQcSk7aWYoendbJ3Jvb21zJ11bYmUoMHg2NjEpXSlicmVhazt9endbYmUoMHg0NjMpXVtiZSgweDYyNildPSF6d1tiZSgweDU1NSldW2JlKDB4NjYxKV0sendbYmUoMHg0NjMpXVsnbm9CZWQnXT16d1tiZSgweDIxMyldPj0weDJkJiZ6d1tiZSgweDU1NSldWydsZW5ndGgnXT4weDAmJiF6d1tiZSgweDU1NSldW2JlKDB4NjY4KV0oUHo9PlB6WydrJ109PT1iZSgweDIxNCkpLHp3W2JlKDB4NDYzKV1bYmUoMHgxYzEpXT16d1tiZSgweDU1NSldW2JlKDB4MmE2KV0oUHo9PlB6WydrJ109PT1iZSgweDIxNCkpW2JlKDB4NjYxKV0hPT16UTt9KSxjaltiOCgweDNiOSldKCh6dyx6YSk9Pntjb25zdCBkQT1iODtsZXQgenM9MHgwO2Zvcihjb25zdCB6VSBvZiB6d1tkQSgweDJiOSldKXtjb25zdCB6WD16VSVYLHpXPSh6VS16WCkvWDtmb3IoY29uc3QgW3pGLHpHXW9mW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXSl7Y29uc3Qgekw9elgrekYseks9elcrekcsemo9ekw8MHgwfHx6SzwweDB8fHpMPj1YfHx6Sz49Rj9HOllbaEQoekwsekspXTtpZih6aiE9PUcmJnpqIT09emEmJnpqIT09Sil6cys9VTt9fWNvbnN0IHpWPU1hdGhbZEEoMHg0NTEpXSgweDAsendbZEEoMHg1NTUpXVsnZmlsdGVyJ10oekg9PnpIWydrJ10hPT1kQSgweDVmZCkpW2RBKDB4NGIwKV0oKHpILHpRKT0+ekgrKHpRWydiJ11bMHgyXS16UVsnYiddWzB4MF0pKyh6UVsnYiddWzB4M10telFbJ2InXVsweDFdKSwweDApLSh6d1snZmFjJ10renMpLzB4MiksekU9TWF0aFtkQSgweDQ1MSldKDB4MCx6d1snYXJlYSddLXp3WydmYWMnXSpDW2RBKDB4MmY2KV0tenMqQ1tkQSgweDJkMildLzB4Mi16VipDW2RBKDB4MzIwKV0pO2lmKHp3W2RBKDB4NTU1KV1bJ2xlbmd0aCddKXtjb25zdCB6SD16d1tkQSgweDU1NSldWydyZWR1Y2UnXSgoemwsem0pPT56bCsoem1bJ2InXVsweDJdLXptWydiJ11bMHgwXSkqKHptWydiJ11bMHgzXS16bVsnYiddWzB4MV0pLDB4MCkselE9endbZEEoMHg1NTUpXVsncmVkdWNlJ10oKHpsLHptKT0+e2NvbnN0IHpKPXptWydjJ118fHptWydiJ107cmV0dXJuIHpsKyh6SlsweDJdLXpKWzB4MF0pKih6SlsweDNdLXpKWzB4MV0pO30sMHgwKTt6d1tkQSgweDRjYSldPU1hdGhbJ21heCddKDB4MCx6UStNYXRoW2RBKDB4NDUxKV0oMHgwLHp3W2RBKDB4MjEzKV0tekgpKjAuODUpO31lbHNlIHp3W2RBKDB4NGNhKV09ekU7fSk7Y29uc3QgY2c9bmV3IEZsb2F0MzJBcnJheShYKkYpW2I4KDB4MzZmKV0oMHgzYjlhY2EwMCksY3Q9W107Zm9yKGxldCB6dz0weDA7enc8WVtiOCgweDY2MSldO3p3KyspWVt6d109PT1LJiYoY2dbenddPTB4MCxjdFtiOCgweDJiMyldKHp3KSk7aWYoSVkpe2ZvcihsZXQgemE9MHgwO3phPFlbJ2xlbmd0aCddO3phKyspWVt6YV09PT1MJiZNYXRoW2I4KDB4NDc1KV0oKHphJVgrMC41KSpVLUlZWyd4J10sKE1hdGhbYjgoMHg1M2IpXSh6YS9YKSswLjUpKlUtSVlbJ3knXSk8Mi41JiYoY2dbemFdPU1hdGhbYjgoMHg0M2MpXShjZ1t6YV0sSVlbJ2QnXSksY3RbJ3B1c2gnXSh6YSkpO31mb3IobGV0IHpzPTB4MDt6czxjdFtiOCgweDY2MSldO3pzKyspe2NvbnN0IHpWPWN0W3pzXSx6RT16ViVYLHpVPSh6Vi16RSkvWDtmb3IoY29uc3QgW3pYLHpXXW9mW1sweDEsMHgwXSxbLTB4MSwweDBdLFsweDAsMHgxXSxbMHgwLC0weDFdXSl7Y29uc3QgekY9ekUrelgsekc9elUrelc7aWYoekY8MHgwfHx6RzwweDB8fHpGPj1YfHx6Rz49Riljb250aW51ZTtjb25zdCB6TD1oRCh6Rix6Ryk7WVt6TF09PT1MJiZjZ1t6TF0+Y2dbelZdK1UmJihjZ1t6TF09Y2dbelZdK1UsY3RbYjgoMHgyYjMpXSh6TCkpO319Y2pbYjgoMHgzYjkpXSh6Sz0+e2NvbnN0IGRwPWI4LHpqPXpLWydkb29yJ107ektbZHAoMHg0NjMpXVtkcCgweDRkMCldPSFbXTtpZighemopcmV0dXJuO2NvbnN0IHpIPWhEKHpqWyd4J10rempbJ2R4J10sempbJ3knXSt6alsnZHknXSkselE9Y2dbekhdO2xldCB6bD0weDA7Zm9yKGNvbnN0IHptIG9mIHpLW2RwKDB4MmI5KV0pe2NvbnN0IHpKPXptJVgsem49KHptLXpKKS9YO3psPU1hdGhbZHAoMHg0NTEpXSh6bCwoTWF0aFtkcCgweDNhZCldKHpKLXpqWyd4J10pK01hdGhbZHAoMHgzYWQpXSh6bi16alsneSddKSkqVSk7fXpLW2RwKDB4MjMwKV09elE+MHg1ZjVlMTAwP251bGw6elEremwsektbZHAoMHg0NjMpXVtkcCgweDRkMCldPXpRPjB4NWY1ZTEwMHx8elEremw+MHgyMyx6S1snb2snXT1JNih6Syk7fSk7Y29uc3QgY0Q9W107e2NvbnN0IHpLPUk0W2I4KDB4MmRmKV0semo9TWF0aFtiOCgweDQ1MSldKDB4MCwuLi5jaltiOCgweDM3ZildKHptPT57Y29uc3QgZFo9Yjgseko9em1bZFooMHg0YjkpXTtpZighekopcmV0dXJuIDB4MDtjb25zdCB6bj1jZ1toRCh6SlsneCddK3pKWydkeCddLHpKWyd5J10rekpbJ2R5J10pXTtyZXR1cm4gem4+MHg1ZjVlMTAwPzB4MDp6bjt9KSk7aWYoemo+ektbYjgoMHgzZjEpXSljRFsncHVzaCddKHsnayc6J2ZhckRvb3InLCd2JzpNYXRoW2I4KDB4NDcyKV0oemopfSk7Y29uc3Qgekg9em09Pntjb25zdCBkTz1iOCx6Sj16bSVYLHpuPSh6bS16SikvWDtyZXR1cm5bWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dW2RPKDB4MzdmKV0oKFt6Uix6eV0pPT57Y29uc3Qgeng9ekorelIsemc9em4renk7cmV0dXJuIHp4PDB4MHx8emc8MHgwfHx6eD49WHx8emc+PUY\/LTB4MTpoRCh6eCx6Zyk7fSlbZE8oMHgyYTYpXSh6Uj0+elI+PTB4MCYmKFlbelJdPT09THx8WVt6Ul09PT1LKSk7fTtsZXQgelE9MHgwO2ZvcihsZXQgem09MHgwO3ptPFlbYjgoMHg2NjEpXTt6bSsrKXtpZihZW3ptXSE9PUx8fHpIKHptKVtiOCgweDY2MSldIT09MHgxKWNvbnRpbnVlO2xldCB6Sj16bSx6bj0tMHgxLHpSPTB4MDt3aGlsZSh6Sj49MHgwJiZZW3pKXT09PUwmJnpSPDB4MTkwKXtjb25zdCB6eT16SCh6Sik7aWYoenlbYjgoMHg2NjEpXT49MHgzKWJyZWFrO3pSKys7Y29uc3Qgeng9enlbYjgoMHgyYTYpXSh6Zz0+emchPT16bik7em49ekoseko9enhbMHgwXTtpZih6Sj09PXVuZGVmaW5lZClicmVhazt9elE9TWF0aFtiOCgweDQ1MSldKHpRLHpSKlUpO31pZih6UT56S1tiOCgweDNhNyldKWNEW2I4KDB4MmIzKV0oeydrJzpiOCgweDNhNyksJ3YnOk1hdGhbYjgoMHg0NzIpXSh6USl9KTtpZihJN1tiOCgweDU5MCldPHpLW2I4KDB4NWYzKV0pY0RbYjgoMHgyYjMpXSh7J2snOmI4KDB4NTkwKSwndic6STdbYjgoMHg1OTApXX0pO2NvbnN0IHpsPWNqW2I4KDB4NjYxKV0vTWF0aFtiOCgweDQ1MSldKDB4MSxEKClbYjgoMHg2NjEpXSk7aWYoemw+ektbYjgoMHg0Y2UpXSljRFtiOCgweDJiMyldKHsnayc6YjgoMHg1YWQpLCd2JzpNYXRoW2I4KDB4NDcyKV0oemwqMHhhKS8weGF9KTt9Y29uc3QgY1M9STdbYjgoMHg1M2IpXT09PSdlZycmJiFJdlsnbGVuZ3RoJ10mJmNhWydmaWx0ZXInXSh6Zz0+emdbYjgoMHg2NjApXSlbYjgoMHg2NjEpXSE9PTB4MTtjaltiOCgweDNiOSldKCh6Zyx6dCk9Pntjb25zdCBkQj1iOCx6RD16Z1tkQigweDU1NSldW2RCKDB4NGY4KV0oUDU9PihQNVtkQigweDJmMyldfHxbXSlbZEIoMHgyYTYpXShQNj0+UDZbZEIoMHg2NjEpXT4weDIpW2RCKDB4MzdmKV0oUDY9Pntjb25zdCBkYj1kQixQNz1QNltkYigweDM3ZildKFA5PT5QOVsweDBdKSxQOD1QNltkYigweDM3ZildKFA5PT5QOVsweDFdKTtyZXR1cm5bTWF0aFtkYigweDQzYyldKC4uLlA3KSxNYXRoW2RiKDB4NDNjKV0oLi4uUDgpLE1hdGhbZGIoMHg0NTEpXSguLi5QNyksTWF0aFtkYigweDQ1MSldKC4uLlA4KV07fSkpLHpTPTEuNyxQMD0wLjk1LFAxPShQNSxQNik9Pk1hdGhbJ21heCddKDB4MCxNYXRoWydtaW4nXShQNVsweDJdLFA2WzB4Ml0pLU1hdGhbZEIoMHg0NTEpXShQNVsweDBdLFA2WzB4MF0pKSpNYXRoWydtYXgnXSgweDAsTWF0aFtkQigweDQzYyldKFA1WzB4M10sUDZbMHgzXSktTWF0aFtkQigweDQ1MSldKFA1WzB4MV0sUDZbMHgxXSkpLFAyPVtbemdbJ2N4J10semdbJ2N5J11dXTtmb3IoY29uc3QgUDUgb2ZbLi4uemdbZEIoMHg1NTUpXV1bJ3NvcnQnXSgoUDYsUDcpPT4oUDdbJ2InXVsweDJdLVA3WydiJ11bMHgwXSkqKFA3WydiJ11bMHgzXS1QN1snYiddWzB4MV0pLShQNlsnYiddWzB4Ml0tUDZbJ2InXVsweDBdKSooUDZbJ2InXVsweDNdLVA2WydiJ11bMHgxXSkpKVAyWydwdXNoJ10oWyhQNVsnYiddWzB4MF0rUDVbJ2InXVsweDJdKS8weDIsKFA1WydiJ11bMHgxXStQNVsnYiddWzB4M10pLzB4Ml0pO2Zvcihjb25zdCBbUDYsUDddb2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV0sWzB4MSwweDFdLFstMHgxLC0weDFdLFsweDEsLTB4MV0sWy0weDEsMHgxXV0pUDJbZEIoMHgyYjMpXShbemdbJ2N4J10rUDYsemdbJ2N5J10rUDddKTtsZXQgUDM9bnVsbCxQND0weDNiOWFjYTAwO2Zvcihjb25zdCBbUDgsUDldb2YgUDIpe2NvbnN0IFBJPVtQOC16UyxQOS1QMCxQOCt6UyxQOStQMF07bGV0IFByPTB4MDtmb3IoY29uc3QgW1BoLFBjXW9mW1sweDAsMHgwXSxbLXpTLC1QMF0sW3pTLFAwXSxbLXpTLFAwXSxbelMsLVAwXV0pe2NvbnN0IFBrPU1hdGhbZEIoMHg1M2IpXSgoUDgrUGgqMC45KS9VKSxQaT1NYXRoW2RCKDB4NTNiKV0oKFA5K1BjKjAuOSkvVSk7aWYoUGs8MHgwfHxQaTwweDB8fFBrPj1YfHxQaT49Rnx8WVtoRChQayxQaSldIT09enQpUHIrPTB4MTQ7fWZvcihjb25zdCBQTiBvZiB6RClQcis9UDEoUEksUE4pO1ByKz1NYXRoW2RCKDB4NDc1KV0oUDgtemdbJ2N4J10sUDktemdbJ2N5J10pKjAuMDUsUHI8UDQmJihQND1QcixQMz1bUDgsUDldKTt9emdbJ2xwJ109UDN8fFt6Z1snY3gnXSx6Z1snY3knXV07fSk7Y29uc3QgazA9W10sazE9KHpnLHp0KT0+emc8MHgwfHx6dDwweDB8fHpnPj1YfHx6dD49Rj9HOllbaEQoemcsenQpXSxrMj16Zz0+emc9PT1qfHx6Zz09PVEsazM9KHpnLHp0KT0+azIoemcpJiYoazIoenQpfHx6dD09PUwpfHxrMih6dCkmJihrMih6Zyl8fHpnPT09TCk7Zm9yKGxldCB6Zz0weDA7emc8PUY7emcrKyl7bGV0IHp0PS0weDEsekQ9MHgwO2ZvcihsZXQgelM9MHgwO3pTPD1YO3pTKyspe2NvbnN0IFAwPWsxKHpTLHpnLTB4MSksUDE9azEoelMsemcpLFAyPXpTPFgmJlAwIT09UDEmJiEoUDA9PT1KJiZQMT49MHgwfHxQMT09PUomJlAwPj0weDApJiYhazMoUDAsUDEpLFAzPSFQMj8weDA6UDA9PT1HfHxQMT09PUc\/MHgyOlAwPT09TCYmUDE9PT1LfHxQMD09PUsmJlAxPT09TD8weDM6MHgxO3p0Pj0weDAmJlAzIT09ekQmJihrMFtiOCgweDJiMyldKFt6dCpVLHpnKlUselMqVSx6ZypVLHpEXSksenQ9LTB4MSksUDMmJnp0PDB4MCYmKHp0PXpTLHpEPVAzKTt9fWZvcihsZXQgUDQ9MHgwO1A0PD1YO1A0Kyspe2xldCBQNT0tMHgxLFA2PTB4MDtmb3IobGV0IFA3PTB4MDtQNzw9RjtQNysrKXtjb25zdCBQOD1rMShQNC0weDEsUDcpLFA5PWsxKFA0LFA3KSxQST1QNzxGJiZQOCE9PVA5JiYhKFA4PT09SiYmUDk+PTB4MHx8UDk9PT1KJiZQOD49MHgwKSYmIWszKFA4LFA5KSxQcj0hUEk\/MHgwOlA4PT09R3x8UDk9PT1HPzB4MjpQOD09PUwmJlA5PT09S3x8UDg9PT1LJiZQOT09PUw\/MHgzOjB4MTtQNT49MHgwJiZQciE9PVA2JiYoazBbYjgoMHgyYjMpXShbUDQqVSxQNSpVLFA0KlUsUDcqVSxQNl0pLFA1PS0weDEpLFByJiZQNTwweDAmJihQNT1QNyxQNj1Qcik7fX1sZXQgazQ9MHgwO2ZvcihsZXQgUGg9MHgwO1BoPGMxWydsZW5ndGgnXTtQaCsrKWlmKFlbUGhdIT09RyYmYzFbUGhdPms0KWs0PWMxW1BoXTtjb25zdCBrNT1bXTtsZXQgazY9MHgwO2Zvcihjb25zdCBbUGMsUGtdb2YgY1hbYjgoMHgxYmEpXSgpKXtjb25zdCBQaT1EKClbUGNdLFBOPVBrWyd4MSddLVBrWyd4MCddLFB2PVBrWyd5MSddLVBrWyd5MCddLFB1PVBrWyd4MCddLFBZPVBrWyd5MCddLFBNPVtbMHgwLC0weDEsUHUsUFktMHgxLDB4MSwweDAsUE4sUFldLFsweDAsMHgxLFB1LFBZK1B2LDB4MSwweDAsUE4sUFkrUHZdLFstMHgxLDB4MCxQdS0weDEsUFksMHgwLDB4MSxQdixQdV0sWzB4MSwweDAsUHUrUE4sUFksMHgwLDB4MSxQdixQdStQTl1dLFBxPVtdO2Zvcihjb25zdCBbUHosUFAsUGYsUEEsUHAsUFosUE8sUGVdb2YgUE0pe2xldCBQQj1udWxsLFBiPTB4MDtmb3IobGV0IFBkPTB4MDtQZDw9UE87UGQrKyl7Y29uc3QgUEM9UGYrUHAqUGQsUFQ9UEErUFoqUGQsUG89UGQ8UE8mJlBDPj0weDAmJlBUPj0weDAmJlBDPFgmJlBUPEYmJllbaEQoUEMsUFQpXT09PUwmJmNUKFBpLFBDLFBULFB6LFBQKTtpZihQbylQYisrO2Vsc2V7aWYoUGI+PTB4MiYmKCFQQnx8UGI+UEJbYjgoMHg0ZWEpXSkpUEI9eydydW4nOlBiLCdueCc6UHosJ255JzpQUCwnZW5kJzpQZCwndXgnOlBwLCd1eSc6UFosJ2xpbmUnOlBlLCdzeDAnOlBmLCdzeTAnOlBBfTtQYj0weDA7fX1pZihQQilQcVtiOCgweDJiMyldKFBCKTt9aWYoSTdbYjgoMHg1M2IpXT09PSdlZycmJiEoUGk9PT1JcCYmKEl2W2I4KDB4NjYxKV18fGNhW2I4KDB4NjY4KV0oUHc9PlB3W2I4KDB4NjYwKV0pKSkmJiFjYVtiOCgweDY2OCldKFB3PT5Qd1sneCddPj1Qa1sneDAnXSpVLTAuMSYmUHdbJ3gnXTw9UGtbJ3gxJ10qVSswLjEmJlB3Wyd5J10+PVBrWyd5MCddKlUtMHgyOCYmUHdbJ3knXTw9UGtbJ3kxJ10qVSsweDI4JiYoUHdbJ254J10\/UHdbJ3knXT49UGtbJ3kwJ10qVSYmUHdbJ3knXTw9UGtbJ3kxJ10qVTohIVtdKSkpe2xldCBQdz1udWxsO2Zvcihjb25zdCBbUGEsUHMsUFYsUEUsUFUsUFgsUEYsUEddb2YgUE0pe2xldCBQTD0weDA7Zm9yKGxldCBQSz0weDA7UEs8PVBGO1BLKyspe2NvbnN0IFBqPVBWK1BVKlBLLFBRPVBFK1BYKlBLLFBsPVBLPFBGJiZjVChQaSxQaixQUSxQYSxQcykmJihQajwweDB8fFBRPDB4MHx8UGo+PVh8fFBRPj1GfHxZW2hEKFBqLFBRKV09PT1HKTtpZihQbClQTCsrO2Vsc2V7aWYoUEw+PTB4MyYmKCFQd3x8UEw+UHdbJ3J1biddKSlQdz17J3J1bic6UEwsJ254JzpQYSwnbnknOlBzLCdlbmQnOlBLLCd1eCc6UFUsJ3V5JzpQWCwnbGluZSc6UEcsJ3N4MCc6UFYsJ3N5MCc6UEV9O1BMPTB4MDt9fX1pZihQdyl7Y29uc3QgUG09UHdbJ2VuZCddLVB3W2I4KDB4NGVhKV0vMHgyLFBKPShQd1sndXgnXT9Qd1tiOCgweDUyNSldK1BtOlB3W2I4KDB4MzczKV0pKlUsUG49KFB3Wyd1eSddP1B3W2I4KDB4NTc0KV0rUG06UHdbYjgoMHgzNzMpXSkqVTtjYVtiOCgweDJiMyldKHsneCc6UEosJ3knOlBuLCdueCc6UHdbJ254J10sJ255JzpQd1snbnknXSwncHJpbSc6UGk9PT1JcCwnZCc6Y3MoUEosUG4sUHdbJ3V4J10sUHdbJ3V5J10sUHdbJ254J10sUHdbJ255J10sMC42NSl9KTt9fWlmKFBpWzB4Nl0pe2NvbnN0IFBSPUkyKFBpKSxQeT1QaVsweDRdPT09J3MnP1sweDAsLTB4MV06UGlbMHg0XT09PSduJz9bMHgwLDB4MV06UGlbMHg0XT09PSdlJz9bLTB4MSwweDBdOlsweDEsMHgwXTtsZXQgUHg9IVtdO2Zvcihjb25zdCBQZyBvZiBQUltiOCgweDM4OSldKXtpZihQZ1tiOCgweDMyMCldKXtrNVtiOCgweDJiMyldKFBnKTtjb250aW51ZTt9Y29uc3QgUHQ9KFBnW2I4KDB4MjlmKV1bMHgwXVsweDBdK1BnW2I4KDB4MjlmKV1bMHgxXVsweDBdKS8weDIrUHlbMHgwXSowLjI1LFBEPShQZ1tiOCgweDI5ZildWzB4MF1bMHgxXStQZ1tiOCgweDI5ZildWzB4MV1bMHgxXSkvMHgyK1B5WzB4MV0qMC4yNSxQUz1NYXRoWydmbG9vciddKFB0L1UpLGYwPU1hdGhbYjgoMHg1M2IpXShQRC9VKTtQUz49MHgwJiZmMD49MHgwJiZQUzxYJiZmMDxGJiZZW2hEKFBTLGYwKV09PT1MJiYoazVbYjgoMHgyYjMpXShQZyksUHg9ISFbXSk7fWlmKCFQeClrNisrO2NvbnRpbnVlO31pZighUHFbYjgoMHg2NjEpXSlrNisrO1BxWydzb3J0J10oKGYxLGYyKT0+ZjJbYjgoMHg0ZWEpXS1mMVtiOCgweDRlYSldKTtmb3IoY29uc3QgZjEgb2YgUHFbYjgoMHgyNzApXSgweDAsMHgzKSl7Y29uc3QgZjI9ZjFbJ2VuZCddLWYxWydydW4nXS8weDIsZjM9KGYxWyd1eCddP2YxW2I4KDB4NTI1KV0rZjI6ZjFbYjgoMHgzNzMpXSkqVSxmND0oZjFbJ3V5J10\/ZjFbJ3N5MCddK2YyOmYxW2I4KDB4MzczKV0pKlUsZjU9TWF0aFtiOCgweDQzYyldKDAuNSxmMVsncnVuJ10qVS8weDItMC4wNSksZjY9W2YzLWYxWyd1eCddKmY1LGY0LWYxWyd1eSddKmY1XSxmNz1bZjMrZjFbJ3V4J10qZjUsZjQrZjFbJ3V5J10qZjVdLGY4PVtmNlsweDBdK2YxWydueCddKmY1KjB4MixmNlsweDFdK2YxWydueSddKmY1KjB4Ml0sZjk9W107Zm9yKGxldCBmST0weDA7Zkk8PTB4ODtmSSsrKXtjb25zdCBmcj1mSS8weDgqTWF0aFsnUEknXS8weDI7ZjlbJ3B1c2gnXShbZjZbMHgwXSsoZjFbJ254J10qTWF0aFsnY29zJ10oZnIpK2YxWyd1eCddKk1hdGhbYjgoMHg2NjcpXShmcikpKmY1KjB4MixmNlsweDFdKyhmMVsnbnknXSpNYXRoW2I4KDB4NGJmKV0oZnIpK2YxWyd1eSddKk1hdGhbYjgoMHg2NjcpXShmcikpKmY1KjB4Ml0pO31rNVsncHVzaCddKHsnZ2FwJzpbZjYsZjddLCdsZWFmJzpbZjYsZjhdLCdhcmMnOmY5fSk7fX1jb25zdCBrNz1maD0+e2NvbnN0IGZjPU1hdGhbJ2Zsb29yJ10oZmgvMHgzZTgpLTB4MSxmaz1maCUweDNlODtyZXR1cm4gZms9PT0weDNlNz9udWxsOmNqW2ZjXVsncm9vbXMnXVtma107fSxrOD1maD0+ZmhbJ2MnXXx8ZmhbJ2InXSxrOT1maD0+e2NvbnN0IGZjPWs4KGZoKTtyZXR1cm4oZmNbMHgyXS1mY1sweDBdKSooZmNbMHgzXS1mY1sweDFdKTt9LGtJPWZoPT5maFsnayddPT09J2xpdmUnfHxmaFsnayddPT09J2JlZCd8fGZoWydrJ109PT1iOCgweDVmZCkmJiFmaFtiOCgweDI0OCldJiYoZmhbYjgoMHg0MjYpXXx8KChmaFtiOCgweDJmMyldfHxbXSlbYjgoMHg2NjgpXShmYz0+ZmNbJ3RhZyddPT09J2RpbmUnKXx8KGZoW2I4KDB4MmYzKV18fFtdKVtiOCgweDY2OCldKGZjPT5mY1tiOCgweDVmMildPT09J2Rlc2snKSYmazkoZmgpPj1JNFtiOCgweDUwMCldWydub29rTWluJ10pKSxrcj1maD0+a0koZmgpP2s5KGZoKSpJNFtiOCgweDUwMCldW2I4KDB4NTQ2KV0vSTRbYjgoMHg1MDApXVtiOCgweDJmNyldOjB4MCxrYz0oZmgsZmMpPT4oZmhbYjgoMHgyZjMpXXx8W10pW2I4KDB4MmE2KV0oZms9PmZjW2I4KDB4NTM3KV0oZmtbYjgoMHg1ZjIpXSkmJmZrW2I4KDB4NjYxKV0+MHgyKVtiOCgweDM3ZildKGZrPT57Y29uc3QgZGQ9YjgsZmk9ZmtbZGQoMHgzN2YpXShmdj0+ZnZbMHgwXSksZk49ZmtbZGQoMHgzN2YpXShmdj0+ZnZbMHgxXSk7cmV0dXJuW01hdGhbJ21pbiddKC4uLmZpKSxNYXRoW2RkKDB4NDNjKV0oLi4uZk4pLE1hdGhbZGQoMHg0NTEpXSguLi5maSksTWF0aFtkZCgweDQ1MSldKC4uLmZOKV07fSksa2k9W10sa049W10sa3Y9KGZoLGZjKT0+e2NvbnN0IGRDPWI4LGZrPVlbaEQoZmgsZmMpXTtpZihmazwweDApcmV0dXJuIGZrO2NvbnN0IGZpPShmaCswLjUpKlUsZk49KGZjKzAuNSkqVSxmdj1jaltma107Zm9yKGxldCBmdT0weDA7ZnU8ZnZbZEMoMHg1NTUpXVtkQygweDY2MSldO2Z1Kyspe2NvbnN0IGZZPWZ2Wydyb29tcyddW2Z1XVsnYiddO2lmKGZpPj1mWVsweDBdJiZmaTw9ZllbMHgyXSYmZk4+PWZZWzB4MV0mJmZOPD1mWVsweDNdKXJldHVybiAweDNlOCooZmsrMHgxKStmdTt9cmV0dXJuIDB4M2U4KihmaysweDEpKzB4M2U3O307Zm9yKGNvbnN0IFtmaCxmY11vZiBJbygpKXtjb25zdCBmaz1NYXRoW2I4KDB4NDc1KV0oZmNbMHgwXS1maFsweDBdLGZjWzB4MV0tZmhbMHgxXSksZmk9KGZjWzB4MF0tZmhbMHgwXSkvZmssZk49KGZjWzB4MV0tZmhbMHgxXSkvZmssZnY9TWF0aFtiOCgweDQ1MSldKDB4MSxNYXRoW2I4KDB4NTNiKV0oKGZrLTEuMikvMHgzKSk7Zm9yKGxldCBmdT0weDA7ZnU8ZnY7ZnUrKyl7Y29uc3QgZlk9MC42Kyhmay0xLjIpKihmdSswLjUpL2Z2O2tOW2I4KDB4MmIzKV0oW2ZoWzB4MF0rZmkqKGZZLTAuOCksZmhbMHgxXStmTiooZlktMC44KSxmaFsweDBdK2ZpKihmWSswLjgpLGZoWzB4MV0rZk4qKGZZKzAuOCldKTt9fWZvcihjb25zdCBmTSBvZiBrMCl7aWYoZk1bMHg0XSE9PTB4Mnx8SWQoKGZNWzB4MF0rZk1bMHgyXSkvMHgyLChmTVsweDFdK2ZNWzB4M10pLzB4MikpY29udGludWU7Y29uc3QgZnE9Zk1bMHgxXT09PWZNWzB4M10sZno9TWF0aFtiOCgweDQ3MildKChmcT9mTVsweDJdLWZNWzB4MF06Zk1bMHgzXS1mTVsweDFdKS9VKSxmUD0oZlosZk8pPT57Zm9yKGNvbnN0IFtmZSxmQl1vZiBmcT9bW2ZaLGZPXSxbZlosZk8tMHgxXV06W1tmWixmT10sW2ZaLTB4MSxmT11dKWlmKGZlPj0weDAmJmZCPj0weDAmJmZlPFgmJmZCPEYmJllbaEQoZmUsZkIpXSE9PUcpcmV0dXJuIGt2KGZlLGZCKTtyZXR1cm4gRzt9LGZmPWZaPT5mUChNYXRoW2I4KDB4NDcyKV0oZk1bMHgwXS9VKSsoZnE\/Zlo6MHgwKSxNYXRoW2I4KDB4NDcyKV0oZk1bMHgxXS9VKSsoZnE\/MHgwOmZaKSk7bGV0IGZBPTB4MDtjb25zdCBmcD1vW0k3W2I4KDB4MWU3KV1dO2lmKGZwKXtjb25zdCBmWj1mcT9NYXRoW2I4KDB4NDNjKV0oLi4uSUFbYjgoMHgzN2YpXShmYj0+ZmJbMHgwXSkpOk1hdGhbYjgoMHg0M2MpXSguLi5JQVtiOCgweDM3ZildKGZiPT5mYlsweDFdKSksZk89ZnE\/Zk1bMHgwXTpmTVsweDFdLGZlPWZ6KlUsZkI9TWF0aFtiOCgweDQzYyldKDEuNSxmcCowLjYpO2ZvcihsZXQgZmI9ZlorZnAvMHgyO2ZiPGZPK2ZlO2ZiKz1mcCl7Y29uc3QgZmQ9ZmItZk87aWYoZmQ8ZkIvMHgyKzAuMnx8ZmQ+ZmUtZkIvMHgyLTAuMiljb250aW51ZTtjb25zdCBmQz1NYXRoW2I4KDB4NTNiKV0oZmQvVSksZlQ9ZmYoZkMpO2lmKGZUPDB4MCYmZlQhPT1MJiZmVCE9PUopY29udGludWU7aWYoZlQ+PTB4MCl7Y29uc3QgZmE9TWF0aFsnZmxvb3InXShmVC8weDNlOCktMHgxLGZzPWZUJTB4M2U4O2lmKGZzIT09MHgzZTcmJltiOCgweDRjMiksJ3djJyxiOCgweDYzMyksYjgoMHgyNDIpXVtiOCgweDUzNyldKGNqW2ZhXVtiOCgweDU1NSldW2ZzXVsnayddKSljb250aW51ZTt9Y29uc3QgZm89ZmYoTWF0aFtiOCgweDUzYildKChmZC1mQi8weDItMC4xNSkvVSkpLGZ3PWZmKE1hdGhbYjgoMHg1M2IpXSgoZmQrZkIvMHgyKzAuMTUpL1UpKTtpZihmbyE9PWZUfHxmdyE9PWZUKWNvbnRpbnVlO2tOW2I4KDB4MmIzKV0oZnE\/W2ZNWzB4MF0rZmQtZkIvMHgyLGZNWzB4MV0sZk1bMHgwXStmZCtmQi8weDIsZk1bMHgxXV06W2ZNWzB4MF0sZk1bMHgxXStmZC1mQi8weDIsZk1bMHgwXSxmTVsweDFdK2ZkK2ZCLzB4Ml0pO31jb250aW51ZTt9Zm9yKGxldCBmVj0weDE7ZlY8PWZ6O2ZWKyspe2NvbnN0IGZFPWZGPT5mUChNYXRoW2I4KDB4NDcyKV0oZk1bMHgwXS9VKSsoZnE\/ZkY6MHgwKSxNYXRoW2I4KDB4NDcyKV0oZk1bMHgxXS9VKSsoZnE\/MHgwOmZGKSk7aWYoZlY8ZnomJmZFKGZWKT09PWZFKGZBKSljb250aW51ZTtjb25zdCBmVT1mRShmQSksZlg9KGZWLWZBKSpVLGZXPWZBKlU7ZkE9ZlY7aWYoZlU8MHgwJiZmVSE9PUwmJmZVIT09Snx8Zlg8MS4yKWNvbnRpbnVlO2tpW2I4KDB4MmIzKV0oeyd3JzpmTSwnaG9yaXonOmZxLCdrZXknOmZVLCdhMCc6ZlcsJ2wnOmZYfSk7fX1mb3IoY29uc3QgZkYgb2Yga2kpe2NvbnN0IHt3OmZHLGhvcml6OmZMLGtleTpmSyxhMDpmaixsOmZIfT1mRjtmRlsnbG8nXT1maixmRlsnaGknXT1maitmSDtpZihmSzwweDApY29udGludWU7Y29uc3QgZlE9azcoZkspO2ZGWydxJ109ZlE7aWYoIWZRKWNvbnRpbnVlO2lmKFtiOCgweDRjMiksJ3djJyxiOCgweDYzMyksJ3N0b3JlJ11bYjgoMHg1MzcpXShmUVsnayddKSl7ZkZbYjgoMHg1NGMpXT0hIVtdO2NvbnRpbnVlO31jb25zdCBmbD1mTD9mR1sweDFdOmZHWzB4MF0sZm09Zkw\/ZkdbMHgwXTpmR1sweDFdLGZKPWZEPT4oZkw\/ZkRbMHgyXS1mRFsweDBdPmZEWzB4M10tZkRbMHgxXTpmRFsweDNdLWZEWzB4MV0+ZkRbMHgyXS1mRFsweDBdKSYmKGZMP01hdGhbYjgoMHg0M2MpXShNYXRoW2I4KDB4M2FkKV0oZkRbMHgxXS1mbCksTWF0aFtiOCgweDNhZCldKGZEWzB4M10tZmwpKTpNYXRoW2I4KDB4NDNjKV0oTWF0aFtiOCgweDNhZCldKGZEWzB4MF0tZmwpLE1hdGhbYjgoMHgzYWQpXShmRFsweDJdLWZsKSkpPDAuNSxmbj1mRD0+WyhmTD9mRFsweDBdOmZEWzB4MV0pLWZtLChmTD9mRFsweDJdOmZEWzB4M10pLWZtXSxmUj0oW2ZELGZTXSk9PmZTPmZGWydsbyddJiZmRDxmRlsnaGknXSxmeT0oZkQsZlMpPT57Y29uc3QgZFQ9Yjg7bGV0IEEwPVtmRF07Zm9yKGNvbnN0IFtBMSxBMl1vZiBmUylBMD1BMFtkVCgweDRmOCldKChbQTMsQTRdKT0+W1tBMyxNYXRoWydtaW4nXShBNCxBMSldLFtNYXRoW2RUKDB4NDUxKV0oQTMsQTIpLEE0XV0pW2RUKDB4MmE2KV0oQTM9PkEzWzB4MV0tQTNbMHgwXT49MS4yKTtyZXR1cm4gQTBbZFQoMHg1NzgpXSgoQTMsQTQpPT5BNFsweDFdLUE0WzB4MF0tKEEzWzB4MV0tQTNbMHgwXSkpO30sZng9a2MoZlEsWyd3YXJkJ10pW2I4KDB4MmE2KV0oZkopW2I4KDB4MzdmKV0oZm4pW2I4KDB4MmE2KV0oZlIpLGZnPWtjKGZRLFtiOCgweDQyNildKVtiOCgweDJhNildKGZKKVsnbWFwJ10oZm4pW2I4KDB4MmE2KV0oZlIpO2lmKCFmeFtiOCgweDY2MSldJiYhZmdbYjgoMHg2NjEpXSljb250aW51ZTtsZXQgZnQ9ZnkoW2ZGWydsbyddLGZGWydoaSddXSxmeFtiOCgweDIwNildKGZnKSk7aWYoIWZ0W2I4KDB4NjYxKV0mJmZnW2I4KDB4NjYxKV0pe2Z0PWZ5KFtmRlsnbG8nXSxmRlsnaGknXV0sZngpO2lmKGZ0WydsZW5ndGgnXSlmUVtiOCgweDY2OSldPSEhW107fWZ0W2I4KDB4NjYxKV0\/KGZGWydsbyddPWZ0WzB4MF1bMHgwXSxmRlsnaGknXT1mdFsweDBdWzB4MV0pOihmRltiOCgweDU0YyldPSEhW10sZlFbYjgoMHg0MWYpXT0hIVtdKTt9Y29uc3Qga3U9bmV3IE1hcCgpO2Zvcihjb25zdCBmRCBvZiBraSlpZihmRFsncSddJiYhZkRbYjgoMHg1NGMpXSlrdVtiOCgweDJhNSldKGZEWydrZXknXSwoa3VbJ2dldCddKGZEW2I4KDB4NTkzKV0pfHwweDApKyhmRFsnaGknXS1mRFsnbG8nXSkpO2Zvcihjb25zdCBmUyBvZiBraSl7aWYoZlNbJ3NraXAnXSljb250aW51ZTtjb25zdCB7dzpBMCxob3JpejpBMSxrZXk6QTIsbDpBMyxsbzpBNCxoaTpBNSxxOkE2fT1mUyxBNz1BNS1BNDtsZXQgQTg9TWF0aFtiOCgweDQzYyldKDEuOCxBMyowLjUpLEE5PTB4MTtpZihBMj09PUopQTg9TWF0aFsnbWluJ10oMS44LEEzKjAuNSk7ZWxzZXtpZihBMj09PUwpQTg9TWF0aFtiOCgweDQzYyldKDEuMixBMyowLjYpO2Vsc2V7aWYoIUE2KUE5PU1hdGhbYjgoMHg0NTEpXSgweDEsTWF0aFtiOCgweDUzYildKEEzLzB4MykpO2Vsc2V7aWYoQTc+NS41KUE5PTB4Mjtjb25zdCBBST1rcihBNikqQTcvKGt1WydnZXQnXShBMil8fEE3KSxBcj1NYXRoW2I4KDB4NDUxKV0oTWF0aFtiOCgweDQzYyldKEE4KkE5LEE3LTAuNCksTWF0aFtiOCgweDQzYyldKEE3LTAuNCxBSSkpO0E5PU1hdGhbYjgoMHg0NTEpXShBOSxNYXRoW2I4KDB4MzlmKV0oQXIvSTRbYjgoMHg1MDApXVtiOCgweDM5MCldLTAuMDAwMDAxKSksQTg9TWF0aFtiOCgweDQ1MSldKEk0WydkYXknXVsnd2luTWluJ10sQXIvQTkpO2lmKEE5KkE4PkE3LTAuNClBOD1NYXRoW2I4KDB4NDUxKV0oMC42LChBNy0wLjQpL0E5KTt9fX1mb3IobGV0IEFoPTB4MDtBaDxBOTtBaCsrKXtjb25zdCBBYz1BNCtBNyooQWgrMC41KS9BOTtrTltiOCgweDJiMyldKEExP1tBMFsweDBdK0FjLUE4LzB4MixBMFsweDFdLEEwWzB4MF0rQWMrQTgvMHgyLEEwWzB4MV1dOltBMFsweDBdLEEwWzB4MV0rQWMtQTgvMHgyLEEwWzB4MF0sQTBbMHgxXStBYytBOC8weDJdKTt9fWlmKEk3W2I4KDB4Mjk0KV09PT1iOCgweDVjOCkpe2tOW2I4KDB4NjYxKV09MHgwO2Zvcihjb25zdCBBayBvZiBJOSlrTltiOCgweDJiMyldKEFrW2I4KDB4MjcwKV0oKSk7fWNvbnN0IGtZPShBaSxBTik9Pntjb25zdCBkdz1iOCxBdj1NYXRoW2R3KDB4NTNiKV0oQWkvVSksQXU9TWF0aFtkdygweDUzYildKEFOL1UpO2lmKEF2PDB4MHx8QXU8MHgwfHxBdj49WHx8QXU+PUYpcmV0dXJuIG51bGw7Y29uc3QgQVk9WVtoRChBdixBdSldO2lmKEFZPDB4MClyZXR1cm4gbnVsbDtjb25zdCBBTT1jaltBWV07Zm9yKGNvbnN0IEFxIG9mIEFNW2R3KDB4NTU1KV0pe2NvbnN0IEF6PUFxWydiZSddfHxBcVsnYiddO2lmKEFpPj1BelsweDBdLTAuMDImJkFpPD1BelsweDJdKzAuMDImJkFOPj1BelsweDFdLTAuMDImJkFOPD1BelsweDNdKzAuMDIpcmV0dXJuIEFxO2lmKEFxW2R3KDB4MzhkKV0mJkFxW2R3KDB4MzhkKV1bZHcoMHg2NjgpXShBUD0+QWk+PUFQWzB4MF0mJkFpPD1BUFsweDJdJiZBTj49QVBbMHgxXSYmQU48PUFQWzB4M10pKXJldHVybiBBcTt9cmV0dXJuIG51bGw7fTtmb3IoY29uc3QgQWkgb2YgY2opZm9yKGNvbnN0IEFOIG9mIEFpW2I4KDB4NTU1KV0pQU5bYjgoMHg0YTYpXT0weDA7Zm9yKGNvbnN0IEF2IG9mIGtOKXtjb25zdCBBdT0oQXZbMHgwXStBdlsweDJdKS8weDIsQVk9KEF2WzB4MV0rQXZbMHgzXSkvMHgyLEFNPU1hdGhbJ2h5cG90J10oQXZbMHgyXS1BdlsweDBdLEF2WzB4M10tQXZbMHgxXSl8fDB4MTtsZXQgQXE9LShBdlsweDNdLUF2WzB4MV0pL0FNLEF6PShBdlsweDJdLUF2WzB4MF0pL0FNOyFJVyhBdStBcSowLjQsQVkrQXoqMC40KSYmKEFxPS1BcSxBej0tQXopO2NvbnN0IEFQPWtZKEF1K0FxKjAuNCxBWStBeiowLjQpfHxrWShBdStBcSowLjgsQVkrQXoqMC44KTtpZighQVApY29udGludWU7bGV0IEFmPTB4MDtmb3IobGV0IEFBPTAuNzU7QUE8MHgyODtBQSs9VSl7Y29uc3QgQXA9TWF0aFtiOCgweDUzYildKChBdS1BcSpBQSkvVSksQVo9TWF0aFtiOCgweDUzYildKChBWS1BeipBQSkvVSk7aWYoQXA8MHgwfHxBWjwweDB8fEFwPj1YfHxBWj49RilicmVhaztpZihZW2hEKEFwLEFaKV0hPT1HKXtBZj1BQS1VLzB4MjticmVhazt9fWlmKEFmKXtjb25zdCBBTz1BUFsnYmUnXXx8QVBbJ2InXSxBZT1BcT9BT1sweDJdLUFPWzB4MF06QU9bMHgzXS1BT1sweDFdLEFCPU1hdGhbYjgoMHg0NTEpXShJNFtiOCgweDFiOSldW2I4KDB4NDQ3KV0sSTRbYjgoMHgxYjkpXVtiOCgweDNlYyldKkFlKTtpZihBZjxBQil7QVBbYjgoMHgxYjkpXT17J3dpZHRoJzpNYXRoW2I4KDB4NDcyKV0oQWYqMHhhKS8weGEsJ25lZWQnOk1hdGhbYjgoMHg0NzIpXShBQioweGEpLzB4YX07Y29udGludWU7fX1BUFtiOCgweDRhNildKz1BTTt9Y29uc3Qga009QWI9Pntjb25zdCBkcz1iOCxBZD1BYlsnYiddLEFDPShBdyxBYSk9Pntjb25zdCBkYT12LEFzPU1hdGhbZGEoMHg1M2IpXShBdy9VKSxBVj1NYXRoW2RhKDB4NTNiKV0oQWEvVSk7cmV0dXJuKEFzPDB4MHx8QVY8MHgwfHxBcz49WHx8QVY+PUZ8fFlbaEQoQXMsQVYpXT09PUcpJiYhSWEoQXcsQWEpO30sQVQ9KEFkWzB4MF0rQWRbMHgyXSkvMHgyLEFvPShBZFsweDFdK0FkWzB4M10pLzB4MjtyZXR1cm4gQUMoQWRbMHgwXS0wLjMsQW8pfHxBQyhBZFsweDJdKzAuMyxBbyl8fEFDKEFULEFkWzB4MV0tMC4zKXx8QUMoQVQsQWRbMHgzXSswLjMpfHwhIShBYltkcygweDM4ZCldJiZBYltkcygweDM4ZCldW2RzKDB4NjYxKV0pO30sa3E9eydzJzoweDAsJ2EnOjB4MSwnYic6MHgyLCdjJzoweDN9O2NqW2I4KDB4M2I5KV0oQWI9Pntjb25zdCBkVj1iODtpZighQWJbZFYoMHg1NTUpXVtkVigweDY2MSldKXtBYltkVigweDI5YyldPTB4MCxBYltkVigweDRjZildPUFiWyd0J10sQWJbZFYoMHgzMWMpXT17fSxBYltkVigweDQ3MSldPSEhW107cmV0dXJuO31mb3IoY29uc3QgQVQgb2YgQWJbZFYoMHg1NTUpXSl7Y29uc3QgQW89azgoQVQpLEF3PWs5KEFUKSxBYT1rSShBVCksQXM9QVRbZFYoMHg0YTYpXT4weDB8fGtNKEFUKSxBVj1BVFtkVigweDRhNildKkk0W2RWKDB4NTAwKV1bZFYoMHgyZjcpXSxBRT0hQWF8fEFzJiZBViswLjAwMDAwMT49QXcqSTRbZFYoMHg1MDApXVtkVigweDU0NildO0FUW2RWKDB4NTAwKV09eydyb29tVHlwZSc6QVRbJ2snXSwnbmV0QXJlYSc6TWF0aFsncm91bmQnXShBdyoweDY0KS8weDY0LCdtaW5DbGVhcldpZHRoJzpNYXRoW2RWKDB4NDcyKV0oTWF0aFtkVigweDQzYyldKEFvWzB4Ml0tQW9bMHgwXSxBb1sweDNdLUFvWzB4MV0pKjB4NjQpLzB4NjQsJ2ZhY2FkZUNvbnRhY3QnOkFzLCd3aW5kb3dPcGVuaW5nQXJlYSc6TWF0aFtkVigweDQ3MildKEFWKjB4NjQpLzB4NjQsJ2RheWxpZ2h0UmVxdWlyZWQnOkFhLCdkYXlsaWdodFBhc3MnOkFFLCd2ZW50aWxhdGlvblR5cGUnOkFUW2RWKDB4NGE2KV0+MHgwP2RWKDB4NTZjKTpBVFsnayddPT09ZFYoMHg0YzIpfHxBVFsnayddPT09J3djJz9kVigweDFkOSk6ZFYoMHg0MWEpLCdjb3VydFdpZHRoJzpBVFtkVigweDFiOSldP0FUW2RWKDB4MWI5KV1bZFYoMHg0MGUpXTpudWxsLCdjb3VydE5lZWQnOkFUW2RWKDB4MWI5KV0\/QVRbJ2NvdXJ0J11bZFYoMHg1Y2UpXTpudWxsLCdydWxlUHJvZmlsZSc6ZFYoMHg0YWQpfTtmb3IoY29uc3QgQVUgb2Yga04pe2NvbnN0IEFYPShBVVsweDBdK0FVWzB4Ml0pLzB4MixBVz0oQVVbMHgxXStBVVsweDNdKS8weDIsQUY9TWF0aFtkVigweDNhZCldKEFVWzB4MF0tQVVbMHgyXSk8MC4wMSxBRz1NYXRoW2RWKDB4M2FkKV0oQVVbMHgxXS1BVVsweDNdKTwwLjAxO2lmKCFBRiYmIUFHKWNvbnRpbnVlO2lmKEFYPEFvWzB4MF0tMC40fHxBWD5Bb1sweDJdKzAuNHx8QVc8QW9bMHgxXS0wLjR8fEFXPkFvWzB4M10rMC40KWNvbnRpbnVlO2NvbnN0IEFMPUFGP1tBWC0wLjYsTWF0aFsnbWluJ10oQVVbMHgxXSxBVVsweDNdKSxBWCswLjYsTWF0aFtkVigweDQ1MSldKEFVWzB4MV0sQVVbMHgzXSldOltNYXRoW2RWKDB4NDNjKV0oQVVbMHgwXSxBVVsweDJdKSxBVy0wLjYsTWF0aFsnbWF4J10oQVVbMHgwXSxBVVsweDJdKSxBVyswLjZdO2Zvcihjb25zdCBBSyBvZiBBVFtkVigweDJmMyldfHxbXSl7aWYoQUtbZFYoMHg1ZjIpXSE9PWRWKDB4M2Q5KXx8QUtbJ2xlbmd0aCddPDB4Myljb250aW51ZTtjb25zdCBBaj1BS1tkVigweDM3ZildKEFsPT5BbFsweDBdKSxBSD1BS1tkVigweDM3ZildKEFsPT5BbFsweDFdKSxBUT1bTWF0aFtkVigweDQzYyldKC4uLkFqKSxNYXRoW2RWKDB4NDNjKV0oLi4uQUgpLE1hdGhbJ21heCddKC4uLkFqKSxNYXRoWydtYXgnXSguLi5BSCldO0FRWzB4MF08QUxbMHgyXSYmQUxbMHgwXTxBUVsweDJdJiZBUVsweDFdPEFMWzB4M10mJkFMWzB4MV08QVFbMHgzXSYmKEFiW2RWKDB4MjgwKV09KEFiWydmdXJuQmxvY2tOJ118fDB4MCkrMHgxLEFiW2RWKDB4NDYzKV1bZFYoMHg0YTMpXT0hIVtdKTt9fX1BYltkVigweDQ2MyldW2RWKDB4NWE2KV09QWJbZFYoMHg1NTUpXVsnc29tZSddKEFsPT5BbFtkVigweDUwMCldW2RWKDB4NTJmKV0mJiFBbFsnZGF5J11bZFYoMHgzNjQpXSksQWJbZFYoMHg0NjMpXVtkVigweDIzZSldPUFiWydyb29tcyddWydzb21lJ10oQWw9PkFsWydkYXknXVtkVigweDUyZildJiZBbFtkVigweDUwMCldWydmYWNhZGVDb250YWN0J10mJiFBbFtkVigweDUwMCldW2RWKDB4NGUyKV0mJiFBbFtkVigweDQxZildKSxBYltkVigweDQ2MyldW2RWKDB4NjIxKV09QWJbJ3Jvb21zJ11bZFYoMHg2NjgpXShBbD0+QWxbZFYoMHg0MWYpXSYmIUFsW2RWKDB4NTAwKV1bZFYoMHg0ZTIpXSk7Y29uc3QgQWQ9QWJbZFYoMHgyODcpXTtBYltkVigweDQ4MyldPUFiW2RWKDB4NTU1KV1bJ21hcCddKChBbCxBbSk9PkFsWydrJ109PT1kVigweDIxNCkmJiFBbFtkVigweDI0OCldJiZBbFtkVigweDUwMCldW2RWKDB4MWNmKV0+PUk0W2RWKDB4NDAyKV1bJ21pbkFyZWEnXSYmQWxbZFYoMHg1MDApXVsnbWluQ2xlYXJXaWR0aCddPj1JNFtkVigweDQwMildW2RWKDB4NDQ3KV0mJkFsW2RWKDB4NTAwKV1bZFYoMHg0ZTIpXSYmKCFBZHx8QWRbZFYoMHgyOGEpXVtBbV0mJkFkW2RWKDB4NGRkKV1bZFYoMHgzMGIpXShBbSkpKSxBYlsncmVhbEJlZHMnXT1BYltkVigweDQ4MyldW2RWKDB4MmE2KV0oQm9vbGVhbilbZFYoMHg2NjEpXTtjb25zdCBBQz1BYltkVigweDI5YyldO0FiW2RWKDB4NGNmKV09QUM+PTB4Mz8nYyc6QUM9PT0weDI\/J2InOkFDPT09MHgxPydhJzoncycsQWJbZFYoMHg0NjMpXVtkVigweDM0ZildPUlrPT09ZFYoMHgyZWUpJiZrcVtBYltkVigweDRjZildXTxrcVtBYlsndCddXTtpZihJaz09PSdmcmVlJylBYlsnbGFiJ109QWJbZFYoMHg2NTYpXT09PSdzdHVkaW8nPydzJzpBYltkVigweDRjZildO0FiW2RWKDB4MzFjKV09e307aWYoSTdbZFYoMHg0ODIpXVsnemgnXSl7Y29uc3QgQWw9TWF0aFtkVigweDQzYyldKDB4NSxBQysweDEpO0FiW2RWKDB4NDE1KV09QWwsQWJbZFYoMHgxZTApXT1JNFtkVigweDQ4MildWyd6aCddWydtaW4nXVtBbF0sQWJbJ3BlcnJzJ11bJ3poJ109QWJbZFYoMHg0Y2EpXTxBYltkVigweDFlMCldO31pZihJN1sncHJvZmlsZXMnXVsnYmYnXSl7Y29uc3QgQW09STRbZFYoMHg0ODIpXVsnYmYnXTtBYlsnYmZSb29tcyddPUFiW2RWKDB4NTU1KV1bJ2ZpbHRlciddKChBSixBbik9PkFKWydrJ109PT1kVigweDYzMykmJkFKW2RWKDB4NTAwKV1bZFYoMHg0NGUpXTxBbVtkVigweDQ3YSldfHwoQUpbJ2snXT09PWRWKDB4NGMyKXx8QUpbJ2snXT09PWRWKDB4NjMzKSYmQWQmJkFkW2RWKDB4NDQ5KV09PT1BbikmJkFKWydkYXknXVtkVigweDQ0ZSldPEFtW2RWKDB4MmQ1KV0pLEFiW2RWKDB4MzFjKV1bJ2JmJ109QWJbZFYoMHgzODMpXVtkVigweDY2MSldPjB4MDt9QWJbZFYoMHg0NjMpXVsnd2VkZ2VGdXJuJ109QWJbZFYoMHg1NTUpXVtkVigweDY2OCldKEFKPT5BSltkVigweDM4ZCldJiZBSltkVigweDM4ZCldW2RWKDB4NjYxKV0mJihBSlsnZnVybiddfHxbXSlbZFYoMHg2NjgpXShBbj0+QW5bJ2xlbmd0aCddPjB4MiYmKEFuW2RWKDB4NWYyKV09PT1kVigweDIxNCl8fEFuW2RWKDB4NWYyKV09PT1kVigweDU1Nil8fEFuW2RWKDB4NWYyKV09PT1kVigweDM5YykpJiZBSltkVigweDM4ZCldW2RWKDB4NjY4KV0oQVI9Pntjb25zdCBkRT1kVixBeT1BbltkRSgweDM3ZildKEFEPT5BRFsweDBdKSxBeD1BbltkRSgweDM3ZildKEFEPT5BRFsweDFdKSxBZz0oTWF0aFsnbWluJ10oLi4uQXkpK01hdGhbJ21heCddKC4uLkF5KSkvMHgyLEF0PShNYXRoW2RFKDB4NDNjKV0oLi4uQXgpK01hdGhbZEUoMHg0NTEpXSguLi5BeCkpLzB4MjtyZXR1cm4gQWc+PUFSWzB4MF0mJkFnPD1BUlsweDJdJiZBdD49QVJbMHgxXSYmQXQ8PUFSWzB4M107fSkpKSxBYltkVigweDQ3MSldPSFPYmplY3RbZFYoMHgyY2MpXShBYlsncGVycnMnXSlbZFYoMHg2NjgpXShCb29sZWFuKSxBYlsnb2snXT1JNihBYik7fSk7Y29uc3Qga3o9bmV3IEZsb2F0MzJBcnJheShYKkYpO2NqW2I4KDB4M2I5KV0oQWI9Pntjb25zdCBkVT1iODtsZXQgQWQ9MHgwO2NvbnN0IEFDPUFiW2RVKDB4MmI5KV1bZFUoMHgzN2YpXShBVD0+e2NvbnN0IGRYPWRVLEFvPUFUJVgsQXc9KEFULUFvKS9YLEFhPU1hdGhbZFgoMHg0NzUpXSgoQW8rMC41KSpVLUFiW2RYKDB4M2M1KV1bJ3gnXSwoQXcrMC41KSpVLUFiW2RYKDB4M2M1KV1bJ3knXSk7cmV0dXJuIEFkPU1hdGhbZFgoMHg0NTEpXShBZCxBYSksW0FULEFhXTt9KTtBQ1tkVSgweDNiOSldKChbQVQsQW9dKT0+e2t6W0FUXT0wLjQrMC42KkFvLyhBZHx8MHgxKTt9KTt9KTtsZXQga1A9MHgwO2ZvcihsZXQgQWI9MHgwO0FiPFlbJ2xlbmd0aCddO0FiKyspaWYoWVtBYl09PT1MKWtQPU1hdGhbJ21heCddKGtQLGM1W0FiXSk7Zm9yKGxldCBBZD0weDA7QWQ8WVtiOCgweDY2MSldO0FkKyspaWYoWVtBZF09PT1MKWt6W0FkXT0wLjM4KmM1W0FkXS8oa1B8fDB4MSk7Y29uc3Qga2Y9WVtiOCgweDRiMCldKChBQyxBVCk9PkFDKyhBVD09PWp8fEFUPT09UT8weDE6MHgwKSwweDApKlUqVSxrQT1jalsncmVkdWNlJ10oKEFDLEFUKT0+QUMrQVRbYjgoMHgyMTMpXSwweDApK2tmO2Zvcihjb25zdCBBQyBvZiBjYSl7azVbYjgoMHgyYjMpXShBQ1snZCddKTtmb3IobGV0IEFUPWtOW2I4KDB4NjYxKV0tMHgxO0FUPj0weDA7QVQtLSl7Y29uc3QgQW89a05bQVRdO2lmKE1hdGhbYjgoMHg0NzUpXSgoQW9bMHgwXStBb1sweDJdKS8weDItQUNbJ3gnXSwoQW9bMHgxXStBb1sweDNdKS8weDItQUNbJ3knXSk8Mi4yKWtOW2I4KDB4NTMyKV0oQVQsMHgxKTt9fWNvbnN0IGtwPVtdO3JldHVybnsncmluZyc6ISFjWSwnYW5uZXgnOmNVLCdjb3VydHMnOmNvLCdlbnRyaWVzJzpjYSwnY29yZVJlY3RzJzpjWCwnY29yZU9mZic6azYsJ293bic6WSwncmVnaW9ucyc6Y2osJ3dhbGxzJzprMCwnZ3Jvdyc6a3osJ25vdGVzJzpjRCwnZW50cnlBbWJpZyc6Y1MsJ2dyb3NzJzpoUypVKlUsJ2ZyZWUnOmtmLCd1c2FibGUnOmtBLCdjb21wcyc6Y2wsJ3dhbGsnOmNnLCd3aW5kb3dzJzprTiwnY29yZURvb3JzJzprNSwnY29tbW9uRnVybic6a3AsJ2RlZXAnOms0KlU+MHg5JiYhY1l9O31jb25zdCBJRD1PW2VKKDB4NWYwKV0oZUooMHgyMjApKSxJUz1PW2VKKDB4NWYwKV0oJy5wcy1jb25mX193YXJuJykscjA9T1sncXVlcnlTZWxlY3RvciddKGVKKDB4MzRjKSkscjE9cjBbZUooMHg1ZjApXShlSigweDMyNykpO2xldCByMj1yMVtlSigweDJmYSldKCcyZCcpO0lEW2VKKDB4NTk3KV09W2VKKDB4MjM3KSxlSigweDJhYyksJ3N0YXRFZmYnLGVKKDB4NTNmKV1bZUooMHgzN2YpXSh1PT5lSigweDM4NykrYVt1XStlSigweDRlNCkrdStlSigweDFlYSkpW2VKKDB4MjZhKV0oJycpO2NvbnN0IHIzPXt9LHI0PXsndW5pdHMnOnsnbWluJzoweDIsJ21heCc6MHgxOCwnc3RlcCc6MHgxLCdzaG93Jzp1PT4nJyt1fSwnYSc6eydtaW4nOjB4MCwnbWF4JzoweDEwLCdzdGVwJzoweDEsJ3Nob3cnOnU9PicnK3V9LCdiJzp7J21pbic6MHgwLCdtYXgnOjB4Yywnc3RlcCc6MHgxLCdzaG93Jzp1PT4nJyt1fSwnYyc6eydtaW4nOjB4MCwnbWF4JzoweDgsJ3N0ZXAnOjB4MSwnc2hvdyc6dT0+JycrdX0sJ2NvcnJpZG9yJzp7J21pbic6MS41LCdtYXgnOjB4Mywnc3RlcCc6MC41LCdzaG93Jzp1PT5zKHUsMHgxKSsnXHgyMG0nfSwnZ3JpZCc6eydtaW4nOjB4MCwnbWF4JzoweDQsJ3N0ZXAnOjB4MSwnc2hvdyc6dT0+b1t1XT9zKG9bdV0sMHgyKSsnXHgyMG0nOmFbJ2dyaWRPZmYnXX0sJ2FuZ2xlJzp7J21pbic6LTB4M2MsJ21heCc6MHgzYywnc3RlcCc6MHg1LCdzaG93Jzp1PT51KyfCsCd9LCd3aW5nJzp7J21pbic6MHgxMCwnbWF4JzoweDIyLCdzdGVwJzoweDIsJ3Nob3cnOnU9PnUrJ1x4MjBtJ30sJ2ltZ1cnOnsnbWluJzoweGEsJ21heCc6MHg0Niwnc3RlcCc6MHgxLCdzaG93Jzp1PT51KydceDIwbSd9LCdpbWdPcCc6eydtaW4nOjB4YSwnbWF4JzoweDVhLCdzdGVwJzoweDUsJ3Nob3cnOnU9PnUrJ1x4MjAlJ319LHI1PXt9O2Zvcihjb25zdCBbZVksZU1db2YgT2JqZWN0WydlbnRyaWVzJ10ocjQpKXtjb25zdCBlcT1kb2N1bWVudFtlSigweDYzNCldKCdkaXYnKTtlcVtlSigweDMxMSldPWVKKDB4MmViKTtjb25zdCBlej0ncHMtcGxhbi0nK2VZO2VxW2VKKDB4NTk3KV09ZUooMHg0YzApK2V6K2VKKDB4NDlmKSthW2VZXSsnPC9zcGFuPjxvdXRwdXQ+PC9vdXRwdXQ+PC9sYWJlbD48aW5wdXRceDIwaWQ9XHgyMicrZXorJ1x4MjJceDIwdHlwZT1ceDIycmFuZ2VceDIyXHgyMG1pbj1ceDIyJytlTVtlSigweDQzYyldK2VKKDB4NDBiKStlTVsnbWF4J10rZUooMHg0ZjEpK2VNW2VKKDB4NTMwKV0rJ1x4MjI+Jztjb25zdCBlUD1lcVtlSigweDVmMCldKGVKKDB4M2UxKSksZWY9ZXFbZUooMHg1ZjApXShlSigweDNlOSkpLGVBPSgpPT57Y29uc3QgZFc9ZUo7ZVBbZFcoMHgyZDEpXT1JN1tlWV0sZWZbZFcoMHgyNzkpXT1lTVtkVygweDU3MSldKEk3W2VZXSksZVBbJ3N0eWxlJ11bJ3NldFByb3BlcnR5J10oZFcoMHgyMDEpLChJN1tlWV0tZU1bZFcoMHg0M2MpXSkvKGVNW2RXKDB4NDUxKV0tZU1bZFcoMHg0M2MpXSkqMHg2NCsnJScpO307ZVBbZUooMHgxZmUpXShlSigweDM3OSksKCk9PnJvKCkpLGVQWydhZGRFdmVudExpc3RlbmVyJ10oZUooMHgzZTEpLCgpPT57Y29uc3QgZEY9ZUo7STdbZVldPStlUFsndmFsdWUnXTtpZihlWT09PWRGKDB4NTgxKXx8ZVk9PT1kRigweDJkMykpe2VBKCksaDcoKTtyZXR1cm47fWlmKGVZPT09J3VuaXRzJylJN1tkRigweDVjMildPStlUFtkRigweDJkMSldO2VBKCksckk9Jyc7aWYoZVk9PT1kRigweDM0Yil8fGVZPT09J3dpbmcnKUlKKCksaDUoKTtlbHNle2lmKEl2W2RGKDB4NjYxKV0pe2lmKGVZIT09J2NvcnJpZG9yJyYmZVkhPT1kRigweDFlNyl8fElrPT09ZEYoMHgyZWUpKUluKCk7fWVsc2V7aWYoZVkhPT1kRigweDU5MCkmJmVZIT09ZEYoMHgxZTcpKUlHKElRKCkpO319aFQoKTt9KSxyM1tlWV09ZUEscjVbZVldPWVxLE9bZUooMHg1ZjApXShlWT09PWVKKDB4MzRiKXx8ZVk9PT1lSigweDI5MSk\/Jy5wcy1wbGFuX19raW5rcm93cyc6ZVk9PT1lSigweDU4MSl8fGVZPT09ZUooMHgyZDMpP2VKKDB4MmU1KTplWT09PWVKKDB4NTkwKXx8ZVk9PT1lSigweDFlNyk\/Jy5wcy1wbGFuX19tb3Jlc2wnOmVKKDB4Mzc4KSlbJ2FwcGVuZCddKGVxKTt9Y29uc3QgcjY9T1tlSigweDVmMCldKGVKKDB4MzIyKSkscjc9T1tlSigweDVmMCldKGVKKDB4MmU5KSkscjg9T1tlSigweDVmMCldKGVKKDB4MWVmKSkscjk9T1tlSigweDVmMCldKGVKKDB4NDIzKSk7bGV0IHJJPScnO2NvbnN0IHJyPXU9Pntjb25zdCBkRz1lSjtJaz11O2lmKHR5cGVvZiByWSE9PWRHKDB4M2ExKSlyWVtkRygweDU2ZSldPXUhPT1kRygweDUzNCl8fCFydltkRygweDY2MSldO3I3W2RHKDB4NTRhKV0oZEcoMHgzM2IpKVsnZm9yRWFjaCddKFk9PllbZEcoMHgyMTEpXShkRygweDY0OCksWVtkRygweDI3YSldWydrJ109PT11KSkscjVbZEcoMHgzMmEpXVtkRygweDU2ZSldPXUhPT1kRygweDUzNCk7Zm9yKGNvbnN0IFkgb2ZbJ2EnLCdiJywnYyddKXI1W1ldW2RHKDB4NTZlKV09dSE9PWRHKDB4MmVlKTtyST0nJzt9O2Zvcihjb25zdCBlcCBvZltlSigweDUzNCksZUooMHgyZWUpXSl7Y29uc3QgZVo9ZG9jdW1lbnRbZUooMHg2MzQpXShlSigweDMzYikpO2VaW2VKKDB4MzRmKV09J2J1dHRvbicsZVpbJ3RleHRDb250ZW50J109YVtlcF0sZVpbZUooMHgyN2EpXVsnayddPWVwLGVaW2VKKDB4MjExKV0oJ2FyaWEtcHJlc3NlZCcsZXA9PT1JayksZVpbZUooMHgxZmUpXShlSigweDQ0NiksKCk9Pntjb25zdCBkTD1lSjtybygpLHJyKGVwKTtpZihJdltkTCgweDY2MSldKUlKKCk7ZWxzZXtpZihlcD09PWRMKDB4NTM0KSlyTigpO2Vsc2UgSUcoSVEoKSk7fWhUKCEhW10pO30pLHI3WydhcHBlbmQnXShlWik7fWNvbnN0IHJoPU9bZUooMHg1ZjApXShlSigweDNkYikpLHJjPSgpPT5yaFsncXVlcnlTZWxlY3RvckFsbCddKGVKKDB4MzNiKSlbZUooMHgzYjkpXSh1PT51W2VKKDB4MjExKV0oZUooMHg2NDgpLCEhKEk3W2VKKDB4NDgyKV0mJkk3Wydwcm9maWxlcyddW3VbZUooMHgyN2EpXVsnayddXSkpKTtmb3IoY29uc3QgZU8gb2ZbJ3poJywnYmYnXSl7Y29uc3QgZWU9ZG9jdW1lbnRbZUooMHg2MzQpXShlSigweDMzYikpO2VlW2VKKDB4MzRmKV09ZUooMHgzM2IpLGVlW2VKKDB4Mjc5KV09YVsncHJvZicrZU9bMHgwXVtlSigweDQzNildKCkrZU9bJ3NsaWNlJ10oMHgxKV0sZWVbJ2RhdGFzZXQnXVsnayddPWVPLGVlW2VKKDB4MWZlKV0oJ2NsaWNrJywoKT0+e2NvbnN0IGRLPWVKO3JvKCk7aWYoIUk3W2RLKDB4NDgyKV0pSTdbZEsoMHg0ODIpXT17J3poJzohW10sJ2JmJzohW119O0k3W2RLKDB4NDgyKV1bZU9dPSFJN1sncHJvZmlsZXMnXVtlT10scmMoKSxoUFtkSygweDU5MyldPScnLGhUKCk7fSkscmhbZUooMHg1Y2EpXShlZSk7fXIzW2VKKDB4MjBjKV09cmMscmMoKTtmb3IoY29uc3QgZUIgb2ZbZUooMHg2M2MpLGVKKDB4MzZhKSxlSigweDQ4NCksZUooMHgxZjgpLCdzbGFudCcsZUooMHg2MzcpLGVKKDB4M2YzKV0pe2NvbnN0IGViPWRvY3VtZW50W2VKKDB4NjM0KV0oZUooMHgzM2IpKTtlYltlSigweDM0ZildPWVKKDB4MzNiKSxlYlsndGV4dENvbnRlbnQnXT1hW2VCXSxlYltlSigweDI3YSldWydrJ109ZUIsZWJbZUooMHgyMTEpXShlSigweDY0OCksZUI9PT1JTyksZWJbZUooMHgxZmUpXShlSigweDQ0NiksKCk9Pntjb25zdCBkaj1lSjtyNltkaigweDU0YSldKGRqKDB4MzNiKSlbZGooMHgzYjkpXSh1PT51W2RqKDB4MjExKV0oJ2FyaWEtcHJlc3NlZCcsdVtkaigweDI3YSldWydrJ109PT1lQikpLHJvKCksckk9JycsSXo9ZGooMHg1NWEpLEl4KGVCKSxyQygpO2lmKGVCIT09ZGooMHgzZjMpKWhUKCEhW10pO30pLHI2W2VKKDB4NWNhKV0oZWIpO31mdW5jdGlvbiByaygpe2NvbnN0IGRIPWVKLHU9SXQoKTtsZXQgWT0tMHgxO2ZvcihsZXQgYzE9MHgwO2MxPHVbZEgoMHgyOGEpXVtkSCgweDY2MSldO2MxKyspaWYodVtkSCgweDI4YSldW2MxXT09PUwmJnVbZEgoMHgzYTgpXVtjMV08MHg1ZjVlMTAwKVk9TWF0aFtkSCgweDQ1MSldKFksdVtkSCgweDNhOCldW2MxXSk7aWYoWTwweDApcmV0dXJuIG51bGw7Y29uc3QgaEQ9KGMyLGMzKT0+YzI8MHgwfHxjMzwweDB8fGMyPj1YfHxjMz49Rj9HOnVbZEgoMHgyOGEpXVtjMypYK2MyXSxoUz1bXSxjMD0weDM7Zm9yKGxldCBjMj0weDA7YzI8dVtkSCgweDI4YSldW2RIKDB4NjYxKV07YzIrKyl7aWYodVtkSCgweDI4YSldW2MyXSE9PUx8fHVbJ3dhbGsnXVtjMl0+MHg1ZjVlMTAwfHx1W2RIKDB4M2E4KV1bYzJdPFktMHgxMCljb250aW51ZTtjb25zdCBjMz1jMiVYLGM0PShjMi1jMykvWDtmb3IoY29uc3QgW2M1LGM2XW9mW1sweDAsLTB4MV0sWzB4MCwweDFdLFstMHgxLDB4MF0sWzB4MSwweDBdXSl7aWYoaEQoYzMrYzUsYzQrYzYpPT09THx8aEQoYzMrYzUsYzQrYzYpPT09S3x8aEQoYzMtYzUsYzQtYzYpPT09Ryljb250aW51ZTtsZXQgYzc9MHgwO2ZvcihsZXQgY2s9MHgxO2NrPDB4MTQ7Y2srKyl7aWYoaEQoYzMrYzUqY2ssYzQrYzYqY2spPT09RylicmVhaztjNysrO31jb25zdCBjOD1jNypVO2lmKGM4PDB4NCljb250aW51ZTtjb25zdCBjOT1NYXRoWydtaW4nXShjOCw1LjUpLGNJPWM1PjB4MD8oYzMrMHgxKSpVOmM1PDB4MD9jMypVLWM5OihjMy1jMCkqMHgwKyhjMypVLWMwLzB4MiksY3I9YzY+MHgwPyhjNCsweDEpKlU6YzY8MHgwP2M0KlUtYzk6YzQqVS1jMC8weDIsY2g9YzU\/W2NJLGNyLGM5LGMwXTpbY0ksY3IsYzAsYzldO2lmKCFJRihjaCl8fEQoKVtkSCgweDY2OCldKGNpPT5JMShjaCxjaSkpKWNvbnRpbnVlO3tsZXQgY2k9IVtdO2ZvcihsZXQgY049TWF0aFtkSCgweDQ3MildKGNoWzB4MV0vVSk7Y048TWF0aFtkSCgweDQ3MildKChjaFsweDFdK2NoWzB4M10pL1UpJiYhY2k7Y04rKylmb3IobGV0IGN2PU1hdGhbZEgoMHg0NzIpXShjaFsweDBdL1UpO2N2PE1hdGhbJ3JvdW5kJ10oKGNoWzB4MF0rY2hbMHgyXSkvVSk7Y3YrKylpZihoRChjdixjTik9PT1MKXtjaT0hIVtdO2JyZWFrO31pZihjaSljb250aW51ZTt9Y29uc3QgY2M9SUFbJ3NvbWUnXSgoY3UsY1kpPT57Y29uc3QgZFE9ZEgsY009SUFbZFEoMHg2NjEpXSxjcT1JQVsoY1ktMHgxK2NNKSVjTV0sY3o9SUFbKGNZKzB4MSklY01dLGNQPShjdVsweDBdLWNxWzB4MF0pKihjelsweDFdLWN1WzB4MV0pLShjdVsweDFdLWNxWzB4MV0pKihjelsweDBdLWN1WzB4MF0pO3JldHVybiBjUD4weDAhPT1JWCgpJiZNYXRoW2RRKDB4NDc1KV0oY2hbMHgwXStjaFsweDJdLzB4Mi1jdVsweDBdLGNoWzB4MV0rY2hbMHgzXS8weDItY3VbMHgxXSk8MHg2O30pO2hTW2RIKDB4MmIzKV0oeydjJzpjaCwndic6TWF0aFtkSCgweDNhZCldKHVbZEgoMHgzYTgpXVtjMl0tKFktMHg5KSkrKGM4PjB4OD8weDI6MHgwKS0oY2M\/MHhjOjB4MCl9KTt9fXJldHVybiBoU1tkSCgweDU3OCldKChjdSxjWSk9PmN1Wyd2J10tY1lbJ3YnXSksaFNbMHgwXT9oU1sweDBdWydjJ106bnVsbDt9ZnVuY3Rpb24gcmkodSxZLGhELGhTKXtjb25zdCBkbD1lSjtsZXQgYzA9MHgwO2ZvcihsZXQgYzE9dTtjMTw9WTtjMSsrKXtJRyhjMSk7Y29uc3QgYzI9SXQoKSxjMz1jMltkbCgweDM1NyldWydmaWx0ZXInXShjNT0+YzVbJ29rJ10pLGM0PXJ3KGMyKS1oUztjMCsrO2lmKGhEW2RsKDB4MmFiKV0paERbZGwoMHgyYWIpXVtkbCgweDJiMyldKHsnc2MnOmM0LCduJzpjMSwnb2snOmMzW2RsKDB4NjYxKV0sJ2FsbCc6YzJbZGwoMHgzNTcpXVtkbCgweDY2MSldLCdzb2Z0JzpjMltkbCgweDM1NyldW2RsKDB4MmE2KV0oYzU9PmM1W2RsKDB4NjdhKV0mJmM1W2RsKDB4NjdhKV1bZGwoMHg2NjEpXSlbZGwoMHg2NjEpXSwnc2VlZHMnOkpTT05bZGwoMHgxZTkpXShJWiksJ2NvcmUnOklwJiZJcFsnc2xpY2UnXSgpLCdjb3JlMic6SVAmJklQW2RsKDB4MjcwKV0oKSwnY29yZTMnOklmJiZJZltkbCgweDI3MCldKCl9KTtpZighaERbJ3YnXXx8YzQ+aERbJ3YnXVsnc2MnXSloRFsndiddPXsnc2MnOmM0LCduJzpjMSwnb2snOmMzW2RsKDB4NjYxKV0sJ2MyJzpJUCwnZXNjJzpjMltkbCgweDM1NyldW2RsKDB4MmE2KV0oYzU9PmM1W2RsKDB4NDYzKV1bZGwoMHg0ZDApXSlbZGwoMHg2NjEpXX07fXJldHVybiBjMDt9ZnVuY3Rpb24gck4oKXtjb25zdCBkbT1lSjtJUD1udWxsLElmPW51bGwsSUcoSTdbZG0oMHgzMmEpXSk7Zm9yKGxldCBjMj0weDA7YzI8MHgyJiZJej09PWRtKDB4NTVhKSYmSXQoKVtkbSgweDM1NyldW2RtKDB4NjY4KV0oYzM9PmMzW2RtKDB4NDYzKV1bZG0oMHg0ZDApXSk7YzIrKyl7Y29uc3QgYzM9cmsoKTtpZighYzMpYnJlYWs7aWYoIUlQKUlQPWMzO2Vsc2UgSWY9YzM7SUcoSTdbZG0oMHgzMmEpXSk7fWNvbnN0IHU9SXQoKVtkbSgweDRkNCldLFk9TWF0aFsnbWF4J10oMHgyLE1hdGhbZG0oMHgzOWYpXSh1LzB4NTUpKSxoRD1NYXRoWydtaW4nXSgweDE4LE1hdGhbZG0oMHg1M2IpXSh1LzB4MjApKSxoUz17J3YnOm51bGwsJ2xpc3QnOltdfTtsZXQgYzA9cmkoWSxoRCxoUywweDApO3tjb25zdCBjND1oU1tkbSgweDJhYildW2RtKDB4MmE2KV0oYzU9PmM1WydvayddPT09YzVbZG0oMHgxZTEpXSk7YzRbZG0oMHg2NjEpXSYmKGhTWyd2J109YzRbZG0oMHg1NzgpXSgoYzUsYzYpPT5jNlsnc2MnXS1jNVsnc2MnXSlbMHgwXSxoU1tkbSgweDJhYildPWM0KTt9cnY9aFNbJ2xpc3QnXVtkbSgweDU3OCldKChjNSxjNik9PmM2WydzYyddLWM1WydzYyddKVsnc2xpY2UnXSgweDAsMHg5KTtpZighaFNbJ3YnXSlyZXR1cm47STdbZG0oMHgzMmEpXT1oU1sndiddWyduJ10sSTdbZG0oMHg1YzIpXT1udWxsLHIzW2RtKDB4MzJhKV0mJnIzW2RtKDB4MzJhKV0oKSxJRyhoU1sndiddWyduJ10pO2NvbnN0IGMxPUl0KCk7ckk9YVsnYmVzdERvbmUnXShjMVsncmVnaW9ucyddW2RtKDB4NjYxKV0sYzAsYzFbJ3JlZ2lvbnMnXVtkbSgweDJhNildKGM1PT5jNVsnb2snXSlbZG0oMHg2NjEpXSksckMoKTtpZihJdltkbSgweDY2MSldKXJ2PVtdO3JmKCk7fXtjb25zdCBlZD1PW2VKKDB4NWYwKV0oZUooMHgzM2EpKTtpZihlZCl7Y29uc3QgZUM9ZWRbZUooMHg2NmQpXTtlZFtlSigweDU2ZildKC4uLmVDWydjaGlsZE5vZGVzJ10pLGVDW2VKKDB4M2VlKV0oKSxlZFtlSigweDNlZSldKCk7fX17Y29uc3QgZVQ9Wy4uLk9bJ3F1ZXJ5U2VsZWN0b3JBbGwnXShlSigweDMwYSkpXTtsZXQgZW89bnVsbDtjb25zdCBldz0oKT0+e2NvbnN0IGRKPWVKLHU9T1tkSigweDM4YildPDB4MmY4O3UhPT1lbyYmKGVvPXUsZVRbZEooMHgzYjkpXShZPT57WVsnb3BlbiddPSF1O30pKTt9O2V3KCksbmV3IFJlc2l6ZU9ic2VydmVyKGV3KVtlSigweDQ4MCldKE8pO31sZXQgcnY9W10scnU9IVtdO2NvbnN0IHJZPU9bJ3F1ZXJ5U2VsZWN0b3InXShlSigweDI0OSkpLHJNPU9bZUooMHg1ZjApXShlSigweDI4NCkpLHJxPU9bZUooMHg1ZjApXShlSigweDUyMikpLHJ6PXU9Pntjb25zdCBkbj1lSjtJWj1KU09OW2RuKDB4NjBjKV0odVtkbigweDQ4MSldKSxJcD11W2RuKDB4NDliKV0mJnVbZG4oMHg0OWIpXVtkbigweDI3MCldKCksSVA9dVtkbigweDVlNyldJiZ1W2RuKDB4NWU3KV1bZG4oMHgyNzApXSgpLElmPXVbZG4oMHg1MTkpXSYmdVtkbigweDUxOSldWydzbGljZSddKCk7fTtmdW5jdGlvbiByUCh1LGhEKXtjb25zdCBkUj1lSixoUz11W2RSKDB4MmZhKV0oJzJkJyksYzA9dVtkUigweDQwZSldLGMxPXVbZFIoMHg2MjUpXSxjMj1JQVtkUigweDM3ZildKGM5PT5jOVsweDBdKSxjMz1JQVsnbWFwJ10oYzk9PmM5WzB4MV0pLGM0PU1hdGhbZFIoMHg0M2MpXSguLi5jMiksYzU9TWF0aFtkUigweDQzYyldKC4uLmMzKSxjNj1NYXRoWydtaW4nXSgoYzAtMHg4KS8oTWF0aFsnbWF4J10oLi4uYzIpLWM0KSwoYzEtMHg4KS8oTWF0aFtkUigweDQ1MSldKC4uLmMzKS1jNSkpLGM3PWM5PT4weDQrKGM5LWM0KSpjNixjOD1jOT0+MHg0KyhjOS1jNSkqYzY7aFNbZFIoMHg1ZTkpXSgweDAsMHgwLGMwLGMxKTtmb3IobGV0IGM5PTB4MDtjOTxGO2M5KyspZm9yKGxldCBjST0weDA7Y0k8WDtjSSsrKXtjb25zdCBjcj1oRFtkUigweDI4YSldW2M5KlgrY0ldO2lmKGNyPT09Ryljb250aW51ZTtoU1tkUigweDQ2NildPWNyPj0weDA\/aERbZFIoMHgzNTcpXVtjcl1bJ29rJ10\/ZFIoMHg0NmEpOmRSKDB4MjZiKTpjcj09PUx8fGNyPT09Sz9kUigweDQ2YSk6ZFIoMHg1NjUpLGhTW2RSKDB4Mjc3KV0oYzcoY0kqVSksYzgoYzkqVSksVSpjNiswLjUsVSpjNiswLjUpO31oU1tkUigweDVkZildPWRSKDB4NWZlKTtmb3IoY29uc3QgY2ggb2YgaERbZFIoMHgzZjIpXSl7aFNbZFIoMHgzMDQpXT1jaFsweDRdPT09MHgyPzEuMjowLjUsaFNbJ2JlZ2luUGF0aCddKCksaFNbJ21vdmVUbyddKGM3KGNoWzB4MF0pLGM4KGNoWzB4MV0pKSxoU1tkUigweDYxNSldKGM3KGNoWzB4Ml0pLGM4KGNoWzB4M10pKSxoU1tkUigweDUyZSldKCk7fX1mdW5jdGlvbiByZigpe2NvbnN0IGR5PWVKLHU9cnZbZHkoMHg2NjEpXT97J3NlZWRzJzpKU09OW2R5KDB4MWU5KV0oSVopLCdjb3JlJzpJcCYmSXBbZHkoMHgyNzApXSgpLCdjb3JlMic6SVAmJklQW2R5KDB4MjcwKV0oKSwnY29yZTMnOklmJiZJZltkeSgweDI3MCldKCl9Om51bGw7ck1bZHkoMHgyNzkpXT0nJyxycVtkeSgweDI3OSldPScnLHJZWydoaWRkZW4nXT0hcnZbZHkoMHg2NjEpXXx8SWshPT1keSgweDUzNCk7aWYocllbZHkoMHg1NmUpXSlyZXR1cm47Y29uc3QgWT1ydlsweDBdLGhEPW5ldyBNYXAoKTtmb3IoY29uc3QgYzEgb2YgcnYpaWYoIWhEW2R5KDB4MzBiKV0oYzFbZHkoMHgxZTEpXSkpaERbJ3NldCddKGMxW2R5KDB4MWUxKV0sYzEpO2NvbnN0IGhTPVsuLi5oRFtkeSgweDJjYyldKCldW2R5KDB4NTc4KV0oKGMyLGMzKT0+YzJbZHkoMHgxZTEpXS1jM1snYWxsJ10pW2R5KDB4MjcwKV0oMHgwLDB4NiksYzA9aFNbZHkoMHgyYjUpXShjMj0+YzJbZHkoMHg0ODEpXT09PXVbZHkoMHg0ODEpXSl8fChoU1tkeSgweDUzNyldKFkpP1k6bnVsbCk7Zm9yKGNvbnN0IGMyIG9mIGhTKXtjb25zdCBjMz1kb2N1bWVudFsnY3JlYXRlRWxlbWVudCddKGR5KDB4MzNiKSksYzQ9ZG9jdW1lbnRbZHkoMHg2MzQpXShkeSgweDMyNykpLGM1PWRvY3VtZW50W2R5KDB4NjM0KV0oZHkoMHg0OTQpKSxjNj1kb2N1bWVudFtkeSgweDYzNCldKGR5KDB4MjBlKSk7YzNbZHkoMHgzNGYpXT1keSgweDMzYiksYzRbZHkoMHg0MGUpXT0weGI0LGM0W2R5KDB4NjI1KV09MHg4MixyeihjMik7Y29uc3QgYzc9SXQoKTtyUChjNCxjNyk7Y29uc3QgYzg9YzdbZHkoMHgzNTcpXVtkeSgweDY2MSldP01hdGhbZHkoMHg0NzIpXShjN1sncmVnaW9ucyddW2R5KDB4NGIwKV0oKGNJLGNyKT0+Y0krY3JbZHkoMHgyMTMpXSwweDApL2M3WydyZWdpb25zJ11bZHkoMHg2NjEpXSowLjg1KToweDA7YzVbZHkoMHgyNzkpXT1hW2R5KDB4MzZkKV0oYzJbZHkoMHgxZTEpXSksYzZbZHkoMHgyNzkpXT1hWydnYWxBdmcnXShjOCkrZHkoMHgzMGUpKyhjMlsnb2snXT09PWMyW2R5KDB4MWUxKV0\/YVtkeSgweDUwOCldOmFbJ2dhbEJhZCddKGMyW2R5KDB4MWUxKV0tYzJbJ29rJ10pKSsoYzJbZHkoMHg2N2EpXT9keSgweDMwZSkrYVtkeSgweDYwNSldKGMyWydzb2Z0J10pOicnKTtjb25zdCBjOT1jMj09PWMwO2MzWydzZXRBdHRyaWJ1dGUnXShkeSgweDY0OCksYzkpO2lmKGM5fHxjMj09PVkpe2NvbnN0IGNJPWRvY3VtZW50W2R5KDB4NjM0KV0oJ2VtJyk7Y0lbZHkoMHgyNzkpXT1jOT9hW2R5KDB4MzYxKV06YVtkeSgweDYxMCldO2lmKGM5KWNJW2R5KDB4MzExKV09ZHkoMHg0NTgpO2MzW2R5KDB4NWNhKV0oY0kpO31jM1tkeSgweDVjYSldKGM0LGM1LGM2KSxjM1tkeSgweDFmZSldKGR5KDB4NDQ2KSwoKT0+e2NvbnN0IGR4PWR5O3JvKCksSXo9ZHgoMHg1YzgpLHJ6KGMyKSxJN1tkeCgweDMyYSldPWMyWyduJ10scjNbJ3VuaXRzJ10mJnIzW2R4KDB4MzJhKV0oKSxyST0nJyxyQygpLGhUKCEhW10pO30pLHJNWydhcHBlbmQnXShjMyk7fXJ6KHUpO31jb25zdCByQT1PWydxdWVyeVNlbGVjdG9yJ10oZUooMHg2M2EpKSxycD0oKT0+ckFbZUooMHg1NGEpXSgnYnV0dG9uJylbJ2ZvckVhY2gnXSh1PT51W2VKKDB4MjExKV0oJ2FyaWEtcHJlc3NlZCcsdVsnZGF0YXNldCddWydrJ109PT1JN1tlSigweDUzYildKSk7Zm9yKGNvbnN0IFtlYSxlc11vZltbJ2VnJyxhW2VKKDB4NjU5KV1dLFsnb2cnLGFbZUooMHgyOGMpXV1dKXtjb25zdCBlVj1kb2N1bWVudFtlSigweDYzNCldKGVKKDB4MzNiKSk7ZVZbZUooMHgzNGYpXT1lSigweDMzYiksZVZbZUooMHgyNzkpXT1lcyxlVltlSigweDI3YSldWydrJ109ZWEsZVZbZUooMHgyMTEpXShlSigweDYxYSksJycpLGVWW2VKKDB4MWZlKV0oZUooMHg0NDYpLCgpPT57Y29uc3QgZGc9ZUo7cm8oKSxJN1snZmxvb3InXT1lYSxycCgpLHJJPScnO2lmKElrPT09ZGcoMHg1MzQpKXJOKCk7ZWxzZSBJRyhJUSgpKTtoVCghIVtdKTt9KSxyQVtlSigweDVjYSldKGVWKTt9cjNbZUooMHg1M2IpXT1ycCxycCgpO2NvbnN0IHJaPU9bJ3F1ZXJ5U2VsZWN0b3InXShlSigweDFjNSkpLHJPPU9bZUooMHg1ZjApXShlSigweDVhMikpLHJlPSgpPT5yWltlSigweDU0YSldKGVKKDB4MzNiKSlbZUooMHgzYjkpXSh1PT51W2VKKDB4MjExKV0oZUooMHg2NDgpLHVbZUooMHgyN2EpXVsnayddPT09STdbZUooMHg0N2IpXSkpO2Zvcihjb25zdCBbZUUsZVVdb2ZbW2VKKDB4NTQwKSxhW2VKKDB4M2M3KV1dLFsnd2FsbCcsYVtlSigweDM5ZCldXV0pe2NvbnN0IGVYPWRvY3VtZW50WydjcmVhdGVFbGVtZW50J10oZUooMHgzM2IpKTtlWFtlSigweDM0ZildPWVKKDB4MzNiKSxlWFtlSigweDI3OSldPWVVLGVYW2VKKDB4MjdhKV1bJ2snXT1lRSxlWFtlSigweDFmZSldKCdjbGljaycsKCk9PntybygpLEk3Wydqb2ludCddPWVFLHJlKCksckk9JycsSUooKSxoVCghIVtdKTt9KSxyWltlSigweDVjYSldKGVYKTt9cjNbJ2pvaW50J109cmUscmUoKTtjb25zdCByQj1PWydxdWVyeVNlbGVjdG9yJ10oZUooMHgzOTgpKSxyYj1PW2VKKDB4NWYwKV0oZUooMHgzZWYpKSxyZD1bXTtmdW5jdGlvbiByQygpe2NvbnN0IGR0PWVKO3JCW2R0KDB4MjExKV0oZHQoMHg2NDgpLCEhSVApO31jb25zdCByVD0oKT0+e2NvbnN0IGREPWVKO2lmKElOKXJldHVybiBudWxsO2lmKElNJiZJdltkRCgweDY2MSldKUlWKElNKTtyZXR1cm4gSlNPTlsnc3RyaW5naWZ5J10oeydwb2x5JzpJQSwnY29yZSc6SXAsJ2NvcmUyJzpJUCwnY29yZTMnOklmLCdzZWVkcyc6SVosJ3N0YXRlJzpJNywnbW9kZSc6SWssJ3ZhcmlhbnQnOklPLCduZXh0SWQnOklCLCdibG9ja3MnOkk4LCd3aW5Vc2VyJzpJOSwncGFydHMnOkl2W2REKDB4MzdmKV0odT0+KHsuLi51LCdtb2RlbCc6dW5kZWZpbmVkfSkpfSk7fTtmdW5jdGlvbiBybygpe2NvbnN0IGRTPWVKO3JHKCk7Y29uc3QgdT1yVCgpO2lmKCF1KXJldHVybjtyZFtkUygweDJiMyldKHUpO2lmKHJkW2RTKDB4NjYxKV0+MHgyOClyZFtkUygweDM4MildKCk7cmJbZFMoMHg0MjkpXT0hW107fXJiW2VKKDB4MWZlKV0oZUooMHg0NDYpLCgpPT57Y29uc3QgQzA9ZUosWT1yZFtDMCgweDIyYildKCk7aWYoIVkpcmV0dXJuO2NvbnN0IGhEPUpTT05bQzAoMHg2MGMpXShZKTtJdj1oRFtDMCgweDRkZildfHxbXTshSXZbQzAoMHg2NjEpXSYmKEl1PW51bGwsSVk9bnVsbCxJTT1udWxsKTtmb3IoY29uc3QgaFMgb2ZbJ2FuZ2xlJyxDMCgweDI5MSldKXI1W2hTXVtDMCgweDU2ZSldPWhEW0MwKDB4MmM0KV0hPT1DMCgweDYzNyk7ckJbQzAoMHg1NmUpXT1yOFtDMCgweDU2ZSldPWhEW0MwKDB4MmM0KV09PT1DMCgweDYzNyksck9bQzAoMHg1NmUpXT1oRFtDMCgweDJjNCldIT09QzAoMHg2MzcpLElBPWhEWydwb2x5J10sSXA9aERbQzAoMHg0OWIpXSxJUD1oRFtDMCgweDVlNyldLElmPWhEW0MwKDB4NTE5KV0sSVo9aERbQzAoMHg0ODEpXSxPYmplY3RbQzAoMHgxYmUpXShJNyxoRFtDMCgweDM2YildKSxJQj1oRFtDMCgweDI4NSldLElPPWhEW0MwKDB4MmM0KV0sSTg9aERbQzAoMHgyODMpXXx8W10sSTk9aERbQzAoMHgzNjYpXXx8W10saHYoKSxoWSgpLHJyKGhEW0MwKDB4NDQwKV0pLHI2WydxdWVyeVNlbGVjdG9yQWxsJ10oQzAoMHgzM2IpKVtDMCgweDNiOSldKGMwPT5jMFtDMCgweDIxMSldKCdhcmlhLXByZXNzZWQnLGMwW0MwKDB4MjdhKV1bJ2snXT09PUlPKSksT2JqZWN0W0MwKDB4MmNjKV0ocjMpW0MwKDB4M2I5KV0oYzA9PmMwKCkpLHJDKCkscmJbQzAoMHg0MjkpXT0hcmRbQzAoMHg2NjEpXSxoVCgpO30pLHJCW2VKKDB4MWZlKV0oZUooMHg0NDYpLCgpPT57cm8oKSxJej0nbWFudWFsJyxJZj1udWxsO2lmKElQKUlQPW51bGw7ZWxzZSBJUD1yaygpO3JDKCksckk9JycsSUcoSVEoKSksaFQoISFbXSk7fSk7Y29uc3Qgcnc9dT0+e2NvbnN0IEMxPWVKLFk9dVtDMSgweDM1NyldW0MxKDB4MmE2KV0oaFM9PmhTWydvayddKSxoRD11W0MxKDB4MzU3KV1bQzEoMHg2NjEpXT91W0MxKDB4MzU3KV1bQzEoMHg0YjApXSgoaFMsYzApPT5oUytjMFtDMSgweDIxMyldLDB4MCkvdVsncmVnaW9ucyddWydsZW5ndGgnXToweDA7cmV0dXJuLXVbQzEoMHgzNTcpXVsncmVkdWNlJ10oKGhTLGMwKT0+aFMrKGMwW0MxKDB4NjdhKV0\/YzBbQzEoMHg2N2EpXVtDMSgweDY2MSldOjB4MCksMHgwKSpJNFtDMSgweDJmMCldWydzb2Z0UGVuYWx0eSddLSh1W0MxKDB4MzU0KV0\/MHhjODoweDApLU1hdGhbJ2FicyddKGhELTB4MzIpKjB4Mi11W0MxKDB4MzU3KV1bJ2ZpbHRlciddKGhTPT5oU1snanVuayddKVtDMSgweDY2MSldKjB4YzgrWVtDMSgweDY2MSldKjB4NjQrWVsncmVkdWNlJ10oKGhTLGMwKT0+aFMrYzBbQzEoMHgyMTMpXSwweDApL3VbQzEoMHgyYTIpXSoweDNjLSh1W0MxKDB4MzU3KV1bQzEoMHg2NjEpXS1ZW0MxKDB4NjYxKV0pKjB4NDYtdVtDMSgweDM1NyldW0MxKDB4MmE2KV0oaFM9PiFoU1tDMSgweDU1NSldWydsZW5ndGgnXSlbQzEoMHg2NjEpXSoweDMyLXVbQzEoMHgzNTcpXVtDMSgweDJhNildKGhTPT5oU1tDMSgweDQ2MyldW0MxKDB4NWE2KV18fGhTW0MxKDB4NDYzKV1bQzEoMHg2NjUpXXx8aFNbQzEoMHg0NjMpXVtDMSgweDJkZildKVtDMSgweDY2MSldKjB4NzgtdVtDMSgweDUzNCldKjB4Mi0oSVA\/MHgxZToweDApLShJZj8weDFlOjB4MCktdVtDMSgweDUxNCldKjB4Yzg7fSxyYT0odSxZKT0+SVcodSxZKSYmRCgpW2VKKDB4NDM1KV0oaEQ9PiEodT5oRFsweDBdLTAuNSYmdTxoRFsweDBdK1MoaEQpKzAuNSYmWT5oRFsweDFdLTAuNSYmWTxoRFsweDFdK0kwKGhEKSswLjUpKTtmdW5jdGlvbiBycyh1KXtjb25zdCBDMj1lSixZPWM3PT5NYXRoW0MyKDB4NTNiKV0oTWF0aFtDMigweDJkZCldKCkqYzcpLGhEPWM3PT5NYXRoW0MyKDB4NDcyKV0oYzcqMHgyKS8weDIsaFM9dVtDMigweDM1NyldW0MyKDB4MmE2KV0oYzc9PiFjN1snb2snXXx8IWM3Wydyb29tcyddW0MyKDB4NjYxKV0pLGMwPWhTWydsZW5ndGgnXSYmTWF0aFsncmFuZG9tJ10oKTwwLjg\/aFNbWShoU1tDMigweDY2MSldKV06dVtDMigweDM1NyldW1kodVtDMigweDM1NyldW0MyKDB4NjYxKV0pXSxjMT1JWltDMigweDJiNSldKGM3PT5jN1tDMigweDJmZCldKTtpZihjMSYmdVtDMigweDM1NyldW0MyKDB4NjYxKV0mJk1hdGhbQzIoMHgyZGQpXSgpPDAuNCl7Y29uc3QgYzc9Wy4uLnVbQzIoMHgzNTcpXV1bJ3NvcnQnXSgoYzgsYzkpPT5jOVtDMigweDIxMyldLWM4W0MyKDB4MjEzKV0pWzB4MF07aWYoSWs9PT1DMigweDUzNCkmJk1hdGhbQzIoMHgyZGQpXSgpPDAuNSlJWltDMigweDUzMildKElaW0MyKDB4NWViKV0oYzEpLDB4MSk7ZWxzZSBjMVsneCddPWhEKGM3WydjeCddK2M3Wyd3J10vMHg0KSxjMVsneSddPWhEKGM3WydjeSddKTtyZXR1cm47fWlmKCFjMClyZXR1cm47Y29uc3QgYzI9YzBbQzIoMHg0NjMpXSxjMz1jMFtDMigweDNjNSldO2lmKGMyW0MyKDB4NGQwKV0mJiFJUCYmTWF0aFtDMigweDJkZCldKCk8MC4zKXtjb25zdCBjOD1yaygpO2lmKGM4KXtJUD1jODtyZXR1cm47fX1pZihJaz09PUMyKDB4NTM0KSYmYzJbQzIoMHg2MzYpXSYmYzBbJ2FyZWEnXT4weDUwJiZJWltDMigweDY2MSldPDB4MTgpe2NvbnN0IGM5PWMwWyd3J10+PWMwWydkJ10sY0k9aEQoYzBbJ2N4J10rKGM5P2MwWyd3J10vMHg0OjB4MCkpLGNyPWhEKGMwWydjeSddKyhjOT8weDA6YzBbJ2QnXS8weDQpKTtpZihyYShjSSxjcikpe2MzWyd4J109aEQoYzBbJ2N4J10tKGM5P2MwWyd3J10vMHg0OjB4MCkpLGMzWyd5J109aEQoYzBbJ2N5J10tKGM5PzB4MDpjMFsnZCddLzB4NCkpLElaW0MyKDB4MmIzKV0oeydpZCc6SUIrKywneCc6Y0ksJ3knOmNyfSk7cmV0dXJuO319aWYoSWs9PT1DMigweDUzNCkmJihjMltDMigweDYzNildfHxjMltDMigweDI5NyldKSYmYzBbQzIoMHgyMTMpXTwweDIzJiZJWltDMigweDY2MSldPjB4MiYmTWF0aFsncmFuZG9tJ10oKTwwLjYpe0laW0MyKDB4NTMyKV0oSVpbQzIoMHg1ZWIpXShjMyksMHgxKTtyZXR1cm47fWlmKElrPT09QzIoMHgyZWUpJiZjMltDMigweDYzNildJiZNYXRoW0MyKDB4MmRkKV0oKTwwLjQpe2NvbnN0IGNoPUlaW1koSVpbQzIoMHg2NjEpXSldLGNjPWNoWyd0J107Y2hbJ3QnXT1jM1sndCddLGMzWyd0J109Y2M7cmV0dXJuO31jb25zdCBjND0weDErWSgweDUpLGM1PWhEKGMzWyd4J10rKFkoMHgzKS0weDEpKmM0KSxjNj1oRChjM1sneSddKyhZKDB4MyktMHgxKSpjNCk7cmEoYzUsYzYpJiYoYzNbJ3gnXT1jNSxjM1sneSddPWM2KTt9Y29uc3QgclY9ZUooMHg2MjcpK01hdGhbZUooMHgyZGQpXSgpW2VKKDB4Mjc1KV0oMHgyNClbZUooMHgyNzApXSgweDIsMHg4KVtlSigweDQzNildKCksckU9eydydW5zJzoweDgsJ2V4cG9ydHMnOjB4NX0sclU9Qj9lSigweDMzMSk6ZUooMHg1ZjYpLHJYPXU9Pntjb25zdCBDMz1lSjt0cnl7Y29uc3QgWT0rKHNlc3Npb25TdG9yYWdlW0MzKDB4MjRiKV0oJ3BzZF8nK3UpfHwweDApKzB4MTtpZihZPnJFW3VdKXJldHVybiFbXTtzZXNzaW9uU3RvcmFnZVsnc2V0SXRlbSddKEMzKDB4NGIxKSt1LFkpO31jYXRjaChoRCl7fXJldHVybiEhW107fSxyVz0oKT0+e3JJPXJVLGhUKCk7fTtsZXQgckY9MHgwO2NvbnN0IHJHPSgpPT57Y29uc3QgQzQ9ZUo7ckYmJihjbGVhclRpbWVvdXQockYpLHJGPTB4MCxyOFsndGV4dENvbnRlbnQnXT1hW0M0KDB4M2M5KV0pO307ZnVuY3Rpb24gckwoKXtjb25zdCBDNT1lSjtybygpO2NvbnN0IHU9KCk9PkpTT05bQzUoMHgxZTkpXSh7J3NlZWRzJzpJWiwnY29yZTInOklQLCdjb3JlMyc6SWZ9KSxZPWM0PT57Y29uc3QgQzY9QzUsYzU9SlNPTltDNigweDYwYyldKGM0KTtJWj1jNVsnc2VlZHMnXSxJUD1jNVtDNigweDVlNyldLElmPWM1W0M2KDB4NTE5KV07fTtsZXQgaEQ9SXQoKTtJaz09PUM1KDB4NTM0KSYmKElaPUlaW0M1KDB4MmE2KV0oYzQ9PiFjNFtDNSgweDJmZCldKSxoRD1JdCgpKTtsZXQgaFM9dSgpLGMwPXJ3KGhEKSxjMT0weDAsYzI9MHgwO3I4W0M1KDB4Mjc5KV09YVtDNSgweDRjMSldO2NvbnN0IGMzPSgpPT57Y29uc3QgQzc9QzU7YzErKztsZXQgYzQ9IVtdO2ZvcihsZXQgYzg9MHgwO2M4PDB4YTtjOCsrKXtZKGhTKSxycyhJdCgpKTtpZihNYXRoW0M3KDB4MmRkKV0oKTwwLjM1KXJzKEl0KCkpO2NvbnN0IGM5PUl0KCksY0k9cncoYzkpO2lmKGNJPmMwKzAuMDEpYzA9Y0ksaFM9dSgpLGM0PSEhW107ZWxzZXtpZihjST5jMC0wLjAxKWhTPXUoKTt9fVkoaFMpLGhEPUl0KCksYzI9YzQ\/MHgwOmMyKzB4MTtjb25zdCBjNT1oRFtDNygweDM1NyldW0M3KDB4MmE2KV0oY3I9PmNyWydvayddKVtDNygweDY2MSldLGM2PWhEW0M3KDB4MzU3KV1bQzcoMHg2NjEpXTtJaz09PUM3KDB4NTM0KSYmKEk3Wyd1bml0cyddPUlaW0M3KDB4NjYxKV0scjNbJ3VuaXRzJ10oKSk7ckMoKTtjb25zdCBjNz1jNT09PWM2JiZoRFtDNygweDM1NyldW0M3KDB4NDM1KV0oY3I9PmNyW0M3KDB4NTU1KV1bQzcoMHg2NjEpXSkmJmMyPj0weDZ8fGMyPj0weDE5fHxjMT49MHg3ODtyST0oYzc\/YVtDNygweDY0MyldOmFbJ2V2byddKShjMSxjNSxjNik7YzcmJihyRj0weDAscjhbQzcoMHgyNzkpXT1hW0M3KDB4M2M5KV0pO2hUKCk7aWYoIWM3KXJGPXNldFRpbWVvdXQoYzMsMHg0Nik7fTtyRj1zZXRUaW1lb3V0KGMzLDB4NDYpO31yOFtlSigweDFmZSldKGVKKDB4NDQ2KSwoKT0+e2lmKHJGKXJHKCk7ZWxzZXtpZihyWCgncnVucycpKXJMKCk7ZWxzZSByVygpO319KTtjb25zdCBySz1lSigweDQ2YSkscmo9ZG9jdW1lbnRbJ2NyZWF0ZUVsZW1lbnQnXShlSigweDMyNykpLHJIPWRvY3VtZW50W2VKKDB4NjM0KV0oZUooMHgzMjcpKTtmdW5jdGlvbiB2KEkscil7ST1JLTB4MWI4O2NvbnN0IGg9TigpO2xldCBjPWhbSV07aWYodlsnd0h2dE1pJ109PT11bmRlZmluZWQpe3ZhciBrPWZ1bmN0aW9uKFkpe2NvbnN0IE09J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5Ky89JztsZXQgcT0nJyx6PScnLFA9cStrLGY9KCcnK2Z1bmN0aW9uKCl7cmV0dXJuIDB4MDt9KVsnaW5kZXhPZiddKCdceDBhJykhPT0tMHgxO2ZvcihsZXQgQT0weDAscCxaLE89MHgwO1o9WVsnY2hhckF0J10oTysrKTt+WiYmKHA9QSUweDQ\/cCoweDQwK1o6WixBKyslMHg0KT9xKz1mfHxQWydjaGFyQ29kZUF0J10oTysweGEpLTB4YSE9PTB4MD9TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKDB4ZmYmcD4+KC0weDIqQSYweDYpKTpBOjB4MCl7Wj1NWydpbmRleE9mJ10oWik7fWZvcihsZXQgZT0weDAsQj1xWydsZW5ndGgnXTtlPEI7ZSsrKXt6Kz0nJScrKCcwMCcrcVsnY2hhckNvZGVBdCddKGUpWyd0b1N0cmluZyddKDB4MTApKVsnc2xpY2UnXSgtMHgyKTt9cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh6KTt9O3ZbJ01HZUhEciddPWssdlsnR2hwcGxmJ109e30sdlsnd0h2dE1pJ109ISFbXTt9Y29uc3QgaT1oWzB4MF07dlsnV2poelNVJ10hPT1pJiYodlsnR2hwcGxmJ109e30sdlsnV2poelNVJ109aSk7Y29uc3QgdT12WydHaHBwbGYnXVtJXTtpZih1PT09dW5kZWZpbmVkKXtjb25zdCBZPWZ1bmN0aW9uKE0pe3RoaXNbJ01wc3NpbSddPU0sdGhpc1snUFlYd0p0J109WzB4MSwweDAsMHgwXSx0aGlzWydKb0h4Y3YnXT1mdW5jdGlvbigpe3JldHVybiduZXdTdGF0ZSc7fSx0aGlzWydnWWRFQnEnXT0nXHg1Y1x4NzdceDJiXHgyMFx4MmFceDVjXHgyOFx4NWNceDI5XHgyMFx4MmFceDdiXHg1Y1x4NzdceDJiXHgyMFx4MmEnLHRoaXNbJ3JoVUVMViddPSdceDViXHgyN1x4N2NceDIyXHg1ZFx4MmVceDJiXHg1Ylx4MjdceDdjXHgyMlx4NWRceDNiXHgzZlx4MjBceDJhXHg3ZCc7fTtZWydwcm90b3R5cGUnXVsnc2JRaUZ6J109ZnVuY3Rpb24oKXtjb25zdCBNPW5ldyBSZWdFeHAodGhpc1snZ1lkRUJxJ10rdGhpc1sncmhVRUxWJ10pLHE9TVsndGVzdCddKHRoaXNbJ0pvSHhjdiddWyd0b1N0cmluZyddKCkpPy0tdGhpc1snUFlYd0p0J11bMHgxXTotLXRoaXNbJ1BZWHdKdCddWzB4MF07cmV0dXJuIHRoaXNbJ3lDa0FGRiddKHEpO30sWVsncHJvdG90eXBlJ11bJ3lDa0FGRiddPWZ1bmN0aW9uKE0pe2lmKCFCb29sZWFuKH5NKSlyZXR1cm4gTTtyZXR1cm4gdGhpc1snRXRNWmlYJ10odGhpc1snTXBzc2ltJ10pO30sWVsncHJvdG90eXBlJ11bJ0V0TVppWCddPWZ1bmN0aW9uKE0pe2ZvcihsZXQgcT0weDAsej10aGlzWydQWVh3SnQnXVsnbGVuZ3RoJ107cTx6O3ErKyl7dGhpc1snUFlYd0p0J11bJ3B1c2gnXShNYXRoWydyb3VuZCddKE1hdGhbJ3JhbmRvbSddKCkpKSx6PXRoaXNbJ1BZWHdKdCddWydsZW5ndGgnXTt9cmV0dXJuIE0odGhpc1snUFlYd0p0J11bMHgwXSk7fSwoJycrZnVuY3Rpb24oKXtyZXR1cm4gMHgwO30pWydpbmRleE9mJ10oJ1x4MGEnKT09PS0weDEmJm5ldyBZKHYpWydzYlFpRnonXSgpLGM9dlsnTUdlSERyJ10oYyksdlsnR2hwcGxmJ11bSV09Yzt9ZWxzZSBjPXU7cmV0dXJuIGM7fWZ1bmN0aW9uIHJRKHUpe2NvbnN0IEM4PWVKLFk9cjIsaEQ9cmpbQzgoMHgyZmEpXSgnMmQnKTtoRFtDOCgweDNkMSldKFlbQzgoMHg1OGEpXSgpKSxyMj1oRCx1KCkscjI9WTt9ZnVuY3Rpb24gcmwoKXtjb25zdCBDOT1lSjtyaltDOSgweDQwZSldPXJIWyd3aWR0aCddPXIxW0M5KDB4NDBlKV0scmpbJ2hlaWdodCddPXJIW0M5KDB4NjI1KV09cjFbJ2hlaWdodCddO31mdW5jdGlvbiBybSgpe2NvbnN0IENJPWVKLHU9cmpbQ0koMHgyZmEpXSgnMmQnKSxZPXJIWydnZXRDb250ZXh0J10oJzJkJyksaEQ9cjFbJ3dpZHRoJ10saFM9cjFbQ0koMHg2MjUpXSxjMD1NYXRoW0NJKDB4NDUxKV0oMC43LDAuMDMqclIpKmhEL3JKO1lbQ0koMHgzZDEpXSgweDEsMHgwLDB4MCwweDEsMHgwLDB4MCksWVtDSSgweDVlOSldKDB4MCwweDAsaEQsaFMpLFlbQ0koMHg0ZDYpXT0nc291cmNlLW92ZXInO2ZvcihsZXQgYzE9MHgwO2MxPDB4ODtjMSsrKVlbQ0koMHg0MjcpXShyaixNYXRoW0NJKDB4NGJmKV0oYzEqTWF0aFsnUEknXS8weDQpKmMwLE1hdGhbQ0koMHg2NjcpXShjMSpNYXRoWydQSSddLzB4NCkqYzApO1lbJ2dsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiddPUNJKDB4NGY1KSxZW0NJKDB4NDY2KV09JyMxMTEnLFlbQ0koMHgyNzcpXSgweDAsMHgwLGhELGhTKSx1W0NJKDB4M2QxKV0oMHgxLDB4MCwweDAsMHgxLDB4MCwweDApLHVbQ0koMHg0ZDYpXT0nc291cmNlLWluJyx1W0NJKDB4NDY2KV09Q0koMHg0NmEpLHVbQ0koMHgyNzcpXSgweDAsMHgwLGhELGhTKSxyMltDSSgweDI5MyldKCkscjJbQ0koMHgzZDEpXSgweDEsMHgwLDB4MCwweDEsMHgwLDB4MCkscjJbQ0koMHg0MjcpXShySCwweDAsMHgwKSxyMltDSSgweDQyNyldKHJqLDB4MCwweDApLHIyW0NJKDB4MzQyKV0oKTt9bGV0IHJKPTB4MSxybj0weDEsclI9MHhhLHJ5PTB4MCxyeD0weDAscmc9MHgxLHJ0PTB4MCxyRD0weDAsclM9bnVsbCxoMD1udWxsLGgxPSFbXTtjb25zdCBoMj11PT5yeSt1KnJSLGgzPXU9PnJ4K3UqclI7ZnVuY3Rpb24gaDQoKXtjb25zdCBDcj1lSix1PXIwW0NyKDB4NDMyKV0oKTtySj11W0NyKDB4NDBlKV0scm49dVtDcigweDYyNSldfHx1W0NyKDB4NDBlKV0qMC43NTtjb25zdCBZPU1hdGhbQ3IoMHg0M2MpXShkZXZpY2VQaXhlbFJhdGlvfHwweDEsMHgyKTtyMVtDcigweDQwZSldPU1hdGhbJ3JvdW5kJ10ockoqWSkscjFbQ3IoMHg2MjUpXT1NYXRoW0NyKDB4NDcyKV0ocm4qWSkscjJbQ3IoMHgzZDEpXShZLDB4MCwweDAsWSwweDAsMHgwKSxoNSgpO31mdW5jdGlvbiBoNSgpe2NvbnN0IENoPWVKO2lmKElOfHwhSXZbQ2goMHg2NjEpXSYmSUFbQ2goMHg2NjEpXTwweDMpe3JSPU1hdGhbQ2goMHg0M2MpXShySi8oVisweDIpLHJuLyhFKzB4MikpLHJ5PXJKLzB4Mi1WLzB4MipyUixyeD1ybi8weDItRS8weDIqclI7cmV0dXJuO31jb25zdCB1PUl2W0NoKDB4NjYxKV0\/SXZbQ2goMHg0ZjgpXShjNz0+YzdbQ2goMHgzYzQpXVtDaCgweDM3ZildKGM4PT5JRShjNyxjOCkpKTpJQSxZPXVbQ2goMHgzN2YpXShjNz0+YzdbMHgwXSksaEQ9dVtDaCgweDM3ZildKGM3PT5jN1sweDFdKSxoUz1NYXRoW0NoKDB4NDNjKV0oLi4uWSksYzA9TWF0aFtDaCgweDQ1MSldKC4uLlkpLGMxPU1hdGhbQ2goMHg0M2MpXSguLi5oRCksYzI9TWF0aFtDaCgweDQ1MSldKC4uLmhEKSxjMz1NYXRoW0NoKDB4NDUxKV0oYzAtaFMsMHgxMCksYzQ9TWF0aFsnbWF4J10oYzItYzEsMHhjKSxjNT1PW0NoKDB4MzhiKV08MHgyZjg7aWYoYzUpcjBbQ2goMHgzYTYpXVtDaCgweDQ5OSldPVN0cmluZyhNYXRoW0NoKDB4NDUxKV0oMHgxLE1hdGhbQ2goMHg0M2MpXSgxLjUsKGMzKzB4MykvKGM0KzB4MykpKSk7ZWxzZSByMFtDaCgweDNhNildW0NoKDB4NDk5KV09Jyc7Y29uc3QgYzY9YzU\/Mi42OjB4NTtyUj1NYXRoW0NoKDB4NDNjKV0ockovKGMzK2M2KSxybi8oYzQrYzYpKSxyeT1ySi8weDItKGhTK2MwKS8weDIqclIscng9cm4vMHgyLShjMStjMikvMHgyKnJSO31mdW5jdGlvbiBoNigpe2NvbnN0IENjPWVKLHU9SU4sWT1nZXRDb21wdXRlZFN0eWxlKE8pW0NjKDB4MjQzKV07cjJbQ2MoMHg1ZGYpXT1DYygweDI3ZCkscjJbQ2MoMHgzMDQpXT0weDEscjJbQ2MoMHg0OTUpXSgpO2ZvcihsZXQgaFM9MHgwO2hTPD1WO2hTKz0weDIpe3IyW0NjKDB4MjI0KV0oaDIoaFMpLGgzKDB4MCkpLHIyW0NjKDB4NjE1KV0oaDIoaFMpLGgzKEUpKTt9Zm9yKGxldCBjMD0weDA7YzA8PUU7YzArPTB4Mil7cjJbQ2MoMHgyMjQpXShoMigweDApLGgzKGMwKSkscjJbQ2MoMHg2MTUpXShoMihWKSxoMyhjMCkpO31yMlsnc3Ryb2tlJ10oKTtjb25zdCBoRD11W0NjKDB4NDRjKV0mJnVbJ3B0cyddW0NjKDB4NjYxKV0\/Wy4uLnVbQ2MoMHg0NzYpXSx1W0NjKDB4NDRjKV1dOnVbQ2MoMHg0NzYpXTtoRFtDYygweDY2MSldJiYocjJbQ2MoMHg1ZGYpXT1DYygweDVmZSkscjJbQ2MoMHgzMDQpXT0yLjQscjJbQ2MoMHg2NGYpXT1DYygweDQ3MikscjJbQ2MoMHg0OTUpXSgpLGhEW0NjKDB4M2I5KV0oKGMxLGMyKT0+YzI\/cjJbQ2MoMHg2MTUpXShoMihjMVsweDBdKSxoMyhjMVsweDFdKSk6cjJbQ2MoMHgyMjQpXShoMihjMVsweDBdKSxoMyhjMVsweDFdKSkpLHVbJ3B0cyddW0NjKDB4NjYxKV0+PTB4MyYmKHIyW0NjKDB4MjkzKV0oKSxyMltDYygweDIzNCldKFsweDYsMHg2XSkscjJbQ2MoMHg2MTUpXShoMih1W0NjKDB4NDc2KV1bMHgwXVsweDBdKSxoMyh1W0NjKDB4NDc2KV1bMHgwXVsweDFdKSkscjJbJ3Jlc3RvcmUnXSgpKSxyMltDYygweDUyZSldKCkpO3VbQ2MoMHg0NzYpXVsnZm9yRWFjaCddKChjMSxjMik9Pntjb25zdCBDaz1DYztyMltDaygweDQ2NildPWMyPT09MHgwJiZ1W0NrKDB4NDc2KV1bQ2soMHg2NjEpXT49MHgzP0NrKDB4NTkyKTpDaygweDQ2YSkscjJbQ2soMHg1ZGYpXT1DaygweDVmZSkscjJbQ2soMHgzMDQpXT0weDIscjJbQ2soMHg0OTUpXSgpLHIyW0NrKDB4M2U3KV0oaDIoYzFbMHgwXSksaDMoYzFbMHgxXSksYzI9PT0weDAmJnVbQ2soMHg0NzYpXVtDaygweDY2MSldPj0weDM\/MHg4OjB4NiwweDAsMHg3KSxyMltDaygweDM2ZildKCkscjJbJ3N0cm9rZSddKCk7fSk7aWYodVtDYygweDQ0YyldJiZ1W0NjKDB4NDc2KV1bQ2MoMHg2NjEpXSl7Y29uc3QgYzE9dVtDYygweDQ3NildW3VbQ2MoMHg0NzYpXVtDYygweDY2MSldLTB4MV0sYzI9dVsnaG92ZXInXSxjMz1NYXRoW0NjKDB4NDc1KV0oYzJbMHgwXS1jMVsweDBdLGMyWzB4MV0tYzFbMHgxXSk7YzM+PTB4MSYmKHIyWydmaWxsU3R5bGUnXT0nIzExMScscjJbQ2MoMHg1ZDApXT1DYygweDM1ZikrWSxyMltDYygweDI0ZildPUNjKDB4M2M4KSxyMlsndGV4dEJhc2VsaW5lJ109Q2MoMHg1OTkpLHIyW0NjKDB4NThmKV0ocyhjMywweDEpKydceDIwbScsaDIoKGMxWzB4MF0rYzJbMHgwXSkvMHgyKSxoMygoYzFbMHgxXStjMlsweDFdKS8weDIpLTB4NikpO31yMltDYygweDQ2NildPUNjKDB4NjAyKSxyMltDYygweDVkMCldPSc0MDBceDIwMTNweFx4MjAnK1kscjJbQ2MoMHgyNGYpXT1DYygweDNjOCkscjJbQ2MoMHg2MWIpXT1DYygweDVlZikscjJbJ2ZpbGxUZXh0J10oYVtDYygweDFkMSldLHJKLzB4MiwweGUpO31mdW5jdGlvbiBoNygpe2NvbnN0IENpPWVKO3IyW0NpKDB4NWU5KV0oMHgwLDB4MCxySixybik7aWYoSWgpe3IyW0NpKDB4MjkzKV0oKSxyMltDaSgweDFmNildPUk3W0NpKDB4MmQzKV0vMHg2NDtjb25zdCB1PUk3W0NpKDB4NTgxKV0sWT11KkloWyduYXR1cmFsSGVpZ2h0J10vSWhbQ2koMHg0ZjApXTtyMltDaSgweDQyNyldKEloLGgyKFYvMHgyLXUvMHgyKSxoMyhFLzB4Mi1ZLzB4MiksdSpyUixZKnJSKSxyMltDaSgweDM0MildKCk7fWlmKElOKXtoNigpO3JldHVybjt9aWYoSXZbJ2xlbmd0aCddKWZvcihjb25zdCBoRCBvZiBJdil7aWYoIWhEW0NpKDB4MjlhKV0pY29udGludWU7SXMoaEQpLHIyW0NpKDB4MjkzKV0oKSxyMltDaSgweDRhYildKHJ5LHJ4KSxyMltDaSgweDRhYildKGhEWyd0J11bMHgwXSpyUixoRFsndCddWzB4MV0qclIpLHIyW0NpKDB4MWY1KV0oaERbJ2EnXSkscjJbQ2koMHg0YWIpXSgtcnksLXJ4KSxoOChoRFtDaSgweDI5YSldKSxyMltDaSgweDM0MildKCk7fWVsc2V7aWYoSWUpaDgoSWUpO319ZnVuY3Rpb24gaDgoWSl7Y29uc3QgQ049ZUo7cmwoKTtjb25zdCBoRD1VKnJSLGhTPXJSPDB4YyxjMD1JYigpWydsZW5ndGgnXT4weDA7aWYoSWgpcjJbQ04oMHgxZjYpXT0wLjcyO2MwJiYocjJbQ04oMHgyOTMpXSgpLHIyW0NOKDB4NDk1KV0oKSxJQVsnZm9yRWFjaCddKChjOCxjOSk9PmM5P3IyWydsaW5lVG8nXShoMihjOFsweDBdKSxoMyhjOFsweDFdKSk6cjJbJ21vdmVUbyddKGgyKGM4WzB4MF0pLGgzKGM4WzB4MV0pKSkscjJbQ04oMHgzMjEpXSgpLHIyWydmaWxsU3R5bGUnXT1DTigweDQ2YSkscjJbQ04oMHgzNmYpXSgpLHIyW0NOKDB4MzQzKV0oKSk7Zm9yKGxldCBjOD0weDA7Yzg8RjtjOCsrKWZvcihsZXQgYzk9MHgwO2M5PFg7YzkrKyl7Y29uc3QgY0k9YzgqWCtjOSxjcj1ZW0NOKDB4MjhhKV1bY0ldO2lmKGNyPT09Ryljb250aW51ZTtjb25zdCBjaD1yZz49MHgxfHxjcj09PUt8fGNyPT09anx8WVtDTigweDY1ZCldW2NJXTw9cmc7cjJbQ04oMHg0NjYpXT0hY2g\/Q04oMHg0NmEpOmNyPj0weDA\/WVtDTigweDM1NyldW2NyXVsnb2snXT9ySzpDTigweDNiOCk6Y3I9PT1KP3JLOmNyPT09THx8Y3I9PT1LfHxjcj09PW0\/cks6Q04oMHg1NjUpLHIyW0NOKDB4Mjc3KV0oaDIoYzkqVSksaDMoYzgqVSksaEQrMC42LGhEKzAuNik7fWlmKEl1KXtjb25zdCBbY2MsY2tdPUl1LGNOPShjY1sweDBdK2NrWzB4MF0pLzB4Mixjdj0oY2NbMHgxXStja1sweDFdKS8weDIsY3U9STdbJ2NvcnJpZG9yJ10vMHgyO3IyWydmaWxsU3R5bGUnXT1ySyxyMltDTigweDI3NyldKGgyKGNOLTEuMiksaDMoY3YtY3UpLDIuNCpyUiwweDIqY3UqclIpO31pZihjMClyMltDTigweDM0MildKCk7cjJbQ04oMHgxZjYpXT0weDE7Zm9yKGNvbnN0IFtjWSxjTV1vZiBJOFtDTigweDFiYSldKCkpe2NvbnN0IGNxPShjTVsweDJdLWNNWzB4MF0pKnJSLGN6PShjTVsweDNdLWNNWzB4MV0pKnJSO3IyW0NOKDB4MjkzKV0oKSxyMlsnYmVnaW5QYXRoJ10oKSxyMltDTigweDY0YSldKGgyKGNNWzB4MF0pLGgzKGNNWzB4MV0pLGNxLGN6KSxyMltDTigweDM0MyldKCkscjJbQ04oMHg1ZGYpXT1DTigweDY1YSkscjJbQ04oMHgzMDQpXT0weDEscjJbQ04oMHg0OTUpXSgpO2ZvcihsZXQgY1A9Y01bMHgwXS0oY01bMHgzXS1jTVsweDFdKTtjUDxjTVsweDJdO2NQKz0wLjYpe3IyWydtb3ZlVG8nXShoMihjUCksaDMoY01bMHgzXSkpLHIyW0NOKDB4NjE1KV0oaDIoY1ArY01bMHgzXS1jTVsweDFdKSxoMyhjTVsweDFdKSk7fXIyW0NOKDB4NTJlKV0oKSxyMltDTigweDM0MildKCksclMmJnJTWyd0J109PT0nYicmJnJTWydpJ109PT1jWSYmKHIyWydzdHJva2VTdHlsZSddPUNOKDB4MmJkKSxyMltDTigweDMwNCldPTB4MixyMltDTigweDUzNSldKGgyKGNNWzB4MF0pLGgzKGNNWzB4MV0pLGNxLGN6KSk7fWMwJiYocjJbJ3NhdmUnXSgpLHIyW0NOKDB4NDk1KV0oKSxJQVsnZm9yRWFjaCddKChjZixjQik9PmNCP3IyW0NOKDB4NjE1KV0oaDIoY2ZbMHgwXSksaDMoY2ZbMHgxXSkpOnIyW0NOKDB4MjI0KV0oaDIoY2ZbMHgwXSksaDMoY2ZbMHgxXSkpKSxyMltDTigweDMyMSldKCkscjJbQ04oMHgzNDMpXSgpKTtpZihyZz49MHgxJiZyUj49MHg5KXtmb3IoY29uc3QgY2Ygb2YgWVtDTigweDM1NyldKWZvcihjb25zdCBjQiBvZiBjZltDTigweDU1NSldKXtpZihjQlsnayddPT09Q04oMHgyMTQpKWNvbnRpbnVlO2NvbnN0IGNiPWNCWydrJ109PT1DTigweDRjMik\/MC4zOjAuOTtyMltDTigweDVkZildPScjZDJkMmNlJyxyMltDTigweDMwNCldPTAuNSxyMlsnYmVnaW5QYXRoJ10oKTtmb3IoY29uc3QgY2Qgb2ZbY0JbJ2InXSwuLi5jQltDTigweDM4ZCldfHxbXV0pe2ZvcihsZXQgY0M9TWF0aFtDTigweDM5ZildKGNkWzB4MF0vY2IpKmNiO2NDPGNkWzB4Ml07Y0MrPWNiKXtyMlsnbW92ZVRvJ10oaDIoY0MpLGgzKGNkWzB4MV0pKSxyMltDTigweDYxNSldKGgyKGNDKSxoMyhjZFsweDNdKSk7fWZvcihsZXQgY1Q9TWF0aFtDTigweDM5ZildKGNkWzB4MV0vY2IpKmNiO2NUPGNkWzB4M107Y1QrPWNiKXtyMlsnbW92ZVRvJ10oaDIoY2RbMHgwXSksaDMoY1QpKSxyMlsnbGluZVRvJ10oaDIoY2RbMHgyXSksaDMoY1QpKTt9fXIyWydzdHJva2UnXSgpO319clEoKCk9Pntjb25zdCBDdj1DTjtjMCYmKHIyW0N2KDB4MjkzKV0oKSxyMlsnYmVnaW5QYXRoJ10oKSxJQVtDdigweDNiOSldKChjbyxjdyk9PmN3P3IyW0N2KDB4NjE1KV0oaDIoY29bMHgwXSksaDMoY29bMHgxXSkpOnIyW0N2KDB4MjI0KV0oaDIoY29bMHgwXSksaDMoY29bMHgxXSkpKSxyMltDdigweDMyMSldKCkscjJbQ3YoMHgzNDMpXSgpKTtpZihyZz49MHgxKXtyMltDdigweDQ2NildPUN2KDB4MmEzKTtmb3IoY29uc3QgY28gb2YgWVtDdigweDM1NyldKWZvcihjb25zdCBjdyBvZiBjb1tDdigweDU1NSldKXtpZighY3dbJ2MnXXx8IWN3Wyd3dCddKWNvbnRpbnVlO2NvbnN0IFtjYSxjVixjRSxjVV09Y3dbJ2InXSxbY1gsY1csY0YsY0ddPWN3WydiZSddfHxjd1snYiddLFtjTCxjSyxjaixjSF09Y3dbJ3d0J10sY1E9Y2w9Pk1hdGhbQ3YoMHg0NTEpXSgweDIsY2wqclIpO2lmKGNMKXIyW0N2KDB4Mjc3KV0oaDIoY1gpLGgzKGNWKSwoY0YtY1gpKnJSLGNRKGNMKSk7aWYoY2opcjJbQ3YoMHgyNzcpXShoMihjWCksaDMoY1UpLWNRKGNqKSwoY0YtY1gpKnJSLGNRKGNqKSk7aWYoY0gpcjJbJ2ZpbGxSZWN0J10oaDIoY2EpLGgzKGNXKSxjUShjSCksKGNHLWNXKSpyUik7aWYoY0spcjJbQ3YoMHgyNzcpXShoMihjRSktY1EoY0spLGgzKGNXKSxjUShjSyksKGNHLWNXKSpyUik7fX1pZihjMClyMltDdigweDM0MildKCk7fSk7aWYoYzApcjJbQ04oMHgzNDIpXSgpO2lmKHJnPj0weDEmJnJSPj0weDkmJllbQ04oMHg0ODYpXSYmWVtDTigweDQ4NildW0NOKDB4NjYxKV0pe3IyWydzYXZlJ10oKSxyMltDTigweDQ5NSldKCksSUFbQ04oMHgzYjkpXSgoY28sY3cpPT5jdz9yMltDTigweDYxNSldKGgyKGNvWzB4MF0pLGgzKGNvWzB4MV0pKTpyMltDTigweDIyNCldKGgyKGNvWzB4MF0pLGgzKGNvWzB4MV0pKSkscjJbQ04oMHgzMjEpXSgpLHIyW0NOKDB4MzQzKV0oKSxyMltDTigweDVkZildPUNOKDB4NjVhKSxyMltDTigweDMwNCldPTAuNSxyMltDTigweDQ5NSldKCk7Zm9yKGNvbnN0IGNvIG9mIFlbQ04oMHg0ODYpXSl7Y29uc3QgW2N3LGNhLGNWLGNFXT1jb1snZ2InXTtmb3IobGV0IGNVPU1hdGhbJ2NlaWwnXShjdy8wLjYpKjAuNjtjVTxjVjtjVSs9MC42KXtyMltDTigweDIyNCldKGgyKGNVKSxoMyhjYSkpLHIyW0NOKDB4NjE1KV0oaDIoY1UpLGgzKGNFKSk7fWZvcihsZXQgY1g9TWF0aFsnY2VpbCddKGNhLzAuNikqMC42O2NYPGNFO2NYKz0wLjYpe3IyW0NOKDB4MjI0KV0oaDIoY3cpLGgzKGNYKSkscjJbQ04oMHg2MTUpXShoMihjViksaDMoY1gpKTt9fXIyW0NOKDB4NTJlKV0oKSxyMltDTigweDM0MildKCk7fWNvbnN0IGMxPVtdO2Zvcihjb25zdCBjVyBvZiBZW0NOKDB4MzU3KV0pZm9yKGNvbnN0IGNGIG9mIGNXW0NOKDB4NTU1KV0pZm9yKGNvbnN0IGNHIG9mIGNGW0NOKDB4MmYzKV18fFtdKWMxW0NOKDB4MmIzKV0oY0cpO2Zvcihjb25zdCBjTCBvZiBZW0NOKDB4NDg2KV18fFtdKWZvcihjb25zdCBjSyBvZiBjTFtDTigweDJmMyldKWMxWydwdXNoJ10oY0spO2NvbnN0IGMyPWNqPT57Y29uc3QgQ3U9Q047cjJbQ3UoMHg0OTUpXSgpLGNqW0N1KDB4M2I5KV0oKGNILGNRKT0+Y1E\/cjJbQ3UoMHg2MTUpXShoMihjSFsweDBdKSxoMyhjSFsweDFdKSk6cjJbJ21vdmVUbyddKGgyKGNIWzB4MF0pLGgzKGNIWzB4MV0pKSk7aWYoY2pbJ2xlbmd0aCddPjB4MilyMltDdSgweDMyMSldKCk7fTtpZihyZz49MHgxJiZyUj49MHg5KXtmb3IoY29uc3QgY2ogb2YgYzEpY2pbQ04oMHg2NjEpXT4weDImJihjMihjaikscjJbQ04oMHg0NjYpXT1jalsncnVnJ10\/Q04oMHg0NmEpOnJLLHIyW0NOKDB4MzZmKV0oKSk7cjJbQ04oMHg1ZGYpXT1DTigweDU1NCkscjJbQ04oMHgzMDQpXT1NYXRoW0NOKDB4NDUxKV0oMC40NSwwLjAzNSpyUikscjJbQ04oMHgyN2MpXT1DTigweDMwMik7Zm9yKGNvbnN0IGNIIG9mIGMxKXtpZihjSFtDTigweDFlNildKXtyMltDTigweDVkZildPUNOKDB4M2ZkKSxjMihjSCkscjJbQ04oMHg1MmUpXSgpO2NvbnN0IGNRPWNIW0NOKDB4MzdmKV0oY3Q9PmN0WzB4MF0pLGNsPWNIW0NOKDB4MzdmKV0oY3Q9PmN0WzB4MV0pLGNtPU1hdGhbJ21pbiddKC4uLmNRKSxjSj1NYXRoW0NOKDB4NDNjKV0oLi4uY2wpLGNuPU1hdGhbQ04oMHg0NTEpXSguLi5jUSksY1I9TWF0aFtDTigweDQ1MSldKC4uLmNsKSxjZz0hY0hbJ2Z5J107cjJbQ04oMHg1MzUpXShoMihjbSswLjEpLGgzKGNKKzAuMSksKGNuLWNtLTAuMikqclIsKGNSLWNKLTAuMikqclIpLHIyW0NOKDB4NDk1KV0oKTtpZihjZylmb3IobGV0IGN0PWNKKzAuMTI7Y3Q8Y1ItMC4wNjtjdCs9MC4xNCl7cjJbQ04oMHgyMjQpXShoMihjbSksaDMoY3QpKSxyMltDTigweDYxNSldKGgyKGNtLTAuMSksaDMoY3QpKSxyMltDTigweDIyNCldKGgyKGNuKSxoMyhjdCkpLHIyW0NOKDB4NjE1KV0oaDIoY24rMC4xKSxoMyhjdCkpO31lbHNlIGZvcihsZXQgY0Q9Y20rMC4xMjtjRDxjbi0wLjA2O2NEKz0wLjE0KXtyMltDTigweDIyNCldKGgyKGNEKSxoMyhjSikpLHIyW0NOKDB4NjE1KV0oaDIoY0QpLGgzKGNKLTAuMSkpLHIyW0NOKDB4MjI0KV0oaDIoY0QpLGgzKGNSKSkscjJbQ04oMHg2MTUpXShoMihjRCksaDMoY1IrMC4xKSk7fXIyW0NOKDB4NTJlKV0oKSxyMltDTigweDVkZildPScjNzc3Jztjb250aW51ZTt9YzIoY0gpLHIyWydzdHJva2UnXSgpO319clEoKCk9Pntjb25zdCBDTT1DTjtmb3IoY29uc3QgY1Mgb2YgWVsnd2FsbHMnXSl7aWYocmc8MHgxJiZjU1sweDRdPT09MHgxKWNvbnRpbnVlO2lmKGNTWzB4NF09PT0weDImJklkKChjU1sweDBdK2NTWzB4Ml0pLzB4MiwoY1NbMHgxXStjU1sweDNdKS8weDIpKWNvbnRpbnVlO2NvbnN0IGswPWNTWzB4MV09PT1jU1sweDNdLGsxPWswP2NTWzB4Ml0tY1NbMHgwXTpjU1sweDNdLWNTWzB4MV07aWYoY1NbMHg0XT09PTB4Mil7Y29uc3QgazI9KGNTWzB4MF0rY1NbMHgyXSkvMHgyLGszPShjU1sweDFdK2NTWzB4M10pLzB4MixrND0oazcsazgpPT57Y29uc3QgQ1k9dixrOT1NYXRoW0NZKDB4NTNiKV0oazcvVSksa0k9TWF0aFtDWSgweDUzYildKGs4L1UpO3JldHVybiBrOT49MHgwJiZrST49MHgwJiZrOTxYJiZrSTxGJiZZWydvd24nXVtrSSpYK2s5XSE9PUc7fSxrNT1rMD9rNChrMixrMyswLjI1KT8weDE6LTB4MTprNChrMiswLjI1LGszKT8weDE6LTB4MSxrNj1DW0NNKDB4MmY2KV0qclI7cjJbQ00oMHg0NjYpXT1DTSgweDQzZik7aWYoazApcjJbQ00oMHgyNzcpXShoMihjU1sweDBdKSxrNT4weDA\/aDMoY1NbMHgxXSk6aDMoY1NbMHgxXSktazYsazEqclIsazYpO2Vsc2UgcjJbQ00oMHgyNzcpXShrNT4weDA\/aDIoY1NbMHgwXSk6aDIoY1NbMHgwXSktazYsaDMoY1NbMHgxXSksazYsazEqclIpO31lbHNle2NvbnN0IGs3PU1hdGhbQ00oMHg0NTEpXSgyLjIsQ1tDTSgweDJkMildKnJSKTtyMltDTSgweDQ2NildPWNTWzB4NF09PT0weDM\/Q00oMHg1ZGEpOicjM2EzODM0JztpZihrMClyMltDTSgweDI3NyldKGgyKGNTWzB4MF0pLGgzKGNTWzB4MV0pLWs3LzB4MixrMSpyUixrNyk7ZWxzZSByMltDTSgweDI3NyldKGgyKGNTWzB4MF0pLWs3LzB4MixoMyhjU1sweDFdKSxrNyxrMSpyUik7fX19KTtpZihyZz49MHgxJiZyUj49MHg5JiZZW0NOKDB4NWRjKV0pe3IyW0NOKDB4NDY2KV09cks7Zm9yKGNvbnN0IGNTIG9mIFlbQ04oMHg1ZGMpXSljU1snbGVuZ3RoJ10+MHgyJiYoYzIoY1MpLHIyWydmaWxsJ10oKSk7cjJbQ04oMHg1ZGYpXT0nIzc3NycscjJbQ04oMHgzMDQpXT1NYXRoWydtYXgnXSgwLjUsMC4wMzUqclIpLHIyW0NOKDB4MjdjKV09Q04oMHgzMDIpO2Zvcihjb25zdCBrMCBvZiBZWydjb21tb25GdXJuJ10pe2MyKGswKSxyMltDTigweDUyZSldKCk7fX1yUSgoKT0+e2NvbnN0IENxPUNOO2lmKEl1KXtjb25zdCBbazEsazJdPUl1LGszPShrMVsweDBdK2syWzB4MF0pLzB4MixrND0oazFbMHgxXStrMlsweDFdKS8weDIsazU9TWF0aFtDcSgweDQ3NSldKGsyWzB4MF0tazFbMHgwXSxrMlsweDFdLWsxWzB4MV0pLGs2PShrMlsweDBdLWsxWzB4MF0pL2s1LGs3PShrMlsweDFdLWsxWzB4MV0pL2s1LGs4PUk3W0NxKDB4NTkwKV0vMHgyKms1L01hdGhbQ3EoMHgzYWQpXShrMlsweDFdLWsxWzB4MV0pO3IyW0NxKDB4NWRmKV09Q3EoMHg1ZmUpLHIyW0NxKDB4MjdjKV09Q3EoMHgzMDIpLHIyWydsaW5lV2lkdGgnXT1NYXRoWydtYXgnXSgxLjQsMC4xOCpyUik7Zm9yKGNvbnN0IFtrOSxrSV1vZltbazEsW2szLWs2Kms4LGs0LWs3Kms4XV0sW2syLFtrMytrNiprOCxrNCtrNyprOF1dXSl7aWYoSU0mJklNWydvcGVuU2lkZSddJiZJTVsnb3BlblNpZGUnXVtrOVsweDFdPGs0P0NxKDB4NWVmKTpDcSgweDRhYSldKWNvbnRpbnVlO3IyW0NxKDB4NDk1KV0oKSxyMltDcSgweDIyNCldKGgyKGs5WzB4MF0pLGgzKGs5WzB4MV0pKSxyMltDcSgweDYxNSldKGgyKGtJWzB4MF0pLGgzKGtJWzB4MV0pKSxyMltDcSgweDUyZSldKCk7fX19KSxyUSgoKT0+e2NvbnN0IEN6PUNOO2Zvcihjb25zdCBbazEsazJdb2YgSW8oKSl7cjJbQ3ooMHg1ZGYpXT1DeigweDVmZSkscjJbQ3ooMHgyN2MpXT0nYnV0dCcscjJbJ2xpbmVXaWR0aCddPU1hdGhbQ3ooMHg0NTEpXSgyLjYsMC4zMipyUikscjJbQ3ooMHg0OTUpXSgpLHIyWydtb3ZlVG8nXShoMihrMVsweDBdKSxoMyhrMVsweDFdKSkscjJbQ3ooMHg2MTUpXShoMihrMlsweDBdKSxoMyhrMlsweDFdKSkscjJbJ3N0cm9rZSddKCk7fX0pO2NvbnN0IGMzPShrMSxrMixrMyxrNCk9Pntjb25zdCBDUD1DTjtyMltDUCgweDVkZildPWszLHIyW0NQKDB4MzA0KV09azIscjJbQ1AoMHgyN2MpXT0nYnV0dCc7Zm9yKGNvbnN0IGs1IG9mIGsxKXtyMltDUCgweDQ5NSldKCksazVbQ1AoMHgzYjkpXSgoazYsazcpPT5rNz9yMltDUCgweDYxNSldKGgyKGs2WzB4MF0pLGgzKGs2WzB4MV0pKTpyMltDUCgweDIyNCldKGgyKGs2WzB4MF0pLGgzKGs2WzB4MV0pKSk7aWYoazR8fGs1W0NQKDB4NjYxKV0+MHgyJiZNYXRoW0NQKDB4NDc1KV0oazVbMHgwXVsweDBdLWs1W2s1W0NQKDB4NjYxKV0tMHgxXVsweDBdLGs1WzB4MF1bMHgxXS1rNVtrNVtDUCgweDY2MSldLTB4MV1bMHgxXSk8MC4zKXIyW0NQKDB4MzIxKV0oKTtyMltDUCgweDUyZSldKCk7fX07Zm9yKGNvbnN0IGsxIG9mIEQoKSl7Y29uc3QgazI9STIoazEpO2MzKGsyW0NOKDB4NDA4KV0sMC42LENOKDB4MmUwKSksYzMoazJbJ2JvbGQnXSxNYXRoW0NOKDB4NDUxKV0oMS40LDAuMTQqclIpLENOKDB4NWZlKSkscjJbJ3N0cm9rZVN0eWxlJ109Q04oMHg1ZmUpLHIyW0NOKDB4MzA0KV09TWF0aFsnbWF4J10oMHgyLDAuMjQqclIpO31jb25zdCBjND0oazMsazQpPT5rMzwweDB8fGs0PDB4MHx8azM+PVh8fGs0Pj1GfHxZW0NOKDB4MjhhKV1bazQqWCtrM109PT1HO1lbQ04oMHgzNDApXVsnZm9yRWFjaCddKChrMyxrNCk9Pntjb25zdCBDcD1DTixrNT1bW2szWyd4MCddLGszWyd5MCddLGszWyd4MSddLGszWyd5MCddLGtjPT5jNChrYyxrM1sneTAnXS0weDEpLCdoJ10sW2szWyd4MCddLGszWyd5MSddLGszWyd4MSddLGszWyd5MSddLGtjPT5jNChrYyxrM1sneTEnXSksJ2gnXSxbazNbJ3gwJ10sazNbJ3kwJ10sazNbJ3gwJ10sazNbJ3kxJ10sa2M9PmM0KGszWyd4MCddLTB4MSxrYyksJ3YnXSxbazNbJ3gxJ10sazNbJ3kwJ10sazNbJ3gxJ10sazNbJ3kxJ10sa2M9PmM0KGszWyd4MSddLGtjKSwndiddXTtyUSgoKT0+e2NvbnN0IENmPXY7cjJbQ2YoMHg1ZGYpXT1DZigweDVkYSkscjJbJ2xpbmVXaWR0aCddPU1hdGhbQ2YoMHg0NTEpXSgxLjYsQ1tDZigweDJkMildKnJSKSxyMltDZigweDI3YyldPUNmKDB4MzAyKTtmb3IoY29uc3QgW2tjLGtrLGtpLGtOLGt2LGt1XW9mIGs1KXtjb25zdCBrWT1rdT09PSdoJz9rYzprayxrTT1rdT09PSdoJz9raTprTixrcT0oa1Asa2YpPT57Y29uc3QgQ0E9Q2Y7cjJbQ0EoMHg0OTUpXSgpLGt1PT09J2gnPyhyMlsnbW92ZVRvJ10oaDIoa1AqVSksaDMoa2sqVSkpLHIyWydsaW5lVG8nXShoMihrZipVKSxoMyhraypVKSkpOihyMltDQSgweDIyNCldKGgyKGtjKlUpLGgzKGtQKlUpKSxyMltDQSgweDYxNSldKGgyKGtjKlUpLGgzKGtmKlUpKSkscjJbQ0EoMHg1MmUpXSgpO307bGV0IGt6PW51bGw7Zm9yKGxldCBrUD1rWTtrUDxrTTtrUCsrKXtpZihrdihrUCkpa3ohPT1udWxsJiYoa3Eoa3osa1ApLGt6PW51bGwpO2Vsc2V7aWYoa3o9PT1udWxsKWt6PWtQO319aWYoa3ohPT1udWxsKWtxKGt6LGtNKTt9fSk7Y29uc3QgazY9RCgpW2s0XTtpZighazZ8fHJnPDB4MXx8clI8MHg5KXJldHVybjtjb25zdCBrNz1NYXRoW0NwKDB4NDcyKV0oazZbMHgwXS9VKSxrOD1NYXRoW0NwKDB4NDcyKV0oazZbMHgxXS9VKSxrOT1NYXRoW0NwKDB4NDcyKV0oKGs2WzB4MF0rUyhrNikpL1UpLGtJPU1hdGhbQ3AoMHg0NzIpXSgoazZbMHgxXStJMChrNikpL1UpLGtyPVtdO2lmKGs3LWszWyd4MCddPj0weDIpa3JbQ3AoMHgyYjMpXShbazNbJ3gwJ10sazNbJ3kwJ10sazcsazNbJ3kxJ11dKTtpZihrM1sneDEnXS1rOT49MHgyKWtyWydwdXNoJ10oW2s5LGszWyd5MCddLGszWyd4MSddLGszWyd5MSddXSk7aWYoazgtazNbJ3kwJ10+PTB4MilrcltDcCgweDJiMyldKFtNYXRoW0NwKDB4NDUxKV0oazNbJ3gwJ10sazcpLGszWyd5MCddLE1hdGhbJ21pbiddKGszWyd4MSddLGs5KSxrOF0pO2lmKGszWyd5MSddLWtJPj0weDIpa3JbJ3B1c2gnXShbTWF0aFtDcCgweDQ1MSldKGszWyd4MCddLGs3KSxrSSxNYXRoW0NwKDB4NDNjKV0oazNbJ3gxJ10sazkpLGszWyd5MSddXSk7Zm9yKGNvbnN0IFtrYyxrayxraSxrTl1vZiBrcil7Y29uc3Qga3Y9KGtpLWtjKSpVKnJSLGt1PShrTi1raykqVSpyUixrWT1DW0NwKDB4MmY2KV0qclIsa009YzQoa2MtMHgxLGtrKT9rWToweDEsa3E9YzQoa2ksa2spP2tZOjB4MSxrej1jNChrYyxray0weDEpP2tZOjB4MSxrUD1jNChrYyxrTik\/a1k6MHgxO3IyW0NwKDB4NDY2KV09cksscjJbQ3AoMHgyNzcpXShoMihrYypVKStrTSxoMyhraypVKStreixrdi1rTS1rcSxrdS1rei1rUCkscjJbQ3AoMHg0NjYpXT1DcCgweDI0MSkscjJbQ3AoMHg1ZDApXT1NYXRoW0NwKDB4NDUxKV0oMHg3LE1hdGhbQ3AoMHg0M2MpXSgweGIsMC41KnJSKSkrQ3AoMHg1MzYpLHIyWyd0ZXh0QWxpZ24nXT1DcCgweDNjOCkscjJbQ3AoMHg2MWIpXT0nbWlkZGxlJyxyMltDcCgweDU4ZildKGFbQ3AoMHg1NDQpXSxoMigoa2Mra2kpLzB4MipVKSxoMygoa2sra04pLzB4MipVKSk7fX0pO2lmKHJnPj0weDEpe3JRKCgpPT57Y29uc3QgQ1o9Q047cjJbJ3N0cm9rZVN0eWxlJ109Q1ooMHg1ZmUpLHIyW0NaKDB4MzA0KV09TWF0aFsnbWF4J10oMHgyLDAuMTEqclIpLHIyW0NaKDB4MjdjKV09J2J1dHQnO2Zvcihjb25zdCBrNCBvZiBZW0NaKDB4MzU3KV0pZm9yKGNvbnN0IGs1IG9mIGs0W0NaKDB4NWNkKV0pe3IyW0NaKDB4NDk1KV0oKSxyMltDWigweDIyNCldKGgyKGs1WzB4MF1bMHgwXSksaDMoazVbMHgwXVsweDFdKSkscjJbQ1ooMHg2MTUpXShoMihrNVsweDFdWzB4MF0pLGgzKGs1WzB4MV1bMHgxXSkpLHIyW0NaKDB4NTJlKV0oKTt9fSkscjJbQ04oMHg0NjYpXT1DTigweDVmZSk7Y29uc3QgazM9TWF0aFtDTigweDQ1MSldKDB4NCwwLjMyKnJSKTtyMlsnc3Ryb2tlU3R5bGUnXT1DTigweDM4ZikscjJbQ04oMHgzMDQpXT0xLjQ7Zm9yKGNvbnN0IGs0IG9mIFlbQ04oMHgzNTcpXSlpZihrNFtDTigweDMyZildKXtjb25zdCBrNT1rNFsndyddLzB4MixrNj1rNFsnZCddLzB4MjtyMltDTigweDQ5NSldKCkscjJbQ04oMHgyMjQpXShoMihrNFsnY3gnXS1rNSksaDMoazRbJ2N5J10tazYpKSxyMltDTigweDYxNSldKGgyKGs0WydjeCddK2s1KSxoMyhrNFsnY3knXStrNikpLHIyW0NOKDB4MjI0KV0oaDIoazRbJ2N4J10razUpLGgzKGs0WydjeSddLWs2KSkscjJbQ04oMHg2MTUpXShoMihrNFsnY3gnXS1rNSksaDMoazRbJ2N5J10razYpKSxyMltDTigweDUyZSldKCk7fX1ybSgpO2NvbnN0IGM1PShrNyxrOCxrOSxrSSk9Pntjb25zdCBDTz1DTjtyMltDTygweDVkZildPWs5LHIyW0NPKDB4MzA0KV09a0kscjJbQ08oMHg0OTUpXSgpLHIyW0NPKDB4MjI0KV0oaDIoazdbMHgwXSksaDMoazdbMHgxXSkpLHIyW0NPKDB4NjE1KV0oaDIoazhbMHgwXSksaDMoazhbMHgxXSkpLHIyW0NPKDB4NTJlKV0oKTt9O2lmKHJnPj0weDEpe3IyW0NOKDB4MjdjKV09Q04oMHgzMDIpO2NvbnN0IGs3PWs4PT57Y29uc3QgQ2U9Q04sazk9W2s4W0NlKDB4MjlmKV1bMHgxXVsweDBdLWs4W0NlKDB4MjlmKV1bMHgwXVsweDBdLGs4W0NlKDB4MjlmKV1bMHgxXVsweDFdLWs4W0NlKDB4MjlmKV1bMHgwXVsweDFdXTtjNShrOFsnZ2FwJ11bMHgwXSxrOFtDZSgweDI5ZildWzB4MV0sQ2UoMHg0NmEpLE1hdGhbQ2UoMHg0NTEpXSgzLjQsMC40MipyUikpO2NvbnN0IGtJPU1hdGhbQ2UoMHg0NzUpXShrOVsweDBdLGs5WzB4MV0pfHwweDEsa3I9KGs4W0NlKDB4MmQyKV0\/Q1tDZSgweDJkMildOkNbJ2lubmVyJ10pLzB4MiswLjAxLGtjPS1rOVsweDFdL2tJKmtyLGtrPWs5WzB4MF0va0kqa3I7Zm9yKGNvbnN0IGtpIG9mIGs4WydnYXAnXSljNShba2lbMHgwXS1rYyxraVsweDFdLWtrXSxba2lbMHgwXStrYyxraVsweDFdK2trXSwnIzMzMycsTWF0aFsnbWF4J10oMHgxLDAuMDYqclIpKTtyZXR1cm4gazhbQ2UoMHg0MzgpXSYmKGM1KGs4WydsZWFmJ11bMHgwXSxrOFtDZSgweDQzOCldWzB4MV0sQ2UoMHg1NTQpLE1hdGhbQ2UoMHg0NTEpXSgxLjMsMC4wOSpyUikpLHIyWydzdHJva2VTdHlsZSddPScjNzc3JyxyMltDZSgweDMwNCldPTAuNyxyMltDZSgweDQ5NSldKCksazhbJ2FyYyddWydmb3JFYWNoJ10oKGtOLGt2KT0+a3Y\/cjJbQ2UoMHg2MTUpXShoMihrTlsweDBdKSxoMyhrTlsweDFdKSk6cjJbQ2UoMHgyMjQpXShoMihrTlsweDBdKSxoMyhrTlsweDFdKSkpLHIyW0NlKDB4NTJlKV0oKSksazk7fTtmb3IoY29uc3Qgazggb2YgWVtDTigweDJhNyldKWs3KHsuLi5rOCwnc2VwJzohIVtdfSk7Zm9yKGNvbnN0IGs5IG9mIFlbQ04oMHgzNTcpXSl7Zm9yKGNvbnN0IGtJIG9mIGs5W0NOKDB4Mzg5KV0pazcoa0kpO2lmKGs5W0NOKDB4NGI5KV0pe2NvbnN0IGtyPWs5Wydkb29yJ10sa2M9KGtyWyd4J10rMC41K2tyWydkeCddKjAuNSkqVSxraz0oa3JbJ3knXSswLjUra3JbJ2R5J10qMC41KSpVLGtpPWtyWydkeSddPzB4MToweDAsa049a3JbJ2R4J10\/MHgxOjB4MCxrdj0wLjUsa3U9W2tjLWtpKmt2LGtrLWtOKmt2XSxrWT1ba2Mra2kqa3Ysa2sra04qa3ZdLGtNPVtrdVsweDBdLWtyWydkeCddKjB4MSxrdVsweDFdLWtyWydkeSddKjB4MV0sa3E9W107Zm9yKGxldCBrej0weDA7a3o8PTB4ODtreisrKXtjb25zdCBrUD1rei8weDgqTWF0aFsnUEknXS8weDI7a3FbJ3B1c2gnXShba3VbMHgwXSsoLWtyWydkeCddKk1hdGhbQ04oMHg0YmYpXShrUCkra2kqTWF0aFtDTigweDY2NyldKGtQKSkqMHgxLGt1WzB4MV0rKC1rclsnZHknXSpNYXRoW0NOKDB4NGJmKV0oa1ApK2tOKk1hdGhbQ04oMHg2NjcpXShrUCkpKjB4MV0pO31rNyh7J2dhcCc6W2t1LGtZXSwnbGVhZic6W2t1LGtNXSwnYXJjJzprcSwnc2VwJzohIVtdfSk7fX19aWYocmc+PTB4MSl7Y29uc3Qga2Y9Q1snb3V0J10vMHgyLTAuMDI7Zm9yKGNvbnN0IGtBIG9mIFlbQ04oMHg1NTcpXSl7Y29uc3Qga3A9a0FbMHgwXT09PWtBWzB4Ml0sa1o9KGtBWzB4MF0ra0FbMHgyXSkvMHgyLGtPPShrQVsweDFdK2tBWzB4M10pLzB4MixrZT0oa0Usa1UpPT57Y29uc3QgQ0I9Q04sa1g9TWF0aFtDQigweDUzYildKGtFL1UpLGtXPU1hdGhbJ2Zsb29yJ10oa1UvVSk7cmV0dXJuIGtYPj0weDAmJmtXPj0weDAmJmtYPFgmJmtXPEYmJllbQ0IoMHgyOGEpXVtrVypYK2tYXSE9PUc7fSxrQj1DW0NOKDB4MmY2KV0vMHgyLGtiPWtwP2tlKGtaKzAuMjUsa08pP2tCOi1rQjoweDAsa2Q9a3A\/MHgwOmtlKGtaLGtPKzAuMjUpP2tCOi1rQixrQz1ba0FbMHgwXStrYixrQVsweDFdK2tkLGtBWzB4Ml0ra2Isa0FbMHgzXStrZF0sa1Q9a3A\/MHgxOjB4MCxrbz1rcD8weDA6MHgxLGthPVtrQ1sweDBdLGtDWzB4MV1dLGtzPVtrQ1sweDJdLGtDWzB4M11dO2M1KGthLGtzLCcjZmZmJyxNYXRoW0NOKDB4NDUxKV0oMi40LChDW0NOKDB4MmY2KV0rMC4wOCkqclIpKTtjb25zdCBrVj0oa0Usa1UpPT5ba0VbMHgwXStrVCprVSxrRVsweDFdK2tvKmtVXTtjNShrVihrYSwta2YpLGtWKGtzLC1rZiksQ04oMHg1ZmUpLE1hdGhbQ04oMHg0NTEpXSgwLjcsMC4wMypyUikpLGM1KGtWKGthLGtmKSxrVihrcyxrZiksQ04oMHg1ZmUpLE1hdGhbJ21heCddKDAuNywwLjAzKnJSKSksYzUoa2Esa3MsQ04oMHg1ZmUpLE1hdGhbQ04oMHg0NTEpXSgwLjYsMC4wMjUqclIpKSxjNShrVihrYSwta2YpLGtWKGthLGtmKSwnIzMzMycsTWF0aFtDTigweDQ1MSldKDAuOCwwLjA0KnJSKSksYzUoa1Yoa3MsLWtmKSxrVihrcyxrZiksQ04oMHg1ZmUpLE1hdGhbQ04oMHg0NTEpXSgwLjgsMC4wNCpyUikpO319cjJbQ04oMHgyNGYpXT1DTigweDNjOCkscjJbQ04oMHg2MWIpXT0nbWlkZGxlJztjb25zdCBjNj1nZXRDb21wdXRlZFN0eWxlKE8pW0NOKDB4MjQzKV07aWYocmc+PTAuOClmb3IoY29uc3Qga0Ugb2YgWVtDTigweDM1NyldKXtjb25zdCBba1Usa1hdPWtFWydscCddfHxba0VbJ2N4J10sa0VbJ2N5J11dLGtXPU1hdGhbQ04oMHg0NzUpXShrVS1rRVtDTigweDNjNSldWyd4J10sa1gta0VbQ04oMHgzYzUpXVsneSddKTwxLjU\/KGtFW0NOKDB4M2M1KV1bJ3knXT49a1g\/LTEuMjoxLjIpKnJSOjB4MCxrRj1oUz8nJzphWyd0Jysoa0VbJ2xhYiddfHxrRVsndCddKV0rQ04oMHgzMGUpK3Moa0VbJ25ldCddKStDTigweDNkYyk7cjJbQ04oMHg1ZDApXT0nNTAwXHgyMCcrTWF0aFtDTigweDQ1MSldKGhTPzB4OToweGEsMC41NipyUikrQ04oMHg1MmQpK2M2O2NvbnN0IGtHPXIyWydtZWFzdXJlVGV4dCddKGtFWydpZCddKVtDTigweDQwZSldO3IyW0NOKDB4NWQwKV09Q04oMHg2NTQpK01hdGhbQ04oMHg0NTEpXSgweDksMC40NCpyUikrQ04oMHg1MmQpK2M2O2NvbnN0IGtMPWhTPzB4MDpyMlsnbWVhc3VyZVRleHQnXShrRilbQ04oMHg0MGUpXSxrSz1NYXRoW0NOKDB4NDUxKV0oa0csa0wpKzB4OCxraj1oUz8wLjcqclIrMHg0OjEuNSpyUisweDQ7cjJbJ2ZpbGxTdHlsZSddPXJTJiZyU1sndCddPT09J3InJiZyU1snciddPT09a0U\/Q04oMHg2MTIpOkNOKDB4NWRlKSxyMltDTigweDI3NyldKGgyKGtVKS1rSy8weDIsaDMoa1gpK2tXLWtqLzB4MixrSyxraikscjJbQ04oMHg0NjYpXT1DTigweDY3NikscjJbQ04oMHg1ZGYpXT0ncmdiYSgyNTUsMjU1LDI1NSwuOTIpJyxyMltDTigweDMwNCldPTB4NCxyMlsnbGluZUpvaW4nXT0ncm91bmQnLHIyW0NOKDB4NWQwKV09Q04oMHgzZWIpK01hdGhbJ21heCddKGhTPzB4OToweGEsMC41NipyUikrJ3B4XHgyMCcrYzYscjJbQ04oMHgzOGUpXShrRVsnaWQnXSxoMihrVSksaDMoa1gpK2tXLShoUz8weDA6MC40MipyUikpLHIyW0NOKDB4NThmKV0oa0VbJ2lkJ10saDIoa1UpLGgzKGtYKStrVy0oaFM\/MHgwOjAuNDIqclIpKSwhaFMmJihyMlsnZm9udCddPUNOKDB4NjU0KStNYXRoWydtYXgnXSgweDksMC40NCpyUikrQ04oMHg1MmQpK2M2LHIyW0NOKDB4MzhlKV0oa0YsaDIoa1UpLGgzKGtYKStrVyswLjQyKnJSKSxyMltDTigweDU4ZildKGtGLGgyKGtVKSxoMyhrWCkra1crMC40MipyUikpO31pZihyZz49MHgxKWZvcihjb25zdCBrSCBvZiBZW0NOKDB4MWJhKV0pe2NvbnN0IGtRPWtIWydkJ10mJmtIWydkJ11bJ2dhcCddLGtsPWtRP3sneCc6KGtRWzB4MF1bMHgwXStrUVsweDFdWzB4MF0pLzB4MiwneSc6KGtRWzB4MF1bMHgxXStrUVsweDFdWzB4MV0pLzB4Mn06a0gsa209a0hbJ254J118fDB4MCxrSj1rSFsnbnknXXx8MHgwLGtuPS1rSixrUj1rbSxreT1NYXRoW0NOKDB4NDUxKV0oMC43LDB4OS9yUikqKGtIW0NOKDB4NjYwKV0\/MHgxOjAuNiksa3g9a3kqMC41LGtnPUNbQ04oMHgyZjYpXS8weDIrMC4wMjtyMlsnZmlsbFN0eWxlJ109Q04oMHg2NzYpLHIyW0NOKDB4NDk1KV0oKSxyMltDTigweDIyNCldKGgyKGtsWyd4J10ra20qa2cpLGgzKGtsWyd5J10ra0oqa2cpKSxyMlsnbGluZVRvJ10oaDIoa2xbJ3gnXStrbipreCtrbSooa2cra3kpKSxoMyhrbFsneSddK2tSKmt4K2tKKihrZytreSkpKSxyMltDTigweDYxNSldKGgyKGtsWyd4J10ta24qa3gra20qKGtnK2t5KSksaDMoa2xbJ3knXS1rUipreCtrSiooa2cra3kpKSkscjJbQ04oMHgzMjEpXSgpLHIyW0NOKDB4MzZmKV0oKTt9aWYocmc+PTB4MSYmSXEmJllbQ04oMHg0ODYpXSl7cjJbJ2xpbmVDYXAnXT0ncm91bmQnO2Zvcihjb25zdCBrdCBvZiBZW0NOKDB4NDg2KV0pe2NvbnN0IGtEPWt0W0NOKDB4NWE1KV0\/JyMzNTUwZTAnOicjYzgzMjFmJyxrUz1bKGt0WydiJ11bMHgwXStrdFsnYiddWzB4Ml0pLzB4Miwoa3RbJ2InXVsweDFdK2t0WydiJ11bMHgzXSkvMHgyXTtyMltDTigweDVkZildPXIyW0NOKDB4NDY2KV09a0QscjJbQ04oMHgzMDQpXT0xLjIscjJbQ04oMHg0OTUpXSgpLHIyW0NOKDB4MjI0KV0oaDIoa3RbQ04oMHg0NjgpXVsweDBdKSxoMyhrdFtDTigweDQ2OCldWzB4MV0pKSxyMltDTigweDYxNSldKGgyKGtTWzB4MF0pLGgzKGtTWzB4MV0pKTtpZihrdFtDTigweDVhNSldJiZrdFtDTigweDVhNSldW0NOKDB4Mjg3KV0mJklNPT09SXZbMHgwXSl7Y29uc3QgaTA9a3RbQ04oMHg1YTUpXVtDTigweDI4NyldW0NOKDB4MmMzKV1bQ04oMHgyYjUpXShpMT0+aTFbJ2snXT09PUNOKDB4MjNjKSk7aWYoaTApcjJbQ04oMHg2MTUpXShoMihpMFsneCddKSxoMyhpMFsneSddKSk7fXIyWydzdHJva2UnXSgpLHIyW0NOKDB4NDk1KV0oKSxyMltDTigweDNlNyldKGgyKGtTWzB4MF0pLGgzKGtTWzB4MV0pLDB4NSwweDAsMHg3KSxyMlsnZmlsbCddKCkscjJbJ2JlZ2luUGF0aCddKCkscjJbQ04oMHgzZTcpXShoMihrdFtDTigweDQ2OCldWzB4MF0pLGgzKGt0W0NOKDB4NDY4KV1bMHgxXSksMHgyLDB4MCwweDcpLHIyW0NOKDB4MzZmKV0oKTt9fWlmKHJnPj0weDEmJklxKXtyMlsnbGluZUNhcCddPSdyb3VuZCc7Zm9yKGNvbnN0IGkxIG9mIFlbQ04oMHgzNTcpXSl7Y29uc3QgaTI9aTFbQ04oMHgyODcpXTtpZighaTIpY29udGludWU7cjJbQ04oMHg1ZGYpXT1pMltDTigweDMxMyldP0NOKDB4MmJkKTpDTigweDFlYikscjJbQ04oMHgzMDQpXT0xLjI7Zm9yKGNvbnN0IGkzIG9mIGkyW0NOKDB4MjdmKV0pe2NvbnN0IGk0PWkyW0NOKDB4MmMzKV1baTNbMHgwXV0saTU9aTJbQ04oMHgyYzMpXVtpM1sweDFdXTtyMltDTigweDQ5NSldKCkscjJbQ04oMHgyMjQpXShoMihpNFsneCddKSxoMyhpNFsneSddKSkscjJbQ04oMHg2MTUpXShoMihpM1sweDJdKSxoMyhpM1sweDNdKSkscjJbQ04oMHg2MTUpXShoMihpNVsneCddKSxoMyhpNVsneSddKSkscjJbQ04oMHg1MmUpXSgpO31pZihpMltDTigweDQ0OSldPj0weDApe2NvbnN0IGk2PWkyWydub2RlcyddW2kyW0NOKDB4NDQ5KV1dO3IyW0NOKDB4NDk1KV0oKSxyMlsnbW92ZVRvJ10oaDIoaTJbJ2N4J10pLGgzKGkyWydjeSddKSkscjJbQ04oMHg2MTUpXShoMihpNlsneCddKSxoMyhpNlsneSddKSkscjJbQ04oMHg1MmUpXSgpO31yMltDTigweDQ2NildPXIyW0NOKDB4NWRmKV07Zm9yKGNvbnN0IGk3IG9mIGkyWydlZGdlcyddKXtyMlsnYmVnaW5QYXRoJ10oKSxyMltDTigweDNlNyldKGgyKGk3WzB4Ml0pLGgzKGk3WzB4M10pLDB4MiwweDAsMHg3KSxyMltDTigweDM2ZildKCk7fWZvcihjb25zdCBpOCBvZiBpMltDTigweDJjMyldKXtjb25zdCBpOT1pOFsnayddPT09Q04oMHgyM2MpfHxpOFsnayddPT09Q04oMHgyMTQpPzB4NToweDM7cjJbJ2JlZ2luUGF0aCddKCkscjJbQ04oMHgzZTcpXShoMihpOFsneCddKSxoMyhpOFsneSddKSxpOSwweDAsMHg3KSxyMlsnZmlsbCddKCk7fXIyW0NOKDB4NDk1KV0oKSxyMltDTigweDIyNCldKGgyKGkyWydjeCddKS0weDQsaDMoaTJbJ2N5J10pLTB4NCkscjJbQ04oMHg2MTUpXShoMihpMlsnY3gnXSkrMHg0LGgzKGkyWydjeSddKS0weDQpLHIyW0NOKDB4NjE1KV0oaDIoaTJbJ2N4J10pLGgzKGkyWydjeSddKSsweDQpLHIyW0NOKDB4MzIxKV0oKSxyMltDTigweDM2ZildKCk7fX1pZihyZz49MHgxJiZJciYmWVtDTigweDNhOCldKWZvcihjb25zdCBpSSBvZiBZWydyZWdpb25zJ10pe2NvbnN0IGlyPWlJW0NOKDB4NGI5KV07aWYoIWlyKWNvbnRpbnVlO2NvbnN0IGloPVtdLGljPWlJWydncmFwaCddO2lmKGljJiZpY1tDTigweDQ0OSldPj0weDApe2NvbnN0IGlxPW5ldyBNYXAoW1tpY1tDTigweDQ0OSldLG51bGxdXSksaXo9bmV3IE1hcChbW2ljW0NOKDB4NDQ5KV0sMHgwXV0pLGlQPVtpY1tDTigweDQ0OSldXTt3aGlsZShpUFtDTigweDY2MSldKXtjb25zdCBpTz1pUFtDTigweDM4MildKCk7Zm9yKGNvbnN0IGllIG9mIGljWydlZGdlcyddKXtjb25zdCBpQj1pZVsweDBdPT09aU8\/aWVbMHgxXTppZVsweDFdPT09aU8\/aWVbMHgwXTotMHgxO2lmKGlCPDB4MHx8aXFbQ04oMHgzMGIpXShpQikpY29udGludWU7aXFbQ04oMHgyYTUpXShpQixbaU8saWVbMHgyXSxpZVsweDNdXSksaXpbQ04oMHgyYTUpXShpQixpelsnZ2V0J10oaU8pKzB4MSksaVBbQ04oMHgyYjMpXShpQik7fX1sZXQgaUE9aWNbQ04oMHg0NDkpXSxpcD0tMHgxO2Zvcihjb25zdCBbaWIsaWRdb2YgaXopIVtDTigweDRjMiksJ3djJyxDTigweDI0MildW0NOKDB4NTM3KV0oaWNbQ04oMHgyYzMpXVtpYl1bJ2snXSkmJmlkPmlwJiYoaXA9aWQsaUE9aWIpO2xldCBpWj1pQTt3aGlsZShpWiE9PWljWydzdGFydCddJiZpcVsnZ2V0J10oaVopKXtjb25zdCBbaUMsaVQsaW9dPWlxW0NOKDB4Mjk2KV0oaVopO2loW0NOKDB4MmIzKV0oW2ljW0NOKDB4MmMzKV1baVpdWyd4J10saWNbQ04oMHgyYzMpXVtpWl1bJ3knXV0sW2lULGlvXSksaVo9aUM7fWloW0NOKDB4MmIzKV0oW2ljW0NOKDB4MmMzKV1baWNbJ3N0YXJ0J11dWyd4J10saWNbQ04oMHgyYzMpXVtpY1tDTigweDQ0OSldXVsneSddXSxbaWNbJ2N4J10saWNbJ2N5J11dKTt9ZWxzZSBpaFtDTigweDJiMyldKFtpSVsnY3gnXSxpSVsnY3knXV0sWyhpclsneCddKzAuNStpclsnZHgnXSowLjUpKlUsKGlyWyd5J10rMC41K2lyWydkeSddKjAuNSkqVV0pO2xldCBpaz0oaXJbJ3knXStpclsnZHknXSkqWCtpclsneCddK2lyWydkeCddLGlpPTB4MDt3aGlsZShpaz49MHgwJiZZW0NOKDB4M2E4KV1baWtdPjB4MCYmWVtDTigweDNhOCldW2lrXTwweDVmNWUxMDAmJmlpKys8MHgzMjApe2NvbnN0IGl3PWlrJVgsaWE9KGlrLWl3KS9YO2loW0NOKDB4MmIzKV0oWyhpdyswLjUpKlUsKGlhKzAuNSkqVV0pO2xldCBpcz0tMHgxLGlWPVlbQ04oMHgzYTgpXVtpa10saUU9IVtdO2Zvcihjb25zdCBbaVUsaVhdb2ZbWzB4MSwweDBdLFstMHgxLDB4MF0sWzB4MCwweDFdLFsweDAsLTB4MV1dKXtjb25zdCBpVz1pdytpVSxpRj1pYStpWDtpZihpVzwweDB8fGlGPDB4MHx8aVc+PVh8fGlGPj1GKWNvbnRpbnVlO2NvbnN0IGlHPWlGKlgraVc7aWYoWVtDTigweDI4YSldW2lHXT09PUspe2loWydwdXNoJ10oWyhpVyswLjUpKlUsKGlGKzAuNSkqVV0pLGlFPSEhW107YnJlYWs7fVlbQ04oMHgyOGEpXVtpR109PT1MJiZZW0NOKDB4M2E4KV1baUddPGlWJiYoaVY9WVsnd2FsayddW2lHXSxpcz1pRyk7fWlmKGlFKWJyZWFrO2lrPWlzO31jb25zdCBpTj1pSVsnZXJycyddW0NOKDB4NGQwKV0saXY9aU4\/Q04oMHgyYmQpOkNOKDB4NWVkKTtyMltDTigweDI5MyldKCkscjJbQ04oMHg1ZGYpXT1pdixyMltDTigweDMwNCldPTEuNixyMltDTigweDI3YyldPSdyb3VuZCcscjJbQ04oMHg2NGYpXT1DTigweDQ3MikscjJbJ3NldExpbmVEYXNoJ10oWzB4NSwweDNdKSxyMltDTigweDQ5NSldKCksaWhbQ04oMHgzYjkpXSgoaUwsaUspPT5pSz9yMltDTigweDYxNSldKGgyKGlMWzB4MF0pLGgzKGlMWzB4MV0pKTpyMlsnbW92ZVRvJ10oaDIoaUxbMHgwXSksaDMoaUxbMHgxXSkpKSxyMltDTigweDUyZSldKCkscjJbJ3Jlc3RvcmUnXSgpLHIyW0NOKDB4NDY2KV09aXYscjJbQ04oMHg0OTUpXSgpLHIyWydhcmMnXShoMihpaFsweDBdWzB4MF0pLGgzKGloWzB4MF1bMHgxXSksMHgzLDB4MCwweDcpLHIyW0NOKDB4MzZmKV0oKTtjb25zdCBpdT0oaXJbJ3gnXSswLjUraXJbJ2R4J10qMS40KSpVLGlZPShpclsneSddKzAuNStpclsnZHknXSoxLjQpKlUsaU09aUlbQ04oMHgyMzApXT09PW51bGw\/YVtDTigweDVmNyldOnMoaUlbQ04oMHgyMzApXSkrJ1x4MjBtJztyMlsnZm9udCddPUNOKDB4M2ViKStNYXRoW0NOKDB4NDUxKV0oMHg5LDAuNCpyUikrQ04oMHg1MmQpK2M2LHIyW0NOKDB4MjRmKV09Q04oMHgzYzgpLHIyW0NOKDB4NjFiKV09Q04oMHg1OWMpLHIyWydzdHJva2VTdHlsZSddPSdyZ2JhKDI1NSwyNTUsMjU1LC45MiknLHIyWydsaW5lV2lkdGgnXT0weDMscjJbQ04oMHgzOGUpXShpTSxoMihpdSksaDMoaVkpKSxyMltDTigweDU4ZildKGlNLGgyKGl1KSxoMyhpWSkpO31yMltDTigweDQ2NildPUNOKDB4NjAyKSxyMlsnZm9udCddPUNOKDB4NjU0KStNYXRoW0NOKDB4NDUxKV0oMHg5LDAuMzYqclIpKydweFx4MjAnK2M2O2lmKCFoUyl7Y29uc3QgaUw9cjJbQ04oMHgyNGYpXTtyMltDTigweDI0ZildPSdjZW50ZXInO2Zvcihjb25zdCBpSyBvZiBZW0NOKDB4NDZkKV0pcjJbQ04oMHg1OGYpXShhW0NOKDB4MWI5KV0saDIoaUtbMHgwXSksaDMoaUtbMHgxXSkpO3IyW0NOKDB4NDY2KV09Q04oMHgyYTMpO2Zvcihjb25zdCBpaiBvZiBJOClyMltDTigweDU4ZildKGFbQ04oMHg1NTIpXSxoMigoaWpbMHgwXStpalsweDJdKS8weDIpLGgzKChpalsweDFdK2lqWzB4M10pLzB4MikpO3IyW0NOKDB4NDY2KV09Q04oMHg2MDIpO2Zvcihjb25zdCBpSCBvZiBZW0NOKDB4MWJhKV0pe2NvbnN0IGlRPU1hdGhbQ04oMHg0NTEpXSgwLjcsMHg5L3JSKSooaUhbQ04oMHg2NjApXT8weDE6MC42KSxpbD1DW0NOKDB4MmY2KV0vMHgyKzAuMDIsaW09aUhbQ04oMHg2NjApXT9hW0NOKDB4MmFkKV06YVtDTigweDRjMyldO2lIWydueSddPyhyMlsndGV4dEFsaWduJ109Q04oMHg1MjkpLHIyW0NOKDB4NThmKV0oaW0saDIoaUhbJ3gnXStpUSowLjUrMC4xNSksaDMoaUhbJ3knXStpSFsnbnknXSooaWwraVEqMC41KSswLjEyKSkpOihyMltDTigweDI0ZildPUNOKDB4M2M4KSxyMltDTigweDU4ZildKGltLGgyKGlIWyd4J10raUhbJ254J10qKGlsK2lRKjAuNSkpLGgzKGlIWyd5J10taVEqMC41LTAuMjUpKSk7fXIyWyd0ZXh0QWxpZ24nXT1pTDt9aWYoIWhTKXtjb25zdCBpSj1yMltDTigweDI0ZildLGlSPXIyWyd0ZXh0QmFzZWxpbmUnXTtyMlsndGV4dEFsaWduJ109Q04oMHgzYzgpLHIyW0NOKDB4NjFiKV09Q04oMHg1OWMpLHIyW0NOKDB4NWQwKV09Q04oMHg2NTQpK01hdGhbQ04oMHg0NTEpXSgweDgsMC4zKnJSKStDTigweDUyZCkrYzY7Zm9yKGNvbnN0IGl5IG9mIEQoKSlpZihpeVsweDRdKXtjb25zdCBpeD1JMihpeSlbQ04oMHgzYTIpXTtpZihpeClyMlsnZmlsbFRleHQnXShhW0NOKDB4NDliKV0saDIoaXhbMHgwXSksaDMoaXhbMHgxXSkpO31yMltDTigweDI0ZildPWlKLHIyWyd0ZXh0QmFzZWxpbmUnXT1pUjt9Y29uc3QgYzc9clI8MHhhPzB4OToweGE7aWYoIUl2W0NOKDB4NjYxKV0mJiFoMSlJQVtDTigweDNiOSldKChpZyxpdCk9Pntjb25zdCBDYj1DTixpRD1yUyYmclNbJ3QnXT09PSd2JyYmclNbJ2knXT09PWl0LGlTPWlEPzcuNTpjNyowLjU1LE4wPWgyKGlnWzB4MF0pLE4xPWgzKGlnWzB4MV0pO3IyW0NiKDB4NDY2KV09aUQ\/JyMzMjM3M2MnOkNiKDB4NDZhKSxyMltDYigweDVkZildPUNiKDB4NWZlKSxyMlsnbGluZVdpZHRoJ109MS40LHIyW0NiKDB4NDk1KV0oKSxyMlsnbW92ZVRvJ10oTjAsTjEtaVMpLHIyW0NiKDB4NjE1KV0oTjAraVMsTjEpLHIyW0NiKDB4NjE1KV0oTjAsTjEraVMpLHIyW0NiKDB4NjE1KV0oTjAtaVMsTjEpLHIyW0NiKDB4MzIxKV0oKSxyMltDYigweDM2ZildKCkscjJbQ2IoMHg1MmUpXSgpO30pO2lmKElJJiZJSVsncDAnXSl7Y29uc3QgaWc9SUlbJ3AwJ10saXQ9SUlbQ04oMHg0NGMpXXx8aWc7cjJbQ04oMHgyOTMpXSgpLHIyW0NOKDB4MjM0KV0oWzB4NSwweDRdKSxyMltDTigweDVkZildPScjMzMzJyxyMlsnbGluZVdpZHRoJ109MS40LHIyWydzdHJva2VSZWN0J10oaDIoTWF0aFsnbWluJ10oaWdbMHgwXSxpdFsweDBdKSksaDMoTWF0aFtDTigweDQzYyldKGlnWzB4MV0saXRbMHgxXSkpLE1hdGhbQ04oMHgzYWQpXShpdFsweDBdLWlnWzB4MF0pKnJSLE1hdGhbQ04oMHgzYWQpXShpdFsweDFdLWlnWzB4MV0pKnJSKSxyMltDTigweDM0MildKCkscjJbQ04oMHg0NjYpXT1DTigweDU5MikscjJbQ04oMHg0OTUpXSgpLHIyW0NOKDB4M2U3KV0oaDIoaWdbMHgwXSksaDMoaWdbMHgxXSksMHg0LDB4MCwweDcpLHIyW0NOKDB4MzZmKV0oKTt9aWYoclMmJnJTWyd0J109PT0nd24nJiZyU1sndyddKXtjb25zdCBpRD1yU1sndyddO3IyW0NOKDB4NWRmKV09Q04oMHgxZWIpLHIyW0NOKDB4MzA0KV09TWF0aFtDTigweDQ1MSldKDB4MywwLjMqclIpLHIyW0NOKDB4MjdjKV09Q04oMHgzMDIpLHIyW0NOKDB4NDk1KV0oKSxyMltDTigweDIyNCldKGgyKGlEWzB4MF0pLGgzKGlEWzB4MV0pKSxyMltDTigweDYxNSldKGgyKGlEWzB4Ml0pLGgzKGlEWzB4M10pKSxyMltDTigweDUyZSldKCk7fWlmKElNJiZJTVtDTigweDQ0YildJiYhaDEpe2NvbnN0IGlTPXJTJiZyU1sndCddPT09J3cnLE4wPUlNWydlbmQnXSxOMT1pUz8weDg6MHg2O3IyWydmaWxsU3R5bGUnXT1pUz9DTigweDU5Mik6Q04oMHg0NmEpLHIyW0NOKDB4NWRmKV09JyMzMzMnLHIyW0NOKDB4MzA0KV09MHgyLHIyW0NOKDB4NDk1KV0oKSxyMltDTigweDNlNyldKGgyKE4wWzB4MF0pLGgzKE4wWzB4MV0pLE4xKzB4MiwweDAsMHg3KSxyMltDTigweDM2ZildKCkscjJbQ04oMHg1MmUpXSgpLHIyW0NOKDB4MzA0KV09MS40LHIyW0NOKDB4NWRmKV09aVM\/Q04oMHg0NmEpOkNOKDB4NWZlKSxyMlsnYmVnaW5QYXRoJ10oKSxyMltDTigweDIyNCldKGgyKE4wWzB4MF0pLGgzKE4wWzB4MV0pLU4xKzB4MSkscjJbQ04oMHg2MTUpXShoMihOMFsweDBdKSxoMyhOMFsweDFdKStOMS0weDEpLHIyW0NOKDB4MjI0KV0oaDIoTjBbMHgwXSktTjErMHgxLGgzKE4wWzB4MV0pKSxyMltDTigweDYxNSldKGgyKE4wWzB4MF0pK04xLTB4MSxoMyhOMFsweDFdKSkscjJbQ04oMHg1MmUpXSgpO31pZighaDEpZm9yKGNvbnN0IE4yIG9mIElaKXtpZihOMltDTigweDJmZCldKWNvbnRpbnVlO2NvbnN0IE4zPXJTJiZyU1sndCddPT09J3MnJiZyU1sncyddPT09TjI7cjJbJ2ZpbGxTdHlsZSddPU4zPycjMzU1MGUwJzonI2ZmZicscjJbQ04oMHg1ZGYpXT1OMz9DTigweDQ2YSk6Q04oMHg1ZmUpLHIyWydsaW5lV2lkdGgnXT0xLjUscjJbQ04oMHg0OTUpXSgpLHIyW0NOKDB4M2U3KV0oaDIoTjJbJ3gnXSksaDMoTjJbJ3knXSksTjM\/MHg3OnJSPDB4YT8weDQ6MHg1LDB4MCxNYXRoWydQSSddKjB4MikscjJbQ04oMHgzNmYpXSgpLHIyWydzdHJva2UnXSgpO319Y29uc3QgaDk9T1tlSigweDVmMCldKGVKKDB4MzRkKSksaEk9T1tlSigweDVmMCldKCcucHMtcGxhbl9fZ2J0bicpO2hJW2VKKDB4MWZlKV0oZUooMHg0NDYpLCgpPT57Y29uc3QgQ2Q9ZUo7SXE9IUlxLGhJW0NkKDB4MjExKV0oQ2QoMHg2NDgpLElxKSxoNygpO30pO2NvbnN0IGhyPU9bZUooMHg1ZjApXShlSigweDRmMikpO2hyW2VKKDB4MWZlKV0oZUooMHg0NDYpLCgpPT57Y29uc3QgQ0M9ZUo7SXI9IUlyLGhyW0NDKDB4MjExKV0oJ2FyaWEtcHJlc3NlZCcsSXIpLGg3KCk7fSk7Y29uc3QgaGg9T1sncXVlcnlTZWxlY3RvciddKGVKKDB4M2UyKSksaGM9aGhbZUooMHg1ZjApXShlSigweDNlNikpLGhrPWhoW2VKKDB4NWYwKV0oZUooMHg2NzEpKSxoTj1oaFtlSigweDVmMCldKGVKKDB4MmU1KSksaHY9KCk9Pntjb25zdCBDVD1lSjtoY1tDVCgweDIxMSldKENUKDB4NjQ4KSxJN1tDVCgweDI5NCldPT09Q1QoMHg1YzgpKSxoY1tDVCgweDI3OSldPUk3W0NUKDB4Mjk0KV09PT1DVCgweDVjOCk\/YVtDVCgweDJkYSldOmFbQ1QoMHgzY2IpXSxoY1tDVCgweDQyOSldPUlPPT09Q1QoMHg2MzcpO307SWM9aHYsaGhbZUooMHg1ZjApXSgnW2RhdGEtaz1ibG9ja10nKVsnYWRkRXZlbnRMaXN0ZW5lciddKGVKKDB4NDQ2KSwoKT0+e2NvbnN0IENvPWVKO2lmKEl2WydsZW5ndGgnXSlyZXR1cm47SUk9eydwMCc6bnVsbCwnaG92ZXInOm51bGx9LHIwW0NvKDB4M2E2KV1bQ28oMHgxZDYpXT1DbygweDIwOSkscjlbQ28oMHgyNzkpXT1hW0NvKDB4NDY5KV0saDcoKTt9KSxoY1tlSigweDFmZSldKGVKKDB4NDQ2KSwoKT0+e2NvbnN0IEN3PWVKO2lmKElPPT09Q3coMHg2MzcpKXJldHVybjtybygpO2lmKEk3W0N3KDB4Mjk0KV09PT1DdygweDVjOCkpSTdbQ3coMHgyOTQpXT1DdygweDU1YSk7ZWxzZSBJN1tDdygweDI5NCldPUN3KDB4NWM4KSxJOT1JZSYmSWVbJ3dpbmRvd3MnXT9JZVtDdygweDU1NyldWydtYXAnXSh1PT51WydzbGljZSddKCkpOltdO2h2KCksaFQoKTt9KSxoaFtlSigweDVmMCldKGVKKDB4MjEyKSlbZUooMHgxZmUpXShlSigweDQ0NiksKCk9PmhrWydjbGljayddKCkpLGhrW2VKKDB4MWZlKV0oZUooMHg1NWIpLCgpPT57Y29uc3QgQ2E9ZUosdT1oa1tDYSgweDQxOSldWzB4MF07aWYoIXUpcmV0dXJuO2NvbnN0IFk9bmV3IEltYWdlKCk7WVtDYSgweDViMyldPSgpPT57SWg9WSxoTlsnaGlkZGVuJ109IVtdLGg3KCk7fSxZWydzcmMnXT1VUkxbQ2EoMHgzODgpXSh1KTt9KTtjb25zdCBodT1PW2VKKDB4NWYwKV0oZUooMHg1ZDIpKTtmb3IoY29uc3QgZVcgb2ZbZUooMHg0OGQpLGVKKDB4M2ZlKSxlSigweDJlZildKXtjb25zdCBlRj1kb2N1bWVudFtlSigweDYzNCldKGVKKDB4MzNiKSk7ZUZbJ3R5cGUnXT1lSigweDMzYiksZUZbZUooMHgyNzkpXT1hW2VKKDB4NDliKStlV1sweDBdWyd0b1VwcGVyQ2FzZSddKCkrZVdbJ3NsaWNlJ10oMHgxKV0sZUZbZUooMHgxYzQpXT0oYVtlSigweDUwNCldfHx7fSlbZUooMHg0OWIpK2VXWzB4MF1bZUooMHg0MzYpXSgpK2VXW2VKKDB4MjcwKV0oMHgxKV18fCcnLGVGW2VKKDB4MjdhKV1bJ2snXT1lVyxlRltlSigweDIxMSldKCdhcmlhLXByZXNzZWQnLGVXPT09STdbZUooMHg0OWIpXSksZUZbZUooMHgxZmUpXShlSigweDQ0NiksKCk9Pntjb25zdCBDcz1lSjtybygpLEk3W0NzKDB4NDliKV09ZVcsaFkoKSxyST0nJztpZihJdltDcygweDY2MSldKUlKKCk7ZWxzZXtpZihJaz09PSdmcmVlJylyTigpO2Vsc2UgSUcoSVEoKSk7fWhUKCEhW10pO30pLGh1W2VKKDB4NWNhKV0oZUYpO31jb25zdCBoWT0oKT0+e2NvbnN0IENWPWVKO2h1W0NWKDB4NTRhKV0oQ1YoMHgzM2IpKVtDVigweDNiOSldKHU9PnVbQ1YoMHgyMTEpXSgnYXJpYS1wcmVzc2VkJyx1WydkYXRhc2V0J11bJ2snXT09PUk3W0NWKDB4NDliKV0pKSxocSgpO30saE09T1tlSigweDVmMCldKGVKKDB4MzcyKSk7Zm9yKGNvbnN0IGVHIG9mW2VKKDB4NTVhKSxlSigweDI2ZSksZUooMHg0NDIpXSl7Y29uc3QgZUw9ZG9jdW1lbnRbZUooMHg2MzQpXShlSigweDMzYikpO2VMW2VKKDB4MzRmKV09ZUooMHgzM2IpLGVMW2VKKDB4Mjc5KV09YVtlSigweDY0OSkrZUdbMHgwXVtlSigweDQzNildKCkrZUdbJ3NsaWNlJ10oMHgxKV0sZUxbZUooMHgxYzQpXT0oYVtlSigweDUwNCldfHx7fSlbZUooMHg2NDkpK2VHWzB4MF1bZUooMHg0MzYpXSgpK2VHW2VKKDB4MjcwKV0oMHgxKV18fCcnLGVMW2VKKDB4MjdhKV1bJ2snXT1lRyxlTFtlSigweDFmZSldKGVKKDB4NDQ2KSwoKT0+e2NvbnN0IENFPWVKO2lmKEk3W0NFKDB4NDliKV09PT1DRSgweDNmZSl8fEk3W0NFKDB4NTg2KV09PT1lRylyZXR1cm47cm8oKSxJN1tDRSgweDU4NildPWVHLGhxKCksckk9Jyc7aWYoSXZbQ0UoMHg2NjEpXSlJSigpO2Vsc2V7aWYoSWs9PT1DRSgweDUzNCkpck4oKTtlbHNlIElHKElRKCkpO31oVCghIVtdKTt9KSxoTVtlSigweDVjYSldKGVMKTt9Y29uc3QgaHE9KCk9PmhNW2VKKDB4NTRhKV0oZUooMHgzM2IpKVsnZm9yRWFjaCddKHU9Pntjb25zdCBDVT1lSjt1W0NVKDB4MjExKV0oQ1UoMHg2NDgpLEk3W0NVKDB4NDliKV09PT1DVSgweDNmZSk\/dVtDVSgweDI3YSldWydrJ109PT1DVSgweDQ0Mik6dVtDVSgweDI3YSldWydrJ109PT1JN1snY29yZVJvdCddKSx1W0NVKDB4NDI5KV09STdbJ2NvcmUnXT09PUNVKDB4M2ZlKTt9KTtocSgpLHIzW2VKKDB4NjQ5KV09aHE7bGV0IGh6PSdvaycsaFA9eydrZXknOicnLCdsaXN0JzpbXX07Y29uc3QgaGY9dT0+dVsnYSddKkkzWydhJ11bZUooMHgyMTMpXSt1WydiJ10qSTNbJ2InXVtlSigweDIxMyldK3VbJ2MnXSpJM1snYyddW2VKKDB4MjEzKV0saEE9KHUsWSxoRCk9Pntjb25zdCBDWD1lSjtpZighaEQpcmV0dXJuJ29rJztjb25zdCBoUz1JNFtDWCgweDJlZSldO2lmKHU8MHgxLWhTWydwYXJ0J10pcmV0dXJuJ25vJztpZihZPj0weDEmJnU+PTB4MSlyZXR1cm4nb2snO2lmKFk+PWhTW0NYKDB4M2NkKV0mJnU+PTB4MS1oU1tDWCgweDI2MSldKXJldHVybiBDWCgweDI2MSk7aWYodT49MHgxLWhTW0NYKDB4MjYxKV0pcmV0dXJuIENYKDB4MjEzKTtpZihZPj1oU1tDWCgweDUyMCldKXJldHVybiBDWCgweDVlNik7cmV0dXJuJ25vJzt9LGhwPSh1LFkpPT57Y29uc3QgQ0Y9ZUosaEQ9eydhJzoweDAsJ2InOjB4MCwnYyc6MHgwfSxoUz17J3MnOjB4MCwnYSc6MHgwLCdiJzoweDAsJ2MnOjB4MH07bGV0IGMwPTB4MDtmb3IoY29uc3QgY3Igb2YgdVsncmVnaW9ucyddKXtoRFtjclsndCddXT0oaERbY3JbJ3QnXV18fDB4MCkrMHgxO2lmKGNyW0NGKDB4NDYzKV1bQ0YoMHgzNGYpXSljMCsrO2lmKCFPYmplY3RbQ0YoMHgxYmEpXShjclsnZXJycyddKVtDRigweDY2OCldKChbY2gsY2NdKT0+Y2MmJmNoIT09Q0YoMHgzNGYpKSloU1tjcltDRigweDQ2MyldW0NGKDB4MzRmKV0\/Y3JbQ0YoMHg0Y2YpXTpjclsndCddXSsrO31jb25zdCBjMT17fSxjMj17fTtsZXQgYzM9MHgwLGM0PTB4MDtmb3IoY29uc3QgY2ggb2ZbJ2EnLCdiJywnYyddKXtjMVtjaF09TWF0aFsnbWluJ10oWVtjaF0saFNbY2hdKSxjMltjaF09WVtjaF0tYzFbY2hdLGMzKz1jMVtjaF0sYzQrPVlbY2hdO31jb25zdCBjNT1oZihZKSxjNj11Wyd1c2FibGUnXSooMHgxLUk0W0NGKDB4MmVlKV1bJ3Jlc2VydmUnXSksYzc9dVtDRigweDM1NyldW0NGKDB4MmE2KV0oY2M9PmNjWydvayddKVtDRigweDY2MSldLGM4PXVbQ0YoMHgzNTcpXVtDRigweDY2MSldLGM5PWM2LyhjNXx8MHgxKSxjST1jND9jMy9jNDoweDE7cmV0dXJueydyZXEnOlksJ2dlbic6aEQsJ2ZpbmUnOmhTLCdmdWwnOmMxLCdvcGVuJzpjMiwnZG93bic6YzAsJ3dhbnQnOmM1LCdhdmFpbCc6YzYsJ2FyZWFGaXQnOmM5LCdmdWxmaWwnOmNJLCdjb25mb3JtJzpjOD9jNy9jODoweDEsJ2NvbmYnOmM3LCduJzpjOCwncmVxTic6YzQsJ2Z1bE4nOmMzLCdzdCc6aEEoYzksY0ksYzQpfTt9O2Z1bmN0aW9uIGhaKHUpe2NvbnN0IENHPWVKLFk9SlNPTltDRygweDFlOSldKFtJTyxJN1snYSddLEk3WydiJ10sSTdbJ2MnXSxJN1tDRygweDU5MCldLEk3W0NHKDB4NTNiKV0sSUEsSXAsSTdbQ0coMHg0ODIpXV0pO2lmKGhQW0NHKDB4NTkzKV09PT1ZKXJldHVybiBoUFtDRygweDJhYildO2NvbnN0IGhEPXsnYSc6STdbJ2EnXSwnYic6STdbJ2InXSwnYyc6STdbJ2MnXX0saFM9aERbJ2EnXStoRFsnYiddK2hEWydjJ10sYzA9dVtDRygweDRkNCldKigweDEtSTRbQ0coMHgyZWUpXVsncmVzZXJ2ZSddKSxjMT1bXSxjMj1uZXcgU2V0KCksYzM9KGM4LGM5LGNJLGNyKT0+e2NvbnN0IENMPUNHO2lmKGM4PDB4MHx8Yzk8MHgwfHxjSTwweDB8fGM4K2M5K2NJPE1hdGhbJ21heCddKDB4MSxoUy0weDIpKXJldHVybjtjb25zdCBjaD1jOCsnLCcrYzkrJywnK2NJO2lmKGMyW0NMKDB4MzBiKV0oY2gpKXJldHVybjtjMltDTCgweDY3MildKGNoKSxjMVtDTCgweDJiMyldKHsnYSc6YzgsJ2InOmM5LCdjJzpjSSwnd2h5Jzpjcn0pO307YzMoaERbJ2EnXSxoRFsnYiddLGhEWydjJ10sJycpLGMzKGhEWydhJ10saERbJ2InXSsweDEsaERbJ2MnXS0weDEsYVtDRygweDMyZCldWydjYiddKSxjMyhoRFsnYSddKzB4MSxoRFsnYiddLTB4MSxoRFsnYyddLGFbQ0coMHgzMmQpXVsnYmEnXSksYzMoaERbJ2EnXSsweDEsaERbJ2InXSxoRFsnYyddLTB4MSxhW0NHKDB4MzJkKV1bJ2NhJ10pLGMzKGhEWydhJ10rMHgyLGhEWydiJ10tMHgyLGhEWydjJ10sYVtDRygweDMyZCldWydiYTInXSksYzMoaERbJ2EnXSxoRFsnYiddKzB4MixoRFsnYyddLTB4MixhW0NHKDB4MzJkKV1bQ0coMHgxZDUpXSksYzMoaERbJ2EnXSsweDEsaERbJ2InXSsweDEsaERbJ2MnXS0weDIsYVtDRygweDMyZCldW0NHKDB4MmQ5KV0pO2lmKGhEWydjJ10pYzMoaERbJ2EnXSxoRFsnYiddLGhEWydjJ10tMHgxLGFbJ3doeSddWydsZXNzJ10pO2Vsc2V7aWYoaERbJ2InXSljMyhoRFsnYSddLGhEWydiJ10tMHgxLGhEWydjJ10sYVtDRygweDMyZCldW0NHKDB4M2JmKV0pO2Vsc2UgYzMoaERbJ2EnXS0weDEsaERbJ2InXSxoRFsnYyddLGFbQ0coMHgzMmQpXVtDRygweDNiZildKTt9aWYoaERbJ2MnXSljMyhoRFsnYSddKzB4MSxoRFsnYiddLTB4MSxoRFsnYyddLTB4MSxhW0NHKDB4MzJkKV1bQ0coMHg1YzApXSk7YzMoaERbJ2EnXS0weDEsaERbJ2InXSsweDEsaERbJ2MnXSxhW0NHKDB4MzJkKV1bJ2FiJ10pO3tjb25zdCBjOD1NYXRoW0NHKDB4NDNjKV0oMHgxLGMwLyhoZihoRCl8fDB4MSkpO2lmKGM4PDAuOTcpe2NvbnN0IGM5PU1hdGhbQ0coMHg0NzIpXShoRFsnYSddKmM4KSxjST1NYXRoW0NHKDB4NDcyKV0oaERbJ2InXSpjOCksY3I9TWF0aFtDRygweDQ3MildKGhEWydjJ10qYzgpO2lmKGM5K2NJK2NyPj0weDEpe2NvbnN0IGNoPWM5KycsJytjSSsnLCcrY3I7IWMyWydoYXMnXShjaCkmJihjMltDRygweDY3MildKGNoKSxjMVtDRygweDJiMyldKHsnYSc6YzksJ2InOmNJLCdjJzpjciwnd2h5JzphW0NHKDB4MzJkKV1bQ0coMHg0Y2IpXX0pKTt9fX1jb25zdCBjND1KU09OWydzdHJpbmdpZnknXShJWiksYzU9STdbQ0coMHgzMmEpXSxjNj1bXTtmb3IoY29uc3QgY2Mgb2YgYzFbJ3NsaWNlJ10oMHgwLDB4Yikpe0k3WydhJ109Y2NbJ2EnXSxJN1snYiddPWNjWydiJ10sSTdbJ2MnXT1jY1snYyddLElHKElRKCkpO2NvbnN0IGNrPUl0KCksY2k9Y2NbJ2EnXStjY1snYiddK2NjWydjJ10sY049aHAoY2ssY2MpLGN2PWhwKGNrLGhEKSxjdT0oY05bQ0coMHg1ZDMpXS1jMCkvKGMwfHwweDEpKjB4NjQsY1k9aEEoY05bQ0coMHg0ZTcpXSxjdltDRygweDM1MildLGhTKTtjNltDRygweDJiMyldKHsuLi5jYywnbic6Y2ksJ3dhbnQnOmNOW0NHKDB4NWQzKV0sJ29rJzpjTltDRygweDI2NildLCdnZW4nOmNOWyduJ10sJ2Rldic6Y3UsJ2Z1bE4nOmN2W0NHKDB4MmQwKV0sJ3JlcU4nOmhTLCdzdCc6Y1ksJ29yaWcnOmNjPT09YzFbMHgwXSwnc2MnOi1NYXRoWydhYnMnXShjdSkqMS4yLShoUy1jaSkqMHgxOS0oaFMtY3ZbJ2Z1bE4nXSkqMHhmLShjTlsnbiddLWNOW0NHKDB4MjY2KV0pKjB4YysoY2M9PT1jMVsweDBdPzAuMToweDApfSk7fUk3WydhJ109aERbJ2EnXSxJN1snYiddPWhEWydiJ10sSTdbJ2MnXT1oRFsnYyddLEk3Wyd1bml0cyddPWM1LElaPUpTT05bQ0coMHg2MGMpXShjNCk7Y29uc3QgYzc9YzZbQ0coMHgyYTYpXShjTT0+IWNNW0NHKDB4NDdkKV0pW0NHKDB4NTc4KV0oKGNNLGNxKT0+Y3FbJ3NjJ10tY01bJ3NjJ10pW0NHKDB4MjcwKV0oMHgwLDB4NCk7cmV0dXJuIGhQPXsna2V5JzpZLCdsaXN0JzpbYzZbMHgwXSwuLi5jN119LGhQWydsaXN0J107fWNvbnN0IGhPPSh1LFkpPT57Y29uc3QgQ0s9ZUosaEQ9dVtDSygweDU1NSldW0NLKDB4MmE2KV0oYzA9PmMwWydrJ109PT1ZWydrJ10pLGhTPWhEW0NLKDB4NWViKV0oWSk7cmV0dXJuKGFbJ3JuJ11bWVsnayddXXx8WVsnayddKSsoaERbJ2xlbmd0aCddPjB4MT8nXHgyMCcrKGhTKzB4MSk6JycpO30saGU9dT0+e2NvbnN0IENqPWVKLFk9W10saEQ9W107aWYodVtDaigweDM1NCldKVlbQ2ooMHgyYjMpXShhW0NqKDB4NWFlKV1bQ2ooMHgzNTQpXSgpKTtmb3IoY29uc3QgaFMgb2YgdVsncmVnaW9ucyddKXtjb25zdCBjMD1oU1tDaigweDQ2MyldLGMxPXMoaFNbQ2ooMHg0Y2EpXXx8aFNbQ2ooMHgyMTMpXSksYzI9YVtDaigweDY0YyldO2lmKGMwW0NqKDB4NjI2KV0pWVtDaigweDJiMyldKGFbQ2ooMHg1YWUpXVtDaigweDYyNildKGhTWydpZCddKSk7aWYoYzBbJ2ZhY2FkZSddKVlbQ2ooMHgyYjMpXShhWydtc2cnXVtDaigweDY2NSldKGhTWydpZCddKSk7aWYoYzBbQ2ooMHgyZGYpXSlZW0NqKDB4MmIzKV0oYVsnbXNnJ11bQ2ooMHgyZGYpXShoU1snaWQnXSkpO2lmKGMwW0NqKDB4NjM2KV0paERbQ2ooMHgyYjMpXShjMithWydtc2cnXVsncmFuZ2UnXShoU1snaWQnXSxjMSxhW2hTWyd0J11dLEkzW2hTWyd0J11dW0NqKDB4NDNjKV0sSTNbaFNbJ3QnXV1bQ2ooMHg0NTEpXSkpO2lmKGMwW0NqKDB4Mjk3KV0paERbQ2ooMHgyYjMpXShjMithW0NqKDB4NWFlKV1bQ2ooMHgyOTcpXShoU1snaWQnXSxzKGhTWyd3J10sMHgxKSxzKGhTWydkJ10sMHgxKSkpO2Zvcihjb25zdCBjMyBvZiBoU1tDaigweDU1NSldKXtpZighYzNbJ2RheSddfHwhYzNbJ2RheSddW0NqKDB4NTJmKV18fGMzW0NqKDB4NTAwKV1bQ2ooMHg0ZTIpXSljb250aW51ZTtjb25zdCBjND1oTyhoUyxjMyk7WVtDaigweDJiMyldKCFjM1snZGF5J11bQ2ooMHgzNjQpXT9hW0NqKDB4NWFlKV1bQ2ooMHg1YTYpXShoU1snaWQnXSxjNCk6YzNbQ2ooMHgxYjkpXT9hW0NqKDB4NWFlKV1bQ2ooMHgxYjkpXShoU1snaWQnXSxjNCxzKGMzWydjb3VydCddW0NqKDB4NDBlKV0sMHgxKSxzKGMzWydjb3VydCddW0NqKDB4NWNlKV0sMHgxKSk6KGMzW0NqKDB4NDFmKV0\/YVtDaigweDVhZSldW0NqKDB4NjIxKV06YVtDaigweDVhZSldW0NqKDB4MjNlKV0pKGhTWydpZCddLGM0LHMoYzNbQ2ooMHg1MDApXVtDaigweDJlOCldLDB4MSkscyhjM1tDaigweDUwMCldW0NqKDB4MWNmKV0qSTRbQ2ooMHg1MDApXVsnc2hhcmUnXSwweDEpKSk7fWlmKGMwW0NqKDB4NjZlKV0pWVtDaigweDJiMyldKGFbQ2ooMHg1YWUpXVtDaigweDY2ZSldKGhTWydpZCddLGhTW0NqKDB4MWUyKV18fDB4MCxoU1tDaigweDJjNildPkk0W0NqKDB4MmRmKV1bQ2ooMHgyYzYpXT9oU1tDaigweDJjNildOjB4MCkpO2lmKGMwWyd0aHJ1QmVkJ10pWVtDaigweDJiMyldKGFbQ2ooMHg1YWUpXVsndGhydUJlZCddKGhTWydpZCddKSk7aWYoYzBbQ2ooMHg0ZjkpXSlZW0NqKDB4MmIzKV0oYVtDaigweDVhZSldWyd3ZWRnZUZ1cm4nXShoU1snaWQnXSkpO2lmKGMwWydmdXJuQmxvY2snXSlZWydwdXNoJ10oYVtDaigweDVhZSldW0NqKDB4NGEzKV0oaFNbJ2lkJ10saFNbQ2ooMHgyODApXXx8MHgxKSk7aWYoYzBbQ2ooMHgzNGYpXSlZW0NqKDB4MmIzKV0oYVtDaigweDVhZSldW0NqKDB4MzRmKV0oaFNbJ2lkJ10sYVtoU1sndCddXSxjMSxoU1tDaigweDI5YyldLGFbaFNbQ2ooMHg0Y2YpXV0pKTtpZihjMFtDaigweDJkNildKXtjb25zdCBjNT1oU1tDaigweDU1NSldW0NqKDB4MmE2KV0oYzY9PmM2WydrJ109PT1DaigweDIxNCl8fGM2WydrJ109PT1DaigweDIzYykpW0NqKDB4NTc4KV0oKGM2LGM3KT0+KGM2WydiJ11bMHgyXS1jNlsnYiddWzB4MF0pKihjNlsnYiddWzB4M10tYzZbJ2InXVsweDFdKS0oYzdbJ2InXVsweDJdLWM3WydiJ11bMHgwXSkqKGM3WydiJ11bMHgzXS1jN1snYiddWzB4MV0pKVsweDBdO2lmKGM1KWhEW0NqKDB4MmIzKV0oYzIrYVtDaigweDVhZSldW0NqKDB4MmQ2KV0oaFNbJ2lkJ10saE8oaFMsYzUpLHMoYzVbJ2InXVsweDJdLWM1WydiJ11bMHgwXSwweDEpLHMoYzVbJ2InXVsweDNdLWM1WydiJ11bMHgxXSwweDEpKSk7fWlmKGMwW0NqKDB4NTFjKV0pWVtDaigweDJiMyldKGFbQ2ooMHg1YWUpXVtDaigweDUxYyldKGhTWydpZCddKSk7aWYoYzBbQ2ooMHg0ODgpXSloRFtDaigweDJiMyldKGMyK2FbQ2ooMHg1YWUpXVtDaigweDQ4OCldKGhTWydpZCddKSk7aWYoYzBbQ2ooMHgxYzEpXSloRFtDaigweDJiMyldKGMyK2FbQ2ooMHg1YWUpXVtDaigweDFjMSldKGhTWydpZCddLGhTWydyb29tcyddW0NqKDB4MmE2KV0oYzY9PmM2WydrJ109PT1DaigweDIxNCkpWydsZW5ndGgnXSsoaFNbQ2ooMHg1MWQpXXx8MHgwKSwoaFNbQ2ooMHg0ZDUpXXx8MHgwKSsoaFNbQ2ooMHg1MWQpXXx8MHgwKSkpO2lmKGMwWydlc2NhcGUnXSloRFtDaigweDJiMyldKGMyK2FbJ21zZyddW0NqKDB4NGQwKV0oaFNbJ2lkJ10saFNbQ2ooMHgyMzApXT09PW51bGw\/YVsnZXNjQ3V0J106cyhoU1tDaigweDIzMCldKSsnXHgyMG0nKSk7aWYoaFNbQ2ooMHgzMWMpXSYmaFNbQ2ooMHgzMWMpXVsnemgnXSlZWydwdXNoJ10oYVtDaigweDVhZSldWyd6aCddKGhTWydpZCddLGhTWyd6aFppJ10sYzEsaFNbQ2ooMHgxZTApXSkpO2lmKGhTW0NqKDB4MzFjKV0mJmhTWydwZXJycyddWydiZiddKVlbQ2ooMHgyYjMpXShhW0NqKDB4NWFlKV1bJ2JmJ10oaFNbJ2lkJ10saFNbQ2ooMHgzODMpXVtDaigweDM3ZildKGM2PT5oTyhoUyxjNikrJzpceDIwJytzKGM2W0NqKDB4NTAwKV1bQ2ooMHg0NGUpXSwweDIpKydceDIwbScpW0NqKDB4MjZhKV0oJyxceDIwJykpKTt9Zm9yKGNvbnN0IGM2IG9mIHVbQ2ooMHg2NzcpXXx8W10paWYoYzZbQ2ooMHgxYzcpXT09PUNqKDB4NWRiKSlZW0NqKDB4MmIzKV0oYVtDaigweDVhZSldW0NqKDB4NjVlKV0ocyhjNltDaigweDIxMyldLDB4MSkscyhjNlsndXcnXSwweDIpKSk7Zm9yKGNvbnN0IGM3IG9mIHVbQ2ooMHg0ZWUpXXx8W10paWYoYVtDaigweDVhZSldW2M3WydrJ11dKWhEW0NqKDB4MmIzKV0oYVtDaigweDY0YyldK2FbJ21zZyddW2M3WydrJ11dKHMoYzdbJ3YnXSxjN1snayddPT09Q2ooMHg1OTApPzB4MToweDApKSk7cmV0dXJuIFlbQ2ooMHgyMDYpXShoRCk7fTtmdW5jdGlvbiBoQigpe2NvbnN0IENRPWVKO2lmKCFJZSl7cjlbQ1EoMHgyN2EpXVsndiddPUNRKDB4MjdiKSxyOVtDUSgweDI3OSldPWFbQ1EoMHgxZDEpXSxJU1sndGV4dENvbnRlbnQnXT0nJyxoOVtDUSgweDU5NyldPScnLE9bQ1EoMHg1ZjApXShDUSgweDI1ZikpW0NRKDB4NTk3KV09JycsT1tDUSgweDVmMCldKENRKDB4NTQyKSlbQ1EoMHg1OTcpXT0nJztyZXR1cm47fWNvbnN0IHU9SWUsWT11W0NRKDB4MzU3KV1bQ1EoMHg0YjApXSgoYzgsYzkpPT5jOCsoYzlbQ1EoMHg0Y2EpXXx8MHgwKSwweDApLGhEPXVbJ3JlZ2lvbnMnXVtDUSgweDRiMCldKChjOCxjOSk9PmM4K2M5W0NRKDB4MjEzKV0sMHgwKSxoUz0oYzgsYzkpPT57SURbJ3F1ZXJ5U2VsZWN0b3InXSgnW2RhdGEtcz0nK2M4KyddJylbJ3RleHRDb250ZW50J109Yzk7fTtoUyhDUSgweDIzNykscyh1W0NRKDB4MzU3KV1bQ1EoMHg2NjEpXSkpLGhTKENRKDB4MmFjKSxzKFkpKydceDIwbcKyJyksaFMoQ1EoMHg1NzApLHMoWS91W0NRKDB4MmEyKV0qMHg2NCkrJ1x4MjAlJyksaFMoQ1EoMHg1M2YpLHModVtDUSgweDM1NyldW0NRKDB4NjYxKV0\/WS91W0NRKDB4MzU3KV1bQ1EoMHg2NjEpXToweDApK0NRKDB4M2RjKSksaFMoQ1EoMHg1NzApLHMoaEQvdVtDUSgweDJhMildKjB4NjQpKydceDIwJScpO2NvbnN0IGMwPWM4PT51W0NRKDB4MzU3KV1bQ1EoMHgyYTYpXShjOT0+YzlbQ1EoMHg0NjMpXVtjOF0pW0NRKDB4MzdmKV0oYzk9PmM5WydpZCddKVtDUSgweDI2YSldKCcsXHgyMCcpLGMxPWM4PT51W0NRKDB4MzU3KV1bQ1EoMHgyYTYpXShjOT0+YzlbQ1EoMHgzMWMpXSYmYzlbQ1EoMHgzMWMpXVtjOF0pW0NRKDB4MzdmKV0oYzk9PmM5WydpZCddKVtDUSgweDI2YSldKCcsXHgyMCcpLGMyPVtbYzAoQ1EoMHg2MzYpKSxhW0NRKDB4NjM2KV1dLFtjMChDUSgweDY2NSkpLGFbQ1EoMHgxZGQpXV0sW2MwKENRKDB4MmRmKSksYVtDUSgweDYzOCldXSxbYzAoQ1EoMHgyOTcpKSxhW0NRKDB4Mjk3KV1dLFtjMChDUSgweDYyNikpLGFbQ1EoMHg2MjYpXV0sW2MwKENRKDB4NDg4KSksYVtDUSgweDQ4OCldXSxbYzAoQ1EoMHgxYzEpKSxhW0NRKDB4MWMxKV1dLFtjMChDUSgweDM0ZikpLGFbQ1EoMHgxYzApXV0sW2MwKENRKDB4NTFjKSksYVtDUSgweDUxYyldXSxbYzAoQ1EoMHgyZDYpKSxhW0NRKDB4MmQ2KV1dLFtjMChDUSgweDVhNikpLGFbQ1EoMHg1YTYpXV0sW2MwKENRKDB4MjNlKSksYVtDUSgweDIzZSldXSxbYzAoQ1EoMHg2MjEpKSxhW0NRKDB4MWRlKV1dLFtjMChDUSgweDY2ZSkpLGFbQ1EoMHg1NzMpXV0sW2MwKCd0aHJ1QmVkJyksYVtDUSgweDFiYyldXSxbYzAoQ1EoMHg0YTMpKSxhW0NRKDB4NGUxKV1dLFtjMChDUSgweDRmOSkpLGFbQ1EoMHg2MDMpXV0sW2MwKENRKDB4NGQwKSksYVtDUSgweDRkMCldXSxbYzEoJ3poJyksYVtDUSgweDQxYildXSxbYzEoJ2JmJyksYVsncGJmVyddXV1bJ2ZpbHRlciddKGM4PT5jOFsweDBdKVtDUSgweDM3ZildKGM4PT5jOFsweDFdKGM4WzB4MF0pKTtpZih1WydlbnRyeUFtYmlnJ10pYzJbQ1EoMHg1ODIpXShhW0NRKDB4NTA5KV0pO2lmKHVbQ1EoMHg1MzQpXT49MHg0JiZJaz09PSdmcmVlJyljMltDUSgweDJiMyldKGFbJ3VudXNlZCddKHModVtDUSgweDUzNCldKSkpO0lTWyd0ZXh0Q29udGVudCddPWMyW0NRKDB4MjcwKV0oMHgwLDB4MylbQ1EoMHgyNmEpXSgnXHgyMMK3XHgyMCcpKyhjMltDUSgweDY2MSldPjB4Mz9DUSgweDMwZSkrYVtDUSgweDU4OCldKGMyWydsZW5ndGgnXS0weDMpOicnKTt7Y29uc3QgYzg9dVtDUSgweDM1NyldW0NRKDB4NjYxKV0sYzk9dVsnb3duJ11bQ1EoMHg0YjApXSgoY00sY3EpPT5jTSsoY3E9PT1MPzB4MToweDApLDB4MCkqVSpVLGNJPU1hdGhbQ1EoMHg0NTEpXSgweDAsLi4udVtDUSgweDM1NyldW0NRKDB4MzdmKV0oY009PmNNWydlc2MnXXx8MHgwKSksY3I9dVtDUSgweDM1NyldW0NRKDB4NjY4KV0oY009PmNNWydkb29yJ10mJmNNW0NRKDB4MjMwKV09PT1udWxsKSxjaD1jTT0+dVtDUSgweDM1NyldW0NRKDB4MmE2KV0oY3E9PihjcVtDUSgweDNhMildfHxjcVsndCddKT09PWNNKVtDUSgweDY2MSldLGNjPVtbYVtDUSgweDJlNildLHModVtDUSgweDJhMildKStDUSgweDNkYyldLFthWydmQ29yJ10scyhjOSkrQ1EoMHgyYjQpK3MoYzkvdVsnZ3Jvc3MnXSoweDY0KSsnXHgyMCUnXSxbYVtDUSgweDYwNyldLGNoKCdzJykrJ1x4MjAvXHgyMCcrY2goJ2EnKSsnXHgyMC9ceDIwJytjaCgnYicpK0NRKDB4NGM1KStjaCgnYycpXSxbYVtDUSgweDQxMildLHModVtDUSgweDQ0NSldIT09dW5kZWZpbmVkP3VbJ3N0YWlycyddOkQoKVtDUSgweDY2MSldKV0sW2FbQ1EoMHgxYzMpXSxjcj9hW0NRKDB4NWY3KV06cyhjSSkrJ1x4MjBtJ11dO2xldCBjaz0nJztjY1tDUSgweDJiMyldKFthW0NRKDB4MzE3KV0sdVtDUSgweDM1NyldWydmaWx0ZXInXShjTT0+Y01bQ1EoMHg2N2EpXSYmY01bQ1EoMHg2N2EpXVtDUSgweDY2MSldKVtDUSgweDY2MSldKydceDIwL1x4MjAnK2M4XSk7aWYodVtDUSgweDY1ZSldKWNjW0NRKDB4MmIzKV0oW2FbJ2ZXZWRnZSddLGFbJ3dlZGdlTGl2ZSddKydceDIwJytzKHVbQ1EoMHg2NWUpXVtDUSgweDRiYildKStDUSgweDJiNCkrYVtDUSgweDI5MCldKydceDIwJytzKHVbQ1EoMHg2NWUpXVsndmVya2VociddKStDUSgweDJiNCkrYVtDUSgweDU4MCldKydceDIwJytzKHVbQ1EoMHg2NWUpXVtDUSgweDVkYildKStDUSgweDNkYyldKTtpZihJN1tDUSgweDQ4MildJiYoSTdbJ3Byb2ZpbGVzJ11bJ3poJ118fEk3W0NRKDB4NDgyKV1bJ2JmJ10pKWNjWydwdXNoJ10oW2FbQ1EoMHg2NjIpXSx1W0NRKDB4MzU3KV1bQ1EoMHgyYTYpXShjTT0+Y01bQ1EoMHg0NzEpXSlbQ1EoMHg2NjEpXStDUSgweDRjNSkrYzhdKTtpZihJaz09PSdwcm9nJyl7Y29uc3QgY009aHAodSx7J2EnOkk3WydhJ10sJ2InOkk3WydiJ10sJ2MnOkk3WydjJ119KSxjcT1jTVsnc3QnXSxjej1jQj0+Y0JbJ2EnXStDUSgweDRjNSkrY0JbJ2InXStDUSgweDRjNSkrY0JbJ2MnXTtoej1jcTtjb25zdCBjUD1bW2FbQ1EoMHg1YzYpXSxzKGNNW0NRKDB4NWQzKV0pK0NRKDB4M2RjKV0sW2FbQ1EoMHgxYmYpXSxzKGNNW0NRKDB4M2NjKV0pK0NRKDB4M2RjKV0sW2FbJ2ZGaXQnXSxzKGNNW0NRKDB4NGU3KV0qMHg2NCkrJ1x4MjAlJ10sW2FbQ1EoMHg1YzcpXSxjeihjTVsncmVxJ10pK0NRKDB4NDY0KStjTVtDUSgweDU3ZCldXSxbYVsnZkdlbiddLGN6KGNNW0NRKDB4MzQ5KV0pK0NRKDB4NDY0KStjTVsnbiddXSxbYVtDUSgweDFlMyldLGNNW0NRKDB4MmQwKV0rQ1EoMHg0YzUpK2NNW0NRKDB4NTdkKV0rJ1x4MjAoJytzKGNNW0NRKDB4MzUyKV0qMHg2NCkrQ1EoMHg1ZDYpXSxbYVtDUSgweDI0YyldLGNNWydjb25mJ10rQ1EoMHg0YzUpK2NNWyduJ10rJ1x4MjAoJytzKGNNW0NRKDB4MzVjKV0qMHg2NCkrJ1x4MjAlKSddXSxjZj1bJ2EnLCdiJywnYyddWydmaWx0ZXInXShjQj0+Y01bQ1EoMHg1NDApXVtjQl0+MHgwKVtDUSgweDM3ZildKGNCPT5jTVtDUSgweDU0MCldW2NCXStDUSgweDNlMykrYVsndCcrY0JdKTtpZihjZltDUSgweDY2MSldKWNQW0NRKDB4MmIzKV0oW2FbQ1EoMHg1MDYpXSxjZlsnam9pbiddKCcsXHgyMCcpXSk7aWYoY01bQ1EoMHg0N2YpXSljUFtDUSgweDJiMyldKFthW0NRKDB4NjE0KV0sU3RyaW5nKGNNW0NRKDB4NDdmKV0pXSk7Y2NbQ1EoMHg1ODIpXSguLi5jUCk7aWYoY3EhPT0nb2snJiYhaDAmJiFyRil7Y29uc3QgY0I9aFoodSksY2I9Y0JbQ1EoMHgyYTYpXShjZD0+IWNkW0NRKDB4NDdkKV0mJmNkWydzdCddIT09J25vJylbQ1EoMHgyNzApXSgweDAsMHgzKTtpZihjYltDUSgweDY2MSldKWNrPUNRKDB4NTc3KSthW0NRKDB4NTNhKV0rQ1EoMHg1NTEpK2NiWydtYXAnXShjZD0+Q1EoMHgzYmEpK2NkWydhJ10rQ1EoMHg0YzUpK2NkWydiJ10rQ1EoMHg0YzUpK2NkWydjJ10rQ1EoMHg1N2UpK2NkWyd3aHknXStDUSgweDJkOCkrYVtDUSgweDY1NSldW2NkWydzdCddXSsnPC90ZD48dGQ+PGJ1dHRvblx4MjB0eXBlPVx4MjJidXR0b25ceDIyXHgyMGRhdGEtYWx0PVx4MjInK2NkWydhJ10rJywnK2NkWydiJ10rJywnK2NkWydjJ10rJ1x4MjI+JythWydhbHRBcHBseSddKyc8L2J1dHRvbj48L3RkPjwvdHI+JylbQ1EoMHgyNmEpXSgnJykrJzwvdGJvZHk+PC90YWJsZT4nO319Y29uc3QgY2k9aGUodSksY049MHg4LGN2PWNpW0NRKDB4NjYxKV0\/Q1EoMHg0MjQpK2FbQ1EoMHgzOWIpXSsnPC9wPjx1bFx4MjBjbGFzcz1ceDIycHMtcGxhbl9faXNzdWVzXHgyMj4nK2NpW0NRKDB4MjcwKV0oMHgwLGNOKVtDUSgweDM3ZildKGNkPT4nPGxpPicrY2QrQ1EoMHg1MTApKVtDUSgweDI2YSldKCcnKSsoY2lbQ1EoMHg2NjEpXT5jTj9DUSgweDNhOSkrYVsnaXNzdWVzTW9yZSddKGNpW0NRKDB4NjYxKV0tY04pK0NRKDB4NTEwKTonJykrQ1EoMHgyNWIpOicnLGN1PU9bQ1EoMHg1ZjApXShDUSgweDI1ZikpO2N1W0NRKDB4NTk3KV09Q1EoMHgyYzkpK2NjW0NRKDB4MzdmKV0oKFtjZCxjQ10pPT5DUSgweDQ3YykrY2QrQ1EoMHg0YTApK2NDK0NRKDB4M2MzKSlbQ1EoMHgyNmEpXSgnJykrQ1EoMHg0NTYpK2N2O2NvbnN0IGNZPU9bJ3F1ZXJ5U2VsZWN0b3InXShDUSgweDU0MikpO2NZW0NRKDB4NTk3KV09Y2ssY1lbQ1EoMHg1NGEpXShDUSgweDI2OSkpW0NRKDB4M2I5KV0oY2Q9PmNkW0NRKDB4MWZlKV0oQ1EoMHg0NDYpLCgpPT57Y29uc3QgQ2w9Q1E7cm8oKTtjb25zdCBbY0MsY1QsY29dPWNkW0NsKDB4MjdhKV1bQ2woMHgyYzApXVtDbCgweDI2NCldKCcsJylbQ2woMHgzN2YpXShOdW1iZXIpO0k3WydhJ109Y0MsSTdbJ2InXT1jVCxJN1snYyddPWNvLFsnYScsJ2InLCdjJ11bQ2woMHgzYjkpXShjdz0+cjNbY3ddKCkpLHJJPScnLElHKElRKCkpLGhUKCEhW10pO30pKTt9e2NvbnN0IGNkPXVbQ1EoMHgzNTcpXVtDUSgweDY2MSldfHwweDEsY0M9Y3M9Pk1hdGhbQ1EoMHg0NzIpXSh1W0NRKDB4MzU3KV1bQ1EoMHgyYTYpXShjcylbJ2xlbmd0aCddL2NkKjB4NjQpLGNUPU1hdGhbQ1EoMHg0NzIpXSh1WydyZWdpb25zJ11bQ1EoMHg0YjApXSgoY3MsY1YpPT5jcysoY1ZbJ2ZpdCddPT09dW5kZWZpbmVkPzB4MDpjVltDUSgweDM0OCldKSwweDApL2NkKSxjbz1jQyhjcz0+Y3NbQ1EoMHg2NjUpXSYmIWNzW0NRKDB4NDYzKV1bQ1EoMHg1YTYpXSYmIWNzW0NRKDB4NDYzKV1bQ1EoMHgyM2UpXSYmIWNzW0NRKDB4NDYzKV1bQ1EoMHg2MjEpXSksY3c9Y0MoY3M9PiFjc1tDUSgweDQ2MyldW0NRKDB4MmRmKV0mJiFjc1tDUSgweDQ2MyldW0NRKDB4NGQwKV0mJiFjc1tDUSgweDQ2MyldW0NRKDB4NTFjKV0pLGNhPWNDKGNzPT5jc1snb2snXSk7aDlbQ1EoMHg1OTcpXT1bW2FbQ1EoMHg0MmIpXSxjVF0sW2FbQ1EoMHgxZmQpXSxjb10sW2FbQ1EoMHgzOTMpXSxjd10sW2FbQ1EoMHg1OWUpXSxjYV1dW0NRKDB4MzdmKV0oKFtjcyxjVl0pPT5DUSgweDNiMikrY3MrQ1EoMHgxZjApK2NWK0NRKDB4NTg1KStjVisnJVx4MjI+PC9pPjwvc3Bhbj4nKVtDUSgweDI2YSldKCcnKTt9Y29uc3QgYzM9dVtDUSgweDM1NyldW0NRKDB4MmE2KV0oY3M9PmNzWydvayddKVsnbGVuZ3RoJ10sYzQ9dVtDUSgweDM1NyldW0NRKDB4NjYxKV07aWYoSWs9PT1DUSgweDJlZSkpe2NvbnN0IGNzPWhwKHUseydhJzpJN1snYSddLCdiJzpJN1snYiddLCdjJzpJN1snYyddfSk7cjlbJ3RleHRDb250ZW50J109YVtDUSgweDY3ZCldW2h6XSsnXHgyMCcrYVtDUSgweDM1MSldKGNzWydmdWxOJ10sY3NbQ1EoMHg1N2QpXSkrKHJJPydceDIwJytySTonJyk7fWVsc2UgcjlbQ1EoMHgyNzkpXT1yST9ySTphW0NRKDB4MjY2KV0oYzMsYzQpO2lmKEk3W0NRKDB4NDgyKV0mJkk3Wydwcm9maWxlcyddWyd6aCddJiZ1W0NRKDB4MzU3KV1bQ1EoMHg2NjEpXSl7Y29uc3QgY1Y9STRbQ1EoMHg0ODIpXVsnemgnXVtDUSgweDQzYyldLGNFPW5ldyBNYXAoKTtmb3IoY29uc3QgY1ggb2YgdVtDUSgweDM1NyldKXtpZighY1hbQ1EoMHg1NTUpXVtDUSgweDY2MSldKWNvbnRpbnVlO2NvbnN0IGNXPWNYW0NRKDB4NGNhKV18fGNYW0NRKDB4MjEzKV07bGV0IGNGPU1hdGhbQ1EoMHg0M2MpXSgweDUsKGNYW0NRKDB4MjljKV18fDB4MCkrMHgxKTt3aGlsZShjRj4xLjUmJmNXPGNWW2NGXSljRi09MC41O2NvbnN0IGNHPWNXPDB4MmQ\/YVsnemhCZWxvdyddOlN0cmluZyhjRilbQ1EoMHgzYjYpXSgnLjUnLCfCvScpO2NFW0NRKDB4MmE1KV0oY0csKGNFW0NRKDB4Mjk2KV0oY0cpfHwweDApKzB4MSk7fWNvbnN0IGNVPVthW0NRKDB4MjgxKV0sJzHCvScsJzInLCcywr0nLCczJywnM8K9JywnNCcsJzTCvScsJzUnXTtyOVsndGV4dENvbnRlbnQnXSs9J1x4MjAnK2FbJ3poJ10oY1VbQ1EoMHgyYTYpXShjTD0+Y0VbQ1EoMHgzMGIpXShjTCkpW0NRKDB4MzdmKV0oY0w9PmNFWydnZXQnXShjTCkrJ8OXXHgyMCcrKGNMPT09YVtDUSgweDI4MSldP2NMOmNMKydceDIwJythW0NRKDB4NDRkKV0pKVtDUSgweDI2YSldKCcsXHgyMCcpKTt9aWYoSTdbQ1EoMHgyOTQpXT09PSdtYW51YWwnKXI5W0NRKDB4Mjc5KV0rPSdceDIwJythW0NRKDB4Mjg5KV07Y29uc3QgYzU9dVtDUSgweDM1NyldW0NRKDB4NjYxKV0\/YzMvdVtDUSgweDM1NyldW0NRKDB4NjYxKV06MHgwLGM2PXVbJ3JlZ2lvbnMnXVtDUSgweDJhNildKGNMPT5jTFtDUSgweDMyZildKVtDUSgweDY2MSldLGM3PUlrPT09Q1EoMHgyZWUpP2h6PT09J29rJz9hW0NRKDB4MzcxKV06aHo9PT1DUSgweDI2MSl8fGh6PT09Q1EoMHg1ZTYpP2FbQ1EoMHg1YjEpXTphW0NRKDB4MzY3KV06YzU+PTAuOTUmJiFjNj9hW0NRKDB4MzcxKV06YzU+PTAuNj9hW0NRKDB4NWIxKV06YVtDUSgweDM2NyldO3I5W0NRKDB4MjdhKV1bJ3YnXT1Jaz09PUNRKDB4MmVlKT9oej09PSdvayc\/Q1EoMHg0MTMpOmh6PT09J25vJ3x8aHo9PT1DUSgweDIxMyk\/Q1EoMHgzMTMpOidvayc6Yzc9PT1hW0NRKDB4MzcxKV0\/Q1EoMHg0MTMpOmM3PT09YVsndl9iYWQnXT9DUSgweDMxMyk6J29rJyxyOVtDUSgweDI3OSldPScnKyhJaz09PSdwcm9nJz8nJzpjNysnXHgyMCcpKyhJTz09PSdjdXN0b20nP2FbQ1EoMHg1NzUpXSh1W0NRKDB4NWQ1KV0\/YVtDUSgweDUyOCldOnVbQ1EoMHgyOGEpXVsnZmlsdGVyJ10oKGNMLGNLKT0+Y0w9PT1MJiZbMHgxLC0weDEsWCwtWF1bQ1EoMHgyYTYpXShjaj0+dVsnb3duJ11bY0srY2pdPT09TClbQ1EoMHg2NjEpXT49MHgzKVsnbGVuZ3RoJ10+MHg4P2FbQ1EoMHg2MjQpXTphW0NRKDB4MzViKV0sRCgpW0NRKDB4NjYxKV0sdVsnZW50cmllcyddWydsZW5ndGgnXSkrJ1x4MjAnOicnKStyOVtDUSgweDI3OSldKyhjNj8nXHgyMCcrYVtDUSgweDMyZildKGM2KTonJykrKElrPT09Q1EoMHg1MzQpJiZJN1tDUSgweDVjMildJiZJN1tDUSgweDVjMildPnVbQ1EoMHgzNTcpXVtDUSgweDY2MSldPydceDIwJythW0NRKDB4MzdjKV0oSTdbQ1EoMHg1YzIpXSx1W0NRKDB4MzU3KV1bQ1EoMHg2NjEpXSk6JycpKyhJN1tDUSgweDU5MCldPj0yLjUmJmM1PDAuNz8nXHgyMCcrYVsnd2lkZUNvciddOicnKSsodVtDUSgweDU3OSldPydceDIwJythW0NRKDB4NTc5KV06JycpKygoYzJbQ1EoMHg2NjEpXT91W0NRKDB4NDQ1KV0+MHgxOklQKSYmSXo9PT1DUSgweDU1YSk\/J1x4MjAnK2FbQ1EoMHgyYjIpXTonJyk7fWZ1bmN0aW9uIGhiKCl7Y29uc3QgQ209ZUo7ckQ9MHgwO2lmKHJnPDB4MSl7cmc9TWF0aFtDbSgweDQzYyldKDB4MSwocGVyZm9ybWFuY2VbQ20oMHgyNTYpXSgpLXJ0KS8weDU3OCksaDcoKTtpZihyZzwweDEpckQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGhiKTt9fWZ1bmN0aW9uIGhkKCl7Y29uc3QgQ0o9ZUo7bGV0IHU9SXQoKTtpZihJeiE9PUNKKDB4NTVhKXx8ckYpcmV0dXJuIHU7Y29uc3QgWT1oUz0+aFNbQ0ooMHgzNTcpXVtDSigweDY2OCldKGMwPT5jMFtDSigweDQ2MyldW0NKKDB4NGQwKV0pO2Zvcihjb25zdCBoUyBvZlsweDMsMHgyXSl7Y29uc3QgYzA9aFM9PT0weDM\/SWY6SVA7aWYoIWMwfHxoUz09PTB4MiYmSWYpY29udGludWU7aWYoaFM9PT0weDMpSWY9bnVsbDtlbHNlIElQPW51bGw7Y29uc3QgYzE9SXQoKTtpZihZKGMxKSl7aWYoaFM9PT0weDMpSWY9YzA7ZWxzZSBJUD1jMDt9ZWxzZSB1PWMxO31sZXQgaEQ9IVtdO2ZvcihsZXQgYzI9MHgwO2MyPDB4MiYmWSh1KSYmIUlmO2MyKyspe2NvbnN0IGMzPXJrKCk7aWYoIWMzKWJyZWFrO2lmKCFJUClJUD1jMztlbHNlIElmPWMzO2hEPSEhW10sSUcoSVEoKSksdT1JdCgpO31pZihoRClyST0nJztyZXR1cm4gckMoKSx1O31mdW5jdGlvbiBoQygpe2NvbnN0IENuPWVKO0ltKCk7Y29uc3QgdT17J3JlZ2lvbnMnOltdLCdncm9zcyc6MHgwLCdmcmVlJzoweDAsJ3VzYWJsZSc6MHgwLCdjb3JlT2ZmJzoweDAsJ293bic6W10sJ2VudHJpZXMnOltdLCdjb3VydHMnOltdLCdkZWVwJzohW10sJ3N0YWlycyc6MHgwLCd3ZWRnZSc6eyd3b2huJzoweDAsJ25lYmVuJzoweDAsJ3ZlcmtlaHInOjB4MH0sJ3dlZGdlcyc6W10sJ25vdGVzJzpbXSwnZW50cnlBbWJpZyc6IVtdfTtJdltDbigweDNiOSldKFk9Pntjb25zdCBDUj1DbjtJcyhZKTtjb25zdCBoRD1oZCgpO0lWKFkpLFlbQ1IoMHgyOWEpXT1oRCxZW0NSKDB4MzJhKV09aERbQ1IoMHgzNTcpXVtDUigweDY2MSldLHVbQ1IoMHgyYTIpXSs9aERbQ1IoMHgyYTIpXSx1WydmcmVlJ10rPWhEW0NSKDB4NTM0KV0sdVtDUigweDRkNCldKz1oRFsndXNhYmxlJ10sdVtDUigweDUxNCldKz1oRFtDUigweDUxNCldLHVbQ1IoMHg0NDUpXSs9RCgpWydsZW5ndGgnXSx1W0NSKDB4MzU3KV1bJ3B1c2gnXSguLi5oRFtDUigweDM1NyldKTtmb3IoY29uc3QgaFMgb2YgaERbQ1IoMHgyOGEpXSlpZihoUz09PUwpdVtDUigweDI4YSldW0NSKDB4MmIzKV0oaFMpO2Zvcihjb25zdCBjMCBvZiBoRFtDUigweDFiYSldKXVbQ1IoMHgxYmEpXVsncHVzaCddKHsuLi5jMCwncGFydCc6WX0pO3VbQ1IoMHg2NzcpXVtDUigweDJiMyldKC4uLmhEW0NSKDB4NDg2KV18fFtdKTtmb3IoY29uc3QgYzEgb2YgaERbQ1IoMHg0ZWUpXXx8W10paWYoIXVbQ1IoMHg0ZWUpXVtDUigweDY2OCldKGMyPT5jMlsnayddPT09YzFbJ2snXSkpdVtDUigweDRlZSldW0NSKDB4MmIzKV0oYzEpO2lmKFlbJ3dlZGdlSW4nXSl1W0NSKDB4NjVlKV1bWVtDUigweDQ3MyldW0NSKDB4NjA5KV1dKz1ZW0NSKDB4NDczKV1bQ1IoMHgyMTMpXTtmb3IoY29uc3QgYzIgb2YgaERbQ1IoMHg0ODYpXXx8W10pdVtDUigweDY1ZSldW2MyWyd1c2UnXT09PUNSKDB4NWRiKT8nbmViZW4nOkNSKDB4NGJiKV0rPWMyWydhcmVhJ107fSksdVtDbigweDM1NCldPUk3W0NuKDB4NTNiKV09PT0nZWcnJiZ1W0NuKDB4MWJhKV1bQ24oMHgyYTYpXShZPT5ZW0NuKDB4NjYwKV0pW0NuKDB4NjYxKV0hPT0weDE7e2NvbnN0IFtZLGhEXT1JdixoUz1ZWydtaWQnXVsweDFdO1lbJ29wZW5TaWRlJ109e30saERbQ24oMHg0NzkpXT17fTtmb3IoY29uc3QgYzAgb2ZbSTdbQ24oMHgzNGIpXT49MHgwXSl7Y29uc3QgYzE9KFlbQ24oMHgyOWEpXVtDbigweDQ4NildfHxbXSlbJ2ZpbmQnXShjNT0+YzVbQ24oMHg1ZWYpXT09PWMwKSxjMj0oaERbJ21vZGVsJ11bQ24oMHg0ODYpXXx8W10pW0NuKDB4MmI1KV0oYzU9PmM1W0NuKDB4NWVmKV09PT1jMCk7aWYoIWMxJiYhYzIpY29udGludWU7bGV0IGMzPW51bGwsYzQ9MHgwO2Zvcihjb25zdCBjNSBvZiBZW0NuKDB4MjlhKV1bQ24oMHgzNTcpXSl7bGV0IGM2PTB4MDtmb3IoY29uc3QgYzcgb2YgYzVbQ24oMHgyYjkpXSl7Y29uc3QgYzg9KGM3JVgrMC41KSpVLGM5PShNYXRoW0NuKDB4NTNiKV0oYzcvWCkrMC41KSpVO2lmKGM5PGhTPT09YzAmJk1hdGhbJ2FicyddKGM4LVlbJ2N1dHMnXVtjMD9DbigweDVlZik6Q24oMHg0YWEpXSk8MC44KWM2Kys7fWM2PmM0JiYoYzQ9YzYsYzM9YzUpO31pZihjMyl7YzNbQ24oMHgyMTMpXSs9YzI\/YzJbJ2FyZWEnXToweDAsdVtDbigweDRkNCldKz1jMj9jMltDbigweDIxMyldOjB4MDtpZihjMSljMVtDbigweDVhNSldPWMzO2lmKGMyKWMyW0NuKDB4NWE1KV09YzM7YzNbQ24oMHg1MWQpXT1jMiYmYzJbQ24oMHg2MTYpXT8weDE6MHgwLGMzW0NuKDB4NDYzKV1bJ3JhbmdlJ109SWs9PT1DbigweDJlZSk\/YzNbQ24oMHgyMTMpXT5JM1tjM1sndCddXVtDbigweDQ1MSldKjEuMDU6YzNbJ2FyZWEnXT4oYzNbQ24oMHg1MWQpXT8weDZlOjB4NWYpLGMzW0NuKDB4NDAzKV09KGMxP2MxW0NuKDB4MjEzKV06MHgwKSsoYzI\/YzJbQ24oMHgyMTMpXToweDApO2NvbnN0IGNJPShjYyxjayk9Pntjb25zdCBDeT1DbjtpZighY2spcmV0dXJuIDB4MDtsZXQgY2k9MHgwO2NvbnN0IGNOPWNjW0N5KDB4MjlhKV1bJ293biddLGN2PWNrWyd0b3AnXT8tMHgxOjB4MTtmb3IobGV0IGN1PTB4MDtjdTxjTltDeSgweDY2MSldO2N1Kyspe2lmKGNOW2N1XSE9PUopY29udGludWU7Y29uc3QgY1k9Y3UlWCxjTT0oY3UtY1kpL1gsY3E9Y00rY3Y7aWYoY3E8MHgwfHxjcT49Rnx8Y05bY3EqWCtjWV09PT1HKWNpKys7fXJldHVybiBjaSpVO307YzNbQ24oMHg0MmMpXT0oYzNbJ2ZhYyddfHwweDApK2NJKFksYzEpK2NJKGhELGMyKTtpZihjMSYmYzFbQ24oMHgyMTMpXT49MHhhKXtjb25zdCBjYz1jaz0+e2NvbnN0IEN4PUNuLGNpPWNrWydiJ11bMHgyXS1ja1snYiddWzB4MF0sY049Y2tbJ2InXVsweDNdLWNrWydiJ11bMHgxXTtyZXR1cm57J3MnOk1hdGhbQ3goMHg0M2MpXShjaSxjTiksJ2EnOmNpKmNOfTt9O2MzW0NuKDB4NDYzKV1bQ24oMHgyZDYpXT1jM1tDbigweDU1NSldW0NuKDB4NjY4KV0oY2s9Pntjb25zdCBDZz1DbixjaT1jYyhjayk7cmV0dXJuIGNrWydrJ109PT1DZygweDIxNCkmJihjaVsncyddPChja1tDZygweDI0OCldPzB4MjoyLjUpfHxjaVsnYSddPChja1tDZygweDI0OCldPzUuNToweDgpKTt9KTt9YzNbQ24oMHg0NjMpXVtDbigweDFjMSldPUlrPT09Q24oMHg1MzQpJiZjM1tDbigweDU1NSldW0NuKDB4MmE2KV0oY2s9PmNrWydrJ109PT0nYmVkJylbQ24oMHg2NjEpXStjM1tDbigweDUxZCldPE1hdGhbQ24oMHg0M2MpXShJaShjM1tDbigweDIxMyldLWMzW0NuKDB4NDAzKV0sYzNbJ3QnXSkrYzNbQ24oMHg1MWQpXSxjM1snZGVzaXJlZEJlZHMnXSsweDEpLGMzWydvayddPUk2KGMzKTtjb25zdCBjcj1jMD9DbigweDVlZik6Q24oMHg0YWEpLGNoPSFjM1tDbigweDUxZCldO1lbQ24oMHg0NzkpXVtjcl09Y2gsaERbQ24oMHg0NzkpXVtjcl09Y2g7aWYoIWNoKXtjb25zdCBjaz1jMD9oRFtDbigweDNjNCldWzB4MF06aERbQ24oMHgzYzQpXVsweDNdLGNpPWMwP2hEW0NuKDB4M2M0KV1bMHgzXTpoRFtDbigweDNjNCldWzB4MF0sY049TWF0aFtDbigweDQ3NSldKGNpWzB4MF0tY2tbMHgwXSxjaVsweDFdLWNrWzB4MV0pLGN2PShjaVsweDBdLWNrWzB4MF0pL2NOLGN1PShjaVsweDFdLWNrWzB4MV0pL2NOO2xldCBjWT0tY3UsY009Y3Y7Y1k8MHgwJiYoY1k9LWNZLGNNPS1jTSk7Y29uc3QgY3E9W2NrWzB4MF0rY3YqMS42LGNrWzB4MV0rY3UqMS42XSxjej1bY3FbMHgwXS1jdiowLjQzLGNxWzB4MV0tY3UqMC40M10sY1A9W2NxWzB4MF0rY3YqMC40MyxjcVsweDFdK2N1KjAuNDNdLGNmPVtdO2ZvcihsZXQgY0I9MHgwO2NCPD0weDg7Y0IrKyl7Y29uc3QgY2I9Y0IvMHg4Kk1hdGhbJ1BJJ10vMHgyO2NmW0NuKDB4MmIzKV0oW2N6WzB4MF0rKGNZKk1hdGhbQ24oMHg0YmYpXShjYikrY3YqTWF0aFsnc2luJ10oY2IpKSowLjg2LGN6WzB4MV0rKGNNKk1hdGhbQ24oMHg0YmYpXShjYikrY3UqTWF0aFtDbigweDY2NyldKGNiKSkqMC44Nl0pO31oRFtDbigweDI5YSldW0NuKDB4MmE3KV1bQ24oMHgyYjMpXSh7J2dhcCc6W2N6LGNQXSwnbGVhZic6W2N6LFtjelsweDBdK2NZKjAuODYsY3pbMHgxXStjTSowLjg2XV0sJ2FyYyc6Y2Z9KTt9fX19cmV0dXJuIHVbQ24oMHgzNTcpXVtDbigweDNiOSldKChjZCxjQyk9Pntjb25zdCBDdD1DbjtjZFsnbm8nXT1jQysweDEsY2RbJ2lkJ109J1cnK1N0cmluZyhjQysweDEpWydwYWRTdGFydCddKDB4MiwnMCcpO2NvbnN0IGNUPWNkWydkZXNpcmVkQmVkcyddIT09dW5kZWZpbmVkP2NkWydkZXNpcmVkQmVkcyddKyhjZFsna25lZUJlZCddfHwweDApOklrPT09Q3QoMHgyZWUpP0kzW2NkWyd0J11dW0N0KDB4MzE1KV06SWkoY2RbQ3QoMHgyMTMpXS0oY2RbQ3QoMHg0MDMpXXx8MHgwKSxjZFsndCddKSsoY2RbQ3QoMHg1MWQpXXx8MHgwKSxjbz1jZFtDdCgweDU1NSldW0N0KDB4MmE2KV0oY3c9PmN3WydrJ109PT0nYmVkJylbQ3QoMHg2NjEpXSsoY2RbQ3QoMHg1MWQpXXx8MHgwKTtjZFtDdCgweDQ2MyldWydtaXgnXT1jbyE9PWNUO2lmKGNkW0N0KDB4NTFkKV0mJklrPT09Q3QoMHg1MzQpKWNkW0N0KDB4M2EyKV09Y289PT0weDE\/J2EnOmNvPT09MHgyPydiJzonYyc7Y2RbJ29rJ109STYoY2QpO30pLHU7fWZ1bmN0aW9uIGhUKHU9IVtdKXtjb25zdCBDRD1lSjtpZighaDApaDUoKTtpZihJTil7aDcoKTtyZXR1cm47fUllPUl2W0NEKDB4NjYxKV0\/aEMoKTpoZCgpO0lrPT09Q0QoMHg1MzQpJiYhaDAmJiFyRiYmSWVbJ3JlZ2lvbnMnXVtDRCgweDY2MSldJiZJZVtDRCgweDM1NyldW0NEKDB4NjYxKV0hPT1JN1tDRCgweDMyYSldJiYoSTdbQ0QoMHgzMmEpXT1JZVsncmVnaW9ucyddWydsZW5ndGgnXSxyM1tDRCgweDMyYSldJiZyM1tDRCgweDMyYSldKCkpO2hCKCk7aWYodSYmIW1hdGNoTWVkaWEoQ0QoMHg2MWYpKVtDRCgweDU4YildKXtyZz0weDAscnQ9cGVyZm9ybWFuY2VbQ0QoMHgyNTYpXSgpO2lmKCFyRClyRD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaGIpO31lbHNlIHJnPTB4MSxoNygpO31jb25zdCBobz11PT57Y29uc3QgQ1M9ZUosWT1yMVtDUygweDQzMildKCk7bGV0IGhEPXVbJ2NsaWVudFgnXS1ZW0NTKDB4NTI5KV0saFM9dVsnY2xpZW50WSddLVlbQ1MoMHg1ZWYpXSxjMD0oaEQtcnkpL3JSLGMxPShoUy1yeCkvclIsYzI9bnVsbDtjb25zdCBjMz11W0NTKDB4NjUyKV09PT1DUygweDJhZik\/MHgxNjoweGM7aWYoSXZbQ1MoMHg2NjEpXSl7Y29uc3QgYzQ9SUUoSXZbMHgxXSxJdlsweDFdW0NTKDB4NDRiKV0pO2lmKE1hdGhbQ1MoMHg0NzUpXShjNFsweDBdLWMwLGM0WzB4MV0tYzEpKnJSPGMzKzB4NilyZXR1cm57J3QnOid3JywneCc6YzAsJ3knOmMxfTtjMj1JdltDUygweDJiNSldKGM3PT57Y29uc3QgVDA9Q1MsYzg9SVUoYzcsW2MwLGMxXSk7cmV0dXJuIElXKGM4WzB4MF0sYzhbMHgxXSxjN1tUMCgweDNjNCldKTt9KTtpZighYzIpcmV0dXJueyd0JzpDUygweDJmNiksJ3gnOmMwLCd5JzpjMX07Y29uc3QgYzU9SVUoYzIsW2MwLGMxXSk7SXMoYzIpLGMwPWM1WzB4MF0sYzE9YzVbMHgxXSxoRD1yeStjMCpyUixoUz1yeCtjMSpyUjtjb25zdCBjNj1odyhoRCxoUyxjMCxjMSxjMyk7cmV0dXJuIGM2W0NTKDB4NWU2KV09YzIsYzY7fXJldHVybiBodyhoRCxoUyxjMCxjMSxjMyk7fSxodz0odSxZLGhELGhTLGMwKT0+e2NvbnN0IFQxPWVKO2lmKCFJdltUMSgweDY2MSldKXtmb3IobGV0IGMxPTB4MDtjMTxJQVsnbGVuZ3RoJ107YzErKylpZihNYXRoW1QxKDB4NDc1KV0oaDIoSUFbYzFdWzB4MF0pLXUsaDMoSUFbYzFdWzB4MV0pLVkpPGMwKXJldHVybnsndCc6J3YnLCdpJzpjMSwneCc6aEQsJ3knOmhTfTt9aWYoSWUmJiFJdltUMSgweDY2MSldKXtmb3IoY29uc3QgYzIgb2YgSWVbVDEoMHgxYmEpXSlpZihjMltUMSgweDY2MCldJiZNYXRoWydoeXBvdCddKGgyKGMyWyd4J10pLXUsaDMoYzJbJ3knXSktWSk8YzArMHg0KXJldHVybnsndCc6J2UnLCd4JzpoRCwneSc6aFN9O31mb3IoY29uc3QgYzMgb2YgSVopaWYoTWF0aFsnaHlwb3QnXShoMihjM1sneCddKS11LGgzKGMzWyd5J10pLVkpPGMwKXJldHVybnsndCc6J3MnLCdzJzpjMywneCc6aEQsJ3knOmhTfTtmb3IoY29uc3QgYzQgb2YgRCgpKWlmKGhEPj1jNFsweDBdJiZoRDw9YzRbMHgwXStTKGM0KSYmaFM+PWM0WzB4MV0mJmhTPD1jNFsweDFdK0kwKGM0KSlyZXR1cm57J3QnOidjJywnYyc6YzQsJ3gnOmhELCd5JzpoU307aWYoIUl2W1QxKDB4NjYxKV0pZm9yKGxldCBjNT0weDA7YzU8SThbJ2xlbmd0aCddO2M1Kyspe2NvbnN0IGM2PUk4W2M1XTtpZihoRD49YzZbMHgwXSYmaEQ8PWM2WzB4Ml0mJmhTPj1jNlsweDFdJiZoUzw9YzZbMHgzXSlyZXR1cm57J3QnOidiJywnaSc6YzUsJ3gnOmhELCd5JzpoU307fWlmKEk3Wyd3aW4nXT09PVQxKDB4NWM4KSYmSWUmJiFJdltUMSgweDY2MSldKXtmb3IobGV0IGM4PTB4MDtjODxJZVtUMSgweDU1NyldW1QxKDB4NjYxKV07YzgrKyl7Y29uc3QgYzk9SWVbVDEoMHg1NTcpXVtjOF07aWYoTWF0aFtUMSgweDQ3NSldKGgyKChjOVsweDBdK2M5WzB4Ml0pLzB4MiktdSxoMygoYzlbMHgxXStjOVsweDNdKS8weDIpLVkpPGMwKzB4MilyZXR1cm57J3QnOid3eCcsJ2knOmM4LCd4JzpoRCwneSc6aFN9O31sZXQgYzc9bnVsbDtmb3IobGV0IGNJPTB4MDtjSTxJQVtUMSgweDY2MSldO2NJKyspe2NvbnN0IGNyPUlBW2NJXSxjaD1JQVsoY0krMHgxKSVJQVtUMSgweDY2MSldXSxjYz1jaFsweDBdLWNyWzB4MF0sY2s9Y2hbMHgxXS1jclsweDFdLGNpPU1hdGhbVDEoMHg0NzUpXShjYyxjayl8fDB4MSxjTj1NYXRoWydtYXgnXSgwLjYsTWF0aFtUMSgweDQzYyldKGNpLTAuNixNYXRoW1QxKDB4NDcyKV0oKChoRC1jclsweDBdKSpjYysoaFMtY3JbMHgxXSkqY2spL2NpKjB4MikvMHgyKSksY3Y9Y3JbMHgwXStjYy9jaSpjTixjdT1jclsweDFdK2NrL2NpKmNOLGNZPU1hdGhbVDEoMHg0NzUpXShoRC1jdixoUy1jdSk7aWYoY1k8MS4yJiYoIWM3fHxjWTxjN1snZCddKSljNz17J2QnOmNZLCd3JzpbY3YtY2MvY2kqMC42LGN1LWNrL2NpKjAuNixjditjYy9jaSowLjYsY3UrY2svY2kqMC42XX07fWlmKGM3KXJldHVybnsndCc6J3duJywndyc6YzdbJ3cnXSwneCc6aEQsJ3knOmhTfTt9aWYoSWUpZm9yKGNvbnN0IGNNIG9mIEllW1QxKDB4MzU3KV0pe2NvbnN0IFtjcSxjel09Y01bJ2xwJ118fFtjTVsnY3gnXSxjTVsnY3knXV07aWYoTWF0aFtUMSgweDNhZCldKGhELWNxKTwxLjYmJk1hdGhbJ2FicyddKGhTLWN6KTwxLjIpcmV0dXJueyd0JzoncicsJ3InOmNNLCd4JzpoRCwneSc6aFN9O31yZXR1cm57J3QnOklXKGhELGhTKT8naW4nOlQxKDB4MmY2KSwneCc6aEQsJ3knOmhTfTt9LGhhPXU9Pk1hdGhbJ3JvdW5kJ10odSoweDIpLzB4Mixocz0odSxZLGhEKT0+TWF0aFtlSigweDQ1MSldKFksTWF0aFtlSigweDQzYyldKGhELHUpKSxoVj11PT57Y29uc3QgVDI9ZUosWT11W1QyKDB4NjYxKV07Zm9yKGxldCBoRD0weDA7aEQ8WTtoRCsrKXtjb25zdCBoUz11W2hEXSxjMD11WyhoRCsweDEpJVldO2lmKE1hdGhbVDIoMHg0NzUpXShjMFsweDBdLWhTWzB4MF0sYzBbMHgxXS1oU1sweDFdKTwweDQpcmV0dXJuIVtdO2ZvcihsZXQgYzE9aEQrMHgyO2MxPFk7YzErKyl7aWYoaEQ9PT0weDAmJmMxPT09WS0weDEpY29udGludWU7Y29uc3QgYzI9dVtjMV0sYzM9dVsoYzErMHgxKSVZXSxjND1oU1sweDFdPT09YzBbMHgxXSxjNT1jMlsweDFdPT09YzNbMHgxXTtpZihjND09PWM1KXtpZihjNCYmaFNbMHgxXT09PWMyWzB4MV0mJk1hdGhbVDIoMHg0NTEpXShNYXRoW1QyKDB4NDNjKV0oaFNbMHgwXSxjMFsweDBdKSxNYXRoW1QyKDB4NDNjKV0oYzJbMHgwXSxjM1sweDBdKSk8PU1hdGhbVDIoMHg0M2MpXShNYXRoW1QyKDB4NDUxKV0oaFNbMHgwXSxjMFsweDBdKSxNYXRoW1QyKDB4NDUxKV0oYzJbMHgwXSxjM1sweDBdKSkpcmV0dXJuIVtdO2lmKCFjNCYmaFNbMHgwXT09PWMyWzB4MF0mJk1hdGhbVDIoMHg0NTEpXShNYXRoW1QyKDB4NDNjKV0oaFNbMHgxXSxjMFsweDFdKSxNYXRoW1QyKDB4NDNjKV0oYzJbMHgxXSxjM1sweDFdKSk8PU1hdGhbVDIoMHg0M2MpXShNYXRoWydtYXgnXShoU1sweDFdLGMwWzB4MV0pLE1hdGhbVDIoMHg0NTEpXShjMlsweDFdLGMzWzB4MV0pKSlyZXR1cm4hW107Y29udGludWU7fWNvbnN0IFtjNixjNyxjOCxjOV09YzQ\/W2hTLGMwLGMyLGMzXTpbYzIsYzMsaFMsYzBdO2lmKGM4WzB4MF0+PU1hdGhbVDIoMHg0M2MpXShjNlsweDBdLGM3WzB4MF0pJiZjOFsweDBdPD1NYXRoW1QyKDB4NDUxKV0oYzZbMHgwXSxjN1sweDBdKSYmYzZbMHgxXT49TWF0aFtUMigweDQzYyldKGM4WzB4MV0sYzlbMHgxXSkmJmM2WzB4MV08PU1hdGhbVDIoMHg0NTEpXShjOFsweDFdLGM5WzB4MV0pKXJldHVybiFbXTt9fXJldHVybiEhW107fSxoRT11PT57Y29uc3QgVDM9ZUosWT11W1QzKDB4NjYxKV0saEQ9KGhTLGMwLGMxKT0+KGMwWzB4MF0taFNbMHgwXSkqKGMxWzB4MV0taFNbMHgxXSktKGMwWzB4MV0taFNbMHgxXSkqKGMxWzB4MF0taFNbMHgwXSk7Zm9yKGxldCBoUz0weDA7aFM8WTtoUysrKXtjb25zdCBjMD11W2hTXSxjMT11WyhoUysweDEpJVldO2lmKE1hdGhbVDMoMHg0NzUpXShjMVsweDBdLWMwWzB4MF0sYzFbMHgxXS1jMFsweDFdKTwweDQpcmV0dXJuIVtdO2ZvcihsZXQgYzI9aFMrMHgyO2MyPFk7YzIrKyl7aWYoaFM9PT0weDAmJmMyPT09WS0weDEpY29udGludWU7Y29uc3QgYzM9dVtjMl0sYzQ9dVsoYzIrMHgxKSVZXTtpZihoRChjMCxjMSxjMykqaEQoYzAsYzEsYzQpPDB4MCYmaEQoYzMsYzQsYzApKmhEKGMzLGM0LGMxKTwweDApcmV0dXJuIVtdO319cmV0dXJuISFbXTt9LGhVPSh1LFksaEQpPT57Y29uc3QgVDQ9ZUosaFM9SUFbJ2xlbmd0aCddLGMwPUlBW1Q0KDB4MzdmKV0oYzQ9PmM0W1Q0KDB4MjcwKV0oKSksYzE9KHUtMHgxK2hTKSVoUyxjMj0odSsweDEpJWhTO1k9aHMoaGEoWSksMHgxLFYtMHgxKSxoRD1ocyhoYShoRCksMHgxLEUtMHgxKTtpZihJTz09PVQ0KDB4MmNmKXx8SU89PT1UNCgweDNmMykpe2MwW3VdPVtZLGhEXTtpZighaEUoYzApfHxEKClbVDQoMHg2NjgpXShjND0+IUlGKGM0LGMwKSkpcmV0dXJuIVtdO3JldHVybiBJQT1jMCwhIVtdO31jb25zdCBjMz1jMFt1XVsweDFdPT09YzBbYzJdWzB4MV07YzBbdV09W1ksaERdO2MzPyhjMFtjMl1bMHgxXT1oRCxjMFtjMV1bMHgwXT1ZKTooYzBbYzJdWzB4MF09WSxjMFtjMV1bMHgxXT1oRCk7aWYoIWhWKGMwKXx8RCgpW1Q0KDB4NjY4KV0oYzQ9PiFJRihjNCxjMCkpKXJldHVybiFbXTtyZXR1cm4gSUE9YzAsISFbXTt9LGhYPXU9Pntjb25zdCBUNT1lSixZPXIxW1Q1KDB4NDMyKV0oKTtyZXR1cm5baHMoaGEoKHVbVDUoMHg2NzQpXS1ZW1Q1KDB4NTI5KV0tcnkpL3JSKSwweDEsVi0weDEpLGhzKGhhKCh1W1Q1KDB4MzllKV0tWVtUNSgweDVlZildLXJ4KS9yUiksMHgxLEUtMHgxKV07fSxoVz11PT57Y29uc3QgVDY9ZUo7aWYoSUkpe2lmKHVbVDYoMHgyNjMpXSl1W1Q2KDB4MmU0KV0oKTtjb25zdCBoRD1oWCh1KTtpZighSUlbJ3AwJ10pe0lJWydwMCddPWhELGg3KCk7cmV0dXJuO31jb25zdCBoUz1bTWF0aFsnbWluJ10oSUlbJ3AwJ11bMHgwXSxoRFsweDBdKSxNYXRoW1Q2KDB4NDNjKV0oSUlbJ3AwJ11bMHgxXSxoRFsweDFdKSxNYXRoW1Q2KDB4NDUxKV0oSUlbJ3AwJ11bMHgwXSxoRFsweDBdKSxNYXRoW1Q2KDB4NDUxKV0oSUlbJ3AwJ11bMHgxXSxoRFsweDFdKV07SUk9bnVsbCxyMFtUNigweDNhNildW1Q2KDB4MWQ2KV09Jyc7aWYoaFNbMHgyXS1oU1sweDBdPj0weDEmJmhTWzB4M10taFNbMHgxXT49MHgxKXJvKCksSThbVDYoMHgyYjMpXShoUyksSUcoSVEoKSksckk9JycsaFQoISFbXSk7ZWxzZSBoVCgpO3JldHVybjt9aWYoSU4pe2lmKHVbJ2NhbmNlbGFibGUnXSl1WydwcmV2ZW50RGVmYXVsdCddKCk7Y29uc3QgYzA9aFgodSksYzE9SU5bVDYoMHg0NzYpXVsweDBdO2lmKGMxJiZJTltUNigweDQ3NildWydsZW5ndGgnXT49MHgzJiZNYXRoW1Q2KDB4NDc1KV0oaDIoYzFbMHgwXSktaDIoYzBbMHgwXSksaDMoYzFbMHgxXSktaDMoYzBbMHgxXSkpPDB4ZSl7SXkoKTtyZXR1cm47fWlmKCFJTltUNigweDQ3NildWydzb21lJ10oYzI9PmMyWzB4MF09PT1jMFsweDBdJiZjMlsweDFdPT09YzBbMHgxXSkpSU5bVDYoMHg0NzYpXVtUNigweDJiMyldKGMwKTtoNygpO3JldHVybjt9Y29uc3QgWT1obyh1KTtpZihZWyd0J109PT1UNigweDJmNikpcmV0dXJuO2lmKHVbVDYoMHgyNjMpXSYmWVsndCddIT09J2luJyl1WydwcmV2ZW50RGVmYXVsdCddKCk7cm8oKSxoMD17J2gnOlksJ3N4Jzp1W1Q2KDB4Njc0KV0sJ3N5Jzp1W1Q2KDB4MzllKV0sJ21vdmVkJzohW10sJ294JzooWVsnYyddfHxJcHx8WzB4MCwweDBdKVsweDBdLVlbJ3gnXSwnb3knOihZWydjJ118fElwfHxbMHgwLDB4MF0pWzB4MV0tWVsneSddfTt0cnl7cjFbVDYoMHgzOTQpXSh1W1Q2KDB4NTYyKV0pO31jYXRjaChjMil7fX07cjFbZUooMHgxZmUpXShlSigweDM3OSksaFcpLHIxW2VKKDB4MWZlKV0oJ3RvdWNoc3RhcnQnLHU9Pntjb25zdCBUNz1lSjtpZighdVsndG91Y2hlcyddWzB4MF0pcmV0dXJuO2NvbnN0IFk9aG8oeydjbGllbnRYJzp1Wyd0b3VjaGVzJ11bMHgwXVtUNygweDY3NCldLCdjbGllbnRZJzp1W1Q3KDB4NDM3KV1bMHgwXVtUNygweDM5ZSldLCdwb2ludGVyVHlwZSc6VDcoMHgyYWYpfSk7aWYoWVsndCddPT09J3YnfHxZWyd0J109PT0ncyd8fFlbJ3QnXT09PSdjJ3x8WVsndCddPT09J2UnfHxZWyd0J109PT0ndycpdVtUNygweDJlNCldKCk7fSx7J3Bhc3NpdmUnOiFbXX0pLHIxW2VKKDB4MWZlKV0oJ2RibGNsaWNrJywoKT0+e2lmKElOKUl5KCk7fSksd2luZG93WydhZGRFdmVudExpc3RlbmVyJ10oZUooMHgxYzgpLHU9Pntjb25zdCBUOD1lSjtpZihJSSYmdVtUOCgweDU5MyldPT09VDgoMHg0NzQpKXtJST1udWxsLHIwW1Q4KDB4M2E2KV1bVDgoMHgxZDYpXT0nJyxoVCgpO3JldHVybjt9SU4mJnVbJ2tleSddPT09VDgoMHg0NzQpJiYoSU49bnVsbCxyMFsnc3R5bGUnXVtUOCgweDFkNildPScnLEl4KFQ4KDB4NjNjKSkscjZbVDgoMHg1NGEpXShUOCgweDMzYikpW1Q4KDB4M2I5KV0oWT0+WVtUOCgweDIxMSldKFQ4KDB4NjQ4KSxZW1Q4KDB4MjdhKV1bJ2snXT09PVQ4KDB4NjNjKSkpLGhUKCEhW10pKTt9KSxyMVtlSigweDFmZSldKGVKKDB4MmNlKSx1PT57Y29uc3QgVDk9ZUo7aWYoSUkpe0lJW1Q5KDB4NDRjKV09aFgodSksaDcoKTtyZXR1cm47fWlmKElOKXtJTltUOSgweDQ0YyldPWhYKHUpLGg3KCk7cmV0dXJuO31pZighaDApe2NvbnN0IGMxPWhvKHUpLGMyPXJTJiZyU1sndCddPT09YzFbJ3QnXSYmclNbJ2knXT09PWMxWydpJ10mJnJTWydzJ109PT1jMVsncyddJiZyU1snciddPT09YzFbJ3InXSYmKCFjMVsndyddfHxyU1sndyddJiZyU1sndyddWzB4MF09PT1jMVsndyddWzB4MF0mJnJTWyd3J11bMHgxXT09PWMxWyd3J11bMHgxXSk7IWMyJiYoclM9YzEscjFbVDkoMHgzYTYpXVtUOSgweDFkNildPWMxWyd0J109PT0ndid8fGMxWyd0J109PT0ncyd8fGMxWyd0J109PT0nYyd8fGMxWyd0J109PT0nZSd8fGMxWyd0J109PT0ndyc\/VDkoMHgzOGEpOmMxWyd0J109PT0naW4nP1Q5KDB4MWM2KTpjMVsndCddPT09J2InfHxjMVsndCddPT09J3InfHxjMVsndCddPT09J3d4Jz9UOSgweDRkYyk6YzFbJ3QnXT09PSd3bic\/VDkoMHgyMDkpOlQ5KDB4NDJmKSxoNygpKTtyZXR1cm47fWlmKE1hdGhbVDkoMHg0NzUpXSh1W1Q5KDB4Njc0KV0taDBbJ3N4J10sdVsnY2xpZW50WSddLWgwWydzeSddKT4weDUpaDBbJ21vdmVkJ109ISFbXTtpZighaDBbVDkoMHg2MmYpXSlyZXR1cm47Y29uc3QgWT1yMVsnZ2V0Qm91bmRpbmdDbGllbnRSZWN0J10oKSxoRD1oMFsnaCddO2xldCBoUz0odVsnY2xpZW50WCddLVlbVDkoMHg1MjkpXS1yeSkvclIsYzA9KHVbVDkoMHgzOWUpXS1ZW1Q5KDB4NWVmKV0tcngpL3JSO2lmKGhEW1Q5KDB4NWU2KV0pe2NvbnN0IGMzPUlVKGhEW1Q5KDB4NWU2KV0sW2hTLGMwXSk7aFM9YzNbMHgwXSxjMD1jM1sweDFdLElzKGhEWydwYXJ0J10pO31yMVtUOSgweDNhNildW1Q5KDB4MWQ2KV09J2dyYWJiaW5nJztpZihoRFsndCddPT09J3cnKXtjb25zdCBjND1JdlsweDBdW1Q5KDB4M2RlKV0sYzU9aFMtYzRbMHgwXSxjNj1jMC1jNFsweDFdLGM3PWhzKE1hdGhbVDkoMHg0NzIpXShNYXRoW1Q5KDB4MjQwKV0oYzYsYzUpKjB4YjQvTWF0aFsnUEknXS8weDUpKjB4NSwtMHgzYywweDNjKSxjOD1ocyhNYXRoW1Q5KDB4NDcyKV0oTWF0aFtUOSgweDQ3NSldKGM1LGM2KS8weDIpKjB4MiwweDEwLDB4MjIpOyhjNyE9PUk3W1Q5KDB4MzRiKV18fGM4IT09STdbVDkoMHgyOTEpXSkmJihJN1tUOSgweDM0YildPWM3LEk3W1Q5KDB4MjkxKV09YzgscjNbVDkoMHgzNGIpXSgpLHIzW1Q5KDB4MjkxKV0oKSxJbCgpLEluKCksckk9JycsaEgoKSk7cmV0dXJuO31pZihoRFsndCddPT09J2UnKUk3WydlbnRyeVBvcyddPVtoUyxjMF0sSUcoSVEoKSksckk9JycsaEgoKTtlbHNle2lmKGhEWyd0J109PT0ndicpaFUoaERbJ2knXSxoUyxjMCkmJihJRyhJUSgpKSxyST0nJyxoSCgpKTtlbHNle2lmKGhEWyd0J109PT0ncycpe2NvbnN0IGM5PWhhKGhTKSxjST1oYShjMCk7SVcoYzksY0kpJiYoaERbJ3MnXVsneCddPWM5LGhEWydzJ11bJ3knXT1jSSxoSCgpKTt9ZWxzZXtpZihoRFsndCddPT09J2MnKXtjb25zdCBjcj1baGEoaFMraDBbJ294J10pLGhhKGMwK2gwWydveSddKSxoRFsnYyddWzB4Ml0saERbJ2MnXVsweDNdLGhEWydjJ11bMHg0XSxoRFsnYyddWzB4NV1dW1Q5KDB4MmE2KV0oY2M9PmNjIT09dW5kZWZpbmVkKSxjaD1EKClbVDkoMHgyYTYpXShjYz0+Y2MhPT1oRFsnYyddKTtJRihjcikmJmNoW1Q5KDB4NDM1KV0oY2M9PiFJMShjcixjYykpJiYoaERbJ2MnXVsweDBdPWNyWzB4MF0saERbJ2MnXVsweDFdPWNyWzB4MV0saEgoKSk7fX19fWlmKGhEW1Q5KDB4NWU2KV0pSVYoaERbVDkoMHg1ZTYpXSk7fSk7Y29uc3QgaEY9T1tlSigweDVmMCldKGVKKDB4MzI0KSksaEc9KCk9PntoRlsnaGlkZGVuJ109ISFbXTt9LGhMPSh1LFkpPT57Y29uc3QgVEk9ZUo7aEZbVEkoMHgyNzkpXT0nJztjb25zdCBoRD1kb2N1bWVudFtUSSgweDYzNCldKFRJKDB4MjBlKSk7aERbVEkoMHgyNzkpXT1hW1RJKDB4NGU2KV0saEZbVEkoMHg1Y2EpXShoRCk7Y29uc3QgaFM9KGMxLGMyLGMzKT0+e2NvbnN0IFRyPVRJLGM0PWRvY3VtZW50W1RyKDB4NjM0KV0oVHIoMHgzM2IpKTtjNFsndHlwZSddPVRyKDB4MzNiKSxjNFsndGV4dENvbnRlbnQnXT1jMSxjNFtUcigweDIxMSldKCdhcmlhLXByZXNzZWQnLCEhYzMpLGM0W1RyKDB4MWZlKV0oJ2NsaWNrJyxjNT0+e2M1WydzdG9wUHJvcGFnYXRpb24nXSgpLGhHKCksYzIoKTt9KSxoRlsnYXBwZW5kJ10oYzQpO307aWYoSTdbVEkoMHg0OWIpXSE9PSdzY2lzc29yJyloUyhhW1RJKDB4MzNlKV0sKCk9Pntjb25zdCBUaD1USTtybygpLEk3W1RoKDB4NTg2KV09SXBbMHg2XT9UaCgweDI2ZSk6VGgoMHg0NDIpLHIzW1RoKDB4NjQ5KV0mJnIzW1RoKDB4NjQ5KV0oKSxyST0nJztpZihJdltUaCgweDY2MSldKUlKKCk7ZWxzZXtpZihJaz09PVRoKDB4NTM0KSlyTigpO2Vsc2UgSUcoSVEoKSk7fWhUKCEhW10pO30pO2Zvcihjb25zdCBjMSBvZltUSSgweDQ4ZCksVEkoMHgzZmUpLFRJKDB4MmVmKV0paFMoYVtUSSgweDQ5YikrYzFbMHgwXVtUSSgweDQzNildKCkrYzFbVEkoMHgyNzApXSgweDEpXSwoKT0+e2NvbnN0IFRjPVRJLGMyPVsuLi5PW1RjKDB4NTRhKV0oVGMoMHgzM2IpKV1bVGMoMHgyYjUpXShjMz0+YzNbVGMoMHgyN2EpXVsnayddPT09YzEmJiFjM1tUYygweDI3YSldWyd0J10pO2lmKGMyKWMyW1RjKDB4NDQ2KV0oKTt9LEk3W1RJKDB4NDliKV09PT1jMSk7aEZbVEkoMHg1NmUpXT0hW107Y29uc3QgYzA9cjBbVEkoMHg0MzIpXSgpO2hGW1RJKDB4M2E2KV1bJ2xlZnQnXT1NYXRoW1RJKDB4NDUxKV0oMHg4LE1hdGhbVEkoMHg0M2MpXShjMFsnd2lkdGgnXS1oRltUSSgweDU3YyldLTB4OCx1KSkrJ3B4JyxoRlsnc3R5bGUnXVtUSSgweDVlZildPU1hdGhbVEkoMHg0NTEpXSgweDgsTWF0aFsnbWluJ10oYzBbVEkoMHg2MjUpXS1oRlsnb2Zmc2V0SGVpZ2h0J10tMHg4LFkpKSsncHgnO307ZG9jdW1lbnRbZUooMHgxZmUpXShlSigweDM3OSksdT0+e2NvbnN0IFRrPWVKO2lmKCFoRltUaygweDU2ZSldJiYhaEZbVGsoMHg1YWMpXSh1W1RrKDB4NGY0KV0pKWhHKCk7fSwhIVtdKTtjb25zdCBoSz0oKT0+e2NvbnN0IFRpPWVKO2lmKCFoMClyZXR1cm47Y29uc3Qge2g6dSxtb3ZlZDpZLHN4OmhELHN5OmhTfT1oMDtoMD1udWxsO2lmKHVbVGkoMHg1ZTYpXSlJcyh1WydwYXJ0J10pO1kmJnVbJ3QnXT09PSd3JyYmKElKKCksaDUoKSxoVCgpKTshWSYmKHVbJ3QnXT09PSd2J3x8dVsndCddPT09J2MnfHx1Wyd0J109PT0nZSd8fHVbJ3QnXT09PSd3JykmJihyZFtUaSgweDIyYildKCkscmJbVGkoMHg0MjkpXT0hcmRbVGkoMHg2NjEpXSk7WSYmdVsndCddPT09J3YnJiYoaDUoKSxoNygpKTtpZighWSYmdVsndCddPT09J2InKXtJOFtUaSgweDUzMildKHVbJ2knXSwweDEpLElHKElRKCkpLHJJPScnLGhUKCEhW10pO3JldHVybjt9aWYoIVkmJnVbJ3QnXT09PSdjJyYmdVsnYyddPT09SXApe2NvbnN0IGMwPXIwW1RpKDB4NDMyKV0oKTtoTChoRC1jMFtUaSgweDUyOSldKzB4OCxoUy1jMFtUaSgweDVlZildKzB4OCk7cmV0dXJuO31pZighWSYmdVsndCddPT09J3InKXt1WydyJ11bVGkoMHgzYzUpXVtUaSgweDJjMCldPSh1WydyJ11bVGkoMHgzYzUpXVtUaSgweDJjMCldfHwweDApKzB4MSxyST0nJyxoVCgpO3JldHVybjt9aWYoIVkmJnVbJ3QnXT09PSd3eCcpe2NvbnN0IGMxPUllW1RpKDB4NTU3KV1bdVsnaSddXSxjMj0oYzFbMHgwXStjMVsweDJdKS8weDIsYzM9KGMxWzB4MV0rYzFbMHgzXSkvMHgyO0k5PUk5W1RpKDB4MmE2KV0oYzQ9Pk1hdGhbVGkoMHg0NzUpXSgoYzRbMHgwXStjNFsweDJdKS8weDItYzIsKGM0WzB4MV0rYzRbMHgzXSkvMHgyLWMzKT4wLjMpLGhUKCk7cmV0dXJuO31pZighWSYmdVsndCddPT09J3duJyl7STlbVGkoMHgyYjMpXSh1Wyd3J10pLGhUKCk7cmV0dXJuO31pZighWSl7aWYodVsndCddPT09J3MnJiZJWltUaSgweDY2MSldPjB4MSlJaz09PVRpKDB4MmVlKSYmdVsncyddWyd0J10mJkk3W3VbJ3MnXVsndCddXT4weDAmJihJN1t1WydzJ11bJ3QnXV0tLSxyM1t1WydzJ11bJ3QnXV0oKSksSVpbVGkoMHg1MzIpXShJWltUaSgweDVlYildKHVbJ3MnXSksMHgxKSxJaz09PVRpKDB4NTM0KSYmIUl2W1RpKDB4NjYxKV0mJihJN1sndW5pdHMnXT1JWltUaSgweDY2MSldLEk3W1RpKDB4NWMyKV09bnVsbCxyM1tUaSgweDMyYSldKCkpLHVbVGkoMHg1ZTYpXSYmKHVbJ3BhcnQnXVtUaSgweDMyYSldPUlaWydsZW5ndGgnXSxJVih1WydwYXJ0J10pLEk3W1RpKDB4MzJhKV09SXZbVGkoMHg0YjApXSgoYzQsYzUpPT5jNCtjNVtUaSgweDMyYSldLDB4MCkscjNbVGkoMHgzMmEpXSgpKSxyST0nJyxoVCgpO2Vsc2V7aWYodVsndCddPT09J2luJyYmSVpbVGkoMHg2NjEpXTwweDE4KXtjb25zdCBjND17J2lkJzpJQisrLCd4JzpoYSh1Wyd4J10pLCd5JzpoYSh1Wyd5J10pfTtJaz09PSdwcm9nJyYmKGM0Wyd0J109J2InLEk3WydiJ10rKyxyM1snYiddKCkpLElaW1RpKDB4MmIzKV0oYzQpLElrPT09VGkoMHg1MzQpJiYhSXZbVGkoMHg2NjEpXSYmKEk3W1RpKDB4MzJhKV09SVpbJ2xlbmd0aCddLEk3W1RpKDB4NWMyKV09bnVsbCxyM1sndW5pdHMnXSgpKSx1W1RpKDB4NWU2KV0mJih1W1RpKDB4NWU2KV1bVGkoMHgzMmEpXT1JWltUaSgweDY2MSldLElWKHVbVGkoMHg1ZTYpXSksSTdbJ3VuaXRzJ109SXZbVGkoMHg0YjApXSgoYzUsYzYpPT5jNStjNltUaSgweDMyYSldLDB4MCkscjNbVGkoMHgzMmEpXSgpKSxyST0nJyxoVCgpO319fX07cjFbZUooMHgxZmUpXSgncG9pbnRlcnVwJyxoSykscjFbZUooMHgxZmUpXShlSigweDIwNSksKCk9PntoMD1udWxsO30pO2xldCBoaj0hW107Y29uc3QgaEg9KCk9PntpZihoailyZXR1cm47aGo9ISFbXSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pntoaj0hW10saFQoKTt9KTt9O09bJ3F1ZXJ5U2VsZWN0b3InXSgnLnBzLWNvbmZfX2RpbXRvZ2dsZTpub3QoLnBzLXBsYW5fX3VuZG8pJylbZUooMHgxZmUpXSgnY2xpY2snLCgpPT57aFQoISFbXSk7fSk7Y29uc3QgaFE9MHgzNGEsaGw9MHgyNTMsaG09MC40NSxoSj11PT4oTWF0aFsncm91bmQnXSh1KjB4NjQpLzB4NjQpWyd0b1N0cmluZyddKCksaG49dT0+e2NvbnN0IFROPWVKO2xldCBZPScnO2Zvcihjb25zdCBoRCBvZiBTdHJpbmcodSkpe2NvbnN0IGhTPWhEPT09J+KAkyc\/MHg5NjpoRFtUTigweDFmYyldKDB4MCk7aWYoVE4oMHgyZDQpWydpbmNsdWRlcyddKGhEKSlZKz0nXHg1YycraEQ7ZWxzZXtpZihoUzwweDIwfHxoUz4weDdlKVkrPSdceDVjJysoaFM8MHgxMDA\/aFM6MHgzZilbVE4oMHgyNzUpXSgweDgpW1ROKDB4NDkyKV0oMHgzLCcwJyk7ZWxzZSBZKz1oRDt9fXJldHVybiBZO307Y2xhc3MgaFJ7W2VKKDB4NWJkKV09W107W2VKKDB4MzczKV0odSxZLGhELGhTLGMwPTAuNCxjMT0weDApe2NvbnN0IFR2PWVKO3RoaXNbVHYoMHg1YmQpXVtUdigweDJiMyldKGMxK1R2KDB4MzI1KStjMCtUdigweDNkYSkraEoodSkrJ1x4MjAnK2hKKGhsLVkpK1R2KDB4NWZmKStoSihoRCkrJ1x4MjAnK2hKKGhsLWhTKStUdigweDRiNikpO31bZUooMHgzYzQpXSh1LFk9MC40LGhEPTB4MCl7Y29uc3QgVHU9ZUo7dGhpc1tUdSgweDViZCldW1R1KDB4MmIzKV0oaEQrVHUoMHgzMjUpK1krVHUoMHgzZGEpK3VbVHUoMHgzN2YpXSgoaFMsYzApPT5oSihoU1sweDBdKSsnXHgyMCcraEooaGwtaFNbMHgxXSkrJ1x4MjAnKyhjMD8nbCc6J20nKSlbVHUoMHgyNmEpXSgnXHgyMCcpKydceDIwcycpO31bZUooMHg0MzApXSh1LFksaEQse3NpemU6c2l6ZT0weDksYm9sZDpib2xkPSFbXSxhbGlnbjphbGlnbj0nbCcscm90OnJvdD0hW10sZzpnPTB4MH09e30pe2NvbnN0IFRZPWVKLGhTPVN0cmluZyhoRClbVFkoMHg2NjEpXSpzaXplKjAuNTIsYzA9YWxpZ249PT0nYyc\/aFMvMHgyOmFsaWduPT09J3InP2hTOjB4MCxjMT1yb3Q\/VFkoMHgzMWEpK2hKKHUpKydceDIwJytoSihobC1ZK2MwKi0weDEpOicxXHgyMDBceDIwMFx4MjAxXHgyMCcraEoodS1jMCkrJ1x4MjAnK2hKKGhsLVkpO3RoaXNbVFkoMHg1YmQpXVsncHVzaCddKFRZKDB4M2RkKSsoYm9sZD8weDI6MHgxKSsnXHgyMCcrc2l6ZStUWSgweDJjNykrZytUWSgweDUyYikrYzErVFkoMHgzZmMpK2huKGhEKStUWSgweDJjYSkpO31bZUooMHg0YWMpXSh1LFksaEQsaFMpe2NvbnN0IFRNPWVKO3RoaXNbVE0oMHg1YmQpXVtUTSgweDJiMyldKCdxXHgyMCcraEooaEQpK1RNKDB4MWNiKStoSihoUykrJ1x4MjAnK2hKKHUpKydceDIwJytoSihobC1ZLWhTKStUTSgweDI1YSkpO31bJ2RpbUgnXSh1LFksaEQsaFMsYzApe2NvbnN0IFRxPWVKO3RoaXNbVHEoMHgzNzMpXSh1LGhTLHUsaEQrMHgzLDAuMjUsaG0pLHRoaXNbVHEoMHgzNzMpXShZLGhTLFksaEQrMHgzLDAuMjUsaG0pLHRoaXNbVHEoMHgzNzMpXSh1LTB4MyxoRCxZKzB4MyxoRCwwLjM1KTtmb3IoY29uc3QgYzEgb2ZbdSxZXSl0aGlzW1RxKDB4MzczKV0oYzEtMi41LGhEKzIuNSxjMSsyLjUsaEQtMi41LDAuNyk7dGhpc1tUcSgweDQzMCldKCh1K1kpLzB4MixoRC0weDMsYzAseydzaXplJzoweDgsJ2FsaWduJzonYyd9KTt9W2VKKDB4NTMxKV0odSxZLGhELGhTLGMwLGMxPSFbXSl7Y29uc3QgVHo9ZUo7dGhpc1tUeigweDM3MyldKGhTLHUsaEQrMHgzLHUsMC4yNSxobSksdGhpc1snbGluZSddKGhTLFksaEQrMHgzLFksMC4yNSxobSksdGhpc1tUeigweDM3MyldKGhELHUtMHgzLGhELFkrMHgzLDAuMzUpO2Zvcihjb25zdCBjMiBvZlt1LFldKXRoaXNbVHooMHgzNzMpXShoRC0yLjUsYzIrMi41LGhEKzIuNSxjMi0yLjUsMC43KTtpZihjMSl0aGlzW1R6KDB4NDMwKV0oaEQrMHg2LCh1K1kpLzB4MisweDMsYzAseydzaXplJzoweDh9KTtlbHNlIHRoaXNbVHooMHg0MzApXShoRC0weDMsKHUrWSkvMHgyLGMwLHsnc2l6ZSc6MHg4LCdhbGlnbic6J2MnLCdyb3QnOiEhW119KTt9fWNvbnN0IGh5PXU9PlVpbnQ4QXJyYXlbZUooMHgzM2QpXSh1LFk9PllbZUooMHgxZmMpXSgweDApKTtmdW5jdGlvbiBoeCh1LFkpe2NvbnN0IFRBPWVKLGhEPVtdLGhTPVtdO2xldCBjMD0weDA7Y29uc3QgYzE9Yzg9Pntjb25zdCBUUD12LGM5PXR5cGVvZiBjOD09PVRQKDB4NDJlKT9oeShjOCk6Yzg7aERbVFAoMHgyYjMpXShjOSksYzArPWM5WydsZW5ndGgnXTt9LGMyPShjOCxjOSxjSSk9Pntjb25zdCBUZj12O2hTW2M4XT1jMCxjMShjOCtUZigweDYxMSkrYzkrJ1x4MGEnKSxjSSYmKGMxKCdzdHJlYW1ceDBhJyksYzEoY0kpLGMxKCdceDBhZW5kc3RyZWFtXHgwYScpKSxjMSgnZW5kb2JqXHgwYScpO307YzEoJyVQREYtMS40XHgwYScpO2NvbnN0IGMzPVk\/MHg2OjB4NSxjND11W1RBKDB4MzdmKV0oKGM4LGM5KT0+YzMrYzkqMHgyK1RBKDB4MjZkKSlbVEEoMHgyNmEpXSgnXHgyMCcpLGM1PVRBKDB4MzZjKSsoWT9UQSgweDI4Zik6JycpK1RBKDB4NTIzKTtjMigweDEsVEEoMHgxZWQpKSxjMigweDIsVEEoMHgyZTMpK2M0K1RBKDB4NTEyKSt1WydsZW5ndGgnXStUQSgweDUyMykpLGMyKDB4MyxUQSgweDVmNCkpLGMyKDB4NCxUQSgweDU5YikpO2lmKFkpYzIoMHg1LCc8PFx4MjAvVHlwZVx4MjAvWE9iamVjdFx4MjAvU3VidHlwZVx4MjAvSW1hZ2VceDIwL1dpZHRoXHgyMCcrWVsndyddK1RBKDB4NjRiKStZWydoJ10rVEEoMHgyZTcpK1lbVEEoMHgzZDApXVtUQSgweDY2MSldK1RBKDB4NTIzKSxZW1RBKDB4M2QwKV0pO3VbJ2ZvckVhY2gnXSgoYzgsYzkpPT57Y29uc3QgVHA9VEEsY0k9aHkoYzhbJ29wcyddW1RwKDB4MjZhKV0oJ1x4MGEnKSk7YzIoYzMrYzkqMHgyLFRwKDB4MmZjKStoUSsnXHgyMCcraGwrVHAoMHgyNWQpK2M1K1RwKDB4M2YwKSsoYzMrYzkqMHgyKzB4MSkrJ1x4MjAwXHgyMFJceDIwPj4nKSxjMihjMytjOSoweDIrMHgxLCc8PFx4MjAvTGVuZ3RoXHgyMCcrY0lbVHAoMHg2NjEpXStUcCgweDUyMyksY0kpO30pO2NvbnN0IGM2PWMwLGM3PWMzK3VbVEEoMHg2NjEpXSoweDI7YzEoVEEoMHgzOTUpK2M3K1RBKDB4NTJjKSk7Zm9yKGxldCBjOD0weDE7Yzg8Yzc7YzgrKyljMShTdHJpbmcoaFNbYzhdKVtUQSgweDQ5MildKDB4YSwnMCcpK1RBKDB4NDAwKSk7cmV0dXJuIGMxKFRBKDB4NWI5KStjNytUQSgweDU0ZikrYzYrVEEoMHg1NWMpKSxuZXcgQmxvYihoRCx7J3R5cGUnOlRBKDB4NTQ1KX0pO31oUlsncHJvdG90eXBlJ11bZUooMHgzNmYpXT1mdW5jdGlvbih1LFkpe2NvbnN0IFRaPWVKO3RoaXNbVFooMHg1YmQpXVtUWigweDJiMyldKFkrJ1x4MjBnXHgyMCcrdVtUWigweDM3ZildKChoRCxoUyk9PmhKKGhEWzB4MF0pKydceDIwJytoSihobC1oRFsweDFdKSsnXHgyMCcrKGhTPydsJzonbScpKVsnam9pbiddKCdceDIwJykrVFooMHgyMjUpKTt9O2Z1bmN0aW9uIGhnKCl7Y29uc3QgVE89ZUosdT1JZSxZPVtdLGhEPW5ldyBEYXRlKClbVE8oMHgzYmQpXShCP1RPKDB4MWNlKTpUTygweDM3NykpLGhTPWNDPT57Y29uc3QgVGU9VE8sY1Q9bmV3IGhSKCk7cmV0dXJuIFlbVGUoMHgyYjMpXShjVCksY1RbJ3RleHQnXShoUS8weDIsMHgxNDAsVGUoMHgzZTgpLHsnc2l6ZSc6MHgzMCwnYm9sZCc6ISFbXSwnYWxpZ24nOidjJywnZyc6MC45M30pLGNUW1RlKDB4NDMwKV0oMHgyMCwweDI4LFRlKDB4MzM3KSx7J3NpemUnOjB4YiwnYm9sZCc6ISFbXX0pLGNUW1RlKDB4NDMwKV0oaFEtMHgyMCwweDI4LGNDLHsnc2l6ZSc6MHhiLCdib2xkJzohIVtdLCdhbGlnbic6J3InfSksY1RbVGUoMHgzNzMpXSgweDIwLDB4MzAsaFEtMHgyMCwweDMwLDAuNiksY1Q7fSxjMj11LGMzPUl2W1RPKDB4NjYxKV0\/SXY6W251bGxdLGM0PUl2W1RPKDB4NjYxKV0\/SXZbVE8oMHg0ZjgpXShjQz0+Y0NbVE8oMHgzYzQpXVsnbWFwJ10oY1Q9PklFKGNDLGNUKSkpOklBLGM1PWM0W1RPKDB4MzdmKV0oY0M9PmNDWzB4MF0pLGM2PWM0WydtYXAnXShjQz0+Y0NbMHgxXSksYzc9TWF0aFsnbWluJ10oLi4uYzUpLGM4PU1hdGhbJ21heCddKC4uLmM1KSxjOT1NYXRoW1RPKDB4NDNjKV0oLi4uYzYpLGNJPU1hdGhbVE8oMHg0NTEpXSguLi5jNiksY3I9YzgtYzcsY2g9Y0ktYzksY2s9aFMoYVsnZG9jJ10rJzpceDIwJythW1RPKDB4NjYzKV0pLGNpPVsweDMyLDB4NGIsMHg2NCwweDdkLDB4OTYsMHhjOCwweGZhLDB4MTJjXVtUTygweDJiNSldKGNDPT5jcioweDNlOC9jQyoyLjgzNDY8PTB4MmRhJiZjaCoweDNlOC9jQyoyLjgzNDY8PTB4MWI4KXx8MHgxOTAsY049MHgzZTgvY2kqMi44MzQ2LGN2PTB4MzgrKDB4MmQwLWNyKmNOKS8weDIsY3U9MHg1MCsoMHgxYjgtY2gqY04pLzB4MixjWT1jQz0+W2N2KyhjQ1sweDBdLWM3KSpjTixjdSsoY0NbMHgxXS1jOSkqY05dO2xldCBjTT1udWxsO2NvbnN0IGNxPWNDPT5jWShjTT9JRShjTSxjQyk6Y0MpO2NrW1RPKDB4NDMwKV0oMHgyMCwweDQ0LGFbVE8oMHg2NjMpXStUTygweDU1OSkrY2kseydzaXplJzoweDksJ2JvbGQnOiEhW119KTtmb3IoY29uc3QgY0Mgb2YgYzMpe2NNPWNDO2lmKGNDKUlzKGNDKTtjb25zdCBjVD1jQz9jQ1tUTygweDI5YSldOmMyO2ZvcihsZXQgY289MHgwO2NvPEY7Y28rKyl7bGV0IGN3PS0weDEsY2E9MHgwO2ZvcihsZXQgY3M9MHgwO2NzPD1YO2NzKyspe2NvbnN0IGNWPWNzPFg\/Y1RbVE8oMHgyOGEpXVtjbypYK2NzXTpHLGNFPWNWPT09Rz8weDA6Y1Y9PT1LPzB4MTpjVj09PUw\/MHgxOmNWPT09aj8wLjkzOjB4MTtpZihjdz49MHgwJiZjRSE9PWNhKXtpZihjYSlja1snZmlsbCddKFtbY3cqVSxjbypVXSxbY3MqVSxjbypVXSxbY3MqVSwoY28rMHgxKSpVXSxbY3cqVSwoY28rMHgxKSpVXV1bVE8oMHgzN2YpXShjcSksY2EpO2N3PS0weDE7fWNFJiZjdzwweDAmJihjdz1jcyxjYT1jRSk7fX1mb3IoY29uc3QgY1Ugb2YgY1RbJ3dhbGxzJ10pe2lmKGNVWzB4NF09PT0weDImJklkKChjVVsweDBdK2NVWzB4Ml0pLzB4MiwoY1VbMHgxXStjVVsweDNdKS8weDIpKWNvbnRpbnVlO2NvbnN0IGNYPWNxKFtjVVsweDBdLGNVWzB4MV1dKSxjVz1jcShbY1VbMHgyXSxjVVsweDNdXSksY0Y9Y1VbMHg0XT09PTB4Mj8xLjI6Y1VbMHg0XT09PTB4Mz8wLjc1OjAuNDU7Y2tbJ2xpbmUnXShjWFsweDBdLGNYWzB4MV0sY1dbMHgwXSxjV1sweDFdLGNGKTt9Zm9yKGNvbnN0IFtjRyxjTF1vZiBJbygpKXtjb25zdCBjSz1jcShjRyksY2o9Y3EoY0wpO2NrW1RPKDB4MzczKV0oY0tbMHgwXSxjS1sweDFdLGNqWzB4MF0sY2pbMHgxXSwxLjIpO31mb3IoY29uc3QgY0ggb2YgY1RbJ3dpbmRvd3MnXSl7Y29uc3QgY1E9Y3EoW2NIWzB4MF0sY0hbMHgxXV0pLGNsPWNxKFtjSFsweDJdLGNIWzB4M11dKTtja1tUTygweDM3MyldKGNRWzB4MF0sY1FbMHgxXSxjbFsweDBdLGNsWzB4MV0sMi4yLDB4MSk7Y29uc3QgY209Y0hbMHgwXT09PWNIWzB4Ml0\/MHgyOjB4MCxjSj1jSFsweDBdPT09Y0hbMHgyXT8weDA6MHgyO2NrW1RPKDB4MzczKV0oY1FbMHgwXS1jbSxjUVsweDFdLWNKLGNsWzB4MF0tY20sY2xbMHgxXS1jSiwwLjI1KSxja1tUTygweDM3MyldKGNRWzB4MF0rY20sY1FbMHgxXStjSixjbFsweDBdK2NtLGNsWzB4MV0rY0osMC4yNSksY2tbJ2xpbmUnXShjUVsweDBdLGNRWzB4MV0sY2xbMHgwXSxjbFsweDFdLDAuMik7fWZvcihjb25zdCBjbiBvZiBjVFsncmVnaW9ucyddKWZvcihjb25zdCBjUiBvZiBjbltUTygweDVjZCldKXtjb25zdCBjeT1jcShjUlsweDBdKSxjeD1jcShjUlsweDFdKTtja1snbGluZSddKGN5WzB4MF0sY3lbMHgxXSxjeFsweDBdLGN4WzB4MV0sMC42KTt9Zm9yKGNvbnN0IGNnIG9mWy4uLmNUW1RPKDB4MzU3KV0seydkb29ycyc6Y1RbVE8oMHgyYTcpXX1dKWZvcihjb25zdCBjdCBvZiBjZ1snZG9vcnMnXSl7Y29uc3QgY0Q9Y3EoY3RbVE8oMHgyOWYpXVsweDBdKSxjUz1jcShjdFtUTygweDI5ZildWzB4MV0pO2NrW1RPKDB4MzczKV0oY0RbMHgwXSxjRFsweDFdLGNTWzB4MF0sY1NbMHgxXSwxLjQsMHgxKTtpZihjdFtUTygweDQzOCldKXtjb25zdCBrMD1jcShjdFtUTygweDQzOCldWzB4MV0pO2NrW1RPKDB4MzczKV0oY0RbMHgwXSxjRFsweDFdLGswWzB4MF0sazBbMHgxXSwwLjMpO2NvbnN0IGsxPWN0WydhcmMnXVtUTygweDM3ZildKGNxKTtmb3IobGV0IGsyPTB4MTtrMjxrMVtUTygweDY2MSldO2syKyspY2tbVE8oMHgzNzMpXShrMVtrMi0weDFdWzB4MF0sazFbazItMHgxXVsweDFdLGsxW2syXVsweDBdLGsxW2syXVsweDFdLDAuMTUpO319Zm9yKGNvbnN0IGszIG9mIGNUW1RPKDB4MzU3KV0pZm9yKGNvbnN0IGs0IG9mIGszW1RPKDB4NTU1KV0pe2lmKGs0WydrJ10hPT1UTygweDVmZCkmJiFrNFtUTygweDI0OCldKWNrW1RPKDB4M2M0KV0oW1trNFsnYiddWzB4MF0sazRbJ2InXVsweDFdXSxbazRbJ2InXVsweDJdLGs0WydiJ11bMHgxXV0sW2s0WydiJ11bMHgyXSxrNFsnYiddWzB4M11dLFtrNFsnYiddWzB4MF0sazRbJ2InXVsweDNdXV1bVE8oMHgzN2YpXShjcSksMC4yKTtmb3IoY29uc3QgazUgb2YgazRbJ2Z1cm4nXXx8W10pY2tbVE8oMHgzYzQpXShrNVsnbWFwJ10oY3EpLDAuMTIpO31mb3IoY29uc3QgazYgb2YgY1RbVE8oMHg1ZGMpXXx8W10pY2tbJ3BvbHknXShrNltUTygweDM3ZildKGNxKSwwLjEyKTtmb3IoY29uc3Qgazcgb2YgY1RbVE8oMHg0ODYpXXx8W10pZm9yKGNvbnN0IGs4IG9mIGs3W1RPKDB4MmYzKV0pY2tbVE8oMHgzYzQpXShrOFtUTygweDM3ZildKGNxKSwwLjEyKTtmb3IoY29uc3Qgazkgb2YgY1RbVE8oMHgzNTcpXSl7Y29uc3Qga0k9Y3EoazlbJ2xwJ118fFtrOVsnY3gnXSxrOVsnY3knXV0pO2NrW1RPKDB4NDMwKV0oa0lbMHgwXSxrSVsweDFdLTB4MSxrOVsnaWQnXSx7J3NpemUnOjcuNSwnYm9sZCc6ISFbXSwnYWxpZ24nOidjJ30pLGNrW1RPKDB4NDMwKV0oa0lbMHgwXSxrSVsweDFdKzB4OCxzKGs5W1RPKDB4NGNhKV0pKydceDIwbcKyJyx7J3NpemUnOjB4NywnYWxpZ24nOidjJ30pO31mb3IoY29uc3Qga3Igb2YgRCgpKXtjb25zdCBrYz1JMihrcik7Zm9yKGNvbnN0IGtrIG9mIGtjW1RPKDB4NDA4KV0pe2lmKGtrW1RPKDB4NjYxKV0+MHgyKWNrW1RPKDB4M2M0KV0oa2tbVE8oMHgzN2YpXShjcSksMC4yKTtlbHNle2NvbnN0IGtpPWNxKGtrWzB4MF0pLGtOPWNxKGtrWzB4MV0pO2NrW1RPKDB4MzczKV0oa2lbMHgwXSxraVsweDFdLGtOWzB4MF0sa05bMHgxXSwwLjIpO319Zm9yKGNvbnN0IGt2IG9mIGtjW1RPKDB4MWJiKV0pY2tbVE8oMHgzYzQpXShrdltUTygweDM3ZildKGNxKSwwLjUpO2lmKGtyWzB4NF0mJmtjW1RPKDB4M2EyKV0pe2NvbnN0IGt1PWNxKGtjW1RPKDB4M2EyKV0pO2NrW1RPKDB4NDMwKV0oa3VbMHgwXSxrdVsweDFdKzB4MixhW1RPKDB4NDliKV0seydzaXplJzo2LjUsJ2FsaWduJzonYyd9KTt9fX1jTT1udWxsO2NvbnN0IGN6PWN2K2NyKmNOLGNQPWN1K2NoKmNOO2NrW1RPKDB4NjczKV0oY3YsY3osY1ArMHgxMixjUCxhWyd3J10rJ1x4MjAnK3MoY3IsMHgyKSksY2tbVE8oMHg1MzEpXShjdSxjUCxjeisweDEyLGN6LGFbJ2QnXSsnXHgyMCcrcyhjaCwweDIpLCEhW10pO2NvbnN0IGNmPVsnJythW0lrXSxhW1RPKDB4MzJhKV0rJzpceDIwJyt1W1RPKDB4MzU3KV1bVE8oMHg2NjEpXSxhW1RPKDB4NTkwKV0rJzpceDIwJytzKEk3W1RPKDB4NTkwKV0sMHgxKSsnXHgyMG0nXSxjQj1bVE8oMHgyMzcpLFRPKDB4MmFjKSxUTygweDU3MCksVE8oMHg1M2YpXVtUTygweDM3ZildKGtZPT5hW2tZXSsnOlx4MjAnK0lEW1RPKDB4NWYwKV0oVE8oMHgzYmIpK2tZKyddJylbVE8oMHgyNzkpXSksY2I9aFMoYVsnZG9jJ10rJzpceDIwJythW1RPKDB4MmFiKV0pO2NiW1RPKDB4NDMwKV0oMHgyMCwweDQ0LGFbVE8oMHg0ZjMpXSx7J3NpemUnOjB4OSwnYm9sZCc6ISFbXX0pLGNmW1RPKDB4M2I5KV0oKGtZLGtNKT0+Y2JbVE8oMHg0MzApXSgweDIwK2tNKjB4YzMsMHg1MyxrWSx7J3NpemUnOjguNX0pKSxjQltUTygweDNiOSldKChrWSxrTSk9PmNiW1RPKDB4NDMwKV0oMHgyMCtrTSoweGMzLDB4NzYsa1kseydzaXplJzo4LjUsJ2JvbGQnOiEhW119KSksY2JbVE8oMHgzNzMpXSgweDIwLDB4ODAsaFEtMHgyMCwweDgwLDAuMyk7Y29uc3QgY2Q9WzB4MCwweDM0LDB4NzAsMHg5YywweGM4XTtyZXR1cm5bMHgwLDB4MV1bJ2ZvckVhY2gnXShrWT0+e2NvbnN0IFRCPVRPLGtNPXVbVEIoMHgzNTcpXVtUQigweDI3MCldKGtZKjB4MWMsKGtZKzB4MSkqMHgxYyk7aWYoIWtNW1RCKDB4NjYxKV0pcmV0dXJuO2NvbnN0IGtxPTB4MjAra1kqMHgxOTA7YVtUQigweDQ2ZildWydmb3JFYWNoJ10oKGt6LGtQKT0+Y2JbJ3RleHQnXShrcStjZFtrUF0sMHg5MSxreix7J3NpemUnOjB4OCwnYm9sZCc6ISFbXX0pKSxjYltUQigweDM3MyldKGtxLDB4OTUsa3ErMHhmYSwweDk1LDAuNCksa01bJ2ZvckVhY2gnXSgoa3osa1ApPT5ba3pbJ2lkJ10sYVtreltUQigweDNhMildfHxrelsndCddXSxzKGt6Wyd3J10sMHgyKSsnXHgyMG0nLHMoa3pbJ2QnXSwweDIpKydceDIwbScscyhreltUQigweDRjYSldLDB4MSkrJ1x4MjBtwrInXVtUQigweDNiOSldKChrZixrQSk9PmNiW1RCKDB4NDMwKV0oa3ErY2Rba0FdLDB4YTAra1AqMHhkLGtmLHsnc2l6ZSc6MHg4fSkpKTt9KSxZWydmb3JFYWNoJ10oKGtZLGtNKT0+e2NvbnN0IFRiPVRPO2tZW1RiKDB4MzczKV0oMHgyMCwweDIyYyxoUS0weDIwLDB4MjJjLDAuMyksa1lbVGIoMHg0MzApXSgweDIwLDB4MjM4LGFbJ21tJ10rJy5ceDIwJythW1RiKDB4NjBmKV0seydzaXplJzo3LjUsJ2cnOmhtfSksa1lbJ3RleHQnXShoUS0weDIwLDB4MjM4LFRiKDB4NDA5KStyVitUYigweDM0MSkrYVsnZGF0ZSddKyc6XHgyMCcraEQrVGIoMHgzNDEpK2FbVGIoMHgzZjYpXSsnXHgyMCcrKGtNKzB4MSkrJ1x4MjAnK2FbJ29mJ10rJ1x4MjAnK1lbVGIoMHg2NjEpXSx7J3NpemUnOjcuNSwnZyc6aG0sJ2FsaWduJzoncid9KTt9KSxoeChZLG51bGwpO31jb25zdCBodD0oKT0+e2NvbnN0IFRkPWVKLHU9cjFbVGQoMHg0MGUpXSxZPXIxW1RkKDB4NjI1KV0saEQ9bmV3IERhdGUoKVsndG9Mb2NhbGVEYXRlU3RyaW5nJ10oQj8nZGUtREUnOlRkKDB4Mzc3KSk7cjJbVGQoMHgyOTMpXSgpLHIyW1RkKDB4M2QxKV0oMHgxLDB4MCwweDAsMHgxLDB4MCwweDApLHIyW1RkKDB4NGFiKV0odS8weDIsWS8weDIpLHIyW1RkKDB4MWY1KV0oLTAuMzUpLHIyW1RkKDB4NWQwKV09VGQoMHgzODYpK01hdGhbVGQoMHg0NzIpXSh1LzB4ZikrVGQoMHgzMzIpLHIyW1RkKDB4MjRmKV09VGQoMHgzYzgpLHIyW1RkKDB4NjFiKV09VGQoMHg1OWMpLHIyWydmaWxsU3R5bGUnXT1UZCgweDMxZikscjJbJ2ZpbGxUZXh0J10oVGQoMHgzZTgpLDB4MCwweDApLHIyW1RkKDB4M2QxKV0oMHgxLDB4MCwweDAsMHgxLDB4MCwweDApLHIyW1RkKDB4NWQwKV09VGQoMHgzZWIpK01hdGhbVGQoMHg0NTEpXSgweGIsTWF0aFtUZCgweDQ3MildKHUvMHg1ZikpK1RkKDB4MzMyKSxyMlsndGV4dEFsaWduJ109VGQoMHg1YzEpLHIyW1RkKDB4NjFiKV09VGQoMHg1OTkpLHIyW1RkKDB4NDY2KV09VGQoMHg1ZDkpLHIyWydmaWxsVGV4dCddKFRkKDB4NDA5KStyVitUZCgweDMwZSkraEQrVGQoMHgyYmUpLHUtMHhlLFktMHhhKSxyMltUZCgweDM0MildKCk7fTtPWydxdWVyeVNlbGVjdG9yJ10oZUooMHgzMDkpKVtlSigweDFmZSldKGVKKDB4NDQ2KSwoKT0+e2NvbnN0IFRDPWVKO2lmKCFJZSlyZXR1cm47aWYoIXJYKFRDKDB4M2IxKSkpcmV0dXJuIHJXKCk7Y29uc3QgdT1yUztyUz1udWxsLGgxPSEhW10saDcoKSxodCgpLHIxW1RDKDB4NDcwKV0oWT0+e2NvbnN0IFRUPVRDO2gxPSFbXSxyUz11LGg3KCk7aWYoIVkpcmV0dXJuO2NvbnN0IGhEPVVSTFsnY3JlYXRlT2JqZWN0VVJMJ10oWSksaFM9T2JqZWN0Wydhc3NpZ24nXShkb2N1bWVudFtUVCgweDYzNCldKCdhJykseydocmVmJzpoRCwnZG93bmxvYWQnOmFbJ2ZpbGUnXVsncmVwbGFjZSddKFRUKDB4Mjk5KSwnLScrclYrJy5wbmcnKX0pO2RvY3VtZW50W1RUKDB4NjU4KV1bJ2FwcGVuZCddKGhTKSxoU1tUVCgweDQ0NildKCksaFNbVFQoMHgzZWUpXSgpLHNldFRpbWVvdXQoKCk9PlVSTFsncmV2b2tlT2JqZWN0VVJMJ10oaEQpLDB4M2U4KTt9LFRDKDB4NWY1KSk7fSksT1tlSigweDVmMCldKGVKKDB4NTAxKSlbZUooMHgxZmUpXShlSigweDQ0NiksKCk9Pntjb25zdCBUbz1lSjtpZighclgoVG8oMHgzYjEpKSlyZXR1cm4gclcoKTtjb25zdCB1PVVSTFtUbygweDM4OCldKGhnKCkpLFk9T2JqZWN0W1RvKDB4MWJlKV0oZG9jdW1lbnRbVG8oMHg2MzQpXSgnYScpLHsnaHJlZic6dSwnZG93bmxvYWQnOmFbVG8oMHg1MTYpXVtUbygweDNiNildKFRvKDB4Mjk5KSwnLScrclYrVG8oMHgyOTkpKX0pO2RvY3VtZW50W1RvKDB4NjU4KV1bVG8oMHg1Y2EpXShZKSxZWydjbGljayddKCksWVtUbygweDNlZSldKCksc2V0VGltZW91dCgoKT0+VVJMWydyZXZva2VPYmplY3RVUkwnXSh1KSwweDNlOCk7fSksT2JqZWN0W2VKKDB4MmNjKV0ocjMpW2VKKDB4M2I5KV0odT0+dSgpKSxycignZnJlZScpLEl4KGVKKDB4NjNjKSksT2JqZWN0W2VKKDB4MmNjKV0ocjMpW2VKKDB4M2I5KV0odT0+dSgpKSxyQygpLGg0KCksaFQoISFbXSk7aWYoJ1Jlc2l6ZU9ic2VydmVyJ2luIHdpbmRvdyluZXcgUmVzaXplT2JzZXJ2ZXIoKCk9PntoNCgpLGg3KCk7fSlbJ29ic2VydmUnXShyMCk7\");<\/script><p class=\"ps-play__more\"><a href=\"https:\/\/parametricsolutions.de\/grundriss-automatisierung\/\">Floor plan automation<\/a><\/p><\/section><section class=\"ps-play__demo\" id=\"ps-play-robot\" hidden><p class=\"ps-play__text\">A robot prints non-planar layers along your path, with the nozzle following the surface. This is what custom robot code makes possible.<\/p><style>\n.ps-conf { container-type: inline-size; font-family: inherit; color: #2e2e2e; }\n.ps-conf * { box-sizing: border-box; }\n.ps-conf__grid { display: grid; grid-template-columns: 1fr; border: 1px solid #e2e2e2; }\n.ps-conf__stage { position: relative; aspect-ratio: 4 \/ 3; background: #f4f4f2; touch-action: pan-y; cursor: grab; overflow: hidden; }\n.ps-conf__stage:active { cursor: grabbing; }\n.ps-conf__stage canvas { display: block; width: 100%; height: 100%; }\n.ps-conf__hint { position: absolute; left: 16px; bottom: 12px; font-size: 13px; color: #777; pointer-events: none; }\n.ps-conf__panel { padding: 20px; background: #fff; }\n.ps-conf__title { margin: 0 0 16px; font-size: 18px; line-height: 1.3; font-weight: 700; color: #111; }\n.ps-conf__row { margin-bottom: 13px; }\n.ps-conf__row label { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; line-height: 1.3; margin-bottom: 5px; }\n.ps-conf__row output { font-weight: 500; color: #111; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.ps-conf input[type=range] { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 24px !important; margin: 0; padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; cursor: pointer; --p: 50%; }\n.ps-conf input[type=range]::-webkit-slider-runnable-track { height: 2px; background: linear-gradient(to right, #32373c var(--p), #cfcfcf var(--p)); }\n.ps-conf input[type=range]::-moz-range-track { height: 2px; background: #cfcfcf; }\n.ps-conf input[type=range]::-moz-range-progress { height: 2px; background: #32373c; }\n.ps-conf input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 18px; margin-top: -8px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]::-moz-range-thumb { width: 14px; height: 18px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]:focus-visible { outline: 2px solid #32373c; outline-offset: 2px; }\n.ps-conf__wood { display: flex; gap: 6px; margin: 16px 0; }\n.ps-conf__wood button { flex: 1; min-height: 40px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__wood button[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 0 0 16px; padding: 14px 0; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-conf__stats div { min-width: 0; }\n.ps-conf__stats dt { font-size: 13px; line-height: 1.3; color: #777; }\n.ps-conf__stats dd { margin: 0; font-size: 17px; font-weight: 500; color: #111; font-variant-numeric: tabular-nums; }\n.ps-conf__csv { width: 100%; min-height: 46px; padding: 10px 16px; font: inherit; font-size: 16px; font-weight: 500; color: #fff; background: #32373c; border: 0; border-radius: 0; cursor: pointer; }\n.ps-conf__csv:hover { background: #111; }\n.ps-conf__csvlink { display: block; width: 100%; margin-top: 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; text-decoration: underline; background: none; border: 0; cursor: pointer; }\n.ps-conf__dim { position: absolute; left: 0; top: 0; padding: 1px 5px; font-size: 12px; line-height: 1.4; font-weight: 500; color: #111; background: rgba(244,244,242,.92); white-space: nowrap; pointer-events: none; font-variant-numeric: tabular-nums; }\n.ps-conf__dimtoggle { position: absolute; right: 12px; top: 12px; z-index: 2; min-height: 34px; padding: 4px 12px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__dimtoggle[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__error { padding: 24px; font-size: 15px; }\n@container (min-width: 760px) {\n.ps-conf__grid { grid-template-columns: minmax(0, 1fr) 320px; }\n.ps-conf__stage { aspect-ratio: auto; min-height: 620px; }\n.ps-conf__panel { border-left: 1px solid #e2e2e2; }\n}\n<\/style>\n<style>\n.ps-rob .ps-conf__wood { margin: 0 0 14px; }\n.ps-rob .ps-conf__wood button { font-size: 13px; padding: 6px 4px; }\n.ps-rob .ps-conf__warn { margin: 0 0 14px; padding: 8px 10px; font-size: 13px; line-height: 1.35; color: #111; background: #f9e4e1; border-left: 3px solid #c8321f; }\n.ps-rob .ps-conf__warn:empty { display: none; }\n.ps-rob .ps-conf__hint { pointer-events: none; }\n.ps-rob__axes { display: grid; grid-template-columns: repeat(6, 1fr); gap: 4px; margin: 0 0 14px; font-size: 12px; line-height: 1.3; color: #777; font-variant-numeric: tabular-nums; }\n.ps-rob__axes b { display: block; min-height: 1.3em; font-weight: 500; color: #111; }\n.ps-rob__axes b::after { content: attr(data-v); }\n.ps-rob .ps-conf__stage.is-draw { touch-action: none; cursor: crosshair; }\n<\/style>\n<div class=\"ps-conf ps-rob\" id=\"ps-rob\" data-three=\"\/wp-content\/uploads\/ps-configurator\/three.module.min.js\">\n<div class=\"ps-conf__grid\">\n<div class=\"ps-conf__stage\"><button type=\"button\" class=\"ps-conf__dimtoggle\" aria-pressed=\"false\" data-t=\"draw\"><\/button><div class=\"ps-conf__hint\"><\/div><\/div>\n<div class=\"ps-conf__panel\">\n<h3 class=\"ps-conf__title\" data-t=\"title\"><\/h3>\n<div class=\"ps-conf__wood\" role=\"group\"><\/div>\n<div class=\"ps-conf__sliders\"><\/div>\n<p class=\"ps-conf__warn\" aria-live=\"polite\"><\/p>\n<div class=\"ps-rob__axes\" aria-hidden=\"true\" data-no-translation><\/div>\n<dl class=\"ps-conf__stats\"><\/dl>\n<button type=\"button\" class=\"ps-conf__csv\" data-t=\"again\"><\/button>\n<\/div>\n<\/div>\n<\/div>\n<script type=\"module\">\nconst root = document.getElementById('ps-rob');\nlet schedule = () => {}, setPreset = () => {}, restart = () => {}, toggleDraw = () => {};\nconst lang = new URLSearchParams(location.search).get('lang') || document.documentElement.lang || 'de';\nconst de = lang.toLowerCase().startsWith('de');\nconst T = de ? {\ntitle: 'Beispiel: Mehrachsiger Roboter-3D-Druck', hint: 'Ziehen zum Drehen', drawHint: 'Mit Finger oder Maus einen Pfad auf die Platte zeichnen', draw: 'Pfad zeichnen', cancel: 'Abbrechen', again: 'Noch einmal drucken',\nvase: 'Vase', wall: 'Welle', knot: 'Knoten', height: 'H\u00f6he', twist: 'Verdrehung', bulge: 'Bauch', bead: 'Raupenbreite', wave: 'Nichtplanar', lobes: 'Wellen im Umfang',\nlayers: 'Schichten', length: 'Pfadl\u00e4nge', mass: 'Material', time: 'Druckzeit', reach: 'Ein Teil des Pfads liegt au\u00dferhalb von Platte oder Reichweite. Dort druckt der Roboter nicht.'\n} : {\ntitle: 'Example: Multi-Axis Robotic 3D Printing', hint: 'Drag to rotate', drawHint: 'Draw a path on the plate with your finger or mouse', draw: 'Draw a path', cancel: 'Cancel', again: 'Print again',\nvase: 'Vase', wall: 'Wave', knot: 'Knot', height: 'Height', twist: 'Twist', bulge: 'Bulge', bead: 'Bead width', wave: 'Non-planar', lobes: 'Waves around',\nlayers: 'Layers', length: 'Path length', mass: 'Material', time: 'Print time', reach: 'Part of the path is off the plate or out of reach. The robot does not print there.'\n};\nroot.querySelectorAll('[data-t]').forEach(el => { el.textContent = T[el.dataset.t]; });\nconst num = (v, d = 0) => v.toLocaleString(de ? 'de-DE' : 'en-GB', { minimumFractionDigits: d, maximumFractionDigits: d });\nconst P = {\nwave: { min: 0, max: 200, step: 10, value: 120, show: v => `${v} mm` },\nlobes: { min: 0, max: 6, step: 1, value: 3, show: v => `${v}` },\nheight: { min: 100, max: 900, step: 25, value: 550, show: v => `${num(v)} mm` },\ntwist: { min: 0, max: 180, step: 5, value: 60, show: v => `${v}\u00b0` },\nbulge: { min: -40, max: 60, step: 5, value: 30, show: v => `${v} %` },\nbead: { min: 20, max: 80, step: 5, value: 40, show: v => `${v} mm` }\n};\nconst state = Object.fromEntries(Object.entries(P).map(([k, p]) => [k, p.value]));\nconst painters = {};\nfor (const [key, p] of Object.entries(P)) {\nconst row = document.createElement('div'); row.className = 'ps-conf__row';\nconst id = 'ps-rob-' + key;\nrow.innerHTML = `<label for=\"${id}\"><span>${T[key]}<\/span><output><\/output><\/label><input id=\"${id}\" type=\"range\" min=\"${p.min}\" max=\"${p.max}\" step=\"${p.step}\" value=\"${p.value}\">`;\nconst input = row.querySelector('input'), out = row.querySelector('output');\nconst paint = () => { input.value = state[key]; out.textContent = p.show(state[key]); input.style.setProperty('--p', ((state[key] - p.min) \/ (p.max - p.min) * 100) + '%'); };\ninput.addEventListener('input', () => { state[key] = +input.value; paint(); schedule(); });\npainters[key] = paint; paint(); root.querySelector('.ps-conf__sliders').append(row);\n}\nconst CX = 0, CZ = 1.55, PW = 1.1, PD = 0.7, PT = 0.1, LH = 0.025, STEP = 0.04;\nconst circle = f => { const a = []; for (let i = 0; i < 64; i++) { const t = i \/ 64 * Math.PI * 2, r = f(t); a.push([r * Math.cos(t), r * Math.sin(t)]); } return a; };\nconst wave = () => { const a = []; for (let i = 0; i <= 64; i++) { const u = i \/ 64, x = -0.85 + 1.7 * u; a.push([x, 0.3 * Math.sin(u * Math.PI * 3)]); } return a; };\nconst PRESETS = {\nvase: { pts: () => circle(t => 0.42 * (1 + 0.16 * Math.cos(5 * t))), closed: true, s: { wave: 120, lobes: 3, height: 550, twist: 60, bulge: 30, bead: 40 } },\nwall: { pts: wave, closed: false, s: { wave: 120, lobes: 4, height: 400, twist: 0, bulge: 0, bead: 50 } },\nknot: { pts: () => circle(t => 0.42 * (1 + 0.42 * Math.cos(3 * t))), closed: true, s: { wave: 100, lobes: 3, height: 600, twist: 70, bulge: -15, bead: 45 } }\n};\nconst presetBox = root.querySelector('.ps-conf__wood');\nconst markPreset = k => presetBox.querySelectorAll('button').forEach(x => x.setAttribute('aria-pressed', x.dataset.k === k));\nfor (const k of Object.keys(PRESETS)) {\nconst b = document.createElement('button'); b.type = 'button'; b.textContent = T[k]; b.dataset.k = k; b.setAttribute('aria-pressed', k === 'vase');\nb.addEventListener('click', () => { markPreset(k); Object.assign(state, PRESETS[k].s); Object.keys(P).forEach(q => painters[q]()); setPreset(k); }); presetBox.append(b);\n}\nconst stats = root.querySelector('.ps-conf__stats');\nstats.innerHTML = ['layers', 'length', 'mass', 'time'].map(k => `<div><dt>${T[k]}<\/dt><dd data-s=\"${k}\"><\/dd><\/div>`).join('');\nconst warn = root.querySelector('.ps-conf__warn');\nconst stage = root.querySelector('.ps-conf__stage'), hint = root.querySelector('.ps-conf__hint'), drawBtn = root.querySelector('.ps-conf__dimtoggle');\nhint.textContent = T.hint;\nroot.querySelector('.ps-conf__csv').addEventListener('click', () => restart());\ndrawBtn.addEventListener('click', e => { e.stopPropagation(); toggleDraw(); });\ndrawBtn.addEventListener('pointerdown', e => e.stopPropagation());\nconst D1 = 0.7, A1 = 0.3, L1 = 1.0, L2 = 1.1, TOOL = 0.46, LF = 0.19, REACH = L1 + L2 - 0.01;\nconst wristOf = (x, y, z, dx, dy, dz) => { const r = Math.hypot(x, z) || 1, rx = x \/ r, rz = z \/ r, dot = rx * dx + rz * dz; let ax = rx - dx * dot, ay = -dy * dot, az = rz - dz * dot; const l = Math.hypot(ax, ay, az) || 1; ax \/= l; ay \/= l; az \/= l; return { x: x - dx * TOOL - ax * LF, y: y - dy * TOOL - ay * LF, z: z - dz * TOOL - az * LF, ax, ay, az }; };\nconst reachable = (x, y, z, d) => { const w = wristOf(x, y, z, d[0], d[1], d[2]), r = Math.hypot(w.x, w.z) - A1, h = w.y - D1, l = Math.hypot(r, h); return l <= REACH && l >= Math.abs(L1 - L2) + 0.01; };\nlet THREE;\nconst load = async () => {\ntry {\nTHREE = await import(new URL(root.dataset.three, location.href).href);\ninit();\n} catch (err) {\nconsole.error(err);\nstage.innerHTML = `<div class=\"ps-conf__error\">WebGL<\/div>`;\n}\n};\nif ('IntersectionObserver' in window) {\nconst io = new IntersectionObserver(es => { if (es.some(e => e.isIntersecting)) { io.disconnect(); load(); } }, { rootMargin: '400px' });\nio.observe(root);\n} else load();\nfunction init() {\nconst renderer = new THREE.WebGLRenderer({ antialias: true });\nrenderer.setPixelRatio(Math.min(devicePixelRatio, 2));\nrenderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFShadowMap;\nrenderer.toneMapping = THREE.ACESFilmicToneMapping;\nstage.prepend(renderer.domElement);\nconst scene = new THREE.Scene(); scene.background = new THREE.Color(0xf4f4f2);\nconst camera = new THREE.PerspectiveCamera(28, 1, 0.5, 100);\nscene.add(new THREE.HemisphereLight(0xffffff, 0xc9c3b8, 1.2));\nconst sunL = new THREE.DirectionalLight(0xfff1df, 2.6);\nsunL.position.set(4, 8, 5); sunL.target.position.set(0, 0.6, 1); sunL.castShadow = true;\nsunL.shadow.mapSize.set(2048, 2048); sunL.shadow.bias = -0.0004; sunL.shadow.normalBias = 0.015; sunL.shadow.radius = 5;\nObject.assign(sunL.shadow.camera, { left: -4, right: 4, top: 4, bottom: -4, near: 1, far: 25 });\nscene.add(sunL, sunL.target);\nconst ground = new THREE.Mesh(new THREE.PlaneGeometry(60, 60), new THREE.ShadowMaterial({ opacity: 0.16 })); ground.rotation.x = -Math.PI \/ 2; ground.receiveShadow = true; scene.add(ground);\nconst dark = new THREE.MeshStandardMaterial({ color: 0x74727e, roughness: 0.5, metalness: 0.1 });\nconst purple = new THREE.MeshStandardMaterial({ color: 0xb29ce6, roughness: 0.42, metalness: 0.05 });\nconst steel = new THREE.MeshStandardMaterial({ color: 0xb9bcbf, roughness: 0.4, metalness: 0.1 });\nconst part = (geo, mat, parent, x = 0, y = 0, z = 0) => { const m = new THREE.Mesh(geo, mat); m.position.set(x, y, z); m.castShadow = true; m.receiveShadow = true; parent.add(m); return m; };\nconst hub = (r, w) => new THREE.CylinderGeometry(r, r, w, 32).rotateZ(Math.PI \/ 2);\nconst link = (r0, r1, len, thick) => {\nconst s = new THREE.Shape(); s.absarc(0, 0, r0, Math.PI \/ 2, Math.PI * 1.5, false); s.lineTo(len, -r1); s.absarc(len, 0, r1, -Math.PI \/ 2, Math.PI \/ 2, false); s.closePath();\nreturn new THREE.ExtrudeGeometry(s, { depth: thick, curveSegments: 16, bevelEnabled: true, bevelSize: 0.008, bevelThickness: 0.008, bevelSegments: 2 }).translate(0, 0, -thick \/ 2).rotateY(-Math.PI \/ 2);\n};\nconst rbox = (w, h, d, r) => {\nconst b = Math.min(r, h \/ 2 - 0.002) * 0.8, x = w \/ 2 - b, y = d \/ 2 - b, q = Math.max(0.002, Math.min(r, x, y) - b * 0.2), sh = new THREE.Shape();\nsh.moveTo(-x + q, -y); sh.lineTo(x - q, -y); sh.quadraticCurveTo(x, -y, x, -y + q); sh.lineTo(x, y - q); sh.quadraticCurveTo(x, y, x - q, y); sh.lineTo(-x + q, y); sh.quadraticCurveTo(-x, y, -x, y - q); sh.lineTo(-x, -y + q); sh.quadraticCurveTo(-x, -y, -x + q, -y);\nreturn new THREE.ExtrudeGeometry(sh, { depth: h - 2 * b, curveSegments: 8, bevelEnabled: true, bevelSize: b, bevelThickness: b, bevelSegments: 4 }).translate(0, 0, -(h - 2 * b) \/ 2).rotateX(-Math.PI \/ 2);\n};\npart(new THREE.BoxGeometry(PW * 2, PT, PD * 2), steel, scene, CX, PT \/ 2, CZ);\nconst edge = []; for (let i = 0; i <= 90; i++) { const t = -1 + i \/ 45, x = t * PW * 1.3, z = Math.sqrt(Math.max(0, (REACH + A1) ** 2 - x * x)); if (Math.abs(x) <= PW && z <= CZ + PD) edge.push(new THREE.Vector3(x, PT + 0.002, z)); }\nscene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(edge), new THREE.LineBasicMaterial({ color: 0x8a8a86 })));\npart(rbox(0.66, 0.04, 0.66, 0.05), dark, scene, 0, 0.025, 0);\nfor (const sx of [-1, 1]) for (const sz of [-1, 1]) part(new THREE.CylinderGeometry(0.024, 0.024, 0.025, 12), steel, scene, sx * 0.28, 0.05, sz * 0.28);\npart(new THREE.CylinderGeometry(0.22, 0.27, 0.12, 48), purple, scene, 0, 0.1, 0);\nconst turret = new THREE.Group(); scene.add(turret);\npart(new THREE.CylinderGeometry(0.18, 0.21, 0.24, 48), dark, turret, 0, 0.28, 0);\npart(rbox(0.29, 0.14, 0.44, 0.07), purple, turret, 0, 0.45, 0.09);\nfor (const sx of [-1, 1]) part(link(0.11, 0.1, 0.24, 0.024).rotateX(Math.PI \/ 2), purple, turret, sx * 0.125, D1, A1);\npart(new THREE.CylinderGeometry(0.06, 0.06, 0.16, 24), dark, turret, 0, 0.52, -0.16);\npart(hub(0.09, 0.07), dark, turret, -0.18, D1, A1);\npart(hub(0.09, 0.07), dark, turret, 0.18, D1, A1);\nconst upper = new THREE.Group(); upper.position.set(0, D1, A1); turret.add(upper);\npart(link(0.14, 0.09, L1, 0.13), purple, upper);\npart(link(0.09, 0.05, L1, 0.148), dark, upper);\npart(hub(0.05, 0.3), steel, upper);\npart(new THREE.CylinderGeometry(0.011, 0.011, L1 * 0.8, 8).rotateX(Math.PI \/ 2), dark, upper, 0, 0.125, L1 * 0.5);\nconst CBX = 0.115, cbTube = part(new THREE.CylinderGeometry(0.03, 0.03, 0.42, 20).translate(0, 0.21, 0), dark, turret), cbRod = part(new THREE.CylinderGeometry(0.012, 0.012, 1, 12).translate(0, 0.5, 0), steel, turret);\nconst fore = new THREE.Group(); turret.add(fore);\npart(hub(0.09, 0.18), dark, fore);\npart(link(0.095, 0.065, 0.5, 0.12), purple, fore);\npart(rbox(0.17, 0.17, 0.22, 0.05), purple, fore, 0, 0, -0.16);\nfor (const [mx, my] of [[-0.045, 0.042], [0.045, 0.042], [0, -0.042]]) part(new THREE.CylinderGeometry(0.032, 0.032, 0.13, 18).rotateX(Math.PI \/ 2), dark, fore, mx, my, -0.33);\nconst roll = new THREE.Group(); roll.position.z = 0.5; fore.add(roll);\npart(new THREE.CylinderGeometry(0.048, 0.063, L2 - 0.58, 32).rotateX(Math.PI \/ 2), purple, roll, 0, 0, (L2 - 0.58) \/ 2);\npart(new THREE.CylinderGeometry(0.067, 0.067, 0.025, 32).rotateX(Math.PI \/ 2), dark, roll, 0, 0, 0.02);\nfor (const sx of [-1, 1]) part(new THREE.BoxGeometry(0.02, 0.08, 0.16), purple, roll, sx * 0.05, 0, L2 - 0.5 - 0.05);\nconst wrist = new THREE.Group(); wrist.position.z = L2 - 0.5; roll.add(wrist);\npart(hub(0.05, 0.08), dark, wrist);\nfor (const sx of [-1, 1]) part(hub(0.04, 0.012), steel, roll, sx * 0.066, 0, L2 - 0.5);\npart(new THREE.CylinderGeometry(0.036, 0.044, 0.09, 24).rotateX(Math.PI \/ 2), purple, wrist, 0, 0, 0.05);\nconst flange = new THREE.Group(); flange.position.z = 0.09; wrist.add(flange);\npart(new THREE.CylinderGeometry(0.042, 0.042, 0.025, 24).rotateX(Math.PI \/ 2), steel, flange);\nconst EZ = LF - 0.09, along = (r0, r1, len) => new THREE.CylinderGeometry(r1, r0, len, 24).rotateZ(-Math.PI \/ 2);\npart(rbox(0.3, 0.09, 0.03, 0.012), steel, flange, 0.02, 0, 0.03);\npart(along(0.038, 0.038, TOOL - 0.09), dark, flange, (TOOL - 0.09) \/ 2, 0, EZ);\nfor (const hx of [0.14, 0.21, 0.28]) part(along(0.044, 0.044, 0.025), steel, flange, hx, 0, EZ);\npart(along(0.024, 0.01, 0.09), steel, flange, TOOL - 0.045, 0, EZ);\npart(rbox(0.13, 0.12, 0.12, 0.025), steel, flange, -0.06, 0, EZ);\npart(along(0.052, 0.052, 0.15), dark, flange, -0.2, 0, EZ);\npart(rbox(0.32, 0.03, 0.1, 0.012), purple, flange, 0.01, 0.075, EZ);\nconst anchor = (parent, x, y, z) => { const o = new THREE.Object3D(); o.position.set(x, y, z); parent.add(o); return o; };\nconst hoseAnchors = [anchor(flange, -0.28, 0, EZ), anchor(flange, -0.3, 0.05, -0.04), anchor(fore, 0, 0.11, L2 - 0.2), anchor(fore, 0, 0.13, 0.45), anchor(fore, 0, 0.15, 0.05), anchor(upper, 0, 0.18, L1 * 0.6), anchor(upper, 0, 0.17, 0.1), anchor(turret, 0, 0.5, -0.2)];\nconst hosePts = hoseAnchors.map(() => new THREE.Vector3()), hose = new THREE.Mesh(new THREE.BufferGeometry(), new THREE.MeshStandardMaterial({ color: 0x2c2c31, roughness: 0.6 })); hose.castShadow = true; scene.add(hose);\nconst layHose = () => { scene.updateMatrixWorld(true); hoseAnchors.forEach((o, i) => o.getWorldPosition(hosePts[i])); hose.geometry.dispose(); hose.geometry = new THREE.TubeGeometry(new THREE.CatmullRomCurve3(hosePts), 40, 0.017, 7); };\nconst beadMat = new THREE.MeshStandardMaterial({ color: 0xd8c9ae, roughness: 0.7 });\nconst body = new THREE.Mesh(new THREE.BufferGeometry(), beadMat); body.castShadow = true; body.receiveShadow = true; scene.add(body);\nconst previewGeo = new THREE.BufferGeometry(); previewGeo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(3000), 3));\nconst preview = new THREE.Line(previewGeo, new THREE.LineBasicMaterial({ color: 0x6d45b5 })); preview.visible = false; scene.add(preview);\nconst smooth = (src, closed) => { let a = src; for (let k = 0; k < 2; k++) { const o = []; const n = a.length, end = closed ? n : n - 1; if (!closed) o.push(a[0]); for (let i = 0; i < end; i++) { const p = a[i], q = a[(i + 1) % n]; o.push([p[0] * 0.75 + q[0] * 0.25, p[1] * 0.75 + q[1] * 0.25], [p[0] * 0.25 + q[0] * 0.75, p[1] * 0.25 + q[1] * 0.75]); } if (!closed) o.push(a[n - 1]); a = o; } return a; };\nconst resample = (src, closed) => {\nconst a = closed ? [...src, src[0]] : src, o = [a[0]]; let need = STEP;\nfor (let i = 1; i < a.length; i++) { let p = a[i - 1]; const q = a[i]; let d = Math.hypot(q[0] - p[0], q[1] - p[1]); while (d >= need) { const t = need \/ d; p = [p[0] + (q[0] - p[0]) * t, p[1] + (q[1] - p[1]) * t]; o.push(p); d -= need; need = STEP; } need -= d; }\nreturn o;\n};\nlet base = { pts: resample(PRESETS.vase.pts(), true), closed: true };\nlet pathLen = 0, moveSp = 0, lastPhase = '', tips = [], N = 0, idx = 0, phase = 'approach', missed = 0, visible = true, drawing = false;\nconst HOME = new THREE.Vector3(0, 1.45, 0.75), tip = HOME.clone();\nfunction rebuild() {\nconst w = state.bead \/ 1000, H = state.height \/ 1000, layers = Math.max(2, Math.round(H \/ LH)), m = base.pts.length;\nlet cx = 0, cz = 0; for (const p of base.pts) { cx += p[0]; cz += p[1]; } cx \/= m; cz \/= m;\ntips = []; missed = 0; let len = 0;\nconst ccx = cx + CX, ccz = CZ + cz, lobes = state.lobes, EPS = 0.01;\nconst field = (x, z) => { if (!lobes) return 0; const dx = x - ccx, dz = z - ccz; return Math.cos(lobes * Math.atan2(dz, dx)) * Math.min(1, Math.hypot(dx, dz) \/ 0.2); };\nconst ampE = Math.min(state.wave \/ 1000, 0.7 * H), maxS = Math.tan(38 * Math.PI \/ 180);\nconst closed = base.closed, div = closed ? layers : layers - 1, lim = 0.45 * w; let prev = null;\nfor (let l = 0; l < layers; l++) {\nconst row = [], ring = [];\nfor (let i = 0; i < m; i++) {\nconst lf = closed ? l + i \/ m : l, t = lf \/ div, a = state.twist * t * Math.PI \/ 180, sc = 1 + state.bulge \/ 100 * (Math.sin(Math.PI * t) + 0.15 * Math.sin(3 * Math.PI * t)), c = Math.cos(a), si = Math.sin(a);\nconst x = (base.pts[i][0] - cx) * sc, z = (base.pts[i][1] - cz) * sc, P = [ccx + x * c - z * si, ccz + x * si + z * c];\nif (prev) { let best = 1e9, bx = 0, bz = 0; for (const b of prev) { const d = (P[0] - b.x) ** 2 + (P[1] - b.z) ** 2; if (d < best) { best = d; bx = b.x; bz = b.z; } } const dist = Math.sqrt(best); if (dist > lim) { P[0] = bx + (P[0] - bx) * lim \/ dist; P[1] = bz + (P[1] - bz) * lim \/ dist; } }\nring.push(P);\n}\nfor (let i = 0; i < m; i++) {\nconst lf = closed ? l + i \/ m : l, t = lf \/ div, P = ring[i], q = ring[closed ? (i + 1) % m : Math.min(i + 1, m - 1)], o = ring[closed ? (i - 1 + m) % m : Math.max(i - 1, 0)];\nconst hl = Math.hypot(q[0] - o[0], q[1] - o[1]) || 1, tx = (q[0] - o[0]) \/ hl, tz = (q[1] - o[1]) \/ hl, nx = -tz, nz = tx;\nconst yAt = (x, z) => PT + (lf + 0.5) * LH + ampE * t * field(x, z), y = yAt(P[0], P[1]);\nconst dYds = (ampE * t * (field(q[0], q[1]) - field(o[0], o[1])) + (closed ? 2 * LH \/ m : 0)) \/ hl, cs = 1 \/ Math.hypot(1, dYds), sn = dYds * cs;\nlet sx = ampE * t * (field(P[0] + EPS, P[1]) - field(P[0] - EPS, P[1])) \/ (2 * EPS), sz = ampE * t * (field(P[0], P[1] + EPS) - field(P[0], P[1] - EPS)) \/ (2 * EPS);\nsx *= 1.5; sz *= 1.5; const sl = Math.hypot(sx, sz); if (sl > maxS) { sx *= maxS \/ sl; sz *= maxS \/ sl; } const dl = Math.hypot(sx, 1, sz), dir = [sx \/ dl, -1 \/ dl, sz \/ dl];\nconst ratio = 1 + ampE * field(P[0], P[1]) \/ (div * LH), hh = 0.47 * LH * ratio * cs, hw = w \/ 2 * Math.max(0.6, Math.min(1.6, 1 \/ ratio));\nconst ok = Math.abs(P[0] - CX) <= PW && Math.abs(P[1] - CZ) <= PD && reachable(P[0], y, P[1], dir);\nif (!ok) missed++;\nrow.push({ x: P[0], y, z: P[1], nx, nz, wx: nx, wy: 0, wz: nz, ux: -tx * sn, uy: cs, uz: -tz * sn, hh, hw, dir, ok });\n}\nprev = row;\nconst out = !closed && l % 2 ? [...row].reverse() : row;\nfor (const p of out) { if (tips.length) { const b = tips[tips.length - 1]; len += Math.hypot(p.x - b.x, p.y - b.y, p.z - b.z); } tips.push(p); }\n}\nN = tips.length; pathLen = len;\nconst pos = new Float32Array(N * 18), ids = new Uint32Array((N - 1) * 36);\nconst prof = [[-1, 0], [-0.72, 1], [0.72, 1], [1, 0], [0.72, -1], [-0.72, -1]];\ntips.forEach((p, i) => { const k = p.ok ? 1 : 0; prof.forEach((f, j) => { const o = (i * 6 + j) * 3, a = f[0] * p.hw * k, b = f[1] * p.hh * k; pos[o] = p.x + p.wx * a + p.ux * b; pos[o + 1] = p.y + p.wy * a + p.uy * b; pos[o + 2] = p.z + p.wz * a + p.uz * b; }); });\nlet e = 0; for (let i = 0; i < N - 1; i++) for (let j = 0; j < 6; j++) { const a = i * 6 + j, b = i * 6 + (j + 1) % 6, c = a + 6, d = b + 6; ids[e++] = a; ids[e++] = b; ids[e++] = c; ids[e++] = b; ids[e++] = d; ids[e++] = c; }\nconst g = new THREE.BufferGeometry(); g.setAttribute('position', new THREE.BufferAttribute(pos, 3)); g.setIndex(new THREE.BufferAttribute(ids, 1)); g.computeVertexNormals();\nbody.geometry.dispose(); body.geometry = g;\nconst good = len * (1 - missed \/ N);\nconst v = stats.querySelector.bind(stats);\nv('[data-s=layers]').textContent = num(layers);\nv('[data-s=length]').textContent = `${num(good)} m`;\nv('[data-s=mass]').textContent = `${num(good * w * LH * 1200, 1)} kg`;\nv('[data-s=time]').textContent = `${num(good \/ 0.15 \/ 60)} min`;\nwarn.textContent = missed ? T.reach : '';\n}\nconst qT = new THREE.Quaternion(), qF = new THREE.Quaternion(), qW = new THREE.Quaternion(), vD = new THREE.Vector3(), vR = new THREE.Vector3(), AY = new THREE.Vector3(0, 1, 0), AX = new THREE.Vector3(1, 0, 0);\nconst axes = root.querySelector('.ps-rob__axes'); axes.innerHTML = [1, 2, 3, 4, 5, 6].map(i => `<span>A${i}<b><\/b><\/span>`).join('');\nconst axisOut = [...axes.querySelectorAll('b')];\nconst toolDir = new THREE.Vector3(0, -1, 0), dirT = new THREE.Vector3(0, -1, 0), cbA = new THREE.Vector3(), cbB = new THREE.Vector3(), cbD = new THREE.Vector3();\nlet a4Now = 0, poseDt = 0.016;\nfunction pose() {\nconst W = wristOf(tip.x, tip.y, tip.z, toolDir.x, toolDir.y, toolDir.z), wx = W.x, wy = W.y, wz = W.z, a1 = Math.atan2(wx, wz); turret.rotation.y = a1;\nlet rr = Math.hypot(wx, wz) - A1, h = wy - D1, d = Math.hypot(rr, h);\nconst al = Math.atan2(h, rr); d = Math.min(REACH, Math.max(Math.abs(L1 - L2) + 0.01, d)); rr = d * Math.cos(al); h = d * Math.sin(al);\nconst e1 = al + Math.acos((L1 * L1 + d * d - L2 * L2) \/ (2 * L1 * d)), ex = L1 * Math.cos(e1), ey = L1 * Math.sin(e1), e2 = Math.atan2(h - ey, rr - ex);\nupper.rotation.x = -e1; fore.position.set(0, D1 + ey, A1 + ex); fore.rotation.x = -e2;\ncbA.set(CBX, D1 - 0.08, A1 - 0.42); cbB.set(CBX, D1 + 0.42 * Math.sin(e1), A1 + 0.42 * Math.cos(e1)); cbD.subVectors(cbB, cbA); const cbL = cbD.length(); cbD.divideScalar(cbL);\ncbTube.position.copy(cbA); cbTube.quaternion.setFromUnitVectors(AY, cbD); cbRod.position.copy(cbA); cbRod.quaternion.copy(cbTube.quaternion); cbRod.scale.set(1, cbL, 1);\nqT.setFromAxisAngle(AY, a1); qF.setFromAxisAngle(AX, -e2); qW.copy(qT).multiply(qF);\nvD.set(W.ax, W.ay, W.az).applyQuaternion(qW.clone().invert());\nlet tgt = Math.atan2(vD.x, -vD.y), best = 0; for (const c of [tgt, tgt + Math.PI, tgt - Math.PI]) { let w = c - a4Now; w = Math.atan2(Math.sin(w), Math.cos(w)); if (best === 0 || Math.abs(w) < Math.abs(best)) best = w || 1e-9; }\nconst lim = 1.2 * poseDt; a4Now += Math.max(-lim, Math.min(lim, best));\nconst ca = Math.cos(a4Now), sa = Math.sin(a4Now), vy = -sa * vD.x + ca * vD.y, a5 = Math.atan2(-vy, vD.z);\nroll.rotation.z = a4Now; wrist.rotation.x = a5;\nqW.multiply(roll.quaternion).multiply(wrist.quaternion);\nvR.copy(toolDir).applyQuaternion(qW.clone().invert());\nconst a6 = Math.atan2(vR.y, vR.x); flange.rotation.z = a6;\n[a1, e1, e2 - e1, a4Now, a5, a6].forEach((v, i) => { const t = `${Math.round(v * 180 \/ Math.PI)}\u00b0`; if (axisOut[i].dataset.v !== t) axisOut[i].dataset.v = t; });\nlayHose();\n}\nconst showBody = () => { body.geometry.setDrawRange(0, Math.floor(idx) * 36); };\nlet az = 0.85, po = 1.2, azT = az, poT = po, vAz = 0, vPo = 0, tx = 0, ty = 0.75, tz = 0.95, zoom = 1, raf = 0, last = 0, W = 1, Hh = 1;\nconst running = () => phase !== 'idle' || Math.abs(az - azT) > 1e-3 || Math.abs(po - poT) > 1e-3 || Math.abs(vAz) > 1e-4 || Math.abs(vPo) > 1e-4;\nconst go = (t, dt) => { moveSp = Math.min(0.8, moveSp + 0.9 * dt); const d = t.distanceTo(tip), sp = Math.min(moveSp, d * 1.6 + 0.02) * dt; if (d <= sp) { tip.copy(t); return true; } tip.lerp(t, sp \/ d); return false; };\nconst sample = (i, out) => {\nlet x = 0, z = 0, dx = 0, dy = 0, dz = 0;\nfor (let k = -3; k <= 3; k++) { const q = Math.max(0, Math.min(N - 1, i + k)), a = tips[Math.floor(q)], b = tips[Math.min(N - 1, Math.floor(q) + 1)], f = q % 1; x += a.x + (b.x - a.x) * f; z += a.z + (b.z - a.z) * f; dx += a.dir[0]; dy += a.dir[1]; dz += a.dir[2]; }\nconst a = tips[Math.floor(i)], b = tips[Math.min(N - 1, Math.floor(i) + 1)];\nout.set(x \/ 7, a.y + (b.y - a.y) * (i % 1) + a.hh, z \/ 7); dirT.set(dx, dy, dz).normalize();\n};\nconst vt = new THREE.Vector3();\nfunction frame(ts) {\nraf = 0; const dt = Math.min(0.05, last ? (ts - last) \/ 1000 : 0.016); last = ts; poseDt = dt;\nif (visible || phase === 'idle') {\nif (phase !== lastPhase) { moveSp = 0; lastPhase = phase; }\nif (phase === 'approach') { sample(Math.min(N - 1, idx), vt); if (go(vt, dt)) phase = 'print'; }\nelse if (phase === 'print') {\nidx = Math.min(N - 1, idx + 0.35 \/ STEP * dt);\nsample(idx, tip);\nshowBody(); if (idx >= N - 1) phase = 'park';\n} else if (phase === 'park') { dirT.set(0, -1, 0); if (go(HOME, dt)) phase = 'idle'; }\ntoolDir.lerp(dirT, 1 - Math.exp(-dt * 6)).normalize(); pose();\n}\nconst k = 1 - Math.exp(-dt * 5);\nif (!dragging) { azT += vAz; poT = Math.max(0.2, Math.min(1.5, poT + vPo)); vAz *= 0.9; vPo *= 0.9; }\naz += (azT - az) * k; po += (poT - po) * k;\nconst [gx, gy, gz, gw, gh] = drawing ? [0, 0.1, CZ, PW * 2 + 0.3, PD * 2 + 0.3] : [0, 0.75, 0.95, 3.7, 2.7];\ntx += (gx - tx) * k; ty += (gy - ty) * k; tz += (gz - tz) * k;\nconst tanV = Math.tan(camera.fov * Math.PI \/ 360), want = Math.max(gw \/ 2 \/ (tanV * camera.aspect), gh \/ 2 \/ tanV) + (drawing ? 0.6 : 0.9); zoom += (want - zoom) * k;\ncamera.position.set(tx + zoom * Math.sin(po) * Math.sin(az), ty + zoom * Math.cos(po), tz + zoom * Math.sin(po) * Math.cos(az));\ncamera.lookAt(tx, ty, tz); renderer.render(scene, camera);\nif (running() || Math.abs(zoom - want) > 1e-3) req(); else last = 0;\n}\nconst req = () => { if (!raf) raf = requestAnimationFrame(frame); };\nconst start = (from = 0) => { idx = from * (N - 1); phase = 'approach'; body.visible = true; showBody(); req(); };\nsetPreset = k => { if (drawing) leaveDraw(); const c = PRESETS[k]; base = { pts: resample(c.pts(), c.closed), closed: c.closed }; rebuild(); start(); };\nrestart = () => { if (drawing) leaveDraw(); start(); };\nlet dirty = false;\nschedule = () => {\nif (dirty) return; dirty = true;\nrequestAnimationFrame(() => { dirty = false; const frac = N > 1 ? idx \/ (N - 1) : 0, done = phase === 'park' || phase === 'idle'; rebuild(); idx = done ? N - 1 : frac * (N - 1); if (!done && !drawing) phase = 'approach'; showBody(); pose(); req(); });\n};\nconst ray = new THREE.Raycaster(), plane = new THREE.Plane(new THREE.Vector3(0, 1, 0), -(PT + 0.003)), hit = new THREE.Vector3(), mouse = new THREE.Vector2();\nlet saved = null, stroke = null, dragging = false, px = 0, py = 0;\nconst enterDraw = () => { drawing = true; saved = { az: azT, po: poT }; azT = 0; poT = 0.25; vAz = vPo = 0; body.visible = false; phase = 'park'; stage.classList.add('is-draw'); drawBtn.textContent = T.cancel; drawBtn.setAttribute('aria-pressed', 'true'); hint.textContent = T.drawHint; req(); };\nfunction leaveDraw() { drawing = false; azT = saved.az; poT = saved.po; preview.visible = false; stage.classList.remove('is-draw'); drawBtn.textContent = T.draw; drawBtn.setAttribute('aria-pressed', 'false'); hint.textContent = T.hint; body.visible = true; }\ntoggleDraw = () => { if (drawing) { leaveDraw(); showBody(); if (idx < N - 1) phase = 'approach'; req(); } else enterDraw(); };\nconst onPlate = e => {\nconst b = renderer.domElement.getBoundingClientRect(); mouse.set((e.clientX - b.left) \/ b.width * 2 - 1, -(e.clientY - b.top) \/ b.height * 2 + 1);\nray.setFromCamera(mouse, camera); if (!ray.ray.intersectPlane(plane, hit)) return null;\nreturn [Math.max(CX - PW + 0.02, Math.min(CX + PW - 0.02, hit.x)), Math.max(CZ - PD + 0.02, Math.min(CZ + PD - 0.02, hit.z))];\n};\nconst paintStroke = () => { const a = previewGeo.attributes.position, n = Math.min(stroke.length, 1000); for (let i = 0; i < n; i++) a.setXYZ(i, stroke[i][0], PT + 0.004, stroke[i][1]); a.needsUpdate = true; previewGeo.setDrawRange(0, n); preview.visible = true; req(); };\nconst canvas = renderer.domElement;\ncanvas.addEventListener('pointerdown', e => {\ncanvas.setPointerCapture(e.pointerId);\nif (drawing) { const p = onPlate(e); if (p) { stroke = [p]; paintStroke(); } return; }\ndragging = true; px = e.clientX; py = e.clientY; vAz = vPo = 0;\n});\ncanvas.addEventListener('pointermove', e => {\nif (drawing) { if (!stroke) return; const p = onPlate(e), l = stroke[stroke.length - 1]; if (p && Math.hypot(p[0] - l[0], p[1] - l[1]) > 0.015 && stroke.length < 1000) { stroke.push(p); paintStroke(); } return; }\nif (!dragging) return;\nazT -= (e.clientX - px) * 0.007; if (e.pointerType !== 'touch') poT = Math.max(0.2, Math.min(1.5, poT - (e.clientY - py) * 0.005)); px = e.clientX; py = e.clientY; req();\n});\nconst finishStroke = () => {\nif (!stroke) return; const s = stroke; stroke = null;\nlet len = 0; for (let i = 1; i < s.length; i++) len += Math.hypot(s[i][0] - s[i - 1][0], s[i][1] - s[i - 1][1]);\nif (len < 0.25) { preview.visible = false; req(); return; }\nconst closed = len > 0.8 && Math.hypot(s[0][0] - s[s.length - 1][0], s[0][1] - s[s.length - 1][1]) < 0.2;\nbase = { pts: resample(smooth(s.map(q => [q[0] - CX, q[1] - CZ]), closed), closed), closed }; markPreset(''); leaveDraw(); rebuild(); start();\n};\ncanvas.addEventListener('pointerup', () => { dragging = false; if (drawing) finishStroke(); });\ncanvas.addEventListener('pointercancel', () => { dragging = false; stroke = null; preview.visible = false; });\nif ('IntersectionObserver' in window) new IntersectionObserver(es => { visible = es.some(e => e.isIntersecting); if (visible) { last = 0; req(); } }).observe(root);\nnew ResizeObserver(() => { W = stage.clientWidth; Hh = stage.clientHeight; if (!W || !Hh) return; renderer.setSize(W, Hh, false); camera.aspect = W \/ Hh; camera.updateProjectionMatrix(); req(); }).observe(stage);\nrebuild(); poseDt = 10; zoom = 8;\nif (matchMedia('(prefers-reduced-motion: reduce)').matches) { idx = N - 1; phase = 'idle'; showBody(); }\nelse { idx = 0.5 * (N - 1); showBody(); phase = 'approach'; }\nsample(idx, tip); toolDir.copy(dirT); pose(); poseDt = 0.016; req();\n}\n<\/script><p class=\"ps-play__more\"><a href=\"https:\/\/parametricsolutions.de\/2026\/10\/28\/larger-slicer-grasshopper-robotic-3d-printing\/\">LARGER.slicer: our Grasshopper slicer<\/a><\/p><\/section><section class=\"ps-play__demo\" id=\"ps-play-parts\" hidden><p class=\"ps-play__text\">Each variant of a part is created, checked against rules and placed on a print plate automatically, instead of being modelled by hand.<\/p><style>\n.ps-conf { container-type: inline-size; font-family: inherit; color: #2e2e2e; }\n.ps-conf * { box-sizing: border-box; }\n.ps-conf__grid { display: grid; grid-template-columns: 1fr; border: 1px solid #e2e2e2; }\n.ps-conf__stage { position: relative; aspect-ratio: 4 \/ 3; background: #f4f4f2; touch-action: pan-y; cursor: grab; overflow: hidden; }\n.ps-conf__stage:active { cursor: grabbing; }\n.ps-conf__stage canvas { display: block; width: 100%; height: 100%; }\n.ps-conf__hint { position: absolute; left: 16px; bottom: 12px; font-size: 13px; color: #777; pointer-events: none; }\n.ps-conf__panel { padding: 20px; background: #fff; }\n.ps-conf__title { margin: 0 0 16px; font-size: 18px; line-height: 1.3; font-weight: 700; color: #111; }\n.ps-conf__row { margin-bottom: 13px; }\n.ps-conf__row label { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; line-height: 1.3; margin-bottom: 5px; }\n.ps-conf__row output { font-weight: 500; color: #111; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.ps-conf input[type=range] { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 24px !important; margin: 0; padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; cursor: pointer; --p: 50%; }\n.ps-conf input[type=range]::-webkit-slider-runnable-track { height: 2px; background: linear-gradient(to right, #32373c var(--p), #cfcfcf var(--p)); }\n.ps-conf input[type=range]::-moz-range-track { height: 2px; background: #cfcfcf; }\n.ps-conf input[type=range]::-moz-range-progress { height: 2px; background: #32373c; }\n.ps-conf input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 18px; margin-top: -8px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]::-moz-range-thumb { width: 14px; height: 18px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]:focus-visible { outline: 2px solid #32373c; outline-offset: 2px; }\n.ps-conf__wood { display: flex; gap: 6px; margin: 16px 0; }\n.ps-conf__wood button { flex: 1; min-height: 40px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__wood button[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 0 0 16px; padding: 14px 0; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-conf__stats div { min-width: 0; }\n.ps-conf__stats dt { font-size: 13px; line-height: 1.3; color: #777; }\n.ps-conf__stats dd { margin: 0; font-size: 17px; font-weight: 500; color: #111; font-variant-numeric: tabular-nums; }\n.ps-conf__csv { width: 100%; min-height: 46px; padding: 10px 16px; font: inherit; font-size: 16px; font-weight: 500; color: #fff; background: #32373c; border: 0; border-radius: 0; cursor: pointer; }\n.ps-conf__csv:hover { background: #111; }\n.ps-conf__csvlink { display: block; width: 100%; margin-top: 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; text-decoration: underline; background: none; border: 0; cursor: pointer; }\n.ps-conf__dim { position: absolute; left: 0; top: 0; padding: 1px 5px; font-size: 12px; line-height: 1.4; font-weight: 500; color: #111; background: rgba(244,244,242,.92); white-space: nowrap; pointer-events: none; font-variant-numeric: tabular-nums; }\n.ps-conf__dimtoggle { position: absolute; right: 12px; top: 12px; z-index: 2; min-height: 34px; padding: 4px 12px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__dimtoggle[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__error { padding: 24px; font-size: 15px; }\n@container (min-width: 760px) {\n.ps-conf__grid { grid-template-columns: minmax(0, 1fr) 320px; }\n.ps-conf__stage { aspect-ratio: auto; min-height: 620px; }\n.ps-conf__panel { border-left: 1px solid #e2e2e2; }\n}\n<\/style>\n<style>\n.ps-parts .ps-parts__title { margin: 0 0 12px; font-size: 17px; line-height: 1.25; font-weight: 700; color: #111; hyphens: none; }\n.ps-parts .ps-parts__more { margin: 2px 0 14px; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-parts .ps-parts__more summary { padding: 9px 0; font-size: 13px; font-weight: 700; color: #111; cursor: pointer; }\n.ps-parts .ps-parts__more[open] { padding-bottom: 4px; }\n.ps-parts .ps-parts__morerows { margin-bottom: 4px; }\n.ps-parts .ps-parts__note { margin: 0 0 10px; font-size: 12px; line-height: 1.35; color: #777; }\n.ps-parts .ps-parts__intro { margin: 0 0 12px; font-size: 14px; line-height: 1.4; color: #555; }\n.ps-parts .ps-parts__sub { margin: 0 0 6px; font-size: 13px; font-weight: 700; color: #111; }\n.ps-parts .ps-parts__list { max-height: 100px; overflow-y: auto; margin: 0 0 8px; border-top: 1px solid #e2e2e2; }\n.ps-parts .ps-parts__row { display: grid; grid-template-columns: 14px 56px 1fr; gap: 6px; align-items: center; width: 100%; min-height: 32px; padding: 4px 6px; font: inherit; font-size: 13px; line-height: 1.2; text-align: left; color: #2e2e2e; background: #fff; border: 0; border-bottom: 1px solid #e2e2e2; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-parts__row b { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ps-parts .ps-parts__row span { color: #777; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ps-parts .ps-parts__row i { width: 9px; height: 9px; border-radius: 50%; background: #3f9a5f; }\n.ps-parts .ps-parts__row.is-bad i { background: #c8321f; }\n.ps-parts .ps-parts__row[aria-pressed=true] { color: #fff; background: #32373c; }\n.ps-parts .ps-parts__row[aria-pressed=true] span { color: #d5d5d5; }\n.ps-parts .ps-parts__tools { display: flex; gap: 6px; margin: 0 0 14px; }\n.ps-parts .ps-parts__tools button { flex: 1; min-height: 34px; padding: 4px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-conf__row { margin-bottom: 8px; }\n.ps-parts .ps-parts__label { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 0 12px; font-size: 14px; }\n.ps-parts .ps-parts__label input { width: 130px !important; min-height: 32px; margin: 0 !important; padding: 3px 6px !important; font: inherit; font-size: 13px !important; color: #2e2e2e !important; background: #fff !important; border: 1px solid #cfcfcf !important; border-radius: 0 !important; box-shadow: none !important; }\n.ps-parts .ps-conf__warn { margin: 0 0 14px; padding: 8px 10px; font-size: 13px; line-height: 1.35; color: #111; background: #f9e4e1; border-left: 3px solid #c8321f; }\n.ps-parts .ps-conf__warn:empty { display: none; }\n.ps-parts .ps-parts__save { margin: 0 0 12px; padding: 10px 12px; font-size: 14px; line-height: 1.35; color: #111; background: #f4f4f2; }\n.ps-parts .ps-parts__save strong { display: block; font-size: 17px; font-weight: 700; }\n.ps-parts .ps-parts__save small { display: block; margin-top: 4px; font-size: 12px; color: #777; }\n.ps-parts .ps-parts__stl { width: 100%; min-height: 40px; margin: 0 0 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #32373c; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-parts__stl:disabled { opacity: .4; cursor: default; }\n.ps-parts a.ps-conf__csv { display: block; box-sizing: border-box; text-align: center; color: #fff !important; text-decoration: none !important; }\n.ps-parts .ps-parts__pager { position: absolute; left: 50%; bottom: 12px; z-index: 2; display: flex; align-items: center; transform: translateX(-50%); background: #fff; border: 1px solid #cfcfcf; font-size: 13px; white-space: nowrap; }\n.ps-parts .ps-parts__pager button { width: 34px; height: 34px; padding: 0; font: inherit; font-size: 16px; color: #2e2e2e; background: none; border: 0; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-parts__pager button:disabled { opacity: .3; cursor: default; }\n.ps-parts .ps-parts__pager span { padding: 0 8px; }\n@container (max-width: 759px) { .ps-parts .ps-conf__hint { display: none; } }\n@container (min-width: 760px) { .ps-parts .ps-conf__grid { background: #f4f4f2; } .ps-parts .ps-conf__stage { align-self: stretch; height: auto; min-height: 560px; } }\n<\/style>\n<div class=\"ps-conf ps-parts\" id=\"ps-parts\" data-three=\"\/wp-content\/uploads\/ps-configurator\/three.module.min.js\">\n<div class=\"ps-conf__grid\">\n<div class=\"ps-conf__stage\"><button type=\"button\" class=\"ps-conf__dimtoggle\" aria-pressed=\"false\" data-t=\"regen\"><\/button><div class=\"ps-conf__hint\" data-t=\"hint\"><\/div><div class=\"ps-parts__pager\" data-no-translation><button type=\"button\" data-p=\"-1\" aria-label=\"&lt;\">\u2039<\/button><span><\/span><button type=\"button\" data-p=\"1\" aria-label=\"&gt;\">\u203a<\/button><\/div><\/div>\n<div class=\"ps-conf__panel\">\n<h3 class=\"ps-parts__title\" data-t=\"title\"><\/h3>\n<p class=\"ps-parts__sub\" data-t=\"variants\"><\/p>\n<div class=\"ps-parts__list\" data-no-translation><\/div>\n<p class=\"ps-parts__sub\" data-no-translation data-edit><\/p>\n<div class=\"ps-conf__sliders\" data-no-translation><\/div>\n<details class=\"ps-parts__more\">\n<summary data-t=\"more\"><\/summary>\n<p class=\"ps-parts__intro\" data-t=\"intro\"><\/p>\n<div class=\"ps-parts__morerows\" data-no-translation><\/div>\n<label class=\"ps-parts__label\"><span data-t=\"label\"><\/span><input type=\"text\" maxlength=\"24\" data-no-translation><\/label>\n<div class=\"ps-parts__tools\"><button type=\"button\" data-a=\"add\" data-t=\"add\"><\/button><button type=\"button\" data-a=\"del\" data-t=\"del\"><\/button><\/div>\n<div class=\"ps-parts__save\" data-no-translation><\/div>\n<p class=\"ps-parts__note\"><\/p>\n<\/details>\n<p class=\"ps-conf__warn\" aria-live=\"polite\" data-no-translation><\/p>\n<dl class=\"ps-conf__stats\" data-no-translation><\/dl>\n<button type=\"button\" class=\"ps-parts__stl\" data-t=\"stl\"><\/button>\n<a class=\"ps-conf__csv\" data-t=\"cta\"><\/a>\n<\/div>\n<\/div>\n<\/div>\n<script type=\"module\">\nconst root = document.getElementById('ps-parts');\nconst lang = new URLSearchParams(location.search).get('lang') || document.documentElement.lang || 'de';\nconst de = lang.toLowerCase().startsWith('de');\nconst T = de ? {\nmore: 'Weitere Optionen', title: 'Beispiel: Viele Varianten, ein Skript', intro: 'Jede Zeile ist eine Variante desselben Halters. W\u00e4hlen Sie eine aus und \u00e4ndern Sie ihre Ma\u00dfe. Bauteil, Pr\u00fcfung und Druckplatte passen sich automatisch an.', hint: 'Ziehen zum Drehen', regen: 'Neu generieren', variants: 'Varianten', edit: n => `Variante ${n} anpassen`, w: 'Breite', h: 'H\u00f6he', d: 'Tiefe', n: 'L\u00f6cher', wall: 'Wandst\u00e4rke (alle)', label: 'Beschriftung', add: '+ Variante', del: 'Entfernen', holes: n => n === 1 ? 'Loch' : 'L\u00f6cher',\nparts: 'Druckfertige Teile', plates: 'Druckplatten', time: 'Druckzeit', mass: 'Material', stl: 'Diese Platte als STL', cta: 'Bauteil anfragen', contact: '\/de\/contact-lets-connect\/',\nhand: h => `Von Hand ca. ${h}`, auto: 'Automatisiert in Sekunden', note: n => `Annahme: 30 Minuten Handarbeit je Variante, ${n} Varianten. Beispielbauteil, keine Fertigungsfreigabe.`, plate: (a, b) => `Platte ${a} von ${b}`, none: 'Nicht druckbar', bad: e => `Diese Variante wird nicht gedruckt: ${e}.`,\neSize: 'passt nicht in den Bauraum', eWall: 'Wand unter 2 mm', eHoles: 'L\u00f6cher zu eng', hrs: 'Std.', min: 'Min.'\n} : {\nmore: 'More Options', title: 'Example: Many Variants, One Script', intro: 'Each row is a variant of the same bracket. Pick one and change its size. Part, checks and print plate update automatically.', hint: 'Drag to rotate', regen: 'Regenerate', variants: 'Variants', edit: n => `Adjust variant ${n}`, w: 'Width', h: 'Height', d: 'Depth', n: 'Holes', wall: 'Wall thickness (all)', label: 'Label', add: '+ Variant', del: 'Remove', holes: n => n === 1 ? 'hole' : 'holes',\nparts: 'Print-ready parts', plates: 'Print plates', time: 'Print time', mass: 'Material', stl: 'This plate as STL', cta: 'Request a Part', contact: '\/contact-lets-connect\/',\nhand: h => `By hand approx. ${h}`, auto: 'Automated in seconds', note: n => `Assumption: 30 minutes of manual work per variant, ${n} variants. Sample part, not released for production.`, plate: (a, b) => `Plate ${a} of ${b}`, none: 'Not printable', bad: e => `This variant will not be printed: ${e}.`,\neSize: 'does not fit the build volume', eWall: 'wall below 2 mm', eHoles: 'holes too close', hrs: 'h', min: 'min'\n};\nroot.querySelectorAll('[data-t]').forEach(el => { el.textContent = T[el.dataset.t]; });\nroot.querySelector('a.ps-conf__csv').href = T.contact;\nconst num = (v, d = 0) => v.toLocaleString(de ? 'de-DE' : 'en-GB', { minimumFractionDigits: d, maximumFractionDigits: d });\nconst SAMPLE = [[120, 70, 50, 3, 'A-120'], [90, 60, 45, 2, 'A-090'], [60, 40, 35, 2, 'B-060'], [150, 80, 60, 4, 'A-150'], [80, 90, 40, 2, 'C-080'], [45, 35, 30, 1, 'B-045'], [100, 50, 70, 3, 'D-100'], [70, 70, 50, 2, 'C-070'], [130, 60, 40, 4, 'A-130'], [55, 45, 45, 1, 'B-055'], [40, 40, 30, 1, 'E-040'], [280, 60, 50, 6, 'L-280']];\nconst list = SAMPLE.map(a => ({ w: a[0], h: a[1], d: a[2], n: a[3], label: a[4] }));\nconst state = { wall: 4 };\nlet sel = 0, page = 0, plates = [];\nconst PL = 256, PH = 256, GAP = 8, HOLE = 5, S = 0.01;\nlet schedule = () => refresh(), regen = () => {}, downloadPlate = () => {}, showPage = () => {};\nconst check = p => {\nconst e = [], t = state.wall;\nif (Math.max(p.w, p.d) > PL - 2 * GAP || p.h > PH) e.push(T.eSize);\nif (t < 2) e.push(T.eWall);\nif ((p.w - 2 * t) \/ Math.max(1, p.n) < HOLE * 2.5) e.push(T.eHoles);\nreturn e;\n};\nconst pack = parts => {\nconst good = parts.filter(p => !p.errors.length).sort((a, b) => b.d - a.d || b.w - a.w), out = [];\nconst open = () => { const pl = { z: GAP, rows: [], items: [] }; out.push(pl); return pl; };\nopen();\nfor (const p of good) {\nlet done = false;\nfor (const pl of out) {\nconst row = pl.rows.find(r => r.x + p.w + GAP <= PL);\nif (row) { pl.items.push({ p, x: row.x + p.w \/ 2, z: row.z + p.d \/ 2 }); row.x += p.w + GAP; done = true; break; }\nif (pl.z + p.d + GAP <= PL) { const r = { z: pl.z, x: GAP + p.w + GAP }; pl.rows.push(r); pl.z += p.d + GAP; pl.items.push({ p, x: GAP + p.w \/ 2, z: r.z + p.d \/ 2 }); done = true; break; }\n}\nif (!done) { const pl = open(), r = { z: pl.z, x: GAP + p.w + GAP }; pl.rows.push(r); pl.z += p.d + GAP; pl.items.push({ p, x: GAP + p.w \/ 2, z: r.z + p.d \/ 2 }); }\n}\nreturn out;\n};\nconst volume = p => { const t = state.wall, hA = Math.PI * HOLE * HOLE \/ 4 * t * 2 * p.n; return t * (p.w * p.d + p.w * (p.h - t)) + t * (p.d - t) * (p.h - t) - hA; };\nconst listEl = root.querySelector('.ps-parts__list'), boxEl = root.querySelector('.ps-conf__sliders'), labelIn = root.querySelector('.ps-parts__label input'), editEl = root.querySelector('[data-edit]');\nconst rowText = p => `${p.w} \u00d7 ${p.h} \u00d7 ${p.d} \u00b7 ${p.n} ${T.holes(p.n)}`;\nconst renderList = () => {\nlistEl.innerHTML = '';\nlist.forEach((p, i) => {\nconst r = document.createElement('button'); r.type = 'button'; r.className = 'ps-parts__row'; r.setAttribute('aria-pressed', i === sel);\nr.innerHTML = '<i><\/i><b><\/b><span><\/span>'; r.querySelector('b').textContent = p.label; r.querySelector('span').textContent = rowText(p);\nr.addEventListener('click', () => select(i)); p.el = r; listEl.append(r);\n});\n};\nconst FIELDS = { w: [20, 300, 5], h: [15, 260, 5], d: [15, 300, 5], n: [0, 8, 1] }, paints = {};\nconst addSlider = (key, min, max, step, get, set, show) => {\nconst row = document.createElement('div'); row.className = 'ps-conf__row'; const id = 'ps-parts-' + key;\nrow.innerHTML = `<label for=\"${id}\"><span>${T[key]}<\/span><output><\/output><\/label><input id=\"${id}\" type=\"range\" min=\"${min}\" max=\"${max}\" step=\"${step}\">`;\nconst input = row.querySelector('input'), out = row.querySelector('output');\nconst paint = () => { const v = get(); input.value = v; out.textContent = show(v); input.style.setProperty('--p', ((Math.min(max, v) - min) \/ (max - min) * 100) + '%'); };\ninput.addEventListener('input', () => { set(+input.value); paint(); const p = list[sel]; if (p) { p.el.querySelector('span').textContent = rowText(p); } schedule(); });\npaints[key] = paint; (key === 'n' || key === 'wall' ? root.querySelector('.ps-parts__morerows') : boxEl).append(row);\n};\nfor (const [k, f] of Object.entries(FIELDS)) addSlider(k, f[0], f[1], f[2], () => (list[sel] || {})[k] || 0, v => { if (list[sel]) list[sel][k] = v; }, v => k === 'n' ? `${v}` : `${v} mm`);\naddSlider('wall', 1, 8, 0.5, () => state.wall, v => { state.wall = v; }, v => `${num(v, 1)} mm`);\nconst paintAll = () => { Object.values(paints).forEach(f => f()); const p = list[sel]; labelIn.value = p ? p.label : ''; editEl.textContent = p ? T.edit(p.label) : ''; };\nfunction select(i, jump = true) { sel = i; [...listEl.children].forEach((r, k) => r.setAttribute('aria-pressed', k === i)); paintAll(); if (jump) schedule(); }\nlabelIn.addEventListener('input', () => { const p = list[sel]; if (!p) return; p.label = labelIn.value; p.el.querySelector('b').textContent = p.label; editEl.textContent = T.edit(p.label); schedule(); });\nroot.querySelector('[data-a=add]').addEventListener('click', () => { const l = list[sel] || { w: 100, h: 60, d: 50, n: 2 }; list.push({ w: l.w, h: l.h, d: l.d, n: l.n, label: `V-${String(list.length + 1).padStart(3, '0')}` }); renderList(); select(list.length - 1); listEl.scrollTop = listEl.scrollHeight; });\nroot.querySelector('[data-a=del]').addEventListener('click', () => { if (list.length < 2) return; list.splice(sel, 1); sel = Math.min(sel, list.length - 1); renderList(); select(sel); });\nconst stats = root.querySelector('.ps-conf__stats');\nstats.innerHTML = ['parts', 'plates', 'time', 'mass'].map(k => `<div><dt>${T[k]}<\/dt><dd data-s=\"${k}\"><\/dd><\/div>`).join('');\nconst warn = root.querySelector('.ps-conf__warn'), save = root.querySelector('.ps-parts__save'), stlBtn = root.querySelector('.ps-parts__stl'), pagerText = root.querySelector('.ps-parts__pager span'), pagerBtns = root.querySelectorAll('.ps-parts__pager button');\nstlBtn.addEventListener('click', () => downloadPlate());\npagerBtns.forEach(b => b.addEventListener('click', () => showPage(+b.dataset.p)));\nfunction refresh() {\nlist.forEach(p => { p.errors = check(p); p.el.classList.toggle('is-bad', p.errors.length > 0); });\nplates = pack(list);\nconst good = list.filter(p => !p.errors.length), vol = good.reduce((a, p) => a + volume(p), 0), sec = vol \/ 12 * 1.2 + good.length * 45, cur = list[sel];\nconst at = cur && !cur.errors.length ? plates.findIndex(pl => pl.items.some(it => it.p === cur)) : -1; if (at >= 0) page = at; page = Math.min(page, plates.length - 1);\nconst v = k => stats.querySelector(`[data-s=${k}]`);\nv('parts').textContent = `${good.length} \/ ${list.length}`; v('plates').textContent = num(good.length ? plates.length : 0);\nv('time').textContent = sec >= 3600 ? `${num(sec \/ 3600, 1)} ${T.hrs}` : `${num(sec \/ 60)} ${T.min}`; v('mass').textContent = `${num(vol \/ 1000 * 1.24)} g`;\nwarn.textContent = cur && cur.errors.length ? T.bad(cur.errors.join(', ')) : '';\nconst hand = list.length * 0.5;\nsave.innerHTML = `<strong>${T.hand(`${num(hand, hand % 1 ? 1 : 0)} ${T.hrs}`)}<\/strong>${T.auto}`; root.querySelector('.ps-parts__note').textContent = T.note(list.length);\npaintPager();\n}\nconst showsBad = () => { const c = list[sel]; return !!(c && c.errors && c.errors.length); };\nfunction paintPager() {\nconst n = plates.length, bad = showsBad();\npagerText.textContent = bad ? T.none : T.plate(page + 1, n);\npagerBtns[0].disabled = bad || page <= 0; pagerBtns[1].disabled = bad || page >= n - 1;\nstlBtn.disabled = bad || !plates[page] || !plates[page].items.length;\n}\nrenderList(); paintAll(); refresh();\nconst stage = root.querySelector('.ps-conf__stage');\nlet THREE;\nconst load = async () => {\ntry { THREE = await import(new URL(root.dataset.three, location.href).href); init(); }\ncatch (err) { console.error(err); stage.innerHTML = `<div class=\"ps-conf__error\">WebGL<\/div>`; }\n};\nif ('IntersectionObserver' in window) { const io = new IntersectionObserver(es => { if (es.some(e => e.isIntersecting)) { io.disconnect(); load(); } }, { rootMargin: '400px' }); io.observe(root); } else load();\nfunction init() {\nconst renderer = new THREE.WebGLRenderer({ antialias: true });\nrenderer.setPixelRatio(Math.min(devicePixelRatio, 2));\nrenderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFShadowMap; renderer.toneMapping = THREE.ACESFilmicToneMapping;\nstage.prepend(renderer.domElement); renderer.domElement.style.touchAction = 'pan-y';\nconst scene = new THREE.Scene(); scene.background = new THREE.Color(0xf4f4f2);\nconst camera = new THREE.PerspectiveCamera(26, 1, 0.5, 200);\nscene.add(new THREE.HemisphereLight(0xffffff, 0xcfc9be, 1.35));\nconst sun = new THREE.DirectionalLight(0xfff4e6, 2.3); sun.position.set(2.4, 6.5, 3.2); sun.target.position.set(0, 0, 0); sun.castShadow = true; sun.shadow.mapSize.set(2048, 2048); sun.shadow.bias = -0.0003; sun.shadow.normalBias = 0.006; sun.shadow.radius = 5;\nObject.assign(sun.shadow.camera, { left: -3, right: 3, top: 3, bottom: -3, near: 1, far: 16 }); scene.add(sun, sun.target);\nconst ground = new THREE.Mesh(new THREE.PlaneGeometry(60, 60), new THREE.ShadowMaterial({ opacity: 0.13 })); ground.rotation.x = -Math.PI \/ 2; ground.position.y = -0.1; ground.receiveShadow = true; scene.add(ground);\nconst partMat = new THREE.MeshStandardMaterial({ color: 0xece5d8, roughness: 0.55 }), selMat = new THREE.MeshStandardMaterial({ color: 0x9c82dd, roughness: 0.5 }), badMat = new THREE.MeshStandardMaterial({ color: 0xe0573f, roughness: 0.55 });\nconst rrect = (w, r) => { const s = new THREE.Shape(), x = w \/ 2; s.moveTo(-x + r, -x); s.lineTo(x - r, -x); s.quadraticCurveTo(x, -x, x, -x + r); s.lineTo(x, x - r); s.quadraticCurveTo(x, x, x - r, x); s.lineTo(-x + r, x); s.quadraticCurveTo(-x, x, -x, x - r); s.lineTo(-x, -x + r); s.quadraticCurveTo(-x, -x, -x + r, -x); return s; };\nconst plateGeo = (w, th, r) => new THREE.ExtrudeGeometry(rrect(w, r), { depth: th, curveSegments: 12, bevelEnabled: false }).rotateX(-Math.PI \/ 2);\nconst carrier = new THREE.Mesh(plateGeo(PL * S + 0.14, 0.05, 0.09), new THREE.MeshStandardMaterial({ color: 0xb9bcbf, roughness: 0.45 })); carrier.position.y = -0.075; carrier.receiveShadow = true; carrier.castShadow = true; scene.add(carrier);\nconst bed = new THREE.Mesh(plateGeo(PL * S, 0.025, 0.06), new THREE.MeshStandardMaterial({ color: 0x41454b, roughness: 0.82 })); bed.position.y = -0.025; bed.receiveShadow = true; scene.add(bed);\nconst lines = []; for (let k = -6; k <= 6; k++) { const q = k \/ 6 * 1.2; lines.push(q, 0.001, -1.2, q, 0.001, 1.2, -1.2, 0.001, q, 1.2, 0.001, q); }\nconst gridGeo = new THREE.BufferGeometry(); gridGeo.setAttribute('position', new THREE.Float32BufferAttribute(lines, 3)); scene.add(new THREE.LineSegments(gridGeo, new THREE.LineBasicMaterial({ color: 0x575b61 })));\nconst world = new THREE.Group(); scene.add(world);\nconst holesIn = (s, n, w, y) => { for (let i = 0; i < n; i++) { const h = new THREE.Path(); h.absarc(-w \/ 2 + w * (i + 0.5) \/ n, y, HOLE \/ 2, 0, Math.PI * 2, true); s.holes.push(h); } };\nconst ex = (s, depth) => new THREE.ExtrudeGeometry(s, { depth, curveSegments: 10, bevelEnabled: false });\nconst merge = gs => { const pos = []; for (const g of gs) { const n = g.index ? g.toNonIndexed() : g, a = n.attributes.position; for (let i = 0; i < a.count; i++) pos.push(a.getX(i), a.getY(i), a.getZ(i)); } const o = new THREE.BufferGeometry(); o.setAttribute('position', new THREE.Float32BufferAttribute(pos, 3)); o.computeVertexNormals(); return o; };\nconst emboss = (txt, t, z, maxW) => {\nconst ROWS = 11, c = document.createElement('canvas'), x = c.getContext('2d', { willReadFrequently: true }), font = `700 ${ROWS}px sans-serif`; x.font = font;\nc.width = Math.max(1, Math.ceil(x.measureText(txt).width) + 2); c.height = ROWS + 2; x.font = font; x.textBaseline = 'middle'; x.fillStyle = '#000'; x.fillText(txt, 1, c.height \/ 2 + 0.5);\nconst d = x.getImageData(0, 0, c.width, c.height).data, px = Math.min(0.55, maxW \/ c.width), out = [], H = 0.6;\nfor (let r = 0; r < c.height; r++) { let run = -1; for (let i = 0; i <= c.width; i++) { const on = i < c.width && d[(r * c.width + i) * 4 + 3] > 110; if (on && run < 0) run = i; if (!on && run >= 0) { const len = i - run; out.push(new THREE.BoxGeometry(len * px, H, px).translate((run + len \/ 2 - c.width \/ 2) * px, t + H \/ 2, z + (r - c.height \/ 2) * px)); run = -1; } } }\nreturn out;\n};\nconst partGeo = p => {\nconst t = state.wall, w = p.w, d = p.d, h = p.h, R = Math.min(5, w \/ 4, d \/ 4), ok = !p.errors.length, parts = [];\nconst sb = new THREE.Shape(), x = w \/ 2, y = d \/ 2; sb.moveTo(-x, y); sb.lineTo(-x, -y + R); sb.quadraticCurveTo(-x, -y, -x + R, -y); sb.lineTo(x - R, -y); sb.quadraticCurveTo(x, -y, x, -y + R); sb.lineTo(x, y); sb.closePath();\nif (p.n && ok) holesIn(sb, p.n, w, -d * 0.02);\nparts.push(ex(sb, t).rotateX(-Math.PI \/ 2));\nconst sl = new THREE.Shape(), r2 = Math.min(8, w \/ 4, h \/ 4); sl.moveTo(-x, 0); sl.lineTo(x, 0); sl.lineTo(x, h - r2); sl.quadraticCurveTo(x, h, x - r2, h); sl.lineTo(-x + r2, h); sl.quadraticCurveTo(-x, h, -x, h - r2); sl.closePath();\nif (p.n && ok) holesIn(sl, p.n, w, h * 0.62);\nparts.push(ex(sl, t).translate(0, 0, -d \/ 2));\nconst zc = -d \/ 2 + t, along = (shape, depth, ox) => ex(shape, depth).rotateY(-Math.PI \/ 2).translate(ox, t, zc);\nconst f = Math.min(6, (d - t) * 0.3, (h - t) * 0.3), sf = new THREE.Shape(); sf.moveTo(0, 0); sf.lineTo(f, 0); sf.quadraticCurveTo(0.1 * f, 0.1 * f, 0, f); sf.closePath();\nparts.push(along(sf, w, w \/ 2));\nconst rd = (d - t) * 0.72, rh = (h - t) * 0.72, sr = new THREE.Shape(); sr.moveTo(0, 0); sr.lineTo(rd, 0); sr.lineTo(rd * 0.12, rh * 0.86); sr.lineTo(0, rh); sr.closePath();\nparts.push(along(sr, t, -x + t), along(sr, t, x));\nif (ok && p.label) parts.push(...emboss(p.label, t, d * 0.3, w - 8));\nreturn merge(parts);\n};\nconst build = (p, mat) => { const o = new THREE.Mesh(partGeo(p), mat); o.castShadow = true; o.receiveShadow = true; o.scale.setScalar(S); return o; };\nconst clear = () => { world.traverse(c => { if (c.geometry) c.geometry.dispose(); }); world.clear(); };\nlet items = [];\nconst POP = 70, HALF = PL * S \/ 2;\nfunction rebuild(animate) {\nclear(); items = [];\nconst cur = list[sel];\nif (showsBad()) { const o = build(cur, badMat); o.position.set(0, 0, 0); world.add(o); items.push(o); }\nelse if (plates[page]) for (const it of plates[page].items) { const o = build(it.p, it.p === cur ? selMat : partMat); o.position.set(it.x * S - HALF, 0, it.z * S - HALF); world.add(o); items.push(o); }\npaintPager();\nif (animate) { start = performance.now(); items.forEach(g => { g.visible = false; }); playing = true; } else playing = false;\nreq();\n}\nlet start = 0, playing = false, az = 0.62, po = 0.92, vAz = 0, vPo = 0, dragging = false, px = 0, py = 0, raf = 0, W = 1, H = 1;\nfunction frame() {\nraf = 0;\nif (playing) { const el = performance.now() - start; let open = false; items.forEach((g, i) => { const u = Math.max(0, Math.min(1, (el - i * POP) \/ 280)); g.visible = u > 0; const e = 1 - (1 - u) ** 3; g.scale.set(S, S * Math.max(0.01, e), S); if (u < 1) open = true; }); playing = open; }\naz += vAz; po = Math.max(0.3, Math.min(1.42, po + vPo)); if (!dragging) { vAz *= 0.9; vPo *= 0.9; } else { vAz = 0; vPo = 0; }\nconst tanV = Math.tan(camera.fov * Math.PI \/ 360), dist = Math.max(3.9 \/ 2 \/ (tanV * camera.aspect), 2.5 \/ 2 \/ tanV) + 0.4;\ncamera.position.set(dist * Math.sin(po) * Math.sin(az), 0.2 + dist * Math.cos(po), dist * Math.sin(po) * Math.cos(az)); camera.lookAt(0, 0.2, 0);\nrenderer.render(scene, camera);\nif (playing || Math.abs(vAz) > 1e-4 || Math.abs(vPo) > 1e-4) req();\n}\nconst req = () => { if (!raf) raf = requestAnimationFrame(frame); };\ndownloadPlate = () => {\nconst pl = plates[page]; if (!pl || showsBad()) return; const tris = [];\nfor (const it of pl.items) { const g = partGeo(it.p), a = g.attributes.position; for (let k = 0; k < a.count; k++) tris.push(a.getX(k) + it.x, -(a.getZ(k) + it.z), a.getY(k)); g.dispose(); }\nconst n = tris.length \/ 9, buf = new ArrayBuffer(84 + n * 50), v = new DataView(buf); v.setUint32(80, n, true);\nfor (let t = 0; t < n; t++) { const o = 84 + t * 50, q = t * 9, ux = tris[q + 3] - tris[q], uy = tris[q + 4] - tris[q + 1], uz = tris[q + 5] - tris[q + 2], wx = tris[q + 6] - tris[q], wy = tris[q + 7] - tris[q + 1], wz = tris[q + 8] - tris[q + 2]; let nx = uy * wz - uz * wy, ny = uz * wx - ux * wz, nz = ux * wy - uy * wx; const l = Math.hypot(nx, ny, nz) || 1; v.setFloat32(o, nx \/ l, true); v.setFloat32(o + 4, ny \/ l, true); v.setFloat32(o + 8, nz \/ l, true); for (let c = 0; c < 9; c++) v.setFloat32(o + 12 + c * 4, tris[q + c], true); }\nconst a = document.createElement('a'); a.href = URL.createObjectURL(new Blob([buf], { type: 'model\/stl' })); a.download = `bauteile-platte-${page + 1}.stl`; a.click(); setTimeout(() => URL.revokeObjectURL(a.href), 2000);\n};\nshowPage = d => { const n = page + d; if (n < 0 || n >= plates.length) return; page = n; const cur = list[sel]; if (!plates[page].items.some(it => it.p === cur) && plates[page].items[0]) select(list.indexOf(plates[page].items[0].p), false); rebuild(true); };\nconst cv = renderer.domElement;\ncv.addEventListener('pointerdown', e => { dragging = true; cv.setPointerCapture(e.pointerId); px = e.clientX; py = e.clientY; });\ncv.addEventListener('pointermove', e => { if (!dragging) return; az -= (e.clientX - px) * 0.007; if (e.pointerType !== 'touch') po = Math.max(0.3, Math.min(1.42, po - (e.clientY - py) * 0.005)); px = e.clientX; py = e.clientY; req(); });\nconst end = () => { dragging = false; }; cv.addEventListener('pointerup', end); cv.addEventListener('pointercancel', end);\nlet dirty = false;\nschedule = () => { if (dirty) return; dirty = true; requestAnimationFrame(() => { dirty = false; refresh(); rebuild(false); }); };\nregen = () => { refresh(); rebuild(true); };\nroot.querySelector('.ps-conf__dimtoggle').addEventListener('click', () => regen());\nnew ResizeObserver(() => { W = stage.clientWidth; H = stage.clientHeight; if (!W || !H) return; renderer.setSize(W, H, false); camera.aspect = W \/ H; camera.updateProjectionMatrix(); req(); }).observe(stage);\nrebuild(!matchMedia('(prefers-reduced-motion: reduce)').matches);\n}\n<\/script><p class=\"ps-play__more\"><a href=\"https:\/\/parametricsolutions.de\/2023\/06\/14\/3d-printing\/\">3D printing automation<\/a><\/p><\/section><section class=\"ps-play__demo\" id=\"ps-play-lamella\" hidden><p class=\"ps-play__text\">One parametric model replaces drawing each lamella: dimensions, plan and parts list follow from a few values.<\/p><style>\n.ps-conf { container-type: inline-size; font-family: inherit; color: #2e2e2e; }\n.ps-conf * { box-sizing: border-box; }\n.ps-conf__grid { display: grid; grid-template-columns: 1fr; border: 1px solid #e2e2e2; }\n.ps-conf__stage { position: relative; aspect-ratio: 4 \/ 3; background: #f4f4f2; touch-action: pan-y; cursor: grab; overflow: hidden; }\n.ps-conf__stage:active { cursor: grabbing; }\n.ps-conf__stage canvas { display: block; width: 100%; height: 100%; }\n.ps-conf__hint { position: absolute; left: 16px; bottom: 12px; font-size: 13px; color: #777; pointer-events: none; }\n.ps-conf__panel { padding: 20px; background: #fff; }\n.ps-conf__title { margin: 0 0 16px; font-size: 18px; line-height: 1.3; font-weight: 700; color: #111; }\n.ps-conf__row { margin-bottom: 13px; }\n.ps-conf__row label { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; line-height: 1.3; margin-bottom: 5px; }\n.ps-conf__row output { font-weight: 500; color: #111; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.ps-conf input[type=range] { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 24px !important; margin: 0; padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; cursor: pointer; --p: 50%; }\n.ps-conf input[type=range]::-webkit-slider-runnable-track { height: 2px; background: linear-gradient(to right, #32373c var(--p), #cfcfcf var(--p)); }\n.ps-conf input[type=range]::-moz-range-track { height: 2px; background: #cfcfcf; }\n.ps-conf input[type=range]::-moz-range-progress { height: 2px; background: #32373c; }\n.ps-conf input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 18px; margin-top: -8px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]::-moz-range-thumb { width: 14px; height: 18px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]:focus-visible { outline: 2px solid #32373c; outline-offset: 2px; }\n.ps-conf__wood { display: flex; gap: 6px; margin: 16px 0; }\n.ps-conf__wood button { flex: 1; min-height: 40px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__wood button[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 0 0 16px; padding: 14px 0; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-conf__stats div { min-width: 0; }\n.ps-conf__stats dt { font-size: 13px; line-height: 1.3; color: #777; }\n.ps-conf__stats dd { margin: 0; font-size: 17px; font-weight: 500; color: #111; font-variant-numeric: tabular-nums; }\n.ps-conf__csv { width: 100%; min-height: 46px; padding: 10px 16px; font: inherit; font-size: 16px; font-weight: 500; color: #fff; background: #32373c; border: 0; border-radius: 0; cursor: pointer; }\n.ps-conf__csv:hover { background: #111; }\n.ps-conf__csvlink { display: block; width: 100%; margin-top: 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; text-decoration: underline; background: none; border: 0; cursor: pointer; }\n.ps-conf__dim { position: absolute; left: 0; top: 0; padding: 1px 5px; font-size: 12px; line-height: 1.4; font-weight: 500; color: #111; background: rgba(244,244,242,.92); white-space: nowrap; pointer-events: none; font-variant-numeric: tabular-nums; }\n.ps-conf__dimtoggle { position: absolute; right: 12px; top: 12px; z-index: 2; min-height: 34px; padding: 4px 12px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__dimtoggle[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__error { padding: 24px; font-size: 15px; }\n.ps-conf__set > summary { display: flex; justify-content: space-between; align-items: center; min-height: 46px; margin: 0 0 12px; font-size: 15px; font-weight: 700; color: #111; list-style: none; cursor: pointer; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-conf__set > summary::-webkit-details-marker { display: none; }\n.ps-conf__set > summary::after { content: \"+\"; font-size: 22px; font-weight: 400; line-height: 1; }\n.ps-conf__set[open] > summary::after { content: \"\\2212\"; }\n@container (max-width: 759px) { #ps-conf .ps-conf__panel { padding: 14px 16px; } #ps-conf .ps-conf__title { margin-bottom: 10px; font-size: 16px; } #ps-conf .ps-conf__csvlink { display: none; } #ps-conf .ps-conf__stats { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-bottom: 12px; padding: 10px 0; border-top: 0; } #ps-conf .ps-conf__stats dt { font-size: 11px; } #ps-conf .ps-conf__stats dd { font-size: 14px; white-space: nowrap; } }\n@container (min-width: 760px) {\n.ps-conf__set > summary { display: none; }\n.ps-conf__grid { grid-template-columns: minmax(0, 1fr) 320px; }\n.ps-conf__stage { aspect-ratio: auto; min-height: 620px; }\n.ps-conf__panel { border-left: 1px solid #e2e2e2; }\n}\n<\/style>\n<div class=\"ps-conf\" id=\"ps-conf\" data-three=\"\/wp-content\/uploads\/ps-configurator\/three.module.min.js\">\n<div class=\"ps-conf__grid\">\n<div class=\"ps-conf__stage\"><button type=\"button\" class=\"ps-conf__dimtoggle\" data-t=\"dims\" aria-pressed=\"true\"><\/button><div class=\"ps-conf__hint\" data-t=\"hint\"><\/div><\/div>\n<div class=\"ps-conf__panel\">\n<h3 class=\"ps-conf__title\" data-t=\"title\"><\/h3>\n<details class=\"ps-conf__set\" open><summary data-t=\"setHead\"><\/summary><div class=\"ps-conf__sliders\"><\/div><div class=\"ps-conf__wood\" role=\"group\"><\/div><\/details>\n<dl class=\"ps-conf__stats\"><\/dl>\n<button type=\"button\" class=\"ps-conf__csv\" data-t=\"pdf\"><\/button>\n<button type=\"button\" class=\"ps-conf__csvlink\" data-t=\"csv\"><\/button>\n<\/div>\n<\/div>\n<\/div>\n<script type=\"module\">\nconst root = document.getElementById('ps-conf');\nconst lang = new URLSearchParams(location.search).get('lang') || document.documentElement.lang || 'de';\nconst de = lang.toLowerCase().startsWith('de');\nconst T = de ? {\nsetHead: 'Einstellungen', title: 'Beispiel: Lamellenfront aus Massivholz', hint: 'Ziehen zum Drehen', csv: 'Nur St\u00fcckliste als CSV', pdf: 'Plan und St\u00fcckliste als PDF', dims: 'Ma\u00dfe',\ndoc: 'Lamellenfront', view: 'Ansicht', plan: 'Draufsicht mit Rohma\u00dfen', elev: 'Abwicklung', bom: 'St\u00fcckliste', params: 'Parameter', date: 'Datum', pageW: 'Seite', of: 'von', mm: 'Ma\u00dfe in mm', w: 'Breite', d: 'Tiefe', h: 'H\u00f6he', dev: 'Abwicklung', headShort: ['Teil', 'L\u00e4nge', 'Breite', 'Rohdicke'], note: 'Beispiel aus dem Online-Konfigurator. Keine Fertigungsfreigabe.', pdfFile: 'plan-lamellenfront.pdf',\nlength: 'L\u00e4nge', height: 'H\u00f6he', width: 'Lamellenbreite', gap: 'Abstand', depth: 'Wellentiefe', waves: 'Wellen', curve: 'Kr\u00fcmmung', top: 'Oberkante',\noak: 'Eiche', walnut: 'Nussbaum', black: 'Schwarz',\nparts: 'Teile', volume: 'Holz (Rohma\u00df)', longest: 'L\u00e4ngstes Teil', thick: 'Rohdicke',\nnoGl: 'Der 3D-Konfigurator braucht WebGL. Ihr Browser unterst\u00fctzt das leider nicht.',\ncsvHead: ['Teil', 'L\u00e4nge (mm)', 'Breite (mm)', 'Rohdicke (mm)'], file: 'stueckliste-lamellenfront.csv', sep: ';', dec: ','\n} : {\nsetHead: 'Settings', title: 'Example: Solid-Wood Lamella Front', hint: 'Drag to rotate', csv: 'Bill of materials only (CSV)', pdf: 'Plan and bill of materials (PDF)', dims: 'Dimensions',\ndoc: 'Lamella Front', view: 'View', plan: 'Plan view with rough sizes', elev: 'Developed elevation', bom: 'Bill of materials', params: 'Parameters', date: 'Date', pageW: 'Page', of: 'of', mm: 'Dimensions in mm', w: 'Width', d: 'Depth', h: 'Height', dev: 'Developed length', headShort: ['Part', 'Length', 'Width', 'Rough th.'], note: 'Example from the online configurator. Not released for production.', pdfFile: 'plan-lamella-front.pdf',\nlength: 'Length', height: 'Height', width: 'Lamella width', gap: 'Gap', depth: 'Wave depth', waves: 'Waves', curve: 'Curvature', top: 'Top edge',\noak: 'Oak', walnut: 'Walnut', black: 'Black',\nparts: 'Parts', volume: 'Timber (rough)', longest: 'Longest part', thick: 'Rough thickness',\nnoGl: 'The 3D configurator needs WebGL, which your browser does not support.',\ncsvHead: ['Part', 'Length (mm)', 'Width (mm)', 'Rough thickness (mm)'], file: 'bill-of-materials-lamella-front.csv', sep: ',', dec: '.'\n};\nroot.querySelectorAll('[data-t]').forEach(el => { el.textContent = T[el.dataset.t]; });\n{ const b = root.querySelector('button.ps-conf__fold'); if (b) { const body = b.nextElementSibling; b.after(...body.childNodes); body.remove(); b.remove(); } }\n{ const fold = root.querySelector('.ps-conf__set'); let narrow = null; const fit = () => { const n = root.clientWidth < 760; if (n !== narrow) { narrow = n; fold.open = !n; } }; fit(); new ResizeObserver(fit).observe(root); }\nconst num = (v, d = 0) => v.toLocaleString(de ? 'de-DE' : 'en-GB', { minimumFractionDigits: d, maximumFractionDigits: d });\nconst P = {\nlength: { min: 1200, max: 6000, step: 50, value: 3600, unit: ' mm' },\nheight: { min: 600, max: 1400, step: 10, value: 1100, unit: ' mm' },\nwidth: { min: 30, max: 120, step: 5, value: 60, unit: ' mm' },\ngap: { min: 2, max: 40, step: 1, value: 8, unit: ' mm' },\ndepth: { min: 0, max: 200, step: 5, value: 110, unit: ' mm' },\nwaves: { min: 0.5, max: 5, step: 0.25, value: 1.75, unit: '', dec: 2 },\ncurve: { min: 0, max: 150, step: 5, value: 55, unit: '\u00b0' },\ntop: { min: 0, max: 400, step: 10, value: 120, unit: ' mm' }\n};\nconst state = Object.fromEntries(Object.entries(P).map(([k, p]) => [k, p.value]));\nconst WOOD = { oak: 0xd9b98c, walnut: 0x7a5238, black: 0x34302c };\nlet wood = 'oak', parts = [];\nconst sliders = root.querySelector('.ps-conf__sliders');\nfor (const [key, p] of Object.entries(P)) {\nconst row = document.createElement('div'); row.className = 'ps-conf__row';\nconst id = 'ps-conf-' + key;\nrow.innerHTML = `<label for=\"${id}\"><span>${T[key]}<\/span><output><\/output><\/label><input id=\"${id}\" type=\"range\" min=\"${p.min}\" max=\"${p.max}\" step=\"${p.step}\" value=\"${p.value}\">`;\nconst input = row.querySelector('input'), out = row.querySelector('output');\nconst paint = () => { out.textContent = num(+input.value, p.dec || 0) + p.unit; input.style.setProperty('--p', ((input.value - p.min) \/ (p.max - p.min) * 100) + '%'); };\ninput.addEventListener('input', () => { state[key] = +input.value; paint(); schedule(); });\npaint(); sliders.append(row);\n}\nconst woodBox = root.querySelector('.ps-conf__wood');\nfor (const k of Object.keys(WOOD)) {\nconst b = document.createElement('button'); b.type = 'button'; b.textContent = T[k]; b.dataset.k = k;\nb.setAttribute('aria-pressed', k === wood);\nb.addEventListener('click', () => { wood = k; woodBox.querySelectorAll('button').forEach(x => x.setAttribute('aria-pressed', x.dataset.k === k)); applyWood(); requestRender(); });\nwoodBox.append(b);\n}\nconst stats = root.querySelector('.ps-conf__stats');\nstats.innerHTML = ['parts', 'volume', 'longest', 'thick'].map(k => `<div><dt>${T[k]}<\/dt><dd data-s=\"${k}\"><\/dd><\/div>`).join('');\nconst BASE = 0.04; \/\/ Mindestdicke der Lamelle\nfunction buildParts() {\nconst L = state.length \/ 1000, H = state.height \/ 1000, w = state.width \/ 1000, g = state.gap \/ 1000;\nconst A = state.depth \/ 1000, F = state.waves, top = state.top \/ 1000;\nconst n = Math.max(1, Math.floor((L + g) \/ (w + g)));\nconst used = n * w + (n - 1) * g;\nconst ang = state.curve * Math.PI \/ 180;\nconst R = ang > 0.001 ? L \/ ang : Infinity;\nconst onArc = s => {\nif (R === Infinity) return { x: s, z: 0, tx: 1, tz: 0, nx: 0, nz: 1 };\nconst p = s \/ R;\nreturn { x: R * Math.sin(p), z: -R * (1 - Math.cos(p)), tx: Math.cos(p), tz: -Math.sin(p), nx: Math.sin(p), nz: Math.cos(p) };\n};\nconst wave = (s, y) => A * 0.5 * (1 + Math.sin(2 * Math.PI * (F * s \/ L + 0.75 * y \/ H)));\nconst out = [];\nfor (let i = 0; i < n; i++) {\nconst s = -used \/ 2 + w \/ 2 + i * (w + g);\nconst h = H - top * 0.5 * (1 + Math.sin(2 * Math.PI * (1.25 * s \/ L + 0.15)));\nout.push({ i, s, h, w, arc: onArc(s), wave, thick: 0 });\n}\nreturn out;\n}\nfunction statsAndParts() {\nlet vol = 0, longest = 0, thick = 0;\nfor (const p of parts) {\nlet m = 0;\nfor (let k = 0; k <= 24; k++) m = Math.max(m, p.wave(p.s, p.h * k \/ 24));\np.thick = BASE + m;\nvol += p.h * p.w * p.thick; longest = Math.max(longest, p.h); thick = Math.max(thick, p.thick);\n}\nconst set = (k, v) => { stats.querySelector(`[data-s=${k}]`).textContent = v; };\nset('parts', num(parts.length));\nset('volume', num(vol, 2) + ' m\u00b3');\nset('longest', num(Math.round(longest * 1000)) + ' mm');\nset('thick', num(Math.ceil(thick * 1000 \/ 5) * 5) + ' mm');\n}\nroot.querySelector('.ps-conf__csvlink').addEventListener('click', () => {\nconst rows = [T.csvHead.join(T.sep)];\nfor (const p of parts) rows.push([`L-${String(p.i + 1).padStart(3, '0')}`, Math.round(p.h * 1000), Math.round(p.w * 1000), Math.ceil(p.thick * 1000 \/ 5) * 5].join(T.sep));\nconst url = URL.createObjectURL(new Blob(['\ufeff' + rows.join('\\r\\n')], { type: 'text\/csv;charset=utf-8' }));\nconst a = Object.assign(document.createElement('a'), { href: url, download: T.file });\ndocument.body.append(a); a.click(); a.remove(); setTimeout(() => URL.revokeObjectURL(url), 1000);\n});\nconst PW = 842, PH = 595, GREY = 0.45;\nconst f = v => (Math.round(v * 100) \/ 100).toString();\nconst esc = t => { let o = ''; for (const ch of String(t)) { const c = ch === '\u2013' ? 150 : ch.charCodeAt(0); if ('()\\\\'.includes(ch)) o += '\\\\' + ch; else if (c < 32 || c > 126) o += '\\\\' + (c < 256 ? c : 63).toString(8).padStart(3, '0'); else o += ch; } return o; };\nclass Page {\nops = [];\nline(x1, y1, x2, y2, w = 0.4, g = 0) { this.ops.push(`${g} G ${w} w ${f(x1)} ${f(PH - y1)} m ${f(x2)} ${f(PH - y2)} l S`); }\npoly(pts, w = 0.4, g = 0) { this.ops.push(`${g} G ${w} w ` + pts.map((p, i) => `${f(p[0])} ${f(PH - p[1])} ${i ? 'l' : 'm'}`).join(' ') + ' s'); }\ntext(x, y, t, { size = 9, bold = false, align = 'l', rot = false, g = 0 } = {}) {\nconst wd = String(t).length * size * 0.52, off = align === 'c' ? wd \/ 2 : align === 'r' ? wd : 0;\nconst m = rot ? `0 1 -1 0 ${f(x)} ${f(PH - y + off * -1)}` : `1 0 0 1 ${f(x - off)} ${f(PH - y)}`;\nthis.ops.push(`BT \/F${bold ? 2 : 1} ${size} Tf ${g} g ${m} Tm (${esc(t)}) Tj ET`);\n}\nimage(x, y, w, h) { this.ops.push(`q ${f(w)} 0 0 ${f(h)} ${f(x)} ${f(PH - y - h)} cm \/Im0 Do Q`); }\ndimH(x1, x2, y, base, label) {\nthis.line(x1, base, x1, y + 3, 0.25, GREY); this.line(x2, base, x2, y + 3, 0.25, GREY); this.line(x1 - 3, y, x2 + 3, y, 0.35);\nfor (const x of [x1, x2]) this.line(x - 2.5, y + 2.5, x + 2.5, y - 2.5, 0.7);\nthis.text((x1 + x2) \/ 2, y - 3, label, { size: 8, align: 'c' });\n}\ndimV(y1, y2, x, base, label, beside = false) {\nthis.line(base, y1, x + 3, y1, 0.25, GREY); this.line(base, y2, x + 3, y2, 0.25, GREY); this.line(x, y1 - 3, x, y2 + 3, 0.35);\nfor (const y of [y1, y2]) this.line(x - 2.5, y + 2.5, x + 2.5, y - 2.5, 0.7);\nif (beside) this.text(x + 6, (y1 + y2) \/ 2 + 3, label, { size: 8 });\nelse this.text(x - 3, (y1 + y2) \/ 2, label, { size: 8, align: 'c', rot: true });\n}\n}\nconst ascii = t => Uint8Array.from(t, c => c.charCodeAt(0));\nfunction writePdf(pages, img) {\nconst chunks = [], offs = []; let pos = 0;\nconst put = b => { const u = typeof b === 'string' ? ascii(b) : b; chunks.push(u); pos += u.length; };\nconst obj = (id, body, stream) => { offs[id] = pos; put(`${id} 0 obj\\n${body}\\n`); if (stream) { put('stream\\n'); put(stream); put('\\nendstream\\n'); } put('endobj\\n'); };\nput('%PDF-1.4\\n');\nconst first = img ? 6 : 5, kids = pages.map((_, i) => `${first + i * 2} 0 R`).join(' ');\nconst res = `<< \/Font << \/F1 3 0 R \/F2 4 0 R >>${img ? ' \/XObject << \/Im0 5 0 R >>' : ''} >>`;\nobj(1, '<< \/Type \/Catalog \/Pages 2 0 R >>');\nobj(2, `<< \/Type \/Pages \/Kids [${kids}] \/Count ${pages.length} >>`);\nobj(3, '<< \/Type \/Font \/Subtype \/Type1 \/BaseFont \/Helvetica \/Encoding \/WinAnsiEncoding >>');\nobj(4, '<< \/Type \/Font \/Subtype \/Type1 \/BaseFont \/Helvetica-Bold \/Encoding \/WinAnsiEncoding >>');\nif (img) obj(5, `<< \/Type \/XObject \/Subtype \/Image \/Width ${img.w} \/Height ${img.h} \/ColorSpace \/DeviceRGB \/BitsPerComponent 8 \/Filter \/DCTDecode \/Length ${img.bytes.length} >>`, img.bytes);\npages.forEach((p, i) => {\nconst c = ascii(p.ops.join('\\n'));\nobj(first + i * 2, `<< \/Type \/Page \/Parent 2 0 R \/MediaBox [0 0 ${PW} ${PH}] \/Resources ${res} \/Contents ${first + i * 2 + 1} 0 R >>`);\nobj(first + i * 2 + 1, `<< \/Length ${c.length} >>`, c);\n});\nconst xref = pos, n = first + pages.length * 2;\nput(`xref\\n0 ${n}\\n0000000000 65535 f \\n`);\nfor (let i = 1; i < n; i++) put(String(offs[i]).padStart(10, '0') + ' 00000 n \\n');\nput(`trailer\\n<< \/Size ${n} \/Root 1 0 R >>\\nstartxref\\n${xref}\\n%%EOF\\n`);\nreturn new Blob(chunks, { type: 'application\/pdf' });\n}\nconst roughMm = p => Math.ceil(p.thick * 1000 \/ 5) * 5;\nconst scaleFor = (mmW, mmH, boxW, boxH) => [5, 10, 20, 25, 50, 75, 100, 150, 200].find(n => mmW \/ n * 2.8346 <= boxW && mmH \/ n * 2.8346 <= boxH) || 250;\nfunction makePdf() {\nconst pages = [], today = new Date().toLocaleDateString(de ? 'de-DE' : 'en-GB');\nconst newPage = title => {\nconst p = new Page(); pages.push(p);\np.text(32, 40, 'PARAMETRIC.solutions', { size: 11, bold: true });\np.text(PW - 32, 40, title, { size: 11, bold: true, align: 'r' });\np.line(32, 48, PW - 32, 48, 0.6);\nreturn p;\n};\nconst p1 = newPage(`${T.doc}: Plan`);\nconst label = (x, y, t, n) => p1.text(x, y, t + (n ? `   M 1:${n}` : ''), { size: 9, bold: true });\nconst shot = snapshot();\nconst img = shot && { ...shot };\nlabel(32, 68, T.view);\nif (img) { const k = Math.min(370 \/ img.w, 205 \/ img.h), iw = img.w * k, ih = img.h * k; p1.image(32, 76, iw, ih); }\nconst corners = q => { const a = q.arc, hw = q.w \/ 2; return [-1, 1].flatMap(sd => [0, q.thick].map(d => [a.x + a.tx * sd * hw + a.nx * d, a.z + a.tz * sd * hw + a.nz * d])); };\nconst all = parts.flatMap(corners);\nconst minX = Math.min(...all.map(c => c[0])), maxX = Math.max(...all.map(c => c[0])), minZ = Math.min(...all.map(c => c[1])), maxZ = Math.max(...all.map(c => c[1]));\nconst n1 = scaleFor((maxX - minX) * 1000, (maxZ - minZ) * 1000, 330, 150);\nconst k1 = 1000 \/ n1 * 2.8346;\nlabel(430, 68, T.plan, n1);\nconst ox = 430 + (340 - (maxX - minX) * k1) \/ 2, oy = 85 + (160 - (maxZ - minZ) * k1) \/ 2;\nconst toP = c => [ox + (c[0] - minX) * k1, oy + (c[1] - minZ) * k1];\nfor (const q of parts) { const c = corners(q); p1.poly([c[0], c[1], c[3], c[2]].map(toP), 0.3); }\nconst bx = ox + (maxX - minX) * k1, by = oy + (maxZ - minZ) * k1;\np1.dimH(ox, bx, by + 18, by, `${T.w} ${num(Math.round((maxX - minX) * 1000))}`);\np1.dimV(oy, by, bx + 20, bx, `${T.d} ${num(Math.round((maxZ - minZ) * 1000))}`, true);\nconst used = parts.at(-1).s - parts[0].s + parts[0].w, maxH = Math.max(...parts.map(q => q.h));\nconst n2 = scaleFor(used * 1000, maxH * 1000, 720, 185);\nconst k2 = 1000 \/ n2 * 2.8346, baseY = 535, ex = 60 + (720 - used * k2) \/ 2;\nlabel(32, 305, T.elev, n2);\np1.line(ex - 12, baseY, ex + used * k2 + 12, baseY, 0.6);\nconst pitch = (parts.length > 1 ? parts[1].s - parts[0].s : 1) * k2, step = Math.max(1, Math.ceil(10 \/ pitch));\nfor (const q of parts) {\nconst x0 = ex + (q.s - q.w \/ 2 - parts[0].s + parts[0].w \/ 2) * k2, x1 = x0 + q.w * k2, y1 = baseY - q.h * k2;\np1.poly([[x0, baseY], [x1, baseY], [x1, y1], [x0, y1]], 0.3);\nif (q.i % step === 0) p1.text((x0 + x1) \/ 2 + 2, y1 - 3, String(q.i + 1), { size: 6, rot: true, g: 0.25 });\n}\np1.dimV(baseY - maxH * k2, baseY, ex - 22, ex, `${T.h} ${num(Math.round(maxH * 1000))}`);\nconst params = Object.keys(P).map(k => `${T[k]}: ${num(state[k], P[k].dec || 0)}${P[k].unit}`);\nconst sum = ['parts', 'volume', 'longest', 'thick'].map(k => `${T[k]}: ${stats.querySelector(`[data-s=${k}]`).textContent}`);\nlet i = 0, firstList = true;\nwhile (i < parts.length || firstList) {\nconst p = newPage(`${T.doc}: ${T.bom}`);\nlet y0 = 70;\nif (firstList) {\np.text(32, 68, T.params, { size: 9, bold: true });\nparams.forEach((t, k) => p.text(32 + (k % 4) * 195, 83 + Math.floor(k \/ 4) * 13, t, { size: 8.5 }));\nsum.forEach((t, k) => p.text(32 + k * 195, 118, t, { size: 8.5, bold: true }));\np.line(32, 128, PW - 32, 128, 0.3);\ny0 = 145; firstList = false;\n}\nconst rows = Math.floor((545 - y0) \/ 13);\nfor (let c = 0; c < 3 && i < parts.length; c++) {\nconst x = 32 + c * 268;\nT.headShort.forEach((h, k) => p.text(x + [0, 58, 112, 166][k], y0, h, { size: 8, bold: true }));\np.line(x, y0 + 4, x + 240, y0 + 4, 0.4);\nfor (let r = 0; r < rows - 1 && i < parts.length; r++, i++) {\nconst q = parts[i], y = y0 + 15 + r * 13;\n[`L-${String(q.i + 1).padStart(3, '0')}`, num(Math.round(q.h * 1000)), num(Math.round(q.w * 1000)), num(roughMm(q))].forEach((v, k) => p.text(x + [0, 58, 112, 166][k], y, v, { size: 8 }));\n}\n}\n}\npages.forEach((p, k) => {\np.line(32, 556, PW - 32, 556, 0.3);\np.text(32, 568, `${T.mm}. ${T.note}`, { size: 7.5, g: GREY });\np.text(PW - 32, 568, `${T.date}: ${today}   ${T.pageW} ${k + 1} ${T.of} ${pages.length}`, { size: 7.5, g: GREY, align: 'r' });\n});\nreturn writePdf(pages, img);\n}\nroot.querySelector('.ps-conf__csv').addEventListener('click', () => {\nconst url = URL.createObjectURL(makePdf());\nconst a = Object.assign(document.createElement('a'), { href: url, download: T.pdfFile });\ndocument.body.append(a); a.click(); a.remove(); setTimeout(() => URL.revokeObjectURL(url), 1000);\n});\nlet snapshot = () => null;\nlet schedule = () => {}, requestRender = () => {}, applyWood = () => {};\nparts = buildParts(); statsAndParts();\nconst stage = root.querySelector('.ps-conf__stage');\nlet THREE;\nconst load = async () => {\ntry {\nTHREE = await import(new URL(root.dataset.three, location.href).href);\ninit();\n} catch (err) {\nconsole.error(err);\nstage.innerHTML = `<div class=\"ps-conf__error\">${T.noGl}<\/div>`;\nschedule = () => { parts = buildParts(); statsAndParts(); };\n}\n};\nif ('IntersectionObserver' in window) {\nconst io = new IntersectionObserver(es => { if (es.some(e => e.isIntersecting)) { io.disconnect(); load(); } }, { rootMargin: '400px' });\nio.observe(root);\n} else load();\nfunction init() {\nconst renderer = new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true });\nrenderer.setPixelRatio(Math.min(devicePixelRatio, 2));\nrenderer.shadowMap.enabled = true;\nrenderer.shadowMap.type = THREE.PCFSoftShadowMap;\nrenderer.toneMapping = THREE.ACESFilmicToneMapping;\nrenderer.toneMappingExposure = 1.05;\nstage.prepend(renderer.domElement);\nconst scene = new THREE.Scene();\nscene.background = new THREE.Color(0xf4f4f2);\nconst camera = new THREE.PerspectiveCamera(30, 1, 0.05, 100);\nscene.add(new THREE.HemisphereLight(0xffffff, 0xb9b1a4, 0.85));\nconst sun = new THREE.DirectionalLight(0xfff1df, 3.4);\nsun.castShadow = true; sun.shadow.mapSize.set(2048, 2048); sun.shadow.bias = -0.0004; sun.shadow.normalBias = 0.01; sun.shadow.radius = 5;\nObject.assign(sun.shadow.camera, { left: -7, right: 7, top: 7, bottom: -7, near: 0.5, far: 30 });\nsun.shadow.camera.updateProjectionMatrix();\nsun.position.set(-7, 6, 6);\nscene.add(sun);\nconst ground = new THREE.Mesh(new THREE.PlaneGeometry(60, 60), new THREE.ShadowMaterial({ opacity: 0.28 }));\nground.rotation.x = -Math.PI \/ 2; ground.receiveShadow = true; scene.add(ground);\nconst tex = (() => {\nconst c = document.createElement('canvas'); c.width = 256; c.height = 1024;\nconst g = c.getContext('2d'); g.fillStyle = '#fff'; g.fillRect(0, 0, 256, 1024);\nlet seed = 7; const rnd = () => (seed = (seed * 16807) % 2147483647) \/ 2147483647;\nfor (let i = 0; i < 150; i++) {\nlet x = rnd() * 256; const dark = 165 + rnd() * 75;\ng.strokeStyle = `rgba(${dark},${dark},${dark},${0.12 + rnd() * 0.3})`; g.lineWidth = 0.5 + rnd() * 2;\ng.beginPath(); g.moveTo(x, 0);\nfor (let y = 0; y <= 1024; y += 64) { x += (rnd() - 0.5) * 7; g.lineTo(x, y); }\ng.stroke();\n}\nconst t = new THREE.CanvasTexture(c); t.colorSpace = THREE.SRGBColorSpace;\nt.wrapS = t.wrapT = THREE.RepeatWrapping; t.anisotropy = renderer.capabilities.getMaxAnisotropy();\nreturn t;\n})();\nconst material = new THREE.MeshStandardMaterial({ map: tex, vertexColors: true, roughness: 0.68, metalness: 0 });\nconst mesh = new THREE.Mesh(new THREE.BufferGeometry(), material);\nmesh.castShadow = true; mesh.receiveShadow = true; scene.add(mesh);\nconst dimLines = new THREE.LineSegments(new THREE.BufferGeometry(), new THREE.LineBasicMaterial({ color: 0x222222 }));\nscene.add(dimLines);\nconst dimLabels = ['w', 'h', 'd'].map(() => { const el = document.createElement('div'); el.className = 'ps-conf__dim'; stage.append(el); return { el, at: new THREE.Vector3() }; });\nlet showDims = true;\nconst toggle = root.querySelector('.ps-conf__dimtoggle');\ntoggle.addEventListener('pointerdown', e => e.stopPropagation());\ntoggle.addEventListener('click', () => {\nshowDims = !showDims; toggle.setAttribute('aria-pressed', showDims); dimLines.visible = showDims;\ndimLabels.forEach(l => { l.el.style.display = showDims ? '' : 'none'; }); requestRender();\n});\nfunction updateDims(b) {\nconst m = 0.28, t = 0.035, seg = [], add = (a, c) => seg.push(...a, ...c);\nconst dim = (a, c, ax) => { add(a, c); for (const e of [a, c]) add([e[0] - ax[0] * t, e[1] - ax[1] * t, e[2] - ax[2] * t], [e[0] + ax[0] * t, e[1] + ax[1] * t, e[2] + ax[2] * t]); };\nconst zF = b.max.z + m, xR = b.max.x + m, xL = b.min.x - m, zL = b.min.z + (b.max.z - b.min.z) * 0.5;\ndim([b.min.x, 0.002, zF], [b.max.x, 0.002, zF], [0, 0, 1]);\ndim([xR, 0.002, b.min.z], [xR, 0.002, b.max.z], [1, 0, 0]);\ndim([xL, 0, zL], [xL, b.max.y, zL], [1, 0, 0]);\nadd([b.min.x, 0.002, b.max.z], [b.min.x, 0.002, zF]); add([b.max.x, 0.002, b.max.z], [b.max.x, 0.002, zF]);\ndimLines.geometry.dispose(); dimLines.geometry = new THREE.BufferGeometry();\ndimLines.geometry.setAttribute('position', new THREE.Float32BufferAttribute(seg, 3));\nconst mm = v => num(Math.round(v * 1000)) + ' mm';\ndimLabels[0].at.set((b.min.x + b.max.x) \/ 2, 0, zF); dimLabels[0].el.textContent = `${T.w} ${mm(b.max.x - b.min.x)}`;\ndimLabels[1].at.set(xL, b.max.y \/ 2, zL); dimLabels[1].el.textContent = `${T.h} ${mm(b.max.y)}`;\ndimLabels[2].at.set(xR, 0, (b.min.z + b.max.z) \/ 2); dimLabels[2].el.textContent = `${T.d} ${mm(b.max.z - b.min.z)}`;\n}\nconst placeDims = () => {\nif (!showDims) return;\nconst v = new THREE.Vector3();\nfor (const l of dimLabels) {\nv.copy(l.at).project(camera);\nconst hw = l.el.offsetWidth \/ 2 + 4; l.el.style.transform = `translate(${Math.round(Math.min(W - hw, Math.max(hw, (v.x + 1) \/ 2 * W)))}px, ${Math.round((1 - v.y) \/ 2 * Hh)}px) translate(-50%, -50%)`;\n}\n};\nsnapshot = () => {\ndimLines.visible = false; renderer.render(scene, camera);\nconst src = renderer.domElement, box = mesh.geometry.boundingBox;\nlet x0 = 1, x1 = -1, y0 = 1, y1 = -1; const v = new THREE.Vector3();\nfor (const X of [box.min.x, box.max.x]) for (const Y of [box.min.y, box.max.y]) for (const Z of [box.min.z, box.max.z]) {\nv.set(X, Y, Z).project(camera); x0 = Math.min(x0, v.x); x1 = Math.max(x1, v.x); y0 = Math.min(y0, v.y); y1 = Math.max(y1, v.y);\n}\nconst px = (x0 + 1) \/ 2 * src.width, pw = (x1 - x0) \/ 2 * src.width, py = (1 - y1) \/ 2 * src.height, ph = (y1 - y0) \/ 2 * src.height;\nconst cw = Math.max(pw * 1.14, ph * 1.14 * 1.8), ch = cw \/ 1.8;\nconst c2 = document.createElement('canvas'); c2.width = Math.round(Math.min(cw, 1800)); c2.height = Math.round(c2.width \/ 1.8);\nconst g2 = c2.getContext('2d'); g2.fillStyle = '#f4f4f2'; g2.fillRect(0, 0, c2.width, c2.height);\ng2.drawImage(src, px + pw \/ 2 - cw \/ 2, py + ph \/ 2 - ch \/ 2, cw, ch, 0, 0, c2.width, c2.height);\nconst url = c2.toDataURL('image\/jpeg', 0.88);\ndimLines.visible = showDims; renderer.render(scene, camera);\nconst bin = atob(url.split(',')[1]);\nreturn { w: c2.width, h: c2.height, bytes: Uint8Array.from(bin, c => c.charCodeAt(0)) };\n};\napplyWood = () => material.color.setHex(WOOD[wood]);\napplyWood();\nfunction rebuildGeometry() {\nconst pos = [], uv = [], col = [];\nconst NY = 28;\nconst quad = (a, b, c, d, ua, ub, c0) => {\nfor (const [p, u] of [[a, ua], [b, ub], [c, ub], [a, ua], [c, ub], [d, ua]]) {\npos.push(p[0], p[1], p[2]); uv.push(u[0], u[1] ?? 0); col.push(c0, c0, c0);\n}\n};\nfor (const p of parts) {\nconst a = p.arc, hw = p.w \/ 2;\nconst c0 = 0.86 + ((p.i * 2654435761 >>> 0) % 100) \/ 100 * 0.14;\nconst uo = (p.i * 0.37) % 1, uw = p.w \/ 0.25;\nconst pt = (side, y, front, s) => {\nconst d = front ? BASE + p.wave(s, y) : 0;\nreturn [a.x + a.tx * side * hw + a.nx * d, y, a.z + a.tz * side * hw + a.nz * d];\n};\nconst sl = p.s - hw, sr = p.s + hw;\nfor (let k = 0; k < NY; k++) {\nconst y0 = p.h * k \/ NY, y1 = p.h * (k + 1) \/ NY, v0 = y0 \/ 2, v1 = y1 \/ 2;\nquad(pt(-1, y0, true, sl), pt(1, y0, true, sr), pt(1, y1, true, sr), pt(-1, y1, true, sl), [uo, v0], [uo + uw, v0], c0);\nuv.length -= 12;\nuv.push(uo, v0, uo + uw, v0, uo + uw, v1, uo, v0, uo + uw, v1, uo, v1);\nquad(pt(1, y0, false, sr), pt(1, y1, false, sr), pt(1, y1, true, sr), pt(1, y0, true, sr), [uo, v0], [uo + 0.1, v0], c0 * 0.92);\nuv.length -= 12;\nuv.push(uo, v0, uo, v1, uo + 0.1, v1, uo, v0, uo + 0.1, v1, uo + 0.1, v0);\nquad(pt(-1, y0, true, sl), pt(-1, y1, true, sl), pt(-1, y1, false, sl), pt(-1, y0, false, sl), [uo, v0], [uo + 0.1, v0], c0 * 0.92);\nuv.length -= 12;\nuv.push(uo, v0, uo, v1, uo + 0.1, v1, uo, v0, uo + 0.1, v1, uo + 0.1, v0);\n}\nquad(pt(-1, p.h, true, sl), pt(1, p.h, true, sr), pt(1, p.h, false, sr), pt(-1, p.h, false, sl), [uo, 0.1], [uo + uw, 0.1], c0 * 1.03);\nuv.length -= 12;\nuv.push(uo, 0.1, uo + uw, 0.1, uo + uw, 0.15, uo, 0.1, uo + uw, 0.15, uo, 0.15);\nquad(pt(1, 0, false, sr), pt(-1, 0, false, sl), pt(-1, p.h, false, sl), pt(1, p.h, false, sr), [uo, 0], [uo + uw, 0], c0 * 0.8);\nuv.length -= 12;\nuv.push(uo, 0, uo + uw, 0, uo + uw, 0.5, uo, 0, uo + uw, 0.5, uo, 0.5);\n}\nconst g = new THREE.BufferGeometry();\ng.setAttribute('position', new THREE.Float32BufferAttribute(pos, 3));\ng.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));\ng.setAttribute('color', new THREE.Float32BufferAttribute(col, 3));\ng.computeVertexNormals();\nmesh.geometry.dispose(); mesh.geometry = g;\ng.computeBoundingBox();\nconst b = g.boundingBox; target.set((b.min.x + b.max.x) \/ 2, (b.min.y + b.max.y) \/ 2, (b.min.z + b.max.z) \/ 2);\nsizeW = Math.hypot(b.max.x - b.min.x, (b.max.z - b.min.z) * 0.5) + 0.75; sizeH = b.max.y - b.min.y + 0.3; sizeD = b.max.z - b.min.z;\nupdateDims(b);\n}\nconst target = new THREE.Vector3(), lookAt = new THREE.Vector3();\nlet sizeW = 4, sizeH = 1, sizeD = 1, dist = 0, az = -0.42, po = 1.34, vAz = 0, vPo = 0, W = 1, Hh = 1;\nlet dragging = false, lx = 0, ly = 0, dirty = true;\nstage.addEventListener('pointerdown', e => { dragging = true; lx = e.clientX; ly = e.clientY; stage.setPointerCapture(e.pointerId); });\nstage.addEventListener('pointermove', e => {\nif (!dragging) return;\nvAz = -(e.clientX - lx) * 0.0065; vPo = -(e.clientY - ly) * 0.004; lx = e.clientX; ly = e.clientY; requestRender();\n});\nconst end = () => { dragging = false; };\nstage.addEventListener('pointerup', end); stage.addEventListener('pointercancel', end);\nlet raf = 0, pending = false;\nfunction frame() {\nraf = 0;\nif (pending) { pending = false; parts = buildParts(); statsAndParts(); rebuildGeometry(); dirty = true; }\naz += vAz; po = Math.min(1.5, Math.max(0.55, po + vPo));\nvAz *= dragging ? 0 : 0.9; vPo *= dragging ? 0 : 0.9;\nconst tanV = Math.tan(camera.fov * Math.PI \/ 360);\nconst desired = Math.max(sizeW \/ 2 \/ (tanV * camera.aspect), sizeH \/ 2 \/ tanV) * 1.18 + sizeD \/ 2;\nif (!dist) { dist = desired; lookAt.copy(target); }\nconst dd = desired - dist, dl = lookAt.distanceTo(target);\ndist += dd * 0.14; lookAt.lerp(target, 0.14);\ncamera.position.set(lookAt.x + dist * Math.sin(po) * Math.sin(az), lookAt.y + dist * Math.cos(po), lookAt.z + dist * Math.sin(po) * Math.cos(az));\ncamera.lookAt(lookAt);\nrenderer.render(scene, camera);\nplaceDims();\nif (Math.abs(vAz) > 1e-4 || Math.abs(vPo) > 1e-4 || Math.abs(dd) > 1e-3 || dl > 1e-3 || pending) requestRender();\n}\nrequestRender = () => { if (!raf) raf = requestAnimationFrame(frame); };\nschedule = () => { pending = true; requestRender(); };\nnew ResizeObserver(() => {\nW = stage.clientWidth; Hh = stage.clientHeight;\nif (!W || !Hh) return;\nrenderer.setSize(W, Hh, false); camera.aspect = W \/ Hh; camera.updateProjectionMatrix(); requestRender();\n}).observe(stage);\nrebuildGeometry();\nrequestRender();\n}\n<\/script><p class=\"ps-play__more\"><a href=\"https:\/\/parametricsolutions.de\/parametric-and-computational-design-service\/\">Our services<\/a><\/p><\/section><section class=\"ps-play__demo\" id=\"ps-play-facade\" hidden><p class=\"ps-play__text\">Fin geometry, shading and the number of different parts are linked in one model, so design decisions show their effect on fabrication.<\/p><style>\n.ps-conf { container-type: inline-size; font-family: inherit; color: #2e2e2e; }\n.ps-conf * { box-sizing: border-box; }\n.ps-conf__grid { display: grid; grid-template-columns: 1fr; border: 1px solid #e2e2e2; }\n.ps-conf__stage { position: relative; aspect-ratio: 4 \/ 3; background: #f4f4f2; touch-action: pan-y; cursor: grab; overflow: hidden; }\n.ps-conf__stage:active { cursor: grabbing; }\n.ps-conf__stage canvas { display: block; width: 100%; height: 100%; }\n.ps-conf__hint { position: absolute; left: 16px; bottom: 12px; font-size: 13px; color: #777; pointer-events: none; }\n.ps-conf__panel { padding: 20px; background: #fff; }\n.ps-conf__title { margin: 0 0 16px; font-size: 18px; line-height: 1.3; font-weight: 700; color: #111; }\n.ps-conf__row { margin-bottom: 13px; }\n.ps-conf__row label { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; line-height: 1.3; margin-bottom: 5px; }\n.ps-conf__row output { font-weight: 500; color: #111; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.ps-conf input[type=range] { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 24px !important; margin: 0; padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; cursor: pointer; --p: 50%; }\n.ps-conf input[type=range]::-webkit-slider-runnable-track { height: 2px; background: linear-gradient(to right, #32373c var(--p), #cfcfcf var(--p)); }\n.ps-conf input[type=range]::-moz-range-track { height: 2px; background: #cfcfcf; }\n.ps-conf input[type=range]::-moz-range-progress { height: 2px; background: #32373c; }\n.ps-conf input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 18px; margin-top: -8px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]::-moz-range-thumb { width: 14px; height: 18px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]:focus-visible { outline: 2px solid #32373c; outline-offset: 2px; }\n.ps-conf__wood { display: flex; gap: 6px; margin: 16px 0; }\n.ps-conf__wood button { flex: 1; min-height: 40px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__wood button[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 0 0 16px; padding: 14px 0; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-conf__stats div { min-width: 0; }\n.ps-conf__stats dt { font-size: 13px; line-height: 1.3; color: #777; }\n.ps-conf__stats dd { margin: 0; font-size: 17px; font-weight: 500; color: #111; font-variant-numeric: tabular-nums; }\n.ps-conf__csv { width: 100%; min-height: 46px; padding: 10px 16px; font: inherit; font-size: 16px; font-weight: 500; color: #fff; background: #32373c; border: 0; border-radius: 0; cursor: pointer; }\n.ps-conf__csv:hover { background: #111; }\n.ps-conf__csvlink { display: block; width: 100%; margin-top: 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; text-decoration: underline; background: none; border: 0; cursor: pointer; }\n.ps-conf__dim { position: absolute; left: 0; top: 0; padding: 1px 5px; font-size: 12px; line-height: 1.4; font-weight: 500; color: #111; background: rgba(244,244,242,.92); white-space: nowrap; pointer-events: none; font-variant-numeric: tabular-nums; }\n.ps-conf__dimtoggle { position: absolute; right: 12px; top: 12px; z-index: 2; min-height: 34px; padding: 4px 12px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__dimtoggle[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__error { padding: 24px; font-size: 15px; }\n@container (min-width: 760px) {\n.ps-conf__grid { grid-template-columns: minmax(0, 1fr) 320px; }\n.ps-conf__stage { aspect-ratio: auto; min-height: 620px; }\n.ps-conf__panel { border-left: 1px solid #e2e2e2; }\n}\n<\/style>\n<style>\n@container (max-width: 759px) { .ps-fac .ps-conf__hint { display: none; } }\n.ps-fac .ps-conf__sub { margin: 4px 0 8px; font-size: 13px; line-height: 1.3; font-weight: 700; color: #111; }\n.ps-fac .ps-conf__wood { margin: 0 0 14px; }\n.ps-fac .ps-conf__wood button { font-size: 13px; padding: 6px 4px; }\n.ps-conf__warn { margin: 0 0 14px; padding: 8px 10px; font-size: 13px; line-height: 1.35; color: #111; background: #f9e4e1; border-left: 3px solid #c8321f; }\n.ps-conf__warn:empty { display: none; }\n.ps-conf__follow { width: 100%; min-height: 40px; margin: 0 0 16px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__follow[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n<\/style>\n<div class=\"ps-conf ps-fac\" id=\"ps-fac\" data-three=\"\/wp-content\/uploads\/ps-configurator\/three.module.min.js\">\n<div class=\"ps-conf__grid\">\n<div class=\"ps-conf__stage\"><div class=\"ps-conf__hint\" data-t=\"hint\"><\/div><\/div>\n<div class=\"ps-conf__panel\">\n<h3 class=\"ps-conf__title\" data-t=\"title\"><\/h3>\n<p class=\"ps-conf__sub\" data-t=\"form\"><\/p>\n<div class=\"ps-conf__wood\" data-g=\"preset\" role=\"group\"><\/div>\n<div class=\"ps-conf__sliders\" data-g=\"fin\"><\/div>\n<div class=\"ps-conf__wood\" data-g=\"mat\" role=\"group\"><\/div>\n<p class=\"ps-conf__warn\" aria-live=\"polite\"><\/p>\n<dl class=\"ps-conf__stats\"><\/dl>\n<button type=\"button\" class=\"ps-conf__csv\" data-t=\"pdf\"><\/button>\n<\/div>\n<\/div>\n<\/div>\n<script type=\"module\">\nconst root = document.getElementById('ps-fac');\nlet schedule = () => refreshStats(), requestRender = () => {}, snapshot = () => null;\nconst lang = new URLSearchParams(location.search).get('lang') || document.documentElement.lang || 'de';\nconst de = lang.toLowerCase().startsWith('de');\nconst T = de ? {\ntitle: 'Beispiel: Fassadenschnitt', hint: 'Ziehen zum Drehen', pdf: 'Fassade und Teileliste als PDF',\nmonth: 'Monat', hour: 'Uhrzeit', orient: 'Ausrichtung', depth: 'Lamellentiefe', pitch: 'Achsabstand', twist: 'Verdrehung', turns: 'Drehungen \u00fcber die H\u00f6he', waves: 'Wellen \u00fcber die Breite', bulge: 'Tiefenwelle', sway: 'Schwung', tol: 'Winkel zusammenfassen',\nclash: n => `${n} Lamellenteile kollidieren. Abstand vergr\u00f6\u00dfern oder Verdrehung verringern.`, form: 'Lamellenform', sunHead: 'Sonne', follow: 'Lamellen der Sonne nachf\u00fchren', wing: 'Fl\u00fcgel', band: 'Wellenband', weave: 'Geflecht', wood: 'Holz', alu: 'Aluminium', bronze: 'Bronze',\nshade: 'Verschattung Glas', parts: 'Lamellenteile', types: 'Verschiedene Teile', sun: 'Sonnenh\u00f6he', night: 'Sonne unter dem Horizont', months: ['Januar', 'Februar', 'M\u00e4rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'], dirs: ['N', 'NO', 'O', 'SO', 'S', 'SW', 'W', 'NW'],\ndoc: 'Fassade', view: 'Ansicht', list: 'Teileliste', params: 'Parameter', date: 'Datum', pageW: 'Seite', of: 'von', head: ['Teil', 'Winkel unten', 'oben', 'Tiefe', 'St\u00fcck'],\nnote: 'Vereinfachtes Beispiel f\u00fcr M\u00fcnster (52\u00b0 N). Keine Simulation und keine Fertigungsfreigabe.', file: 'fassade-teileliste.pdf', free: 'ohne', perpart: 'Ma\u00dfe in mm'\n} : {\ntitle: 'Example: Fa\u00e7ade Section', hint: 'Drag to rotate', pdf: 'Fa\u00e7ade and parts list (PDF)',\nmonth: 'Month', hour: 'Time', orient: 'Orientation', depth: 'Fin depth', pitch: 'Spacing', twist: 'Rotation', turns: 'Turns over the height', waves: 'Waves across the width', bulge: 'Depth wave', sway: 'Sway', tol: 'Group angles',\nclash: n => `${n} fin segments collide. Increase the spacing or reduce the rotation.`, form: 'Fin shape', sunHead: 'Sun', follow: 'Let the fins track the sun', wing: 'Wing', band: 'Wave band', weave: 'Weave', wood: 'Wood', alu: 'Aluminium', bronze: 'Bronze',\nshade: 'Glass shading', parts: 'Fin segments', types: 'Different parts', sun: 'Sun elevation', night: 'Sun below the horizon', months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], dirs: ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'],\ndoc: 'Fa\u00e7ade', view: 'View', list: 'Parts list', params: 'Parameters', date: 'Date', pageW: 'Page', of: 'of', head: ['Part', 'Angle bottom', 'top', 'Depth', 'Qty'],\nnote: 'Simplified example for M\u00fcnster (52\u00b0 N). Not a simulation and not released for production.', file: 'facade-parts-list.pdf', free: 'none', perpart: 'Dimensions in mm'\n};\nroot.querySelectorAll('[data-t]').forEach(el => { el.textContent = T[el.dataset.t]; });\n{ const b = root.querySelector('button.ps-conf__fold'); if (b && root.clientWidth >= 760 && b.getAttribute('aria-expanded') === 'false') b.click(); }\nconst num = (v, d = 0) => v.toLocaleString(de ? 'de-DE' : 'en-GB', { minimumFractionDigits: d, maximumFractionDigits: d });\nconst SUN = {\nmonth: { min: 1, max: 12, step: 1, value: 6, show: v => T.months[v - 1] },\nhour: { min: 5, max: 21, step: 0.25, value: 14, show: v => `${Math.floor(v)}:${String(Math.round((v % 1) * 60)).padStart(2, '0')}` },\norient: { min: 0, max: 345, step: 15, value: 195, show: v => `${T.dirs[Math.round(v \/ 45) % 8]} ${v}\u00b0` }\n};\nconst FIN = {\ndepth: { min: 100, max: 800, step: 20, value: 480, show: v => `${num(v)} mm` },\npitch: { min: 300, max: 1200, step: 50, value: 450, show: v => `${num(v)} mm` },\ntwist: { min: 0, max: 80, step: 1, value: 55, show: v => `${v}\u00b0` },\nturns: { min: 0, max: 2, step: 0.05, value: 0.8, show: v => num(v, 2) },\nwaves: { min: 0, max: 4, step: 0.25, value: 1, show: v => num(v, 2) },\nbulge: { min: 0, max: 90, step: 5, value: 0, show: v => `${v} %` },\nsway: { min: 0, max: 400, step: 10, value: 0, show: v => `${num(v)} mm` },\ntol: { min: 0, max: 15, step: 1, value: 0, show: v => v ? `${v}\u00b0` : T.free }\n};\nconst P = { ...FIN, ...SUN };\nconst state = Object.fromEntries(Object.entries(P).map(([k, p]) => [k, p.value]));\nconst painters = {};\nconst addSliders = (box, group) => { for (const [key, p] of Object.entries(group)) {\nconst row = document.createElement('div'); row.className = 'ps-conf__row';\nconst id = 'ps-fac-' + key;\nrow.innerHTML = `<label for=\"${id}\"><span>${T[key]}<\/span><output><\/output><\/label><input id=\"${id}\" type=\"range\" min=\"${p.min}\" max=\"${p.max}\" step=\"${p.step}\" value=\"${p.value}\">`;\nconst input = row.querySelector('input'), out = row.querySelector('output');\nconst paint = () => { input.value = state[key]; out.textContent = p.show(state[key]); input.style.setProperty('--p', ((state[key] - p.min) \/ (p.max - p.min) * 100) + '%'); };\ninput.addEventListener('input', () => { state[key] = +input.value; paint(); schedule(); });\npainters[key] = paint; paint(); box.append(row);\n} };\naddSliders(root.querySelector('[data-g=fin]'), FIN);\nconst PRESETS = {\nwing: { depth: 480, pitch: 450, twist: 55, turns: 0.8, waves: 1, bulge: 0, sway: 0 },\nband: { depth: 700, pitch: 350, twist: 18, turns: 0.5, waves: 2, bulge: 85, sway: 0 },\nweave: { depth: 360, pitch: 500, twist: 32, turns: 1.25, waves: 1.5, bulge: 30, sway: 220 }\n};\nconst FINCOL = { wood: 0xc9a77a, alu: 0xdfe2e4, bronze: 0xa4764a };\nlet follow = false, finColor = () => {};\nconst group = (name, items, active, cb) => {\nconst box = root.querySelector(`[data-g=${name}]`);\nfor (const k of items) { const b = document.createElement('button'); b.type = 'button'; b.textContent = T[k]; b.dataset.k = k; b.setAttribute('aria-pressed', k === active);\nb.addEventListener('click', () => { box.querySelectorAll('button').forEach(x => x.setAttribute('aria-pressed', x.dataset.k === k)); cb(k); }); box.append(b); }\n};\ngroup('preset', Object.keys(PRESETS), 'wing', k => { Object.assign(state, PRESETS[k]); Object.keys(PRESETS[k]).forEach(q => painters[q]()); schedule(); });\ngroup('mat', Object.keys(FINCOL), 'wood', k => { finColor(k); requestRender(); });\nconst stats = root.querySelector('.ps-conf__stats');\nstats.innerHTML = ['shade', 'parts', 'types'].map(k => `<div><dt>${T[k]}<\/dt><dd data-s=\"${k}\"><\/dd><\/div>`).join('');\nconst FW = 7.2, FLOORS = 3, FH = 3.4, BD = 4.2, RAD = Math.PI \/ 180;\nfunction sunPos() {\nconst lat = 52 * RAD, day = [21, 52, 80, 111, 141, 172, 202, 233, 264, 294, 325, 355][state.month - 1];\nconst decl = 23.45 * RAD * Math.sin(2 * Math.PI * (284 + day) \/ 365), H = (state.hour - 12) * 15 * RAD;\nconst el = Math.asin(Math.sin(lat) * Math.sin(decl) + Math.cos(lat) * Math.cos(decl) * Math.cos(H));\nconst azS = Math.atan2(Math.sin(H), Math.cos(H) * Math.sin(lat) - Math.tan(decl) * Math.cos(lat));\nconst rel = (180 + azS \/ RAD - state.orient) * RAD;\nconst dir = { x: -Math.sin(rel) * Math.cos(el), y: Math.sin(el), z: Math.cos(rel) * Math.cos(el) };\nreturn { el, dir };\n}\nconst MODS = 6;\nfunction model() {\nconst pitch = state.pitch \/ 1000, cols = Math.max(1, Math.floor(FW \/ pitch)), ox = -((cols - 1) * pitch) \/ 2, sun = sunPos();\nlet base = 0;\nif (follow && sun.el > 0 && sun.dir.z > 0.001) {\nconst sa = Math.atan2(sun.dir.x, sun.dir.z) \/ RAD;\nbase = Math.max(-70, Math.min(70, sa < 0 ? sa + 90 : sa - 90));\n}\nconst at = (c, v) => {\nconst ph = cols > 1 ? state.waves * c \/ (cols - 1) : 0;\nconst wave = state.twist * Math.sin(2 * Math.PI * (ph + state.turns * v));\nreturn {\na: base + wave * (follow ? 0.3 : 1),\nd: state.depth \/ 1000 * (1 - state.bulge \/ 100 * (0.5 + 0.5 * Math.cos(2 * Math.PI * (1.5 * v + ph)))),\ndx: state.sway \/ 1000 * Math.sin(2 * Math.PI * (v + ph * 0.5))\n};\n};\nconst snap = a => state.tol ? Math.round(a \/ state.tol) * state.tol : a;\nconst parts = [];\nfor (let c = 0; c < cols; c++) for (let i = 0; i < MODS; i++) {\nconst v0 = i \/ MODS, v1 = (i + 1) \/ MODS, p0 = at(c, v0), p1 = at(c, v1), mid = snap(at(c, (v0 + v1) \/ 2).a);\nparts.push({ c, i, v0, v1, a0: state.tol ? mid : p0.a, a1: state.tol ? mid : p1.a, d0: p0.d, d1: p1.d, dx0: p0.dx, dx1: p1.dx });\n}\nreturn { cols, pitch, ox, at, parts, snap };\n}\nconst segDist = (a, b, c, d) => {\nconst cross = (p, q, r) => (q[0] - p[0]) * (r[1] - p[1]) - (q[1] - p[1]) * (r[0] - p[0]);\nif (cross(a, b, c) * cross(a, b, d) < 0 && cross(c, d, a) * cross(c, d, b) < 0) return 0;\nconst pt = (p, q, r) => { const dx = r[0] - q[0], dy = r[1] - q[1], t = Math.max(0, Math.min(1, ((p[0] - q[0]) * dx + (p[1] - q[1]) * dy) \/ (dx * dx + dy * dy || 1))); return Math.hypot(p[0] - q[0] - t * dx, p[1] - q[1] - t * dy); };\nreturn Math.min(pt(a, c, d), pt(b, c, d), pt(c, a, b), pt(d, a, b));\n};\nfunction collisions(m) {\nconst hits = new Set(), CLEAR = 0.05;\nconst blade = (q, t) => { const a = (q.a0 + (q.a1 - q.a0) * t) * RAD, d = q.d0 + (q.d1 - q.d0) * t, x = m.ox + q.c * m.pitch + q.dx0 + (q.dx1 - q.dx0) * t; return [[x, 0], [x + d * Math.sin(a), d * Math.cos(a)]]; };\nfor (let c = 0; c < m.cols; c++) for (let i = 0; i < MODS; i++) {\nconst q = m.parts[c * MODS + i];\nfor (let o = 1; o <= 3 && c + o < m.cols; o++) {\nconst r = m.parts[(c + o) * MODS + i];\nfor (const t of [0, 0.5, 1]) { const A = blade(q, t), B = blade(r, t); if (segDist(A[0], A[1], B[0], B[1]) < CLEAR) { hits.add(c * MODS + i); hits.add((c + o) * MODS + i); break; } }\n}\n}\nreturn hits;\n}\nfunction coverage(m, sun) {\nif (sun.el <= 0 || sun.dir.z <= 0.001) return 1;\nlet t = 0;\nfor (const q of m.parts) { const a = (q.a0 + q.a1) \/ 2 * RAD, d = (q.d0 + q.d1) \/ 2; t += Math.min(1, Math.abs(d * Math.sin(a) - d * Math.cos(a) * sun.dir.x \/ sun.dir.z) \/ m.pitch); }\nreturn t \/ m.parts.length;\n}\nlet current = null;\nfunction refreshStats() {\nconst m = model(), sun = sunPos(), types = new Map();\nfor (const q of m.parts) {\nconst r = v => Math.round(v * 2) \/ 2, k = [r(q.a0), r(q.a1), Math.round(q.d0 * 200) * 5, Math.round(q.d1 * 200) * 5, Math.round((q.dx1 - q.dx0) * 200) * 5].join('|');\nconst e = types.get(k) || { a0: r(q.a0), a1: r(q.a1), d0: Math.round(q.d0 * 200) * 5, d1: Math.round(q.d1 * 200) * 5, n: 0 }; e.n++; types.set(k, e);\n}\nconst hits = collisions(m);\ncurrent = { m, sun, types, hits };\nroot.querySelector('.ps-conf__warn').textContent = hits.size ? T.clash(hits.size) : '';\nconst set = (k, v) => { stats.querySelector(`[data-s=${k}]`).textContent = v; };\nset('shade', num(coverage(m, sun) * 100) + ' %'); set('parts', num(m.parts.length)); set('types', num(types.size));\n}\nrefreshStats();\nconst PW = 842, PH = 595, GREY = 0.45;\nconst f = v => (Math.round(v * 100) \/ 100).toString();\nconst esc = t => { let o = ''; for (const ch of String(t)) { const c = ch === '\u2013' ? 150 : ch.charCodeAt(0); if ('()\\\\'.includes(ch)) o += '\\\\' + ch; else if (c < 32 || c > 126) o += '\\\\' + (c < 256 ? c : 63).toString(8).padStart(3, '0'); else o += ch; } return o; };\nclass Page {\nops = [];\nline(x1, y1, x2, y2, w = 0.4, g = 0) { this.ops.push(`${g} G ${w} w ${f(x1)} ${f(PH - y1)} m ${f(x2)} ${f(PH - y2)} l S`); }\npoly(pts, w = 0.4, g = 0) { this.ops.push(`${g} G ${w} w ` + pts.map((p, i) => `${f(p[0])} ${f(PH - p[1])} ${i ? 'l' : 'm'}`).join(' ') + ' s'); }\ntext(x, y, t, { size = 9, bold = false, align = 'l', rot = false, g = 0 } = {}) {\nconst wd = String(t).length * size * 0.52, off = align === 'c' ? wd \/ 2 : align === 'r' ? wd : 0;\nconst m = rot ? `0 1 -1 0 ${f(x)} ${f(PH - y + off * -1)}` : `1 0 0 1 ${f(x - off)} ${f(PH - y)}`;\nthis.ops.push(`BT \/F${bold ? 2 : 1} ${size} Tf ${g} g ${m} Tm (${esc(t)}) Tj ET`);\n}\nimage(x, y, w, h) { this.ops.push(`q ${f(w)} 0 0 ${f(h)} ${f(x)} ${f(PH - y - h)} cm \/Im0 Do Q`); }\ndimH(x1, x2, y, base, label) {\nthis.line(x1, base, x1, y + 3, 0.25, GREY); this.line(x2, base, x2, y + 3, 0.25, GREY); this.line(x1 - 3, y, x2 + 3, y, 0.35);\nfor (const x of [x1, x2]) this.line(x - 2.5, y + 2.5, x + 2.5, y - 2.5, 0.7);\nthis.text((x1 + x2) \/ 2, y - 3, label, { size: 8, align: 'c' });\n}\ndimV(y1, y2, x, base, label, beside = false) {\nthis.line(base, y1, x + 3, y1, 0.25, GREY); this.line(base, y2, x + 3, y2, 0.25, GREY); this.line(x, y1 - 3, x, y2 + 3, 0.35);\nfor (const y of [y1, y2]) this.line(x - 2.5, y + 2.5, x + 2.5, y - 2.5, 0.7);\nif (beside) this.text(x + 6, (y1 + y2) \/ 2 + 3, label, { size: 8 });\nelse this.text(x - 3, (y1 + y2) \/ 2, label, { size: 8, align: 'c', rot: true });\n}\n}\nconst ascii = t => Uint8Array.from(t, c => c.charCodeAt(0));\nfunction writePdf(pages, img) {\nconst chunks = [], offs = []; let pos = 0;\nconst put = b => { const u = typeof b === 'string' ? ascii(b) : b; chunks.push(u); pos += u.length; };\nconst obj = (id, body, stream) => { offs[id] = pos; put(`${id} 0 obj\\n${body}\\n`); if (stream) { put('stream\\n'); put(stream); put('\\nendstream\\n'); } put('endobj\\n'); };\nput('%PDF-1.4\\n');\nconst first = img ? 6 : 5, kids = pages.map((_, i) => `${first + i * 2} 0 R`).join(' ');\nconst res = `<< \/Font << \/F1 3 0 R \/F2 4 0 R >>${img ? ' \/XObject << \/Im0 5 0 R >>' : ''} >>`;\nobj(1, '<< \/Type \/Catalog \/Pages 2 0 R >>');\nobj(2, `<< \/Type \/Pages \/Kids [${kids}] \/Count ${pages.length} >>`);\nobj(3, '<< \/Type \/Font \/Subtype \/Type1 \/BaseFont \/Helvetica \/Encoding \/WinAnsiEncoding >>');\nobj(4, '<< \/Type \/Font \/Subtype \/Type1 \/BaseFont \/Helvetica-Bold \/Encoding \/WinAnsiEncoding >>');\nif (img) obj(5, `<< \/Type \/XObject \/Subtype \/Image \/Width ${img.w} \/Height ${img.h} \/ColorSpace \/DeviceRGB \/BitsPerComponent 8 \/Filter \/DCTDecode \/Length ${img.bytes.length} >>`, img.bytes);\npages.forEach((p, i) => {\nconst c = ascii(p.ops.join('\\n'));\nobj(first + i * 2, `<< \/Type \/Page \/Parent 2 0 R \/MediaBox [0 0 ${PW} ${PH}] \/Resources ${res} \/Contents ${first + i * 2 + 1} 0 R >>`);\nobj(first + i * 2 + 1, `<< \/Length ${c.length} >>`, c);\n});\nconst xref = pos, n = first + pages.length * 2;\nput(`xref\\n0 ${n}\\n0000000000 65535 f \\n`);\nfor (let i = 1; i < n; i++) put(String(offs[i]).padStart(10, '0') + ' 00000 n \\n');\nput(`trailer\\n<< \/Size ${n} \/Root 1 0 R >>\\nstartxref\\n${xref}\\n%%EOF\\n`);\nreturn new Blob(chunks, { type: 'application\/pdf' });\n}\nfunction makePdf() {\nconst { m, types } = current, pages = [], today = new Date().toLocaleDateString(de ? 'de-DE' : 'en-GB');\nconst newPage = title => { const p = new Page(); pages.push(p); p.text(32, 40, 'PARAMETRIC.solutions', { size: 11, bold: true }); p.text(PW - 32, 40, title, { size: 11, bold: true, align: 'r' }); p.line(32, 48, PW - 32, 48, 0.6); return p; };\nconst p1 = newPage(`${T.doc}: ${T.view}`), img = snapshot();\nif (img) { const k = Math.min(778 \/ img.w, 300 \/ img.h), w = img.w * k, h = img.h * k; p1.image(32 + (778 - w) \/ 2, 60, w, h); }\nconst sumY = 385;\np1.text(32, sumY, T.params, { size: 9, bold: true });\nObject.keys(P).forEach((q, i) => p1.text(32 + (i % 4) * 195, sumY + 15 + Math.floor(i \/ 4) * 13, `${T[q]}: ${P[q].show(state[q])}`, { size: 8.5 }));\n['shade', 'parts', 'types'].forEach((q, i) => p1.text(32 + i * 195, sumY + 56, `${T[q]}: ${stats.querySelector(`[data-s=${q}]`).textContent}`, { size: 8.5, bold: true }));\nif (current.hits.size) p1.text(32, sumY + 72, T.clash(current.hits.size), { size: 8.5, bold: true });\nconst list = [...types.values()].sort((a, b) => a.a0 - b.a0 || a.a1 - b.a1), cols = [0, 40, 108, 150, 215];\nlet i = 0;\nwhile (i < list.length) {\nconst p = newPage(`${T.doc}: ${T.list}`);\nfor (let c = 0; c < 3 && i < list.length; c++) {\nconst x = 32 + c * 268;\nT.head.forEach((h, k) => p.text(x + cols[k], 70, h, { size: 8, bold: true })); p.line(x, 74, x + 240, 74, 0.4);\nfor (let r = 0; r < 36 && i < list.length; r++, i++) {\nconst e = list[i], dep = e.d0 === e.d1 ? num(e.d0) : `${num(e.d0)}\u2013${num(e.d1)}`;\n[`T-${String(i + 1).padStart(3, '0')}`, `${num(e.a0, 1)}\u00b0`, `${num(e.a1, 1)}\u00b0`, dep, num(e.n)].forEach((v, k) => p.text(x + cols[k], 85 + r * 13, v, { size: 8 }));\n}\n}\n}\npages.forEach((p, k) => { p.line(32, 556, PW - 32, 556, 0.3); p.text(32, 568, `${T.perpart}. ${T.note}`, { size: 7.5, g: GREY }); p.text(PW - 32, 568, `${T.date}: ${today}   ${T.pageW} ${k + 1} ${T.of} ${pages.length}`, { size: 7.5, g: GREY, align: 'r' }); });\nreturn writePdf(pages, img);\n}\nroot.querySelector('.ps-conf__csv').addEventListener('click', () => {\nconst url = URL.createObjectURL(makePdf());\nconst a = Object.assign(document.createElement('a'), { href: url, download: T.file });\ndocument.body.append(a); a.click(); a.remove(); setTimeout(() => URL.revokeObjectURL(url), 1000);\n});\nconst stage = root.querySelector('.ps-conf__stage');\nlet THREE;\nconst load = async () => {\ntry {\nTHREE = await import(new URL(root.dataset.three, location.href).href);\ninit();\n} catch (err) {\nconsole.error(err);\nstage.innerHTML = `<div class=\"ps-conf__error\">WebGL<\/div>`;\n}\n};\nif ('IntersectionObserver' in window) {\nconst io = new IntersectionObserver(es => { if (es.some(e => e.isIntersecting)) { io.disconnect(); load(); } }, { rootMargin: '400px' });\nio.observe(root);\n} else load();\nfunction init() {\nconst renderer = new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true });\nrenderer.setPixelRatio(Math.min(devicePixelRatio, 2));\nrenderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFShadowMap;\nrenderer.toneMapping = THREE.ACESFilmicToneMapping; renderer.toneMappingExposure = 1.0;\nstage.prepend(renderer.domElement);\nconst scene = new THREE.Scene(); scene.background = new THREE.Color(0xf4f4f2);\nconst camera = new THREE.PerspectiveCamera(28, 1, 0.5, 300);\nconst hemi = new THREE.HemisphereLight(0xffffff, 0xc9c3b8, 1.15); scene.add(hemi);\nconst sunL = new THREE.DirectionalLight(0xfff1df, 2.7);\nsunL.castShadow = true; sunL.shadow.mapSize.set(2048, 2048); sunL.shadow.bias = -0.0004; sunL.shadow.normalBias = 0.03; sunL.shadow.radius = 5;\nObject.assign(sunL.shadow.camera, { left: -11, right: 11, top: 11, bottom: -11, near: 1, far: 90 }); sunL.shadow.camera.updateProjectionMatrix();\nsunL.target.position.set(0, FLOORS * FH \/ 2, -1.5); scene.add(sunL, sunL.target);\nconst ground = new THREE.Mesh(new THREE.PlaneGeometry(240, 240), new THREE.ShadowMaterial({ opacity: 0.16 })); ground.rotation.x = -Math.PI \/ 2; ground.receiveShadow = true; scene.add(ground);\nconst H = FLOORS * FH;\nconst add = (w, h, d, x, y, z, mat, cast = true) => { const m = new THREE.Mesh(new THREE.BoxGeometry(w, h, d), mat); m.position.set(x, y, z); m.castShadow = cast; m.receiveShadow = true; scene.add(m); return m; };\nconst concrete = new THREE.MeshStandardMaterial({ color: 0xdedcd7, roughness: 0.92 });\nconst cut = new THREE.MeshStandardMaterial({ color: 0x32373c, roughness: 0.9 });\nconst floorMat = new THREE.MeshStandardMaterial({ color: 0xcdb08a, roughness: 0.7 });\nconst ceilMat = new THREE.MeshStandardMaterial({ color: 0xf7f6f3, roughness: 0.85 });\nconst steel = new THREE.MeshStandardMaterial({ color: 0x4a4f54, roughness: 0.5, metalness: 0.3 });\nconst glassMat = new THREE.MeshStandardMaterial({ color: 0xa9c3cc, roughness: 0.08, metalness: 0.1, transparent: true, opacity: 0.22, side: THREE.DoubleSide, depthWrite: false });\nconst fx = FW \/ 2, zMid = 0.2 - BD \/ 2;\nfor (let r = 0; r <= FLOORS; r++) {\nconst y = r * FH;\nadd(FW, 0.28, BD, 0, y - 0.14, zMid, concrete);\nadd(0.012, 0.28, BD, fx + 0.006, y - 0.14, zMid, cut, false); add(0.012, 0.28, BD, -fx - 0.006, y - 0.14, zMid, cut, false);\nadd(FW, 0.28, 0.012, 0, y - 0.14, zMid - BD \/ 2 - 0.006, cut, false);\nif (r < FLOORS) {\nadd(FW, 0.06, BD - 0.3, 0, y + 0.03, zMid - 0.1, floorMat);\nconst panelY = y + FH - 0.28 - 0.4;\nfor (let i = 0; i < 3; i++) add(FW, 0.03, 1.05, 0, panelY, -0.65 - i * 1.15, ceilMat);\nfor (let i = 0; i < 3; i++) for (const hx of [-fx + 0.9, 0, fx - 0.9]) add(0.012, 0.4, 0.012, hx, panelY + 0.2, -0.65 - i * 1.15, steel, false);\nadd(FW, 0.32, 0.1, 0, y + FH - 0.42, 0.02, cut);\n}\n}\nconst mull = 1.8, mullN = Math.round(FW \/ mull);\nfor (let i = 0; i <= mullN; i++) add(0.05, H, 0.1, -fx + i * mull, H \/ 2, 0.02, steel);\nfor (let r = 0; r < FLOORS; r++) add(FW, 0.05, 0.1, 0, r * FH + 0.1, 0.02, steel);\nconst glass = new THREE.Mesh(new THREE.PlaneGeometry(FW, H), glassMat); glass.position.set(0, H \/ 2, 0.02); scene.add(glass);\nconst pS = new THREE.Shape(); const pts = [[-.09, 0], [-.03, .8], [-.21, .87], [-.25, 1.4], [-.11, 1.5], [-.06, 1.53], [-.06, 1.57], [.06, 1.57], [.06, 1.53], [.11, 1.5], [.25, 1.4], [.21, .87], [.03, .8], [.09, 0]];\npts.forEach((q, i) => i ? pS.lineTo(q[0], q[1]) : pS.moveTo(q[0], q[1]));\nconst personMat = new THREE.MeshStandardMaterial({ color: 0x8b9095, roughness: 0.9, side: THREE.DoubleSide });\nconst body = new THREE.Mesh(new THREE.ShapeGeometry(pS), personMat), head = new THREE.Mesh(new THREE.CircleGeometry(0.11, 24), personMat);\nhead.position.set(0, 1.68, 0); const person = new THREE.Group(); person.add(body, head); person.position.set(2.75, FH + 0.06, -2.6); person.rotation.y = 0.72;\nbody.castShadow = true; head.castShadow = true; scene.add(person);\nconst finMat = new THREE.MeshStandardMaterial({ color: FINCOL.wood, roughness: 0.55, metalness: 0.05, side: THREE.DoubleSide, vertexColors: true });\nfinColor = k => { finMat.color.setHex(FINCOL[k]); finMat.metalness = 0.05; finMat.roughness = k === 'alu' ? 0.4 : 0.55; };\nconst fins = new THREE.Mesh(new THREE.BufferGeometry(), finMat); fins.castShadow = true; fins.receiveShadow = true; scene.add(fins);\nconst armGeo = new THREE.BoxGeometry(0.03, 0.12, 0.12), armMat = new THREE.MeshStandardMaterial({ color: 0x4a4f54, roughness: 0.5, metalness: 0.3 });\nlet arms = null, rods = null, collars = null; const dummy = new THREE.Object3D(), UP = new THREE.Vector3(0, 1, 0), DIR = new THREE.Vector3();\nconst rodGeo = new THREE.CylinderGeometry(0.022, 0.022, 1, 10), collarGeo = new THREE.CylinderGeometry(0.038, 0.038, 0.07, 12);\nconst setCount = (cur, geo, n) => { if (cur && cur.count === n) return cur; if (cur) scene.remove(cur); const im = new THREE.InstancedMesh(geo, armMat, n); im.castShadow = true; scene.add(im); return im; };\nconst Z0 = 0.28, GAP = 0.012, NV = 12;\nconst profile = [[0, 0], [0.12, 1], [0.45, 1], [0.8, 0.55], [1, 0.08]];\nconst NP = profile.length * 2 - 2;\nfunction rebuild() {\nrefreshStats();\nconst { m, sun, hits } = current, pos = [], idx = [], col = [];\nm.parts.forEach((q, pi) => {\nconst hit = hits.has(pi), cr = hit ? 1 : 1, cg = hit ? 0.2 : 1, cb = hit ? 0.14 : 1;\nconst xc = m.ox + q.c * m.pitch, y0 = q.v0 * H + GAP, y1 = q.v1 * H - GAP, start = pos.length \/ 3;\nfor (let j = 0; j <= NV; j++) {\nconst t = j \/ NV, a = (q.a0 + (q.a1 - q.a0) * t) * RAD, d = q.d0 + (q.d1 - q.d0) * t, dx = q.dx0 + (q.dx1 - q.dx0) * t, y = y0 + (y1 - y0) * t;\nconst sa = Math.sin(a), ca = Math.cos(a), th = 0.02 + 0.018 * Math.min(1, d \/ 0.5);\nconst ring = [...profile.map(e => [e[0], e[1]]), ...profile.slice(1, -1).reverse().map(e => [e[0], -e[1]])];\nfor (const [u, w] of ring) { const dist = u * d, side = w * th; pos.push(xc + dx + dist * sa + side * ca, y, Z0 + dist * ca - side * sa); col.push(cr, cg, cb); }\n}\nfor (let j = 0; j < NV; j++) for (let k = 0; k < NP; k++) {\nconst a = start + j * NP + k, b = start + j * NP + (k + 1) % NP, c = a + NP, e = b + NP;\nidx.push(a, b, e, a, e, c);\n}\nfor (let k = 1; k < NP - 1; k++) { idx.push(start, start + k + 1, start + k); const top = start + NV * NP; idx.push(top, top + k, top + k + 1); }\n});\nconst g = new THREE.BufferGeometry();\ng.setAttribute('position', new THREE.Float32BufferAttribute(pos, 3)); g.setAttribute('color', new THREE.Float32BufferAttribute(col, 3)); g.setIndex(idx); g.computeVertexNormals();\nfins.geometry.dispose(); fins.geometry = g;\nconst nArms = m.cols * (FLOORS + 1);\nif (!arms || arms.count !== nArms) { if (arms) scene.remove(arms); arms = new THREE.InstancedMesh(armGeo, armMat, nArms); arms.castShadow = true; scene.add(arms); }\nlet n = 0;\nfor (let c = 0; c < m.cols; c++) for (let r = 0; r <= FLOORS; r++) {\nconst dx = m.at(c, r \/ FLOORS).dx;\ndummy.quaternion.identity(); dummy.scale.set(1, 1, 1); dummy.position.set(m.ox + c * m.pitch + dx, Math.max(0.1, r * FH - 0.14), 0.24); dummy.updateMatrix(); arms.setMatrixAt(n++, dummy.matrix);\n}\narms.instanceMatrix.needsUpdate = true;\nrods = setCount(rods, rodGeo, m.parts.length); collars = setCount(collars, collarGeo, m.cols * (MODS + 1));\nm.parts.forEach((q, i) => {\nconst x = m.ox + q.c * m.pitch, a = new THREE.Vector3(x + q.dx0, q.v0 * H, Z0), b = new THREE.Vector3(x + q.dx1, q.v1 * H, Z0);\nDIR.subVectors(b, a); const len = DIR.length();\ndummy.position.addVectors(a, b).multiplyScalar(0.5); dummy.quaternion.setFromUnitVectors(UP, DIR.normalize()); dummy.scale.set(1, len, 1); dummy.updateMatrix(); rods.setMatrixAt(i, dummy.matrix);\n});\nrods.instanceMatrix.needsUpdate = true;\ndummy.quaternion.identity(); dummy.scale.set(1, 1, 1); n = 0;\nfor (let c = 0; c < m.cols; c++) for (let i = 0; i <= MODS; i++) { dummy.position.set(m.ox + c * m.pitch + m.at(c, i \/ MODS).dx, i \/ MODS * H, Z0); dummy.updateMatrix(); collars.setMatrixAt(n++, dummy.matrix); }\ncollars.instanceMatrix.needsUpdate = true;\nconst up = sun.el > 0;\nsunL.visible = up; hemi.intensity = up ? 0.9 : 0.55;\nif (up) sunL.position.set(sun.dir.x * 40, FLOORS * FH \/ 2 + sun.dir.y * 40, -1.5 + sun.dir.z * 40);\n}\nconst target = new THREE.Vector3(0, H \/ 2, -1.4);\nlet az = 0.72, po = 1.32, vAz = 0, vPo = 0, W = 1, Hh = 1, dragging = false, lx = 0, ly = 0;\nstage.addEventListener('pointerdown', e => { dragging = true; lx = e.clientX; ly = e.clientY; stage.setPointerCapture(e.pointerId); });\nstage.addEventListener('pointermove', e => { if (!dragging) return; vAz = -(e.clientX - lx) * 0.0065; vPo = -(e.clientY - ly) * 0.004; lx = e.clientX; ly = e.clientY; requestRender(); });\nconst end = () => { dragging = false; };\nstage.addEventListener('pointerup', end); stage.addEventListener('pointercancel', end);\nlet raf = 0, pending = false;\nfunction frame() {\nraf = 0;\nif (pending) { pending = false; rebuild(); }\naz += vAz; po = Math.min(1.6, Math.max(0.6, po + vPo)); vAz *= dragging ? 0 : 0.9; vPo *= dragging ? 0 : 0.9;\nconst tanV = Math.tan(camera.fov * RAD \/ 2), dist = Math.max((Math.hypot(FW, BD) + 1.2) \/ 2 \/ (tanV * camera.aspect), (H + 2.6) \/ 2 \/ tanV) + 2;\ncamera.position.set(target.x + dist * Math.sin(po) * Math.sin(az), target.y + dist * Math.cos(po), target.z + dist * Math.sin(po) * Math.cos(az));\ncamera.lookAt(target); renderer.render(scene, camera);\nif (Math.abs(vAz) > 1e-4 || Math.abs(vPo) > 1e-4 || pending) requestRender();\n}\nrequestRender = () => { if (!raf) raf = requestAnimationFrame(frame); };\nschedule = () => { pending = true; requestRender(); };\nsnapshot = () => {\nrenderer.render(scene, camera);\nconst src = renderer.domElement, url = src.toDataURL('image\/jpeg', 0.88), bin = atob(url.split(',')[1]);\nreturn { w: src.width, h: src.height, bytes: Uint8Array.from(bin, c => c.charCodeAt(0)) };\n};\nnew ResizeObserver(() => { W = stage.clientWidth; Hh = stage.clientHeight; if (!W || !Hh) return; renderer.setSize(W, Hh, false); camera.aspect = W \/ Hh; camera.updateProjectionMatrix(); requestRender(); }).observe(stage);\nrebuild(); requestRender();\n}\n<\/script><p class=\"ps-play__more\"><a href=\"https:\/\/parametricsolutions.de\/parametric-computational-design\/\">Computational design<\/a><\/p><\/section><script>(function(){var w=document.querySelector('.ps-play__tiles'),lazy=!!w&&w.getAttribute('data-lazy')==='1',t=document.querySelectorAll('.ps-play__tile'),ids=[].map.call(t,function(b){return b.dataset.d});var cache=null;function load(){if(!cache){var de=(document.documentElement.lang||'').indexOf('de')===0;cache=fetch((de?'\/de':'')+'\/playground\/',{credentials:'same-origin'}).then(function(r){if(!r.ok)throw r;return r.text()}).then(function(h){return new DOMParser().parseFromString(h,'text\/html')})}return cache}function ins(tp,nodes){var f=document.createDocumentFragment();nodes.forEach(function(n){f.appendChild(document.importNode(n,true))});[].forEach.call(f.querySelectorAll('script'),function(o){var n=document.createElement('script');[].forEach.call(o.attributes,function(a){n.setAttribute(a.name,a.value)});n.textContent=o.textContent;o.parentNode.replaceChild(n,o)});tp.parentNode.replaceChild(f,tp)}function mat(s){var tp=s.querySelector('template.ps-play__tpl');if(!tp||tp.dataset.busy)return;if(!tp.dataset.remote){ins(tp,[].slice.call(tp.content.childNodes));return}tp.dataset.busy='1';s.classList.add('is-loading');load().then(function(d){var src=d.getElementById(s.id);if(!src)throw 0;ins(tp,[].filter.call(src.childNodes,function(n){return !(n.classList&&(n.classList.contains('ps-play__text')||n.classList.contains('ps-play__more')))}));s.classList.remove('is-loading')})['catch'](function(){location.href=((document.documentElement.lang||'').indexOf('de')===0?'\/de':'')+'\/playground\/#'+s.id.replace('ps-play-','')})}function show(id,push){if(ids.indexOf(id)===-1)id=lazy?'':ids[0];t.forEach(function(b){var on=b.dataset.d===id;b.setAttribute('aria-pressed',on);b.setAttribute('aria-expanded',on)});ids.forEach(function(x){var s=document.getElementById('ps-play-'+x);s.hidden=x!==id;if(x===id)mat(s)});if(push)history.replaceState(null,'',id?'#'+id:location.pathname+location.search)}t.forEach(function(b){b.addEventListener('click',function(){var on=b.getAttribute('aria-pressed')==='true';show(lazy&&on?'':b.dataset.d,true)})});window.addEventListener('hashchange',function(){show(location.hash.slice(1))});show(location.hash.slice(1))})();<\/script>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">All demos are simplified examples and are not released for production.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Should We Automate for You?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tell us about a task your team repeats by hand. We will tell you what can be automated and whether it is worth it.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/parametricsolutions.de\/contact-lets-connect\/\" style=\"border-radius:0px\">Contact<\/a><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Playground: Automation to Try Out Every demo here runs in your browser and shows the same idea: a few rules generate results that would otherwise be made by hand. Pick one and try it out. All demos are simplified examples and are not released for production. What Should We Automate for You? Tell us about [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"footnotes":""},"class_list":["post-2906","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Playground - PARAMETRIC Solutions<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/parametricsolutions.de\/de\/playground\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Playground - PARAMETRIC Solutions\" \/>\n<meta property=\"og:description\" content=\"Playground: Automation to Try Out Every demo here runs in your browser and shows the same idea: a few rules generate results that would otherwise be made by hand. Pick one and try it out. All demos are simplified examples and are not released for production. What Should We Automate for You? Tell us about [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/parametricsolutions.de\/de\/playground\/\" \/>\n<meta property=\"og:site_name\" content=\"PARAMETRIC Solutions\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-30T13:05:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/11\/Parametric-Solutions-Social-Media.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"1\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/playground\\\/\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/playground\\\/\",\"name\":\"Playground - PARAMETRIC Solutions\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#website\"},\"datePublished\":\"2026-10-30T11:52:35+00:00\",\"dateModified\":\"2026-10-30T13:05:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/playground\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/parametricsolutions.de\\\/playground\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/playground\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/parametricsolutions.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Playground\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#website\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/\",\"name\":\"PARAMETRIC Solutions\",\"description\":\"Computational Design, Digital Automation & 3D Configuration\",\"publisher\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/parametricsolutions.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":[\"en\",\"de\"]},{\"@type\":[\"Organization\",\"ProfessionalService\"],\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#organization\",\"name\":\"PARAMETRIC Solutions\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Parametric-Solutions-Logo-Dark.png\",\"contentUrl\":\"https:\\\/\\\/parametricsolutions.de\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Parametric-Solutions-Logo-Dark.png\",\"width\":453,\"height\":37,\"caption\":\"PARAMETRIC Solutions\"},\"image\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/96184690\",\"https:\\\/\\\/www.instagram.com\\\/moewe.crafts\\\/\"],\"alternateName\":\"PARAMETRIC.solutions\",\"description\":\"Studio f\u00fcr Computational Design und Automatisierung der Planung: Grasshopper- und Rhino-Entwicklung, CAD\\\/CAM-Workflows, Grundriss-Automatisierung, 3D-Konfiguratoren und 3D-Druck-Automatisierung f\u00fcr Ladenbau, Innenausbau, Architektur und Fertigung.\",\"email\":\"hallo@parametricsolutions.de\",\"telephone\":\"+491775352983\",\"foundingDate\":\"2019\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"M\u00fcnster, Germany\"},\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Stiege 6\",\"postalCode\":\"48739\",\"addressLocality\":\"Legden\",\"addressRegion\":\"NRW\",\"addressCountry\":\"DE\"},\"areaServed\":[{\"@type\":\"Country\",\"name\":\"Germany\"},{\"@type\":\"Place\",\"name\":\"Europe\"},{\"@type\":\"Place\",\"name\":\"Worldwide\"}],\"founder\":{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#founder\",\"name\":\"Moritz Wesseler\",\"jobTitle\":\"Founder\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/96184690\"]},\"knowsAbout\":[\"Computational Design\",\"Parametric Design\",\"Grasshopper\",\"Rhino 3D\",\"CAD\\\/CAM\",\"CNC\",\"Floor plan automation\",\"Space planning\",\"Shopfitting\",\"Interior fit-out\",\"3D printing\",\"Large-format additive manufacturing\",\"Robotic fabrication\",\"G-code\",\"3D configurators\",\"Design automation\"],\"knowsLanguage\":[\"de\",\"en\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"sales\",\"email\":\"hallo@parametricsolutions.de\",\"telephone\":\"+491775352983\",\"availableLanguage\":[\"German\",\"English\"]}]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Playground - PARAMETRIC Solutions","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/parametricsolutions.de\/de\/playground\/","og_locale":"de_DE","og_type":"article","og_title":"Playground - PARAMETRIC Solutions","og_description":"Playground: Automation to Try Out Every demo here runs in your browser and shows the same idea: a few rules generate results that would otherwise be made by hand. Pick one and try it out. All demos are simplified examples and are not released for production. What Should We Automate for You? Tell us about [&hellip;]","og_url":"https:\/\/parametricsolutions.de\/de\/playground\/","og_site_name":"PARAMETRIC Solutions","article_modified_time":"2026-10-30T13:05:21+00:00","og_image":[{"url":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/11\/Parametric-Solutions-Social-Media.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"1\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/parametricsolutions.de\/playground\/","url":"https:\/\/parametricsolutions.de\/playground\/","name":"Playground - PARAMETRIC Solutions","isPartOf":{"@id":"https:\/\/parametricsolutions.de\/#website"},"datePublished":"2026-10-30T11:52:35+00:00","dateModified":"2026-10-30T13:05:21+00:00","breadcrumb":{"@id":"https:\/\/parametricsolutions.de\/playground\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/parametricsolutions.de\/playground\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/parametricsolutions.de\/playground\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/parametricsolutions.de\/"},{"@type":"ListItem","position":2,"name":"Playground"}]},{"@type":"WebSite","@id":"https:\/\/parametricsolutions.de\/#website","url":"https:\/\/parametricsolutions.de\/","name":"PARAMETRIC Solutions","description":"Computational Design, Digital Automation & 3D Configuration","publisher":{"@id":"https:\/\/parametricsolutions.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/parametricsolutions.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":["en","de"]},{"@type":["Organization","ProfessionalService"],"@id":"https:\/\/parametricsolutions.de\/#organization","name":"PARAMETRIC Solutions","url":"https:\/\/parametricsolutions.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/parametricsolutions.de\/#\/schema\/logo\/image\/","url":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/09\/Parametric-Solutions-Logo-Dark.png","contentUrl":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/09\/Parametric-Solutions-Logo-Dark.png","width":453,"height":37,"caption":"PARAMETRIC Solutions"},"image":{"@id":"https:\/\/parametricsolutions.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/96184690","https:\/\/www.instagram.com\/moewe.crafts\/"],"alternateName":"PARAMETRIC.solutions","description":"Studio f\u00fcr Computational Design und Automatisierung der Planung: Grasshopper- und Rhino-Entwicklung, CAD\/CAM-Workflows, Grundriss-Automatisierung, 3D-Konfiguratoren und 3D-Druck-Automatisierung f\u00fcr Ladenbau, Innenausbau, Architektur und Fertigung.","email":"hallo@parametricsolutions.de","telephone":"+491775352983","foundingDate":"2019","foundingLocation":{"@type":"Place","name":"M\u00fcnster, Germany"},"address":{"@type":"PostalAddress","streetAddress":"Stiege 6","postalCode":"48739","addressLocality":"Legden","addressRegion":"NRW","addressCountry":"DE"},"areaServed":[{"@type":"Country","name":"Germany"},{"@type":"Place","name":"Europe"},{"@type":"Place","name":"Worldwide"}],"founder":{"@type":"Person","@id":"https:\/\/parametricsolutions.de\/#founder","name":"Moritz Wesseler","jobTitle":"Founder","sameAs":["https:\/\/www.linkedin.com\/company\/96184690"]},"knowsAbout":["Computational Design","Parametric Design","Grasshopper","Rhino 3D","CAD\/CAM","CNC","Floor plan automation","Space planning","Shopfitting","Interior fit-out","3D printing","Large-format additive manufacturing","Robotic fabrication","G-code","3D configurators","Design automation"],"knowsLanguage":["de","en"],"contactPoint":[{"@type":"ContactPoint","contactType":"sales","email":"hallo@parametricsolutions.de","telephone":"+491775352983","availableLanguage":["German","English"]}]}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false,"razzi-blog-grid":false,"mailpoet_newsletter_max":false},"uagb_author_info":{"display_name":"PARAMETRIC.solutions","author_link":"https:\/\/parametricsolutions.de\/de\/author\/moritz\/"},"uagb_comment_info":0,"uagb_excerpt":"Playground: Automation to Try Out Every demo here runs in your browser and shows the same idea: a few rules generate results that would otherwise be made by hand. Pick one and try it out. All demos are simplified examples and are not released for production. What Should We Automate for You? Tell us about&hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages\/2906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/comments?post=2906"}],"version-history":[{"count":1,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages\/2906\/revisions"}],"predecessor-version":[{"id":2907,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages\/2906\/revisions\/2907"}],"wp:attachment":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/media?parent=2906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}