{"id":49068,"date":"2026-07-27T16:19:52","date_gmt":"2026-07-27T14:19:52","guid":{"rendered":"https:\/\/www.pickware.com\/?page_id=49068"},"modified":"2026-09-29T08:47:28","modified_gmt":"2026-09-29T06:47:28","slug":"plan-finder","status":"publish","type":"page","link":"https:\/\/www.pickware.com\/de\/plan-finder","title":{"rendered":"Plan Finder"},"content":{"rendered":"\n<style>\n    .tb1 {\n        color: rgb(55, 67, 79);\n        font-family: Roboto;\n        font-size: 18px;\n        font-weight: normal;\n        letter-spacing: 0.2px;\n        line-height: 28px;\n    }\n\n    .tb2 {\n        color: rgb(55, 67, 79);\n        font-family: Roboto;\n        font-size: 16px;\n        font-weight: normal;\n        letter-spacing: 0.3px;\n        line-height: 24px;\n    }\n\n    .tb3 {\n        color: rgb(55, 67, 79);\n        font-family: Roboto;\n        font-size: 14px;\n        font-weight: normal;\n        letter-spacing: 0.26px;\n        line-height: 20px;\n    }\n\n    .th2 {\n        color: var(--color--midnight);\n        font-family: Roboto;\n        font-size: 48px;\n        font-weight: 300;\n        letter-spacing: -0.5px;\n        line-height: 60px;\n        font-family: \"Fira Sans\";\n    }\n\n    .th4 {\n        color: rgb(40, 53, 147);\n        font-family: Roboto;\n        font-size: 24px;\n        font-weight: 500;\n        line-height: 32px;\n    }\n\n    .th5 {\n        color: rgb(40, 53, 147);\n        font-family: Roboto;\n        font-size: 20px;\n        font-weight: 500;\n        letter-spacing: 0.15px;\n        line-height: 28px;\n    }\n\n    .tbtn {\n        color: #fff;\n        font-family: Roboto;\n        font-size: 16px;\n        font-weight: 500;\n        letter-spacing: 0.5px;\n        line-height: 48px;\n    }\n\n    .tbtn a {\n        color: #fff;\n        font-family: Roboto;\n        text-decoration: none;\n    }\n\n    @media (min-width: 768px) and (max-width: 1223px) {\n        .tb1 {\n            font-size: 18px;\n            letter-spacing: 0.2px;\n            line-height: 28px;\n        }\n\n        .tb2 {\n            font-size: 16px;\n            letter-spacing: 0.3px;\n            line-height: 24px;\n        }\n\n        .tb3 {\n            font-size: 14px;\n            letter-spacing: 0.26px;\n            line-height: 20px;\n        }\n\n        .th2 {\n            font-size: 38px;\n            letter-spacing: -0.41px;\n            line-height: 48px;\n        }\n\n        .th4 {\n            font-size: 20px;\n            line-height: 28px;\n        }\n\n        .th5 {\n            font-size: 18px;\n            letter-spacing: 0.36px;\n            line-height: 28px;\n        }\n    }\n\n    @media (max-width: 767px) {\n        .tb1 {\n            font-size: 17px;\n            letter-spacing: 0.19px;\n            line-height: 26px;\n        }\n\n        .tb2 {\n            font-size: 15px;\n            letter-spacing: 0.28px;\n            line-height: 24px;\n        }\n\n        .tb3 {\n            font-size: 13px;\n            letter-spacing: 0.24px;\n            line-height: 20px;\n        }\n\n        .th2 {\n            font-size: 29px;\n            letter-spacing: -0.31px;\n            line-height: 36px;\n        }\n\n        .th4 {\n            font-size: 19px;\n            line-height: 28px;\n        }\n\n        .th5 {\n            font-size: 17px;\n            letter-spacing: 0.34px;\n            line-height: 26px;\n        }\n\n        .tbtn {\n            font-size: 15px;\n        }\n    }\n\n    .tmedium {\n        font-weight: 500;\n    }\n\n    .hcenter {\n        display: flex;\n        justify-content: center;\n    }\n<\/style>\n\n\n\n<div class=\"layout-space layout-space--content-page-level-2\"><\/div>\n\n\n\n<div class=\"hero-text\">\n    <div class=\"l-container\">\n        <div class=\"l-grid\">\n            <div class=\"l-grid__content\">\n                <div class=\"hero-text__eyebrow\">Plan-Finder<\/div>\n                <h1 class=\"hero-text__heading\">Welcher Pickware-Plan passt zu deinem Business?<\/h1>\n                <div class=\"hero-text__copy\"><p>Beantworte ein paar kurze Fragen zu deinen Funktionen, deinem Bestellvolumen und deinen Shops \u2013 wir empfehlen dir den passenden Plan und zeigen dir transparent, was er kostet.<\/p>\n<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n\n<div class=\"layout-space layout-space--article-page-level-3\"><\/div>\n\n\n\n<div id=\"pw-planfinder-root\"><\/div>\n<script>(function(){function d(x){var b=atob(x);var u=new Uint8Array(b.length);for(var i=0;i!==b.length;i++){u[i]=b.charCodeAt(i);}return new TextDecoder(\"utf-8\").decode(u);}var r=document.getElementById(\"pw-planfinder-root\");if(!r){return;}r.innerHTML=d(\"PHN0eWxlPgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBQaWNrd2FyZSBEZXNpZ24gU3lzdGVtIOKAlCBDb2xvcnMgJiBUeXBlIFRva2VucwogICBTb3VyY2Ugb2YgdHJ1dGg6IERFU0lHTi5tZAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogLS0tIEZvbnRzIC0tLQogICBGaXJhIFNhbnMgQmxhY2sgSXRhbGljOiBsb2thbCAoZ2VsaWVmZXJ0KQogICBGaXJhIFNhbnMgQ29uZGVuc2VkIC8gRXh0cmEgQ29uZGVuc2VkIEJsYWNrIEl0YWxpYzogbG9rYWwgKFJlc2VydmUpCiAgIFJvYm90byBGbGV4OiBsb2thbCAoZ2VsaWVmZXJ0KSDigJQgd2lyZCBhbHMgIlJvYm90byIgcmVnaXN0cmllcnQgbWl0IHdlaWdodCBheGlzCiAgIEhpbndlaXM6IERFU0lHTi5tZCBzY2hyZWlidCBrbGFzc2lzY2hlcyBSb2JvdG8gdm9yLCBuaWNodCBSb2JvdG8gRmxleC4gSGllcgogICB3aXJkIFJvYm90byBGbGV4IGFscyBwcmFnbWF0aXNjaGUgU3Vic3RpdHV0aW9uIGdlbnV0enQsIHdlaWwgbnVyIFJvYm90byBGbGV4CiAgIGdlbGllZmVydCB3dXJkZS4gU29iYWxkIGtsYXNzaXNjaGVzIFJvYm90byB2b3JsaWVndCwgZXJzZXR6ZW4uCiovCgoKCgoKI3B3LXBsYW5maW5kZXIgewogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIENPTE9SUyDigJQgMTYgSHVlIFJhaW5ib3cgw5cgMiBTdG9wcyAoLTUwMCAvIC05MDApCiAgICAgVG9uZS1vbi10b25lOiBCYWNrZ3JvdW5kID0gKi01MDAsIEZvcmVncm91bmQgPSAqLTkwMCAob2RlciBpbnZlcnMpCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgogIC8qIEJyYW5kICovCiAgLS1jb2xvci0tcGlja3dhcmUtNTAwOiAjMDlhN2ZmOwogIC0tY29sb3ItLXBpY2t3YXJlLTkwMDogIzAxMWEzZDsKCiAgLyogUmFpbmJvdyAqLwogIC0tY29sb3ItLXBpbmstNTAwOiAgICAgI2YxNTVhMDsgIC0tY29sb3ItLXBpbmstOTAwOiAgICAgIzM2MDYwNjsKICAtLWNvbG9yLS1wdXJwbGUtNTAwOiAgICNiNTZiZjA7ICAtLWNvbG9yLS1wdXJwbGUtOTAwOiAgICMyODBkM2Y7CiAgLS1jb2xvci0tdmlvbGV0LTUwMDogICAjODM2YmZmOyAgLS1jb2xvci0tdmlvbGV0LTkwMDogICAjMjAwYTJiOwogIC0tY29sb3ItLWluZGlnby01MDA6ICAgIzUzNmRmZTsgIC0tY29sb3ItLWluZGlnby05MDA6ICAgIzBkMTg0NDsKICAtLWNvbG9yLS1jeWFuLTUwMDogICAgICM0M2NjZDU7ICAtLWNvbG9yLS1jeWFuLTkwMDogICAgICMwNDJjMzU7CiAgLS1jb2xvci0tbWludC01MDA6ICAgICAjMWZkNDllOyAgLS1jb2xvci0tbWludC05MDA6ICAgICAjMDEyYjIwOwogIC0tY29sb3ItLWdyZWVuLTUwMDogICAgIzRiZTE2MDsgIC0tY29sb3ItLWdyZWVuLTkwMDogICAgIzBjMzMwYjsKICAtLWNvbG9yLS1saW1lLTUwMDogICAgICNhYmVkNTY7ICAtLWNvbG9yLS1saW1lLTkwMDogICAgICMyMjMzMGE7CiAgLS1jb2xvci0tcGVhci01MDA6ICAgICAjZTJmMTNjOyAgLS1jb2xvci0tcGVhci05MDA6ICAgICAjMzUzNDA3OwogIC0tY29sb3ItLXllbGxvdy01MDA6ICAgI2Y2ZTAxNTsgIC0tY29sb3ItLXllbGxvdy05MDA6ICAgIzQyMzUwMDsKICAtLWNvbG9yLS1hbWJlci01MDA6ICAgICNmZmMyMTc7ICAtLWNvbG9yLS1hbWJlci05MDA6ICAgICMzNTIyMDM7CiAgLS1jb2xvci0tbWFyaWdvbGQtNTAwOiAjZmZhODAyOyAgLS1jb2xvci0tbWFyaWdvbGQtOTAwOiAjMzMxYTAxOwogIC0tY29sb3ItLW9yYW5nZS01MDA6ICAgI2ZmODgwNzsgIC0tY29sb3ItLW9yYW5nZS05MDA6ICAgIzNmMWIwMjsKICAtLWNvbG9yLS1jb3JhbC01MDA6ICAgICNmZjZhMzg7ICAtLWNvbG9yLS1jb3JhbC05MDA6ICAgICM0NzE1MDc7CiAgLS1jb2xvci0tcmVkLTUwMDogICAgICAjZmY1NzU3OyAgLS1jb2xvci0tcmVkLTkwMDogICAgICAjNTcwNDAzOwoKICAvKiBNaWRuaWdodCAoa2VpbiBTdG9wKSAqLwogIC0tY29sb3ItLW1pZG5pZ2h0OiAjMDAwODI2OwoKICAvKiBDb29sIEdyYXkgKDEwIFN0dWZlbiBtaXQgQmxhdXN0aWNoKSAqLwogIC0tY29sb3ItLWdyYXktNTA6ICAjZWNlZWYxOwogIC0tY29sb3ItLWdyYXktMTAwOiAjY2ZkNmRjOwogIC0tY29sb3ItLWdyYXktMjAwOiAjYjBiYWM1OwogIC0tY29sb3ItLWdyYXktMzAwOiAjOTA5ZmFlOwogIC0tY29sb3ItLWdyYXktNDAwOiAjNzg4YTljOwogIC0tY29sb3ItLWdyYXktNTAwOiAjNjA3NjhiOwogIC0tY29sb3ItLWdyYXktNjAwOiAjNTQ2NzdhOwogIC0tY29sb3ItLWdyYXktNzAwOiAjNDU1NTY0OwogIC0tY29sb3ItLWdyYXktODAwOiAjMzc0MzRmOwogIC0tY29sb3ItLWdyYXktOTAwOiAjMjYyZjM4OwoKICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBTRU1BTlRJQyBST0xFUwogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKICAvKiBTdXJmYWNlICovCiAgLS1zdXJmYWNlLWNhbnZhczogICAgICAgICNmZmZmZmY7CiAgLS1zdXJmYWNlLXNvZnQ6ICAgICAgICAgIHZhcigtLWNvbG9yLS1ncmF5LTUwKTsKICAtLXN1cmZhY2UtaW52ZXJzZTogICAgICAgdmFyKC0tY29sb3ItLW1pZG5pZ2h0KTsKICAtLWhhaXJsaW5lOiAgICAgICAgICAgICAgdmFyKC0tY29sb3ItLWdyYXktMTAwKTsKICAtLWhhaXJsaW5lLXN0cm9uZzogICAgICAgdmFyKC0tY29sb3ItLWdyYXktMjAwKTsKCiAgLyogVGV4dCDigJQgQm9keSBpc3QgTklFIFNjaHdhcnosIHNvbmRlcm4gZ3JheS04MDAgKi8KICAtLWZnLWRlZmF1bHQ6ICAgICAgICAgICAgdmFyKC0tY29sb3ItLWdyYXktODAwKTsKICAtLWZnLXN1YnRsZTogICAgICAgICAgICAgdmFyKC0tY29sb3ItLWdyYXktNjAwKTsKICAtLWZnLWRpc2FibGVkOiAgICAgICAgICAgdmFyKC0tY29sb3ItLWdyYXktMzAwKTsKICAtLWZnLWhlYWRpbmc6ICAgICAgICAgICAgdmFyKC0tY29sb3ItLWdyYXktOTAwKTsKICAtLWZnLW9uLWludmVyc2U6ICAgICAgICAgI2ZmZmZmZjsKCiAgLyogU2VtYW50aWMgc3RhdGVzICovCiAgLS1jb2xvci1zdWNjZXNzOiAgICAgICAgIHZhcigtLWNvbG9yLS1ncmVlbi01MDApOwogIC0tY29sb3Itd2FybmluZzogICAgICAgICB2YXIoLS1jb2xvci0tb3JhbmdlLTUwMCk7CiAgLS1jb2xvci1kYW5nZXI6ICAgICAgICAgIHZhcigtLWNvbG9yLS1yZWQtNTAwKTsKICAtLWNvbG9yLWluZm86ICAgICAgICAgICAgdmFyKC0tY29sb3ItLWluZGlnby01MDApOwogIC0tY29sb3ItcmF0aW5nOiAgICAgICAgICB2YXIoLS1jb2xvci0tYW1iZXItNTAwKTsKCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgVFlQT0dSQVBIWQogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKICAtLWZvbnQtZGlzcGxheTogIkZpcmEgU2FucyIsICJIZWx2ZXRpY2EgTmV1ZSIsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjsKICAtLWZvbnQtdWk6ICAgICAgIlJvYm90byIsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZjsKCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgU1BBQ0lORyDigJQgQmFzZSA0cHgKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAtLXNwYWNlLTBfNTogMnB4OwogIC0tc3BhY2UtMTogICA0cHg7CiAgLS1zcGFjZS0yOiAgIDhweDsKICAtLXNwYWNlLTM6ICAgMTJweDsKICAtLXNwYWNlLTQ6ICAgMTZweDsKICAtLXNwYWNlLTY6ICAgMjRweDsKICAtLXNwYWNlLTg6ICAgMzJweDsKICAtLXNwYWNlLTEyOiAgNDhweDsKICAtLXNwYWNlLTE2OiAgNjRweDsKICAtLXNwYWNlLTI0OiAgOTZweDsKCiAgLS1zZWN0aW9uLXBhZC1zbTogNjRweDsKICAtLXNlY3Rpb24tcGFkLW1kOiA5NnB4OwogIC0tc2VjdGlvbi1wYWQtbGc6IDEyOHB4OwogIC0tc2VjdGlvbi1wYWQteGw6IDE2MHB4OwoKICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBSQURJSQogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIC0tcmFkaXVzLW5vbmU6ICAgICAgMDsKICAtLXJhZGl1cy1idXR0b246ICAgIDRweDsKICAtLXJhZGl1cy1zbTogICAgICAgIDZweDsKICAtLXJhZGl1cy1idXR0b24teGw6IDhweDsKICAtLXJhZGl1cy1tZDogICAgICAgIDEwcHg7CiAgLS1yYWRpdXMtbGc6ICAgICAgICAxNnB4OwogIC0tcmFkaXVzLXhsOiAgICAgICAgMjRweDsKICAtLXJhZGl1cy1waWxsOiAgICAgIDk5OTlweDsKCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgRUxFVkFUSU9OIOKAlCBTY2hhdHRlbiBhdXMgbWlkbmlnaHQsIG5pY2h0IFNjaHdhcnoKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAtLXNoYWRvdy0xOiAxcHggc29saWQgdmFyKC0tY29sb3ItLWdyYXktMjAwKTsgLyogSGFpcmxpbmUgKGFscyBCb3JkZXIgenUgbnV0emVuKSAqLwogIC0tc2hhZG93LTI6IDAgMXB4IDJweCByZ2JhKDAsOCwzOCwuMDYpLCAwIDFweCAzcHggcmdiYSgwLDgsMzgsLjA0KTsKICAtLXNoYWRvdy0zOiAwIDRweCAxMnB4IC0ycHggcmdiYSgwLDgsMzgsLjA4KSwgMCAycHggNHB4IC0ycHggcmdiYSgwLDgsMzgsLjA0KTsKICAtLXNoYWRvdy00OiAwIDE2cHggNDBweCAtOHB4IHJnYmEoMCw4LDM4LC4xNCk7CiAgLS1zaGFkb3ctZm9jdXM6IDAgMCAwIDZweCByZ2JhKDksMTY3LDI1NSwuMTgpOwoKICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBMQVlPVVQKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAtLWNvbnRhaW5lci1tYXg6IDEyODBweDsKICAtLWNvbnRhaW5lci1ndXR0ZXI6IGNsYW1wKDI0cHgsIDR2dywgNDhweCk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBCQVNFIOKAlCBHbG9iYWwgdHlwZQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgojcHctcGxhbmZpbmRlciB7CiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgZm9udC1zaXplOiAxNnB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIGxldHRlci1zcGFjaW5nOiAwLjMwcHg7CiAgY29sb3I6IHZhcigtLWZnLWRlZmF1bHQpOwogIGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UtY2FudmFzKTsKICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICJrZXJuIiAxLCAibGlnYSIgMTsKICB0ZXh0LXdyYXAtc3R5bGU6IHByZXR0eTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFNFTUFOVElDIFRZUEUgQ0xBU1NFUyDigJQgZGlyZWt0IGF1cyBERVNJR04ubWQgwqczCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogRGlzcGxheSDigJQgRmlyYSBTYW5zIEJsYWNrIEl0YWxpYywgSU1NRVIgaXRhbGljICovCiNwdy1wbGFuZmluZGVyIC50LWRpc3BsYXktaGVybywKI3B3LXBsYW5maW5kZXIgLnQtZGlzcGxheS1sZywKI3B3LXBsYW5maW5kZXIgLnQtZGlzcGxheS1tZCB7CiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7CiAgZm9udC13ZWlnaHQ6IDkwMDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgbGV0dGVyLXNwYWNpbmc6IDA7CiAgdGV4dC13cmFwLXN0eWxlOiBiYWxhbmNlOwogIGh5cGhlbnM6IGF1dG87CiAgbWFyZ2luOiAwOwp9CiNwdy1wbGFuZmluZGVyIC50LWRpc3BsYXktaGVybyB7IGZvbnQtc2l6ZTogMTYwcHg7IGxpbmUtaGVpZ2h0OiAxMDAlOyB9CiNwdy1wbGFuZmluZGVyIC50LWRpc3BsYXktbGcgeyBmb250LXNpemU6IDcwcHg7ICBsaW5lLWhlaWdodDogMTE1JTsgfQojcHctcGxhbmZpbmRlciAudC1kaXNwbGF5LW1kIHsgZm9udC1zaXplOiA1MHB4OyAgbGluZS1oZWlnaHQ6IDExNSU7IH0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHsKICAjcHctcGxhbmZpbmRlciAudC1kaXNwbGF5LWhlcm8geyBmb250LXNpemU6IDEyOHB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLnQtZGlzcGxheS1sZyB7IGZvbnQtc2l6ZTogNjBweDsgfQogICNwdy1wbGFuZmluZGVyIC50LWRpc3BsYXktbWQgeyBmb250LXNpemU6IDQ4cHg7IH0KfQpAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHsKICAjcHctcGxhbmZpbmRlciAudC1kaXNwbGF5LWhlcm8geyBmb250LXNpemU6IDkwcHg7IH0KICAjcHctcGxhbmZpbmRlciAudC1kaXNwbGF5LWxnIHsgZm9udC1zaXplOiA0NXB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLnQtZGlzcGxheS1tZCB7IGZvbnQtc2l6ZTogNDBweDsgfQp9CgovKiBIZWFkaW5ncyDigJQgUm9ib3RvIE1lZGl1bSAqLwojcHctcGxhbmZpbmRlciAudC1oZWFkaW5nLXhsLAojcHctcGxhbmZpbmRlciAudC1oZWFkaW5nLWxnLAojcHctcGxhbmZpbmRlciAudC1oZWFkaW5nLW1kIHsKICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7CiAgbWFyZ2luOiAwOwogIHRleHQtd3JhcC1zdHlsZTogYmFsYW5jZTsKICBoeXBoZW5zOiBhdXRvOwp9CiNwdy1wbGFuZmluZGVyIC50LWhlYWRpbmcteGwgeyBmb250LXNpemU6IDM0cHg7IGxpbmUtaGVpZ2h0OiA0NHB4OyBsZXR0ZXItc3BhY2luZzogLTAuMTVweDsgfQojcHctcGxhbmZpbmRlciAudC1oZWFkaW5nLWxnIHsgZm9udC1zaXplOiAyNHB4OyBsaW5lLWhlaWdodDogMzJweDsgbGV0dGVyLXNwYWNpbmc6IDA7IH0KI3B3LXBsYW5maW5kZXIgLnQtaGVhZGluZy1tZCB7IGZvbnQtc2l6ZTogMjBweDsgbGluZS1oZWlnaHQ6IDI4cHg7IGxldHRlci1zcGFjaW5nOiAwLjE1cHg7IH0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHsKICAjcHctcGxhbmZpbmRlciAudC1oZWFkaW5nLXhsIHsgZm9udC1zaXplOiAzMHB4OyBsaW5lLWhlaWdodDogNDBweDsgbGV0dGVyLXNwYWNpbmc6IC0wLjEzcHg7IH0KICAjcHctcGxhbmZpbmRlciAudC1oZWFkaW5nLWxnIHsgZm9udC1zaXplOiAyMHB4OyBsaW5lLWhlaWdodDogMjhweDsgfQogICNwdy1wbGFuZmluZGVyIC50LWhlYWRpbmctbWQgeyBmb250LXNpemU6IDE4cHg7IGxpbmUtaGVpZ2h0OiAyOHB4OyBsZXR0ZXItc3BhY2luZzogMC4zNnB4OyB9Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7CiAgI3B3LXBsYW5maW5kZXIgLnQtaGVhZGluZy14bCB7IGZvbnQtc2l6ZTogMjVweDsgbGluZS1oZWlnaHQ6IDMycHg7IGxldHRlci1zcGFjaW5nOiAtMC4xMXB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLnQtaGVhZGluZy1sZyB7IGZvbnQtc2l6ZTogMTlweDsgbGluZS1oZWlnaHQ6IDI4cHg7IH0KICAjcHctcGxhbmZpbmRlciAudC1oZWFkaW5nLW1kIHsgZm9udC1zaXplOiAxN3B4OyBsaW5lLWhlaWdodDogMjZweDsgbGV0dGVyLXNwYWNpbmc6IDAuMzRweDsgfQp9CgovKiBMZWFkIOKAlCBSb2JvdG8gUmVndWxhciwgZ3LDtsOfZXIgKi8KI3B3LXBsYW5maW5kZXIgLnQtbGVhZC14bCwKI3B3LXBsYW5maW5kZXIgLnQtbGVhZC1sZyB7CiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgY29sb3I6IHZhcigtLWZnLWRlZmF1bHQpOwogIGxldHRlci1zcGFjaW5nOiAwOwogIG1hcmdpbjogMDsKICB0ZXh0LXdyYXAtc3R5bGU6IHByZXR0eTsKfQojcHctcGxhbmZpbmRlciAudC1sZWFkLXhsIHsgZm9udC1zaXplOiAzNHB4OyBsaW5lLWhlaWdodDogNTJweDsgfQojcHctcGxhbmZpbmRlciAudC1sZWFkLWxnIHsgZm9udC1zaXplOiAyNnB4OyBsaW5lLWhlaWdodDogMzRweDsgfQpAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHsKICAjcHctcGxhbmZpbmRlciAudC1sZWFkLXhsIHsgZm9udC1zaXplOiAyMHB4OyBsaW5lLWhlaWdodDogMjRweDsgfQogICNwdy1wbGFuZmluZGVyIC50LWxlYWQtbGcgeyBmb250LXNpemU6IDIwcHg7IGxpbmUtaGVpZ2h0OiAyNHB4OyB9Cn0KCi8qIEJvZHkgKi8KI3B3LXBsYW5maW5kZXIgLnQtYm9keS14bCwKI3B3LXBsYW5maW5kZXIgLnQtYm9keS1sZywKI3B3LXBsYW5maW5kZXIgLnQtYm9keS1tZCwKI3B3LXBsYW5maW5kZXIgLnQtYm9keS1zbSB7CiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgY29sb3I6IHZhcigtLWZnLWRlZmF1bHQpOwogIG1hcmdpbjogMDsKICB0ZXh0LXdyYXAtc3R5bGU6IHByZXR0eTsKfQojcHctcGxhbmZpbmRlciAudC1ib2R5LXhsIHsgZm9udC1zaXplOiAyMHB4OyBsaW5lLWhlaWdodDogMjhweDsgbGV0dGVyLXNwYWNpbmc6IDAuMTVweDsgfQojcHctcGxhbmZpbmRlciAudC1ib2R5LWxnIHsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDogMjhweDsgbGV0dGVyLXNwYWNpbmc6IDAuMjBweDsgfQojcHctcGxhbmZpbmRlciAudC1ib2R5LW1kIHsgZm9udC1zaXplOiAxNnB4OyBsaW5lLWhlaWdodDogMjRweDsgbGV0dGVyLXNwYWNpbmc6IDAuMzBweDsgfQojcHctcGxhbmZpbmRlciAudC1ib2R5LXNtIHsgZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMjBweDsgbGV0dGVyLXNwYWNpbmc6IDAuMjZweDsgfQoKQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7CiAgI3B3LXBsYW5maW5kZXIgLnQtYm9keS14bCB7IGZvbnQtc2l6ZTogMTdweDsgbGluZS1oZWlnaHQ6IDI2cHg7IH0KICAjcHctcGxhbmZpbmRlciAudC1ib2R5LWxnIHsgZm9udC1zaXplOiAxN3B4OyBsaW5lLWhlaWdodDogMjZweDsgfQogICNwdy1wbGFuZmluZGVyIC50LWJvZHktbWQgeyBmb250LXNpemU6IDE1cHg7IH0KICAjcHctcGxhbmZpbmRlciAudC1ib2R5LXNtIHsgZm9udC1zaXplOiAxM3B4OyB9Cn0KCi8qIEV5ZWJyb3cg4oCUIENhcHMgTGFiZWwgKi8KI3B3LXBsYW5maW5kZXIgLnQtZXllYnJvdyB7CiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgZm9udC1zaXplOiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIGxldHRlci1zcGFjaW5nOiAxLjI1cHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBjb2xvcjogdmFyKC0tZmctZGVmYXVsdCk7CiAgbWFyZ2luOiAwOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVVRJTElUSUVTCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwojcHctcGxhbmZpbmRlciAuZmctc3VidGxlIHsgY29sb3I6IHZhcigtLWZnLXN1YnRsZSk7IH0KI3B3LXBsYW5maW5kZXIgLmZnLWRlZmF1bHQgeyBjb2xvcjogdmFyKC0tZmctZGVmYXVsdCk7IH0KI3B3LXBsYW5maW5kZXIgLmZnLWhlYWRpbmcgeyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IH0KI3B3LXBsYW5maW5kZXIgLmZnLWRpc2FibGVkIHsgY29sb3I6IHZhcigtLWZnLWRpc2FibGVkKTsgfQojcHctcGxhbmZpbmRlciAuZmctb24taW52IHsgY29sb3I6IHZhcigtLWZnLW9uLWludmVyc2UpOyB9CgojcHctcGxhbmZpbmRlciAuc3VyZmFjZS1jYW52YXMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWNhbnZhcyk7IH0KI3B3LXBsYW5maW5kZXIgLnN1cmZhY2Utc29mdCB7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2Utc29mdCk7IH0KI3B3LXBsYW5maW5kZXIgLnN1cmZhY2UtaW52ZXJzZSB7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UtaW52ZXJzZSk7IGNvbG9yOiB2YXIoLS1mZy1vbi1pbnZlcnNlKTsgfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgUGlja3dhcmUgUGxhbi1GaW5kZXIg4oCUIGFuIGRhcyBlY2h0ZSBQaWNrd2FyZSBEZXNpZ24gU3lzdGVtIHYxCiAgICAgZ2VidW5kZW46IEZhcmJlbiwgVHlwZSAmIEZvbnRzIGtvbW1lbiBhdXMgY29sb3JzX2FuZF90eXBlLmNzcwogICAgIChsb2thbGUgRmlyYSBTYW5zIEJsYWNrIEl0YWxpYyArIFJvYm90bykuIERpZSBmb2xnZW5kZW4gQWxpYXNlCiAgICAgbWFwcGVuIGRpZSBBcHAtaW50ZXJuZW4gVmFyaWFibGVuIDE6MSBhdWYgZGllIERTLVRva2VucywgZGFtaXQKICAgICBlcyBnZW5hdSBFSU5FIFF1ZWxsZSBkZXIgV2FocmhlaXQgZ2lidC4KICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAjcHctcGxhbmZpbmRlciB7CiAgICAvKiBCcmFuZCAqLwogICAgLS1waWNrd2FyZS01MDA6IHZhcigtLWNvbG9yLS1waWNrd2FyZS01MDApOwogICAgLS1waWNrd2FyZS05MDA6IHZhcigtLWNvbG9yLS1waWNrd2FyZS05MDApOwogICAgLS1waWNrd2FyZS1ob3ZlcjogIzEzOTFkNjsgLyogRFM6IEhvdmVyID0gQkcgZGFya2VuIGF1ZiAjMTM5MWQ2ICovCiAgICAtLW1pZG5pZ2h0OiB2YXIoLS1jb2xvci0tbWlkbmlnaHQpOwoKICAgIC8qIENvb2wgR3JheSAqLwogICAgLS1ncmF5LTUwOiAgdmFyKC0tY29sb3ItLWdyYXktNTApOwogICAgLS1ncmF5LTEwMDogdmFyKC0tY29sb3ItLWdyYXktMTAwKTsKICAgIC0tZ3JheS0yMDA6IHZhcigtLWNvbG9yLS1ncmF5LTIwMCk7CiAgICAtLWdyYXktMzAwOiB2YXIoLS1jb2xvci0tZ3JheS0zMDApOwogICAgLS1ncmF5LTQwMDogdmFyKC0tY29sb3ItLWdyYXktNDAwKTsKICAgIC0tZ3JheS01MDA6IHZhcigtLWNvbG9yLS1ncmF5LTUwMCk7CiAgICAtLWdyYXktNjAwOiB2YXIoLS1jb2xvci0tZ3JheS02MDApOwogICAgLS1ncmF5LTcwMDogdmFyKC0tY29sb3ItLWdyYXktNzAwKTsKICAgIC0tZ3JheS04MDA6IHZhcigtLWNvbG9yLS1ncmF5LTgwMCk7CiAgICAtLWdyYXktOTAwOiB2YXIoLS1jb2xvci0tZ3JheS05MDApOwoKICAgIC8qIEFjY2VudHMgKHRvbmUtb24tdG9uZSBzdG9wcykgKi8KICAgIC0tYW1iZXItNTAwOiB2YXIoLS1jb2xvci0tYW1iZXItNTAwKTsgIC0tYW1iZXItOTAwOiB2YXIoLS1jb2xvci0tYW1iZXItOTAwKTsKICAgIC0tY3lhbi01MDA6ICB2YXIoLS1jb2xvci0tY3lhbi01MDApOyAgIC0tY3lhbi05MDA6ICB2YXIoLS1jb2xvci0tY3lhbi05MDApOwogICAgLS12aW9sZXQtNTAwOnZhcigtLWNvbG9yLS12aW9sZXQtNTAwKTsgLS12aW9sZXQtOTAwOnZhcigtLWNvbG9yLS12aW9sZXQtOTAwKTsKICAgIC0tZ3JlZW4tNTAwOiB2YXIoLS1jb2xvci0tZ3JlZW4tNTAwKTsgIC0tZ3JlZW4tOTAwOiB2YXIoLS1jb2xvci0tZ3JlZW4tOTAwKTsKICAgIC0tbWFyaWdvbGQtNTAwOiB2YXIoLS1jb2xvci0tbWFyaWdvbGQtNTAwKTsKICAgIC0tc3VjY2VzczogICB2YXIoLS1jb2xvci1zdWNjZXNzKTsgICAvKiBEUyBzZW1hbnRpYyA9IGdyZWVuLTUwMCAqLwogICAgLS1kYW5nZXI6ICAgIHZhcigtLWNvbG9yLWRhbmdlcik7ICAgIC8qIERTIHNlbWFudGljID0gcmVkLTUwMCAqLwoKICAgIC8qIFNlbWFudGljICovCiAgICAtLWZnLWRlZmF1bHQ6IHZhcigtLWNvbG9yLS1ncmF5LTgwMCk7CiAgICAtLWZnLXN1YnRsZTogIHZhcigtLWNvbG9yLS1ncmF5LTYwMCk7CiAgICAtLWZnLWhlYWRpbmc6IHZhcigtLWNvbG9yLS1ncmF5LTkwMCk7CiAgICAtLXN1cmZhY2U6ICAgIHZhcigtLXN1cmZhY2UtY2FudmFzKTsKICAgIC0tY2FudmFzOiAgICAgI2Y1ZjZmODsKICAgIC0taGFpcmxpbmU6ICAgdmFyKC0tY29sb3ItLWdyYXktMjAwKTsgLyogRFMgUkVBRE1FOiAxcHggZ3JheS0yMDAgYXVmIENhcmRzL0lucHV0cyAqLwogICAgLS1oYWlybGluZS1zb2Z0OiB2YXIoLS1jb2xvci0tZ3JheS0xMDApOwoKICAgIC8qIFNlbGVjdGlvbiB0aW50IChmdW5rdGlvbmFsZXIgVUktU3RhdGUsIFBpY2t3YXJlLUJsYXUpICovCiAgICAtLXRpbnQ6ICAgICAgIHJnYmEoOSwxNjcsMjU1LC4wNyk7CiAgICAtLXRpbnQtc3Ryb25nOnJnYmEoOSwxNjcsMjU1LC4xMik7CgogICAgLyogUmFkaWkgKi8KICAgIC0tcmFkaXVzLWJ0bjogIHZhcigtLXJhZGl1cy1idXR0b24pOwogICAgLS1yYWRpdXMtYnRuLXhsOiB2YXIoLS1yYWRpdXMtYnV0dG9uLXhsKTsKCiAgICAvKiBFbGV2YXRpb24g4oCUIFNjaGF0dGVuIGF1cyBNaWRuaWdodCAqLwogICAgLS1zaGFkb3ctMjogMCAxcHggMnB4IHJnYmEoMCw4LDM4LC4wNiksIDAgMXB4IDNweCByZ2JhKDAsOCwzOCwuMDQpOwogICAgLS1zaGFkb3ctMzogMCA0cHggMTJweCAtMnB4IHJnYmEoMCw4LDM4LC4wOCksIDAgMnB4IDRweCAtMnB4IHJnYmEoMCw4LDM4LC4wNCk7CiAgICAtLXNoYWRvdy00OiAwIDE2cHggNDBweCAtOHB4IHJnYmEoMCw4LDM4LC4xNCk7CiAgICAtLWZvY3VzLXJpbmc6IHZhcigtLXNoYWRvdy1mb2N1cyk7CiAgfQogICNwdy1wbGFuZmluZGVyLCAjcHctcGxhbmZpbmRlciAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogICNwdy1wbGFuZmluZGVyIHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTsKICAgIGNvbG9yOiB2YXIoLS1mZy1kZWZhdWx0KTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNhbnZhcyk7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS41OwogICAgbGV0dGVyLXNwYWNpbmc6IC4ycHg7CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgIHRleHQtd3JhcC1zdHlsZTogcHJldHR5OwogICAgbWluLWhlaWdodDogMTAwJTsKICB9CiAgI3B3LXBsYW5maW5kZXIgLmljbiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IC0wLjE4ZW07IGZsZXg6IDAgMCBhdXRvOyB9CiAgI3B3LXBsYW5maW5kZXIgLndyYXAgeyBtYXgtd2lkdGg6IDkyMHB4OyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMzJweCAyMHB4IDcycHg7IH0KCiAgLyogSGVhZGVyICovCiAgI3B3LXBsYW5maW5kZXIgLmJyYW5kIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNHB4OyBtYXJnaW4tYm90dG9tOiAzMHB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLmJyYW5kIC5sb2dvIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgfQogICNwdy1wbGFuZmluZGVyIC5icmFuZCAubG9nbyBzdmcgeyBoZWlnaHQ6IDI2cHg7IHdpZHRoOiBhdXRvOyBkaXNwbGF5OiBibG9jazsgfQogICNwdy1wbGFuZmluZGVyIC5icmFuZCAuZGl2aWRlciB7IHdpZHRoOiAxcHg7IGhlaWdodDogMjJweDsgYmFja2dyb3VuZDogdmFyKC0taGFpcmxpbmUpOyB9CiAgI3B3LXBsYW5maW5kZXIgLmJyYW5kIC5uYW1lIHsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAxNXB4OyBjb2xvcjogdmFyKC0tZ3JheS03MDApOyBsZXR0ZXItc3BhY2luZzogLjFweDsgfQogICNwdy1wbGFuZmluZGVyIC5icmFuZCAudGFnIHsgbWFyZ2luLWxlZnQ6IGF1dG87IGZvbnQtc2l6ZTogMTIuNXB4OyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgZm9udC13ZWlnaHQ6IDQwMDsgfQoKICAvKiBIZXJvICovCiAgI3B3LXBsYW5maW5kZXIgLmhlcm8geyBtYXJnaW4tYm90dG9tOiAzMHB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLmhlcm8gaDIgewogICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZGlzcGxheSk7IGZvbnQtd2VpZ2h0OiA5MDA7IGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGZvbnQtc2l6ZTogY2xhbXAoMzBweCwgNS4ydncsIDQ4cHgpOyBsaW5lLWhlaWdodDogMS4wNDsgbGV0dGVyLXNwYWNpbmc6IDA7CiAgICBtYXJnaW46IDAgMCAxNHB4OyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IHRleHQtd3JhcC1zdHlsZTogYmFsYW5jZTsKICB9CiAgI3B3LXBsYW5maW5kZXIgLmhlcm8gaDIgLmhsIHsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KICAjcHctcGxhbmZpbmRlciAuaGVybyBwIHsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDogMS41NTsgY29sb3I6IHZhcigtLWZnLWRlZmF1bHQpOyBtYXJnaW46IDA7IG1heC13aWR0aDogNjQwcHg7IH0KCiAgLyogUHJvZ3Jlc3MgKi8KICAjcHctcGxhbmZpbmRlciAucHJvZ3Jlc3MgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgbWFyZ2luOiAzMHB4IDAgMjRweDsgfQogICNwdy1wbGFuZmluZGVyIC5wcm9ncmVzcyAuc2VnIHsgZmxleDogMTsgaGVpZ2h0OiA2cHg7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1waWxsKTsgYmFja2dyb3VuZDogdmFyKC0tZ3JheS0xMDApOyBvdmVyZmxvdzogaGlkZGVuOyB9CiAgI3B3LXBsYW5maW5kZXIgLnByb2dyZXNzIC5zZWcgPiBpIHsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgd2lkdGg6IDA7IGJhY2tncm91bmQ6IHZhcigtLXBpY2t3YXJlLTUwMCk7IHRyYW5zaXRpb246IHdpZHRoIC4zNXMgZWFzZTsgfQogICNwdy1wbGFuZmluZGVyIC5wcm9ncmVzcyAuc2VnLmRvbmUgPiBpLAojcHctcGxhbmZpbmRlciAucHJvZ3Jlc3MgLnNlZy5hY3RpdmUgPiBpIHsgd2lkdGg6IDEwMCU7IH0KCiAgLyogQ2FyZCAqLwogICNwdy1wbGFuZmluZGVyIC5jYXJkIHsgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWhhaXJsaW5lKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTsgcGFkZGluZzogMzBweDsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LTIpOyB9CiAgI3B3LXBsYW5maW5kZXIgLnN0ZXAtZXllYnJvdyB7IGZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDUwMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IDEuMjVweDsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IG1hcmdpbjogMCAwIDEwcHg7IH0KICAjcHctcGxhbmZpbmRlciAuc3RlcC10aXRsZSB7IGZvbnQtc2l6ZTogMjZweDsgZm9udC13ZWlnaHQ6IDUwMDsgbGV0dGVyLXNwYWNpbmc6IC0uMnB4OyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IG1hcmdpbjogMCAwIDhweDsgbGluZS1oZWlnaHQ6IDEuMjsgfQogICNwdy1wbGFuZmluZGVyIC5zdGVwLXN1YiB7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBtYXJnaW46IDAgMCAyNHB4OyBmb250LXNpemU6IDE1cHg7IGxpbmUtaGVpZ2h0OiAxLjU7IH0KCiAgLyogT3B0aW9uIGdyaWQgKGV4aXN0aW5nIHBsdWdpbnMsIHNob3BzKSAqLwogICNwdy1wbGFuZmluZGVyIC5vcHQtZ3JpZCB7IGRpc3BsYXk6IGdyaWQ7IGdhcDogMTJweDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgxODBweCwgMWZyKSk7IH0KICAjcHctcGxhbmZpbmRlciAub3B0IHsKICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taGFpcmxpbmUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiAxNnB4OwogICAgY3Vyc29yOiBwb2ludGVyOyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlKTsgdHJhbnNpdGlvbjogYWxsIC4xMnMgZWFzZS1pbjsgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDNweDsKICB9CiAgI3B3LXBsYW5maW5kZXIgLm9wdDpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgYmFja2dyb3VuZDogdmFyKC0tdGludCk7IH0KICAjcHctcGxhbmZpbmRlciAub3B0LnNlbCB7IGJvcmRlci1jb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgYmFja2dyb3VuZDogdmFyKC0tdGludCk7IGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCB2YXIoLS1waWNrd2FyZS01MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgLm9wdCAudCB7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMTVweDsgY29sb3I6IHZhcigtLWZnLWhlYWRpbmcpOyB9CiAgI3B3LXBsYW5maW5kZXIgLm9wdCAuZCB7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6IHZhcigtLWZnLXN1YnRsZSk7IH0KICAjcHctcGxhbmZpbmRlciAub3B0IC5jaGVjayB7IHdpZHRoOiAyMHB4OyBoZWlnaHQ6IDIwcHg7IGJvcmRlci1yYWRpdXM6IDZweDsgYm9yZGVyOiAxLjVweCBzb2xpZCB2YXIoLS1ncmF5LTIwMCk7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBjb2xvcjogdHJhbnNwYXJlbnQ7IGZsb2F0OiByaWdodDsgfQogICNwdy1wbGFuZmluZGVyIC5vcHQuc2VsIC5jaGVjayB7IGJhY2tncm91bmQ6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGJvcmRlci1jb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgY29sb3I6ICNmZmY7IH0KICAjcHctcGxhbmZpbmRlciAub3B0LnJhZGlvIC5jaGVjayB7IGJvcmRlci1yYWRpdXM6IDUwJTsgfQogICNwdy1wbGFuZmluZGVyIC5vcHQucmFkaW8uc2VsIC5jaGVjayB7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOyBib3JkZXI6IDZweCBzb2xpZCB2YXIoLS1waWNrd2FyZS01MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgLm9wdC5sb2NrZWQgeyBjdXJzb3I6IGRlZmF1bHQ7IH0KICAjcHctcGxhbmZpbmRlciAub3B0LmxvY2tlZDpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXRpbnQpOyBib3JkZXItY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KCiAgLyogRmVhdHVyZSBncm91cHMgKi8KICAjcHctcGxhbmZpbmRlciAuZmdyb3VwIHsgbWFyZ2luLWJvdHRvbTogMjJweDsgfQogICNwdy1wbGFuZmluZGVyIC5mZ3JvdXAgaDMgeyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA1MDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOiAxLjFweDsgY29sb3I6IHZhcigtLWdyYXktNzAwKTsgbWFyZ2luOiAwIDAgMTJweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA5cHg7IH0KICAjcHctcGxhbmZpbmRlciAuZmdyb3VwIGgzIC5pY24geyBjb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5mbGlzdCB7IGRpc3BsYXk6IGdyaWQ7IGdhcDogOHB4OyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyNjBweCwgMWZyKSk7IH0KICAjcHctcGxhbmZpbmRlciAuZmVhdCB7CiAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgZ2FwOiAxMXB4OyBwYWRkaW5nOiAxMnB4IDE0cHg7IGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taGFpcmxpbmUpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBhbGwgLjEycyBlYXNlLWluOyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlKTsKICB9CiAgI3B3LXBsYW5maW5kZXIgLmZlYXQ6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGJhY2tncm91bmQ6IHZhcigtLXRpbnQpOyB9CiAgI3B3LXBsYW5maW5kZXIgLmZlYXQuc2VsIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyBiYWNrZ3JvdW5kOiB2YXIoLS10aW50KTsgfQogICNwdy1wbGFuZmluZGVyIC5mZWF0IC5jYiB7IGZsZXg6IDAgMCBhdXRvOyB3aWR0aDogMjBweDsgaGVpZ2h0OiAyMHB4OyBib3JkZXItcmFkaXVzOiA2cHg7IGJvcmRlcjogMS41cHggc29saWQgdmFyKC0tZ3JheS0zMDApOyBtYXJnaW4tdG9wOiAxcHg7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgY29sb3I6IHRyYW5zcGFyZW50OyB9CiAgI3B3LXBsYW5maW5kZXIgLmZlYXQuc2VsIC5jYiB7IGJhY2tncm91bmQ6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGJvcmRlci1jb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgY29sb3I6ICNmZmY7IH0KICAjcHctcGxhbmZpbmRlciAuZmVhdCAuZnggeyBmbGV4OiAxOyB9CiAgI3B3LXBsYW5maW5kZXIgLmZlYXQgLmZ4IC5mbCB7IGRpc3BsYXk6IGJsb2NrOyBmb250LXdlaWdodDogNTAwOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiB2YXIoLS1mZy1oZWFkaW5nKTsgfQogICNwdy1wbGFuZmluZGVyIC5mZWF0IC5meCAuZmggeyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAxMi41cHg7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBtYXJnaW4tdG9wOiAycHg7IH0KCiAgI3B3LXBsYW5maW5kZXIgLmJhc2VsaW5lIHsgZm9udC1zaXplOiAxMy41cHg7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmF5LTUwKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taGFpcmxpbmUtc29mdCk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IHBhZGRpbmc6IDE0cHggMTZweDsgbWFyZ2luLXRvcDogOHB4OyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyB9CiAgI3B3LXBsYW5maW5kZXIgLmJhc2VsaW5lIC5pY24geyBjb2xvcjogdmFyKC0tc3VjY2Vzcyk7IG1hcmdpbi10b3A6IDFweDsgfQogICNwdy1wbGFuZmluZGVyIC5iYXNlbGluZSBiIHsgY29sb3I6IHZhcigtLWdyYXktODAwKTsgZm9udC13ZWlnaHQ6IDUwMDsgfQoKICAvKiBQcmVmaWxsLUhpbndlaXMgKi8KICAjcHctcGxhbmZpbmRlciAucHJlZmlsbC1ub3RlIHsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgYmFja2dyb3VuZDogdmFyKC0tdGludCk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWhhaXJsaW5lLXNvZnQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiAxMXB4IDE0cHg7IG1hcmdpbi1ib3R0b206IDE4cHg7IGRpc3BsYXk6IGZsZXg7IGdhcDogOXB4OyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgfQogICNwdy1wbGFuZmluZGVyIC5wcmVmaWxsLW5vdGUgLmljbiB7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyBtYXJnaW4tdG9wOiAxcHg7IH0KCiAgLyogWmllbC1TY2huZWxsc3RhcnQgKi8KICAjcHctcGxhbmZpbmRlciAuZ29hbHMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmF5LTUwKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taGFpcmxpbmUtc29mdCk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IHBhZGRpbmc6IDE4cHg7IG1hcmdpbi1ib3R0b206IDI2cHg7IH0KICAjcHctcGxhbmZpbmRlciAuZ29hbHMgLmdoIHsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAxNXB4OyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IG1hcmdpbi1ib3R0b206IDRweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IH0KICAjcHctcGxhbmZpbmRlciAuZ29hbHMgLmdoIC5pY24geyBjb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5nb2FscyAuZ3MgeyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBtYXJnaW4tYm90dG9tOiAxNHB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLmdvYWwtY2hpcHMgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogOHB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLmNoaXAgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IHBhZGRpbmc6IDlweCAxNXB4OyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtcGlsbCk7IGJvcmRlcjogMS41cHggc29saWQgdmFyKC0tZ3JheS0yMDApOyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlKTsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDEzLjVweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLWdyYXktNzAwKTsgdHJhbnNpdGlvbjogYWxsIC4xMnMgZWFzZS1pbjsgdXNlci1zZWxlY3Q6IG5vbmU7IH0KICAjcHctcGxhbmZpbmRlciAuY2hpcDpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KICAjcHctcGxhbmZpbmRlciAuY2hpcDpob3ZlciAuaWNuIHsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KICAjcHctcGxhbmZpbmRlciAuY2hpcC5zZWwgeyBiYWNrZ3JvdW5kOiB2YXIoLS1waWNrd2FyZS01MDApOyBib3JkZXItY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGNvbG9yOiAjZmZmOyB9CiAgI3B3LXBsYW5maW5kZXIgLmNoaXAuc2VsIC5pY24geyBjb2xvcjogI2ZmZjsgfQogICNwdy1wbGFuZmluZGVyIC5jaGlwIC5pY24geyBjb2xvcjogdmFyKC0tZ3JheS01MDApOyB9CgogIC8qIE1pZ3JhdGlvbnMtQmxvY2sgKi8KICAjcHctcGxhbmZpbmRlciAubWlncmF0ZSB7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWhhaXJsaW5lLXNvZnQpOyBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLXBpY2t3YXJlLTUwMCk7IGJhY2tncm91bmQ6IHZhcigtLXRpbnQpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiAxNnB4IDE4cHg7IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KICAjcHctcGxhbmZpbmRlciAubWlncmF0ZSBoNCB7IG1hcmdpbjogMCAwIDhweDsgZm9udC1zaXplOiAxNXB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogdmFyKC0tcGlja3dhcmUtOTAwKTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IH0KICAjcHctcGxhbmZpbmRlciAubWlncmF0ZSBoNCAuaWNuIHsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KICAjcHctcGxhbmZpbmRlciAubWlncmF0ZSBwIHsgbWFyZ2luOiAwIDAgNnB4OyBmb250LXNpemU6IDEzLjVweDsgY29sb3I6IHZhcigtLWZnLWRlZmF1bHQpOyBsaW5lLWhlaWdodDogMS41OyB9CiAgI3B3LXBsYW5maW5kZXIgLm1pZ3JhdGUgcDpsYXN0LWNoaWxkIHsgbWFyZ2luLWJvdHRvbTogMDsgfQoKICAvKiBUcmFuc3BhcmVuejogd2FzIGVpbiBnw7xuc3RpZ2VyZXIgUGxhbiBuaWNodCBlbnRow6RsdCAqLwogICNwdy1wbGFuZmluZGVyIC5sb3NlIHsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taGFpcmxpbmUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpOyBwYWRkaW5nOiAxNnB4IDE4cHg7IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KICAjcHctcGxhbmZpbmRlciAubG9zZSBoNCB7IG1hcmdpbjogMCAwIDEycHg7IGZvbnQtc2l6ZTogMTVweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLWZnLWhlYWRpbmcpOyB9CiAgI3B3LXBsYW5maW5kZXIgLmxvc2UgdWwgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGxpc3Qtc3R5bGU6IG5vbmU7IGRpc3BsYXk6IGdyaWQ7IGdhcDogN3B4OyB9CiAgI3B3LXBsYW5maW5kZXIgLmxvc2UgbGkgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IGZvbnQtc2l6ZTogMTMuNXB4OyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgY29sb3I6IHZhcigtLWZnLWRlZmF1bHQpOyB9CiAgI3B3LXBsYW5maW5kZXIgLmxvc2UgbGkgLmljbiB7IGNvbG9yOiB2YXIoLS1kYW5nZXIpOyBtYXJnaW4tdG9wOiAycHg7IH0KICAjcHctcGxhbmZpbmRlciAuc2F2aW5ncyB7IGZvbnQtc2l6ZTogMTMuNXB4OyBmb250LXdlaWdodDogNTAwOyBtYXJnaW4tdG9wOiA2cHg7IH0KCiAgLyogSW5wdXRzICovCiAgI3B3LXBsYW5maW5kZXIgLmZpZWxkIHsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICNwdy1wbGFuZmluZGVyIC5maWVsZCBsYWJlbC5xIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMTZweDsgY29sb3I6IHZhcigtLWZnLWhlYWRpbmcpOyBtYXJnaW4tYm90dG9tOiA0cHg7IH0KICAjcHctcGxhbmZpbmRlciAuZmllbGQgLnFoIHsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgbWFyZ2luLWJvdHRvbTogMTJweDsgfQogICNwdy1wbGFuZmluZGVyIGlucHV0W3R5cGU9Im51bWJlciJdIHsKICAgIHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDIyMHB4OyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmc6IDExcHggMTNweDsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taGFpcmxpbmUpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOwogIH0KICAjcHctcGxhbmZpbmRlciBpbnB1dFt0eXBlPSJudW1iZXIiXTpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgYm94LXNoYWRvdzogdmFyKC0tZm9jdXMtcmluZyk7IH0KICAjcHctcGxhbmZpbmRlciBpbnB1dFt0eXBlPSJyYW5nZSJdIHsgd2lkdGg6IDEwMCU7IGFjY2VudC1jb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5yYW5nZXZhbCB7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMjJweDsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTkwMCk7IG1hcmdpbi1ib3R0b206IDRweDsgfQogICNwdy1wbGFuZmluZGVyIC50b2dnbGUtcm93IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWhhaXJsaW5lKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWJ0bik7IG92ZXJmbG93OiBoaWRkZW47IH0KICAjcHctcGxhbmZpbmRlciAudG9nZ2xlLXJvdyBidXR0b24geyBib3JkZXI6IDA7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOyBwYWRkaW5nOiAxMHB4IDE4cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMTRweDsgY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOyB0cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW47IH0KICAjcHctcGxhbmZpbmRlciAudG9nZ2xlLXJvdyBidXR0b24ub24geyBiYWNrZ3JvdW5kOiB2YXIoLS1waWNrd2FyZS01MDApOyBjb2xvcjogI2ZmZjsgfQogIC8qIFBsYXR0Zm9ybS1NYXJrZW5mYXJiZW4gZsO8ciBkaWUgU2hvcHN5c3RlbS1BdXN3YWhsICovCiAgI3B3LXBsYW5maW5kZXIgeyAtLWJyYW5kLXNob3BpZnk6ICM1ZThlM2U7IC0tYnJhbmQtc2hvcHdhcmU6ICM0YjRhY2Y7IH0KICAjcHctcGxhbmZpbmRlciAudG9nZ2xlLXJvdyBidXR0b24ucGYtc2hvcGlmeS5vbiB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLXNob3BpZnkpOyB9CiAgI3B3LXBsYW5maW5kZXIgLnRvZ2dsZS1yb3cgYnV0dG9uLnBmLXNob3B3YXJlNi5vbiB7IGJhY2tncm91bmQ6IHZhcigtLWJyYW5kLXNob3B3YXJlKTsgfQoKICAvKiBOYXYgYnV0dG9ucyAqLwogICNwdy1wbGFuZmluZGVyIC5uYXYgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi10b3A6IDI4cHg7IGdhcDogMTJweDsgfQogICNwdy1wbGFuZmluZGVyIC5idG4geyBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMTZweDsgbGV0dGVyLXNwYWNpbmc6IC41cHg7IGhlaWdodDogNDhweDsgcGFkZGluZzogMCAyMHB4OyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtYnRuKTsgY3Vyc29yOiBwb2ludGVyOyBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgdHJhbnNpdGlvbjogYWxsIC4xcyBlYXNlLWluOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogOHB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLmJ0bi1wcmltYXJ5IHsgYmFja2dyb3VuZDogdmFyKC0tcGlja3dhcmUtNTAwKTsgY29sb3I6ICNmZmY7IH0KICAjcHctcGxhbmZpbmRlciAuYnRuLXByaW1hcnk6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1waWNrd2FyZS1ob3Zlcik7IH0KICAjcHctcGxhbmZpbmRlciAuYnRuLXNlY29uZGFyeSB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogdmFyKC0tZ3JheS05MDApOyBib3JkZXItY29sb3I6IHZhcigtLWdyYXktMzAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5idG4tc2Vjb25kYXJ5OmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyBjb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5idG4tZGFyayB7IGJhY2tncm91bmQ6IHZhcigtLXBpY2t3YXJlLTkwMCk7IGNvbG9yOiAjZmZmOyB9CiAgI3B3LXBsYW5maW5kZXIgLmJ0bi1kYXJrOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tbWlkbmlnaHQpOyB9CiAgI3B3LXBsYW5maW5kZXIgLmJ0bjpkaXNhYmxlZCB7IG9wYWNpdHk6IC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9CgogIC8qIC0tLS0tLS0tLS0gUmVzdWx0IC0tLS0tLS0tLS0gKi8KICAjcHctcGxhbmZpbmRlciAucmVzdWx0LWhlYWQgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDZweDsgfQogICNwdy1wbGFuZmluZGVyIC5yZXN1bHQtaGVhZCAuZXllYnJvdyB7IGZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDUwMDsgbGV0dGVyLXNwYWNpbmc6IDEuMjVweDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29sb3I6IHZhcigtLWZnLXN1YnRsZSk7IH0KICAjcHctcGxhbmZpbmRlciAucmVjLWNhcmQgewogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTsgcGFkZGluZzogMzBweCAyNHB4OyBtYXJnaW46IDE0cHggMCAyMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tcGlja3dhcmUtNTAwKTsgY29sb3I6ICNmZmY7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAjcHctcGxhbmZpbmRlciAucmVjLWNhcmQgLnBsYW4tbmFtZSB7IGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWRpc3BsYXkpOyBmb250LXdlaWdodDogOTAwOyBmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtc2l6ZTogNDBweDsgbGV0dGVyLXNwYWNpbmc6IDA7IGNvbG9yOiAjZmZmOyBtYXJnaW46IDZweCAwOyBsaW5lLWhlaWdodDogMTsgfQogICNwdy1wbGFuZmluZGVyIC5yZWMtY2FyZCAucGxhbi1wcmljZSB7IGZvbnQtc2l6ZTogMTdweDsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjkyKTsgfQogICNwdy1wbGFuZmluZGVyIC5yZWMtY2FyZCAucGxhbi1wcmljZSBiIHsgZm9udC1zaXplOiAyOHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogI2ZmZjsgfQogICNwdy1wbGFuZmluZGVyIC5yZWMtY2FyZCAuc2F2aW5ncyB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC45KTsgfQogICNwdy1wbGFuZmluZGVyIC5wb3AtYmFkZ2UgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEzcHg7IGxlZnQ6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyBiYWNrZ3JvdW5kOiB2YXIoLS1hbWJlci01MDApOyBjb2xvcjogdmFyKC0tYW1iZXItOTAwKTsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAxMnB4OyBsZXR0ZXItc3BhY2luZzogLjRweDsgcGFkZGluZzogNnB4IDE0cHg7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1waWxsKTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctMyk7IH0KICAjcHctcGxhbmZpbmRlciAucG9wLWJhZGdlIC5pY24geyBjb2xvcjogdmFyKC0tYW1iZXItOTAwKTsgfQoKICAjcHctcGxhbmZpbmRlciAud2h5IHsgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWhhaXJsaW5lKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgcGFkZGluZzogMThweCAyMHB4OyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgI3B3LXBsYW5maW5kZXIgLndoeSBoNCB7IG1hcmdpbjogMCAwIDEycHg7IGZvbnQtc2l6ZTogMTVweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLWZnLWhlYWRpbmcpOyB9CiAgI3B3LXBsYW5maW5kZXIgLndoeSB1bCB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgbGlzdC1zdHlsZTogbm9uZTsgZGlzcGxheTogZ3JpZDsgZ2FwOiA5cHg7IH0KICAjcHctcGxhbmZpbmRlciAud2h5IGxpIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyBmb250LXNpemU6IDE0cHg7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBsaW5lLWhlaWdodDogMS41OyB9CiAgI3B3LXBsYW5maW5kZXIgLndoeSBsaSAuaWNuIHsgbWFyZ2luLXRvcDogMnB4OyBjb2xvcjogdmFyKC0tc3VjY2Vzcyk7IH0KICAjcHctcGxhbmZpbmRlciAud2h5IGxpIC5pY24uaW5mbyB7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgLndoeSBsaSBiIHsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLWZnLWhlYWRpbmcpOyB9CgogIC8qIGNvc3QgYnJlYWtkb3duICovCiAgI3B3LXBsYW5maW5kZXIgLmNvc3QgeyBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1oYWlybGluZSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IG92ZXJmbG93OiBoaWRkZW47IG1hcmdpbi1ib3R0b206IDE2cHg7IH0KICAjcHctcGxhbmZpbmRlciAuY29zdCAucm93IHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBnYXA6IDE2cHg7IHBhZGRpbmc6IDEycHggMTZweDsgZm9udC1zaXplOiAxNHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0taGFpcmxpbmUtc29mdCk7IH0KICAjcHctcGxhbmZpbmRlciAuY29zdCAucm93LmhlYWQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmF5LTUwKTsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLWdyYXktODAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5jb3N0IC5yb3cudG90YWwgeyBmb250LXdlaWdodDogNTAwOyBmb250LXNpemU6IDE2cHg7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOyBib3JkZXItYm90dG9tOiAwOyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IH0KICAjcHctcGxhbmZpbmRlciAuY29zdCAucm93IC5tdXRlZCB7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBmb250LXdlaWdodDogNDAwOyB9CgogIC8qIHVwc2VsbCBudWRnZSAqLwogICNwdy1wbGFuZmluZGVyIC5udWRnZSB7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFtYmVyLTUwMCk7IGJhY2tncm91bmQ6ICNmZmZhZGY7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IHBhZGRpbmc6IDE2cHggMThweDsgbWFyZ2luLWJvdHRvbTogMTZweDsgfQogICNwdy1wbGFuZmluZGVyIC5udWRnZSBoNCB7IG1hcmdpbjogMCAwIDZweDsgZm9udC1zaXplOiAxNXB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogdmFyKC0tYW1iZXItOTAwKTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7IH0KICAjcHctcGxhbmZpbmRlciAubnVkZ2UgaDQgLmljbiB7IGNvbG9yOiB2YXIoLS1tYXJpZ29sZC01MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgLm51ZGdlIHVsIHsgbWFyZ2luOiA4cHggMCAwOyBwYWRkaW5nLWxlZnQ6IDIwcHg7IGZvbnQtc2l6ZTogMTMuNXB4OyBjb2xvcjogdmFyKC0tZ3JheS04MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgLm51ZGdlIHVsIGxpIHsgbWFyZ2luLWJvdHRvbTogM3B4OyB9CiAgI3B3LXBsYW5maW5kZXIgLm51ZGdlIC51cGRlbHRhIHsgZm9udC13ZWlnaHQ6IDUwMDsgfQoKICAvKiBjb21wYXJpc29uIHN0cmlwICovCiAgI3B3LXBsYW5maW5kZXIgLmNvbXBhcmUgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpOyBnYXA6IDEwcHg7IG1hcmdpbjogMThweCAwOyB9CiAgI3B3LXBsYW5maW5kZXIgLnBjb2wgeyBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWhhaXJsaW5lKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgcGFkZGluZzogMTZweCAxMnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTNweDsgcG9zaXRpb246IHJlbGF0aXZlOyBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlKTsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBhbGwgLjEycyBlYXNlLWluOyB9CiAgI3B3LXBsYW5maW5kZXIgLnBjb2w6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KICAjcHctcGxhbmZpbmRlciAucGNvbDpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogbm9uZTsgYm94LXNoYWRvdzogdmFyKC0tZm9jdXMtcmluZyk7IH0KICAjcHctcGxhbmZpbmRlciAucGNvbC5zZWwgeyBib3JkZXItY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCB2YXIoLS1waWNrd2FyZS01MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgLnBjb2wgLnBuIHsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAxNXB4OyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IH0KICAjcHctcGxhbmZpbmRlciAucGNvbCAucHAgeyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgbWFyZ2luOiA0cHggMDsgfQogICNwdy1wbGFuZmluZGVyIC5wY29sIC5wcCBiIHsgZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogNTAwOyBjb2xvcjogdmFyKC0tZmctaGVhZGluZyk7IH0KICAjcHctcGxhbmZpbmRlciAucGNvbCAudGFncmVjIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW4tdG9wOiA2cHg7IGZvbnQtc2l6ZTogMTAuNXB4OyBmb250LXdlaWdodDogNTAwOyBsZXR0ZXItc3BhY2luZzogLjNweDsgY29sb3I6ICNmZmY7IGJhY2tncm91bmQ6IHZhcigtLXBpY2t3YXJlLTUwMCk7IHBhZGRpbmc6IDNweCA5cHg7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1waWxsKTsgfQoKICAjcHctcGxhbmZpbmRlciAuY3RhLXJvdyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogMTJweDsgZmxleC13cmFwOiB3cmFwOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWFyZ2luLXRvcDogMjJweDsgfQoKICAvKiBEaXJla3RlciBEcmFodCB6dW0gU2FsZXMtVGVhbSAoRW1wZmVobHVuZ3NzZWl0ZSkgKi8KICAjcHctcGxhbmZpbmRlciAuc2FsZXNjb250YWN0IHsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taGFpcmxpbmUpOyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmF5LTUwKTsgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLW1kKTsgcGFkZGluZzogMThweCAyMHB4OyBtYXJnaW4tdG9wOiAyMnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KICAjcHctcGxhbmZpbmRlciAuc2FsZXNjb250YWN0IGg0IHsgbWFyZ2luOiAwIDAgNHB4OyBmb250LXNpemU6IDE1cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS1mZy1oZWFkaW5nKTsgfQogICNwdy1wbGFuZmluZGVyIC5zYWxlc2NvbnRhY3QgcCB7IG1hcmdpbjogMCAwIDEycHg7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6IHZhcigtLWZnLXN1YnRsZSk7IH0KICAjcHctcGxhbmZpbmRlciAuc2FsZXNjb250YWN0IC53YXlzIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyBmbGV4LXdyYXA6IHdyYXA7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9CiAgI3B3LXBsYW5maW5kZXIgLnNhbGVzY29udGFjdCAud2F5IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyBwYWRkaW5nOiAxMHB4IDE2cHg7IGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taGFpcmxpbmUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtYnRuKTsgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZSk7IGNvbG9yOiB2YXIoLS1mZy1oZWFkaW5nKTsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAxNHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRyYW5zaXRpb246IGFsbCAuMTJzIGVhc2UtaW47IH0KICAjcHctcGxhbmZpbmRlciAuc2FsZXNjb250YWN0IC53YXk6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgLnNhbGVzY29udGFjdCAud2F5IC5pY24geyBjb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5zYWxlc2NvbnRhY3QgLmhvdXJzIHsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgbWFyZ2luLXRvcDogMTBweDsgfQogICNwdy1wbGFuZmluZGVyIC5kaXNjbGFpbWVyIHsgZm9udC1zaXplOiAxMS41cHg7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyB0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6IDIycHg7IGxpbmUtaGVpZ2h0OiAxLjU7IH0KICAjcHctcGxhbmZpbmRlciAucmVzdGFydCB7IHRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDogMTZweDsgfQogICNwdy1wbGFuZmluZGVyIC5yZXN0YXJ0IGJ1dHRvbiB7IGJhY2tncm91bmQ6IG5vbmU7IGJvcmRlcjogMDsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGZvbnQtd2VpZ2h0OiA1MDA7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDsgfQogICNwdy1wbGFuZmluZGVyIC5yZXN0YXJ0IGJ1dHRvbjpob3ZlciB7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS1ob3Zlcik7IH0KCiAgI3B3LXBsYW5maW5kZXIgLmhpZGRlbiB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoKICAvKiBWZXJnbGVpY2hzLU1vZGFsOiBGdW5rdGlvbnNtYXRyaXggw7xiZXIgYWxsZSBQbMOkbmUgKi8KICAjcHctcGxhbmZpbmRlciAubW9kYWwtYmFja2Ryb3AgeyBwb3NpdGlvbjogZml4ZWQ7IGluc2V0OiAwOyBiYWNrZ3JvdW5kOiByZ2JhKDAsOCwzOCwuNTUpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcGFkZGluZzogMjBweDsgei1pbmRleDogMTAwMDAwOyB9CiAgI3B3LXBsYW5maW5kZXIgLm1vZGFsLXBhbmVsIHsgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZSk7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7IGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy00KTsgbWF4LXdpZHRoOiA5NjBweDsgd2lkdGg6IDEwMCU7IG1heC1oZWlnaHQ6IDg2dmg7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IG92ZXJmbG93OiBoaWRkZW47IH0KICAjcHctcGxhbmZpbmRlciAubW9kYWwtaGVhZCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGdhcDogMTZweDsgcGFkZGluZzogMjBweCAyNHB4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0taGFpcmxpbmUpOyBmbGV4OiAwIDAgYXV0bzsgfQogICNwdy1wbGFuZmluZGVyIC5tb2RhbC1oZWFkIGgzIHsgbWFyZ2luOiAwIDAgNHB4OyBmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS1mZy1oZWFkaW5nKTsgfQogICNwdy1wbGFuZmluZGVyIC5tb2RhbC1oZWFkIHAgeyBtYXJnaW46IDA7IGZvbnQtc2l6ZTogMTNweDsgY29sb3I6IHZhcigtLWZnLXN1YnRsZSk7IH0KICAjcHctcGxhbmZpbmRlciAubW9kYWwtY2xvc2UgeyBib3JkZXI6IDA7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBjb2xvcjogdmFyKC0tZ3JheS01MDApOyBjdXJzb3I6IHBvaW50ZXI7IHdpZHRoOiAzMnB4OyBoZWlnaHQ6IDMycHg7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1tZCk7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZmxleDogMCAwIGF1dG87IH0KICAjcHctcGxhbmZpbmRlciAubW9kYWwtY2xvc2U6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmF5LTUwKTsgY29sb3I6IHZhcigtLWdyYXktODAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5tb2RhbC1oZWFkLWFjdGlvbnMgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEwcHg7IGZsZXg6IDAgMCBhdXRvOyB9CiAgI3B3LXBsYW5maW5kZXIgLm1vZGFsLWZlYXRsaW5rIHsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogN3B4OyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taGFpcmxpbmUpOyBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtYnRuKTsgcGFkZGluZzogOHB4IDEycHg7IHRyYW5zaXRpb246IGFsbCAuMTJzIGVhc2UtaW47IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0KICAjcHctcGxhbmZpbmRlciAubW9kYWwtZmVhdGxpbms6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGJhY2tncm91bmQ6IHZhcigtLXRpbnQpOyB9CiAgI3B3LXBsYW5maW5kZXIgLm1vZGFsLWZlYXRsaW5rIC5pY24geyBjb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgfQogICNwdy1wbGFuZmluZGVyIC5mY29tcGFyZS1zY3JvbGwgeyBvdmVyZmxvdzogYXV0bzsgcGFkZGluZzogNHB4IDI0cHggMjRweDsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCU7IG1pbi13aWR0aDogNjQwcHg7IGZvbnQtc2l6ZTogMTMuNXB4OyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGhlYWQgdGggeyBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOyBwYWRkaW5nOiAxMnB4IDEwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWhhaXJsaW5lKTsgei1pbmRleDogMTsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRoZWFkIHRoLnJlYyB7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGhlYWQgdGggLmZjbiB7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IHZhcigtLWZnLWhlYWRpbmcpOyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGhlYWQgdGgucmVjIC5mY24geyBjb2xvcjogdmFyKC0tcGlja3dhcmUtNTAwKTsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRoZWFkIHRoIC5mY3AgeyBmb250LXNpemU6IDEycHg7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBmb250LXdlaWdodDogNDAwOyBtYXJnaW4tdG9wOiAycHg7IH0KICAjcHctcGxhbmZpbmRlciB0YWJsZS5mY29tcGFyZSB0aGVhZCB0aCAuZmN0YWcgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi10b3A6IDVweDsgZm9udC1zaXplOiAxMHB4OyBmb250LXdlaWdodDogNTAwOyBsZXR0ZXItc3BhY2luZzogLjNweDsgY29sb3I6ICNmZmY7IGJhY2tncm91bmQ6IHZhcigtLXBpY2t3YXJlLTUwMCk7IHBhZGRpbmc6IDJweCA4cHg7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1waWxsKTsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRoZWFkIHRoOmZpcnN0LWNoaWxkLAojcHctcGxhbmZpbmRlciB0YWJsZS5mY29tcGFyZSB0Ym9keSB0ZDpmaXJzdC1jaGlsZCB7IHRleHQtYWxpZ246IGxlZnQ7IG1pbi13aWR0aDogMjAwcHg7IGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UpOyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGJvZHkgdHIuZmNncm91cCB0ZCB7IHBhZGRpbmc6IDE2cHggMTBweCA2cHg7IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDUwMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IC44cHg7IGNvbG9yOiB2YXIoLS1ncmF5LTYwMCk7IGJvcmRlcjogMDsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRib2R5IHRyLmZjZ3JvdXAgdGQgLmljbiB7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyBtYXJnaW4tcmlnaHQ6IDZweDsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRib2R5IHRyLmZjaW5mbyB0ZCB7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS1mZy1oZWFkaW5nKTsgYmFja2dyb3VuZDogdmFyKC0tZ3JheS01MCk7IH0KICAjcHctcGxhbmZpbmRlciB0YWJsZS5mY29tcGFyZSB0Ym9keSB0ci5mY2luZm8gdGQ6Zmlyc3QtY2hpbGQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmF5LTUwKTsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRib2R5IHRkIHsgcGFkZGluZzogOXB4IDEwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1oYWlybGluZS1zb2Z0KTsgdGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRib2R5IHRkLmZjZmVhdCB7IHRleHQtYWxpZ246IGxlZnQ7IGNvbG9yOiB2YXIoLS1mZy1kZWZhdWx0KTsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRib2R5IHRkLmZjZmVhdCAuZmNsIHsgZGlzcGxheTogYmxvY2s7IH0KICAjcHctcGxhbmZpbmRlciB0YWJsZS5mY29tcGFyZSB0Ym9keSB0ZC5mY2ZlYXQgLmZjbW9kIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6ZTogMTFweDsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IG1hcmdpbi10b3A6IDFweDsgfQogICNwdy1wbGFuZmluZGVyIHRhYmxlLmZjb21wYXJlIHRib2R5IHRkLnJlYyB7IGJhY2tncm91bmQ6IHZhcigtLXRpbnQpOyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGJvZHkgdGQueWVzIHsgY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGJvZHkgdGQubm8geyBjb2xvcjogdmFyKC0tZGFuZ2VyKTsgfQogICNwdy1wbGFuZmluZGVyIC5tb2RhbC10YWJzIHsgZGlzcGxheTogZmxleDsgZ2FwOiA0cHg7IHBhZGRpbmc6IDAgMjRweDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWhhaXJsaW5lKTsgZmxleDogMCAwIGF1dG87IH0KICAjcHctcGxhbmZpbmRlciAubW9kYWwtdGFiIHsgYm9yZGVyOiAwOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBwYWRkaW5nOiAxMnB4IDE0cHg7IGN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWJvdHRvbTogMi41cHggc29saWQgdHJhbnNwYXJlbnQ7IG1hcmdpbi1ib3R0b206IC0xcHg7IHRyYW5zaXRpb246IGFsbCAuMTJzIGVhc2UtaW47IH0KICAjcHctcGxhbmZpbmRlciAubW9kYWwtdGFiOmhvdmVyIHsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KICAjcHctcGxhbmZpbmRlciAubW9kYWwtdGFiLm9uIHsgY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLXBpY2t3YXJlLTUwMCk7IH0KICAjcHctcGxhbmZpbmRlciAuZmNvbXBhcmUtaW50cm8geyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBtYXJnaW46IDE0cHggMCAxMHB4OyBsaW5lLWhlaWdodDogMS41OyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGhlYWQgdGgucGx1Z2luLWNvbCB7IGJhY2tncm91bmQ6IHZhcigtLWdyYXktNTApOyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGhlYWQgdGggLmZjc3ViIHsgZm9udC1zaXplOiAxMXB4OyBjb2xvcjogdmFyKC0tZmctc3VidGxlKTsgZm9udC13ZWlnaHQ6IDQwMDsgbWFyZ2luLXRvcDogMnB4OyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGJvZHkgdGQucGx1Z2luLWNvbCB7IGJhY2tncm91bmQ6IHZhcigtLWdyYXktNTApOyB9CiAgI3B3LXBsYW5maW5kZXIgdGFibGUuZmNvbXBhcmUgdGJvZHkgdGQucGx1Z2luLWNvbC55ZXMgeyBjb2xvcjogdmFyKC0tc3VjY2Vzcyk7IH0KICAjcHctcGxhbmZpbmRlciB0YWJsZS5mY29tcGFyZSB0Ym9keSB0ZC5wbHVnaW4tY29sLm5vIHsgY29sb3I6IHZhcigtLWRhbmdlcik7IH0KICAjcHctcGxhbmZpbmRlciB0YWJsZS5mY29tcGFyZSB0Ym9keSB0ZCAudmlhbW9kIHsgZm9udC1zaXplOiAxMC41cHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGNvbG9yOiB2YXIoLS1ncmF5LTYwMCk7IH0KICAjcHctcGxhbmZpbmRlciAubmV3dGFnIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDEwcHg7IGZvbnQtd2VpZ2h0OiA1MDA7IGxldHRlci1zcGFjaW5nOiAuM3B4OyBjb2xvcjogdmFyKC0tY3lhbi05MDApOyBiYWNrZ3JvdW5kOiB2YXIoLS1jeWFuLTUwMCk7IHBhZGRpbmc6IDJweCA4cHg7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1waWxsKTsgdmVydGljYWwtYWxpZ246IDFweDsgbWFyZ2luLWxlZnQ6IDdweDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQogICNwdy1wbGFuZmluZGVyIC5mY2xlZ2VuZCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiAxNHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiB2YXIoLS1mZy1zdWJ0bGUpOyBtYXJnaW46IDEycHggMCA0cHg7IH0KICAjcHctcGxhbmZpbmRlciAuZmNsZWdlbmQgLmljbiB7IHZlcnRpY2FsLWFsaWduOiAtM3B4OyB9CgogICNwdy1wbGFuZmluZGVyIC5jb21wYXJlLWN0YSB7IHRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOiAtNHB4IDAgMThweDsgfQogICNwdy1wbGFuZmluZGVyIC5jb21wYXJlLWN0YSBidXR0b24geyBiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IDA7IGNvbG9yOiB2YXIoLS1waWNrd2FyZS01MDApOyBmb250LXdlaWdodDogNTAwOyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IH0KICAjcHctcGxhbmZpbmRlciAuY29tcGFyZS1jdGEgYnV0dG9uOmhvdmVyIHsgY29sb3I6IHZhcigtLXBpY2t3YXJlLWhvdmVyKTsgfQoKICBAbWVkaWEgKG1heC13aWR0aDogNjQwcHgpIHsKICAgICNwdy1wbGFuZmluZGVyIC5jb21wYXJlIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTsgfQogICAgI3B3LXBsYW5maW5kZXIgLmNhcmQgeyBwYWRkaW5nOiAyMnB4IDE4cHg7IH0KICAgICNwdy1wbGFuZmluZGVyIC5icmFuZCAudGFnIHsgZGlzcGxheTogbm9uZTsgfQogICAgI3B3LXBsYW5maW5kZXIgLmJ0biB7IHBhZGRpbmc6IDAgMTZweDsgZm9udC1zaXplOiAxNXB4OyB9CiAgICAjcHctcGxhbmZpbmRlciAubW9kYWwtcGFuZWwgeyBtYXgtaGVpZ2h0OiA5MnZoOyB9CiAgICAjcHctcGxhbmZpbmRlciAubW9kYWwtaGVhZCB7IHBhZGRpbmc6IDE2cHggMThweDsgZmxleC13cmFwOiB3cmFwOyB9CiAgICAjcHctcGxhbmZpbmRlciAubW9kYWwtZmVhdGxpbmsgeyBmb250LXNpemU6IDEycHg7IHBhZGRpbmc6IDZweCAxMHB4OyB9CiAgICAjcHctcGxhbmZpbmRlciAuZmNvbXBhcmUtc2Nyb2xsIHsgcGFkZGluZzogNHB4IDE4cHggMThweDsgfQogIH0KCi8qIC0tLSBFaW5iZXR0dW5nIHBpY2t3YXJlLmNvbSAtLS0gKi8KI3B3LXBsYW5maW5kZXIgeyBzY3JvbGwtbWFyZ2luLXRvcDogOTBweDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IH0KI3B3LXBsYW5maW5kZXIgLndyYXAgeyBtYXgtd2lkdGg6IDkyMHB4OyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMCAyMHB4OyB9CgovKiAtLS0gQW5wYXNzdW5nZW4gV29yZFByZXNzLVNlaXRlIC0tLSAqLwojcHctcGxhbmZpbmRlciB7IGJhY2tncm91bmQ6ICNmZmY7IG1hcmdpbjogMCAwIDU2cHg7IH0KI3B3LXBsYW5maW5kZXIgI3B3cGYtaGVybyB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQo8L3N0eWxlPgoKPGRpdiBpZD0icHctcGxhbmZpbmRlciIgY2xhc3M9InB3LXBsYW5maW5kZXIiPgogIDxkaXYgY2xhc3M9IndyYXAiPgogICAgCiAgICA8ZGl2IGNsYXNzPSJoZXJvIiBpZD0icHdwZi1oZXJvIj4KICAgICAgPGgyPldlbGNoZXIgUGlja3dhcmUtUGxhbiBwYXNzdCB6dSA8c3BhbiBjbGFzcz0iaGwiPmRlaW5lbSBCdXNpbmVzczwvc3Bhbj4\/PC9oMj4KICAgICAgPHA+QmVhbnR3b3J0ZSBlaW4gcGFhciBrdXJ6ZSBGcmFnZW4genUgZGVpbmVuIFByb3plc3NlbiB1bmQgZGVpbmVtIEJlc3RlbGx2b2x1bWVuIOKAkyB3aXIgZW1wZmVobGVuIGRpciBkZW4gcGFzc2VuZGVuIFBsYW4gdW5kIHplaWdlbiBkaXIgdHJhbnNwYXJlbnQsIHdhcyBlciBrb3N0ZXQuPC9wPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MiIGlkPSJwd3BmLXByb2dyZXNzIj48L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJjYXJkIiBpZD0icHdwZi1jYXJkIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+\");var s=document.createElement(\"script\");s.text=d(\"CihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwogIGZ1bmN0aW9uIHB3UGxhbmZpbmRlckluaXQoKSB7CiAgICBjb25zdCBQUk9QUyA9IHt9OwogICAgbGV0IHB3cGZCb290ZWQgPSBmYWxzZTsKICAgIGNvbnN0IFNBTEVTX1BIT05FID0gUFJPUFMuc2FsZXNQaG9uZSB8fCAnKzQ5IDYxNTEgNjI5IDMwIDQwJzsKICAgIGNvbnN0IFNBTEVTX0VNQUlMID0gUFJPUFMuc2FsZXNFbWFpbCB8fCAnc2FsZXNAcGlja3dhcmUuZGUnOwogICAgY29uc3QgU0FMRVNfVEVMID0gU0FMRVNfUEhPTkUucmVwbGFjZSgvW14rXGRdL2csICcnKTsKICAgIGNvbnN0IERFRkFVTFRfQklMTElORyA9IFBST1BTLmRlZmF1bHRCaWxsaW5nID09PSAnbW9udGhseScgPyAnbW9udGhseScgOiAneWVhcmx5JzsKCiAgICBjb25zdCBJQ09OX1BBVEhTID0gewogICAgICBwYWNrYWdlOiAnPHBhdGggZD0iTTExIDIxLjczYTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzN6Ii8+PHBhdGggZD0iTTEyIDIyVjEyIi8+PHBhdGggZD0ibTMuMyA3IDguNyA1IDguNy01Ii8+PHBhdGggZD0ibTcuNSA0LjI3IDkgNS4xNSIvPicsCiAgICAgIHRhZzogJzxwYXRoIGQ9Ik0xMi41ODYgMi41ODZBMiAyIDAgMCAwIDExLjE3MiAySDRhMiAyIDAgMCAwLTIgMnY3LjE3MmEyIDIgMCAwIDAgLjU4NiAxLjQxNGw4LjcwNCA4LjcwNGEyLjQyNiAyLjQyNiAwIDAgMCAzLjQyIDBsNi41OC02LjU4YTIuNDI2IDIuNDI2IDAgMCAwIDAtMy40MnoiLz48Y2lyY2xlIGN4PSI3LjUiIGN5PSI3LjUiIHI9Ii41IiBmaWxsPSJjdXJyZW50Q29sb3IiLz4nLAogICAgICBjYXJ0OiAnPGNpcmNsZSBjeD0iOCIgY3k9IjIxIiByPSIxIi8+PGNpcmNsZSBjeD0iMTkiIGN5PSIyMSIgcj0iMSIvPjxwYXRoIGQ9Ik0yLjA1IDIuMDVoMmwyLjY2IDEyLjQyYTIgMiAwIDAgMCAyIDEuNThoOS43OGEyIDIgMCAwIDAgMS45NS0xLjU3bDEuNjUtNy40M0g1LjEyIi8+JywKICAgICAgZmlsZTogJzxwYXRoIGQ9Ik0xNSAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN3oiLz48cGF0aCBkPSJNMTQgMnY0YTIgMiAwIDAgMCAyIDJoNCIvPjxwYXRoIGQ9Ik0xNiAxM0g4Ii8+PHBhdGggZD0iTTE2IDE3SDgiLz48cGF0aCBkPSJNMTAgOUg4Ii8+JywKICAgICAgdHJ1Y2s6ICc8cGF0aCBkPSJNMTQgMThWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMWExIDEgMCAwIDAgMSAxaDIiLz48cGF0aCBkPSJNMTUgMThIOSIvPjxwYXRoIGQ9Ik0xOSAxOGgyYTEgMSAwIDAgMCAxLTF2LTMuNjVhMSAxIDAgMCAwLS4yMi0uNjJsLTMuNDgtNC4zNUExIDEgMCAwIDAgMTcuNTIgOEgxNCIvPjxjaXJjbGUgY3g9IjE3IiBjeT0iMTgiIHI9IjIiLz48Y2lyY2xlIGN4PSI3IiBjeT0iMTgiIHI9IjIiLz4nLAogICAgICBjaGFydDogJzxwYXRoIGQ9Ik0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIvPjxwYXRoIGQ9Ik0xOCAxN1Y5Ii8+PHBhdGggZD0iTTEzIDE3VjUiLz48cGF0aCBkPSJNOCAxN3YtMyIvPicsCiAgICAgIGdlYXI6ICc8cGF0aCBkPSJNMTIuMjIgMmgtLjQ0YTIgMiAwIDAgMC0yIDJ2LjE4YTIgMiAwIDAgMS0xIDEuNzNsLS40My4yNWEyIDIgMCAwIDEtMiAwbC0uMTUtLjA4YTIgMiAwIDAgMC0yLjczLjczbC0uMjIuMzhhMiAyIDAgMCAwIC43MyAyLjczbC4xNS4xYTIgMiAwIDAgMSAxIDEuNzJ2LjUxYTIgMiAwIDAgMS0xIDEuNzRsLS4xNS4wOWEyIDIgMCAwIDAtLjczIDIuNzNsLjIyLjM4YTIgMiAwIDAgMCAyLjczLjczbC4xNS0uMDhhMiAyIDAgMCAxIDIgMGwuNDMuMjVhMiAyIDAgMCAxIDEgMS43M1YyMGEyIDIgMCAwIDAgMiAyaC40NGEyIDIgMCAwIDAgMi0ydi0uMThhMiAyIDAgMCAxIDEtMS43M2wuNDMtLjI1YTIgMiAwIDAgMSAyIDBsLjE1LjA4YTIgMiAwIDAgMCAyLjczLS43M2wuMjItLjM5YTIgMiAwIDAgMC0uNzMtMi43M2wtLjE1LS4wOGEyIDIgMCAwIDEtMS0xLjc0di0uNWEyIDIgMCAwIDEgMS0xLjc0bC4xNS0uMDlhMiAyIDAgMCAwIC43My0yLjczbC0uMjItLjM4YTIgMiAwIDAgMC0yLjczLS43M2wtLjE1LjA4YTIgMiAwIDAgMS0yIDBsLS40My0uMjVhMiAyIDAgMCAxLTEtMS43M1Y0YTIgMiAwIDAgMC0yLTJ6Ii8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMyIvPicsCiAgICAgIHphcDogJzxwYXRoIGQ9Ik00IDE0YTEgMSAwIDAgMS0uNzgtMS42M2w5LjktMTAuMmEuNS41IDAgMCAxIC44Ni40NmwtMS45MiA2LjAyQTEgMSAwIDAgMCAxMyAxMGg3YTEgMSAwIDAgMSAuNzggMS42M2wtOS45IDEwLjJhLjUuNSAwIDAgMS0uODYtLjQ2bDEuOTItNi4wMkExIDEgMCAwIDAgMTEgMTR6Ii8+JywKICAgICAgc3RvcmU6ICc8cGF0aCBkPSJtMiA3IDQuNDEtNC40MUEyIDIgMCAwIDEgNy44MyAyaDguMzRhMiAyIDAgMCAxIDEuNDIuNTlMMjIgNyIvPjxwYXRoIGQ9Ik00IDEydjhhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi04Ii8+PHBhdGggZD0iTTE1IDIydi00YTIgMiAwIDAgMC0yLTJoLTJhMiAyIDAgMCAwLTIgMnY0Ii8+PHBhdGggZD0iTTIgN2gyMCIvPjxwYXRoIGQ9Ik0yMiA3djNhMiAyIDAgMCAxLTIgMiAyLjcgMi43IDAgMCAxLTEuNTktLjYzLjcuNyAwIDAgMC0uODIgMEEyLjcgMi43IDAgMCAxIDE2IDEyYTIuNyAyLjcgMCAwIDEtMS41OS0uNjMuNy43IDAgMCAwLS44MiAwQTIuNyAyLjcgMCAwIDEgMTIgMTJhMi43IDIuNyAwIDAgMS0xLjU5LS42My43LjcgMCAwIDAtLjgyIDBBMi43IDIuNyAwIDAgMSA4IDEyYTIuNyAyLjcgMCAwIDEtMS41OS0uNjMuNy43IDAgMCAwLS44MiAwQTIuNyAyLjcgMCAwIDEgNCAxMmEyIDIgMCAwIDEtMi0yVjciLz4nLAogICAgICByb2NrZXQ6ICc8cGF0aCBkPSJNNC41IDE2LjVjLTEuNSAxLjI2LTIgNS0yIDVzMy43NC0uNSA1LTJjLjcxLS44NC43LTIuMTMtLjA5LTIuOTFhMi4xOCAyLjE4IDAgMCAwLTIuOTEtLjA5eiIvPjxwYXRoIGQ9Im0xMiAxNS0zLTNhMjIgMjIgMCAwIDEgMi0zLjk1QTEyLjg4IDEyLjg4IDAgMCAxIDIyIDJjMCAyLjcyLS43OCA3LjUtNiAxMWEyMi4zNSAyMi4zNSAwIDAgMS00IDJ6Ii8+PHBhdGggZD0iTTkgMTJINHMuNTUtMy4wMyAyLTRjMS42Mi0xLjA4IDUgMCA1IDAiLz48cGF0aCBkPSJNMTIgMTV2NXMzLjAzLS41NSA0LTJjMS4wOC0xLjYyIDAtNSAwLTUiLz4nLAogICAgICByZWZyZXNoOiAnPHBhdGggZD0iTTMgMTJhOSA5IDAgMCAxIDktOSA5Ljc1IDkuNzUgMCAwIDEgNi43NCAyLjc0TDIxIDgiLz48cGF0aCBkPSJNMjEgM3Y1aC01Ii8+PHBhdGggZD0iTTIxIDEyYTkgOSAwIDAgMS05IDkgOS43NSA5Ljc1IDAgMCAxLTYuNzQtMi43NEwzIDE2Ii8+PHBhdGggZD0iTTggMTZIM3Y1Ii8+JywKICAgICAgYnVsYjogJzxwYXRoIGQ9Ik0xNSAxNGMuMi0xIC43LTEuNyAxLjUtMi41IDEtLjkgMS41LTIuMiAxLjUtMy41QTYgNiAwIDAgMCA2IDhjMCAxIC4yIDIuMiAxLjUgMy41LjcuNyAxLjMgMS41IDEuNSAyLjUiLz48cGF0aCBkPSJNOSAxOGg2Ii8+PHBhdGggZD0iTTEwIDIyaDQiLz4nLAogICAgICBjaGVjazogJzxwYXRoIGQ9Ik0yMCA2IDkgMTdsLTUtNSIvPicsCiAgICAgIHg6ICc8cGF0aCBkPSJNMTggNiA2IDE4Ii8+PHBhdGggZD0ibTYgNiAxMiAxMiIvPicsCiAgICAgIGluZm86ICc8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik0xMiAxNnYtNCIvPjxwYXRoIGQ9Ik0xMiA4aC4wMSIvPicsCiAgICAgIGlkb3Q6ICc8cGF0aCBkPSJNMTIgMTZ2LTQiLz48cGF0aCBkPSJNMTIgOGguMDEiLz4nLAogICAgICBzdGFyOiAnPHBhdGggZD0iTTExLjUyNSAyLjI5NWEuNTMuNTMgMCAwIDEgLjk1IDBsMi4zMSA0LjY3OWEyLjEyIDIuMTIgMCAwIDAgMS41OTUgMS4xNmw1LjE2Ni43NTZhLjUzLjUzIDAgMCAxIC4yOTQuOTA0bC0zLjczNiAzLjYzOGEyLjEyIDIuMTIgMCAwIDAtLjYxMSAxLjg3OGwuODgyIDUuMTRhLjUzLjUzIDAgMCAxLS43NzEuNTZsLTQuNjE4LTIuNDI4YTIuMTIgMi4xMiAwIDAgMC0xLjk3MyAwTDYuMzk2IDIxLjAxYS41My41MyAwIDAgMS0uNzctLjU2bC44ODEtNS4xMzlhMi4xMiAyLjEyIDAgMCAwLS42MTEtMS44NzlMMi4xNiA5Ljc5NWEuNTMuNTMgMCAwIDEgLjI5NC0uOTA2bDUuMTY1LS43NTVhMi4xMiAyLjEyIDAgMCAwIDEuNTk3LTEuMTZ6Ii8+JywKICAgICAgbG9jazogJzxyZWN0IHdpZHRoPSIxOCIgaGVpZ2h0PSIxMSIgeD0iMyIgeT0iMTEiIHJ4PSIyIiByeT0iMiIvPjxwYXRoIGQ9Ik03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCIvPicsCiAgICAgIHBob25lOiAnPHBhdGggZD0iTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6Ii8+JywKICAgICAgbWFpbDogJzxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIxNiIgeD0iMiIgeT0iNCIgcng9IjIiLz48cGF0aCBkPSJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIvPicsCiAgICB9OwogICAgZnVuY3Rpb24gSUNPTihuYW1lLCB7IHNpemUgPSAxOCwgc3Ryb2tlID0gMiwgY2xzID0gJycsIGZpbGwgPSAnbm9uZScgfSA9IHt9KSB7CiAgICAgIHJldHVybiBgPHN2ZyBjbGFzcz0iaWNuICR7Y2xzfSIgd2lkdGg9IiR7c2l6ZX0iIGhlaWdodD0iJHtzaXplfSIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIke2ZpbGx9IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIke3N0cm9rZX0iIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPiR7SUNPTl9QQVRIU1tuYW1lXSB8fCAnJ308L3N2Zz5gOwogICAgfQogICAgY29uc3QgQ0hFQ0sgPSBJQ09OKCdjaGVjaycsIHsgc2l6ZTogMTMsIHN0cm9rZTogMyB9KTsKICAgIGNvbnN0IFhJQ09OID0gSUNPTigneCcsIHsgc2l6ZTogMTMsIHN0cm9rZTogMyB9KTsKCiAgICBjb25zdCBQTEFOX09SREVSID0gWydzdGFydGVyJywgJ2FkdmFuY2VkJywgJ3Byb2Zlc3Npb25hbCcsICdlbnRlcnByaXNlJ107CgogICAgY29uc3QgUExBTlMgPSB7CiAgICAgIHN0YXJ0ZXI6ICAgICAgeyBsYWJlbDogJ1N0YXJ0ZXInLCAgICAgIG1vbnRobHk6IDk5LCAgeWVhcmx5OiA4OSwgIGluY2x1ZGVkT3JkZXJzOiAxMDAwLCBvcmRlckZlZTogMC4yMCwgc2hvcHM6IDEgfSwKICAgICAgYWR2YW5jZWQ6ICAgICB7IGxhYmVsOiAnQWR2YW5jZWQnLCAgICAgbW9udGhseTogMjk5LCB5ZWFybHk6IDI2OSwgaW5jbHVkZWRPcmRlcnM6IDE1MDAsIG9yZGVyRmVlOiAwLjE1LCBzaG9wczogMSB9LAogICAgICBwcm9mZXNzaW9uYWw6IHsgbGFiZWw6ICdQcm9mZXNzaW9uYWwnLCBtb250aGx5OiA1OTksIHllYXJseTogNTM5LCBpbmNsdWRlZE9yZGVyczogMjAwMCwgb3JkZXJGZWU6IDAuMTUsIHNob3BzOiA0IH0sCiAgICAgIGVudGVycHJpc2U6ICAgeyBsYWJlbDogJ0VudGVycHJpc2UnLCAgIG1vbnRobHk6IG51bGwsIHllYXJseTogbnVsbCwgaW5jbHVkZWRPcmRlcnM6IEluZmluaXR5LCBvcmRlckZlZTogMCwgc2hvcHM6IEluZmluaXR5IH0sCiAgICB9OwoKICAgIGNvbnN0IE1PRFVMRVMgPSB7CiAgICAgIHdtczogeyBsYWJlbDogJ1BpY2t3YXJlIFdNUycsIHVuaXQ6ICdHZXLDpHQnLCAgbW9udGhseTogMTk5LCB5ZWFybHk6IDE3OSB9LAogICAgICBwb3M6IHsgbGFiZWw6ICdQaWNrd2FyZSBQT1MnLCB1bml0OiAnTGl6ZW56JywgbW9udGhseTogMTQ5LCB5ZWFybHk6IDEzNCB9LAogICAgfTsKCiAgICBjb25zdCBGRUFUVVJFX0dST1VQUyA9IFsKICAgICAgeyBpZDogJ2tvbW0nLCB0aXRsZTogJ0tvbW1pc3Npb25pZXJ1bmcgJiBWZXJzYW5kcHJvemVzcycsIGljb246ICdwYWNrYWdlJywgZmVhdHVyZXM6IFsKICAgICAgICB7IGlkOiAnd21zLXNoaXBwaW5nJywgICBsYWJlbDogJ01vYmlsZXMgS29tbWlzc2lvbmllcmVuICYgVmVyc2FuZCBwZXIgV01TLUFwcCcsIGhpbnQ6ICdQaWNrZW4sIHBhY2tlbiB1bmQgVmVyc2FuZGxhYmVsIGRpcmVrdCBhbSBTY2FubmVyL0hhbmR5JywgbWluUGxhbjogJ2FkdmFuY2VkJywgcmVxdWlyZXNXbXNNb2R1bGU6IHRydWUgfSwKICAgICAgICB7IGlkOiAncGFja2luZy1zdGF0aW9uJywgbGFiZWw6ICdQYWNrdGlzY2gnLCBoaW50OiAnUGFja2UgQmVzdGVsbHVuZ2VuIGFtIGZlc3RlbiBQYWNrcGxhdHo6IEFydGlrZWwgcGVyIFNjYW4gcHLDvGZlbiwgUGFja2Fud2Vpc3VuZ2VuIGplIFByb2R1a3QgJiBCZXN0ZWxsdW5nIHNlaGVuIHVuZCBWZXJzYW5kbGFiZWwgZGlyZWt0IGVyc3RlbGxlbicsIG1pblBsYW46ICdhZHZhbmNlZCcsIHJlcXVpcmVzV21zTW9kdWxlOiB0cnVlIH0sCiAgICAgICAgeyBpZDogJ2Jpbi1wcmlvcml0eScsICAgbGFiZWw6ICdMYWdlcnBsYXR6LVByaW9yaXNpZXJ1bmcnLCBoaW50OiAnUHJpb3Jpc2llcmUgTGFnZXJwbMOkdHplIGbDvHIgZWluZSBpbmRpdmlkdWVsbGUgS29tbWlzc2lvbmllcnVuZycsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGlkOiAnYmF0Y2gtcGlja2luZycsICBsYWJlbDogJ0JhdGNoLSAvIG1laHJzdHVmaWdlcyBQaWNraW5nJywgaGludDogJ0JlYXJiZWl0ZSBtZWhyZXJlIEJlc3RlbGx1bmdlbiBpbiBlaW5lbSBEdXJjaGdhbmcnLCBtaW5QbGFuOiAnYWR2YW5jZWQnLCByZXF1aXJlc1dtc01vZHVsZTogdHJ1ZSB9LAogICAgICAgIHsgaWQ6ICdwaWNraW5nLXByb2ZpbGVzJywgIGxhYmVsOiAnUGlja3Byb2ZpbGUnLCBoaW50OiAnUHJpb3Jpc2llcmUgdW5kIGZpbHRlcmUgb2ZmZW5lIEJlc3RlbGx1bmdlbiBhbmhhbmQgdm9uIFByb2R1a3QtICYgS3VuZGVuZGF0ZW4nLCBtaW5QbGFuOiAnYWR2YW5jZWQnLCByZXF1aXJlc1dtc01vZHVsZTogdHJ1ZSB9LAogICAgICAgIHsgaWQ6ICdzaW5nbGUtaXRlbScsICAgIGxhYmVsOiAnRWlucMO2c3Rlci1Lb21taXNzaW9uaWVydW5nIChTaW5nbGUtSXRlbS1QaWNraW5nKScsIGhpbnQ6ICdQaWNrZSBCZXN0ZWxsdW5nZW4gbWl0IG51ciBlaW5lciBQb3NpdGlvbiBiZXNvbmRlcnMgZWZmaXppZW50JywgbWluUGxhbjogJ2FkdmFuY2VkJywgcmVxdWlyZXNXbXNNb2R1bGU6IHRydWUgfSwKICAgICAgICB7IGlkOiAncGlja2luZy1kYXNoJywgICBsYWJlbDogJ1BpY2tpbmctRGFzaGJvYXJkJywgaGludDogJ0RldGFpbGxpZXJ0ZSBQaWNrYXVzd2VydHVuZ2VuIGbDvHIgbWF4aW1hbGUgVHJhbnNwYXJlbnogdW5kIFZlcmdsZWljaGJhcmtlaXQnLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJyB9LAogICAgICAgIHsgaWQ6ICd3bXMtcHJpdmlsZWdlcycsIGxhYmVsOiAnRGV0YWlsbGllcnRlcyBXTVMtUmVjaHRlbWFuYWdlbWVudCcsIGhpbnQ6ICdFcnN0ZWxsZSBlcndlaXRlcnRlIEJlbnV0emVycm9sbGVuIHVtIGJlc3RpbW10ZSBXb3JrZmxvd3MgYW0gV01TIG51ciBmw7xyIGVpbnplbG5lIE51dHplciB6dSBlcmxhdWJlbicsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnLCByZXF1aXJlc1dtc01vZHVsZTogdHJ1ZSB9LAogICAgICAgIHsgaWQ6ICdkb2MtZXh0cmEnLCAgICAgIGxhYmVsOiAnSW5kaXZpZHVlbGxlciBEb2t1bWVudGVuZHJ1Y2snLCBoaW50OiAnQmVzdGltbWUgamUgVmVyc2FuZGFydCwgd2VsY2hlIHp1c8OkdHpsaWNoZW4gRG9rdW1lbnRlIG5lYmVuIFJlY2hudW5nICYgTGllZmVyc2NoZWluIHfDpGhyZW5kIGRlciBLb21taXNzaW9uaWVydW5nIGdlZHJ1Y2t0IHdlcmRlbiBzb2xsZW4nLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJywgcmVxdWlyZXNXbXNNb2R1bGU6IHRydWUgfSwKICAgICAgICB7IGlkOiAncmVsb2NhdGUnLCAgICAgICBsYWJlbDogJ0dhbnplbiBMYWdlcnBsYXR6IHVtbGFnZXJuJywgaGludDogJ0xhZ2VyZSBkZW4gZ2VzYW10ZW4gQmVzdGFuZCBkZXMgTGFnZXJwbGF0emVzIGFtIFdNUyBtaXQgbnVyIGVpbmVtIEtsaWNrIHVtJywgbWluUGxhbjogJ2FkdmFuY2VkJywgcmVxdWlyZXNXbXNNb2R1bGU6IHRydWUgfSwKICAgICAgXX0sCiAgICAgIHsgaWQ6ICdsYWdlcicsIHRpdGxlOiAnTGFnZXIgJiBCZXN0YW5kJywgaWNvbjogJ3RhZycsIGZlYXR1cmVzOiBbCiAgICAgICAgeyBpZDogJ3N0b2NrLW1nbXQnLCAgICAgbGFiZWw6ICdCZXN0YW5kc2bDvGhydW5nJywgaGludDogJ1ZlcndhbHRlIHVuZCBkb2t1bWVudGllcmUgZGVpbmVuIEJlc3RhbmQgdW5kIGRlc3NlbiBIaXN0b3JpZScsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgaWQ6ICdzdG9jay10YWtpbmcnLCAgICAgbGFiZWw6ICdJbnZlbnR1cicsIGhpbnQ6ICdGw7xocmUgenUgYmVsaWViaWdlbiBaZWl0cHVua3RlbiByZWNodHNrb25mb3JtZSBJbnZlbnR1cmVuIGluIGRlciBBZG1pbiBkdXJjaCcsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgaWQ6ICdiYXRjaC1tZ210JywgICAgIGxhYmVsOiAnTUhEIHVuZCBDaGFyZ2VudmVyd2FsdHVuZycsIGhpbnQ6ICdDaGFyZ2VubnVtbWVybiAmIE1pbmRlc3RoYWx0YmFya2VpdHNkYXRlbiBmw7xocmVuJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgaWQ6ICdnci1leHRyYScsICAgICAgIGxhYmVsOiAnWnVzw6R0emxpY2hlIEluZm9ybWF0aW9uZW4gYW4gV2FyZW5laW5nw6RuZ2VuJywgaGludDogJ0bDvGdlIFdhcmVuZWluZ8OkbmdlbiBGb3RvcywgZXh0ZXJuZSBEb2t1bWVudGUgb2RlciBLb21tZW50YXJlIGhpbnp1JywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgaWQ6ICdzdG9jay1ibG9ja2luZycsIGxhYmVsOiAnQmVzdGFuZCBhbHMgbmljaHQtdmVya8OkdWZsaWNoIG1hcmtpZXJlbicsIGhpbnQ6ICdMYWdlciB2b20gT25saW5ldmVya2F1ZiBhdXNuZWhtZW4nLCBtaW5QbGFuOiAnYWR2YW5jZWQnIH0sCiAgICAgICAgeyBpZDogJ3N0ZC13YXJlaG91c2UnLCBsYWJlbDogJ1N0YW5kYXJkbGFnZXInLCBoaW50OiAnVmVyd2VuZGUgbWFya2llcnRlIExhZ2VyIHN0YW5kYXJkbcOkw59pZyBmw7xyIGRlbiBWZXJzYW5kIG9kZXIgV2FyZW5laW5nYW5nc3Byb3plc3NlJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgaWQ6ICdtYXgtc3RvY2snLCBsYWJlbDogJ01lbGRlLSAmIE1heGltYWxiZXN0YW5kIGplIFByb2R1a3QsIExhZ2VycGxhdHogJiBMYWdlcicsIGhpbnQ6ICdQZmxlZ2UgTWF4aW1hbGJlc3TDpG5kZSB1bmQgbGFzcyBkaXIgZXJmb3JkZXJsaWNoZSBOYWNoc2NodWJtZW5nZW4gaW4gZGVyIEJlc3RhbmRzw7xiZXJzaWNodCBhbnplaWdlbicsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGlkOiAnbGFiZWwtZWRpdG9yJywgbGFiZWw6ICdFdGlrZXR0ZW4tRWRpdG9yJywgaGludDogJ0dlc3RhbHRlIGVpZ2VuZSBWb3JsYWdlbiBmw7xyIFByb2R1a3RldGlrZXR0ZW4g4oCTIHouIEIuIG1pdCBIZXJzdGVsbGVyLCBHcnVuZHByZWlzLCBTdHJlaWNocHJlaXMgb2RlciBIZXJzdGVsbGVybG9nbycsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgXX0sCiAgICAgIHsgaWQ6ICdlaW5rYXVmJywgdGl0bGU6ICdFaW5rYXVmJywgaWNvbjogJ2NhcnQnLCBmZWF0dXJlczogWwogICAgICAgIHsgaWQ6ICdzdXBwbGllci1vcmRlcnMnLCAgbGFiZWw6ICdMaWVmZXJhbnRlbmJlc3RlbGx1bmdlbiAmIEJlZGFyZnNwbGFudW5nJywgaGludDogJ0VpbmthdWYgc3RldWVybiB1bmQgYXV0b21hdGlzY2ggcGxhbmVuJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgaWQ6ICdtdWx0aS1zdXBwbGllcicsICAgbGFiZWw6ICdNZWhyZXJlIExpZWZlcmFudGVuIHBybyBQcm9kdWt0JywgaGludDogJ1BybyBMaWVmZXJhbnQga8O2bm5lbiB1LiBhLiBhYndlaWNoZW5kZSBFaW5rYXVmc3ByZWlzZSBoaW50ZXJsZWd0IHdlcmRlbicsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGlkOiAncHVyY2hhc2UtaW1wZXhwJywgIGxhYmVsOiAnSW1wb3J0L0V4cG9ydCBFaW5rYXVmc2xpc3RlICYgTGllZmVyYW50ZW5iZXN0ZWxscG9zaXRpb25lbicsIGhpbnQ6ICdNYXNzZW4tSW1wb3J0IHBlciBDU1YnLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJyB9LAogICAgICBdfSwKICAgICAgeyBpZDogJ3ZlcmthdWYnLCB0aXRsZTogJ1ZlcmthdWYgJiBSZXRvdXJlbicsIGljb246ICdmaWxlJywgZmVhdHVyZXM6IFsKICAgICAgICB7IGlkOiAnYnVuZGxlcycsICAgIGxhYmVsOiAnU3TDvGNrbGlzdGVuICYgQnVuZGxlcycsIGhpbnQ6ICdTZXRzIGF1cyBtZWhyZXJlbiBQcm9kdWt0ZW4gdmVya2F1ZmVuJywgbWluUGxhbjogJ2FkdmFuY2VkJywgcGxhdGZvcm06ICdzaG9wd2FyZTYnIH0sCiAgICAgICAgeyBpZDogJ3F1b3RlcycsICAgICBsYWJlbDogJ0FuZ2Vib3RlIGVyc3RlbGxlbicsIGhpbnQ6ICdBbmdlYm90ZSBzY2hyZWliZW4gdW5kIGluIEJlc3RlbGx1bmdlbiB3YW5kZWxuJywgbWluUGxhbjogJ3Byb2Zlc3Npb25hbCcgfSwKICAgICAgICB7IGlkOiAnb3Atc3RyaXAnLCAgIGxhYmVsOiAnSW50ZWdyaWVydGUgS1BJLURhc2hib2FyZHMnLCBoaW50OiAnS1BJLcOcYmVyc2ljaHQgZGlyZWt0IGluIGRlciBCZXN0ZWxsLSAmIFJldG91cmVuw7xiZXJzaWNodCcsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgIF19LAogICAgICB7IGlkOiAndmVyc2FuZCcsIHRpdGxlOiAnVmVyc2FuZCcsIGljb246ICd0cnVjaycsIGZlYXR1cmVzOiBbCiAgICAgICAgeyBpZDogJ3N0ZC1zaGlwcGluZycsICAgbGFiZWw6ICdWZXJzYW5kaW50ZWdyYXRpb25lbicsIGhpbnQ6ICdFcnN0ZWxsZSBWZXJzYW5kZXRpa2V0dGVuIG9obmUgVW13ZWdlIGRpcmVrdCBpbiBQaWNrd2FyZScsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgaWQ6ICdzZW5kY2xvdWQnLCAgICAgIGxhYmVsOiAnU2VuZGNsb3VkLUludGVncmF0aW9uJywgaGludDogJ0JpbmRlIHp1c8OkdHpsaWNoZSBWZXJzYW5kZGllbnN0bGVpc3RlciBtaXQgdW5zZXJlbSBQYXJ0bmVyIFNlbmRjbG91ZCBhbicsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGlkOiAnZmVkZXgnLCAgICAgICAgICBsYWJlbDogJ0ZlZEV4LUludGVncmF0aW9uJywgaGludDogJ1ZlcnNhbmQtICYgUmV0b3VyZW5ldGlrZXR0ZW4sIFNlbmR1bmdzdmVyZm9sZ3VuZyB1bmQgRHJpdHRsYW5kdmVyc2FuZCBtaXQgRmVkRXgnLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJywgcGxhdGZvcm06ICdzaG9waWZ5JyB9LAogICAgICAgIHsgaWQ6ICdkc3YtZ28nLCAgICAgICAgIGxhYmVsOiAnRFNWIC8gR08hIEV4cHJlc3MnLCBoaW50OiAnWnVzw6R0emxpY2hlIFNwZWRpdGlvbnMtSW50ZWdyYXRpb25lbicsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgICAgeyBpZDogJ2N1c3RvbS1zaGlwcGluZycsbGFiZWw6ICdFaWdlbmUgVmVyc2FuZGludGVncmF0aW9uJywgaGludDogJ0FuYmluZHVuZyBlaW5lcyBlaWdlbmVuIENhcnJpZXJzJywgbWluUGxhbjogJ2VudGVycHJpc2UnIH0sCiAgICAgIF19LAogICAgICB7IGlkOiAnYnVjaGhhbHR1bmcnLCB0aXRsZTogJ0J1Y2hoYWx0dW5nJywgaWNvbjogJ2NoYXJ0JywgZmVhdHVyZXM6IFsKICAgICAgICB7IGlkOiAnc3RvY2stdmFsdWF0aW9uJywgbGFiZWw6ICdCZXN0YW5kc2Jld2VydHVuZycsIGhpbnQ6ICdCZXdlcnRlIGRlaW5lbiBXYXJlbmJlc3RhbmQgYW5oYW5kIHZvbiBMaUZvLCBGaUZvIHVuZCBnZXdvZ2VuZW0gRHVyY2hzY2huaXR0JywgbWluUGxhbjogJ3N0YXJ0ZXInIH0sCiAgICAgICAgeyBpZDogJ2RhdGV2JywgbGFiZWw6ICdEQVRFVi1BbmJpbmR1bmcnLCBoaW50OiAnRXhwb3J0aWVyZSBGb3JkZXJ1bmdlbiB1bmQgWmFobHVuZ2VuIGltIERBVEVWLUZvcm1hdCcsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGlkOiAnZGF0ZXYta29uZmlndXJhdGlvbicsIGxhYmVsOiAnQnVjaGhhbHR1bmdzLUtvbmZpZ3VyYXRpb24nLCBoaW50OiAnS29uZmlndXJpZXJlIEtvbnRpZXJ1bmdzcmFobWVuLCBCdWNodW5nc2tyZWlzZSwgS29zdGVuc3RlbGxlbiB1dm0uJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICBdfSwKICAgICAgeyBpZDogJ3ZlcndhbHR1bmcnLCB0aXRsZTogJ1ZlcndhbHR1bmcgJiBBdXRvbWF0aXNpZXJ1bmcnLCBpY29uOiAnZ2VhcicsIGZlYXR1cmVzOiBbCiAgICAgICAgeyBpZDogJ2FpLWNoYXQnLCAgICAgIGxhYmVsOiAnUGlja3dhcmUgQUknLCBoaW50OiAnRnJhZyBkZW4gQ2hhdC1Bc3Npc3RlbnRlbiBpbiBkZXIgQWRtaW4gbmFjaCBkZWluZW4gRGF0ZW4sIGxhc3MgTGlzdGVuIGZpbHRlcm4gb2RlciBEYXRlaWVuIGF1c3dlcnRlbiDigJMgaW5rbC4gQ2hhdC1WZXJsYXVmJywgbWluUGxhbjogJ3N0YXJ0ZXInIH0sCiAgICAgICAgeyBpZDogJ2FwaS1hY2Nlc3MnLCAgIGxhYmVsOiAnQVBJLVp1Z3JpZmYnLCBoaW50OiAnRWlnZW5lIFNjaG5pdHRzdGVsbGVuICYgQW5iaW5kdW5nZW4gw7xiZXIgZGllIFBpY2t3YXJlIEdyYXBoUUwtQVBpJywgbWluUGxhbjogJ3Byb2Zlc3Npb25hbCcgfSwKICAgICAgICB7IGlkOiAnZmxvdycsICAgICAgICAgbGFiZWw6ICdBdXRvbWF0aXNpZXJ1bmdlbiBwZXIgRmxvdycsIGhpbnQ6ICdBdXRvbWF0aXNpZXJlIFByb3plc3NlIGluIFBpY2t3YXJlIG1pdHRlbHMgRmxvd3MnLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJywgcGxhdGZvcm06ICdzaG9waWZ5JyB9LAogICAgICAgIHsgaWQ6ICdkb2MtbGF5b3V0JywgICBsYWJlbDogJ0Rva3VtZW50ZW5lZGl0b3InLCBoaW50OiAnR2VzdGFsdGUgUmVjaG51bmdlbiwgTGllZmVyc2NoZWluZSAmIFBpY2tsaXN0ZW4gZGlyZWt0IGluIFBpY2t3YXJlIOKAkyBpbmRpdmlkdWVsbCBqZSBEb2t1bWVudGVudHlwJywgbWluUGxhbjogJ3Byb2Zlc3Npb25hbCcgfSwKICAgICAgICB7IGlkOiAnY3VzdG9tLWZpZWxkcycsbGFiZWw6ICdadXNhdHpmZWxkZXInLCBoaW50OiAnRsO8Z2UgUHJvZHVrdGVuLCBCZXN0ZWxsdW5nZW4gdW5kIExpZWZlcmFudGVuYmVzdGVsbHVuZ2VuIFp1c2F0emZlbGRlciBoaW56dSB1bSBkaWVzZSBpbiBpbmRpdmlkdWVsbGUgUHJvemVzc2UgZWluenViaW5kZW4nLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJyB9LAogICAgICAgIHsgaWQ6ICdjdXN0b20tZmllbGRzLXByaW50JyxsYWJlbDogJ1p1c2F0emZlbGRlciBhdWYgQmVzdGVsbGRva3VtZW50ZW4nLCBoaW50OiAnRsO8Z2UgSW5mb3JtYXRpb25lbiBhdXMgWnVzYXR6ZmVsZGVybiB2b24gUHJvZHVrdGVuIHVuZCBCZXN0ZWxsdW5nZW4gZGVpbmVuIEJlc3RlbGxkb2t1bWVudGVuIGhpbnp1JywgbWluUGxhbjogJ3Byb2Zlc3Npb25hbCcgfSwKICAgICAgICB7IGlkOiAnc2hvcGlmeS1hdHRyLXByaW50JywgbGFiZWw6ICdTaG9waWZ5LVBvc2l0aW9uc2F0dHJpYnV0ZSBhdWYgRG9rdW1lbnRlbicsIGhpbnQ6ICdEcnVja2UgZGllIEN1c3RvbSBBdHRyaWJ1dGVzIGRlaW5lciBTaG9waWZ5LUJlc3RlbGxwb3NpdGlvbmVuIGF1ZiBSZWNobnVuZywgTGllZmVyc2NoZWluICYgQ28uJywgbWluUGxhbjogJ3Byb2Zlc3Npb25hbCcsIHBsYXRmb3JtOiAnc2hvcGlmeScgfSwKICAgICAgXX0sCiAgICBdOwoKICAgIGNvbnN0IEdPQUxTID0gWwogICAgICB7IGlkOiAnZy1waWNrJywgICAgIGljb246ICd6YXAnLCAgIGxhYmVsOiAnU2NobmVsbGVyICYgbW9iaWwga29tbWlzc2lvbmllcmVuJywgaGludDogJ1BpY2tlbiwgcGFja2VuICYgdmVyc2VuZGVuIHBlciBTY2FubmVyIOKAkyBpbmtsLiBQYWNrdGlzY2gsIEJhdGNoLVBpY2tpbmcgJiBQaWNrcHJvZmlsZW4nLCBmZWF0dXJlczogWyd3bXMtc2hpcHBpbmcnLCAncGFja2luZy1zdGF0aW9uJywgJ2Jpbi1wcmlvcml0eScsICdiYXRjaC1waWNraW5nJywgJ3BpY2tpbmctcHJvZmlsZXMnLCAnc2luZ2xlLWl0ZW0nLCAncGlja2luZy1kYXNoJywgJ3dtcy1wcml2aWxlZ2VzJywgJ2RvYy1leHRyYScsICdyZWxvY2F0ZSddLCBzZXRXbXM6IHRydWUgfSwKICAgICAgeyBpZDogJ2ctcGFjaycsICAgICBpY29uOiAncGFja2FnZScsIGxhYmVsOiAnQW0gUGFja3Rpc2NoIHNjaG5lbGxlciBwYWNrZW4gJiB2ZXJzZW5kZW4nLCBoaW50OiAnQXJ0aWtlbCBwZXIgU2NhbiBwcsO8ZmVuLCBQYWNrYW53ZWlzdW5nZW4gc2VoZW4gJiBWZXJzYW5kbGFiZWwgZGlyZWt0IGFtIFBhY2twbGF0eiBlcnN0ZWxsZW4nLCBmZWF0dXJlczogWydwYWNraW5nLXN0YXRpb24nXSwgc2V0V21zOiB0cnVlIH0sCiAgICAgIHsgaWQ6ICdnLXN0b2NrJywgICAgaWNvbjogJ3RhZycsICAgbGFiZWw6ICdCZXN0w6RuZGUgJiBJbnZlbnR1ciBpbSBHcmlmZicsIGhpbnQ6ICdCZXN0YW5kc2bDvGhydW5nIG1pdCBIaXN0b3JpZSwgcmVjaHRza29uZm9ybWUgSW52ZW50dXIgJiBCZXN0YW5kc2Jld2VydHVuZycsIGZlYXR1cmVzOiBbJ3N0b2NrLW1nbXQnLCAnc3RvY2stdGFraW5nJywgJ3N0b2NrLXZhbHVhdGlvbiddIH0sCiAgICAgIHsgaWQ6ICdnLXNoaXBwaW5nJywgaWNvbjogJ3RydWNrJywgbGFiZWw6ICdWZXJzYW5kZXRpa2V0dGVuIGRpcmVrdCBkcnVja2VuJywgaGludDogJ0RITCwgRFBELCBHTFMsIFVQUyAmIG1laHIg4oCTIEV0aWtldHRlbiBvaG5lIFVtd2VnZSBhdXMgUGlja3dhcmUgZXJzdGVsbGVuJywgZmVhdHVyZXM6IFsnc3RkLXNoaXBwaW5nJywgJ3NlbmRjbG91ZCddIH0sCiAgICAgIHsgaWQ6ICdnLXB1cmNoYXNlJywgaWNvbjogJ2NhcnQnLCAgbGFiZWw6ICdFaW5rYXVmICYgTGllZmVyYW50ZW4gc3RldWVybicsIGhpbnQ6ICdMaWVmZXJhbnRlbmJlc3RlbGx1bmdlbiBzY2hyZWliZW4gJiBCZWRhcmYgYXV0b21hdGlzY2ggcGxhbmVuJywgZmVhdHVyZXM6IFsnc3VwcGxpZXItb3JkZXJzJywgJ211bHRpLXN1cHBsaWVyJywgJ3B1cmNoYXNlLWltcGV4cCddIH0sCiAgICAgIHsgaWQ6ICdnLW1oZCcsICAgICAgaWNvbjogJ3BhY2thZ2UnLCBsYWJlbDogJ01IRCAmIENoYXJnZW4gdmVyd2FsdGVuJywgaGludDogJ0NoYXJnZW5udW1tZXJuICYgTWluZGVzdGhhbHRiYXJrZWl0c2RhdGVuIGzDvGNrZW5sb3MgZsO8aHJlbicsIGZlYXR1cmVzOiBbJ2JhdGNoLW1nbXQnXSB9LAogICAgICB7IGlkOiAnZy1pbmJvdW5kJywgIGljb246ICdyZWZyZXNoJywgbGFiZWw6ICdXYXJlbmVpbmdhbmcgJiBCZXN0YW5kc2tvbnRyb2xsZScsIGhpbnQ6ICdXYXJlbmVpbmfDpG5nZSBkb2t1bWVudGllcmVuLCBCZXN0YW5kIHNwZXJyZW4sIE1lbGRlLSAmIE1heGltYWxiZXN0w6RuZGUgcGZsZWdlbiwgZWlnZW5lIFByb2R1a3RldGlrZXR0ZW4gZ2VzdGFsdGVuJywgZmVhdHVyZXM6IFsnZ3ItZXh0cmEnLCAnc3RvY2stYmxvY2tpbmcnLCAnbWF4LXN0b2NrJywgJ3N0ZC13YXJlaG91c2UnLCAnbGFiZWwtZWRpdG9yJ10gfSwKICAgICAgeyBpZDogJ2ctZGF0ZXYnLCAgICBpY29uOiAnY2hhcnQnLCBsYWJlbDogJ0J1Y2hoYWx0dW5nICYgREFURVYgc2F1YmVyIGFiYmlsZGVuJywgaGludDogJ0RBVEVWLUV4cG9ydCBpbmtsLiBLb250aWVydW5nc3JhaG1lbiwgQnVjaHVuZ3NrcmVpc2VuICYgS29zdGVuc3RlbGxlbicsIGZlYXR1cmVzOiBbJ2RhdGV2JywgJ2RhdGV2LWtvbmZpZ3VyYXRpb24nLCAnc3RvY2stdmFsdWF0aW9uJ10gfSwKICAgICAgeyBpZDogJ2ctYnVuZGxlcycsICBpY29uOiAnZmlsZScsICBsYWJlbDogJ1NldHMgJiBTdMO8Y2tsaXN0ZW4gdmVya2F1ZmVuJywgaGludDogJ0J1bmRsZXMgYXVzIG1laHJlcmVuIFByb2R1a3RlbiBtaXQgYXV0b21hdGlzY2hlciBCZXN0YW5kc2bDvGhydW5nJywgZmVhdHVyZXM6IFsnYnVuZGxlcyddLCBwbGF0Zm9ybTogJ3Nob3B3YXJlNicgfSwKICAgICAgeyBpZDogJ2ctcXVvdGVzJywgICBpY29uOiAnZmlsZScsICBsYWJlbDogJ0FuZ2Vib3RlICYgQjJCLVZlcmthdWYnLCBoaW50OiAnQW5nZWJvdGUgc2NocmVpYmVuIHVuZCBwZXIgS2xpY2sgaW4gQmVzdGVsbHVuZ2VuIHdhbmRlbG4nLCBmZWF0dXJlczogWydxdW90ZXMnLCAnYXBpLWFjY2VzcyddIH0sCiAgICAgIHsgaWQ6ICdnLWF1dG8nLCAgICAgaWNvbjogJ2dlYXInLCAgbGFiZWw6ICdQcm96ZXNzZSBhdXRvbWF0aXNpZXJlbiAmIGFuYmluZGVuIChBUEkpJywgaGludDogJ0FQSS1adWdyaWZmLCBadXNhdHpmZWxkZXIgJiBpbmRpdmlkdWVsbGUgRG9rdW1lbnRlIGbDvHIgZWlnZW5lIFdvcmtmbG93cycsIGZlYXR1cmVzOiBbJ2FwaS1hY2Nlc3MnLCAnZmxvdycsICdkb2MtbGF5b3V0JywgJ2N1c3RvbS1maWVsZHMnLCAnY3VzdG9tLWZpZWxkcy1wcmludCcsICdzaG9waWZ5LWF0dHItcHJpbnQnXSB9LAogICAgICB7IGlkOiAnZy1wb3MnLCAgICAgIGljb246ICdzdG9yZScsIGxhYmVsOiAnSW0gTGFkZW5nZXNjaMOkZnQgdmVya2F1ZmVuIChLYXNzZSknLCBoaW50OiAnUGlja3dhcmUgUE9TIOKAkyByZWNodHNzaWNoZXJlIEthc3NlIChHb0JEL0thc3NlblNpY2hWKSBtaXQgT21uaWNoYW5uZWwnLCBmZWF0dXJlczogW10sIHNldFBvczogdHJ1ZSwgcGxhdGZvcm06ICdzaG9wd2FyZTYnIH0sCiAgICBdOwoKICAgIGNvbnN0IFBMQVRGT1JNX09QVElPTlMgPSBbCiAgICAgIHsgaWQ6ICdzaG9waWZ5JywgICB0OiAnU2hvcGlmeScsICAgIGQ6ICdJY2ggYmV0cmVpYmUgbWVpbmVuIFNob3AgbWl0IFNob3BpZnknIH0sCiAgICAgIHsgaWQ6ICdzaG9wd2FyZTYnLCB0OiAnU2hvcHdhcmUgNicsIGQ6ICdJY2ggYmV0cmVpYmUgbWVpbmVuIFNob3AgbWl0IFNob3B3YXJlIDYnIH0sCiAgICBdOwoKICAgIGNvbnN0IFVTRVJfVFlQRV9PUFRJT05TID0gWwogICAgICB7IGlkOiAnbmV3JywgICAgICB0OiAnSWNoIGJpbiBuZXUgaGllcicsIGQ6ICdJY2ggaGFiZSBub2NoIGtlaW5lIEVyZmFocnVuZyBtaXQgUGlja3dhcmUnIH0sCiAgICAgIHsgaWQ6ICdleGlzdGluZycsIHQ6ICdJY2ggbnV0emUgUGlja3dhcmUgYmVyZWl0cycsIGQ6ICdJY2ggbnV0emUgYmVyZWl0cyBQaWNrd2FyZS1QbHVnaW5zIG9kZXIgZWluZW4gUGlja3dhcmUtUGxhbicgfSwKICAgIF07CgogICAgY29uc3QgRVhJU1RJTkdfUExVR0lOUyA9IFsKICAgICAgeyBpZDogJ2VycCcsICAgICB0OiAnUGlja3dhcmUgRVJQJywgZDogJ0VoZW1hbHMgRVJQIFN0YXJ0ZXInIH0sCiAgICAgIHsgaWQ6ICdlcnAtcHJvJywgdDogJ1BpY2t3YXJlIEVSUCBQcm8nLCBkOiAnRGFzIGVyd2VpdGVydGUgRVJQJyB9LAogICAgICB7IGlkOiAncG9zJywgICAgIHQ6ICdQaWNrd2FyZSBQT1MnLCBkOiAnS2Fzc2Vuc3lzdGVtJywgcGxhdGZvcm06ICdzaG9wd2FyZTYnIH0sCiAgICAgIHsgaWQ6ICd3bXMnLCAgICAgdDogJ1BpY2t3YXJlIFdNUycsIGQ6ICdNb2JpbGVzIFdhcmVob3VzZSBNYW5hZ2VtZW50JyB9LAogICAgXTsKCiAgICBjb25zdCBQTFVHSU5fRkVBVFVSRV9NQVAgPSB7CiAgICAgICdlcnAnOiAgICAgWydzdXBwbGllci1vcmRlcnMnLCAnc3RvY2stbWdtdCcsICdtYXgtc3RvY2snLCAnc3RvY2stdGFraW5nJywgJ3N0b2NrLXZhbHVhdGlvbiddLAogICAgICAnZXJwLXBybyc6IFsnZGF0ZXYnLCAnZGF0ZXYta29uZmlndXJhdGlvbicsICdidW5kbGVzJywgJ3N0b2NrLWJsb2NraW5nJywgJ211bHRpLXN1cHBsaWVyJywgJ3N0ZC1zaGlwcGluZycsICdzdGQtd2FyZWhvdXNlJywgJ2dyLWV4dHJhJywgJ3B1cmNoYXNlLWltcGV4cCcsICdjdXN0b20tZmllbGRzLXByaW50JywgJ2RvYy1sYXlvdXQnLCAncGlja2luZy1kYXNoJywgJ3NlbmRjbG91ZCddLAogICAgICAnd21zJzogICAgIFsnd21zLXNoaXBwaW5nJywgJ3BhY2tpbmctc3RhdGlvbicsICdiYXRjaC1waWNraW5nJywgJ3BpY2tpbmctcHJvZmlsZXMnLCAnYmluLXByaW9yaXR5JywgJ3JlbG9jYXRlJ10sCiAgICAgICdwb3MnOiAgICAgW10sCiAgICB9OwoKICAgIGNvbnN0IEZVTExfTUFUUklYID0gWwogICAgICB7IHRpdGxlOiAnS29tbWlzc2lvbmllcnVuZyAmIFZlcnNhbmRwcm96ZXNzJywgaWNvbjogJ3BhY2thZ2UnLCByb3dzOiBbCiAgICAgICAgeyBsYWJlbDogJ1BpY2tsaXN0ZW4sIFZlcnNhbmRhbXBlbCAmIEJhcmNvZGVzY2FuJywgbGVnYWN5OiAnZXJwJywgbWluUGxhbjogJ3N0YXJ0ZXInIH0sCiAgICAgICAgeyBsYWJlbDogJ01vYmlsZXMgS29tbWlzc2lvbmllcmVuICYgVmVyc2FuZCAoV01TLUFwcCknLCBsZWdhY3k6ICd3bXMnLCBtaW5QbGFuOiAnYWR2YW5jZWQnLCB3bXM6IHRydWUgfSwKICAgICAgICB7IGxhYmVsOiAnUGFja3Rpc2NoOiBQYWNrZW4gbWl0IFNjYW4tS29udHJvbGxlLCBQYWNrYW53ZWlzdW5nZW4gJiBWZXJzYW5kbGFiZWwnLCBsZWdhY3k6ICd3bXMnLCBtaW5QbGFuOiAnYWR2YW5jZWQnLCB3bXM6IHRydWUgfSwKICAgICAgICB7IGxhYmVsOiAnU2FtbWVsYWt0aW9uZW4gaW4gZGVyIEJlc3RlbGzDvGJlcnNpY2h0IChQaWNrbGlzdGVuLCBSZWNobnVuZ2VuLCBFdGlrZXR0ZW4gJiBWZXJzYW5kKScsIGxlZ2FjeTogbnVsbCwgbWluUGxhbjogJ3N0YXJ0ZXInIH0sCiAgICAgICAgeyBsYWJlbDogJ1JlY2hudW5ncy0gJiBMaWVmZXJzY2hlaW5kcnVjayBiZWkgZGVyIEtvbW1pc3Npb25pZXJ1bmcnLCBsZWdhY3k6ICd3bXMnLCBtaW5QbGFuOiAnc3RhcnRlcicsIHdtczogdHJ1ZSB9LAogICAgICAgIHsgbGFiZWw6ICdCYXRjaC0gLyBtZWhyc3R1ZmlnZXMgUGlja2luZycsIGxlZ2FjeTogJ3dtcycsIG1pblBsYW46ICdhZHZhbmNlZCcsIHdtczogdHJ1ZSB9LAogICAgICAgIHsgbGFiZWw6ICdQaWNrcHJvZmlsZScsIGxlZ2FjeTogJ3dtcycsIG1pblBsYW46ICdhZHZhbmNlZCcsIHdtczogdHJ1ZSB9LAogICAgICAgIHsgbGFiZWw6ICdMYWdlcnBsYXR6LVByaW9yaXNpZXJ1bmcnLCBsZWdhY3k6ICd3bXMnLCBtaW5QbGFuOiAnYWR2YW5jZWQnIH0sCiAgICAgICAgeyBsYWJlbDogJ0VpbnDDtnN0ZXItS29tbWlzc2lvbmllcnVuZyAoU2luZ2xlLUl0ZW0tUGlja2luZyknLCBsZWdhY3k6IG51bGwsIG1pblBsYW46ICdhZHZhbmNlZCcsIHdtczogdHJ1ZSB9LAogICAgICAgIHsgbGFiZWw6ICdJbmRpdmlkdWVsbGVyIERva3VtZW50ZW5kcnVjayAoenVzw6R0emxpY2hlIERva3VtZW50dHlwZW4pJywgbGVnYWN5OiBudWxsLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJywgd21zOiB0cnVlIH0sCiAgICAgICAgeyBsYWJlbDogJ1BpY2tpbmctRGFzaGJvYXJkJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgICAgeyBsYWJlbDogJ0RldGFpbGxpZXJ0ZXMgV01TLVJlY2h0ZW1hbmFnZW1lbnQnLCBsZWdhY3k6IG51bGwsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnLCB3bXM6IHRydWUgfSwKICAgICAgICB7IGxhYmVsOiAnR2FuemVuIExhZ2VycGxhdHogdW1sYWdlcm4nLCBsZWdhY3k6ICd3bXMnLCBtaW5QbGFuOiAnYWR2YW5jZWQnLCB3bXM6IHRydWUgfSwKICAgICAgXX0sCiAgICAgIHsgdGl0bGU6ICdMYWdlciAmIEJlc3RhbmQnLCBpY29uOiAndGFnJywgcm93czogWwogICAgICAgIHsgbGFiZWw6ICdCZXN0YW5kc2bDvGhydW5nICYgV2FyZW5iZXdlZ3VuZ3NoaXN0b3JpZScsIGxlZ2FjeTogJ2VycCcsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdNZWhyZXJlIExhZ2VyLCBMYWdlcnBsw6R0emUgJiBjaGFvdGlzY2hlIExhZ2VyaGFsdHVuZycsIGxlZ2FjeTogJ2VycCcsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdJbnZlbnR1cicsIGxlZ2FjeTogJ2VycCcsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdCZXN0YW5kc2Jld2VydHVuZyAoTGlGbywgRmlGbywgZ2V3b2dlbmVyIER1cmNoc2Nobml0dCknLCBsZWdhY3k6ICdlcnAnLCBtaW5QbGFuOiAnc3RhcnRlcicgfSwKICAgICAgICB7IGxhYmVsOiAnV2FyZW5laW5nYW5ncy1WZXJ3YWx0dW5nICjDnGJlcnNpY2h0ICYgRnJlaWdhYmUpJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdGb3RvcywgRG9rdW1lbnRlICYgS29tbWVudGFyZSBhbiBXYXJlbmVpbmfDpG5nZW4nLCBsZWdhY3k6ICdlcnAtcHJvJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgbGFiZWw6ICdQcm9kdWt0LUJhcmNvZGUtRXRpa2V0dGVuIGRydWNrZW4nLCBsZWdhY3k6ICdlcnAtcHJvJywgbWluUGxhbjogJ3N0YXJ0ZXInIH0sCiAgICAgICAgeyBsYWJlbDogJ0V0aWtldHRlbi1FZGl0b3IgbWl0IGVpZ2VuZW4gVm9ybGFnZW4gZsO8ciBQcm9kdWt0ZXRpa2V0dGVuJywgbGVnYWN5OiBudWxsLCBtaW5QbGFuOiAnYWR2YW5jZWQnIH0sCiAgICAgICAgeyBsYWJlbDogJ01IRC0gJiBDaGFyZ2VudmVyd2FsdHVuZycsIGxlZ2FjeTogbnVsbCwgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgbGFiZWw6ICdCZXN0YW5kIGFscyBuaWNodC12ZXJrw6R1ZmxpY2ggbWFya2llcmVuJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGxhYmVsOiAnU3RhbmRhcmRsYWdlciBmw7xyIFZlcnNhbmQgJiBXYXJlbmVpbmdhbmcnLCBsZWdhY3k6ICdlcnAtcHJvJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgbGFiZWw6ICdNZWxkZS0gJiBNYXhpbWFsYmVzdGFuZCBqZSBQcm9kdWt0LCBMYWdlcnBsYXR6ICYgTGFnZXInLCBsZWdhY3k6ICdlcnAnLCBtaW5QbGFuOiAnYWR2YW5jZWQnIH0sCiAgICAgIF19LAogICAgICB7IHRpdGxlOiAnRWlua2F1ZicsIGljb246ICdjYXJ0Jywgcm93czogWwogICAgICAgIHsgbGFiZWw6ICdMaWVmZXJhbnRlbnZlcndhbHR1bmcgJiBMaWVmZXJhbnRlbmJlc3RlbGx1bmdlbicsIGxlZ2FjeTogJ2VycCcsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGxhYmVsOiAnQmVkYXJmc3BsYW51bmcnLCBsZWdhY3k6ICdlcnAnLCBtaW5QbGFuOiAnYWR2YW5jZWQnIH0sCiAgICAgICAgeyBsYWJlbDogJ01laHJlcmUgTGllZmVyYW50ZW4gcHJvIFByb2R1a3QnLCBsZWdhY3k6ICdlcnAtcHJvJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgbGFiZWw6ICdIYW5kZWxzc3Bhbm5lICYgUm9oZXJ0cmFnIGF1ZiBCYXNpcyBkZXMgenVsZXR6dCB2ZXJ3ZW5kZXRlbiBFaW5rYXVmc3ByZWlzZXMnLCBsZWdhY3k6IG51bGwsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdJbXBvcnQvRXhwb3J0IEVpbmthdWZzbGlzdGUgJiBMaWVmZXJhbnRlbmJlc3RlbGxwb3NpdGlvbmVuJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgIF19LAogICAgICB7IHRpdGxlOiAnVmVya2F1ZiAmIFJldG91cmVuJywgaWNvbjogJ2ZpbGUnLCByb3dzOiBbCiAgICAgICAgeyBsYWJlbDogJ0Jlc3RlbGxhYndpY2tsdW5nICYgUmVjaG51bmdlbicsIGxlZ2FjeTogJ2VycCcsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdSZWNobnVuZ3Nrb3JyZWt0dXJlbicsIGxlZ2FjeTogJ2VycC1wcm8nLCBtaW5QbGFuOiAnc3RhcnRlcicgfSwKICAgICAgICB7IGxhYmVsOiAnUmV0b3VyZW5tYW5hZ2VtZW50JywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdLb25maWd1cmllcmJhcmUgUmV0b3VyZW5ncsO8bmRlIChhdWNoIGluIGRlciBXTVMtQXBwKScsIGxlZ2FjeTogbnVsbCwgbWluUGxhbjogJ3N0YXJ0ZXInIH0sCiAgICAgICAgeyBsYWJlbDogJ1N0w7xja2xpc3RlbiAmIEJ1bmRsZXMnLCBsZWdhY3k6ICdlcnAtcHJvJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgbGFiZWw6ICdBbmdlYm90ZSBlcnN0ZWxsZW4gJiBpbiBCZXN0ZWxsdW5nZW4gd2FuZGVsbicsIGxlZ2FjeTogbnVsbCwgbWluUGxhbjogJ3Byb2Zlc3Npb25hbCcgfSwKICAgICAgICB7IGxhYmVsOiAnSW50ZWdyaWVydGUgS1BJLURhc2hib2FyZHMgKEJlc3RlbGwtICYgUmV0b3VyZW5saXN0ZSknLCBsZWdhY3k6IG51bGwsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgIF19LAogICAgICB7IHRpdGxlOiAnVmVyc2FuZCcsIGljb246ICd0cnVjaycsIHJvd3M6IFsKICAgICAgICB7IGxhYmVsOiAnREhMLCBHTFMgJiBEZXV0c2NoZSBQb3N0JywgbGVnYWN5OiAnZXJwJywgbWluUGxhbjogJ3N0YXJ0ZXInIH0sCiAgICAgICAgeyBsYWJlbDogJ0RQRCwgVVBTLCBESEwgRXhwcmVzcywgUG9zdCBBVCAmIENIJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdJbnRlcm5hdGlvbmFsZXIgVmVyc2FuZDogWm9sbHRhcmlmbnVtbWVybiBqZSBaaWVsbGFuZCAmIFpvbGwtSURzIChFT1JJLCBVU3QtSWROci4pJywgbGVnYWN5OiBudWxsLCBtaW5QbGFuOiAnc3RhcnRlcicgfSwKICAgICAgICB7IGxhYmVsOiAnU2VuZGNsb3VkLUludGVncmF0aW9uJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGxhYmVsOiAnRFNWIChTcGVkaXRpb24pJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgICAgeyBsYWJlbDogJ0dPISBFeHByZXNzJywgbGVnYWN5OiBudWxsLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJyB9LAogICAgICAgIHsgbGFiZWw6ICdFaWdlbmUgVmVyc2FuZGludGVncmF0aW9uIChBUEkpJywgbGVnYWN5OiBudWxsLCBtaW5QbGFuOiAnZW50ZXJwcmlzZScgfSwKICAgICAgXX0sCiAgICAgIHsgdGl0bGU6ICdCdWNoaGFsdHVuZycsIGljb246ICdjaGFydCcsIHJvd3M6IFsKICAgICAgICB7IGxhYmVsOiAnREFURVYtRXhwb3J0IChGb3JkZXJ1bmdlbiAmIFphaGx1bmdlbiknLCBsZWdhY3k6ICdlcnAtcHJvJywgbWluUGxhbjogJ2FkdmFuY2VkJyB9LAogICAgICAgIHsgbGFiZWw6ICdLb250aWVydW5nc3JhaG1lbiwgQnVjaHVuZ3NrcmVpc2UgJiBLb3N0ZW5zdGVsbGVuJywgbGVnYWN5OiAnZXJwLXBybycsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGxhYmVsOiAnWlVHRmVSRC0gLyBFLVJlY2hudW5nZW4nLCBsZWdhY3k6ICdlcnAnLCBtaW5QbGFuOiAnc3RhcnRlcicgfSwKICAgICAgXX0sCiAgICAgIHsgdGl0bGU6ICdWZXJ3YWx0dW5nICYgQXV0b21hdGlzaWVydW5nJywgaWNvbjogJ2dlYXInLCByb3dzOiBbCiAgICAgICAgeyBsYWJlbDogJ0FQSS1adWdyaWZmIChQaWNrd2FyZSBHcmFwaFFMLUFQSSknLCBsZWdhY3k6IG51bGwsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgICAgeyBsYWJlbDogJ1p1c2F0emZlbGRlciBhbiBMaWVmZXJhbnRlbiAmIExhZ2VybicsIGxlZ2FjeTogJ2VycCcsIG1pblBsYW46ICdwcm9mZXNzaW9uYWwnIH0sCiAgICAgICAgeyBsYWJlbDogJ1p1c2F0emZlbGRlciBhbiBMaWVmZXJhbnRlbmJlc3RlbGx1bmdlbiAmIGF1ZiBCZXN0ZWxsZG9rdW1lbnRlbicsIGxlZ2FjeTogJ2VycC1wcm8nLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJyB9LAogICAgICAgIHsgbGFiZWw6ICdEb2t1bWVudGVuZWRpdG9yOiBSZWNobnVuZ2VuLCBMaWVmZXJzY2hlaW5lICYgUGlja2xpc3RlbiBpbmRpdmlkdWVsbCBnZXN0YWx0ZW4nLCBsZWdhY3k6ICdlcnAtcHJvJywgbWluUGxhbjogJ3Byb2Zlc3Npb25hbCcgfSwKICAgICAgICB7IGxhYmVsOiAnQWRyZXNzZXRpa2V0dGVuIGRydWNrZW4nLCBsZWdhY3k6IG51bGwsIG1pblBsYW46ICdhZHZhbmNlZCcgfSwKICAgICAgICB7IGxhYmVsOiAnUGlja3dhcmUgQUk6IENoYXQtQXNzaXN0ZW50IGluIGRlciBBZG1pbiAobWl0IENoYXQtVmVybGF1ZiAmIERhdGVpLUFuaMOkbmdlbiknLCBsZWdhY3k6IG51bGwsIG1pblBsYW46ICdzdGFydGVyJyB9LAogICAgICAgIHsgbGFiZWw6ICdQaWNrd2FyZSBBSSBwZXIgTUNQIGluIGV4dGVybmVuIEtJLUFzc2lzdGVudGVuIChpbmtsLiBSZWNodGUgamUgUm9sbGUpJywgbGVnYWN5OiBudWxsLCBtaW5QbGFuOiAncHJvZmVzc2lvbmFsJyB9LAogICAgICBdfSwKICAgIF07CgogICAgZnVuY3Rpb24gY3VycmVudEZsb3coKSB7CiAgICAgIGNvbnN0IHNob3dQcm9kdWN0cyA9IHN0YXRlLnVzZXJUeXBlID09PSAnZXhpc3RpbmcnOwogICAgICByZXR1cm4gc2hvd1Byb2R1Y3RzCiAgICAgICAgPyBbJ2ludHJvJywgJ3Byb2R1Y3RzJywgJ2ZlYXR1cmVzJywgJ3ZvbHVtZScsICdyZXN1bHQnXQogICAgICAgIDogWydpbnRybycsICdmZWF0dXJlcycsICd2b2x1bWUnLCAncmVzdWx0J107CiAgICB9CiAgICBmdW5jdGlvbiBzdGVwRXllYnJvdygpIHsgcmV0dXJuIGBTY2hyaXR0ICR7c3RhdGUuc3RlcCArIDF9IHZvbiAke2N1cnJlbnRGbG93KCkubGVuZ3RofWA7IH0KCiAgICBjb25zdCBzdGF0ZSA9IHsKICAgICAgc3RlcDogMCwKICAgICAgcGxhdGZvcm06IG51bGwsCiAgICAgIHVzZXJUeXBlOiBudWxsLAogICAgICBleGlzdGluZzogbmV3IFNldCgpLAogICAgICBnb2FsczogbmV3IFNldCgpLAogICAgICBmZWF0dXJlczogbmV3IFNldCgpLAogICAgICB2b2x1bWU6IDgwMCwKICAgICAgc2hvcHM6IDEsCiAgICAgIHdtczogZmFsc2UsIHdtc0RldmljZXM6IDEsCiAgICAgIHBvczogZmFsc2UsIHBvc0xpY2Vuc2VzOiAxLAogICAgICBiaWxsaW5nOiBERUZBVUxUX0JJTExJTkcsCiAgICAgIHNlbGVjdGVkUGxhbjogbnVsbCwKICAgICAgZXhpc3RpbmdNb2RlOiBudWxsLCBjdXJyZW50UGxhbjogbnVsbCwKICAgICAgX3ByZWZpbGxTaWc6ICcnLCBfcHJlZmlsbGVkOiBbXSwKICAgIH07CgogICAgY29uc3QgZWwgPSAoaHRtbCkgPT4geyBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTsgdC5pbm5lckhUTUwgPSBodG1sLnRyaW0oKTsgcmV0dXJuIHQuY29udGVudC5maXJzdENoaWxkOyB9OwogICAgY29uc3QgZm10ID0gKG4pID0+IG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZGUtREUnKS5mb3JtYXQobik7CiAgICBjb25zdCBldXIgPSAobikgPT4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdkZS1ERScsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnRVVSJywgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkuZm9ybWF0KG4pOwogICAgY29uc3QgZmVhdHVyZUJ5SWQgPSAoaWQpID0+IEZFQVRVUkVfR1JPVVBTLmZsYXRNYXAoZyA9PiBnLmZlYXR1cmVzKS5maW5kKGYgPT4gZi5pZCA9PT0gaWQpOwogICAgY29uc3QgcGxhbkluZGV4ID0gKHApID0+IFBMQU5fT1JERVIuaW5kZXhPZihwKTsKICAgIGNvbnN0IG1heFBsYW4gPSAoYSwgYikgPT4gcGxhbkluZGV4KGEpID49IHBsYW5JbmRleChiKSA\/IGEgOiBiOwoKICAgIGNvbnN0IGZlYXR1cmVWaXNpYmxlID0gKGYpID0+IHsKICAgICAgaWYgKCFmLnBsYXRmb3JtKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGYucGxhdGZvcm0gPT09ICdzaG9wd2FyZTYnKSByZXR1cm4gc3RhdGUucGxhdGZvcm0gPT09ICdzaG9wd2FyZTYnIHx8IHN0YXRlLnBsYXRmb3JtID09PSAnc2hvcHdhcmU1JzsKICAgICAgcmV0dXJuIGYucGxhdGZvcm0gPT09IHN0YXRlLnBsYXRmb3JtOwogICAgfTsKCiAgICBmdW5jdGlvbiByZWNvbW1lbmQoKSB7CiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWy4uLnN0YXRlLmZlYXR1cmVzXS5tYXAoZmVhdHVyZUJ5SWQpOwogICAgICBsZXQgYnlGZWF0dXJlcyA9ICdzdGFydGVyJzsKICAgICAgc2VsZWN0ZWQuZm9yRWFjaChmID0+IHsgYnlGZWF0dXJlcyA9IG1heFBsYW4oYnlGZWF0dXJlcywgZi5taW5QbGFuKTsgfSk7CiAgICAgIGxldCBieVNob3BzID0gJ3N0YXJ0ZXInOwogICAgICBpZiAoc3RhdGUucGxhdGZvcm0gPT09ICdzaG9waWZ5JykgewogICAgICAgIGlmIChzdGF0ZS5zaG9wcyA+IDQpIGJ5U2hvcHMgPSAnZW50ZXJwcmlzZSc7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuc2hvcHMgPj0gMikgYnlTaG9wcyA9ICdwcm9mZXNzaW9uYWwnOwogICAgICB9CiAgICAgIGxldCBieVZvbHVtZSA9ICdzdGFydGVyJzsKICAgICAgaWYgKHN0YXRlLnZvbHVtZSA+IDIwMDAwKSBieVZvbHVtZSA9ICdlbnRlcnByaXNlJzsKICAgICAgbGV0IHJlcXVpcmVkID0gWydzdGFydGVyJywgYnlGZWF0dXJlcywgYnlTaG9wcywgYnlWb2x1bWVdLnJlZHVjZShtYXhQbGFuKTsKICAgICAgbGV0IHJlY29tbWVuZGVkID0gcmVxdWlyZWQ7CiAgICAgIGxldCB0aWx0ZWQgPSBmYWxzZTsKICAgICAgY29uc3QgYm9yZGVybGluZVNpZ25hbHMgPSBbXTsKICAgICAgaWYgKHJlcXVpcmVkID09PSAnYWR2YW5jZWQnKSB7CiAgICAgICAgaWYgKHN0YXRlLndtcykgYm9yZGVybGluZVNpZ25hbHMucHVzaCgnZHUgZGFzIFdNUyBha3RpdiBudXR6dCDigJMgZGFzIFBpY2tpbmctRGFzaGJvYXJkIHVuZCBmZWluZSBXTVMtUmVjaHRlIHNrYWxpZXJlbiBtaXQnKTsKICAgICAgICBpZiAoc3RhdGUudm9sdW1lID49IDE0MDApIGJvcmRlcmxpbmVTaWduYWxzLnB1c2goJ2RlaW4gQmVzdGVsbHZvbHVtZW4gbmFoIGFuIGRlciBBZHZhbmNlZC1HcmVuemUgbGllZ3Qg4oCTIG1pdCA8Yj5QaWNraW5nLURhc2hib2FyZDwvYj4sIDxiPmludGVncmllcnRlbiBLUEktRGFzaGJvYXJkczwvYj4gdW5kIDxiPkFQSS1adWdyaWZmPC9iPiBhcmJlaXRlc3QgZHUgZGllc2VzIGjDtmhlcmUgVm9sdW1lbiBpbiBQcm9mZXNzaW9uYWwgZWZmaXppZW50ZXIgdW5kIHNjaG5lbGxlciBhYicpOwogICAgICAgIGlmIChib3JkZXJsaW5lU2lnbmFscy5sZW5ndGggPiAwKSB7IHJlY29tbWVuZGVkID0gJ3Byb2Zlc3Npb25hbCc7IHRpbHRlZCA9IHRydWU7IH0KICAgICAgfQogICAgICBjb25zdCByZWFzb25zID0gYnVpbGRSZWFzb25zKHNlbGVjdGVkLCBieVNob3BzLCByZWNvbW1lbmRlZCwgcmVxdWlyZWQsIHRpbHRlZCwgYm9yZGVybGluZVNpZ25hbHMpOwogICAgICBjb25zdCB1cHNlbGwgPSBidWlsZFVwc2VsbChyZWNvbW1lbmRlZCwgcmVxdWlyZWQsIHNlbGVjdGVkKTsKICAgICAgY29uc3QgY29zdCA9IGNvc3RGb3IocmVjb21tZW5kZWQpOwogICAgICByZXR1cm4geyByZWNvbW1lbmRlZCwgcmVxdWlyZWQsIHRpbHRlZCwgcmVhc29ucywgdXBzZWxsLCBjb3N0LCBzZWxlY3RlZCB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGJ1aWxkUmVhc29ucyhzZWxlY3RlZCwgYnlTaG9wcywgcmVjb21tZW5kZWQsIHJlcXVpcmVkLCB0aWx0ZWQsIHNpZ25hbHMpIHsKICAgICAgY29uc3QgciA9IFtdOwogICAgICBjb25zdCBkcml2ZXJzID0geyBhZHZhbmNlZDogW10sIHByb2Zlc3Npb25hbDogW10sIGVudGVycHJpc2U6IFtdIH07CiAgICAgIHNlbGVjdGVkLmZvckVhY2goZiA9PiB7IGlmIChmLm1pblBsYW4gIT09ICdzdGFydGVyJykgZHJpdmVyc1tmLm1pblBsYW5dLnB1c2goZi5sYWJlbCk7IH0pOwogICAgICBbJ2VudGVycHJpc2UnLCdwcm9mZXNzaW9uYWwnLCdhZHZhbmNlZCddLmZvckVhY2gocCA9PiB7CiAgICAgICAgaWYgKGRyaXZlcnNbcF0ubGVuZ3RoKSB7CiAgICAgICAgICByLnB1c2goeyB0eXBlOiAnb2snLCB0ZXh0OiBgRGVpbmUgQXVzd2FobCDigJ4ke2RyaXZlcnNbcF0uc2xpY2UoMCwzKS5qb2luKCfigJwsIOKAnicpfeKAnCR7ZHJpdmVyc1twXS5sZW5ndGg+Mz9gICgrJHtkcml2ZXJzW3BdLmxlbmd0aC0zfSB3ZWl0ZXJlKWA6Jyd9IGlzdCBhYiA8Yj4ke1BMQU5TW3BdLmxhYmVsfTwvYj4gdmVyZsO8Z2Jhci5gIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChieVNob3BzID09PSAncHJvZmVzc2lvbmFsJykgci5wdXNoKHsgdHlwZTogJ29rJywgdGV4dDogYEbDvHIgPGI+JHtzdGF0ZS5zaG9wc30gT25saW5lc2hvcHM8L2I+IGJyYXVjaHN0IGR1IG1pbmRlc3RlbnMgPGI+UHJvZmVzc2lvbmFsPC9iPiAoYmlzIHp1IDQgU2hvcHMpLmAgfSk7CiAgICAgIGlmIChieVNob3BzID09PSAnZW50ZXJwcmlzZScpIHIucHVzaCh7IHR5cGU6ICdvaycsIHRleHQ6IGBGw7xyIDxiPiR7c3RhdGUuc2hvcHN9IE9ubGluZXNob3BzPC9iPiBpc3QgPGI+RW50ZXJwcmlzZTwvYj4gKHVuYmVncmVuenQpIG7DtnRpZy5gIH0pOwogICAgICBjb25zdCBuZWVkc1dtcyA9IHN0YXRlLndtcyB8fCBzZWxlY3RlZC5zb21lKGYgPT4gZi5yZXF1aXJlc1dtc01vZHVsZSk7CiAgICAgIGlmIChuZWVkc1dtcykgci5wdXNoKHsgdHlwZTogJ2luZm8nLCB0ZXh0OiBgRsO8ciBtb2JpbGVzIExhZ2VyLVNjYW5uaW5nIGtvbW10IHp1c8OkdHpsaWNoIGRhcyA8Yj5QaWNrd2FyZSBXTVM8L2I+LU1vZHVsIGRhenUgKHNlcGFyYXQgYnVjaGJhcikg4oCTIGRlaW5lIGdld8OkaGx0ZW4gTGFnZXItL1BpY2stRnVua3Rpb25lbiBsYXVmZW4gZGFyw7xiZXIuYCB9KTsKICAgICAgaWYgKHN0YXRlLnBvcykgci5wdXNoKHsgdHlwZTogJ2luZm8nLCB0ZXh0OiBgRsO8ciBkZW4gVmVya2F1ZiBpbSBMYWRlbmdlc2Now6RmdCBrb21tdCB6dXPDpHR6bGljaCBkYXMgPGI+UGlja3dhcmUgUE9TPC9iPi1Nb2R1bCBkYXp1IChzZXBhcmF0IGJ1Y2hiYXIpLmAgfSk7CiAgICAgIGlmICh0aWx0ZWQpIHIucHVzaCh7IHR5cGU6ICdpbmZvJywgdGV4dDogYFdpciBlbXBmZWhsZW4gZGlyIDxiPlByb2Zlc3Npb25hbDwvYj4gc3RhdHQgQWR2YW5jZWQsIHdlaWwgJHtzaWduYWxzWzBdfS5gIH0pOwogICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAwICYmIGJ5U2hvcHMgPT09ICdzdGFydGVyJykgci5wdXNoKHsgdHlwZTogJ29rJywgdGV4dDogJ0RlaW5lIEFuZm9yZGVydW5nZW4gc2luZCBtaXQgZGVtIDxiPlN0YXJ0ZXI8L2I+LVBsYW4gdm9sbHN0w6RuZGlnIGFiZ2VkZWNrdC4nIH0pOwogICAgICByZXR1cm4gcjsKICAgIH0KCiAgICBmdW5jdGlvbiBidWlsZFVwc2VsbChyZWNvbW1lbmRlZCwgcmVxdWlyZWQsIHNlbGVjdGVkKSB7CiAgICAgIGlmIChyZWNvbW1lbmRlZCA9PT0gJ3Byb2Zlc3Npb25hbCcgfHwgcmVjb21tZW5kZWQgPT09ICdlbnRlcnByaXNlJykgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IHRhcmdldCA9IHJlY29tbWVuZGVkID09PSAnc3RhcnRlcicgPyAnYWR2YW5jZWQnIDogJ3Byb2Zlc3Npb25hbCc7CiAgICAgIGNvbnN0IGRlbHRhID0gUExBTlNbdGFyZ2V0XS5tb250aGx5IC0gUExBTlNbcmVjb21tZW5kZWRdLm1vbnRobHk7CiAgICAgIGNvbnN0IHBlcmtzID0gewogICAgICAgIGFkdmFuY2VkOiBbCiAgICAgICAgICAnTGllZmVyYW50ZW5iZXN0ZWxsdW5nZW4sIENoYXJnZW4vTUhEICYgQmVkYXJmc3BsYW51bmcnLAogICAgICAgICAgJ0RBVEVWLUFuYmluZHVuZyBpbmtsLiBLb3N0ZW5zdGVsbGVuJywKICAgICAgICAgICdCYXRjaC1QaWNraW5nLCBQaWNrcHJvZmlsZSAmIG9wdGltaWVydGUgTGF1ZndlZ2UnLAogICAgICAgICAgJ0UtTWFpbC0gJiBUZWxlZm9uLVN1cHBvcnQnLAogICAgICAgIF0sCiAgICAgICAgcHJvZmVzc2lvbmFsOiB7CiAgICAgICAgICBzaG9wd2FyZTY6IFsKICAgICAgICAgICAgJ0FQSS1adWdyaWZmIGbDvHIgZWlnZW5lIFNjaG5pdHRzdGVsbGVuJywKICAgICAgICAgICAgJ0FuZ2Vib3RlIGVyc3RlbGxlbiAmIGluIEJlc3RlbGx1bmdlbiB3YW5kZWxuJywKICAgICAgICAgICAgJ1BpY2tpbmctRGFzaGJvYXJkICYgZGV0YWlsbGllcnRlcyBXTVMtUmVjaHRlbWFuYWdlbWVudCcsCiAgICAgICAgICAgICdJbnRlZ3JpZXJ0ZSBLUEktRGFzaGJvYXJkcycsCiAgICAgICAgICBdLAogICAgICAgICAgc2hvcGlmeTogWwogICAgICAgICAgICAnQVBJLVp1Z3JpZmYgJiBBdXRvbWF0aXNpZXJ1bmdlbiBwZXIgRmxvdycsCiAgICAgICAgICAgICdCaXMgenUgNCBPbmxpbmVzaG9wcyBzdGF0dCAxJywKICAgICAgICAgICAgJ0FuZ2Vib3RlIGVyc3RlbGxlbiAmIGluIEJlc3RlbGx1bmdlbiB3YW5kZWxuJywKICAgICAgICAgICAgJ1BpY2tpbmctRGFzaGJvYXJkICYgZGV0YWlsbGllcnRlcyBXTVMtUmVjaHRlbWFuYWdlbWVudCcsCiAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIGNvbnN0IHByb0tleSA9IHN0YXRlLnBsYXRmb3JtID09PSAnc2hvcHdhcmU1JyA\/ICdzaG9wd2FyZTYnIDogc3RhdGUucGxhdGZvcm07CiAgICAgIGNvbnN0IHRhcmdldFBlcmtzID0gdGFyZ2V0ID09PSAncHJvZmVzc2lvbmFsJyA\/IHBlcmtzLnByb2Zlc3Npb25hbFtwcm9LZXldIDogcGVya3NbdGFyZ2V0XTsKICAgICAgcmV0dXJuIHsgdGFyZ2V0LCBkZWx0YSwgcGVya3M6IHRhcmdldFBlcmtzIH07CiAgICB9CgogICAgY29uc3QgUExVR0lOX1BMQU5fTUFQID0geyAnZXJwJzogJ2FkdmFuY2VkJywgJ2VycC1wcm8nOiAncHJvZmVzc2lvbmFsJyB9OwoKICAgIGZ1bmN0aW9uIGJ1aWxkTWlncmF0aW9uQmxvY2socikgewogICAgICBjb25zdCByZWFsID0gWy4uLnN0YXRlLmV4aXN0aW5nXS5maWx0ZXIoaWQgPT4gaWQgIT09ICduZXcnICYmIGlkICE9PSAnJyk7CiAgICAgIGlmIChyZWFsLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuY3VycmVudFBsYW4pIHJldHVybiBudWxsOwogICAgICBjb25zdCBsYWJlbE9mID0gKGlkKSA9PiBFWElTVElOR19QTFVHSU5TLmZpbmQocCA9PiBwLmlkID09PSBpZCkudDsKICAgICAgaWYgKHN0YXRlLmN1cnJlbnRQbGFuKSB7CiAgICAgICAgY29uc3QgYm94ID0gZWwoYDxkaXYgY2xhc3M9Im1pZ3JhdGUiPjxoND4ke0lDT04oJ3JlZnJlc2gnLCB7IHNpemU6IDE3IH0pfSBEZWluIGFrdHVlbGxlciBQbGFuPC9oND48L2Rpdj5gKTsKICAgICAgICBjb25zdCBjdXIgPSBQTEFOU1tzdGF0ZS5jdXJyZW50UGxhbl0ubGFiZWw7CiAgICAgICAgY29uc3QgcmVjID0gUExBTlNbci5yZWNvbW1lbmRlZF0ubGFiZWw7CiAgICAgICAgaWYgKHN0YXRlLmN1cnJlbnRQbGFuID09PSByLnJlY29tbWVuZGVkKSB7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoZWwoYDxwPkR1IG51dHp0IGJlcmVpdHMgPGI+JHtjdXJ9PC9iPiDigJMgZGVyIFBsYW4gcGFzc3Qgd2VpdGVyaGluIHp1IGRlaW5lbiBBbmZvcmRlcnVuZ2VuLjwvcD5gKSk7CiAgICAgICAgfSBlbHNlIGlmIChwbGFuSW5kZXgoci5yZXF1aXJlZCkgPiBwbGFuSW5kZXgoc3RhdGUuY3VycmVudFBsYW4pKSB7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoZWwoYDxwPkR1IG51dHp0IGFrdHVlbGwgPGI+JHtjdXJ9PC9iPi4gRsO8ciBkZWluZSBBdXN3YWhsIGJyYXVjaHN0IGR1IG1pbmRlc3RlbnMgPGI+JHtQTEFOU1tyLnJlcXVpcmVkXS5sYWJlbH08L2I+IOKAkyBkYWbDvHIgd8OkcmUgZWluIFVwZ3JhZGUgbsO2dGlnLjwvcD5gKSk7CiAgICAgICAgfSBlbHNlIGlmIChwbGFuSW5kZXgoci5yZWNvbW1lbmRlZCkgPiBwbGFuSW5kZXgoc3RhdGUuY3VycmVudFBsYW4pKSB7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoZWwoYDxwPkRlaW4gPGI+JHtjdXJ9PC9iPi1QbGFuIGRlY2t0IGRlaW5lIEF1c3dhaGwgYWIuIFdhcnVtIHNpY2ggZsO8ciBkaWNoIHRyb3R6ZGVtIDxiPiR7cmVjfTwvYj4gbG9obmVuIGthbm4sIHNpZWhzdCBkdSBvYmVuLjwvcD5gKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJveC5hcHBlbmRDaGlsZChlbChgPHA+RHUgbnV0enQgYWt0dWVsbCA8Yj4ke2N1cn08L2I+LiBGw7xyIGRlaW5lIEF1c3dhaGwgcmVpY2h0IGF1Y2ggPGI+JHtQTEFOU1tyLnJlY29tbWVuZGVkXS5sYWJlbH08L2I+LjwvcD5gKSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5leGlzdGluZy5oYXMoJ3dtcycpKSBib3guYXBwZW5kQ2hpbGQoZWwoYDxwPkRlaW4gPGI+UGlja3dhcmUgV01TPC9iPi1Nb2R1bCBsw6R1ZnQgdW52ZXLDpG5kZXJ0IHdlaXRlci48L3A+YCkpOwogICAgICAgIHJldHVybiBib3g7CiAgICAgIH0KICAgICAgY29uc3QgYm94ID0gZWwoYDxkaXYgY2xhc3M9Im1pZ3JhdGUiPjxoND4ke0lDT04oJ3JlZnJlc2gnLCB7IHNpemU6IDE3IH0pfSBEZWluIFVtc3RpZWc8L2g0PjwvZGl2PmApOwogICAgICBjb25zdCBwbGFuUGx1Z2lucyA9IHJlYWwuZmlsdGVyKGlkID0+IFBMVUdJTl9QTEFOX01BUFtpZF0pOwogICAgICBpZiAocGxhblBsdWdpbnMubGVuZ3RoKSB7CiAgICAgICAgbGV0IG1hcFBsYW4gPSAnc3RhcnRlcic7CiAgICAgICAgcGxhblBsdWdpbnMuZm9yRWFjaChpZCA9PiB7IG1hcFBsYW4gPSBtYXhQbGFuKG1hcFBsYW4sIFBMVUdJTl9QTEFOX01BUFtpZF0pOyB9KTsKICAgICAgICBjb25zdCBuYW1lcyA9IHBsYW5QbHVnaW5zLm1hcChsYWJlbE9mKS5qb2luKCcgJiAnKTsKICAgICAgICBib3guYXBwZW5kQ2hpbGQoZWwoYDxwPkR1IGtvbW1zdCB2b24gPGI+JHtuYW1lc308L2I+LiBJbSBuZXVlbiBQbGFuLU1vZGVsbCBvcmRuZXQgc2ljaCBkYXMgdHlwaXNjaGVyd2Vpc2UgYmVpIDxiPiR7UExBTlNbbWFwUGxhbl0ubGFiZWx9PC9iPiBlaW4uPC9wPmApKTsKICAgICAgICBpZiAobWFwUGxhbiAhPT0gci5yZWNvbW1lbmRlZCkgewogICAgICAgICAgYm94LmFwcGVuZENoaWxkKGVsKGA8cD5CYXNpZXJlbmQgYXVmIGRlaW5lbiBrb25rcmV0ZW4gQW5nYWJlbiBlbXBmZWhsZW4gd2lyIGRpciBvYmVuIDxiPiR7UExBTlNbci5yZWNvbW1lbmRlZF0ubGFiZWx9PC9iPiDigJMgc28gcGFzc3QgZGVyIFBsYW4gZ2VuYXUgenUgZGVtLCB3YXMgZHUgd2lya2xpY2ggbnV0enQuPC9wPmApKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLmV4aXN0aW5nLmhhcygnd21zJykpIGJveC5hcHBlbmRDaGlsZChlbChgPHA+RGVpbiA8Yj5QaWNrd2FyZSBXTVM8L2I+IGzDpHVmdCBhbHMgc2VwYXJhdCBidWNoYmFyZXMgTW9kdWwgdW52ZXLDpG5kZXJ0IHdlaXRlci48L3A+YCkpOwogICAgICBpZiAoc3RhdGUuZXhpc3RpbmcuaGFzKCdwb3MnKSkgYm94LmFwcGVuZENoaWxkKGVsKGA8cD5EZWluIDxiPlBpY2t3YXJlIFBPUzwvYj4gbMOkdWZ0IGFscyBzZXBhcmF0IGJ1Y2hiYXJlcyBNb2R1bCB1bnZlcsOkbmRlcnQgd2VpdGVyLjwvcD5gKSk7CiAgICAgIGJveC5hcHBlbmRDaGlsZChlbChgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc3VidGxlKSI+RGVpbmVuIGdlbmF1ZW4gRnVua3Rpb25zdW1mYW5nIHNjaGF1ZW4gd2lyIGJlaW0gVW1zdGllZyBnZW1laW5zYW0gYW4uPC9wPmApKTsKICAgICAgcmV0dXJuIGJveDsKICAgIH0KCiAgICBmdW5jdGlvbiBidWlsZExvc2VCbG9jayhyKSB7CiAgICAgIGlmIChyLnJlY29tbWVuZGVkID09PSAnc3RhcnRlcicpIHJldHVybiBudWxsOwogICAgICBjb25zdCBjaGVhcGVyID0gUExBTl9PUkRFUltwbGFuSW5kZXgoci5yZWNvbW1lbmRlZCkgLSAxXTsKICAgICAgY29uc3QgaXRlbXMgPSBbXTsKICAgICAgci5zZWxlY3RlZC5mb3JFYWNoKGYgPT4geyBpZiAocGxhbkluZGV4KGYubWluUGxhbikgPiBwbGFuSW5kZXgoY2hlYXBlcikpIGl0ZW1zLnB1c2goZi5sYWJlbCk7IH0pOwogICAgICBpZiAoc3RhdGUucGxhdGZvcm0gPT09ICdzaG9waWZ5JyAmJiBzdGF0ZS5zaG9wcyA+IFBMQU5TW2NoZWFwZXJdLnNob3BzKSB7CiAgICAgICAgY29uc3QgY2FwID0gUExBTlNbY2hlYXBlcl0uc2hvcHMgPT09IEluZmluaXR5ID8gJ3VuYmVncmVuenQnIDogUExBTlNbY2hlYXBlcl0uc2hvcHM7CiAgICAgICAgaXRlbXMucHVzaChgQW5iaW5kdW5nIHZvbiAke3N0YXRlLnNob3BzID09PSA1ID8gJzUrJyA6IHN0YXRlLnNob3BzfSBPbmxpbmVzaG9wcyAoJHtQTEFOU1tjaGVhcGVyXS5sYWJlbH0gZXJsYXVidCBtYXguICR7Y2FwfSlgKTsKICAgICAgfQogICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3QgYm94ID0gZWwoYDxkaXYgY2xhc3M9Imxvc2UiPjxoND5EYXMgZW50aMOkbHQgZGVyIGfDvG5zdGlnZXJlIDxiPiR7UExBTlNbY2hlYXBlcl0ubGFiZWx9PC9iPi1QbGFuIG5pY2h0OjwvaDQ+PHVsPjwvdWw+PC9kaXY+YCk7CiAgICAgIGNvbnN0IHVsID0gYm94LnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7CiAgICAgIGl0ZW1zLmZvckVhY2godCA9PiB1bC5hcHBlbmRDaGlsZChlbChgPGxpPiR7SUNPTigneCcsIHsgc2l6ZTogMTYsIHN0cm9rZTogMi41IH0pfTxzcGFuPiR7dH08L3NwYW4+PC9saT5gKSkpOwogICAgICByZXR1cm4gYm94OwogICAgfQoKICAgIGZ1bmN0aW9uIGNvc3RGb3IocGxhbikgewogICAgICBjb25zdCBiID0gc3RhdGUuYmlsbGluZzsKICAgICAgY29uc3QgcCA9IFBMQU5TW3BsYW5dOwogICAgICBpZiAocGxhbiA9PT0gJ2VudGVycHJpc2UnKSB7CiAgICAgICAgcmV0dXJuIHsgcm93czogW3sgbGFiZWw6ICdFbnRlcnByaXNlLVBsYW4nLCB2YWw6ICdpbmRpdmlkdWVsbCcgfV0sIHRvdGFsOiBudWxsLCBjdXN0b206IHRydWUgfTsKICAgICAgfQogICAgICBjb25zdCBiYXNlID0gcFtiXTsKICAgICAgY29uc3QgZXh0cmFPcmRlcnMgPSBNYXRoLm1heCgwLCBzdGF0ZS52b2x1bWUgLSBwLmluY2x1ZGVkT3JkZXJzKTsKICAgICAgY29uc3Qgb3JkZXJDb3N0ID0gZXh0cmFPcmRlcnMgKiBwLm9yZGVyRmVlOwogICAgICBjb25zdCByb3dzID0gWwogICAgICAgIHsgbGFiZWw6IGAke3AubGFiZWx9LVBsYW4gKCR7YiA9PT0gJ3llYXJseScgPyAnSmFocmVzdmVydHJhZycgOiAnbW9uYXRsaWNoJ30pYCwgdmFsOiBldXIoYmFzZSksIHN1YjogYiA9PT0gJ3llYXJseScgPyAn4oiSMTAgJSBnZ8O8LiBtb25hdGxpY2gnIDogJycgfSwKICAgICAgICB7IGxhYmVsOiBgSW5rbHVzaXZlICR7Zm10KHAuaW5jbHVkZWRPcmRlcnMpfSBCZXN0ZWxsdW5nZW4vTW9uYXRgLCB2YWw6IENIRUNLLCBtdXRlZDogdHJ1ZSB9LAogICAgICBdOwogICAgICBpZiAoZXh0cmFPcmRlcnMgPiAwKSByb3dzLnB1c2goeyBsYWJlbDogYCsgJHtmbXQoZXh0cmFPcmRlcnMpfSB3ZWl0ZXJlIEJlc3RlbGx1bmdlbiDDlyAke3Aub3JkZXJGZWUudG9GaXhlZCgyKS5yZXBsYWNlKCcuJywgJywnKX0g4oKsYCwgdmFsOiBldXIob3JkZXJDb3N0KSB9KTsKICAgICAgY29uc3QgdG90YWwgPSBiYXNlICsgb3JkZXJDb3N0OwogICAgICByZXR1cm4geyByb3dzLCB0b3RhbCwgY3VzdG9tOiBmYWxzZSB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGJ1aWxkQ29tcGFyZVRhYmxlKHJlY29tbWVuZGVkUGxhbikgewogICAgICBjb25zdCB0YWJsZSA9IGVsKGA8dGFibGUgY2xhc3M9ImZjb21wYXJlIj48L3RhYmxlPmApOwogICAgICBjb25zdCBoZWFkUm93ID0gZWwoYDx0cj48dGg+PC90aD48L3RyPmApOwogICAgICBQTEFOX09SREVSLmZvckVhY2goayA9PiB7CiAgICAgICAgY29uc3QgcGwgPSBQTEFOU1trXTsKICAgICAgICBjb25zdCBpc1JlYyA9IGsgPT09IHJlY29tbWVuZGVkUGxhbjsKICAgICAgICBjb25zdCBwcmljZSA9IGsgPT09ICdlbnRlcnByaXNlJyA\/ICdBdWYgQW5mcmFnZScgOiBgJHtldXIocGxbc3RhdGUuYmlsbGluZ10pfS9NYDsKICAgICAgICBoZWFkUm93LmFwcGVuZENoaWxkKGVsKGA8dGggY2xhc3M9IiR7aXNSZWMgPyAncmVjJyA6ICcnfSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZjbiI+JHtwbC5sYWJlbH08L2Rpdj48ZGl2IGNsYXNzPSJmY3AiPiR7cHJpY2V9PC9kaXY+CiAgICAgICAgICAgICR7aXNSZWMgPyAnPHNwYW4gY2xhc3M9ImZjdGFnIj5EZWluZSBFbXBmZWhsdW5nPC9zcGFuPicgOiAnJ308L3RoPmApKTsKICAgICAgfSk7CiAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGVsKGA8dGhlYWQ+PC90aGVhZD5gKSkuYXBwZW5kQ2hpbGQoaGVhZFJvdyk7CiAgICAgIGNvbnN0IHRib2R5ID0gZWwoYDx0Ym9keT48L3Rib2R5PmApOwogICAgICBjb25zdCBhZGRSb3cgPSAoY2VsbHMsIGNscyA9ICcnKSA9PiB7IGNvbnN0IHRyID0gZWwoYDx0ciBjbGFzcz0iJHtjbHN9Ij48L3RyPmApOyBjZWxscy5mb3JFYWNoKHRkID0+IHRyLmFwcGVuZENoaWxkKHRkKSk7IHRib2R5LmFwcGVuZENoaWxkKHRyKTsgfTsKICAgICAgYWRkUm93KFtlbChgPHRkPlByZWlzIHBybyBNb25hdDwvdGQ+YCksIC4uLlBMQU5fT1JERVIubWFwKGsgPT4gZWwoYDx0ZCBjbGFzcz0iJHtrPT09cmVjb21tZW5kZWRQbGFuPydyZWMnOicnfSI+JHtrPT09J2VudGVycHJpc2UnPydBdWYgQW5mcmFnZSc6ZXVyKFBMQU5TW2tdW3N0YXRlLmJpbGxpbmddKX08L3RkPmApKV0sICdmY2luZm8nKTsKICAgICAgYWRkUm93KFtlbChgPHRkPklua2x1c2l2ZSBCZXN0ZWxsdW5nZW4vTW9uYXQ8L3RkPmApLCAuLi5QTEFOX09SREVSLm1hcChrID0+IGVsKGA8dGQgY2xhc3M9IiR7az09PXJlY29tbWVuZGVkUGxhbj8ncmVjJzonJ30iPiR7az09PSdlbnRlcnByaXNlJz8nQXVmIEFuZnJhZ2UnOmZtdChQTEFOU1trXS5pbmNsdWRlZE9yZGVycyl9PC90ZD5gKSldLCAnZmNpbmZvJyk7CiAgICAgIGlmIChzdGF0ZS5wbGF0Zm9ybSA9PT0gJ3Nob3BpZnknKSB7CiAgICAgICAgYWRkUm93KFtlbChgPHRkPk9ubGluZXNob3BzPC90ZD5gKSwgLi4uUExBTl9PUkRFUi5tYXAoayA9PiBlbChgPHRkIGNsYXNzPSIke2s9PT1yZWNvbW1lbmRlZFBsYW4\/J3JlYyc6Jyd9Ij4ke1BMQU5TW2tdLnNob3BzPT09SW5maW5pdHk\/J3VuYmVncmVuenQnOlBMQU5TW2tdLnNob3BzfTwvdGQ+YCkpXSwgJ2ZjaW5mbycpOwogICAgICB9CiAgICAgIEZFQVRVUkVfR1JPVVBTLmZvckVhY2goZyA9PiB7CiAgICAgICAgY29uc3QgdmlzaWJsZUZlYXR1cmVzID0gZy5mZWF0dXJlcy5maWx0ZXIoZmVhdHVyZVZpc2libGUpLmZpbHRlcihmID0+IHN0YXRlLmZlYXR1cmVzLmhhcyhmLmlkKSk7CiAgICAgICAgaWYgKHZpc2libGVGZWF0dXJlcy5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICBhZGRSb3coW2VsKGA8dGQgY29sc3Bhbj0iJHtQTEFOX09SREVSLmxlbmd0aCArIDF9Ij4ke0lDT04oZy5pY29uLCB7IHNpemU6IDE1IH0pfSR7Zy50aXRsZX08L3RkPmApXSwgJ2ZjZ3JvdXAnKTsKICAgICAgICB2aXNpYmxlRmVhdHVyZXMuZm9yRWFjaChmID0+IHsKICAgICAgICAgIGNvbnN0IGxhYmVsQ2VsbCA9IGVsKGA8dGQgY2xhc3M9ImZjZmVhdCI+PHNwYW4gY2xhc3M9ImZjbCI+JHtmLmxhYmVsfTwvc3Bhbj4ke2YucmVxdWlyZXNXbXNNb2R1bGUgPyBgPHNwYW4gY2xhc3M9ImZjbW9kIj4rIFBpY2t3YXJlIFdNUy1Nb2R1bDwvc3Bhbj5gIDogJyd9PC90ZD5gKTsKICAgICAgICAgIGNvbnN0IHBsYW5DZWxscyA9IFBMQU5fT1JERVIubWFwKGsgPT4gewogICAgICAgICAgICBjb25zdCBpbmNsdWRlZCA9IHBsYW5JbmRleChrKSA+PSBwbGFuSW5kZXgoZi5taW5QbGFuKTsKICAgICAgICAgICAgY29uc3QgY2xzID0gW2sgPT09IHJlY29tbWVuZGVkUGxhbiA\/ICdyZWMnIDogJycsIGluY2x1ZGVkID8gJ3llcycgOiAnbm8nXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpOwogICAgICAgICAgICByZXR1cm4gZWwoYDx0ZCBjbGFzcz0iJHtjbHN9Ij4ke2luY2x1ZGVkID8gQ0hFQ0sgOiBYSUNPTn08L3RkPmApOwogICAgICAgICAgfSk7CiAgICAgICAgICBhZGRSb3coW2xhYmVsQ2VsbCwgLi4ucGxhbkNlbGxzXSk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CiAgICAgIHJldHVybiB0YWJsZTsKICAgIH0KCiAgICBmdW5jdGlvbiBidWlsZEZ1bGxDb21wYXJlVGFibGUocmVjb21tZW5kZWRQbGFuKSB7CiAgICAgIGNvbnN0IHRhYmxlID0gZWwoYDx0YWJsZSBjbGFzcz0iZmNvbXBhcmUiPjwvdGFibGU+YCk7CiAgICAgIGNvbnN0IGhlYWRSb3cgPSBlbChgPHRyPjx0aD48L3RoPgogICAgICAgICAgPHRoIGNsYXNzPSJwbHVnaW4tY29sIj48ZGl2IGNsYXNzPSJmY24iPlBpY2t3YXJlIEVSUDwvZGl2PjxkaXYgY2xhc3M9ImZjc3ViIj5iaXNoZXJpZ2VzIFBsdWdpbjwvZGl2PjwvdGg+CiAgICAgICAgICA8dGggY2xhc3M9InBsdWdpbi1jb2wiPjxkaXYgY2xhc3M9ImZjbiI+UGlja3dhcmUgRVJQIFBybzwvZGl2PjxkaXYgY2xhc3M9ImZjc3ViIj5iaXNoZXJpZ2VzIFBsdWdpbjwvZGl2PjwvdGg+PC90cj5gKTsKICAgICAgUExBTl9PUkRFUi5mb3JFYWNoKGsgPT4gewogICAgICAgIGNvbnN0IHBsID0gUExBTlNba107CiAgICAgICAgY29uc3QgaXNSZWMgPSBrID09PSByZWNvbW1lbmRlZFBsYW47CiAgICAgICAgY29uc3QgcHJpY2UgPSBrID09PSAnZW50ZXJwcmlzZScgPyAnQXVmIEFuZnJhZ2UnIDogYCR7ZXVyKHBsW3N0YXRlLmJpbGxpbmddKX0vTWA7CiAgICAgICAgaGVhZFJvdy5hcHBlbmRDaGlsZChlbChgPHRoIGNsYXNzPSIke2lzUmVjID8gJ3JlYycgOiAnJ30iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmY24iPiR7cGwubGFiZWx9PC9kaXY+PGRpdiBjbGFzcz0iZmNwIj4ke3ByaWNlfTwvZGl2PgogICAgICAgICAgICAke2lzUmVjID8gJzxzcGFuIGNsYXNzPSJmY3RhZyI+RGVpbmUgRW1wZmVobHVuZzwvc3Bhbj4nIDogJyd9PC90aD5gKSk7CiAgICAgIH0pOwogICAgICB0YWJsZS5hcHBlbmRDaGlsZChlbChgPHRoZWFkPjwvdGhlYWQ+YCkpLmFwcGVuZENoaWxkKGhlYWRSb3cpOwogICAgICBjb25zdCB0Ym9keSA9IGVsKGA8dGJvZHk+PC90Ym9keT5gKTsKICAgICAgY29uc3QgdG90YWxDb2xzID0gUExBTl9PUkRFUi5sZW5ndGggKyAzOwogICAgICBGVUxMX01BVFJJWC5mb3JFYWNoKGdyb3VwID0+IHsKICAgICAgICB0Ym9keS5hcHBlbmRDaGlsZChlbChgPHRyIGNsYXNzPSJmY2dyb3VwIj48dGQgY29sc3Bhbj0iJHt0b3RhbENvbHN9Ij4ke0lDT04oZ3JvdXAuaWNvbiwgeyBzaXplOiAxNSB9KX0ke2dyb3VwLnRpdGxlfTwvdGQ+PC90cj5gKSk7CiAgICAgICAgZ3JvdXAucm93cy5mb3JFYWNoKHJvdyA9PiB7CiAgICAgICAgICBjb25zdCB0ciA9IGVsKGA8dHI+PC90cj5gKTsKICAgICAgICAgIGNvbnN0IGlzTmV3ID0gIXJvdy5sZWdhY3k7CiAgICAgICAgICB0ci5hcHBlbmRDaGlsZChlbChgPHRkIGNsYXNzPSJmY2ZlYXQiPjxzcGFuIGNsYXNzPSJmY2wiPiR7cm93LmxhYmVsfSR7aXNOZXcgPyAnPHNwYW4gY2xhc3M9Im5ld3RhZyI+TmV1IGltIFBsYW48L3NwYW4+JyA6ICcnfTwvc3Bhbj4ke3Jvdy53bXMgPyBgPHNwYW4gY2xhc3M9ImZjbW9kIj4rIFBpY2t3YXJlIFdNUy1Nb2R1bDwvc3Bhbj5gIDogJyd9PC90ZD5gKSk7CiAgICAgICAgICBpZiAocm93LmxlZ2FjeSA9PT0gJ3dtcycpIHsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoZWwoYDx0ZCBjbGFzcz0icGx1Z2luLWNvbCIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9InZpYW1vZCI+V01TLVBsdWdpbjwvc3Bhbj48L3RkPmApKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGluRXJwID0gcm93LmxlZ2FjeSA9PT0gJ2VycCc7CiAgICAgICAgICAgIGNvbnN0IGluUHJvID0gcm93LmxlZ2FjeSA9PT0gJ2VycCcgfHwgcm93LmxlZ2FjeSA9PT0gJ2VycC1wcm8nOwogICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChlbChgPHRkIGNsYXNzPSJwbHVnaW4tY29sICR7aW5FcnAgPyAneWVzJyA6ICdubyd9Ij4ke2luRXJwID8gQ0hFQ0sgOiBYSUNPTn08L3RkPmApKTsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoZWwoYDx0ZCBjbGFzcz0icGx1Z2luLWNvbCAke2luUHJvID8gJ3llcycgOiAnbm8nfSI+JHtpblBybyA\/IENIRUNLIDogWElDT059PC90ZD5gKSk7CiAgICAgICAgICB9CiAgICAgICAgICBQTEFOX09SREVSLmZvckVhY2goayA9PiB7CiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVkID0gcGxhbkluZGV4KGspID49IHBsYW5JbmRleChyb3cubWluUGxhbik7CiAgICAgICAgICAgIGNvbnN0IGNscyA9IFtrID09PSByZWNvbW1lbmRlZFBsYW4gPyAncmVjJyA6ICcnLCBpbmNsdWRlZCA\/ICd5ZXMnIDogJ25vJ10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoZWwoYDx0ZCBjbGFzcz0iJHtjbHN9Ij4ke2luY2x1ZGVkID8gQ0hFQ0sgOiBYSUNPTn08L3RkPmApKTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGJvZHkpOwogICAgICByZXR1cm4gdGFibGU7CiAgICB9CgogICAgZnVuY3Rpb24gb3BlbkNvbXBhcmVNb2RhbChyZWNvbW1lbmRlZFBsYW4pIHsKICAgICAgY29uc3Qgb3ZlcmxheSA9IGVsKGA8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCI+PC9kaXY+YCk7CiAgICAgIGNvbnN0IHBhbmVsID0gZWwoYDxkaXYgY2xhc3M9Im1vZGFsLXBhbmVsIj48L2Rpdj5gKTsKICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZWwoYDxkaXYgY2xhc3M9Im1vZGFsLWhlYWQiPgogICAgICAgICAgPGRpdj48aDM+QWxsZSBQbMOkbmUgJiBGdW5rdGlvbmVuIGltIFZlcmdsZWljaDwvaDM+PHA+U28gc2llaHN0IGR1IGluIGplZGVyIFJpY2h0dW5nLCB3YXMgZWluIGFuZGVyZXIgUGxhbiB6dXPDpHR6bGljaCBiaWV0ZXQgb2RlciBuaWNodCBlbnRow6RsdC48L3A+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkLWFjdGlvbnMiPgogICAgICAgICAgICA8YSBjbGFzcz0ibW9kYWwtZmVhdGxpbmsiIGhyZWY9Imh0dHBzOi8vd3d3LnBpY2t3YXJlLmNvbS9kZS9mdW5rdGlvbnN1ZWJlcnNpY2h0IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+JHtJQ09OKCdmaWxlJywgeyBzaXplOiAxNSB9KX0gVm9sbHN0w6RuZGlnZSBGdW5rdGlvbnPDvGJlcnNpY2h0PC9hPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtb2RhbC1jbG9zZSIgYXJpYS1sYWJlbD0iU2NobGllw59lbiI+JHtJQ09OKCd4JywgeyBzaXplOiAxOCB9KX08L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PjwvZGl2PmApKTsKICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBlbChgPGRpdiBjbGFzcz0iZmNvbXBhcmUtc2Nyb2xsIj48L2Rpdj5gKTsKICAgICAgY29uc3Qgc2hvd1BsdWdpbkNvbXBhcmUgPSBzdGF0ZS51c2VyVHlwZSA9PT0gJ2V4aXN0aW5nJyAmJiBzdGF0ZS5wbGF0Zm9ybSA9PT0gJ3Nob3B3YXJlNic7CiAgICAgIGlmIChzaG93UGx1Z2luQ29tcGFyZSkgewogICAgICAgIGNvbnN0IHRhYnMgPSBlbChgPGRpdiBjbGFzcz0ibW9kYWwtdGFicyIgcm9sZT0idGFibGlzdCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLXRhYiBvbiIgcm9sZT0idGFiIiBkYXRhLXRhYj0ic2VsZWN0ZWQiPkF1c2dld8OkaGx0ZSBGdW5rdGlvbmVuPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im1vZGFsLXRhYiIgcm9sZT0idGFiIiBkYXRhLXRhYj0iZnVsbCI+QWxsZSBGdW5rdGlvbmVuIGltIFBsdWdpbi0gdW5kIFBsYW52ZXJnbGVpY2g8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHRhYnMpOwogICAgICAgIGNvbnN0IHJlbmRlclRhYiA9ICh3aGljaCkgPT4gewogICAgICAgICAgdGFicy5xdWVyeVNlbGVjdG9yQWxsKCcubW9kYWwtdGFiJykuZm9yRWFjaChiID0+IGIuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCBiLmRhdGFzZXQudGFiID09PSB3aGljaCkpOwogICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICBpZiAod2hpY2ggPT09ICdzZWxlY3RlZCcpIHsKICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kQ2hpbGQoYnVpbGRDb21wYXJlVGFibGUocmVjb21tZW5kZWRQbGFuKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzY3JvbGxlci5hcHBlbmRDaGlsZChlbChgPHAgY2xhc3M9ImZjb21wYXJlLWludHJvIj5IaWVyIHNpZWhzdCBkdSwgd2VsY2hlIEZ1bmt0aW9uZW4gYXVzIGRlbiBiaXNoZXJpZ2VuIFBsdWdpbnMgPGI+UGlja3dhcmUgRVJQPC9iPiB1bmQgPGI+UGlja3dhcmUgRVJQIFBybzwvYj4gaW4gd2VsY2hlbSBQbGFuIGVudGhhbHRlbiBzaW5kIOKAkyB1bmQgd2VsY2hlIEZ1bmt0aW9uZW4gbWl0IGRlbSBVbXN0aWVnIGF1ZiBlaW5lbiBQbGFuIG5ldSBmw7xyIGRpY2ggdmVyZsO8Z2JhciB3ZXJkZW4uPC9wPmApKTsKICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kQ2hpbGQoYnVpbGRGdWxsQ29tcGFyZVRhYmxlKHJlY29tbWVuZGVkUGxhbikpOwogICAgICAgICAgICBzY3JvbGxlci5hcHBlbmRDaGlsZChlbChgPGRpdiBjbGFzcz0iZmNsZWdlbmQiPgogICAgICAgICAgICAgICAgPHNwYW4+JHtDSEVDS30gZW50aGFsdGVuPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JHtYSUNPTn0gbmljaHQgZW50aGFsdGVuPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+PHNwYW4gY2xhc3M9Im5ld3RhZyIgc3R5bGU9Im1hcmdpbi1sZWZ0OjAiPk5ldSBpbSBQbGFuPC9zcGFuPiB3YXIgbmljaHQgVGVpbCB2b24gRVJQIC8gRVJQIFBybzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJ2aWFtb2QiPldNUy1QbHVnaW48L3NwYW4+IEZ1bmt0aW9uIGxpZWYgw7xiZXIgZGFzIGJpc2hlcmlnZSBQaWNrd2FyZS1XTVMtUGx1Z2luIHVuZCBpc3QgaGV1dGUgaW0gc2VwYXJhdCBidWNoYmFyZW4gV01TLU1vZHVsIGVudGhhbHRlbjwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj5gKSk7CiAgICAgICAgICB9CiAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb3AgPSAwOwogICAgICAgIH07CiAgICAgICAgdGFicy5xdWVyeVNlbGVjdG9yQWxsKCcubW9kYWwtdGFiJykuZm9yRWFjaChiID0+IGIub25jbGljayA9ICgpID0+IHJlbmRlclRhYihiLmRhdGFzZXQudGFiKSk7CiAgICAgICAgcmVuZGVyVGFiKCdzZWxlY3RlZCcpOwogICAgICB9IGVsc2UgewogICAgICAgIHNjcm9sbGVyLmFwcGVuZENoaWxkKGJ1aWxkQ29tcGFyZVRhYmxlKHJlY29tbWVuZGVkUGxhbikpOwogICAgICB9CiAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHNjcm9sbGVyKTsKICAgICAgb3ZlcmxheS5hcHBlbmRDaGlsZChwYW5lbCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdy1wbGFuZmluZGVyJykuYXBwZW5kQ2hpbGQob3ZlcmxheSk7CiAgICAgIGNvbnN0IGNsb3NlID0gKCkgPT4geyBvdmVybGF5LnJlbW92ZSgpOyBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXkpOyB9OwogICAgICBmdW5jdGlvbiBvbktleShlKSB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGNsb3NlKCk7IH0KICAgICAgb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcubW9kYWwtY2xvc2UnKS5vbmNsaWNrID0gY2xvc2U7CiAgICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBpZiAoZS50YXJnZXQgPT09IG92ZXJsYXkpIGNsb3NlKCk7IH0pOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXkpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbmRlclByb2dyZXNzKCkgewogICAgICBjb25zdCBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B3cGYtcHJvZ3Jlc3MnKTsKICAgICAgcC5pbm5lckhUTUwgPSAnJzsKICAgICAgY3VycmVudEZsb3coKS5mb3JFYWNoKChfLCBpKSA9PiB7CiAgICAgICAgY29uc3Qgc2VnID0gZWwoYDxkaXYgY2xhc3M9InNlZyI+PGk+PC9pPjwvZGl2PmApOwogICAgICAgIGlmIChpIDwgc3RhdGUuc3RlcCkgc2VnLmNsYXNzTGlzdC5hZGQoJ2RvbmUnKTsKICAgICAgICBpZiAoaSA9PT0gc3RhdGUuc3RlcCkgc2VnLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgIHAuYXBwZW5kQ2hpbGQoc2VnKTsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gbmF2QnV0dG9ucyh7IG5leHRMYWJlbCA9ICdXZWl0ZXInLCBjYW5OZXh0ID0gdHJ1ZSwgaGlkZUJhY2sgPSBmYWxzZSwgb25OZXh0ID0gbnVsbCB9ID0ge30pIHsKICAgICAgY29uc3QgbmF2ID0gZWwoYDxkaXYgY2xhc3M9Im5hdiI+PC9kaXY+YCk7CiAgICAgIGNvbnN0IGJhY2sgPSBlbChgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiPlp1csO8Y2s8L2J1dHRvbj5gKTsKICAgICAgYmFjay5vbmNsaWNrID0gKCkgPT4geyBzdGF0ZS5zdGVwLS07IHJlbmRlcigpOyB9OwogICAgICBpZiAoaGlkZUJhY2spIGJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwogICAgICBjb25zdCBuZXh0ID0gZWwoYDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+JHtuZXh0TGFiZWx9IOKGkjwvYnV0dG9uPmApOwogICAgICBuZXh0LmRpc2FibGVkID0gIWNhbk5leHQ7CiAgICAgIG5leHQub25jbGljayA9ICgpID0+IHsgaWYgKG9uTmV4dCkgb25OZXh0KCk7IHN0YXRlLnN0ZXArKzsgcmVuZGVyKCk7IH07CiAgICAgIG5hdi5hcHBlbmQoYmFjaywgbmV4dCk7CiAgICAgIHJldHVybiBuYXY7CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlFeGlzdGluZ1ByZWZpbGwoKSB7CiAgICAgIGNvbnN0IHJlYWwgPSBbLi4uc3RhdGUuZXhpc3RpbmddLmZpbHRlcihpZCA9PiBpZCAhPT0gJ25ldycpOwogICAgICBjb25zdCBzaWcgPSAoc3RhdGUuY3VycmVudFBsYW4gfHwgJycpICsgJ3wnICsgcmVhbC5zbGljZSgpLnNvcnQoKS5qb2luKCcsJyk7CiAgICAgIGlmIChzaWcgPT09IHN0YXRlLl9wcmVmaWxsU2lnKSByZXR1cm47CiAgICAgIChzdGF0ZS5fcHJlZmlsbGVkIHx8IFtdKS5mb3JFYWNoKGZpZCA9PiBzdGF0ZS5mZWF0dXJlcy5kZWxldGUoZmlkKSk7CiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KCk7CiAgICAgIGlmIChzdGF0ZS5jdXJyZW50UGxhbikgewogICAgICAgIEZFQVRVUkVfR1JPVVBTLmZsYXRNYXAoZyA9PiBnLmZlYXR1cmVzKQogICAgICAgICAgLmZpbHRlcihmID0+IGZlYXR1cmVWaXNpYmxlKGYpICYmIHBsYW5JbmRleChmLm1pblBsYW4pIDw9IHBsYW5JbmRleChzdGF0ZS5jdXJyZW50UGxhbikgJiYgKCFmLnJlcXVpcmVzV21zTW9kdWxlIHx8IHN0YXRlLmV4aXN0aW5nLmhhcygnd21zJykpKQogICAgICAgICAgLmZvckVhY2goZiA9PiBuZXh0LmFkZChmLmlkKSk7CiAgICAgIH0KICAgICAgcmVhbC5mb3JFYWNoKGlkID0+IChQTFVHSU5fRkVBVFVSRV9NQVBbaWRdIHx8IFtdKS5maWx0ZXIoZmlkID0+IGZlYXR1cmVWaXNpYmxlKGZlYXR1cmVCeUlkKGZpZCkpKS5mb3JFYWNoKGZpZCA9PiBuZXh0LmFkZChmaWQpKSk7CiAgICAgIG5leHQuZm9yRWFjaChmaWQgPT4gc3RhdGUuZmVhdHVyZXMuYWRkKGZpZCkpOwogICAgICBzdGF0ZS5fcHJlZmlsbGVkID0gWy4uLm5leHRdOwogICAgICBzdGF0ZS5fcHJlZmlsbFNpZyA9IHNpZzsKICAgIH0KCiAgICBmdW5jdGlvbiByZW5kZXJTdGVwSW50cm8oKSB7CiAgICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdwZi1jYXJkJyk7CiAgICAgIGMuYXBwZW5kKAogICAgICAgIGVsKGA8cCBjbGFzcz0ic3RlcC1leWVicm93Ij4ke3N0ZXBFeWVicm93KCl9PC9wPmApLAogICAgICAgIGVsKGA8aDIgY2xhc3M9InN0ZXAtdGl0bGUiPk1pdCB3ZWxjaGVtIFNob3BzeXN0ZW0gbcO2Y2h0ZXN0IGR1IFBpY2t3YXJlIG51dHplbj88L2gyPmApLAogICAgICAgIGVsKGA8cCBjbGFzcz0ic3RlcC1zdWIiPkRhbWl0IHdpciBkaXIgZGllIHBhc3NlbmRlbiBGcmFnZW4gc3RlbGxlbiBrw7ZubmVuLjwvcD5gKSwKICAgICAgKTsKICAgICAgY29uc3QgdG9nZ2xlID0gZWwoYDxkaXYgY2xhc3M9InRvZ2dsZS1yb3ciPjwvZGl2PmApOwogICAgICBQTEFURk9STV9PUFRJT05TLmZvckVhY2gobyA9PiB7CiAgICAgICAgY29uc3QgYnRuID0gZWwoYDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGYtJHtvLmlkfSAke3N0YXRlLnBsYXRmb3JtID09PSBvLmlkID8gJ29uJyA6ICcnfSI+JHtvLnR9PC9idXR0b24+YCk7CiAgICAgICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgICBpZiAoc3RhdGUucGxhdGZvcm0gIT09IG8uaWQpIHsKICAgICAgICAgICAgKHN0YXRlLl9wcmVmaWxsZWQgfHwgW10pLmZvckVhY2goZmlkID0+IHN0YXRlLmZlYXR1cmVzLmRlbGV0ZShmaWQpKTsKICAgICAgICAgICAgc3RhdGUuZXhpc3RpbmcuY2xlYXIoKTsgc3RhdGUud21zID0gZmFsc2U7IHN0YXRlLnBvcyA9IGZhbHNlOwogICAgICAgICAgICBzdGF0ZS5leGlzdGluZ01vZGUgPSBudWxsOyBzdGF0ZS5jdXJyZW50UGxhbiA9IG51bGw7CiAgICAgICAgICAgIHN0YXRlLl9wcmVmaWxsU2lnID0gJyc7IHN0YXRlLl9wcmVmaWxsZWQgPSBbXTsKICAgICAgICAgIH0KICAgICAgICAgIHN0YXRlLnBsYXRmb3JtID0gby5pZDsKICAgICAgICAgIHJlbmRlclJlZnJlc2gocmVuZGVyU3RlcEludHJvKTsKICAgICAgICB9OwogICAgICAgIHRvZ2dsZS5hcHBlbmRDaGlsZChidG4pOwogICAgICB9KTsKICAgICAgYy5hcHBlbmRDaGlsZCh0b2dnbGUpOwogICAgICBjb25zdCB1ZiA9IGVsKGA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjI2cHgiPjwvZGl2PmApOwogICAgICB1Zi5hcHBlbmQoZWwoYDxkaXYgY2xhc3M9InFoIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPk51dHp0IGR1IFBpY2t3YXJlIHNjaG9uPzwvZGl2PmApKTsKICAgICAgY29uc3QgZ3JpZCA9IGVsKGA8ZGl2IGNsYXNzPSJvcHQtZ3JpZCI+PC9kaXY+YCk7CiAgICAgIFVTRVJfVFlQRV9PUFRJT05TLmZvckVhY2gobyA9PiB7CiAgICAgICAgY29uc3QgaXNTZWwgPSBzdGF0ZS51c2VyVHlwZSA9PT0gby5pZDsKICAgICAgICBjb25zdCBvcHQgPSBlbChgPGRpdiBjbGFzcz0ib3B0IHJhZGlvICR7aXNTZWwgPyAnc2VsJyA6ICcnfSIgcm9sZT0icmFkaW8iIGFyaWEtY2hlY2tlZD0iJHtpc1NlbH0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hlY2siPjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQiPiR7by50fTwvc3Bhbj48c3BhbiBjbGFzcz0iZCI+JHtvLmR9PC9zcGFuPjwvZGl2PmApOwogICAgICAgIG9wdC5vbmNsaWNrID0gKCkgPT4gewogICAgICAgICAgc3RhdGUudXNlclR5cGUgPSBvLmlkOwogICAgICAgICAgaWYgKG8uaWQgPT09ICduZXcnKSB7IHN0YXRlLmV4aXN0aW5nLmNsZWFyKCk7IHN0YXRlLndtcyA9IGZhbHNlOyBzdGF0ZS5wb3MgPSBmYWxzZTsgc3RhdGUuZXhpc3RpbmdNb2RlID0gbnVsbDsgc3RhdGUuY3VycmVudFBsYW4gPSBudWxsOyB9CiAgICAgICAgICByZW5kZXJSZWZyZXNoKHJlbmRlclN0ZXBJbnRybyk7CiAgICAgICAgfTsKICAgICAgICBncmlkLmFwcGVuZENoaWxkKG9wdCk7CiAgICAgIH0pOwogICAgICB1Zi5hcHBlbmRDaGlsZChncmlkKTsKICAgICAgYy5hcHBlbmRDaGlsZCh1Zik7CiAgICAgIGMuYXBwZW5kQ2hpbGQobmF2QnV0dG9ucyh7IGhpZGVCYWNrOiB0cnVlLCBjYW5OZXh0OiAhIXN0YXRlLnVzZXJUeXBlICYmICEhc3RhdGUucGxhdGZvcm0gfSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbmRlclN0ZXBQcm9kdWN0cygpIHsKICAgICAgaWYgKHN0YXRlLnBsYXRmb3JtID09PSAnc2hvcGlmeScpIHJldHVybiByZW5kZXJTdGVwUHJvZHVjdHNTaG9waWZ5KCk7CiAgICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdwZi1jYXJkJyk7CiAgICAgIGMuYXBwZW5kKAogICAgICAgIGVsKGA8cCBjbGFzcz0ic3RlcC1leWVicm93Ij4ke3N0ZXBFeWVicm93KCl9PC9wPmApLAogICAgICAgIGVsKGA8aDIgY2xhc3M9InN0ZXAtdGl0bGUiPldlbGNoZSBQaWNrd2FyZS1Qcm9kdWt0ZSBudXR6dCBkdSBiZXJlaXRzPzwvaDI+YCksCiAgICAgICAgZWwoYDxwIGNsYXNzPSJzdGVwLXN1YiI+SGlsZnQgdW5zLCBkZWluZSBFbXBmZWhsdW5nIHVuZCBkZW4gVW1zdGllZyBiZXNzZXIgZWluenVvcmRuZW4uIE1laHJmYWNoYXVzd2FobCBtw7ZnbGljaC48L3A+YCksCiAgICAgICk7CiAgICAgIGMuYXBwZW5kQ2hpbGQoYnVpbGRQbHVnaW5HcmlkKHJlbmRlclN0ZXBQcm9kdWN0cykpOwogICAgICBjLmFwcGVuZENoaWxkKG5hdkJ1dHRvbnMoeyBvbk5leHQ6IGFwcGx5RXhpc3RpbmdQcmVmaWxsIH0pKTsKICAgIH0KCiAgICBmdW5jdGlvbiBidWlsZFBsdWdpbkdyaWQocmVyZW5kZXIpIHsKICAgICAgY29uc3QgUkVRVUlSRVNfRVJQID0gWydlcnAtcHJvJywgJ3dtcycsICdwb3MnXTsKICAgICAgY29uc3QgZXJwTG9ja2VkID0gUkVRVUlSRVNfRVJQLnNvbWUoZCA9PiBzdGF0ZS5leGlzdGluZy5oYXMoZCkpOwogICAgICBjb25zdCBncmlkID0gZWwoYDxkaXYgY2xhc3M9Im9wdC1ncmlkIj48L2Rpdj5gKTsKICAgICAgRVhJU1RJTkdfUExVR0lOUy5maWx0ZXIoZmVhdHVyZVZpc2libGUpLmZvckVhY2gocGwgPT4gewogICAgICAgIGNvbnN0IGlzU2VsID0gc3RhdGUuZXhpc3RpbmcuaGFzKHBsLmlkKTsKICAgICAgICBjb25zdCBsb2NrZWQgPSBwbC5pZCA9PT0gJ2VycCcgJiYgZXJwTG9ja2VkOwogICAgICAgIGNvbnN0IGRlc2MgPSBsb2NrZWQgPyAnQmFzaXMg4oCTIGVyZm9yZGVybGljaCBmw7xyIEVSUCBQcm8sIFdNUyAmIFBPUycgOiBwbC5kOwogICAgICAgIGNvbnN0IG1hcmsgPSBpc1NlbCA\/IChsb2NrZWQgPyBJQ09OKCdsb2NrJywgeyBzaXplOiAxMiB9KSA6IENIRUNLKSA6ICcnOwogICAgICAgIGNvbnN0IG8gPSBlbChgPGRpdiBjbGFzcz0ib3B0ICR7aXNTZWwgPyAnc2VsJyA6ICcnfSAke2xvY2tlZCA\/ICdsb2NrZWQnIDogJyd9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrIj4ke21hcmt9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idCI+JHtwbC50fTwvc3Bhbj48c3BhbiBjbGFzcz0iZCI+JHtkZXNjfTwvc3Bhbj48L2Rpdj5gKTsKICAgICAgICBvLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBpZCA9IHBsLmlkOwogICAgICAgICAgaWYgKHN0YXRlLmV4aXN0aW5nLmhhcyhpZCkpIHsKICAgICAgICAgICAgaWYgKGlkID09PSAnZXJwJyAmJiBSRVFVSVJFU19FUlAuc29tZShkID0+IHN0YXRlLmV4aXN0aW5nLmhhcyhkKSkpIHJldHVybjsKICAgICAgICAgICAgc3RhdGUuZXhpc3RpbmcuZGVsZXRlKGlkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLmV4aXN0aW5nLmFkZChpZCk7CiAgICAgICAgICAgIGlmIChSRVFVSVJFU19FUlAuaW5jbHVkZXMoaWQpKSBzdGF0ZS5leGlzdGluZy5hZGQoJ2VycCcpOwogICAgICAgICAgfQogICAgICAgICAgc3RhdGUud21zID0gc3RhdGUuZXhpc3RpbmcuaGFzKCd3bXMnKTsKICAgICAgICAgIHN0YXRlLnBvcyA9IHN0YXRlLmV4aXN0aW5nLmhhcygncG9zJyk7CiAgICAgICAgICByZW5kZXJSZWZyZXNoKHJlcmVuZGVyKTsKICAgICAgICB9OwogICAgICAgIGdyaWQuYXBwZW5kQ2hpbGQobyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZ3JpZDsKICAgIH0KCiAgICBjb25zdCBFWElTVElOR19NT0RFX09QVElPTlMgPSBbCiAgICAgIHsgaWQ6ICdwbGFuJywgICAgdDogJ0ljaCBudXR6ZSBlaW5lbiBQaWNrd2FyZS1QbGFuJywgZDogJ1N0YXJ0ZXIsIEFkdmFuY2VkIG9kZXIgUHJvZmVzc2lvbmFsIOKAkyB1bnRlciBTaG9waWZ5IG9kZXIgU2hvcHdhcmUgNicgfSwKICAgICAgeyBpZDogJ3BsdWdpbnMnLCB0OiAnSWNoIG51dHplIFBpY2t3YXJlLVBsdWdpbnMnLCBkOiAnUGlja3dhcmUgRVJQLCBFUlAgUHJvIG9kZXIgV01TIHVudGVyIFNob3B3YXJlIDYnIH0sCiAgICBdOwogICAgY29uc3QgQ1VSUkVOVF9QTEFOX09QVElPTlMgPSBbJ3N0YXJ0ZXInLCAnYWR2YW5jZWQnLCAncHJvZmVzc2lvbmFsJ107CgogICAgZnVuY3Rpb24gcmVuZGVyU3RlcFByb2R1Y3RzU2hvcGlmeSgpIHsKICAgICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd3BmLWNhcmQnKTsKICAgICAgYy5hcHBlbmQoCiAgICAgICAgZWwoYDxwIGNsYXNzPSJzdGVwLWV5ZWJyb3ciPiR7c3RlcEV5ZWJyb3coKX08L3A+YCksCiAgICAgICAgZWwoYDxoMiBjbGFzcz0ic3RlcC10aXRsZSI+V2FzIG51dHp0IGR1IGJlcmVpdHM\/PC9oMj5gKSwKICAgICAgICBlbChgPHAgY2xhc3M9InN0ZXAtc3ViIj5XaXIgd8OkaGxlbiBpbSBuw6RjaHN0ZW4gU2Nocml0dCBkaWUgRnVua3Rpb25lbiB2b3IsIGRpZSBkdSBoZXV0ZSBzY2hvbiBudXR6dC48L3A+YCksCiAgICAgICk7CiAgICAgIGNvbnN0IG1vZGVHcmlkID0gZWwoYDxkaXYgY2xhc3M9Im9wdC1ncmlkIj48L2Rpdj5gKTsKICAgICAgRVhJU1RJTkdfTU9ERV9PUFRJT05TLmZvckVhY2gobyA9PiB7CiAgICAgICAgY29uc3QgaXNTZWwgPSBzdGF0ZS5leGlzdGluZ01vZGUgPT09IG8uaWQ7CiAgICAgICAgY29uc3Qgb3B0ID0gZWwoYDxkaXYgY2xhc3M9Im9wdCByYWRpbyAke2lzU2VsID8gJ3NlbCcgOiAnJ30iIHJvbGU9InJhZGlvIiBhcmlhLWNoZWNrZWQ9IiR7aXNTZWx9Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrIj48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Ij4ke28udH08L3NwYW4+PHNwYW4gY2xhc3M9ImQiPiR7by5kfTwvc3Bhbj48L2Rpdj5gKTsKICAgICAgICBvcHQub25jbGljayA9ICgpID0+IHsKICAgICAgICAgIGlmIChzdGF0ZS5leGlzdGluZ01vZGUgIT09IG8uaWQpIHsKICAgICAgICAgICAgc3RhdGUuZXhpc3RpbmdNb2RlID0gby5pZDsgc3RhdGUuY3VycmVudFBsYW4gPSBudWxsOwogICAgICAgICAgICBzdGF0ZS5leGlzdGluZy5jbGVhcigpOyBzdGF0ZS53bXMgPSBmYWxzZTsgc3RhdGUucG9zID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICByZW5kZXJSZWZyZXNoKHJlbmRlclN0ZXBQcm9kdWN0c1Nob3BpZnkpOwogICAgICAgIH07CiAgICAgICAgbW9kZUdyaWQuYXBwZW5kQ2hpbGQob3B0KTsKICAgICAgfSk7CiAgICAgIGMuYXBwZW5kQ2hpbGQobW9kZUdyaWQpOwoKICAgICAgaWYgKHN0YXRlLmV4aXN0aW5nTW9kZSA9PT0gJ3BsYW4nKSB7CiAgICAgICAgY29uc3Qgd3JhcCA9IGVsKGA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjI2cHgiPjwvZGl2PmApOwogICAgICAgIHdyYXAuYXBwZW5kKGVsKGA8ZGl2IGNsYXNzPSJxaCIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5XZWxjaGVuIFBsYW4gbnV0enQgZHUgYWt0dWVsbD88L2Rpdj5gKSk7CiAgICAgICAgY29uc3QgZ3JpZCA9IGVsKGA8ZGl2IGNsYXNzPSJvcHQtZ3JpZCI+PC9kaXY+YCk7CiAgICAgICAgQ1VSUkVOVF9QTEFOX09QVElPTlMuZm9yRWFjaChrID0+IHsKICAgICAgICAgIGNvbnN0IGlzU2VsID0gc3RhdGUuY3VycmVudFBsYW4gPT09IGs7CiAgICAgICAgICBjb25zdCBvcHQgPSBlbChgPGRpdiBjbGFzcz0ib3B0IHJhZGlvICR7aXNTZWwgPyAnc2VsJyA6ICcnfSIgcm9sZT0icmFkaW8iIGFyaWEtY2hlY2tlZD0iJHtpc1NlbH0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVjayI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Ij4ke1BMQU5TW2tdLmxhYmVsfTwvc3Bhbj48c3BhbiBjbGFzcz0iZCI+JHtldXIoUExBTlNba11bc3RhdGUuYmlsbGluZ10pfS9Nb25hdDwvc3Bhbj48L2Rpdj5gKTsKICAgICAgICAgIG9wdC5vbmNsaWNrID0gKCkgPT4geyBzdGF0ZS5jdXJyZW50UGxhbiA9IGs7IHJlbmRlclJlZnJlc2gocmVuZGVyU3RlcFByb2R1Y3RzU2hvcGlmeSk7IH07CiAgICAgICAgICBncmlkLmFwcGVuZENoaWxkKG9wdCk7CiAgICAgICAgfSk7CiAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChncmlkKTsKICAgICAgICBjb25zdCBoYXNXbXMgPSBzdGF0ZS5leGlzdGluZy5oYXMoJ3dtcycpOwogICAgICAgIGNvbnN0IHdtc09wdCA9IGVsKGA8ZGl2IGNsYXNzPSJvcHQgJHtoYXNXbXMgPyAnc2VsJyA6ICcnfSIgc3R5bGU9Im1hcmdpbi10b3A6MTJweCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVjayI+JHtoYXNXbXMgPyBDSEVDSyA6ICcnfTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQiPisgUGlja3dhcmUgV01TLU1vZHVsPC9zcGFuPjxzcGFuIGNsYXNzPSJkIj5JY2ggbnV0emUgenVzw6R0emxpY2ggZGllIFdNUy1BcHAgZsO8ciBtb2JpbGVzIEtvbW1pc3Npb25pZXJlbjwvc3Bhbj48L2Rpdj5gKTsKICAgICAgICB3bXNPcHQub25jbGljayA9ICgpID0+IHsKICAgICAgICAgIGhhc1dtcyA\/IHN0YXRlLmV4aXN0aW5nLmRlbGV0ZSgnd21zJykgOiBzdGF0ZS5leGlzdGluZy5hZGQoJ3dtcycpOwogICAgICAgICAgc3RhdGUud21zID0gc3RhdGUuZXhpc3RpbmcuaGFzKCd3bXMnKTsKICAgICAgICAgIHJlbmRlclJlZnJlc2gocmVuZGVyU3RlcFByb2R1Y3RzU2hvcGlmeSk7CiAgICAgICAgfTsKICAgICAgICB3cmFwLmFwcGVuZENoaWxkKHdtc09wdCk7CiAgICAgICAgYy5hcHBlbmRDaGlsZCh3cmFwKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS5leGlzdGluZ01vZGUgPT09ICdwbHVnaW5zJykgewogICAgICAgIGNvbnN0IHdyYXAgPSBlbChgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoyNnB4Ij48L2Rpdj5gKTsKICAgICAgICB3cmFwLmFwcGVuZChlbChgPGRpdiBjbGFzcz0icWgiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjhweCI+V2VsY2hlIFBpY2t3YXJlLVBsdWdpbnMgbnV0enQgZHUgdW50ZXIgU2hvcHdhcmUgNj88L2Rpdj5gKSk7CiAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChidWlsZFBsdWdpbkdyaWQocmVuZGVyU3RlcFByb2R1Y3RzU2hvcGlmeSkpOwogICAgICAgIGMuYXBwZW5kQ2hpbGQod3JhcCk7CiAgICAgIH0KICAgICAgYy5hcHBlbmRDaGlsZChuYXZCdXR0b25zKHsgb25OZXh0OiBhcHBseUV4aXN0aW5nUHJlZmlsbCB9KSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVuZGVyU3RlcDIoKSB7CiAgICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdwZi1jYXJkJyk7CiAgICAgIGNvbnN0IGlzTmV3ID0gc3RhdGUudXNlclR5cGUgPT09ICduZXcnOwogICAgICBjLmFwcGVuZCgKICAgICAgICBlbChgPHAgY2xhc3M9InN0ZXAtZXllYnJvdyI+JHtzdGVwRXllYnJvdygpfTwvcD5gKSwKICAgICAgICBlbChgPGgyIGNsYXNzPSJzdGVwLXRpdGxlIj4ke2lzTmV3ID8gJ1dhcyB3aWxsc3QgZHUgbWl0IFBpY2t3YXJlIGVycmVpY2hlbj8nIDogJ1dlbGNoZSBGdW5rdGlvbmVuIGJyYXVjaHN0IGR1Pyd9PC9oMj5gKSwKICAgICAgICBlbChgPHAgY2xhc3M9InN0ZXAtc3ViIj4ke2lzTmV3ID8gJ1fDpGhsZSBhbGxlIFppZWxlLCBkaWUgYXVmIGRpY2ggenV0cmVmZmVuIOKAkyB3aXIgZXJtaXR0ZWxuIGRhcmF1cyBkZW4ga2xlaW5zdGVuIFBsYW4sIGRlciBhbGxlcyBhYmRlY2t0LiBNZWhyZmFjaGF1c3dhaGwgbcO2Z2xpY2guJyA6ICdXw6RobGUgYWxsZXMsIHdhcyBkdSBudXR6ZW4gbcO2Y2h0ZXN0LiBXaXIgZXJtaXR0ZWxuIGRhcmF1cyBkZW4ga2xlaW5zdGVuIFBsYW4sIGRlciBhbGxlcyBmcmVpc2NoYWx0ZXQuJ308L3A+YCksCiAgICAgICk7CiAgICAgIGlmIChpc05ldykgewogICAgICAgIGNvbnN0IGxpc3QgPSBlbChgPGRpdiBjbGFzcz0iZmxpc3QiIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMzAwcHgsMWZyKSkiPjwvZGl2PmApOwogICAgICAgIEdPQUxTLmZpbHRlcihmZWF0dXJlVmlzaWJsZSkuZm9yRWFjaChnID0+IHsKICAgICAgICAgIGNvbnN0IHNlbCA9IHN0YXRlLmdvYWxzLmhhcyhnLmlkKTsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbChgPGRpdiBjbGFzcz0iZmVhdCAke3NlbCA\/ICdzZWwnIDogJyd9Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2IiPiR7c2VsID8gQ0hFQ0sgOiAnJ308L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZ4Ij48c3BhbiBjbGFzcz0iZmwiPiR7SUNPTihnLmljb24sIHsgc2l6ZTogMTUgfSl9ICR7Zy5sYWJlbH08L3NwYW4+PHNwYW4gY2xhc3M9ImZoIj4ke2cuaGludH08L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgICAgaXRlbS5vbmNsaWNrID0gKCkgPT4gdG9nZ2xlR29hbChnKTsKICAgICAgICAgIGxpc3QuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgfSk7CiAgICAgICAgYy5hcHBlbmRDaGlsZChsaXN0KTsKICAgICAgICBjLmFwcGVuZENoaWxkKGVsKGA8ZGl2IGNsYXNzPSJiYXNlbGluZSI+JHtJQ09OKCdjaGVjaycsIHsgc2l6ZTogMTcsIHN0cm9rZTogMi41IH0pfTxzcGFuPjxiPkluIGFsbGVuIFBsw6RuZW4gZW50aGFsdGVuOjwvYj4gQmVzdGFuZHNmw7xocnVuZyAmIEludmVudHVyLCBCZXN0ZWxsYWJ3aWNrbHVuZyAmIFJlY2hudW5nZW4sIFJldG91cmVuLCBhbGxlIFN0YW5kYXJkLVZlcnNhbmRjYXJyaWVyIChESEwsIERQRCwgR0xTLCBVUFMsIFBvc3Qg4oCmKSwgUGlja3dhcmUgQUksIE1hcmt0cGxhdHotQW5iaW5kdW5nIHVuZCBkaWUgUE9TLVJlY2h0c3NpY2hlcmhlaXQgKEdvQkQvS2Fzc2VuU2ljaFYpLjwvc3Bhbj48L2Rpdj5gKSk7CiAgICAgICAgYy5hcHBlbmRDaGlsZChuYXZCdXR0b25zKCkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoWy4uLnN0YXRlLmV4aXN0aW5nXS5zb21lKGlkID0+IGlkICE9PSAnbmV3JykpIHsKICAgICAgICBjLmFwcGVuZENoaWxkKGVsKGA8ZGl2IGNsYXNzPSJwcmVmaWxsLW5vdGUiPiR7SUNPTignaW5mbycsIHsgc2l6ZTogMTYgfSl9PHNwYW4+QW5oYW5kIGRlaW5lciBiaXNoZXJpZ2VuIFBpY2t3YXJlLVByb2R1a3RlIHZvcmF1c2dld8OkaGx0IOKAkyBiaXR0ZSBwcsO8ZmVuIHVuZCBiZWkgQmVkYXJmIGFucGFzc2VuLjwvc3Bhbj48L2Rpdj5gKSk7CiAgICAgIH0KICAgICAgY29uc3QgZ29hbHMgPSBlbChgPGRpdiBjbGFzcz0iZ29hbHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZ2giPiR7SUNPTigncm9ja2V0JywgeyBzaXplOiAxOCB9KX0gU2NobmVsbHN0YXJ0OiBXYXMgaXN0IGRlaW4gWmllbD88L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdzIj5Xw6RobGUsIHdhcyBhdWYgZGljaCB6dXRyaWZmdCDigJMgd2lyIHNldHplbiBkaWUgcGFzc2VuZGVuIEZ1bmt0aW9uZW4gdW50ZW4gYXV0b21hdGlzY2guIEFsbGVzIGRhbmFjaCBmcmVpIGFucGFzc2Jhci48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdvYWwtY2hpcHMiPjwvZGl2PjwvZGl2PmApOwogICAgICBjb25zdCBjaGlwV3JhcCA9IGdvYWxzLnF1ZXJ5U2VsZWN0b3IoJy5nb2FsLWNoaXBzJyk7CiAgICAgIEdPQUxTLmZpbHRlcihmZWF0dXJlVmlzaWJsZSkuZm9yRWFjaChnID0+IHsKICAgICAgICBjb25zdCBzZWwgPSBzdGF0ZS5nb2Fscy5oYXMoZy5pZCk7CiAgICAgICAgY29uc3QgY2hpcCA9IGVsKGA8ZGl2IGNsYXNzPSJjaGlwICR7c2VsID8gJ3NlbCcgOiAnJ30iPiR7SUNPTihnLmljb24sIHsgc2l6ZTogMTYgfSl9JHtnLmxhYmVsfTwvZGl2PmApOwogICAgICAgIGNoaXAub25jbGljayA9ICgpID0+IHRvZ2dsZUdvYWwoZyk7CiAgICAgICAgY2hpcFdyYXAuYXBwZW5kQ2hpbGQoY2hpcCk7CiAgICAgIH0pOwogICAgICBjLmFwcGVuZENoaWxkKGdvYWxzKTsKICAgICAgRkVBVFVSRV9HUk9VUFMuZm9yRWFjaChnID0+IHsKICAgICAgICBjb25zdCB2aXNpYmxlRmVhdHVyZXMgPSBnLmZlYXR1cmVzLmZpbHRlcihmZWF0dXJlVmlzaWJsZSk7CiAgICAgICAgaWYgKHZpc2libGVGZWF0dXJlcy5sZW5ndGggPT09IDApIHJldHVybjsKICAgICAgICBjb25zdCBncnAgPSBlbChgPGRpdiBjbGFzcz0iZmdyb3VwIj48aDM+JHtJQ09OKGcuaWNvbiwgeyBzaXplOiAxNyB9KX0gJHtnLnRpdGxlfTwvaDM+PC9kaXY+YCk7CiAgICAgICAgY29uc3QgbGlzdCA9IGVsKGA8ZGl2IGNsYXNzPSJmbGlzdCI+PC9kaXY+YCk7CiAgICAgICAgdmlzaWJsZUZlYXR1cmVzLmZvckVhY2goZiA9PiB7CiAgICAgICAgICBjb25zdCBzZWwgPSBzdGF0ZS5mZWF0dXJlcy5oYXMoZi5pZCk7CiAgICAgICAgICBjb25zdCBpdGVtID0gZWwoYDxkaXYgY2xhc3M9ImZlYXQgJHtzZWwgPyAnc2VsJyA6ICcnfSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNiIj4ke3NlbCA\/IENIRUNLIDogJyd9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmeCI+PHNwYW4gY2xhc3M9ImZsIj4ke2YubGFiZWx9PC9zcGFuPjxzcGFuIGNsYXNzPSJmaCI+JHtmLmhpbnR9PC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj5gKTsKICAgICAgICAgIGl0ZW0ub25jbGljayA9ICgpID0+IHsgc3RhdGUuZmVhdHVyZXMuaGFzKGYuaWQpID8gc3RhdGUuZmVhdHVyZXMuZGVsZXRlKGYuaWQpIDogc3RhdGUuZmVhdHVyZXMuYWRkKGYuaWQpOyByZW5kZXJSZWZyZXNoKHJlbmRlclN0ZXAyKTsgfTsKICAgICAgICAgIGxpc3QuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgfSk7CiAgICAgICAgZ3JwLmFwcGVuZENoaWxkKGxpc3QpOwogICAgICAgIGMuYXBwZW5kQ2hpbGQoZ3JwKTsKICAgICAgfSk7CiAgICAgIGMuYXBwZW5kQ2hpbGQoZWwoYDxkaXYgY2xhc3M9ImJhc2VsaW5lIj4ke0lDT04oJ2NoZWNrJywgeyBzaXplOiAxNywgc3Ryb2tlOiAyLjUgfSl9PHNwYW4+PGI+SW4gYWxsZW4gUGzDpG5lbiBlbnRoYWx0ZW46PC9iPiBCZXN0YW5kc2bDvGhydW5nICYgSW52ZW50dXIsIEJlc3RlbGxhYndpY2tsdW5nICYgUmVjaG51bmdlbiwgUmV0b3VyZW4sIGFsbGUgU3RhbmRhcmQtVmVyc2FuZGNhcnJpZXIgKERITCwgRFBELCBHTFMsIFVQUywgUG9zdCDigKYpLCBQaWNrd2FyZSBBSSwgTWFya3RwbGF0ei1BbmJpbmR1bmcgdW5kIGRpZSBQT1MtUmVjaHRzc2ljaGVyaGVpdCAoR29CRC9LYXNzZW5TaWNoVikuPC9zcGFuPjwvZGl2PmApKTsKICAgICAgYy5hcHBlbmRDaGlsZChuYXZCdXR0b25zKCkpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbmRlclJlZnJlc2goZm4pIHsgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd3BmLWNhcmQnKTsgYy5pbm5lckhUTUw9Jyc7IHJlbmRlclByb2dyZXNzKCk7IGZuKCk7IH0KCiAgICBjb25zdCBnb2FsQnlJZCA9IChpZCkgPT4gR09BTFMuZmluZChnID0+IGcuaWQgPT09IGlkKTsKICAgIGZ1bmN0aW9uIGZlYXR1cmVOZWVkZWRCeU90aGVyR29hbChmaWQsIGV4Y2VwdEdvYWxJZCkgewogICAgICByZXR1cm4gWy4uLnN0YXRlLmdvYWxzXS5zb21lKGdpZCA9PiBnaWQgIT09IGV4Y2VwdEdvYWxJZCAmJiBnb2FsQnlJZChnaWQpLmZlYXR1cmVzLmluY2x1ZGVzKGZpZCkpOwogICAgfQogICAgZnVuY3Rpb24gdG9nZ2xlR29hbChnKSB7CiAgICAgIGlmIChzdGF0ZS5nb2Fscy5oYXMoZy5pZCkpIHsKICAgICAgICBzdGF0ZS5nb2Fscy5kZWxldGUoZy5pZCk7CiAgICAgICAgZy5mZWF0dXJlcy5mb3JFYWNoKGYgPT4geyBpZiAoIWZlYXR1cmVOZWVkZWRCeU90aGVyR29hbChmLCBnLmlkKSkgc3RhdGUuZmVhdHVyZXMuZGVsZXRlKGYpOyB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0ZS5nb2Fscy5hZGQoZy5pZCk7CiAgICAgICAgZy5mZWF0dXJlcy5maWx0ZXIoZmlkID0+IGZlYXR1cmVWaXNpYmxlKGZlYXR1cmVCeUlkKGZpZCkpKS5mb3JFYWNoKGYgPT4gc3RhdGUuZmVhdHVyZXMuYWRkKGYpKTsKICAgICAgICBpZiAoZy5zZXRXbXMpIHN0YXRlLndtcyA9IHRydWU7CiAgICAgICAgaWYgKGcuc2V0UG9zKSBzdGF0ZS5wb3MgPSB0cnVlOwogICAgICB9CiAgICAgIHJlbmRlclJlZnJlc2gocmVuZGVyU3RlcDIpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbmRlclN0ZXBWb2x1bWUoKSB7CiAgICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdwZi1jYXJkJyk7CiAgICAgIGNvbnN0IGlzU2hvcGlmeSA9IHN0YXRlLnBsYXRmb3JtID09PSAnc2hvcGlmeSc7CiAgICAgIGMuYXBwZW5kKAogICAgICAgIGVsKGA8cCBjbGFzcz0ic3RlcC1leWVicm93Ij4ke3N0ZXBFeWVicm93KCl9PC9wPmApLAogICAgICAgIGVsKGA8aDIgY2xhc3M9InN0ZXAtdGl0bGUiPiR7aXNTaG9waWZ5ID8gJ0Jlc3RlbGx2b2x1bWVuICYgT25saW5lc2hvcHMnIDogJ0Jlc3RlbGx2b2x1bWVuJ308L2gyPmApLAogICAgICAgIGVsKGA8cCBjbGFzcz0ic3RlcC1zdWIiPiR7aXNTaG9waWZ5ID8gJ0RhbWl0IHNjaMOkdHplbiB3aXIgZGVpbmUgS29zdGVuIGlua2wuIEJlc3RlbGxnZWLDvGhyZW4gdW5kIHByw7xmZW4gZGllIFNob3AtR3JlbnplbiBkZXIgUGzDpG5lLicgOiAnRGFtaXQgc2Now6R0emVuIHdpciBkZWluZSBLb3N0ZW4gaW5rbC4gQmVzdGVsbGdlYsO8aHJlbi4nfTwvcD5gKSwKICAgICAgKTsKICAgICAgY29uc3QgdmYgPSBlbChgPGRpdiBjbGFzcz0iZmllbGQiPjwvZGl2PmApOwogICAgICB2Zi5hcHBlbmQoZWwoYDxsYWJlbCBjbGFzcz0icSI+V2llIHZpZWxlIEJlc3RlbGx1bmdlbiBoYXN0IGR1IHBybyBNb25hdD88L2xhYmVsPmApKTsKICAgICAgdmYuYXBwZW5kKGVsKGA8ZGl2IGNsYXNzPSJxaCI+VW5nZWbDpGhyZXIgRHVyY2hzY2huaXR0IHJlaWNodC48L2Rpdj5gKSk7CiAgICAgIGNvbnN0IHZhbEVsID0gZWwoYDxkaXYgY2xhc3M9InJhbmdldmFsIj4ke2ZtdChzdGF0ZS52b2x1bWUpfSBCZXN0ZWxsdW5nZW4gLyBNb25hdDwvZGl2PmApOwogICAgICBjb25zdCByYW5nZSA9IGVsKGA8aW5wdXQgdHlwZT0icmFuZ2UiIG1pbj0iMCIgbWF4PSIxMDAwMCIgc3RlcD0iNTAiIHZhbHVlPSIke01hdGgubWluKHN0YXRlLnZvbHVtZSwxMDAwMCl9Ij5gKTsKICAgICAgcmFuZ2Uub25pbnB1dCA9ICgpID0+IHsgc3RhdGUudm9sdW1lID0gK3JhbmdlLnZhbHVlOyB2YWxFbC50ZXh0Q29udGVudCA9IGAke2ZtdChzdGF0ZS52b2x1bWUpfSBCZXN0ZWxsdW5nZW4gLyBNb25hdCR7c3RhdGUudm9sdW1lPj0xMDAwMD8nKyc6Jyd9YDsgfTsKICAgICAgdmYuYXBwZW5kKHZhbEVsLCByYW5nZSk7CiAgICAgIGNvbnN0IGV4YWN0ID0gZWwoYDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTJweCI+PHNwYW4gY2xhc3M9InFoIj5PZGVyIGV4YWt0IGVpbmdlYmVuOiA8L3NwYW4+PC9kaXY+YCk7CiAgICAgIGNvbnN0IG51bSA9IGVsKGA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIHN0ZXA9IjEwIiB2YWx1ZT0iJHtzdGF0ZS52b2x1bWV9Ij5gKTsKICAgICAgbnVtLm9uaW5wdXQgPSAoKSA9PiB7IHN0YXRlLnZvbHVtZSA9IE1hdGgubWF4KDAsICtudW0udmFsdWUgfHwgMCk7IGNvbnN0IGNhcHBlZCA9IE1hdGgubWluKHN0YXRlLnZvbHVtZSwxMDAwMCk7IHJhbmdlLnZhbHVlID0gY2FwcGVkOyB2YWxFbC50ZXh0Q29udGVudCA9IGAke2ZtdChzdGF0ZS52b2x1bWUpfSBCZXN0ZWxsdW5nZW4gLyBNb25hdGA7IH07CiAgICAgIGV4YWN0LmFwcGVuZChudW0pOwogICAgICB2Zi5hcHBlbmQoZXhhY3QpOwogICAgICBjLmFwcGVuZENoaWxkKHZmKTsKICAgICAgaWYgKGlzU2hvcGlmeSkgewogICAgICAgIGNvbnN0IHNmID0gZWwoYDxkaXYgY2xhc3M9ImZpZWxkIj48L2Rpdj5gKTsKICAgICAgICBzZi5hcHBlbmQoZWwoYDxsYWJlbCBjbGFzcz0icSI+QW4gd2llIHZpZWxlIE9ubGluZXNob3BzIHdpbGxzdCBkdSBQaWNrd2FyZSBhbmJpbmRlbj88L2xhYmVsPmApKTsKICAgICAgICBzZi5hcHBlbmQoZWwoYDxkaXYgY2xhc3M9InFoIj5TdGFydGVyICYgQWR2YW5jZWQ6IDEgU2hvcCDCtyBQcm9mZXNzaW9uYWw6IGJpcyA0IMK3IEVudGVycHJpc2U6IHVuYmVncmVuenQuPC9kaXY+YCkpOwogICAgICAgIGNvbnN0IGdyaWQgPSBlbChgPGRpdiBjbGFzcz0ib3B0LWdyaWQiPjwvZGl2PmApOwogICAgICAgIFt7djoxLHQ6JzEgU2hvcCd9LHt2OjIsdDonMuKAkzQgU2hvcHMnfSx7djo1LHQ6JzUrIFNob3BzJ31dLmZvckVhY2gobyA9PiB7CiAgICAgICAgICBjb25zdCBzZWwgPSAoby52PT09MSYmc3RhdGUuc2hvcHM9PT0xKXx8KG8udj09PTImJnN0YXRlLnNob3BzPj0yJiZzdGF0ZS5zaG9wczw9NCl8fChvLnY9PT01JiZzdGF0ZS5zaG9wcz40KTsKICAgICAgICAgIGNvbnN0IG9wdCA9IGVsKGA8ZGl2IGNsYXNzPSJvcHQgJHtzZWw\/J3NlbCc6Jyd9Ij48c3BhbiBjbGFzcz0iY2hlY2siPiR7c2VsP0NIRUNLOicnfTwvc3Bhbj48c3BhbiBjbGFzcz0idCI+JHtvLnR9PC9zcGFuPjwvZGl2PmApOwogICAgICAgICAgb3B0Lm9uY2xpY2sgPSAoKSA9PiB7IHN0YXRlLnNob3BzID0gby52OyByZW5kZXJSZWZyZXNoKHJlbmRlclN0ZXBWb2x1bWUpOyB9OwogICAgICAgICAgZ3JpZC5hcHBlbmRDaGlsZChvcHQpOwogICAgICAgIH0pOwogICAgICAgIHNmLmFwcGVuZENoaWxkKGdyaWQpOwogICAgICAgIGMuYXBwZW5kQ2hpbGQoc2YpOwogICAgICB9CiAgICAgIGMuYXBwZW5kQ2hpbGQobmF2QnV0dG9ucyh7IG5leHRMYWJlbDogJ0VtcGZlaGx1bmcgYW56ZWlnZW4nIH0pKTsKICAgIH0KCiAgICBmdW5jdGlvbiByZW5kZXJSZXN1bHQoKSB7CiAgICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHdwZi1jYXJkJyk7CiAgICAgIGNvbnN0IHIgPSByZWNvbW1lbmQoKTsKICAgICAgY29uc3QgcCA9IFBMQU5TW3IucmVjb21tZW5kZWRdOwogICAgICBjb25zdCBpc1BvcCA9IHIucmVjb21tZW5kZWQgPT09ICdwcm9mZXNzaW9uYWwnOwogICAgICBjb25zdCBzZWxlY3RlZFBsYW4gPSBzdGF0ZS5zZWxlY3RlZFBsYW4gfHwgci5yZWNvbW1lbmRlZDsKICAgICAgY29uc3QgY29zdERhdGEgPSBjb3N0Rm9yKHNlbGVjdGVkUGxhbik7CiAgICAgIGNvbnN0IHRvcE5hdiA9IGVsKGA8ZGl2IGNsYXNzPSJuYXYiIHN0eWxlPSJtYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToxMHB4Ij48YnV0dG9uIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgaWQ9ImJhY2stcmVzdWx0Ij7ihpAgWnVyw7xjayAmIGFucGFzc2VuPC9idXR0b24+PC9kaXY+YCk7CiAgICAgIHRvcE5hdi5xdWVyeVNlbGVjdG9yKCcjYmFjay1yZXN1bHQnKS5vbmNsaWNrID0gKCkgPT4geyBzdGF0ZS5zdGVwLS07IHJlbmRlcigpOyB9OwogICAgICBjLmFwcGVuZENoaWxkKHRvcE5hdik7CiAgICAgIGMuYXBwZW5kKAogICAgICAgIGVsKGA8ZGl2IGNsYXNzPSJyZXN1bHQtaGVhZCI+PHNwYW4gY2xhc3M9ImV5ZWJyb3ciPkRlaW5lIEVtcGZlaGx1bmc8L3NwYW4+PC9kaXY+YCksCiAgICAgICk7CiAgICAgIGxldCBwcmljZUxpbmUsIHNhdmluZ3NMaW5lID0gJyc7CiAgICAgIGlmIChyLnJlY29tbWVuZGVkID09PSAnZW50ZXJwcmlzZScpIHsKICAgICAgICBwcmljZUxpbmUgPSBgPGRpdiBjbGFzcz0icGxhbi1wcmljZSI+SW5kaXZpZHVlbGxlcyBBbmdlYm90PC9kaXY+YDsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcmljZUxpbmUgPSBgPGRpdiBjbGFzcz0icGxhbi1wcmljZSI+PGI+JHtldXIocFtzdGF0ZS5iaWxsaW5nXSl9PC9iPiAvIE1vbmF0JHtzdGF0ZS5iaWxsaW5nPT09J3llYXJseSc\/JyA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPihKYWhyZXN2ZXJ0cmFnKTwvc3Bhbj4nOicnfTwvZGl2PmA7CiAgICAgICAgaWYgKHN0YXRlLmJpbGxpbmcgPT09ICd5ZWFybHknKSB7CiAgICAgICAgICBjb25zdCB5ZWFybHlTYXZpbmcgPSAocC5tb250aGx5IC0gcC55ZWFybHkpICogMTI7CiAgICAgICAgICBzYXZpbmdzTGluZSA9IGA8ZGl2IGNsYXNzPSJzYXZpbmdzIj5EdSBzcGFyc3QgJHtldXIoeWVhcmx5U2F2aW5nKX0gcHJvIEphaHIgZ2fDvC4gbW9uYXRsaWNoZXIgWmFobHVuZzwvZGl2PmA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlYyA9IGVsKGA8ZGl2IGNsYXNzPSJyZWMtY2FyZCI+CiAgICAgICAgICAke2lzUG9wP2A8ZGl2IGNsYXNzPSJwb3AtYmFkZ2UiPiR7SUNPTignc3Rhcicse3NpemU6MTMsZmlsbDonY3VycmVudENvbG9yJyxzdHJva2U6MH0pfSBCZWxpZWJ0ZXN0ZSBXYWhsPC9kaXY+YDonJ30KICAgICAgICAgIDxkaXYgY2xhc3M9InBsYW4tbmFtZSI+JHtwLmxhYmVsfTwvZGl2PgogICAgICAgICAgJHtwcmljZUxpbmV9CiAgICAgICAgICAke3NhdmluZ3NMaW5lfQogICAgICAgIDwvZGl2PmApOwogICAgICBjLmFwcGVuZENoaWxkKHJlYyk7CiAgICAgIGNvbnN0IGJ0ID0gZWwoYDxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbjotNHB4IDAgMThweCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtcm93Ij4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5iaWxsaW5nPT09J21vbnRobHknPydvbic6Jyd9IiBpZD0iYm0iPk1vbmF0bGljaDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLmJpbGxpbmc9PT0neWVhcmx5Jz8nb24nOicnfSIgaWQ9ImJ5Ij5Kw6RocmxpY2gg4oiSMTAgJTwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+PC9kaXY+YCk7CiAgICAgIGJ0LnF1ZXJ5U2VsZWN0b3IoJyNibScpLm9uY2xpY2sgPSAoKSA9PiB7IHN0YXRlLmJpbGxpbmc9J21vbnRobHknOyByZW5kZXJSZWZyZXNoKHJlbmRlclJlc3VsdCk7IH07CiAgICAgIGJ0LnF1ZXJ5U2VsZWN0b3IoJyNieScpLm9uY2xpY2sgPSAoKSA9PiB7IHN0YXRlLmJpbGxpbmc9J3llYXJseSc7IHJlbmRlclJlZnJlc2gocmVuZGVyUmVzdWx0KTsgfTsKICAgICAgYy5hcHBlbmRDaGlsZChidCk7CiAgICAgIGNvbnN0IG1pZ3JhdGVCbG9jayA9IGJ1aWxkTWlncmF0aW9uQmxvY2socik7CiAgICAgIGlmIChtaWdyYXRlQmxvY2spIGMuYXBwZW5kQ2hpbGQobWlncmF0ZUJsb2NrKTsKICAgICAgY29uc3Qgd2h5ID0gZWwoYDxkaXYgY2xhc3M9IndoeSI+PGg0PldhcnVtICR7cC5sYWJlbH0\/PC9oND48dWw+PC91bD48L2Rpdj5gKTsKICAgICAgY29uc3QgdWwgPSB3aHkucXVlcnlTZWxlY3RvcigndWwnKTsKICAgICAgci5yZWFzb25zLmZvckVhY2gocnMgPT4gdWwuYXBwZW5kQ2hpbGQoZWwoYDxsaT4ke3JzLnR5cGU9PT0naW5mbyc\/SUNPTignaW5mbycse3NpemU6MTcsY2xzOidpbmZvJ30pOklDT04oJ2NoZWNrJyx7c2l6ZToxNyxzdHJva2U6Mi41fSl9PHNwYW4+JHtycy50ZXh0fTwvc3Bhbj48L2xpPmApKSk7CiAgICAgIGMuYXBwZW5kQ2hpbGQod2h5KTsKICAgICAgY29uc3QgbG9zZUJsb2NrID0gYnVpbGRMb3NlQmxvY2socik7CiAgICAgIGlmIChsb3NlQmxvY2spIGMuYXBwZW5kQ2hpbGQobG9zZUJsb2NrKTsKICAgICAgY29uc3QgY29zdExhYmVsID0gc2VsZWN0ZWRQbGFuID09PSByLnJlY29tbWVuZGVkID8gJ0tvc3RlbnNjaMOkdHp1bmcnIDogYEtvc3RlbnNjaMOkdHp1bmcgwrcgJHtQTEFOU1tzZWxlY3RlZFBsYW5dLmxhYmVsfWA7CiAgICAgIGNvbnN0IGNvc3QgPSBlbChgPGRpdiBjbGFzcz0iY29zdCI+PGRpdiBjbGFzcz0icm93IGhlYWQiPjxzcGFuPiR7Y29zdExhYmVsfTwvc3Bhbj48c3Bhbj4ke3N0YXRlLmJpbGxpbmc9PT0neWVhcmx5Jz8ncHJvIE1vbmF0IChKYWhyZXN2ZXJ0cmFnKSc6J3BybyBNb25hdCd9PC9zcGFuPjwvZGl2PjwvZGl2PmApOwogICAgICBjb3N0RGF0YS5yb3dzLmZvckVhY2gocm93ID0+IGNvc3QuYXBwZW5kQ2hpbGQoZWwoYDxkaXYgY2xhc3M9InJvdyI+PHNwYW4gY2xhc3M9IiR7cm93Lm11dGVkPydtdXRlZCc6Jyd9Ij4ke3Jvdy5sYWJlbH0ke3Jvdy5zdWI\/YCA8c3BhbiBjbGFzcz0ibXV0ZWQiPsK3ICR7cm93LnN1Yn08L3NwYW4+YDonJ308L3NwYW4+PHNwYW4gY2xhc3M9IiR7cm93Lm11dGVkPydtdXRlZCc6Jyd9Ij4ke3Jvdy52YWx9PC9zcGFuPjwvZGl2PmApKSk7CiAgICAgIGlmICghY29zdERhdGEuY3VzdG9tKSBjb3N0LmFwcGVuZENoaWxkKGVsKGA8ZGl2IGNsYXNzPSJyb3cgdG90YWwiPjxzcGFuPkdlc2FtdDwvc3Bhbj48c3Bhbj4ke2V1cihjb3N0RGF0YS50b3RhbCl9IC8gTW9uYXQ8L3NwYW4+PC9kaXY+YCkpOwogICAgICBlbHNlIGNvc3QuYXBwZW5kQ2hpbGQoZWwoYDxkaXYgY2xhc3M9InJvdyB0b3RhbCI+PHNwYW4+R2VzYW10PC9zcGFuPjxzcGFuPmluZGl2aWR1ZWxsZXMgQW5nZWJvdDwvc3Bhbj48L2Rpdj5gKSk7CiAgICAgIGMuYXBwZW5kQ2hpbGQoY29zdCk7CiAgICAgIGNvbnN0IG5lZWRzV21zID0gc3RhdGUud21zIHx8IHIuc2VsZWN0ZWQuc29tZShmID0+IGYucmVxdWlyZXNXbXNNb2R1bGUpOwogICAgICBjb25zdCBuZWVkc1BvcyA9IHN0YXRlLnBvczsKICAgICAgaWYgKG5lZWRzV21zIHx8IG5lZWRzUG9zKSB7CiAgICAgICAgY29uc3QgYml0cyA9IFtdOwogICAgICAgIGlmIChuZWVkc1dtcykgYml0cy5wdXNoKGBQaWNrd2FyZSBXTVMgYWIgJHtldXIoTU9EVUxFUy53bXNbc3RhdGUuYmlsbGluZ10pfS9HZXLDpHRgKTsKICAgICAgICBpZiAobmVlZHNQb3MpIGJpdHMucHVzaChgUGlja3dhcmUgUE9TIGFiICR7ZXVyKE1PRFVMRVMucG9zW3N0YXRlLmJpbGxpbmddKX0vTGl6ZW56YCk7CiAgICAgICAgYy5hcHBlbmRDaGlsZChlbChgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc3VidGxlKTttYXJnaW46LTZweCAwIDE2cHgiPkhpbndlaXM6IHp6Z2wuIHNlcGFyYXQgYnVjaGJhcmVyIE1vZHVsZSDigJMgJHtiaXRzLmpvaW4oJyDCtyAnKX0gKGplIE1vbmF0KS48L3A+YCkpOwogICAgICB9CiAgICAgIGlmIChyLnVwc2VsbCkgewogICAgICAgIGNvbnN0IHUgPSBlbChgPGRpdiBjbGFzcz0ibnVkZ2UiPjxoND4ke0lDT04oJ2J1bGInLHtzaXplOjE3fSl9IFNjaG9uIGFuICR7UExBTlNbci51cHNlbGwudGFyZ2V0XS5sYWJlbH0gZ2VkYWNodD88L2g0PgogICAgICAgICAgICA8ZGl2PkbDvHIgPHNwYW4gY2xhc3M9InVwZGVsdGEiPiske2V1cihyLnVwc2VsbC5kZWx0YSl9L01vbmF0PC9zcGFuPiBzY2hhbHRlc3QgZHUgdS4gYS4gZnJlaTo8L2Rpdj4KICAgICAgICAgICAgPHVsPiR7ci51cHNlbGwucGVya3MubWFwKHg9PmA8bGk+JHt4fTwvbGk+YCkuam9pbignJyl9PC91bD48L2Rpdj5gKTsKICAgICAgICBjLmFwcGVuZENoaWxkKHUpOwogICAgICB9CiAgICAgIGNvbnN0IGNvbXAgPSBlbChgPGRpdiBjbGFzcz0iY29tcGFyZSI+PC9kaXY+YCk7CiAgICAgIFBMQU5fT1JERVIuZm9yRWFjaChrID0+IHsKICAgICAgICBjb25zdCBwbCA9IFBMQU5TW2tdOwogICAgICAgIGNvbnN0IGlzUmVjID0gayA9PT0gci5yZWNvbW1lbmRlZDsKICAgICAgICBjb25zdCBpc1NlbCA9IGsgPT09IHNlbGVjdGVkUGxhbjsKICAgICAgICBjb25zdCBwcmljZSA9IGsgPT09ICdlbnRlcnByaXNlJyA\/ICc8c3BhbiBjbGFzcz0icHAiPmF1ZiBBbmZyYWdlPC9zcGFuPicgOiBgPGRpdiBjbGFzcz0icHAiPkFiIDxiPiR7ZXVyKHBsW3N0YXRlLmJpbGxpbmddKX08L2I+L008L2Rpdj5gOwogICAgICAgIGNvbnN0IGNvbCA9IGVsKGA8ZGl2IGNsYXNzPSJwY29sICR7aXNTZWw\/J3NlbCc6Jyd9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIiBhcmlhLXByZXNzZWQ9IiR7aXNTZWx9Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icG4iPiR7cGwubGFiZWx9PC9kaXY+JHtwcmljZX0KICAgICAgICAgICAgJHtpc1JlYz8nPHNwYW4gY2xhc3M9InRhZ3JlYyI+RW1wZm9obGVuPC9zcGFuPic6Jyd9PC9kaXY+YCk7CiAgICAgICAgY29uc3QgY2hvb3NlID0gKCkgPT4geyBzdGF0ZS5zZWxlY3RlZFBsYW4gPSBrOyByZW5kZXJSZWZyZXNoKHJlbmRlclJlc3VsdCk7IH07CiAgICAgICAgY29sLm9uY2xpY2sgPSBjaG9vc2U7CiAgICAgICAgY29sLm9ua2V5ZG93biA9IChlKSA9PiB7IGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7IGUucHJldmVudERlZmF1bHQoKTsgY2hvb3NlKCk7IH0gfTsKICAgICAgICBjb21wLmFwcGVuZENoaWxkKGNvbCk7CiAgICAgIH0pOwogICAgICBjLmFwcGVuZENoaWxkKGNvbXApOwogICAgICBjb25zdCBjb21wYXJlQ3RhID0gZWwoYDxkaXYgY2xhc3M9ImNvbXBhcmUtY3RhIj48YnV0dG9uIGlkPSJjb21wYXJlLW9wZW4iPiR7SUNPTignY2hhcnQnLCB7IHNpemU6IDE1IH0pfSBGdW5rdGlvbmVuIGFsbGVyIFBsw6RuZSBpbSBEZXRhaWwgdmVyZ2xlaWNoZW48L2J1dHRvbj48L2Rpdj5gKTsKICAgICAgY29tcGFyZUN0YS5xdWVyeVNlbGVjdG9yKCcjY29tcGFyZS1vcGVuJykub25jbGljayA9ICgpID0+IG9wZW5Db21wYXJlTW9kYWwoci5yZWNvbW1lbmRlZCk7CiAgICAgIGMuYXBwZW5kQ2hpbGQoY29tcGFyZUN0YSk7CiAgICAgIGNvbnN0IHByaW1hcnlDdGEgPSByLnJlY29tbWVuZGVkID09PSAnZW50ZXJwcmlzZScKICAgICAgICA\/IGA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGlkPSJjdGExIj5BbmdlYm90IGFuZnJhZ2VuPC9idXR0b24+YAogICAgICAgIDogYDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImN0YTEiPkpldHp0ICR7cC5sYWJlbH0gdGVzdGVuPC9idXR0b24+YDsKICAgICAgY29uc3QgY3RhcyA9IGVsKGA8ZGl2IGNsYXNzPSJjdGEtcm93Ij4ke3ByaW1hcnlDdGF9PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGlkPSJjdGEyIj5MaXZlLURlbW8gYnVjaGVuPC9idXR0b24+PC9kaXY+YCk7CiAgICAgIGN0YXMucXVlcnlTZWxlY3RvcignI2N0YTEnKS5vbmNsaWNrID0gKCkgPT4gd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LnBpY2t3YXJlLmNvbS9kZS9wcmVpc2UnLCAnX2JsYW5rJyk7CiAgICAgIGN0YXMucXVlcnlTZWxlY3RvcignI2N0YTInKS5vbmNsaWNrID0gKCkgPT4gd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LnBpY2t3YXJlLmNvbS9kZS9kZWluZS1saXZlLWRlbW8jTGl2ZS1EZW1vJywgJ19ibGFuaycpOwogICAgICBjLmFwcGVuZENoaWxkKGN0YXMpOwogICAgICBjLmFwcGVuZENoaWxkKGVsKGA8ZGl2IGNsYXNzPSJzYWxlc2NvbnRhY3QiPgogICAgICAgICAgPGg0PkxpZWJlciBwZXJzw7ZubGljaCBiZXJhdGVuIGxhc3Nlbj88L2g0PgogICAgICAgICAgPHA+VW5zZXIgVGVhbSBoaWxmdCBkaXIgYmVpIGRlciBQbGFud2FobCR7c3RhdGUudXNlclR5cGUgPT09ICdleGlzdGluZycgPyAnIHVuZCBiZWltIFVtc3RpZWcgdm9uIGRlaW5lbiBiaXNoZXJpZ2VuIFBsdWdpbnMnIDogJyd9IOKAkyB1bnZlcmJpbmRsaWNoIHVuZCBrb3N0ZW5sb3MuPC9wPgogICAgICAgICAgPGRpdiBjbGFzcz0id2F5cyI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJ3YXkiIGhyZWY9InRlbDoke1NBTEVTX1RFTH0iPiR7SUNPTigncGhvbmUnLCB7IHNpemU6IDE2IH0pfSAke1NBTEVTX1BIT05FfTwvYT4KICAgICAgICAgICAgPGEgY2xhc3M9IndheSIgaHJlZj0ibWFpbHRvOiR7U0FMRVNfRU1BSUx9Ij4ke0lDT04oJ21haWwnLCB7IHNpemU6IDE2IH0pfSAke1NBTEVTX0VNQUlMfTwvYT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaG91cnMiPlRlbGVmb25pc2NoIGVycmVpY2hiYXIgTW8g4oCTIEZyLCAxMDowMCDigJMgMTg6MDAgVWhyPC9kaXY+CiAgICAgICAgPC9kaXY+YCkpOwogICAgICBjLmFwcGVuZENoaWxkKGVsKGA8ZGl2IGNsYXNzPSJyZXN0YXJ0Ij48YnV0dG9uIGlkPSJyZXN0YXJ0Ij4ke0lDT04oJ3JlZnJlc2gnLHtzaXplOjE1fSl9IFZvbiB2b3JuZSBiZWdpbm5lbjwvYnV0dG9uPjwvZGl2PmApKTsKICAgICAgYy5xdWVyeVNlbGVjdG9yKCcjcmVzdGFydCcpLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgc3RhdGUuc3RlcD0wOyBzdGF0ZS5wbGF0Zm9ybT1udWxsOyBzdGF0ZS51c2VyVHlwZT1udWxsOyBzdGF0ZS5leGlzdGluZy5jbGVhcigpOyBzdGF0ZS5nb2Fscy5jbGVhcigpOyBzdGF0ZS5mZWF0dXJlcy5jbGVhcigpOwogICAgICAgIHN0YXRlLnZvbHVtZT04MDA7IHN0YXRlLnNob3BzPTE7IHN0YXRlLndtcz1mYWxzZTsgc3RhdGUud21zRGV2aWNlcz0xOyBzdGF0ZS5wb3M9ZmFsc2U7IHN0YXRlLnBvc0xpY2Vuc2VzPTE7IHN0YXRlLmJpbGxpbmc9REVGQVVMVF9CSUxMSU5HOwogICAgICAgIHN0YXRlLnNlbGVjdGVkUGxhbj1udWxsOyBzdGF0ZS5leGlzdGluZ01vZGU9bnVsbDsgc3RhdGUuY3VycmVudFBsYW49bnVsbDsKICAgICAgICBzdGF0ZS5fcHJlZmlsbFNpZz0nJzsgc3RhdGUuX3ByZWZpbGxlZD1bXTsKICAgICAgICByZW5kZXIoKTsKICAgICAgfTsKICAgICAgYy5hcHBlbmRDaGlsZChlbChgPHAgY2xhc3M9ImRpc2NsYWltZXIiPlVudmVyYmluZGxpY2hlIE9yaWVudGllcnVuZyBhdWYgQmFzaXMgZGVpbmVyIEFuZ2FiZW4uIEFsbGUgUHJlaXNlIGV4a2wuIFVTdC47IEJlc3RlbGxnZWLDvGhyZW4gZ2VsdGVuIHBybyBCZXN0ZWxsdW5nIMO8YmVyIGRlbSBpbmtsdWRpZXJ0ZW4gS29udGluZ2VudC4gTWHDn2dlYmxpY2ggc2luZCBkaWUgYWt0dWVsbGVuIEtvbmRpdGlvbmVuIHVudGVyIHBpY2t3YXJlLmNvbS4gU3RhbmQ6IEp1bGkgMjAyNi48L3A+YCkpOwogICAgfQoKICAgIGNvbnN0IFJFTkRFUkVSX0JZX0tFWSA9IHsKICAgICAgaW50cm86IHJlbmRlclN0ZXBJbnRybywKICAgICAgcHJvZHVjdHM6IHJlbmRlclN0ZXBQcm9kdWN0cywKICAgICAgZmVhdHVyZXM6IHJlbmRlclN0ZXAyLAogICAgICB2b2x1bWU6IHJlbmRlclN0ZXBWb2x1bWUsCiAgICAgIHJlc3VsdDogcmVuZGVyUmVzdWx0LAogICAgfTsKICAgIGZ1bmN0aW9uIHJlbmRlcigpIHsKICAgICAgc3RhdGUuc2VsZWN0ZWRQbGFuID0gbnVsbDsKICAgICAgcmVuZGVyUHJvZ3Jlc3MoKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B3cGYtaGVybycpLmNsYXNzTGlzdC50b2dnbGUoJ2hpZGRlbicsIHN0YXRlLnN0ZXAgPiAwKTsKICAgICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwd3BmLWNhcmQnKTsKICAgICAgYy5pbm5lckhUTUwgPSAnJzsKICAgICAgUkVOREVSRVJfQllfS0VZW2N1cnJlbnRGbG93KClbc3RhdGUuc3RlcF1dKCk7CiAgICAgIGlmIChwd3BmQm9vdGVkKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHctcGxhbmZpbmRlcicpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTsKICAgICAgcHdwZkJvb3RlZCA9IHRydWU7CiAgICB9CgogICAgcmVuZGVyKCk7CiAgfQogIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBwd1BsYW5maW5kZXJJbml0KTsKICB9IGVsc2UgewogICAgcHdQbGFuZmluZGVySW5pdCgpOwogIH0KfSkoKTsK\");r.appendChild(s);})();<\/script>\n\n\n\n<div class=\"layout-space layout-space--article-page-level-2\"><\/div>\n\n\n\n<div class=\"wp-block-group lp-cta\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"teaser-detail-page-image-columns\">\n    <div class=\"l-container\">\n        <div class=\"l-grid\">\n                            <div class=\"teaser-detail-page-image-columns__item\">\n                                        <img decoding=\"async\" class=\"teaser-detail-page-image-columns__illustration\" src=\"https:\/\/www.pickware.com\/app\/themes\/pickware-theme\/modules\/teaser\/detail-page-image-columns\/assets\/illustration.svg\" alt=\"illustration\"\/>\n                    <div>\n                        <div class=\"teaser-detail-page-image-columns__eyebrow\">\n                                                    <\/div>\n                        <div class=\"teaser-detail-page-image-columns__heading\">Kostenlose Live-Demo<\/div>\n                    <\/div>\n                    <div class=\"teaser-detail-page-image-columns__copy\"><\/div>\n                                            <div class=\"teaser-detail-page-image-columns__list-heading\"><\/div>\n                        <ul class=\"teaser-detail-page-image-columns__list\">\n                                                            <li>Unverbindlich &#038; kostenlos<\/li>\n                                                            <li>Ca. 30 min per Video\u00fcbertragung<\/li>\n                                                            <li>Auf dein Business abgestimmte Produktdemo<\/li>\n                                                    <\/ul>\n                                                                <div class=\"teaser-detail-page-image-columns__button-group\">\n                                                            <a class=\"teaser-detail-page-image-columns__button teaser-detail-page-image-columns__button--order-600 \" href=\"https:\/\/www.pickware.com\/de\/live-demo\" target=\"\">\n                                    Jetzt buchen                                <\/a>\n                                                    <\/div>\n                                    <\/div>\n                            <div class=\"teaser-detail-page-image-columns__item\">\n                                        <img decoding=\"async\" class=\"teaser-detail-page-image-columns__illustration\" src=\"https:\/\/www.pickware.com\/app\/themes\/pickware-theme\/modules\/teaser\/detail-page-image-columns\/assets\/illustration.svg\" alt=\"illustration\"\/>\n                    <div>\n                        <div class=\"teaser-detail-page-image-columns__eyebrow\">\n                                                    <\/div>\n                        <div class=\"teaser-detail-page-image-columns__heading\">Kostenlos Testen<\/div>\n                    <\/div>\n                    <div class=\"teaser-detail-page-image-columns__copy\"><\/div>\n                                            <div class=\"teaser-detail-page-image-columns__list-heading\"><\/div>\n                        <ul class=\"teaser-detail-page-image-columns__list\">\n                                                            <li>Testphase endet automatisch<\/li>\n                                                            <li>Keine Kreditkarte erforderlich<\/li>\n                                                            <li>In 24 Stunden eingerichtet<\/li>\n                                                    <\/ul>\n                                                                <div class=\"teaser-detail-page-image-columns__button-group\">\n                                                            <a class=\"teaser-detail-page-image-columns__button teaser-detail-page-image-columns__button--order-500 \" href=\"#open-onboarding-overlay\" target=\"\">\n                                    Jetzt testen                                <\/a>\n                                                    <\/div>\n                                    <\/div>\n                    <\/div>\n    <\/div>\n<\/div>\n\n\n\n<style>\n.lp-cta .teaser-detail-page-image-columns__list>li::before {\n    background-image: url(https:\/\/www.pickware.com\/app\/uploads\/2024\/01\/all-in-one-icon-check.svg);\n}\n\n.lp-cta .teaser-detail-page-image-columns__item img{\ndisplay: none;}\n\n.lp-cta .teaser-detail-page-image-columns__item{\nbackground-color: #010645;\n    padding: 64px;\n    border-radius: 32px;\n    box-shadow: 0 32px 48px -40px rgba(50,50,93,0.80);\n    }\n\n@media (max-width: 767px) {\n    .lp-cta .teaser-detail-page-image-columns__item {\n    padding: 32px;\n    border-radius: 16px;\n    }\n}\n\n.lp-cta .teaser-detail-page-image-columns__heading{\ncolor: #fff\n}\n\n.lp-cta .teaser-detail-page-image-columns__list>li{\ncolor: #91c8ff\n}\n\n.lp-cta .l-grid{\ngap: 24px 24px;}\n\n.lp-cta .teaser-detail-page-image-columns__eyebrow{\ncolor: #fff;\n}\n\n.lp-cta .teaser-detail-page-image-columns__item:last-child{\n}\n\n<\/style>\n<\/div><\/div>\n\n\n\n<div class=\"layout-space layout-space--article-page-level-1\"><\/div>\n\n\n\n<!-- START: Pickware Pricing Reinschrift (f\u00fcr Crawler\/AI) -->\n<style>\n  .pw-visually-hidden {\n    position: absolute !important;\n    width: 1px !important;\n    height: 1px !important;\n    padding: 0 !important;\n    margin: -1px !important;\n    overflow: hidden !important;\n    clip: rect(0, 0, 0, 0) !important;\n    white-space: nowrap !important;\n    border: 0 !important;\n  }\n<\/style>\n\n<div class=\"pw-visually-hidden\" aria-hidden=\"false\" data-pw-crawler=\"pricing-reinschrift\">\n  <h2>Pickware Pl\u00e4ne &#038; Preise (Reinschrift)<\/h2>\n\n  <h3>Monatliche Zahlung<\/h3>\n  <p>Starter: 99 \u20ac mtl. (zzgl. MwSt.)<\/p>\n  <p>Advanced: 299 \u20ac mtl. (zzgl. MwSt.)<\/p>\n  <p>Professional: 599 \u20ac mtl. (zzgl. MwSt.)<\/p>\n  <p>Enterprise: Auf Anfrage<\/p>\n\n  <h4>Umfang<\/h4>\n  <p>Inklusivbestellungen pro Monat: Starter 1.000; Advanced 1.500; Professional 2.000; Enterprise Auf Anfrage<\/p>\n  <p>Jede weitere Bestellung: Starter 0,20 \u20ac; Advanced 0,15 \u20ac; Professional 0,15 \u20ac; Enterprise Auf Anfrage<\/p>\n  <p>Pickware WMS (Preis je Ger\u00e4telizenz): je 199 \u20ac mtl. (zzgl. MwSt.) \u2013 f\u00fcr alle Pl\u00e4ne<\/p>\n\n  <h4>Features (enthalten je Plan)<\/h4>\n  <p>Verbundene Onlineshops: Starter 1; Advanced 1; Professional 4; Enterprise Unbegrenzt<\/p>\n  <p>Versand: Starter ja; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Wareneingang: Starter ja; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Lagerverwaltung: Starter ja; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Retouren: Starter ja; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Einkauf: Starter nein; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Buchhaltung: Starter nein; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>St\u00fccklisten \/ Sets: Starter nein; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Erweiterte WMS Funktionen: Starter nein; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Angebote: Starter nein; Advanced nein; Professional ja; Enterprise ja<\/p>\n  <p>Erweitertes Rechtemanagement: Starter nein; Advanced nein; Professional ja; Enterprise ja<\/p>\n  <p>Prozessindividualisierung: Starter nein; Advanced nein; Professional ja; Enterprise ja<\/p>\n  <p>API-Zugriff: Starter nein; Advanced nein; Professional ja; Enterprise ja<\/p>\n  <p>Quarterly Business Review: Starter nein; Advanced nein; Professional nein; Enterprise ja<\/p>\n  <p>Individualprogrammierung: Starter nein; Advanced nein; Professional nein; Enterprise ja<\/p>\n  <p>Performanceoptimierung: Starter nein; Advanced nein; Professional nein; Enterprise ja<\/p>\n\n  <h4>Support (enthalten je Plan)<\/h4>\n  <p>Helpcenter: Starter ja; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>E-Mail Support: Starter nein; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>Telefonsupport: Starter nein; Advanced ja; Professional ja; Enterprise ja<\/p>\n  <p>R\u00fcckruffunktion: Starter nein; Advanced nein; Professional ja; Enterprise ja<\/p>\n  <p>VIP-Support: Starter nein; Advanced nein; Professional nein; Enterprise ja<\/p>\n\n  <h3>J\u00e4hrliche Zahlung (Spare 10%)<\/h3>\n  <p>Starter: 89 \u20ac mtl. (zzgl. MwSt., bei j\u00e4hrlicher Vertragsdauer)<\/p>\n  <p>Advanced: 269 \u20ac mtl. (zzgl. MwSt., bei j\u00e4hrlicher Vertragsdauer)<\/p>\n  <p>Professional: 539 \u20ac mtl. (zzgl. MwSt., bei j\u00e4hrlicher Vertragsdauer)<\/p>\n  <p>Enterprise: Auf Anfrage<\/p>\n  <p>Pickware WMS (Preis je Ger\u00e4telizenz): je 179 \u20ac mtl. (zzgl. MwSt., bei j\u00e4hrlicher Vertragsdauer) \u2013 f\u00fcr alle Pl\u00e4ne<\/p>\n\n  <h3>Pickware POS (Shopware 6) \u2013 Preise (Reinschrift)<\/h3>\n  <p>Je Lizenz: 149 \u20ac mtl. (zzgl. MwSt.)<\/p>\n  <p>Ab 10 Lizenzen: Preis auf Anfrage<\/p>\n  <p>Je Lizenz (j\u00e4hrliche Vertragsdauer): 134 \u20ac mtl. (zzgl. MwSt., bei j\u00e4hrlicher Vertragsdauer)<\/p>\n<\/div>\n<!-- END: Pickware Pricing Reinschrift (f\u00fcr Crawler\/AI) -->\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pickware Pl\u00e4ne &#038; Preise (Reinschrift) Monatliche Zahlung Starter: 99 \u20ac mtl. (zzgl. MwSt.) Advanced: 299 \u20ac mtl. (zzgl. MwSt.) Professional: 599 \u20ac mtl. (zzgl. MwSt.) Enterprise: Auf Anfrage Umfang Inklusivbestellungen pro Monat: Starter 1.000; Advanced 1.500; Professional 2.000; Enterprise Auf Anfrage Jede weitere Bestellung: Starter 0,20 \u20ac; Advanced 0,15 \u20ac; Professional 0,15 \u20ac; Enterprise Auf [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_stopmodifiedupdate":false,"_modified_date":"","footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-49068","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/pages\/49068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/comments?post=49068"}],"version-history":[{"count":25,"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/pages\/49068\/revisions"}],"predecessor-version":[{"id":49779,"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/pages\/49068\/revisions\/49779"}],"wp:attachment":[{"href":"https:\/\/www.pickware.com\/de\/wp-json\/wp\/v2\/media?parent=49068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}