{"id":504766,"date":"2026-07-06T07:05:30","date_gmt":"2026-07-06T11:05:30","guid":{"rendered":"https:\/\/kabuconnect.com\/?page_id=504766"},"modified":"2026-09-03T13:08:16","modified_gmt":"2026-09-03T17:08:16","slug":"kj","status":"publish","type":"page","link":"https:\/\/kabuconnect.com\/es\/kj\/","title":{"rendered":"The Kabbalah Journey Course"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"504766\" class=\"elementor elementor-504766\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63f2da1 e-con-full e-flex e-con e-parent\" data-id=\"63f2da1\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a2a4860 elementor-widget elementor-widget-html\" data-id=\"a2a4860\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\nh1{\n    color: rgb(234, 230, 240) !important;\n}\na:hover {\n    color: var(--paper);\n}\nh2 {\n    color: var(--text);\n}\nh3{\n    color: rgb(234, 230, 240) !important;\n}\nsection.s--ink h2 {\n    color: var(--paper);\n}\nhtml{\n    margin-top: 0 !important;\n}\na.grotesk-link{\n    font-family: \"Hanken Grotesk\", sans-serif !important;\n}\n\n\nimg[title=\"Fox News\"]{\n    filter:unset !important;\n}\n\nblockquote{\n    color: rgb(234, 230, 240);\n    padding: 0;\n    border-left: none;\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5fe1174 elementor-widget elementor-widget-html\" data-id=\"5fe1174\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<script src=\"data:text\/javascript;base64,Ly8gR0VORVJBVEVEIGZyb20gZGMtcnVudGltZS9zcmMvKi50cyDigJQgZG8gbm90IGVkaXQuIFJlYnVpbGQgd2l0aCBgY2QgZGMtcnVudGltZSAmJiBidW4gcnVuIGJ1aWxkYC4KInVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlOwogIHZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPT0gInN5bWJvbCIgPyBrZXkgKyAiIiA6IGtleSwgdmFsdWUpOwoKICAvLyBzcmMvcmVhY3QudHMKICBmdW5jdGlvbiBnZXRSZWFjdCgpIHsKICAgIGNvbnN0IFIgPSB3aW5kb3cuUmVhY3Q7CiAgICBpZiAoIVIpIHRocm93IG5ldyBFcnJvcigiZGMtcnVudGltZTogd2luZG93LlJlYWN0IGlzIG5vdCBhdmFpbGFibGUgeWV0Iik7CiAgICByZXR1cm4gUjsKICB9CiAgZnVuY3Rpb24gZ2V0UmVhY3RET00oKSB7CiAgICBjb25zdCBSRCA9IHdpbmRvdy5SZWFjdERPTTsKICAgIGlmICghUkQpIHRocm93IG5ldyBFcnJvcigiZGMtcnVudGltZTogd2luZG93LlJlYWN0RE9NIGlzIG5vdCBhdmFpbGFibGUgeWV0Iik7CiAgICByZXR1cm4gUkQ7CiAgfQogIHZhciBoID0gKCguLi5hcmdzKSA9PiBnZXRSZWFjdCgpLmNyZWF0ZUVsZW1lbnQoCiAgICAuLi5hcmdzCiAgKSk7CgogIC8vIHNyYy9wYXJzZS50cwogIGZ1bmN0aW9uIHBhcnNlRGNEb2N1bWVudChkb2MpIHsKICAgIGNvbnN0IGRjID0gZG9jLnF1ZXJ5U2VsZWN0b3IoIngtZGMiKTsKICAgIGlmICghZGMpIHJldHVybiBudWxsOwogICAgY29uc3Qgc2NyaXB0RWwgPSBkb2MucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZGMtc2NyaXB0XSIpOwogICAgY29uc3QgeyBwcm9wcywgcHJldmlldyB9ID0gcGFyc2VEYXRhUHJvcHMoCiAgICAgIHNjcmlwdEVsPy5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvcHMiKSA\/PyBudWxsCiAgICApOwogICAgcmV0dXJuIHsKICAgICAgdGVtcGxhdGU6IGRjLmlubmVySFRNTCwKICAgICAganM6IHNjcmlwdEVsID8gc2NyaXB0RWwudGV4dENvbnRlbnQgfHwgIiIgOiAiIiwKICAgICAgcHJvcHMsCiAgICAgIHByZXZpZXcKICAgIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlRGNUZXh0KHNyYykgewogICAgY29uc3Qgb3Blbk1hdGNoID0gLzx4LWRjKD86XHNbXj5dKik\/Pi8uZXhlYyhzcmMpOwogICAgaWYgKCFvcGVuTWF0Y2gpIHJldHVybiBudWxsOwogICAgY29uc3QgY2xvc2UgPSBzcmMubGFzdEluZGV4T2YoIjwveC1kYz4iKTsKICAgIGlmIChjbG9zZSA9PT0gLTEgfHwgY2xvc2UgPCBvcGVuTWF0Y2guaW5kZXgpIHJldHVybiBudWxsOwogICAgY29uc3QgdGVtcGxhdGUgPSBzcmMuc2xpY2Uob3Blbk1hdGNoLmluZGV4ICsgb3Blbk1hdGNoWzBdLmxlbmd0aCwgY2xvc2UpOwogICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICJ0ZXh0L2h0bWwiKTsKICAgIGNvbnN0IHNjcmlwdEVsID0gZG9jLnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWRjLXNjcmlwdF0iKTsKICAgIGNvbnN0IHsgcHJvcHMsIHByZXZpZXcgfSA9IHBhcnNlRGF0YVByb3BzKAogICAgICBzY3JpcHRFbD8uZ2V0QXR0cmlidXRlKCJkYXRhLXByb3BzIikgPz8gbnVsbAogICAgKTsKICAgIHJldHVybiB7CiAgICAgIHRlbXBsYXRlLAogICAgICBqczogc2NyaXB0RWwgPyBzY3JpcHRFbC50ZXh0Q29udGVudCB8fCAiIiA6ICIiLAogICAgICBwcm9wcywKICAgICAgcHJldmlldwogICAgfTsKICB9CiAgZnVuY3Rpb24gcGFyc2VEYXRhUHJvcHMocmF3KSB7CiAgICBpZiAoIXJhdykgcmV0dXJuIHsgcHJvcHM6IG51bGwsIHByZXZpZXc6IG51bGwgfTsKICAgIGxldCBwYXJzZWQ7CiAgICB0cnkgewogICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIHsgcHJvcHM6IG51bGwsIHByZXZpZXc6IG51bGwgfTsKICAgIH0KICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICJvYmplY3QiIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkgewogICAgICByZXR1cm4geyBwcm9wczogbnVsbCwgcHJldmlldzogbnVsbCB9OwogICAgfQogICAgY29uc3Qgb2JqID0gcGFyc2VkOwogICAgY29uc3QgcHJldmlldyA9IG9iai4kcHJldmlldyAmJiB0eXBlb2Ygb2JqLiRwcmV2aWV3ID09PSAib2JqZWN0IiA\/IG9iai4kcHJldmlldyA6IG51bGw7CiAgICBjb25zdCByZXN0ID0ge307CiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMob2JqKSkgewogICAgICBpZiAoa1swXSAhPT0gIiQiKSByZXN0W2tdID0gb2JqW2tdOwogICAgfQogICAgcmV0dXJuIHsgcHJvcHM6IE9iamVjdC5rZXlzKHJlc3QpLmxlbmd0aCA\/IHJlc3QgOiBudWxsLCBwcmV2aWV3IH07CiAgfQogIGZ1bmN0aW9uIGRjTmFtZUZyb21QYXRoKHBhdGhuYW1lKSB7CiAgICBsZXQgcCA9IHBhdGhuYW1lIHx8ICIiOwogICAgdHJ5IHsKICAgICAgcCA9IGRlY29kZVVSSUNvbXBvbmVudChwKTsKICAgIH0gY2F0Y2ggewogICAgfQogICAgY29uc3QgYmFzZSA9IHAuc3BsaXQoIi8iKS5wb3AoKSB8fCAiUm9vdCI7CiAgICByZXR1cm4gYmFzZS5yZXBsYWNlKC9cLmRjXC5odG1sJC8sICIiKS5yZXBsYWNlKC9cLmh0bWw\/JC8sICIiKSB8fCAiUm9vdCI7CiAgfQoKICAvLyBzcmMvYm9vdC50cwogIHZhciBCQVNFX0NTUyA9IGAKICAgIC5zYy1wbGFjZWhvbGRlcntiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciA4JSx0cmFuc3BhcmVudCk7CiAgICAgIGJvcmRlcjoxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsY3VycmVudENvbG9yIDUwJSx0cmFuc3BhcmVudCk7CiAgICAgIGJvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW59CiAgICBAa2V5ZnJhbWVzIHNjLXNoaW5lezAle2JhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCV9MTAwJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAlIDUwJX19CiAgICBodG1sLnNjLWRjLXN0cmVhbWluZyAuc2MtcGxhY2Vob2xkZXIsCiAgICBodG1sLnNjLWRjLXN0cmVhbWluZyAuc2MtaW50ZXJwLnNjLW1pc3Npbmd7cG9zaXRpb246cmVsYXRpdmU7CiAgICAgIGJhY2tncm91bmQ6Y29sb3ItbWl4KGluIHNyZ2IsY3VycmVudENvbG9yIDUlLHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fQogICAgaHRtbC5zYy1kYy1zdHJlYW1pbmcgLnNjLXBsYWNlaG9sZGVyOjpiZWZvcmUsCiAgICBodG1sLnNjLWRjLXN0cmVhbWluZyAuc2MtaW50ZXJwLnNjLW1pc3Npbmc6OmJlZm9yZXtjb250ZW50OicnOwogICAgICBwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7CiAgICAgIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoMjE3LDExOSw4NywwKSAyNSUscmdiYSgyNDcsMjI1LDIxMSwuOTUpIDM3JSxyZ2JhKDIxNywxMTksODcsMCkgNjMlKTsKICAgICAgYmFja2dyb3VuZC1zaXplOjQwMCUgMTAwJTthbmltYXRpb246c2Mtc2hpbmUgMS40cyBlYXNlIGluZmluaXRlfQogICAgaHRtbC5zYy1kYy1zdHJlYW1pbmcgLnNjLXBsYWNlaG9sZGVyOm50aC1jaGlsZChuKzkgb2YgLnNjLXBsYWNlaG9sZGVyKTo6YmVmb3JlLAogICAgaHRtbC5zYy1kYy1zdHJlYW1pbmcgLnNjLWludGVycC5zYy1taXNzaW5nOm50aC1jaGlsZChuKzkgb2YgLnNjLWludGVycC5zYy1taXNzaW5nKTo6YmVmb3Jle2FuaW1hdGlvbjpub25lOwogICAgICBiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciA4JSx0cmFuc3BhcmVudCl9CiAgICAuc2MtcGxhY2Vob2xkZXItZXJyb3J7cGFkZGluZzo0cHggOHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTsKICAgICAgY29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsY3VycmVudENvbG9yIDcwJSx0cmFuc3BhcmVudCk7d29yZC1icmVhazpicmVhay13b3JkfQogICAgLnNjLWludGVycC5zYy1taXNzaW5ne2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjJlbTtoZWlnaHQ6MWVtO292ZXJmbG93OmhpZGRlbjsKICAgICAgdmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjUpOwogICAgICBib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dHJhbnNwYXJlbnQ7CiAgICAgIHVzZXItc2VsZWN0Om5vbmV9CiAgICAuc2MtaW50ZXJwLnNjLXVucmVzb2x2ZWR7Zm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6Ljg1ZW07CiAgICAgIGNvbG9yOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciA1MCUsdHJhbnNwYXJlbnQpOwogICAgICBiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciAxMCUsdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6M3B4OwogICAgICBwYWRkaW5nOjAgM3B4fQogICAgLnNjLWhvc3Quc2MtaGFzLWVycm9ye3Bvc2l0aW9uOnJlbGF0aXZlfQogICAgLnNjLWxvZ2ljLWVycm9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7bGVmdDo4cHg7ei1pbmRleDoyMTQ3NDgzNjQ3O21heC13aWR0aDo2MGNoOwogICAgICBwYWRkaW5nOjZweCAxMHB4O2JhY2tncm91bmQ6I2IwMDAyMDtjb2xvcjojZmZmO2ZvbnQ6MTJweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTsKICAgICAgYm9yZGVyLXJhZGl1czo0cHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7cG9pbnRlci1ldmVudHM6bm9uZX0KICAgIC8qIE1pcnJvcnMgUFJJTlRfQkFTRUxJTkVfQ1NTIGluIGFwcHMvd2ViIGRlY2stc3RhZ2UtZXhwb3J0LnRzIFx1MjAxNCBrZWVwIGJvdGgKICAgICAgIGluIHN5bmMgdW50aWwgZGMtcnVudGltZSByZWdhaW5zIGEgYnVpbGQgc3RlcC4gKi8KICAgIEBtZWRpYSBwcmludCB7CiAgICAgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfQogICAgICBmaWd1cmUsIHRhYmxlIHsgYnJlYWstaW5zaWRlOiBhdm9pZDsgfQogICAgICAjZGMtcm9vdCwgI2RjLXJvb3QgPiAuc2MtaG9zdCB7IGhlaWdodDogYXV0bzsgfQogICAgICAqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHsKICAgICAgICBwcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OyAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7CiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBub25lICFpbXBvcnRhbnQ7IC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtOTlzICFpbXBvcnRhbnQ7IGFuaW1hdGlvbi1kdXJhdGlvbjogLjAwMXMgIWltcG9ydGFudDsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxICFpbXBvcnRhbnQ7IGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGggIWltcG9ydGFudDsKICAgICAgICBhbmltYXRpb24tcGxheS1zdGF0ZTogcnVubmluZyAhaW1wb3J0YW50OyB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwcyAhaW1wb3J0YW50OwogICAgICB9CiAgICB9CiAgYDsKICB2YXIgRlVMTF9QQUdFX0NTUyA9ICJodG1sLGJvZHl7aGVpZ2h0OjEwMCU7bWFyZ2luOjB9I2RjLXJvb3QsI2RjLXJvb3Q+LnNjLWhvc3R7aGVpZ2h0OjEwMCV9IjsKICBmdW5jdGlvbiByb290TmFtZUZvckRvY3VtZW50KGRvYywgbG9jKSB7CiAgICBsZXQgYm9vdFBhdGggPSBsb2MucGF0aG5hbWUgfHwgIiI7CiAgICBpZiAoIS9cLmRjXC5odG1sPyQvaS50ZXN0KHNhZmVEZWNvZGUoYm9vdFBhdGgpKSkgewogICAgICB0cnkgewogICAgICAgIGJvb3RQYXRoID0gbmV3IFVSTChkb2MuYmFzZVVSSSB8fCAiLyIpLnBhdGhuYW1lOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRjTmFtZUZyb21QYXRoKGJvb3RQYXRoKTsKICB9CiAgZnVuY3Rpb24gc2FmZURlY29kZShzKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHMpOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBzOwogICAgfQogIH0KICBmdW5jdGlvbiBib290KHJ1bnRpbWUsIGRvYyA9IGRvY3VtZW50KSB7CiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURjRG9jdW1lbnQoZG9jKTsKICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IFJlYWN0ID0gZ2V0UmVhY3QoKTsKICAgIGNvbnN0IHJvb3ROYW1lID0gcm9vdE5hbWVGb3JEb2N1bWVudChkb2MsIGxvY2F0aW9uKTsKICAgIHJ1bnRpbWUubWFya0ZldGNoZWQocm9vdE5hbWUpOwogICAgcnVudGltZS5zZXRSb290TmFtZShyb290TmFtZSk7CiAgICBydW50aW1lLmFkb3B0UGFyc2VkKHJvb3ROYW1lLCBwYXJzZWQpOwogICAgZmV0Y2gobG9jYXRpb24uaHJlZikudGhlbigocmVzKSA9PiByZXMub2sgPyByZXMudGV4dCgpIDogIiIpLnRoZW4oKHQpID0+IHsKICAgICAgY29uc3QgcmF3ID0gdCA\/IHBhcnNlRGNUZXh0KHQpIDogbnVsbDsKICAgICAgaWYgKHJhdz8udGVtcGxhdGUpIHJ1bnRpbWUudXBkYXRlSHRtbChyb290TmFtZSwgcmF3LnRlbXBsYXRlKTsKICAgIH0pLmNhdGNoKCgpID0+IHsKICAgIH0pOwogICAgY29uc3QgZGMgPSBkb2MucXVlcnlTZWxlY3RvcigieC1kYyIpOwogICAgY29uc3QgaG9zdEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgaG9zdEVsLmlkID0gImRjLXJvb3QiOwogICAgZGMucmVwbGFjZVdpdGgoaG9zdEVsKTsKICAgIGlmICghcGFyc2VkLnByZXZpZXcpIHsKICAgICAgY29uc3QgcyA9IGRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICBzLnRleHRDb250ZW50ID0gRlVMTF9QQUdFX0NTUzsKICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBjb25zdCBSb290ID0gcnVudGltZS5nZXREQyhyb290TmFtZSk7CiAgICBjb25zdCBlbnRyeSA9IHJ1bnRpbWUucmVnaXN0cnkuZ2V0KHJvb3ROYW1lKTsKICAgIGZ1bmN0aW9uIFN0YW5kYWxvbmVSb290KCkgewogICAgICBjb25zdCBbLCBzZXRUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApOwogICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gewogICAgICAgIGNvbnN0IHN1YiA9ICgpID0+IHNldFRpY2soKG4pID0+IG4gKyAxKTsKICAgICAgICBlbnRyeS5zdWJzLmFkZChzdWIpOwogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICBlbnRyeS5zdWJzLmRlbGV0ZShzdWIpOwogICAgICAgIH07CiAgICAgIH0sIFtdKTsKICAgICAgY29uc3QgZGVmYXVsdHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHsKICAgICAgICBjb25zdCBkID0ge307CiAgICAgICAgZm9yIChjb25zdCBrIGluIGVudHJ5LnByb3BzTWV0YSB8fCB7fSkgewogICAgICAgICAgY29uc3QgdiA9IGVudHJ5LnByb3BzTWV0YT8uW2tdPy5kZWZhdWx0OwogICAgICAgICAgaWYgKHYgIT09IHZvaWQgMCkgZFtrXSA9IHY7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkOwogICAgICB9LCBbZW50cnkucHJvcHNNZXRhXSk7CiAgICAgIHJldHVybiBoKFJvb3QsIHsgLi4uZGVmYXVsdHMsIC4uLmVudHJ5LnByb3BPdmVycmlkZXMgfHwge30gfSk7CiAgICB9CiAgICBjb25zdCBSZWFjdERPTSA9IGdldFJlYWN0RE9NKCk7CiAgICBpZiAoUmVhY3RET00uY3JlYXRlUm9vdCkKICAgICAgUmVhY3RET00uY3JlYXRlUm9vdChob3N0RWwpLnJlbmRlcihoKFN0YW5kYWxvbmVSb290KSk7CiAgICBlbHNlIFJlYWN0RE9NLnJlbmRlcihoKFN0YW5kYWxvbmVSb290KSwgaG9zdEVsKTsKICAgIHJldHVybiByb290TmFtZTsKICB9CgogIC8vIHNyYy9leHByLnRzCiAgdmFyIElERU5UX1JFID0gL15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSovOwogIHZhciBOVU1CRVJfUkUgPSAvXi0\/XGQrKFwuXGQrKT8kLzsKICBmdW5jdGlvbiByZXNvbHZlKHZhbHMsIHNyYykgewogICAgY29uc3QgZXhwciA9IFN0cmluZyhzcmMpLnRyaW0oKTsKICAgIGlmICghZXhwcikgcmV0dXJuIHZvaWQgMDsKICAgIGlmIChleHByWzBdID09PSAiKCIgJiYgZXhwcltleHByLmxlbmd0aCAtIDFdID09PSAiKSIgJiYgcGFyZW5zV3JhcFdob2xlKGV4cHIpKSB7CiAgICAgIHJldHVybiByZXNvbHZlKHZhbHMsIGV4cHIuc2xpY2UoMSwgLTEpKTsKICAgIH0KICAgIGNvbnN0IGVxID0gZmluZFRvcExldmVsRXF1YWxpdHkoZXhwcik7CiAgICBpZiAoZXEpIHsKICAgICAgY29uc3QgbHYgPSByZXNvbHZlKHZhbHMsIGV4cHIuc2xpY2UoMCwgZXEuaW5kZXgpKTsKICAgICAgY29uc3QgcnYgPSByZXNvbHZlKHZhbHMsIGV4cHIuc2xpY2UoZXEuaW5kZXggKyBlcS5vcC5sZW5ndGgpKTsKICAgICAgc3dpdGNoIChlcS5vcCkgewogICAgICAgIGNhc2UgIj09PSI6CiAgICAgICAgICByZXR1cm4gbHYgPT09IHJ2OwogICAgICAgIGNhc2UgIiE9PSI6CiAgICAgICAgICByZXR1cm4gbHYgIT09IHJ2OwogICAgICAgIGNhc2UgIj09IjoKICAgICAgICAgIHJldHVybiBsdiA9PSBydjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGx2ICE9IHJ2OwogICAgICB9CiAgICB9CiAgICBpZiAoZXhwclswXSA9PT0gIiEiKSByZXR1cm4gIXJlc29sdmUodmFscywgZXhwci5zbGljZSgxKSk7CiAgICBpZiAoZXhwciA9PT0gInRydWUiKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChleHByID09PSAiZmFsc2UiKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZXhwciA9PT0gIm51bGwiKSByZXR1cm4gbnVsbDsKICAgIGlmIChleHByID09PSAidW5kZWZpbmVkIikgcmV0dXJuIHZvaWQgMDsKICAgIGlmIChOVU1CRVJfUkUudGVzdChleHByKSkgcmV0dXJuIE51bWJlcihleHByKTsKICAgIGlmIChleHByLmxlbmd0aCA+PSAyICYmIChleHByWzBdID09PSAnIicgfHwgZXhwclswXSA9PT0gIiciKSAmJiBleHByW2V4cHIubGVuZ3RoIC0gMV0gPT09IGV4cHJbMF0pIHsKICAgICAgcmV0dXJuIGV4cHIuc2xpY2UoMSwgLTEpOwogICAgfQogICAgcmV0dXJuIHJlc29sdmVQYXRoKHZhbHMsIGV4cHIpOwogIH0KICBmdW5jdGlvbiBwYXJlbnNXcmFwV2hvbGUoZXhwcikgewogICAgbGV0IGRlcHRoID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwci5sZW5ndGggLSAxOyBpKyspIHsKICAgICAgaWYgKGV4cHJbaV0gPT09ICIoIikgZGVwdGgrKzsKICAgICAgZWxzZSBpZiAoZXhwcltpXSA9PT0gIikiKSB7CiAgICAgICAgZGVwdGgtLTsKICAgICAgICBpZiAoZGVwdGggPT09IDApIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIGZpbmRUb3BMZXZlbEVxdWFsaXR5KGV4cHIpIHsKICAgIGxldCBkZXB0aCA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYyA9IGV4cHJbaV07CiAgICAgIGlmIChjID09PSAiWyIgfHwgYyA9PT0gIigiKSBkZXB0aCsrOwogICAgICBlbHNlIGlmIChjID09PSAiXSIgfHwgYyA9PT0gIikiKSBkZXB0aC0tOwogICAgICBlbHNlIGlmIChkZXB0aCA9PT0gMCAmJiAoYyA9PT0gIj0iIHx8IGMgPT09ICIhIikgJiYgZXhwcltpICsgMV0gPT09ICI9IikgewogICAgICAgIGlmIChpID4gMCAmJiAoZXhwcltpIC0gMV0gPT09ICI9IiB8fCBleHByW2kgLSAxXSA9PT0gIiEiKSkgY29udGludWU7CiAgICAgICAgaWYgKCFleHByLnNsaWNlKDAsIGkpLnRyaW0oKSkgY29udGludWU7CiAgICAgICAgY29uc3Qgb3AgPSBleHByW2kgKyAyXSA9PT0gIj0iID8gYyArICI9PSIgOiBjICsgIj0iOwogICAgICAgIHJldHVybiB7IGluZGV4OiBpLCBvcCB9OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gcmVzb2x2ZVBhdGgodmFscywgZXhwcikgewogICAgY29uc3QgaGVhZCA9IGV4cHIubWF0Y2goSURFTlRfUkUpOwogICAgaWYgKCFoZWFkKSByZXR1cm4gdm9pZCAwOwogICAgbGV0IGN1ciA9IHZhbHMgPT0gbnVsbCA\/IHZvaWQgMCA6IHZhbHNbaGVhZFswXV07CiAgICBsZXQgaSA9IGhlYWRbMF0ubGVuZ3RoOwogICAgd2hpbGUgKGkgPCBleHByLmxlbmd0aCkgewogICAgICBpZiAoZXhwcltpXSA9PT0gIi4iKSB7CiAgICAgICAgY29uc3QgbSA9IGV4cHIuc2xpY2UoaSArIDEpLm1hdGNoKElERU5UX1JFKSB8fCBleHByLnNsaWNlKGkgKyAxKS5tYXRjaCgvXlxkKy8pOwogICAgICAgIGlmICghbSkgcmV0dXJuIHZvaWQgMDsKICAgICAgICBjdXIgPSBjdXIgPT0gbnVsbCA\/IHZvaWQgMCA6IGN1clttWzBdXTsKICAgICAgICBpICs9IDEgKyBtWzBdLmxlbmd0aDsKICAgICAgfSBlbHNlIGlmIChleHByW2ldID09PSAiWyIpIHsKICAgICAgICBsZXQgZGVwdGggPSAxOwogICAgICAgIGxldCBqID0gaSArIDE7CiAgICAgICAgd2hpbGUgKGogPCBleHByLmxlbmd0aCAmJiBkZXB0aCA+IDApIHsKICAgICAgICAgIGlmIChleHByW2pdID09PSAiWyIpIGRlcHRoKys7CiAgICAgICAgICBlbHNlIGlmIChleHByW2pdID09PSAiXSIpIHsKICAgICAgICAgICAgZGVwdGgtLTsKICAgICAgICAgICAgaWYgKGRlcHRoID09PSAwKSBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgaWYgKGRlcHRoICE9PSAwKSByZXR1cm4gdm9pZCAwOwogICAgICAgIGNvbnN0IGtleSA9IHJlc29sdmUodmFscywgZXhwci5zbGljZShpICsgMSwgaikpOwogICAgICAgIGN1ciA9IGN1ciA9PSBudWxsID8gdm9pZCAwIDogY3VyW2tleV07CiAgICAgICAgaSA9IGogKyAxOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjdXI7CiAgfQoKICAvLyBzcmMvZW5jb2RlLnRzCiAgdmFyIENBTUVMX0FUVFIgPSAic2MtY2FtZWwtIjsKICB2YXIgSU5MSU5FX1RFWFRfVEFHUyA9IG5ldyBTZXQoCiAgICAiYSBhYmJyIGIgYmRpIGJkbyBiciBjaXRlIGNvZGUgZGVsIGRmbiBlbSBpIGlucyBrYmQgbWFyayBxIHMgc2FtcCBzbWFsbCBzcGFuIHN0cmlrZSBzdHJvbmcgc3ViIHN1cCB1IHZhciB3YnIiLnNwbGl0KAogICAgICAiICIKICAgICkKICApOwogIHZhciBSQVdfV1JBUCA9IHsKICAgIHNlbGVjdDogInNjLXJhdy1zZWxlY3QiLAogICAgdGFibGU6ICJzYy1yYXctdGFibGUiLAogICAgdGJvZHk6ICJzYy1yYXctdGJvZHkiLAogICAgdGhlYWQ6ICJzYy1yYXctdGhlYWQiLAogICAgdGZvb3Q6ICJzYy1yYXctdGZvb3QiLAogICAgdHI6ICJzYy1yYXctdHIiLAogICAgdGQ6ICJzYy1yYXctdGQiLAogICAgdGg6ICJzYy1yYXctdGgiLAogICAgY2FwdGlvbjogInNjLXJhdy1jYXB0aW9uIgogIH07CiAgdmFyIFJBV19VTldSQVAgPSBPYmplY3QuZnJvbUVudHJpZXMoCiAgICBPYmplY3QuZW50cmllcyhSQVdfV1JBUCkubWFwKChbaywgdl0pID0+IFt2LCBrXSkKICApOwogIHZhciBFVkVOVF9NQVAgPSB7CiAgICBvbmNsaWNrOiAib25DbGljayIsCiAgICBvbmNoYW5nZTogIm9uQ2hhbmdlIiwKICAgIG9uaW5wdXQ6ICJvbklucHV0IiwKICAgIG9uc3VibWl0OiAib25TdWJtaXQiLAogICAgb25rZXlkb3duOiAib25LZXlEb3duIiwKICAgIG9ua2V5dXA6ICJvbktleVVwIiwKICAgIG9ua2V5cHJlc3M6ICJvbktleVByZXNzIiwKICAgIG9ubW91c2Vkb3duOiAib25Nb3VzZURvd24iLAogICAgb25tb3VzZXVwOiAib25Nb3VzZVVwIiwKICAgIG9ubW91c2VlbnRlcjogIm9uTW91c2VFbnRlciIsCiAgICBvbm1vdXNlbGVhdmU6ICJvbk1vdXNlTGVhdmUiLAogICAgb25mb2N1czogIm9uRm9jdXMiLAogICAgb25ibHVyOiAib25CbHVyIiwKICAgIG9uZG91YmxlY2xpY2s6ICJvbkRvdWJsZUNsaWNrIiwKICAgIG9uY29udGV4dG1lbnU6ICJvbkNvbnRleHRNZW51IgogIH07CiAgdmFyIEFUVFJTID0gYCg\/OltePiInXXwiW14iXSoifCdbXiddKicpKmA7CiAgdmFyIElNUE9SVF9TRUxGX0NMT1NFX1JFID0gbmV3IFJlZ0V4cCgKICAgICI8KHgtaW1wb3J0fGRjLWltcG9ydCkoIiArIEFUVFJTICsgIikvPiIsCiAgICAiZ2kiCiAgKTsKICB2YXIgQ0FNRUxfQVRUUl9SRSA9IC8oXHMpKFthLXpdK1tBLVpdW0EtWmEtejAtOV0qKShccyo9KS9nOwogIGZ1bmN0aW9uIGVuY29kZUNhc2UoaHRtbCkgewogICAgaHRtbCA9IGh0bWwucmVwbGFjZSgKICAgICAgSU1QT1JUX1NFTEZfQ0xPU0VfUkUsCiAgICAgIChfLCB0LCBhKSA9PiAiPCIgKyB0ICsgYSArICI+PC8iICsgdCArICI+IgogICAgKTsKICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxoZWxtZXQoXHN8PikvZ2ksICI8c2MtaGVsbWV0JDEiKTsKICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLzxcL2hlbG1ldFxzKj4vZ2ksICI8L3NjLWhlbG1ldD4iKTsKICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoCiAgICAgIENBTUVMX0FUVFJfUkUsCiAgICAgIChfLCBzcCwgbmFtZSwgZXEpID0+IHNwICsgQ0FNRUxfQVRUUiArIG5hbWUucmVwbGFjZSgvW0EtWl0vZywgKGMpID0+ICItIiArIGMudG9Mb3dlckNhc2UoKSkgKyBlcQogICAgKTsKICAgIGZvciAoY29uc3QgW3JlYWwsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhSQVdfV1JBUCkpIHsKICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZSgKICAgICAgICBuZXcgUmVnRXhwKCIoPC8\/KSIgKyByZWFsICsgIig\/PVtcXHM+XSkiLCAiZ2kiKSwKICAgICAgICAiJDEiICsgYWxpYXMKICAgICAgKTsKICAgIH0KICAgIHJldHVybiBodG1sOwogIH0KICBmdW5jdGlvbiBrZWJhYlRvQ2FtZWwocykgewogICAgcmV0dXJuIHMucmVwbGFjZSgvLShbYS16XSkvZywgKF8sIGMpID0+IGMudG9VcHBlckNhc2UoKSk7CiAgfQogIGZ1bmN0aW9uIGNzc1RvT2JqKGNzcykgewogICAgY29uc3QgbyA9IHt9OwogICAgZm9yIChjb25zdCBkZWNsIG9mIGNzcy5zcGxpdCgiOyIpKSB7CiAgICAgIGNvbnN0IGkgPSBkZWNsLmluZGV4T2YoIjoiKTsKICAgICAgaWYgKGkgPCAwKSBjb250aW51ZTsKICAgICAgY29uc3QgcHJvcCA9IGRlY2wuc2xpY2UoMCwgaSkudHJpbSgpOwogICAgICBvW3Byb3Auc3RhcnRzV2l0aCgiLS0iKSA\/IHByb3AgOiBrZWJhYlRvQ2FtZWwocHJvcCldID0gZGVjbC5zbGljZShpICsgMSkudHJpbSgpOwogICAgfQogICAgcmV0dXJuIG87CiAgfQogIGZ1bmN0aW9uIGNvbXBpbGVBdHRyKHJhdykgewogICAgY29uc3Qgd2hvbGUgPSByYXcubWF0Y2goL15ccypce1x7KFtcc1xTXSs\/KVx9XH1ccyokLyk7CiAgICBpZiAod2hvbGUpIHsKICAgICAgY29uc3QgcGF0aCA9IHdob2xlWzFdOwogICAgICByZXR1cm4gKHZhbHMpID0+IHJlc29sdmUodmFscywgcGF0aCk7CiAgICB9CiAgICBpZiAocmF3LmluY2x1ZGVzKCJ7eyIpKSB7CiAgICAgIGNvbnN0IHBhcnRzID0gcmF3LnNwbGl0KC9ce1x7KFtcc1xTXSs\/KVx9XH0vZyk7CiAgICAgIHJldHVybiAodmFscykgPT4gcGFydHMubWFwKChzLCBpKSA9PiBpICYgMSA\/IHJlc29sdmUodmFscywgcykgPz8gIiIgOiBzKS5qb2luKCIiKTsKICAgIH0KICAgIHJldHVybiAoKSA9PiByYXc7CiAgfQoKICAvLyBzcmMvY29tcGlsZS50cwogIGZ1bmN0aW9uIGNvbGxlY3RQcm9wcyhub2RlLCBraW5kLCBob3N0KSB7CiAgICBjb25zdCBwcm9wR2V0dGVycyA9IFtdOwogICAgY29uc3QgcHNldWRvQ2xhc3NlcyA9IFtdOwogICAgbGV0IGhpbnRTaXplID0gbnVsbDsKICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIFsuLi5ub2RlLmF0dHJpYnV0ZXNdKSB7CiAgICAgIGlmIChuYW1lID09PSAic2MtbmFtZSIgfHwgbmFtZSA9PT0gImRhdGEtZGMtdHBsIikgY29udGludWU7CiAgICAgIGxldCBrZXkgPSBuYW1lOwogICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoQ0FNRUxfQVRUUikpCiAgICAgICAga2V5ID0ga2ViYWJUb0NhbWVsKGtleS5zbGljZShDQU1FTF9BVFRSLmxlbmd0aCkpOwogICAgICBpZiAoa2V5ID09PSAiaGludC1zaXplIikgewogICAgICAgIGhpbnRTaXplID0gdmFsdWU7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCJzdHlsZS0iKSkgewogICAgICAgIHBzZXVkb0NsYXNzZXMucHVzaChob3N0LnBzZXVkb0NsYXNzKGtleS5zbGljZSg2KSwgdmFsdWUpKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoa2luZCAhPT0gImRvbSIpIHsKICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCItIikgJiYgIShraW5kID09PSAieC1pbXBvcnQiICYmIChrZXkuc3RhcnRzV2l0aCgiYXJpYS0iKSB8fCBrZXkuc3RhcnRzV2l0aCgiZGF0YS0iKSkpKQogICAgICAgICAga2V5ID0ga2ViYWJUb0NhbWVsKGtleSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGtleSA9PT0gImNsYXNzIikga2V5ID0gImNsYXNzTmFtZSI7CiAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAiZm9yIikga2V5ID0gImh0bWxGb3IiOwogICAgICAgIGVsc2UgaWYgKGtleS5zdGFydHNXaXRoKCJvbiIpKQogICAgICAgICAga2V5ID0gRVZFTlRfTUFQW2tleV0gfHwgIm9uIiArIGtleVsyXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDMpOwogICAgICB9CiAgICAgIHByb3BHZXR0ZXJzLnB1c2goW2tleSwgY29tcGlsZUF0dHIodmFsdWUpXSk7CiAgICB9CiAgICByZXR1cm4geyBwcm9wR2V0dGVycywgcHNldWRvQ2xhc3NlcywgaGludFNpemUgfTsKICB9CiAgdmFyIEhPU1RfU1RZTEVfUFJPUFMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbCiAgICAicG9zaXRpb24iLAogICAgImxlZnQiLAogICAgInJpZ2h0IiwKICAgICJ0b3AiLAogICAgImJvdHRvbSIsCiAgICAiaW5zZXQiLAogICAgIndpZHRoIiwKICAgICJoZWlnaHQiLAogICAgInotaW5kZXgiLAogICAgInRyYW5zZm9ybSIKICBdKTsKICBmdW5jdGlvbiBob3N0UG9zaXRpb25TdHlsZShzdHlsZSkgewogICAgY29uc3QgYWxsID0gdHlwZW9mIHN0eWxlID09PSAic3RyaW5nIiA\/IGNzc1RvT2JqKHN0eWxlKSA6IHN0eWxlICE9IG51bGwgJiYgdHlwZW9mIHN0eWxlID09PSAib2JqZWN0IiA\/IHN0eWxlIDogbnVsbDsKICAgIGlmICghYWxsKSByZXR1cm4gdm9pZCAwOwogICAgY29uc3Qgb3V0ID0ge307CiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhhbGwpKSB7CiAgICAgIGNvbnN0IGtlYmFiID0gay5yZXBsYWNlKC9bQS1aXS9nLCAoYykgPT4gIi0iICsgYy50b0xvd2VyQ2FzZSgpKTsKICAgICAgaWYgKEhPU1RfU1RZTEVfUFJPUFMuaGFzKGtlYmFiKSkgb3V0W2tdID0gdjsKICAgIH0KICAgIHJldHVybiBPYmplY3Qua2V5cyhvdXQpLmxlbmd0aCA\/IG91dCA6IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gY29tcGlsZVRlbXBsYXRlKGh0bWwsIGhvc3QpIHsKICAgIGNvbnN0IHRwbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7CiAgICAvLyEgbm9zZW1ncmVwOiBkaXJlY3QtaW5uZXItaHRtbC1hc3NpZ25tZW50CiAgICB0cGwuaW5uZXJIVE1MID0gZW5jb2RlQ2FzZShodG1sKTsKICAgIGxldCB0cGxOID0gMDsKICAgIChmdW5jdGlvbiBzdGFtcChub2RlKSB7CiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJkYXRhLWRjLXRwbCIsIFN0cmluZyh0cGxOKyspKTsKICAgICAgfQogICAgICBmb3IgKGNvbnN0IGMgb2Ygbm9kZS5jaGlsZE5vZGVzKSBzdGFtcChjKTsKICAgIH0pKHRwbC5jb250ZW50KTsKICAgIGNvbnN0IGJ1aWxkZXJzID0gd2Fsa0NoaWxkcmVuKHRwbC5jb250ZW50LCBob3N0KTsKICAgIGNvbnN0IHJlbmRlciA9ICgodmFscywgY3R4KSA9PiBidWlsZGVycy5tYXAoKGIsIGkpID0+IGIodmFscyB8fCB7fSwgY3R4LCBpKSkpOwogICAgcmVuZGVyLl9fYW5ub3RhdGVkID0gdHBsLmlubmVySFRNTDsKICAgIHJldHVybiByZW5kZXI7CiAgfQogIGZ1bmN0aW9uIHdhbGtDaGlsZHJlbihub2RlLCBob3N0KSB7CiAgICByZXR1cm4gWy4uLm5vZGUuY2hpbGROb2Rlc10ubWFwKChjKSA9PiB3YWxrKGMsIGhvc3QpKS5maWx0ZXIoKGIpID0+IGIgIT0gbnVsbCk7CiAgfQogIGZ1bmN0aW9uIHdhbGsobm9kZSwgaG9zdCkgewogICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm4gd2Fsa1RleHQobm9kZSk7CiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHJldHVybiBudWxsOwogICAgY29uc3QgZWwgPSBub2RlOwogICAgY29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgaWYgKHRhZyA9PT0gInNjLWZvciIpIHJldHVybiB3YWxrRm9yKGVsLCBob3N0KTsKICAgIGlmICh0YWcgPT09ICJzYy1pZiIpIHJldHVybiB3YWxrSWYoZWwsIGhvc3QpOwogICAgaWYgKHRhZyA9PT0gIngtaW1wb3J0IikgcmV0dXJuIHdhbGtYSW1wb3J0KGVsLCBob3N0KTsKICAgIGlmICh0YWcgPT09ICJzYy1oZWxtZXQiKSByZXR1cm4gaG9zdC5oZWxtZXQoZWwpOwogICAgaWYgKHRhZyA9PT0gImRjLWltcG9ydCIpIHJldHVybiB3YWxrQ29tcG9uZW50KGVsLCBob3N0KTsKICAgIHJldHVybiB3YWxrRWxlbWVudChlbCwgaG9zdCk7CiAgfQogIHZhciB3YXJuZWRIb2xlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgZnVuY3Rpb24gd2FyblVucmVzb2x2ZWQoY3R4LCB3aGF0KSB7CiAgICBjb25zdCBrZXkgPSAoY3R4Py5fX25hbWUgfHwgIj8iKSArICJcMCIgKyB3aGF0OwogICAgaWYgKHdhcm5lZEhvbGVzLmhhcyhrZXkpKSByZXR1cm47CiAgICB3YXJuZWRIb2xlcy5hZGQoa2V5KTsKICAgIGNvbnNvbGUud2FybigiW2RjLXJ1bnRpbWVdICIgKyAoY3R4Py5fX25hbWUgfHwgInRlbXBsYXRlIikgKyAiOiAiICsgd2hhdCk7CiAgfQogIGZ1bmN0aW9uIHdhbGtUZXh0KG5vZGUpIHsKICAgIGNvbnN0IHR4dCA9IG5vZGUubm9kZVZhbHVlID8\/ICIiOwogICAgaWYgKCF0eHQuaW5jbHVkZXMoInt7IikpIHsKICAgICAgaWYgKCF0eHQudHJpbSgpICYmICF0eHQuaW5jbHVkZXMoIiAiKSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAoKSA9PiB0eHQ7CiAgICB9CiAgICBjb25zdCBwYXJ0cyA9IHR4dC5zcGxpdCgvXHtceyhbXHNcU10rPylcfVx9L2cpOwogICAgcmV0dXJuICh2YWxzLCBjdHgsIGtleSkgPT4gaCgKICAgICAgZ2V0UmVhY3QoKS5GcmFnbWVudCwKICAgICAgeyBrZXkgfSwKICAgICAgLi4ucGFydHMubWFwKChwLCBpKSA9PiB7CiAgICAgICAgaWYgKCEoaSAmIDEpKSByZXR1cm4gcDsKICAgICAgICBjb25zdCB2ID0gcmVzb2x2ZSh2YWxzLCBwKTsKICAgICAgICBpZiAodiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpZiAoIWN0eD8uX19zdHJlYW1pbmdOb3cpIHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHk\/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1kYy1lZGl0b3Itb24iKSkgewogICAgICAgICAgICAgIHJldHVybiBoKAogICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgeyBrZXk6IGksIGNsYXNzTmFtZTogInNjLWludGVycCBzYy11bnJlc29sdmVkIiB9LAogICAgICAgICAgICAgICAgInt7ICIgKyBwLnRyaW0oKSArICIgfX0iCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3YXJuVW5yZXNvbHZlZCgKICAgICAgICAgICAgICBjdHgsCiAgICAgICAgICAgICAgInt7ICIgKyBwLnRyaW0oKSArICIgfX0gbmV2ZXIgcmVzb2x2ZWQgXHUyMDE0IHJlbmRlcmVkIGFzIGVtcHR5IgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBoKAogICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgIHsga2V5OiBpLCBjbGFzc05hbWU6ICJzYy1pbnRlcnAgc2MtbWlzc2luZyIgfSwKICAgICAgICAgICAgcC50cmltKCkKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmIChnZXRSZWFjdCgpLmlzVmFsaWRFbGVtZW50KHYpIHx8IEFycmF5LmlzQXJyYXkodikpIHsKICAgICAgICAgIHJldHVybiBoKGdldFJlYWN0KCkuRnJhZ21lbnQsIHsga2V5OiBpIH0sIHYpOwogICAgICAgIH0KICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB0eXBlb2YgdiA9PT0gImJvb2xlYW4iKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gaCgic3BhbiIsIHsga2V5OiBpLCBjbGFzc05hbWU6ICJzYy1pbnRlcnAiIH0sIFN0cmluZyh2KSk7CiAgICAgIH0pCiAgICApOwogIH0KICBmdW5jdGlvbiB3YWxrRm9yKGVsLCBob3N0KSB7CiAgICBjb25zdCBsaXN0R2V0ID0gY29tcGlsZUF0dHIoZWwuZ2V0QXR0cmlidXRlKCJsaXN0IikgfHwgIiIpOwogICAgY29uc3QgYXNOYW1lID0gZWwuZ2V0QXR0cmlidXRlKCJhcyIpIHx8ICJpdGVtIjsKICAgIGNvbnN0IGhpbnROID0gcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCJoaW50LXBsYWNlaG9sZGVyLWNvdW50IikgfHwgIjAiLCAxMCk7CiAgICBjb25zdCBraWRzID0gd2Fsa0NoaWxkcmVuKGVsLCBob3N0KTsKICAgIGNvbnN0IGxpc3RTcmMgPSBlbC5nZXRBdHRyaWJ1dGUoImxpc3QiKSB8fCAiIjsKICAgIHJldHVybiAodmFscywgY3R4LCBrZXkpID0+IHsKICAgICAgbGV0IGxpc3QgPSBsaXN0R2V0KHZhbHMpOwogICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgICAgICBpZiAoIWN0eD8uX19zdHJlYW1pbmdOb3cpIHsKICAgICAgICAgIGlmIChsaXN0ICE9PSB2b2lkIDAgJiYgbGlzdCAhPT0gbnVsbCkgewogICAgICAgICAgICB3YXJuVW5yZXNvbHZlZCgKICAgICAgICAgICAgICBjdHgsCiAgICAgICAgICAgICAgJ3NjLWZvciBsaXN0PSInICsgbGlzdFNyYyArICciIGlzIG5vdCBhbiBhcnJheSAoJyArIHR5cGVvZiBsaXN0ICsgIikiCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgICBsaXN0ID0gW107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpc3QgPSBoaW50TiA+IDAgPyBBcnJheShoaW50TikuZmlsbCh2b2lkIDApIDogW107CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBoKAogICAgICAgIGdldFJlYWN0KCkuRnJhZ21lbnQsCiAgICAgICAgeyBrZXkgfSwKICAgICAgICBsaXN0Lm1hcCgoaXRlbSwgaSkgPT4gewogICAgICAgICAgY29uc3Qgc3ViID0geyAuLi52YWxzLCBbYXNOYW1lXTogaXRlbSwgJGluZGV4OiBpIH07CiAgICAgICAgICByZXR1cm4gaCgKICAgICAgICAgICAgZ2V0UmVhY3QoKS5GcmFnbWVudCwKICAgICAgICAgICAgeyBrZXk6IGkgfSwKICAgICAgICAgICAga2lkcy5tYXAoKGIsIGopID0+IGIoc3ViLCBjdHgsIGopKQogICAgICAgICAgKTsKICAgICAgICB9KQogICAgICApOwogICAgfTsKICB9CiAgZnVuY3Rpb24gd2Fsa0lmKGVsLCBob3N0KSB7CiAgICBjb25zdCB2YWxHZXQgPSBjb21waWxlQXR0cihlbC5nZXRBdHRyaWJ1dGUoInZhbHVlIikgfHwgIiIpOwogICAgY29uc3QgaGludFJhdyA9IGVsLmdldEF0dHJpYnV0ZSgiaGludC1wbGFjZWhvbGRlci12YWwiKTsKICAgIGNvbnN0IGhpbnRHZXQgPSBoaW50UmF3ICE9IG51bGwgPyBjb21waWxlQXR0cihoaW50UmF3KSA6IG51bGw7CiAgICBjb25zdCBraWRzID0gd2Fsa0NoaWxkcmVuKGVsLCBob3N0KTsKICAgIHJldHVybiAodmFscywgY3R4LCBrZXkpID0+IHsKICAgICAgbGV0IHYgPSB2YWxHZXQodmFscyk7CiAgICAgIGlmICh2ID09PSB2b2lkIDAgJiYgaGludEdldCAmJiBjdHg\/Ll9fc3RyZWFtaW5nTm93KSB2ID0gaGludEdldCh2YWxzKTsKICAgICAgcmV0dXJuIHYgPyBoKAogICAgICAgIGdldFJlYWN0KCkuRnJhZ21lbnQsCiAgICAgICAgeyBrZXkgfSwKICAgICAgICBraWRzLm1hcCgoYiwgaikgPT4gYih2YWxzLCBjdHgsIGopKQogICAgICApIDogbnVsbDsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHdhbGtDb21wb25lbnQoZWwsIGhvc3QpIHsKICAgIGNvbnN0IG5hbWUgPSBlbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKSB8fCBlbC5nZXRBdHRyaWJ1dGUoImNvbXBvbmVudCIpIHx8ICIiOwogICAgZWwucmVtb3ZlQXR0cmlidXRlKCJuYW1lIik7CiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoImNvbXBvbmVudCIpOwogICAgY29uc3QgdHBsSWQgPSBlbC5nZXRBdHRyaWJ1dGUoImRhdGEtZGMtdHBsIik7CiAgICBjb25zdCBzdHlsZVJhdyA9IGVsLmdldEF0dHJpYnV0ZSgic3R5bGUiKTsKICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKTsKICAgIGNvbnN0IHN0eWxlR2V0ID0gc3R5bGVSYXcgIT0gbnVsbCA\/IGNvbXBpbGVBdHRyKHN0eWxlUmF3KSA6IG51bGw7CiAgICBjb25zdCB7IHByb3BHZXR0ZXJzLCBoaW50U2l6ZSB9ID0gY29sbGVjdFByb3BzKGVsLCAiZGMtaW1wb3J0IiwgaG9zdCk7CiAgICBjb25zdCBraWRzID0gd2Fsa0NoaWxkcmVuKGVsLCBob3N0KTsKICAgIHJldHVybiAodmFscywgY3R4LCBrZXkpID0+IHsKICAgICAgY29uc3QgcHJvcHMgPSB7CiAgICAgICAga2V5LAogICAgICAgIF9faGludFNpemU6IGhpbnRTaXplLAogICAgICAgIF9fdHBsSWQ6IHRwbElkLAogICAgICAgIF9faG9zdFN0eWxlOiBzdHlsZUdldCA\/IGhvc3RQb3NpdGlvblN0eWxlKHN0eWxlR2V0KHZhbHMpKSA6IHZvaWQgMAogICAgICB9OwogICAgICBmb3IgKGNvbnN0IFtrLCBnXSBvZiBwcm9wR2V0dGVycykgewogICAgICAgIGNvbnN0IHYgPSBnKHZhbHMpOwogICAgICAgIGlmIChrID09PSAiZGNQcm9wcyIpIHsKICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAib2JqZWN0IikgT2JqZWN0LmFzc2lnbihwcm9wcywgdik7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcHJvcHNba10gPSB2OwogICAgICB9CiAgICAgIGlmIChraWRzLmxlbmd0aCkgcHJvcHMuY2hpbGRyZW4gPSBraWRzLm1hcCgoYiwgaikgPT4gYih2YWxzLCBjdHgsIGopKTsKICAgICAgcmV0dXJuIGgoaG9zdC5jb21wb25lbnQobmFtZSksIHByb3BzKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHdhbGtYSW1wb3J0KGVsLCBob3N0KSB7CiAgICBjb25zdCBnbG9iYWxOYW1lR2V0ID0gY29tcGlsZUF0dHIoCiAgICAgIGVsLmdldEF0dHJpYnV0ZSgiY29tcG9uZW50LWZyb20tZ2xvYmFsLXNjb3BlIikgfHwgIiIKICAgICk7CiAgICBjb25zdCBleHBvcnROYW1lR2V0ID0gY29tcGlsZUF0dHIoCiAgICAgIGVsLmdldEF0dHJpYnV0ZSgiY29tcG9uZW50IikgfHwgZWwuZ2V0QXR0cmlidXRlKCJuYW1lIikgfHwgIiIKICAgICk7CiAgICBjb25zdCBmcm9tUmF3ID0gZWwuZ2V0QXR0cmlidXRlKCJmcm9tIikgfHwgZWwuZ2V0QXR0cmlidXRlKCJzcmMiKSB8fCBlbC5nZXRBdHRyaWJ1dGUoImltcG9ydCIpIHx8ICIiOwogICAgY29uc3QgdXJscyA9IGZyb21SYXcudHJpbSgpID8gZnJvbVJhdy50cmltKCkuc3BsaXQoL1xzKy8pIDogW107CiAgICBjb25zdCB1cmwgPSB1cmxzLmxlbmd0aCA\/IHVybHNbdXJscy5sZW5ndGggLSAxXSA6ICIiOwogICAgY29uc3Qga2luZE9mID0gKHUpID0+IC9cLihqc3h8dHN4KShcP3wjfCQpL2kudGVzdCh1KSA\/ICJqc3giIDogImpzIjsKICAgIGNvbnN0IHRwbElkID0gZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWRjLXRwbCIpOwogICAgY29uc3Qgc3R5bGVSYXcgPSBlbC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7CiAgICBjb25zdCBzdHlsZUdldCA9IHN0eWxlUmF3ICE9IG51bGwgPyBjb21waWxlQXR0cihzdHlsZVJhdykgOiBudWxsOwogICAgY29uc3Qgd3JhcCA9IHRwbElkICE9IG51bGwgfHwgc3R5bGVHZXQgIT0gbnVsbDsKICAgIGNvbnN0IHsgcHJvcEdldHRlcnMsIGhpbnRTaXplIH0gPSBjb2xsZWN0UHJvcHMoZWwsICJ4LWltcG9ydCIsIGhvc3QpOwogICAgY29uc3QgaGFzQ29udGVudCA9IGVsLmNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgISEoZWwudGV4dENvbnRlbnQgfHwgIiIpLnRyaW0oKTsKICAgIGNvbnN0IGtpZHMgPSBoYXNDb250ZW50ID8gd2Fsa0NoaWxkcmVuKGVsLCBob3N0KSA6IFtdOwogICAgY29uc3QgdXJsQmluZGFibGUgPSBmcm9tUmF3LmluY2x1ZGVzKCJ7eyIpOwogICAgaWYgKHVybHMubGVuZ3RoICYmICF1cmxCaW5kYWJsZSkgewogICAgICBsZXQgcHJldjsKICAgICAgZm9yIChjb25zdCB1IG9mIHVybHMpIHByZXYgPSBob3N0LmxvYWRFeHRlcm5hbChraW5kT2YodSksIHUsIHByZXYpOwogICAgfQogICAgY29uc3QgZXZhbE5hbWUgPSAoZywgdmFscykgPT4gewogICAgICBjb25zdCB2ID0gZyh2YWxzKTsKICAgICAgY29uc3QgcyA9IHYgPT0gbnVsbCA\/ICIiIDogU3RyaW5nKHYpOwogICAgICByZXR1cm4gcy5pbmNsdWRlcygie3siKSA\/ICIiIDogczsKICAgIH07CiAgICByZXR1cm4gKHZhbHMsIGN0eCwga2V5KSA9PiB7CiAgICAgIGNvbnN0IGdsb2JhbE5hbWUgPSBldmFsTmFtZShnbG9iYWxOYW1lR2V0LCB2YWxzKTsKICAgICAgY29uc3QgbmFtZSA9IGdsb2JhbE5hbWUgfHwgZXZhbE5hbWUoZXhwb3J0TmFtZUdldCwgdmFscyk7CiAgICAgIGNvbnN0IEMgPSAhbmFtZSB8fCB1cmxCaW5kYWJsZSA\/IG51bGwgOiBnbG9iYWxOYW1lID8gaG9zdC5yZXNvbHZlRXh0ZXJuYWxHbG9iYWwodXJsLCBnbG9iYWxOYW1lKSA6IGhvc3QucmVzb2x2ZUV4dGVybmFsKHVybCwgbmFtZSk7CiAgICAgIGNvbnN0IGhvc3RTdHlsZSA9IHN0eWxlR2V0ID8gaG9zdFBvc2l0aW9uU3R5bGUoc3R5bGVHZXQodmFscykpIDogdm9pZCAwOwogICAgICBjb25zdCB3cmFwcGVyID0gd3JhcCA\/IHsKICAgICAgICBrZXksCiAgICAgICAgY2xhc3NOYW1lOiAic2MtaG9zdC14IiwKICAgICAgICAiZGF0YS1kYy10cGwiOiB0cGxJZCwKICAgICAgICBzdHlsZTogaG9zdFN0eWxlIHx8IHsgZGlzcGxheTogImNvbnRlbnRzIiB9CiAgICAgIH0gOiBudWxsOwogICAgICBpZiAoIUMpIHsKICAgICAgICBjb25zdCBlcnJvciA9IHVybEJpbmRhYmxlID8gIngtaW1wb3J0IGBmcm9tYCBjYW5ub3QgY29udGFpbiB7eyBcdTIwMjYgfX0gXHUyMDE0IG1vZHVsZSBVUkxzIGFyZSByZXNvbHZlZCBhdCBwYXJzZSB0aW1lOyB1c2UgYSBsaXRlcmFsIFVSTCIgOiBob3N0LnJlc29sdmVFeHRlcm5hbEVycm9yKHVybCwgbmFtZSk7CiAgICAgICAgY29uc3QgcGggPSBob3N0LnBsYWNlaG9sZGVyKHsKICAgICAgICAgIGtleTogd3JhcHBlciA\/IHZvaWQgMCA6IGtleSwKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBoaW50U2l6ZSwKICAgICAgICAgIGVycm9yCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHdyYXBwZXIgPyBoKCJkaXYiLCB3cmFwcGVyLCBwaCkgOiBwaDsKICAgICAgfQogICAgICBjb25zdCBwcm9wcyA9IHdyYXBwZXIgPyB7fSA6IHsga2V5IH07CiAgICAgIGxldCB1bnJlc29sdmVkSG9sZSA9IGZhbHNlOwogICAgICBmb3IgKGNvbnN0IFtrLCBnXSBvZiBwcm9wR2V0dGVycykgewogICAgICAgIGlmIChrID09PSAiY29tcG9uZW50IiB8fCBrID09PSAiY29tcG9uZW50RnJvbUdsb2JhbFNjb3BlIiB8fCBrID09PSAiZnJvbSIpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCB2ID0gZyh2YWxzKTsKICAgICAgICBpZiAodiA9PT0gdm9pZCAwKSB1bnJlc29sdmVkSG9sZSA9IHRydWU7CiAgICAgICAgaWYgKGsgPT09ICJkY1Byb3BzIikgewogICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICJvYmplY3QiKSBPYmplY3QuYXNzaWduKHByb3BzLCB2KTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBwcm9wc1trXSA9IHY7CiAgICAgIH0KICAgICAgaWYgKHVucmVzb2x2ZWRIb2xlICYmIGN0eD8uX19odG1sU3RyZWFtaW5nTm93KSB7CiAgICAgICAgY29uc3QgcGggPSBob3N0LnBsYWNlaG9sZGVyKHsKICAgICAgICAgIGtleTogd3JhcHBlciA\/IHZvaWQgMCA6IGtleSwKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBoaW50U2l6ZSwKICAgICAgICAgIGVycm9yOiBudWxsCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHdyYXBwZXIgPyBoKCJkaXYiLCB3cmFwcGVyLCBwaCkgOiBwaDsKICAgICAgfQogICAgICBpZiAoa2lkcy5sZW5ndGgpIHByb3BzLmNoaWxkcmVuID0ga2lkcy5tYXAoKGIsIGopID0+IGIodmFscywgY3R4LCBqKSk7CiAgICAgIHJldHVybiB3cmFwcGVyID8gaCgiZGl2Iiwgd3JhcHBlciwgaChDLCBwcm9wcykpIDogaChDLCBwcm9wcyk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBjb250ZW50S2V5KGVsKSB7CiAgICBjb25zdCBjbG9uZSA9IGVsLmNsb25lTm9kZSh0cnVlKTsKICAgIGZvciAoY29uc3QgZCBvZiBjbG9uZS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpIHsKICAgICAgd2hpbGUgKGQuYXR0cmlidXRlcy5sZW5ndGgpIGQucmVtb3ZlQXR0cmlidXRlKGQuYXR0cmlidXRlc1swXS5uYW1lKTsKICAgIH0KICAgIGNvbnN0IHMgPSBjbG9uZS5pbm5lckhUTUw7CiAgICBsZXQgaDIgPSA1MzgxOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBoMiA9IChoMiA8PCA1KSArIGgyICsgcy5jaGFyQ29kZUF0KGkpIHwgMDsKICAgIHJldHVybiBzLmxlbmd0aCArICIuIiArIChoMiA+Pj4gMCkudG9TdHJpbmcoMzYpOwogIH0KICB2YXIgTkVWRVJfQ09OVEVOVF9LRVlFRCA9IG5ldyBTZXQoCiAgICAic2NyaXB0IHN0eWxlIHRleHRhcmVhIG9wdGlvbiB0aXRsZSBzZWxlY3QgY2FudmFzIGlmcmFtZSB2aWRlbyBhdWRpbyIuc3BsaXQoCiAgICAgICIgIgogICAgKQogICk7CiAgdmFyIE5PVF9JTkxJTkVfU0VMRUNUT1IgPSAiOm5vdCgiICsgWy4uLklOTElORV9URVhUX1RBR1NdLmpvaW4oIiwiKSArICIpIjsKICBmdW5jdGlvbiB3YWxrRWxlbWVudChlbCwgaG9zdCkgewogICAgY29uc3QgcmVhbFRhZyA9IFJBV19VTldSQVBbZWwubG9jYWxOYW1lXSB8fCBlbC5sb2NhbE5hbWU7CiAgICBjb25zdCB0cGxJZCA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1kYy10cGwiKTsKICAgIGNvbnN0IGlubGluZU9ubHkgPSBlbC5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgIU5FVkVSX0NPTlRFTlRfS0VZRUQuaGFzKHJlYWxUYWcpICYmIGVsLnF1ZXJ5U2VsZWN0b3IoTk9UX0lOTElORV9TRUxFQ1RPUikgPT09IG51bGw7CiAgICBjb25zdCBrZXlTdWZmaXggPSBpbmxpbmVPbmx5ID8gInwiICsgY29udGVudEtleShlbCkgOiAiIjsKICAgIGNvbnN0IHsgcHJvcEdldHRlcnMsIHBzZXVkb0NsYXNzZXMgfSA9IGNvbGxlY3RQcm9wcyhlbCwgImRvbSIsIGhvc3QpOwogICAgY29uc3Qga2lkcyA9IHdhbGtDaGlsZHJlbihlbCwgaG9zdCk7CiAgICByZXR1cm4gKHZhbHMsIGN0eCwga2V5KSA9PiB7CiAgICAgIGNvbnN0IHByb3BzID0gewogICAgICAgIGtleToga2V5ICsga2V5U3VmZml4LAogICAgICAgICJkYXRhLWRjLXRwbCI6IHRwbElkCiAgICAgIH07CiAgICAgIGZvciAoY29uc3QgW2ssIGddIG9mIHByb3BHZXR0ZXJzKSB7CiAgICAgICAgbGV0IHYgPSBnKHZhbHMpOwogICAgICAgIGlmIChrID09PSAic3R5bGUiICYmIHR5cGVvZiB2ID09PSAic3RyaW5nIikgdiA9IGNzc1RvT2JqKHYpOwogICAgICAgIGlmICgoayA9PT0gInZhbHVlIiB8fCBrID09PSAiY2hlY2tlZCIpICYmIHYgPT09IHZvaWQgMCkgewogICAgICAgICAgdiA9IGsgPT09ICJjaGVja2VkIiA\/IGZhbHNlIDogIiI7CiAgICAgICAgfQogICAgICAgIHByb3BzW2tdID0gdjsKICAgICAgfQogICAgICBpZiAocHNldWRvQ2xhc3Nlcy5sZW5ndGgpIHsKICAgICAgICBwcm9wcy5jbGFzc05hbWUgPSBbcHJvcHMuY2xhc3NOYW1lLCAuLi5wc2V1ZG9DbGFzc2VzXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpOwogICAgICB9CiAgICAgIHJldHVybiBoKHJlYWxUYWcsIHByb3BzLCAuLi5raWRzLm1hcCgoYiwgaikgPT4gYih2YWxzLCBjdHgsIGopKSk7CiAgICB9OwogIH0KCiAgLy8gc3JjL2xvZ2ljLnRzCiAgdmFyIFN0cmVhbWFibGVMb2dpYyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgInByb3BzIik7CiAgICAgIF9fcHVibGljRmllbGQodGhpcywgInN0YXRlIiwge30pOwogICAgICAvKiogQmFjay1wb2ludGVyIHRvIHRoZSB3cmFwcGVyIGNvbXBvbmVudCwgaW5zdGFsbGVkIGFmdGVyIGNvbnN0cnVjdGlvbi4gKi8KICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX19ob3N0Iik7CiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcyB8fCB7fTsKICAgIH0KICAgIHNldFN0YXRlKHVwZGF0ZSwgY2IpIHsKICAgICAgdGhpcy5fX2hvc3QgJiYgdGhpcy5fX2hvc3QuX19zZXRMb2dpY1N0YXRlKHVwZGF0ZSwgY2IpOwogICAgfQogICAgZm9yY2VVcGRhdGUoKSB7CiAgICAgIHRoaXMuX19ob3N0ICYmIHRoaXMuX19ob3N0LmZvcmNlVXBkYXRlKCk7CiAgICB9CiAgICBjb21wb25lbnREaWRNb3VudCgpIHsKICAgIH0KICAgIGNvbXBvbmVudERpZFVwZGF0ZShfcHJldlByb3BzKSB7CiAgICB9CiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHsKICAgIH0KICAgIC8qKiBUaGUgZmxhdCBvYmplY3QgdGhlIHRlbXBsYXRlIHJlbmRlcnMgYWdhaW5zdCAobWVyZ2VkIG92ZXIgcHJvcHMpLiAqLwogICAgcmVuZGVyVmFscygpIHsKICAgICAgcmV0dXJuIHt9OwogICAgfQogIH07CiAgZnVuY3Rpb24gZXZhbERjTG9naWMoc3JjKSB7CiAgICAvLyEgbm9zZW1ncmVwOiBldmFsLWFuZC1mdW5jdGlvbi1jb25zdHJ1Y3RvcgogICAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oCiAgICAgICJEQ0xvZ2ljIiwKICAgICAgIlN0cmVhbWFibGVMb2dpYyIsCiAgICAgICJSZWFjdCIsCiAgICAgIHNyYyArICdcbjtyZXR1cm4gKHR5cGVvZiBDb21wb25lbnQhPT0idW5kZWZpbmVkIiYmQ29tcG9uZW50KXx8dW5kZWZpbmVkOycKICAgICk7CiAgICByZXR1cm4gZm4oU3RyZWFtYWJsZUxvZ2ljLCBTdHJlYW1hYmxlTG9naWMsIGdldFJlYWN0KCkpOwogIH0KCiAgLy8gc3JjL2NvbXBvbmVudC50cwogIGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7CiAgICBpZiAoIWIpIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGFrID0gT2JqZWN0LmtleXMoYSkuZmlsdGVyKChrKSA9PiBrICE9PSAiY2hpbGRyZW4iKTsKICAgIGNvbnN0IGJrID0gT2JqZWN0LmtleXMoYikuZmlsdGVyKChrKSA9PiBrICE9PSAiY2hpbGRyZW4iKTsKICAgIGlmIChhay5sZW5ndGggIT09IGJrLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChjb25zdCBrIG9mIGFrKSBpZiAoYVtrXSAhPT0gYltrXSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIFBsYWNlaG9sZGVyKHsKICAgIG5hbWUsCiAgICBoaW50U2l6ZSwKICAgIHN0cmVhbWluZywKICAgIGVycm9yCiAgfSkgewogICAgY29uc3QgW3csIGhndF0gPSAoaGludFNpemUgfHwgIjEwMCUsNjBweCIpLnNwbGl0KCIsIik7CiAgICByZXR1cm4gaCgKICAgICAgImRpdiIsCiAgICAgIHsKICAgICAgICBjbGFzc05hbWU6ICJzYy1wbGFjZWhvbGRlciIgKyAoc3RyZWFtaW5nID8gIiBzYy1zdHJlYW1pbmciIDogIiIpLAogICAgICAgIHN0eWxlOiB7IHdpZHRoOiB3LnRyaW0oKSwgaGVpZ2h0OiBoZ3QgJiYgaGd0LnRyaW0oKSB9LAogICAgICAgIHRpdGxlOiBuYW1lCiAgICAgIH0sCiAgICAgIGVycm9yID8gaCgKICAgICAgICAiZGl2IiwKICAgICAgICB7IGNsYXNzTmFtZTogInNjLXBsYWNlaG9sZGVyLWVycm9yIiB9LAogICAgICAgIChuYW1lID8gbmFtZSArICI6ICIgOiAiIikgKyBlcnJvcgogICAgICApIDogbnVsbAogICAgKTsKICB9CiAgZnVuY3Rpb24gaGludFRvTWluKGhpbnQpIHsKICAgIGlmICghaGludCkgcmV0dXJuIHZvaWQgMDsKICAgIGNvbnN0IFt3LCBoZ3RdID0gaGludC5zcGxpdCgiLCIpOwogICAgcmV0dXJuIHsgbWluV2lkdGg6IHcudHJpbSgpLCBtaW5IZWlnaHQ6IGhndCAmJiBoZ3QudHJpbSgpIH07CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEZhY3RvcnkocmVnaXN0cnksIGVuc3VyZUZldGNoZWQpIHsKICAgIGNvbnN0IFJlYWN0ID0gZ2V0UmVhY3QoKTsKICAgIGNvbnN0IEFuY2VzdG9yQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoW10pOwogICAgY2xhc3MgU3RyZWFtYWJsZUNvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7CiAgICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7CiAgICAgICAgc3VwZXIocHJvcHMpOwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9fbmFtZSIpOwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9fc3ViIik7CiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX19uZWVkc0RpZE1vdW50IiwgZmFsc2UpOwogICAgICAgIC8qKiBTbmFwc2hvdCBvZiB0aGUgcmVnaXN0cnkncyBzdHJlYW1pbmcgZmxhZ3MgdGFrZW4gYXQgcmVuZGVyIHRpbWUg4oCUCiAgICAgICAgICogIGJ1aWxkZXJzIHJlYWQgaXQgb2ZmIHRoZSBSZW5kZXJDdHggKHRoaXMpIHRvIHBpY2sgcGxhY2Vob2xkZXIgdnMKICAgICAgICAgKiAgcmVuZGVyLW5vdGhpbmcgZm9yIHVucmVzb2x2ZWQgdmFsdWVzLiAqLwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9fc3RyZWFtaW5nTm93IiwgZmFsc2UpOwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9faHRtbFN0cmVhbWluZ05vdyIsIGZhbHNlKTsKICAgICAgICAvKiogV2hlbiBhIGNvbnN0cnVjdCB0aHJvd3MsIHJlbWVtYmVyIHRoZSAoY2xhc3MsIHJlZ2lzdHJ5LnZlciwgcHJvcHMpCiAgICAgICAgICogIHRyaXBsZSBzbyByZW5kZXItdGltZSByZWNvbmNpbGUgZG9lc24ndCByZS1hdHRlbXB0IGl0IG9uIGV2ZXJ5IHBhcmVudAogICAgICAgICAqICByZS1yZW5kZXIuIEEgcmVnaXN0cnkgYnVtcCAobmV3IGNsYXNzLCB0ZW1wbGF0ZSwgZXh0ZXJuYWwgbW9kdWxlCiAgICAgICAgICogIHJlc29sdmluZyB2aWEgYnVtcEFsbCkgY2hhbmdlcyBgdmVyYCBhbmQgYnJlYWtzIHRoZSBtZW1vIHNvIGFuCiAgICAgICAgICogIGVudi1kZXBlbmRlbnQgY29uc3RydWN0b3IgY2FuIHNlbGYtaGVhbC4gKi8KICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfX2ZhaWxlZExvZ2ljIiwgbnVsbCk7CiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX19mYWlsZWRVc2VyUHJvcHMiLCBudWxsKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfX2ZhaWxlZFZlciIsIC0xKTsKICAgICAgICAvKiogUGVyLWluc3RhbmNlIGNvbnN0cnVjdG9yIGVycm9yIOKAlCBrZXB0IGhlcmUgKG5vdCBvbiB0aGUgcmVnaXN0cnkgZW50cnkpCiAgICAgICAgICogIHNvIG9uZSBpbnN0YW5jZSdzIHN1Y2Nlc3NmdWwgY29uc3RydWN0IGNhbid0IGhpZGUgYSBzaWJsaW5nJ3MgZmFpbHVyZSwKICAgICAgICAgKiAgYW5kIGEgY29uc3RydWN0IGNhbiBuZXZlciB3aXBlIGFuIGV2YWwgZXJyb3IgYHVwZGF0ZUpzYCByZWNvcmRlZCBvbgogICAgICAgICAqICBgci5sb2dpY0Vycm9yYC4gKi8KICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfX2N0b3JFcnJvciIsIG51bGwpOwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgImxvZ2ljIik7CiAgICAgICAgdGhpcy5fX25hbWUgPSBwcm9wcy5fX25hbWU7CiAgICAgICAgdGhpcy5zdGF0ZSA9IHsgX192OiAwLCBfX2VycjogbnVsbCB9OwogICAgICAgIHRoaXMuX19zdWIgPSAoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5fX2VycikgdGhpcy5zZXRTdGF0ZSh7IF9fZXJyOiBudWxsIH0pOwogICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpOwogICAgICAgIH07CiAgICAgICAgdGhpcy5fX21ha2VMb2dpYyhyZWdpc3RyeS5nZXQodGhpcy5fX25hbWUpLkxvZ2ljLCBudWxsKTsKICAgICAgICBlbnN1cmVGZXRjaGVkKHRoaXMuX19uYW1lKTsKICAgICAgfQogICAgICAvKiogRXJyb3ItYm91bmRhcnkgaG9vazogYSByZW5kZXIgY3Jhc2ggYW55d2hlcmUgaW4gdGhpcyBEQydzIHN1YnRyZWUKICAgICAgICogIChpdHMgb3duIHRlbXBsYXRlLCBhbiB4LWltcG9ydCdkIGNvbXBvbmVudCwgYSBjaGlsZCBEQyB3aXRob3V0IGl0cwogICAgICAgKiAgb3duIGRlZXBlciBib3VuZGFyeSkgbGFuZHMgaGVyZSBpbnN0ZWFkIG9mIHVubW91bnRpbmcgdGhlIHBhZ2UuICovCiAgICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZSkgewogICAgICAgIHJldHVybiB7IF9fZXJyOiBlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH07CiAgICAgIH0KICAgICAgY29tcG9uZW50RGlkQ2F0Y2goZSwgaW5mbykgewogICAgICAgIGNvbnNvbGUuZXJyb3IoCiAgICAgICAgICAiW2RjLXJ1bnRpbWVdIHJlbmRlciBlcnJvciBpbiA8IiArIHRoaXMuX19uYW1lICsgIj46IiwKICAgICAgICAgIGUsCiAgICAgICAgICBpbmZvPy5jb21wb25lbnRTdGFjayB8fCAiIgogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqIEluc3RhbnRpYXRlIHRoZSBsb2dpYyBjbGFzcyAob3IgdGhlIG5vLW9wIGJhc2UpIGFuZCBhZG9wdCBgcHJldlN0YXRlYAogICAgICAgKiAgb3ZlciBpdHMgaW5pdGlhbCBzdGF0ZSDigJQgdXNlZCBib3RoIGF0IG1vdW50IGFuZCBvbiBob3Qtc3dhcC4gKi8KICAgICAgX19tYWtlTG9naWMoTG9naWMsIHByZXZTdGF0ZSkgewogICAgICAgIGNvbnN0IEwgPSBMb2dpYyB8fCBTdHJlYW1hYmxlTG9naWM7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMubG9naWMgPSBuZXcgTCh0aGlzLl9fdXNlclByb3BzKCkpOwogICAgICAgICAgdGhpcy5fX2ZhaWxlZExvZ2ljID0gbnVsbDsKICAgICAgICAgIHRoaXMuX19mYWlsZWRVc2VyUHJvcHMgPSBudWxsOwogICAgICAgICAgdGhpcy5fX2N0b3JFcnJvciA9IG51bGw7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgIHRoaXMuX19mYWlsZWRMb2dpYyA9IExvZ2ljOwogICAgICAgICAgdGhpcy5fX2ZhaWxlZFVzZXJQcm9wcyA9IHRoaXMuX191c2VyUHJvcHMoKTsKICAgICAgICAgIHRoaXMuX19mYWlsZWRWZXIgPSByZWdpc3RyeS5nZXQodGhpcy5fX25hbWUpLnZlcjsKICAgICAgICAgIHRoaXMuX19jdG9yRXJyb3IgPSB0aGlzLl9fbmFtZSArICI6ICIgKyAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZSA\/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7CiAgICAgICAgICB0aGlzLmxvZ2ljID0gbmV3IFN0cmVhbWFibGVMb2dpYygKICAgICAgICAgICAgdGhpcy5fX3VzZXJQcm9wcygpCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICB0aGlzLmxvZ2ljLl9faG9zdCA9IHRoaXM7CiAgICAgICAgaWYgKHByZXZTdGF0ZSkKICAgICAgICAgIHRoaXMubG9naWMuc3RhdGUgPSB7IC4uLnRoaXMubG9naWMuc3RhdGUgfHwge30sIC4uLnByZXZTdGF0ZSB9OwogICAgICB9CiAgICAgIC8qKiBUaGUgcHJvcHMgdGhlIGF1dGhvcidzIGxvZ2ljICsgdGVtcGxhdGUgc2VlIOKAlCBpbnRlcm5hbCBfXy1wcmVmaXhlZAogICAgICAgKiAgd2lyaW5nIHN0cmlwcGVkLiAqLwogICAgICBfX3VzZXJQcm9wcygpIHsKICAgICAgICBjb25zdCB7IF9fbmFtZSwgX19oaW50U2l6ZSwgX190cGxJZCwgX19ob3N0U3R5bGUsIC4uLnJlc3QgfSA9IHRoaXMucHJvcHM7CiAgICAgICAgcmV0dXJuIHJlc3Q7CiAgICAgIH0KICAgICAgX19zZXRMb2dpY1N0YXRlKHVwZGF0ZSwgY2IpIHsKICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5sb2dpYy5zdGF0ZTsKICAgICAgICBjb25zdCBwYXRjaCA9IHR5cGVvZiB1cGRhdGUgPT09ICJmdW5jdGlvbiIgPyB1cGRhdGUocHJldikgOiB1cGRhdGU7CiAgICAgICAgdGhpcy5sb2dpYy5zdGF0ZSA9IHsgLi4ucHJldiwgLi4ucGF0Y2ggfTsKICAgICAgICB0aGlzLnNldFN0YXRlKChzKSA9PiAoeyBfX3Y6IHMuX192ICsgMSB9KSwgY2IpOwogICAgICB9CiAgICAgIC8qKiBTd2FwIHRoZSBsb2dpYyBpbnN0YW5jZSB3aGVuIHRoZSByZWdpc3RyeSdzIExvZ2ljIGNsYXNzIGNoYW5nZWQKICAgICAgICogIChzdHJlYW1pbmcgY29tcGxldGlvbiwgaG90IHJlbG9hZCkuIFN0YXRlIGNhcnJpZXMgb3ZlcjsgZGlkTW91bnQKICAgICAgICogIHJlLWZpcmVzIGFmdGVyIHRoZSBzd2FwIGNvbW1pdHMgc28gcmVmcyBleGlzdC4gKi8KICAgICAgX19yZWNvbmNpbGVMb2dpYygpIHsKICAgICAgICBjb25zdCByID0gcmVnaXN0cnkuZ2V0KHRoaXMuX19uYW1lKTsKICAgICAgICBjb25zdCBOZXh0ID0gci5Mb2dpYzsKICAgICAgICBjb25zdCBDdXIgPSB0aGlzLmxvZ2ljLmNvbnN0cnVjdG9yOwogICAgICAgIGlmIChOZXh0ID09PSBDdXIgfHwgIU5leHQgJiYgQ3VyID09PSBTdHJlYW1hYmxlTG9naWMgfHwgTmV4dCA9PT0gdGhpcy5fX2ZhaWxlZExvZ2ljICYmIHIudmVyID09PSB0aGlzLl9fZmFpbGVkVmVyICYmIHNoYWxsb3dFcXVhbCh0aGlzLl9fdXNlclByb3BzKCksIHRoaXMuX19mYWlsZWRVc2VyUHJvcHMpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy5fX25lZWRzRGlkTW91bnQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMubG9naWMuY29tcG9uZW50V2lsbFVubW91bnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5fX21ha2VMb2dpYyhOZXh0LCB0aGlzLmxvZ2ljLnN0YXRlKTsKICAgICAgICB0aGlzLl9fbmVlZHNEaWRNb3VudCA9IHRydWU7CiAgICAgIH0KICAgICAgY29tcG9uZW50RGlkTW91bnQoKSB7CiAgICAgICAgcmVnaXN0cnkuZ2V0KHRoaXMuX19uYW1lKS5zdWJzLmFkZCh0aGlzLl9fc3ViKTsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5sb2dpYy5jb21wb25lbnREaWRNb3VudCgpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHsKICAgICAgICB0aGlzLmxvZ2ljLnByb3BzID0gdGhpcy5fX3VzZXJQcm9wcygpOwogICAgICAgIGlmICh0aGlzLl9fbmVlZHNEaWRNb3VudCkgewogICAgICAgICAgaWYgKHRoaXMuc3RhdGUuX19lcnIgfHwgIXJlZ2lzdHJ5LmdldCh0aGlzLl9fbmFtZSkudHBsKSByZXR1cm47CiAgICAgICAgICB0aGlzLl9fbmVlZHNEaWRNb3VudCA9IGZhbHNlOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhpcy5sb2dpYy5jb21wb25lbnREaWRNb3VudCgpOwogICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmxvZ2ljLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpOwogICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHsKICAgICAgICByZWdpc3RyeS5nZXQodGhpcy5fX25hbWUpLnN1YnMuZGVsZXRlKHRoaXMuX19zdWIpOwogICAgICAgIGlmICghdGhpcy5fX25lZWRzRGlkTW91bnQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMubG9naWMuY29tcG9uZW50V2lsbFVubW91bnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmVuZGVyKCkgewogICAgICAgIGNvbnN0IHIgPSByZWdpc3RyeS5nZXQodGhpcy5fX25hbWUpOwogICAgICAgIGNvbnN0IGNscyA9ICJzYy1ob3N0IiArIChyLmh0bWxTdHJlYW1pbmcgPyAiIHNjLXN0cmVhbWluZy1odG1sIiA6ICIiKSArIChyLmpzU3RyZWFtaW5nID8gIiBzYy1zdHJlYW1pbmctanMiIDogIiIpOwogICAgICAgIGNvbnN0IGhpbnRTdHlsZSA9IHIuaHRtbFN0cmVhbWluZyA\/IGhpbnRUb01pbih0aGlzLnByb3BzLl9faGludFNpemUpIDogdm9pZCAwOwogICAgICAgIGNvbnN0IGhvc3RTdHlsZSA9IHRoaXMucHJvcHMuX19ob3N0U3R5bGUgfHwgaGludFN0eWxlID8geyAuLi5oaW50U3R5bGUgfHwge30sIC4uLnRoaXMucHJvcHMuX19ob3N0U3R5bGUgfHwge30gfSA6IHZvaWQgMDsKICAgICAgICBjb25zdCBob3N0QmFzZSA9IHsKICAgICAgICAgIGNsYXNzTmFtZTogY2xzLAogICAgICAgICAgc3R5bGU6IGhvc3RTdHlsZSwKICAgICAgICAgICJkYXRhLXNjLW5hbWUiOiB0aGlzLl9fbmFtZSwKICAgICAgICAgICJkYXRhLWRjLXRwbCI6IHRoaXMucHJvcHMuX190cGxJZAogICAgICAgIH07CiAgICAgICAgY29uc3QgY2hhaW4gPSBBcnJheS5pc0FycmF5KHRoaXMuY29udGV4dCkgPyB0aGlzLmNvbnRleHQgOiBbXTsKICAgICAgICBpZiAoY2hhaW4uaW5jbHVkZXModGhpcy5fX25hbWUpKSB7CiAgICAgICAgICBjb25zdCBjeWNsZSA9IFsKICAgICAgICAgICAgLi4uY2hhaW4uc2xpY2UoY2hhaW4uaW5kZXhPZih0aGlzLl9fbmFtZSkpLAogICAgICAgICAgICB0aGlzLl9fbmFtZQogICAgICAgICAgXS5qb2luKCIgXHUyMTkyICIpOwogICAgICAgICAgcmV0dXJuIGgoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7IC4uLmhvc3RCYXNlLCBjbGFzc05hbWU6IGNscyArICIgc2MtaGFzLWVycm9yIiB9LAogICAgICAgICAgICBoKFBsYWNlaG9sZGVyLCB7CiAgICAgICAgICAgICAgbmFtZTogdGhpcy5fX25hbWUsCiAgICAgICAgICAgICAgaGludFNpemU6IHRoaXMucHJvcHMuX19oaW50U2l6ZSwKICAgICAgICAgICAgICBlcnJvcjogImNpcmN1bGFyIGltcG9ydDogIiArIGN5Y2xlCiAgICAgICAgICAgIH0pCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zdGF0ZS5fX2VycikgewogICAgICAgICAgcmV0dXJuIGgoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7IC4uLmhvc3RCYXNlLCBjbGFzc05hbWU6IGNscyArICIgc2MtaGFzLWVycm9yIiB9LAogICAgICAgICAgICBoKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAic2MtbG9naWMtZXJyb3IiLCAiZGF0YS1vbWVsZXR0ZS1jaHJvbWUiOiAiIiB9LAogICAgICAgICAgICAgIHRoaXMuX19uYW1lICsgIjogIiArIHRoaXMuc3RhdGUuX19lcnIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaChQbGFjZWhvbGRlciwgewogICAgICAgICAgICAgIG5hbWU6IHRoaXMuX19uYW1lLAogICAgICAgICAgICAgIGhpbnRTaXplOiB0aGlzLnByb3BzLl9faGludFNpemUsCiAgICAgICAgICAgICAgZXJyb3I6IHRoaXMuc3RhdGUuX19lcnIKICAgICAgICAgICAgfSkKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX19yZWNvbmNpbGVMb2dpYygpOwogICAgICAgIGlmICghci50cGwpIHsKICAgICAgICAgIHJldHVybiBoKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgaG9zdEJhc2UsCiAgICAgICAgICAgIGgoUGxhY2Vob2xkZXIsIHsgbmFtZTogdGhpcy5fX25hbWUsIGhpbnRTaXplOiB0aGlzLnByb3BzLl9faGludFNpemUgfSkKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHVzZXJQcm9wcyA9IHRoaXMuX191c2VyUHJvcHMoKTsKICAgICAgICB0aGlzLmxvZ2ljLnByb3BzID0gdXNlclByb3BzOwogICAgICAgIGxldCB2YWxzID0gdXNlclByb3BzOwogICAgICAgIGxldCByZW5kZXJFcnIgPSByLmxvZ2ljRXJyb3IgfHwgdGhpcy5fX2N0b3JFcnJvcjsKICAgICAgICB0cnkgewogICAgICAgICAgdmFscyA9IHsgLi4udXNlclByb3BzLCAuLi50aGlzLmxvZ2ljLnJlbmRlclZhbHMoKSB8fCB7fSB9OwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgICByZW5kZXJFcnIgPSB0aGlzLl9fbmFtZSArICIucmVuZGVyVmFscygpOiAiICsgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9fc3RyZWFtaW5nTm93ID0gISEoci5odG1sU3RyZWFtaW5nIHx8IHIuanNTdHJlYW1pbmcpOwogICAgICAgIHRoaXMuX19odG1sU3RyZWFtaW5nTm93ID0gISFyLmh0bWxTdHJlYW1pbmc7CiAgICAgICAgcmV0dXJuIGgoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsgLi4uaG9zdEJhc2UsIGNsYXNzTmFtZTogY2xzICsgKHJlbmRlckVyciA\/ICIgc2MtaGFzLWVycm9yIiA6ICIiKSB9LAogICAgICAgICAgcmVuZGVyRXJyICYmIGgoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7IGNsYXNzTmFtZTogInNjLWxvZ2ljLWVycm9yIiwgImRhdGEtb21lbGV0dGUtY2hyb21lIjogIiIgfSwKICAgICAgICAgICAgcmVuZGVyRXJyCiAgICAgICAgICApLAogICAgICAgICAgaCgKICAgICAgICAgICAgQW5jZXN0b3JDb250ZXh0LlByb3ZpZGVyLAogICAgICAgICAgICB7IHZhbHVlOiBbLi4uY2hhaW4sIHRoaXMuX19uYW1lXSB9LAogICAgICAgICAgICByLnRwbCh2YWxzLCB0aGlzKQogICAgICAgICAgKQogICAgICAgICk7CiAgICAgIH0KICAgIH0KICAgIF9fcHVibGljRmllbGQoU3RyZWFtYWJsZUNvbXBvbmVudCwgImNvbnRleHRUeXBlIiwgQW5jZXN0b3JDb250ZXh0KTsKICAgIGNvbnN0IG5hbWVkID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIGZ1bmN0aW9uIGdldERDKG5hbWUpIHsKICAgICAgY29uc3QgaGl0ID0gbmFtZWQuZ2V0KG5hbWUpOwogICAgICBpZiAoaGl0KSByZXR1cm4gaGl0OwogICAgICBmdW5jdGlvbiBEaXNwYXRjaGVyKHApIHsKICAgICAgICBjb25zdCBbLCBzZXRUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApOwogICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBzdWIgPSAoKSA9PiBzZXRUaWNrKChuKSA9PiBuICsgMSk7CiAgICAgICAgICByZWdpc3RyeS5nZXQobmFtZSkuc3Vicy5hZGQoc3ViKTsKICAgICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICAgIHJlZ2lzdHJ5LmdldChuYW1lKS5zdWJzLmRlbGV0ZShzdWIpOwogICAgICAgICAgfTsKICAgICAgICB9LCBbXSk7CiAgICAgICAgZW5zdXJlRmV0Y2hlZChuYW1lKTsKICAgICAgICByZXR1cm4gaChTdHJlYW1hYmxlQ29tcG9uZW50LCB7IC4uLnAsIF9fbmFtZTogbmFtZSB9KTsKICAgICAgfQogICAgICBEaXNwYXRjaGVyLmRpc3BsYXlOYW1lID0gbmFtZTsKICAgICAgbmFtZWQuc2V0KG5hbWUsIERpc3BhdGNoZXIpOwogICAgICByZXR1cm4gRGlzcGF0Y2hlcjsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGdldERDLAogICAgICBTdHJlYW1hYmxlQ29tcG9uZW50CiAgICB9OwogIH0KCiAgLy8gc3JjL2V4dGVybmFsLnRzCiAgdmFyIGlzQ3VzdG9tRWxlbWVudE5hbWUgPSAobikgPT4gIW4uaW5jbHVkZXMoIi4iKSAmJiBuLmluY2x1ZGVzKCItIik7CiAgZnVuY3Rpb24gaXNSZW5kZXJhYmxlVHlwZShnKSB7CiAgICBpZiAodHlwZW9mIGcgPT09ICJmdW5jdGlvbiIpIHJldHVybiAhaXNFbGVtZW50Q2xhc3MoZyk7CiAgICByZXR1cm4gdHlwZW9mIGcgPT09ICJvYmplY3QiICYmIGcgIT09IG51bGwgJiYgdHlwZW9mIGcuJCR0eXBlb2YgPT09ICJzeW1ib2wiOwogIH0KICBmdW5jdGlvbiByZXNvbHZlRG90dGVkUGF0aChyb290LCBuYW1lKSB7CiAgICBsZXQgY3VyID0gcm9vdDsKICAgIGZvciAoY29uc3Qgc2VnIG9mIG5hbWUuc3BsaXQoIi4iKSkgewogICAgICBpZiAoY3VyID09IG51bGwpIHJldHVybiB2b2lkIDA7CiAgICAgIGN1ciA9IGN1cltzZWddOwogICAgfQogICAgcmV0dXJuIGN1cjsKICB9CiAgdmFyIEJBQkVMX1VSTCA9ICJodHRwczovL3VucGtnLmNvbS9AYmFiZWwvc3RhbmRhbG9uZUA3LjI5LjAvYmFiZWwubWluLmpzIjsKICB2YXIgQkFCRUxfU1JJID0gInNoYTM4NC1tMDhLaWRpTnFMZHBKcUxxOTVHL0xFaThRdmpsL3hVWWxsM1FJTHlwTW9RNjVRb3JKOUx2dHAyUlhZR0JGajF5IjsKICB2YXIgR0xPQkFMX1BPTExfSU5URVJWQUxfTVMgPSA1MDsKICB2YXIgR0xPQkFMX1BPTExfVElNRU9VVF9NUyA9IDNlNDsKICBmdW5jdGlvbiBjcmVhdGVFeHRlcm5hbE1vZHVsZXMob25SZXNvbHZlZCkgewogICAgY29uc3QgY2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgbGV0IGJhYmVsTG9hZGluZyA9IG51bGw7CiAgICBjb25zdCByZXBvcnRlZE1pc3NpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29uc3QgcG9sbGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICBmdW5jdGlvbiBlbnN1cmVCYWJlbCgpIHsKICAgICAgaWYgKHdpbmRvdy5CYWJlbCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgICBpZiAoYmFiZWxMb2FkaW5nKSByZXR1cm4gYmFiZWxMb2FkaW5nOwogICAgICBiYWJlbExvYWRpbmcgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHsKICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgcy5zcmMgPSBCQUJFTF9VUkw7CiAgICAgICAgcy5pbnRlZ3JpdHkgPSBCQUJFTF9TUkk7CiAgICAgICAgcy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwogICAgICAgIHMub25sb2FkID0gKCkgPT4gcmVzKCk7CiAgICAgICAgcy5vbmVycm9yID0gcmVqOwogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gYmFiZWxMb2FkaW5nOwogICAgfQogICAgY29uc3QgcGVuZGluZyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBmdW5jdGlvbiBsb2FkKGtpbmQsIHVybCwgYWZ0ZXIpIHsKICAgICAgY29uc3QgZXhpc3RpbmcgPSBwZW5kaW5nLmdldCh1cmwpOwogICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZzsKICAgICAgY2FjaGUuc2V0KHVybCwgbnVsbCk7CiAgICAgIGNvbnNvbGUuaW5mbygiW2RjLXJ1bnRpbWVdIHgtaW1wb3J0OiBsb2FkaW5nIiwgdXJsLCAiKCIgKyBraW5kICsgIikiKTsKICAgICAgY29uc3QgcmVhZHkgPSBQcm9taXNlLmFsbChbCiAgICAgICAga2luZCA9PT0gImpzeCIgPyBlbnN1cmVCYWJlbCgpIDogUHJvbWlzZS5yZXNvbHZlKCksCiAgICAgICAgYWZ0ZXIgPz8gUHJvbWlzZS5yZXNvbHZlKCkKICAgICAgXSk7CiAgICAgIGNvbnN0IHAgPSByZWFkeS50aGVuKCgpID0+IGZldGNoKHVybCkpLnRoZW4oKHIpID0+IHsKICAgICAgICBpZiAoIXIub2spIHRocm93IG5ldyBFcnJvcigiSFRUUCAiICsgci5zdGF0dXMpOwogICAgICAgIHJldHVybiByLnRleHQoKTsKICAgICAgfSkudGhlbigoc3JjKSA9PiB7CiAgICAgICAgY29uc3QgY29kZSA9IGtpbmQgPT09ICJqc3giID8gd2luZG93LkJhYmVsLnRyYW5zZm9ybShzcmMsIHsKICAgICAgICAgIGZpbGVuYW1lOiB1cmwsCiAgICAgICAgICBwcmVzZXRzOiBbInJlYWN0IiwgInR5cGVzY3JpcHQiXQogICAgICAgIH0pLmNvZGUgOiBzcmM7CiAgICAgICAgY29uc3QgbW9kdWxlID0geyBleHBvcnRzOiB7fSB9OwogICAgICAgIGNvbnN0IGJlZm9yZSA9IG5ldyBTZXQoT2JqZWN0LmtleXMod2luZG93KSk7CiAgICAgICAgLy8hIG5vc2VtZ3JlcDogZXZhbC1hbmQtZnVuY3Rpb24tY29uc3RydWN0b3IKICAgICAgICBuZXcgRnVuY3Rpb24oIlJlYWN0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgInJlcXVpcmUiLCBjb2RlKSgKICAgICAgICAgIGdldFJlYWN0KCksCiAgICAgICAgICBtb2R1bGUsCiAgICAgICAgICBtb2R1bGUuZXhwb3J0cywKICAgICAgICAgICgpID0+ICh7fSkKICAgICAgICApOwogICAgICAgIGNvbnN0IGdsb2JhbHMgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMod2luZG93KSkgewogICAgICAgICAgaWYgKCFiZWZvcmUuaGFzKGspICYmIHR5cGVvZiB3aW5kb3dba10gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgZ2xvYmFsc1trXSA9IHdpbmRvd1trXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2FjaGUuc2V0KHVybCwgeyBtb2Q6IG1vZHVsZS5leHBvcnRzLCBnbG9iYWxzIH0pOwogICAgICAgIGNvbnNvbGUuaW5mbygKICAgICAgICAgICJbZGMtcnVudGltZV0geC1pbXBvcnQ6IGxvYWRlZCIsCiAgICAgICAgICB1cmwsCiAgICAgICAgICAiXHUyMDE0IGV4cG9ydHM6IiwKICAgICAgICAgIE9iamVjdC5rZXlzKG1vZHVsZS5leHBvcnRzKSwKICAgICAgICAgICJ3aW5kb3cgZ2xvYmFsczoiLAogICAgICAgICAgT2JqZWN0LmtleXMoZ2xvYmFscykKICAgICAgICApOwogICAgICAgIG9uUmVzb2x2ZWQoKTsKICAgICAgfSkuY2F0Y2goKGUpID0+IHsKICAgICAgICBjYWNoZS5zZXQodXJsLCB7CiAgICAgICAgICBtb2Q6IHt9LAogICAgICAgICAgZ2xvYmFsczoge30sCiAgICAgICAgICBlcnJvcjogImZhaWxlZCB0byBsb2FkOiAiICsgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpCiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5lcnJvcigKICAgICAgICAgICJbZGMtcnVudGltZV0geC1pbXBvcnQ6IEZBSUxFRCB0byBsb2FkIiwKICAgICAgICAgIHVybCwKICAgICAgICAgICIoIiArIGtpbmQgKyAiKSIsCiAgICAgICAgICBlCiAgICAgICAgKTsKICAgICAgICBvblJlc29sdmVkKCk7CiAgICAgIH0pOwogICAgICBwZW5kaW5nLnNldCh1cmwsIHApOwogICAgICByZXR1cm4gcDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlc29sdmUyKHVybCwgbmFtZSkgewogICAgICBjb25zdCBlbnRyeSA9IGNhY2hlLmdldCh1cmwpOwogICAgICBpZiAoIWVudHJ5KSByZXR1cm4gbnVsbDsKICAgICAgY29uc3QgeyBtb2QsIGdsb2JhbHMgfSA9IGVudHJ5OwogICAgICBjb25zdCBDID0gbW9kICYmIG1vZFtuYW1lXSB8fCBnbG9iYWxzICYmIGdsb2JhbHNbbmFtZV0gfHwgdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgd2luZG93W25hbWVdIHx8IG1vZCAmJiBtb2QuZGVmYXVsdDsKICAgICAgaWYgKHR5cGVvZiBDID09PSAiZnVuY3Rpb24iKSByZXR1cm4gQzsKICAgICAgY29uc3Qga2V5ID0gdXJsICsgIlwwIiArIG5hbWU7CiAgICAgIGlmICghcmVwb3J0ZWRNaXNzaW5nLmhhcyhrZXkpKSB7CiAgICAgICAgcmVwb3J0ZWRNaXNzaW5nLnNldCgKICAgICAgICAgIGtleSwKICAgICAgICAgIGVudHJ5LmVycm9yIHx8ICdubyBleHBvcnQgbmFtZWQgIicgKyBuYW1lICsgJyIgKGhhczogJyArIE9iamVjdC5rZXlzKG1vZCkuam9pbigiLCAiKSArICIpIgogICAgICAgICk7CiAgICAgICAgY29uc29sZS5lcnJvcigKICAgICAgICAgICJbZGMtcnVudGltZV0geC1pbXBvcnQ6IG1vZHVsZSIsCiAgICAgICAgICB1cmwsCiAgICAgICAgICAibG9hZGVkIGJ1dCBoYXMgbm8gY29tcG9uZW50IG5hbWVkIiwKICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG5hbWUpLAogICAgICAgICAgIlx1MjAxNCBhdmFpbGFibGUgZXhwb3J0czoiLAogICAgICAgICAgT2JqZWN0LmtleXMobW9kKSwKICAgICAgICAgICJ3aW5kb3cgZ2xvYmFsczoiLAogICAgICAgICAgT2JqZWN0LmtleXMoZ2xvYmFscyksCiAgICAgICAgICAiLiBUaGUgbW9kdWxlIG11c3QgYG1vZHVsZS5leHBvcnRzID0geyIgKyBuYW1lICsgIn1gIG9yIHNldCBgd2luZG93LiIgKyBuYW1lICsgImAuIgogICAgICAgICk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiB3YWl0Rm9yR2xvYmFsKG5hbWUpIHsKICAgICAgaWYgKHBvbGxpbmcuaGFzKG5hbWUpKSByZXR1cm47CiAgICAgIHBvbGxpbmcuYWRkKG5hbWUpOwogICAgICBjb25zdCBzdGFydGVkID0gRGF0ZS5ub3coKTsKICAgICAgY29uc3QgaXNDRSA9IGlzQ3VzdG9tRWxlbWVudE5hbWUobmFtZSk7CiAgICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7CiAgICAgICAgY29uc3QgZm91bmQgPSBpc0NFID8gY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIDogaXNSZW5kZXJhYmxlVHlwZShyZXNvbHZlRG90dGVkUGF0aCh3aW5kb3csIG5hbWUpKTsKICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgIHBvbGxpbmcuZGVsZXRlKG5hbWUpOwogICAgICAgICAgb25SZXNvbHZlZCgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWQgPj0gR0xPQkFMX1BPTExfVElNRU9VVF9NUykgewogICAgICAgICAgY29uc29sZS53YXJuKAogICAgICAgICAgICAiW2RjLXJ1bnRpbWVdIHgtaW1wb3J0OiBnbG9iYWwiLAogICAgICAgICAgICBKU09OLnN0cmluZ2lmeShuYW1lKSwKICAgICAgICAgICAgIm5ldmVyIGFwcGVhcmVkIG9uIHdpbmRvdyBhZnRlciAiICsgR0xPQkFMX1BPTExfVElNRU9VVF9NUyArICJtcyIKICAgICAgICAgICk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHNldFRpbWVvdXQodGljaywgR0xPQkFMX1BPTExfSU5URVJWQUxfTVMpOwogICAgICB9OwogICAgICBzZXRUaW1lb3V0KHRpY2ssIEdMT0JBTF9QT0xMX0lOVEVSVkFMX01TKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlc29sdmVHbG9iYWwodXJsLCBuYW1lKSB7CiAgICAgIGNvbnN0IGlzQ0UgPSBpc0N1c3RvbUVsZW1lbnROYW1lKG5hbWUpOwogICAgICBpZiAoIXVybCkgewogICAgICAgIGlmIChpc0NFKSB7CiAgICAgICAgICBpZiAoY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpKSByZXR1cm4gbmFtZTsKICAgICAgICAgIHdhaXRGb3JHbG9iYWwobmFtZSk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3QgZzIgPSByZXNvbHZlRG90dGVkUGF0aCh3aW5kb3csIG5hbWUpOwogICAgICAgIGlmIChpc1JlbmRlcmFibGVUeXBlKGcyKSkgcmV0dXJuIGcyOwogICAgICAgIHdhaXRGb3JHbG9iYWwobmFtZSk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc3QgZW50cnkgPSBjYWNoZS5nZXQodXJsKTsKICAgICAgaWYgKCFlbnRyeSkgcmV0dXJuIG51bGw7CiAgICAgIGlmIChpc0NFICYmIGN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSkgcmV0dXJuIG5hbWU7CiAgICAgIGNvbnN0IGcgPSBlbnRyeS5nbG9iYWxzW25hbWVdID8\/IHJlc29sdmVEb3R0ZWRQYXRoKHdpbmRvdywgbmFtZSk7CiAgICAgIGlmIChpc1JlbmRlcmFibGVUeXBlKGcpKSByZXR1cm4gZzsKICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoIi4iKSkgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IGtleSA9IHVybCArICJcMGdsb2JhbFwwIiArIG5hbWU7CiAgICAgIGlmICghcmVwb3J0ZWRNaXNzaW5nLmhhcyhrZXkpKSB7CiAgICAgICAgcmVwb3J0ZWRNaXNzaW5nLnNldChrZXksIG51bGwpOwogICAgICAgIGlmIChpc0NFICYmICFjdXN0b21FbGVtZW50cy5nZXQobmFtZSkpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAgICAgIltkYy1ydW50aW1lXSB4LWltcG9ydDoiLAogICAgICAgICAgICB1cmwsCiAgICAgICAgICAgICJsb2FkZWQgYnV0IG5vIGN1c3RvbSBlbGVtZW50IiwKICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobmFtZSksCiAgICAgICAgICAgICJpcyByZWdpc3RlcmVkIGFuZCB3aW5kb3cuIiArIG5hbWUgKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIFx1MjAxNCByZW5kZXJpbmcgPCIgKyBuYW1lICsgIj4gYXMgYW4gdW5rbm93biBlbGVtZW50LiIKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuYW1lOwogICAgfQogICAgZnVuY3Rpb24gZ2V0RXJyb3IodXJsLCBuYW1lKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gY2FjaGUuZ2V0KHVybCk7CiAgICAgIGlmIChlbnRyeT8uZXJyb3IpIHJldHVybiBlbnRyeS5lcnJvcjsKICAgICAgcmV0dXJuIHJlcG9ydGVkTWlzc2luZy5nZXQodXJsICsgIlwwIiArIG5hbWUpIHx8IG51bGw7CiAgICB9CiAgICByZXR1cm4geyBsb2FkLCByZXNvbHZlOiByZXNvbHZlMiwgcmVzb2x2ZUdsb2JhbCwgZ2V0RXJyb3IgfTsKICB9CiAgZnVuY3Rpb24gaXNFbGVtZW50Q2xhc3MoZykgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHR5cGVvZiBnID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gInVuZGVmaW5lZCIgJiYgZy5wcm90b3R5cGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvLyBzcmMvYXRvbWljcy50cwogIHZhciBBVE9NSUNfQ1NTID0gKAogICAgLy8gbGF5b3V0CiAgICAiLmZ4e2Rpc3BsYXk6ZmxleH0uY29se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmdyaWR7ZGlzcGxheTpncmlkfS5hY3thbGlnbi1pdGVtczpjZW50ZXJ9Lmpje2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmpie2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5mMXtmbGV4OjF9Lm5vc2hyaW5re2ZsZXgtc2hyaW5rOjB9LndyYXB7ZmxleC13cmFwOndyYXB9LmZ3NXtmb250LXdlaWdodDo1MDB9LmZ3Nntmb250LXdlaWdodDo2MDB9LmZ3N3tmb250LXdlaWdodDo3MDB9LmZ3OHtmb250LXdlaWdodDo4MDB9LmZzMTF7Zm9udC1zaXplOjExcHh9LmZzMTJ7Zm9udC1zaXplOjEycHh9LmZzMTN7Zm9udC1zaXplOjEzcHh9LmZzMTR7Zm9udC1zaXplOjE0cHh9LmZzMTV7Zm9udC1zaXplOjE1cHh9LmZzMTZ7Zm9udC1zaXplOjE2cHh9LmZzMjB7Zm9udC1zaXplOjIwcHh9LmZzMjJ7Zm9udC1zaXplOjIycHh9LnVwcGVye3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udGN7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LmdhcDh7Z2FwOjhweH0uZ2FwMTB7Z2FwOjEwcHh9LmdhcDEye2dhcDoxMnB4fS5nYXAxNntnYXA6MTZweH0uZ2FwMjR7Z2FwOjI0cHh9Lm0we21hcmdpbjowfS5tdDh7bWFyZ2luLXRvcDo4cHh9Lm10MTJ7bWFyZ2luLXRvcDoxMnB4fS5tdDE2e21hcmdpbi10b3A6MTZweH0ubWI4e21hcmdpbi1ib3R0b206OHB4fS5tYjEye21hcmdpbi1ib3R0b206MTJweH0ubWIxNnttYXJnaW4tYm90dG9tOjE2cHh9LnBvc3JlbHtwb3NpdGlvbjpyZWxhdGl2ZX0ucG9zYWJze3Bvc2l0aW9uOmFic29sdXRlfS5yb3VuZHtib3JkZXItcmFkaXVzOjUwJX0ub2hpZGV7b3ZlcmZsb3c6aGlkZGVufS5iYm94e2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucG9pbnRlcntjdXJzb3I6cG9pbnRlcn0udzEwMHt3aWR0aDoxMDAlfS5iMHtib3JkZXI6bm9uZX0iCiAgKTsKCiAgLy8gc3JjL2hlbG1ldC50cwogIHZhciBERVNJR05fRE9DX01PREVfUkUgPSAvPG1ldGFcYltePl0qXGJuYW1lXHMqPVxzKlsiJ11kZXNpZ25fZG9jX21vZGVbIiddW14+XSpcYig\/OmNvbnRlbnR8dmFsdWUpXHMqPVxzKlsiJ10oXHcrKVsiJ10vaTsKICB2YXIgQ0FOVkFTX0JHX0xJR0hUID0gIiNmMGVlZTYiOwogIHZhciBDQU5WQVNfQkdfREFSSyA9ICIjMmUyYzI2IjsKICBmdW5jdGlvbiBjcmVhdGVIZWxtZXRNYW5hZ2VyKGRvYywgaXNTdHJlYW1pbmcpIHsKICAgIGNvbnN0IG1vdW50ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgY29uc3QgbGl2ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBsZXQgZGVzaWduRG9jTW9kZSA9IG51bGw7CiAgICBsZXQgY2FudmFzU3R5bGVFbCA9IG51bGw7CiAgICBsZXQgYXBwVGhlbWUgPSAibGlnaHQiOwogICAgdHJ5IHsKICAgICAgY29uc3QgZHMgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWU7CiAgICAgIGFwcFRoZW1lID0gZHMgPT09ICJkYXJrIiB8fCBkcyA9PT0gImxpZ2h0IiA\/IGRzIDogbmV3IFVSTFNlYXJjaFBhcmFtcyhkb2MuZGVmYXVsdFZpZXc\/LmxvY2F0aW9uLnNlYXJjaCA\/PyAiIikuZ2V0KAogICAgICAgICJ0aGVtZSIKICAgICAgKSA9PT0gImRhcmsiID8gImRhcmsiIDogImxpZ2h0IjsKICAgIH0gY2F0Y2ggewogICAgfQogICAgZnVuY3Rpb24gYXBwbHlDYW52YXNCZygpIHsKICAgICAgaWYgKCFjYW52YXNTdHlsZUVsKSByZXR1cm47CiAgICAgIGNvbnN0IGJnID0gYXBwVGhlbWUgPT09ICJkYXJrIiA\/IENBTlZBU19CR19EQVJLIDogQ0FOVkFTX0JHX0xJR0hUOwogICAgICBjYW52YXNTdHlsZUVsLnRleHRDb250ZW50ID0gYGh0bWwsYm9keXtiYWNrZ3JvdW5kOiR7Ymd9fSNkYy1yb290Pi5zYy1ob3N0e3Bvc2l0aW9uOnJlbGF0aXZlfWA7CiAgICB9CiAgICBmdW5jdGlvbiBwb3N0RGVzaWduTW9kZShtb2RlKSB7CiAgICAgIGlmICh3aW5kb3cucGFyZW50ID09PSB3aW5kb3cpIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsgdHlwZTogIl9fZGNfZGVzaWduX21vZGUiLCBtb2RlIH0sICIqIik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBzZXREZXNpZ25Eb2NNb2RlKG1vZGUpIHsKICAgICAgaWYgKG1vZGUgPT09IGRlc2lnbkRvY01vZGUpIHJldHVybjsKICAgICAgZGVzaWduRG9jTW9kZSA9IG1vZGU7CiAgICAgIHBvc3REZXNpZ25Nb2RlKG1vZGUpOwogICAgICBpZiAobW9kZSA9PT0gImNhbnZhcyIpIHsKICAgICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1kYy1jYW52YXMiLCAiIik7CiAgICAgICAgY2FudmFzU3R5bGVFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIGNhbnZhc1N0eWxlRWwuc2V0QXR0cmlidXRlKCJkYXRhLWRjLWNhbnZhcyIsICIiKTsKICAgICAgICBhcHBseUNhbnZhc0JnKCk7CiAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoY2FudmFzU3R5bGVFbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtZGMtY2FudmFzIik7CiAgICAgICAgY2FudmFzU3R5bGVFbD8ucmVtb3ZlKCk7CiAgICAgICAgY2FudmFzU3R5bGVFbCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGUpID0+IHsKICAgICAgY29uc3QgdHlwZSA9IGUuZGF0YSAmJiBlLmRhdGEudHlwZTsKICAgICAgaWYgKHR5cGUgPT09ICJfX2RjX3RoZW1lIikgewogICAgICAgIGNvbnN0IHQgPSBlLmRhdGEudGhlbWU7CiAgICAgICAgaWYgKHQgPT09ICJsaWdodCIgfHwgdCA9PT0gImRhcmsiKSB7CiAgICAgICAgICBhcHBUaGVtZSA9IHQ7CiAgICAgICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPSB0OwogICAgICAgICAgYXBwbHlDYW52YXNCZygpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKCFkZXNpZ25Eb2NNb2RlIHx8IHR5cGUgIT09ICJfX2RjX3Byb2JlIikgcmV0dXJuOwogICAgICBwb3N0RGVzaWduTW9kZShkZXNpZ25Eb2NNb2RlKTsKICAgIH0pOwogICAgZnVuY3Rpb24gY29tcGlsZShub2RlKSB7CiAgICAgIGNvbnN0IHJhdyA9IFsuLi5ub2RlLmNoaWxkcmVuXTsKICAgICAgY29uc3QgaGVsbWV0Q2xvc2VkID0gbm9kZS5uZXh0U2libGluZyAhPSBudWxsIHx8IG5vZGUucGFyZW50Tm9kZT8ubmV4dFNpYmxpbmcgIT0gbnVsbDsKICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKCJkYXRhLWRjLWF0b21pY3MiKSAmJiAhbW91bnRlZC5oYXMoIl9fZGMtYXRvbWljcyIpKSB7CiAgICAgICAgbW91bnRlZC5hZGQoIl9fZGMtYXRvbWljcyIpOwogICAgICAgIGNvbnN0IGVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgZWwuaWQgPSAiX19kYy1hdG9taWNzIjsKICAgICAgICBlbC50ZXh0Q29udGVudCA9IEFUT01JQ19DU1M7CiAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoZWwpOwogICAgICB9CiAgICAgIHJldHVybiAoX3ZhbHMsIGN0eCkgPT4gewogICAgICAgIGNvbnN0IG5hbWUgPSBjdHggJiYgY3R4Ll9fbmFtZSB8fCAiIjsKICAgICAgICBjb25zdCBzdHJlYW1pbmcgPSAhIShuYW1lICYmIGlzU3RyZWFtaW5nKG5hbWUpKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhdy5sZW5ndGg7IGkrKykgewogICAgICAgICAgY29uc3QgY2hpbGQgPSByYXdbaV07CiAgICAgICAgICBjb25zdCB0YWcgPSBjaGlsZC50YWdOYW1lOwogICAgICAgICAgY29uc3QgbWF5QmVQYXJ0aWFsID0gc3RyZWFtaW5nICYmICFoZWxtZXRDbG9zZWQgJiYgaSA9PT0gcmF3Lmxlbmd0aCAtIDE7CiAgICAgICAgICBpZiAodGFnID09PSAiU0NSSVBUIikgewogICAgICAgICAgICBpZiAobWF5QmVQYXJ0aWFsKSBjb250aW51ZTsKICAgICAgICAgICAgY29uc3Qga2V5ID0gIlNDUklQVHwiICsgKGNoaWxkLmdldEF0dHJpYnV0ZSgic3JjIikgfHwgY2hpbGQudGV4dENvbnRlbnQgfHwgIiIpOwogICAgICAgICAgICBpZiAobW91bnRlZC5oYXMoa2V5KSkgY29udGludWU7CiAgICAgICAgICAgIG1vdW50ZWQuYWRkKGtleSk7CiAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZTogYW4sIHZhbHVlIH0gb2YgWy4uLmNoaWxkLmF0dHJpYnV0ZXNdKQogICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShhbiwgdmFsdWUpOwogICAgICAgICAgICBpZiAoY2hpbGQudGV4dENvbnRlbnQpIGVsLnRleHRDb250ZW50ID0gY2hpbGQudGV4dENvbnRlbnQ7CiAgICAgICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKGVsKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09PSAiTElOSyIgfHwgdGFnID09PSAiTUVUQSIpIHsKICAgICAgICAgICAgaWYgKG1heUJlUGFydGlhbCkgY29udGludWU7CiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRhZyArICJ8IiArIChjaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSB8fCBjaGlsZC5nZXRBdHRyaWJ1dGUoInNyYyIpIHx8IGNoaWxkLm91dGVySFRNTCk7CiAgICAgICAgICAgIGlmIChtb3VudGVkLmhhcyhrZXkpKSBjb250aW51ZTsKICAgICAgICAgICAgbW91bnRlZC5hZGQoa2V5KTsKICAgICAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoY2hpbGQuY2xvbmVOb2RlKHRydWUpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGtleSA9IG5hbWUgKyAifCIgKyBpOwogICAgICAgICAgICBsZXQgZWwgPSBsaXZlLmdldChrZXkpOwogICAgICAgICAgICBpZiAoIWVsIHx8IGVsLnRhZ05hbWUgIT09IHRhZykgewogICAgICAgICAgICAgIGlmIChlbCkgZWwucmVtb3ZlKCk7CiAgICAgICAgICAgICAgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWcudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgICAgICAgbGl2ZS5zZXQoa2V5LCBlbCk7CiAgICAgICAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoY29uc3QgeyBuYW1lOiBhbiwgdmFsdWUgfSBvZiBbLi4uY2hpbGQuYXR0cmlidXRlc10pIHsKICAgICAgICAgICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKGFuKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShhbiwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChlbC50ZXh0Q29udGVudCAhPT0gY2hpbGQudGV4dENvbnRlbnQpCiAgICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSBjaGlsZC50ZXh0Q29udGVudDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4geyBjb21waWxlLCBzZXREZXNpZ25Eb2NNb2RlIH07CiAgfQoKICAvLyBzcmMvcHNldWRvLnRzCiAgZnVuY3Rpb24gY3JlYXRlUHNldWRvU2hlZXQoZG9jKSB7CiAgICBsZXQgZWwgPSBudWxsOwogICAgY29uc3QgY2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgbGV0IG4gPSAwOwogICAgcmV0dXJuIChwc2V1ZG8sIGNzcykgPT4gewogICAgICBjb25zdCBrID0gcHNldWRvICsgInwiICsgY3NzOwogICAgICBjb25zdCBoaXQgPSBjYWNoZS5nZXQoayk7CiAgICAgIGlmIChoaXQpIHJldHVybiBoaXQ7CiAgICAgIGlmICghZWwpIHsKICAgICAgICBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKGVsKTsKICAgICAgfQogICAgICBjb25zdCBjbHMgPSAic2NwIiArIChuKyspLnRvU3RyaW5nKDM2KTsKICAgICAgY29uc3Qgc2VsID0gcHNldWRvID09PSAiYmVmb3JlIiB8fCBwc2V1ZG8gPT09ICJhZnRlciIgPyAiLiIgKyBjbHMgKyAiOjoiICsgcHNldWRvIDogIi4iICsgY2xzICsgIjoiICsgcHNldWRvOwogICAgICBlbC5zaGVldC5pbnNlcnRSdWxlKHNlbCArICJ7IiArIGNzcyArICJ9IiwgZWwuc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTsKICAgICAgY2FjaGUuc2V0KGssIGNscyk7CiAgICAgIHJldHVybiBjbHM7CiAgICB9OwogIH0KCiAgLy8gc3JjL3JlZ2lzdHJ5LnRzCiAgZnVuY3Rpb24gY3JlYXRlUmVnaXN0cnkoKSB7CiAgICBjb25zdCBlbnRyaWVzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmdW5jdGlvbiBnZXQobmFtZSkgewogICAgICByZXR1cm4gZW50cmllc1tuYW1lXSB8fCAoZW50cmllc1tuYW1lXSA9IHsKICAgICAgICBodG1sOiAiIiwKICAgICAgICB0cGw6IG51bGwsCiAgICAgICAgTG9naWM6IG51bGwsCiAgICAgICAganNTdHJlYW1pbmc6IGZhbHNlLAogICAgICAgIGh0bWxTdHJlYW1pbmc6IGZhbHNlLAogICAgICAgIHZlcjogMCwKICAgICAgICBzdWJzOiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLAogICAgICAgIGZldGNoZWQ6IGZhbHNlCiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gYnVtcChuYW1lKSB7CiAgICAgIGNvbnN0IHIgPSBnZXQobmFtZSk7CiAgICAgIHIudmVyKys7CiAgICAgIGZvciAoY29uc3QgZm4gb2Ygci5zdWJzKSBmbigpOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgZW50cmllcywKICAgICAgZ2V0LAogICAgICBidW1wLAogICAgICBidW1wQWxsKCkgewogICAgICAgIGZvciAoY29uc3QgbiBpbiBlbnRyaWVzKSBidW1wKG4pOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gc3JjL3J1bnRpbWUudHMKICB2YXIgQ09NUE9ORU5UX0RJUiA9ICIuIjsKICBmdW5jdGlvbiBjcmVhdGVSdW50aW1lKGRvYyA9IGRvY3VtZW50KSB7CiAgICBjb25zdCByZWdpc3RyeSA9IGNyZWF0ZVJlZ2lzdHJ5KCk7CiAgICBjb25zdCBwc2V1ZG9DbGFzcyA9IGNyZWF0ZVBzZXVkb1NoZWV0KGRvYyk7CiAgICBjb25zdCBoZWxtZXQgPSBjcmVhdGVIZWxtZXRNYW5hZ2VyKAogICAgICBkb2MsCiAgICAgIChuYW1lKSA9PiByZWdpc3RyeS5nZXQobmFtZSkuaHRtbFN0cmVhbWluZwogICAgKTsKICAgIGNvbnN0IGV4dGVybmFsID0gY3JlYXRlRXh0ZXJuYWxNb2R1bGVzKCgpID0+IHJlZ2lzdHJ5LmJ1bXBBbGwoKSk7CiAgICBjb25zdCBmYWN0b3J5ID0gY3JlYXRlQ29tcG9uZW50RmFjdG9yeShyZWdpc3RyeSwgZW5zdXJlRmV0Y2hlZCk7CiAgICBjb25zdCBob3N0ID0gewogICAgICBjb21wb25lbnQ6IChuYW1lKSA9PiBmYWN0b3J5LmdldERDKG5hbWUpLAogICAgICBwbGFjZWhvbGRlcjogKHByb3BzKSA9PiBoKFBsYWNlaG9sZGVyLCBwcm9wcyksCiAgICAgIGhlbG1ldDogKG5vZGUpID0+IGhlbG1ldC5jb21waWxlKG5vZGUpLAogICAgICBsb2FkRXh0ZXJuYWw6IChraW5kLCB1cmwsIGFmdGVyKSA9PiBleHRlcm5hbC5sb2FkKGtpbmQsIHVybCwgYWZ0ZXIpLAogICAgICByZXNvbHZlRXh0ZXJuYWw6ICh1cmwsIG5hbWUpID0+IGV4dGVybmFsLnJlc29sdmUodXJsLCBuYW1lKSwKICAgICAgcmVzb2x2ZUV4dGVybmFsR2xvYmFsOiAodXJsLCBuYW1lKSA9PiBleHRlcm5hbC5yZXNvbHZlR2xvYmFsKHVybCwgbmFtZSksCiAgICAgIHJlc29sdmVFeHRlcm5hbEVycm9yOiAodXJsLCBuYW1lKSA9PiBleHRlcm5hbC5nZXRFcnJvcih1cmwsIG5hbWUpLAogICAgICBwc2V1ZG9DbGFzcwogICAgfTsKICAgIGZ1bmN0aW9uIGVuc3VyZUZldGNoZWQobmFtZSkgewogICAgICBjb25zdCByID0gcmVnaXN0cnkuZ2V0KG5hbWUpOwogICAgICBpZiAoci5mZXRjaGVkKSByZXR1cm47CiAgICAgIHIuZmV0Y2hlZCA9IHRydWU7CiAgICAgIGNvbnN0IHVybCA9IENPTVBPTkVOVF9ESVIgKyAiLyIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAiLmRjLmh0bWwiOwogICAgICBmZXRjaCh1cmwpLnRoZW4oKHJlcykgPT4gewogICAgICAgIGlmICghcmVzLm9rKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgICAiW2RjLXJ1bnRpbWVdIHNpYmxpbmcgZmV0Y2ggZm9yIDwiICsgbmFtZSArICIvPiBmYWlsZWQ6IiwKICAgICAgICAgICAgdXJsLAogICAgICAgICAgICAicmV0dXJuZWQiLAogICAgICAgICAgICByZXMuc3RhdHVzLAogICAgICAgICAgICAiXHUyMDE0IHRoZSByZWZlcmVuY2UgcmVuZGVycyBhcyBhbiBlbXB0eSBwbGFjZWhvbGRlci4iCiAgICAgICAgICApOwogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzLnRleHQoKTsKICAgICAgfSkudGhlbigodCkgPT4gewogICAgICAgIGlmICghdCkgcmV0dXJuOwogICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGNUZXh0KHQpOwogICAgICAgIGlmICghcGFyc2VkKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgICAiW2RjLXJ1bnRpbWVdIHNpYmxpbmcgZmV0Y2ggZm9yIDwiICsgbmFtZSArICIvPjoiLAogICAgICAgICAgICB1cmwsCiAgICAgICAgICAgICJoYXMgbm8gPHgtZGM+IGJsb2NrIFx1MjAxNCBub3QgYSBEZXNpZ24gQ29tcG9uZW50LiIKICAgICAgICAgICk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChwYXJzZWQucHJvcHMpIHIucHJvcHNNZXRhID0gcGFyc2VkLnByb3BzOwogICAgICAgIGlmIChwYXJzZWQucHJldmlldykgci5wcmV2aWV3ID0gcGFyc2VkLnByZXZpZXc7CiAgICAgICAgaWYgKHBhcnNlZC50ZW1wbGF0ZSAmJiAhci5odG1sKSB1cGRhdGVIdG1sKG5hbWUsIHBhcnNlZC50ZW1wbGF0ZSk7CiAgICAgICAgaWYgKHBhcnNlZC5qcyAmJiAhci5Mb2dpYykgdXBkYXRlSnMobmFtZSwgcGFyc2VkLmpzKTsKICAgICAgfSkuY2F0Y2goCiAgICAgICAgKGUpID0+IGNvbnNvbGUuZXJyb3IoCiAgICAgICAgICAiW2RjLXJ1bnRpbWVdIHNpYmxpbmcgZmV0Y2ggZm9yIDwiICsgbmFtZSArICIvPiB0aHJldzoiLAogICAgICAgICAgdXJsLAogICAgICAgICAgZQogICAgICAgICkKICAgICAgKTsKICAgIH0KICAgIGxldCByb290TmFtZSA9IG51bGw7CiAgICBmdW5jdGlvbiB1cGRhdGVIdG1sKG5hbWUsIGh0bWwpIHsKICAgICAgY29uc3QgciA9IHJlZ2lzdHJ5LmdldChuYW1lKTsKICAgICAgci5odG1sID0gaHRtbDsKICAgICAgaWYgKG5hbWUgPT09IHJvb3ROYW1lKSB7CiAgICAgICAgY29uc3QgbW9kZSA9IERFU0lHTl9ET0NfTU9ERV9SRS5leGVjKGh0bWwpPy5bMV0gPz8gbnVsbDsKICAgICAgICBpZiAobW9kZSB8fCAhci5odG1sU3RyZWFtaW5nKSBoZWxtZXQuc2V0RGVzaWduRG9jTW9kZShtb2RlKTsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHIudHBsID0gY29tcGlsZVRlbXBsYXRlKGh0bWwsIGhvc3QpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiW2RjLXJ1bnRpbWVdIHRlbXBsYXRlIGNvbXBpbGUgRkFJTEVEIGZvciIsIG5hbWUsIGUpOwogICAgICB9CiAgICAgIHJlZ2lzdHJ5LmJ1bXAobmFtZSk7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVKcyhuYW1lLCBzcmMpIHsKICAgICAgY29uc3QgciA9IHJlZ2lzdHJ5LmdldChuYW1lKTsKICAgICAgY29uc3Qgc2VxID0gci5qc1NlcSA9IChyLmpzU2VxIHx8IDApICsgMTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBDbHMgPSBldmFsRGNMb2dpYyhzcmMpOwogICAgICAgIGlmIChyLmpzU2VxICE9PSBzZXEpIHJldHVybjsKICAgICAgICBpZiAodHlwZW9mIENscyAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgci5sb2dpY0Vycm9yID0gbmFtZSArICIuZGMuaHRtbDogPHNjcmlwdCBkYXRhLWRjLXNjcmlwdD4gbXVzdCBkZWZpbmUgYGNsYXNzIENvbXBvbmVudCBleHRlbmRzIERDTG9naWNgIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgci5sb2dpY0Vycm9yID0gbnVsbDsKICAgICAgICAgIHIuTG9naWMgPSBDbHM7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgaWYgKHIuanNTZXEgIT09IHNlcSkgcmV0dXJuOwogICAgICAgIGNvbnNvbGUuZXJyb3IoCiAgICAgICAgICAiW2RjLXJ1bnRpbWVdIGxvZ2ljIGNsYXNzIGV2YWwgRkFJTEVEIGZvciIsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgIlx1MjAxNCB0aGUgdGVtcGxhdGUgcmVuZGVycyB3aXRoIHByb3BzIG9ubHkuIiwKICAgICAgICAgIGUKICAgICAgICApOwogICAgICAgIHIubG9naWNFcnJvciA9IG5hbWUgKyAiOiAiICsgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpOwogICAgICB9CiAgICAgIHJlZ2lzdHJ5LmJ1bXAobmFtZSk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRTdHJlYW1pbmcobmFtZSwga2luZCwgb24pIHsKICAgICAgY29uc3QgciA9IHJlZ2lzdHJ5LmdldChuYW1lKTsKICAgICAgaWYgKGtpbmQgPT09ICJodG1sIikgci5odG1sU3RyZWFtaW5nID0gISFvbjsKICAgICAgZWxzZSByLmpzU3RyZWFtaW5nID0gISFvbjsKICAgICAgbGV0IGFueSA9IGZhbHNlOwogICAgICBmb3IgKGNvbnN0IG4gaW4gcmVnaXN0cnkuZW50cmllcykgewogICAgICAgIGNvbnN0IGUgPSByZWdpc3RyeS5lbnRyaWVzW25dOwogICAgICAgIGlmIChlICYmIChlLmh0bWxTdHJlYW1pbmcgfHwgZS5qc1N0cmVhbWluZykpIHsKICAgICAgICAgIGFueSA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCJzYy1kYy1zdHJlYW1pbmciLCBhbnkpOwogICAgICByZWdpc3RyeS5idW1wKG5hbWUpOwogICAgfQogICAgZnVuY3Rpb24gZGNVcGRhdGUobmFtZSwga2luZCwgY29udGVudCwgc3RyZWFtaW5nKSB7CiAgICAgIGlmIChzdHJlYW1pbmcpIHJlZ2lzdHJ5LmdldChuYW1lKS5mZXRjaGVkID0gdHJ1ZTsKICAgICAgaWYgKGtpbmQgPT09ICJodG1sIikgewogICAgICAgIHNldFN0cmVhbWluZyhuYW1lLCAiaHRtbCIsICEhc3RyZWFtaW5nKTsKICAgICAgICB1cGRhdGVIdG1sKG5hbWUsIGNvbnRlbnQpOwogICAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICJqcyIpIHsKICAgICAgICBzZXRTdHJlYW1pbmcobmFtZSwgImpzIiwgISFzdHJlYW1pbmcpOwogICAgICAgIGlmICghc3RyZWFtaW5nKSB1cGRhdGVKcyhuYW1lLCBjb250ZW50KTsKICAgICAgfSBlbHNlIGlmIChraW5kID09PSAicHJvcHMiKSB7CiAgICAgICAgY29uc3QgeyBwcm9wcywgcHJldmlldyB9ID0gcGFyc2VEYXRhUHJvcHMoY29udGVudCk7CiAgICAgICAgY29uc3QgciA9IHJlZ2lzdHJ5LmdldChuYW1lKTsKICAgICAgICByLnByb3BzTWV0YSA9IHByb3BzID8\/IHZvaWQgMDsKICAgICAgICByLnByZXZpZXcgPSBwcmV2aWV3OwogICAgICAgIHJlZ2lzdHJ5LmJ1bXAobmFtZSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldFByb3BzKG5hbWUsIG92ZXJyaWRlcykgewogICAgICByZWdpc3RyeS5nZXQobmFtZSkucHJvcE92ZXJyaWRlcyA9IG92ZXJyaWRlcyAmJiB0eXBlb2Ygb3ZlcnJpZGVzID09PSAib2JqZWN0IiA\/IHsgLi4ub3ZlcnJpZGVzIH0gOiBudWxsOwogICAgICByZWdpc3RyeS5idW1wKG5hbWUpOwogICAgfQogICAgZnVuY3Rpb24gYWRvcHRQYXJzZWQobmFtZSwgcGFyc2VkKSB7CiAgICAgIGlmICghcGFyc2VkKSByZXR1cm47CiAgICAgIGNvbnN0IHIgPSByZWdpc3RyeS5nZXQobmFtZSk7CiAgICAgIGlmIChwYXJzZWQucHJvcHMpIHIucHJvcHNNZXRhID0gcGFyc2VkLnByb3BzOwogICAgICBpZiAocGFyc2VkLnByZXZpZXcpIHIucHJldmlldyA9IHBhcnNlZC5wcmV2aWV3OwogICAgICBpZiAocGFyc2VkLnRlbXBsYXRlKSB1cGRhdGVIdG1sKG5hbWUsIHBhcnNlZC50ZW1wbGF0ZSk7CiAgICAgIGlmIChwYXJzZWQuanMpIHVwZGF0ZUpzKG5hbWUsIHBhcnNlZC5qcyk7CiAgICB9CiAgICByZXR1cm4gewogICAgICByZWdpc3RyeSwKICAgICAgZ2V0REM6IGZhY3RvcnkuZ2V0REMsCiAgICAgIHVwZGF0ZUh0bWwsCiAgICAgIHVwZGF0ZUpzLAogICAgICBkY1VwZGF0ZSwKICAgICAgc2V0UHJvcHMsCiAgICAgIGFkb3B0UGFyc2VkLAogICAgICBzZXRSb290TmFtZTogKG5hbWUpID0+IHsKICAgICAgICByb290TmFtZSA9IG5hbWU7CiAgICAgIH0sCiAgICAgIG1hcmtGZXRjaGVkOiAobmFtZSkgPT4gewogICAgICAgIHJlZ2lzdHJ5LmdldChuYW1lKS5mZXRjaGVkID0gdHJ1ZTsKICAgICAgfSwKICAgICAgYW5ub3RhdGVkVGVtcGxhdGU6IChuYW1lKSA9PiB7CiAgICAgICAgY29uc3QgciA9IHJlZ2lzdHJ5LmdldChuYW1lKTsKICAgICAgICByZXR1cm4gci50cGwgJiYgci50cGwuX19hbm5vdGF0ZWQgfHwgbnVsbDsKICAgICAgfSwKICAgICAgdGVtcGxhdGVTb3VyY2U6IChuYW1lKSA9PiByZWdpc3RyeS5nZXQobmFtZSkuaHRtbCB8fCBudWxsLAogICAgICBTdHJlYW1hYmxlTG9naWMKICAgIH07CiAgfQoKICAvLyBzcmMvc3RyZWFtLXN0YXRlLnRzCiAgZnVuY3Rpb24gY3JlYXRlU3RyZWFtVHJhY2tlcihzdGFsZU1zID0gNmU0LCBub3cgPSBEYXRlLm5vdykgewogICAgY29uc3Qgc2luY2UgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29uc3QgbGl2ZU9uZSA9IChuKSA9PiB7CiAgICAgIGNvbnN0IHQgPSBzaW5jZS5nZXQobik7CiAgICAgIGlmICh0ID09PSB2b2lkIDApIHJldHVybiBmYWxzZTsKICAgICAgaWYgKG5vdygpIC0gdCA+IHN0YWxlTXMpIHsKICAgICAgICBzaW5jZS5kZWxldGUobik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIHJldHVybiB7CiAgICAgIHB1c2gobmFtZSwgc3RyZWFtaW5nLCB2aWV3cG9ydEtleSkgewogICAgICAgIGlmICh2aWV3cG9ydEtleSA9PT0gImRjLW1vZGVsIikgcmV0dXJuOwogICAgICAgIGlmIChzdHJlYW1pbmcpIHNpbmNlLnNldChuYW1lLCBub3coKSk7CiAgICAgICAgZWxzZSBzaW5jZS5kZWxldGUobmFtZSk7CiAgICAgIH0sCiAgICAgIGxpdmUobmFtZSkgewogICAgICAgIGlmIChuYW1lICE9PSB2b2lkIDApIHJldHVybiBsaXZlT25lKG5hbWUpOwogICAgICAgIGZvciAoY29uc3QgbiBvZiBbLi4uc2luY2Uua2V5cygpXSkgaWYgKGxpdmVPbmUobikpIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfTsKICB9CgogIC8vIHNyYy9pbmRleC50cwogIHZhciBSRUFDVF9VUkwgPSAiaHR0cHM6Ly91bnBrZy5jb20vcmVhY3RAMTguMy4xL3VtZC9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcyI7CiAgdmFyIFJFQUNUX1NSSSA9ICJzaGEzODQtREd5THhBeWpxMGY5U1BwVmV2RDZJZ3p0Q0Zsbk1GNm9XL1hRR21mZStJc1o4VHFFaURyY0hrTUxLSTZmaUIvWiI7CiAgdmFyIFJFQUNUX0RPTV9VUkwgPSAiaHR0cHM6Ly91bnBrZy5jb20vcmVhY3QtZG9tQDE4LjMuMS91bWQvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzIjsKICB2YXIgUkVBQ1RfRE9NX1NSSSA9ICJzaGEzODQtZ1RHeGh6MjFsVkdZTk1jZEpPeXEwMUVkZzBqaG4vYzIybnN4MGt5cVAwVHhhVjVXVmRzU0gxZlNEVWY1WUpqMSI7CiAgZnVuY3Rpb24gaGlkZVJhd1RlbXBsYXRlKCkgewogICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICBzLnRleHRDb250ZW50ID0gIngtZGN7ZGlzcGxheTpub25lIWltcG9ydGFudH0iOwogICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTsKICB9CiAgZnVuY3Rpb24gbG9hZFNjcmlwdChzcmMsIGludGVncml0eSkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgIC8vISBub3NlbWdyZXA6IGNyZWF0ZS1zY3JpcHQtZWxlbWVudAogICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgIHMuc3JjID0gc3JjOwogICAgICBzLmludGVncml0eSA9IGludGVncml0eTsKICAgICAgcy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwogICAgICBzLmFzeW5jID0gZmFsc2U7CiAgICAgIHMub25sb2FkID0gKCkgPT4gcmVzb2x2ZTIoKTsKICAgICAgcy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHtzcmN9YCkpOwogICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGxvYWRSZWFjdFVtZCgpIHsKICAgIGNvbnN0IHcgPSB3aW5kb3c7CiAgICBpZiAody5SZWFjdCAmJiB3LlJlYWN0RE9NKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICByZXR1cm4gUHJvbWlzZS5hbGwoWwogICAgICBsb2FkU2NyaXB0KFJFQUNUX1VSTCwgUkVBQ1RfU1JJKSwKICAgICAgbG9hZFNjcmlwdChSRUFDVF9ET01fVVJMLCBSRUFDVF9ET01fU1JJKQogICAgXSkudGhlbigoKSA9PiB2b2lkIDApOwogIH0KICBmdW5jdGlvbiBpbml0KCkgewogICAgY29uc3QgcnVudGltZSA9IGNyZWF0ZVJ1bnRpbWUoZG9jdW1lbnQpOwogICAgbGV0IHJvb3ROYW1lID0gIlJvb3QiOwogICAgY29uc3QgYmFzZUNzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICBiYXNlQ3NzLnRleHRDb250ZW50ID0gQkFTRV9DU1M7CiAgICBkb2N1bWVudC5oZWFkLnByZXBlbmQoYmFzZUNzcyk7CiAgICBjb25zdCBub3RpZnlIb3N0ID0gKCkgPT4gewogICAgICBpZiAod2luZG93LnBhcmVudCA9PT0gd2luZG93KSByZXR1cm47CiAgICAgIGNvbnN0IHIgPSBydW50aW1lLnJlZ2lzdHJ5LmVudHJpZXNbcm9vdE5hbWVdOwogICAgICB0cnkgewogICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoCiAgICAgICAgICB7CiAgICAgICAgICAgIHR5cGU6ICJfX2RjX2Jvb3RlZCIsCiAgICAgICAgICAgIHJvb3ROYW1lLAogICAgICAgICAgICBwcm9wc01ldGE6IHIgJiYgci5wcm9wc01ldGEgfHwgbnVsbCwKICAgICAgICAgICAgcHJldmlldzogciAmJiByLnByZXZpZXcgfHwgbnVsbAogICAgICAgICAgfSwKICAgICAgICAgICIqIgogICAgICAgICk7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9OwogICAgY29uc3Qgc3RyZWFtcyA9IGNyZWF0ZVN0cmVhbVRyYWNrZXIoKTsKICAgIGNvbnN0IGFwaSA9IHsKICAgICAgX19kY1VwZGF0ZTogKG5hbWUsIGtpbmQsIGNvbnRlbnQsIHN0cmVhbWluZywgdmlld3BvcnRLZXkpID0+IHsKICAgICAgICBzdHJlYW1zLnB1c2gobmFtZSwgc3RyZWFtaW5nLCB2aWV3cG9ydEtleSk7CiAgICAgICAgcnVudGltZS5kY1VwZGF0ZShuYW1lLCBraW5kLCBjb250ZW50LCBzdHJlYW1pbmcpOwogICAgICAgIGlmIChuYW1lID09PSByb290TmFtZSAmJiAhc3RyZWFtaW5nICYmIGtpbmQgPT09ICJwcm9wcyIpIG5vdGlmeUhvc3QoKTsKICAgICAgfSwKICAgICAgX19kY1N0cmVhbWluZzogKG5hbWUpID0+IHN0cmVhbXMubGl2ZShuYW1lKSwKICAgICAgX19kY1NldFByb3BzOiAobmFtZSwgb3ZlcnJpZGVzKSA9PiBydW50aW1lLnNldFByb3BzKG5hbWUsIG92ZXJyaWRlcyksCiAgICAgIC8qKiBOYW1lIG9mIHRoZSBjb21wb25lbnQgY3VycmVudGx5IG1vdW50ZWQgYXMgdGhlIHBhZ2Ugcm9vdCDigJQgREMgdG9vbHMKICAgICAgICogIHB1c2ggdGhlaXIgdGVtcGxhdGUtc3RyZWFtIGhlcmUgd2hlbiB0YXJnZXRpbmcgInRoZSBvcGVuIHBhZ2UiLiAqLwogICAgICBfX2RjUm9vdE5hbWU6ICgpID0+IHJvb3ROYW1lLAogICAgICAvKiogRWRpdG9yIGJyaWRnZSDigJQgdGhlIGVuY29kZWQsIGBkYXRhLWRjLXRwbGAtYW5ub3RhdGVkIHRlbXBsYXRlIHNvdXJjZS4KICAgICAgICogIFRoZSBob3N0IGVkaXRvciBwYXJzZXMgdGhpcyBpbnRvIGl0cyBvd24gdGVtcGxhdGUgRE9NIHNvIGl0IGNhbiBtYXAgYQogICAgICAgKiAgcmVuZGVyZWQgbm9kZSAoY2FycnlpbmcgdGhlIHNhbWUgYGRhdGEtZGMtdHBsYCkgYmFjayB0byB0aGUgc291cmNlCiAgICAgICAqICBub2RlIHRoYXQgZW1pdHRlZCBpdC4gUmV0dXJucyB0aGUgZW5jb2RlZCBmb3JtIChgPHNjLWNvbXA+YCwKICAgICAgICogIGBzYy1jYW1lbC0qYCBhdHRycyk7IHRoZSBlZGl0b3IgZGVjb2RlcyBvbiBzZXJpYWxpemUuICovCiAgICAgIF9fZGNBbm5vdGF0ZWRUZW1wbGF0ZTogKG5hbWUpID0+IHJ1bnRpbWUuYW5ub3RhdGVkVGVtcGxhdGUobmFtZSksCiAgICAgIC8qKiBFZGl0b3IgYnJpZGdlIOKAlCB0aGUgKm9yaWdpbmFsKiAoZGVjb2RlZCkgdGVtcGxhdGUgc291cmNlLiAqLwogICAgICBfX2RjVGVtcGxhdGVTb3VyY2U6IChuYW1lKSA9PiBydW50aW1lLnRlbXBsYXRlU291cmNlKG5hbWUpLAogICAgICBfX2RjQm9vdDogKCkgPT4gewogICAgICAgIHJvb3ROYW1lID0gYm9vdChydW50aW1lLCBkb2N1bWVudCkgPz8gcm9vdE5hbWU7CiAgICAgICAgbm90aWZ5SG9zdCgpOwogICAgICB9LAogICAgICBfX2RjUmVnaXN0cnk6IHJ1bnRpbWUucmVnaXN0cnkuZW50cmllcywKICAgICAgZ2V0REM6IChuYW1lKSA9PiBydW50aW1lLmdldERDKG5hbWUpLAogICAgICAvLyBgRENMb2dpY2AgaXMgdGhlIGRvY3VtZW50ZWQgYmFzZSBjbGFzcyBuYW1lOyBgU3RyZWFtYWJsZUxvZ2ljYCBpcyB0aGUKICAgICAgLy8gaW1wbGVtZW50YXRpb24gYWxpYXMga2VwdCBmb3IgYW55IHByb2plY3QgdGhhdCBhbHJlYWR5IHJlZmVyZW5jZXMgaXQuCiAgICAgIERDTG9naWM6IHJ1bnRpbWUuU3RyZWFtYWJsZUxvZ2ljLAogICAgICBTdHJlYW1hYmxlTG9naWM6IHJ1bnRpbWUuU3RyZWFtYWJsZUxvZ2ljCiAgICB9OwogICAgT2JqZWN0LmFzc2lnbih3aW5kb3csIGFwaSk7CiAgICB3aW5kb3cuX19kY0NvbnRlbnRLZXllZCA9IHRydWU7CiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxvYWRpbmciKSBhcGkuX19kY0Jvb3QoKTsKICAgIGVsc2UgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsICgpID0+IGFwaS5fX2RjQm9vdCgpKTsKICB9CiAgaGlkZVJhd1RlbXBsYXRlKCk7CiAgbG9hZFJlYWN0VW1kKCkudGhlbihpbml0KS5jYXRjaCgoZXJyKSA9PiB7CiAgICBjb25zb2xlLmVycm9yKCJbZGNdIGZhaWxlZCB0byBsb2FkIFJlYWN0IG9yIGJvb3Q6IiwgZXJyKTsKICAgIHRocm93IGVycjsKICB9KTsKfSkoKTsK\"><\/script>\n<\/head>\n<body>\n<x-dc>\n<helmet>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Newsreader:ital,opsz,wght@0,6..72,300..600;1,6..72,300..500&family=Hanken+Grotesk:wght@400;500;600;700&family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Archivo:wght@500;600;700;800;900&display=swap\" rel=\"stylesheet\">\n<style>\n  * { box-sizing: border-box; }\n  body { margin: 0; background: #d9d4ca; }\n<\/style>\n<template id=\"__bundler_thumbnail\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 100 100\"><rect width=\"100\" height=\"100\" fill=\"#2B2722\"\/><text x=\"50\" y=\"46\" font-family=\"Georgia, serif\" font-size=\"30\" fill=\"#E3B25A\" text-anchor=\"middle\">Kab<\/text><text x=\"50\" y=\"72\" font-family=\"Georgia, serif\" font-size=\"14\" fill=\"#F4EFE6\" text-anchor=\"middle\" letter-spacing=\"2\">JOURNEY<\/text><\/svg><\/template>\n<\/helmet>\n\n<div data-screen-label=\"{{ segName }} landing page\" style=\"{{ rootStyle }}; min-height: 100vh; line-height: 1.6;\">\n\n  <!-- top bar -->\n  <div style=\"position: sticky; top: 0; z-index: 50; background: var(--bg,#F4EFE6); border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: 16px clamp(20px,5vw,40px); display: flex; align-items: center; justify-content: space-between;\">\n      <span style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-size: 28px; letter-spacing: 0.01em;\">KabU<\/span>\n      <div style=\"display: flex; align-items: center; gap: 16px;\">\n        <span style=\"font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-size: 14px; color: var(--muted,#5b5249); white-space: nowrap;\">Just <b style=\"font-weight: 700; color: var(--ink,#2B2722);\">$95<\/b><\/span>\n        <a href=\"#offer\" style=\"text-decoration: none; background: var(--btn-bg,#2B2722); color: var(--btn-color,#F4EFE6); border-radius: var(--btn-radius,999px); font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: var(--btn-weight,600); text-transform: var(--btn-transform,none); letter-spacing: var(--btn-letter,0); font-size: 14px; padding: 12px 22px;\">Begin the journey<\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- hero -->\n  <div style=\"position: relative; overflow: hidden; border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"position: absolute; inset: 0; background: var(--glow, transparent); pointer-events: none;\"><\/div>\n    <div style=\"position: relative; max-width: 1200px; margin: 0 auto; padding: clamp(40px,7vw,56px) clamp(20px,5vw,40px) clamp(56px,9vw,90px); display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: clamp(32px,5vw,56px); align-items: stretch;\">\n      <div>\n        <div style=\"display: inline-flex; align-items: center; gap: 10px; font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 26px;\">\n          <span style=\"width: 26px; height: 1px; background: var(--accent,#A77A3D);\"><\/span> The Kabbalah Journey\n        <\/div>\n        <h1 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(32px, 7.5vw, 62px); line-height: 1.04; margin: 0 0 24px;\">{{ heroPre }}<em style=\"font-style: var(--emph-style,italic); color: var(--accent,#A77A3D);\">{{ heroEmph }}<\/em>{{ heroPost }}<\/h1>\n        <p style=\"font-size: 19px; color: var(--muted,#5b5249); max-width: 31em; margin: 0 0 36px;\">{{ heroSub }}<\/p>\n        <div style=\"display: flex; align-items: center; gap: 22px; flex-wrap: wrap;\">\n          <a href=\"#offer\" style=\"text-decoration: none; display: inline-block; background: var(--btn-bg,#2B2722); color: var(--btn-color,#F4EFE6); border-radius: var(--btn-radius,999px); font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: var(--btn-weight,600); text-transform: var(--btn-transform,none); letter-spacing: var(--btn-letter,0); font-size: 16px; padding: 17px 34px;\">{{ heroCta }}<\/a>\n        <\/div>\n        <div style=\"margin-top: 20px; font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-size: 15px; color: var(--muted,#5b5249);\">14-day money-back guarantee \u00b7 <b style=\"font-weight: 700; color: var(--ink,#2B2722);\">$95<\/b><\/div>\n      <\/div>\n      <div style=\"border-radius: var(--radius,4px); overflow: hidden; border: var(--card-border,none); background-color: var(--hero-img-bg,#e7ded0); background-image: repeating-linear-gradient(135deg, color-mix(in srgb, var(--accent,#A77A3D) 18%, transparent) 0 14px, transparent 14px 28px); min-height: clamp(340px, 46vw, 560px);\">\n        {{ heroImgEl }}\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- logo strip (early trust) -->\n  <div style=\"border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 1160px; margin: 0 auto; padding: 22px clamp(20px,5vw,40px); display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 12px 40px;\">\n      <span style=\"font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--faint,#8a7f72); font-weight: 600; white-space: nowrap;\">As seen on<\/span>\n      <div style=\"display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 18px 34px;\">{{ logoStripEls }}<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- empathy + questions -->\n  <div style=\"border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(52px,8vw,84px) clamp(20px,5vw,40px); display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: clamp(32px,5vw,64px); align-items: start;\">\n      <div>\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(25px, 4vw, 34px); line-height: 1.2; margin: 0;\">{{ empPre }}<em style=\"font-style: var(--emph-style,italic); color: var(--accent,#A77A3D);\">{{ empEmph }}<\/em>{{ empPost }}<\/h2>\n        <div style=\"margin-top: 26px; display: flex; flex-direction: column; gap: 18px;\">\n          <sc-for list=\"{{ empBody }}\" as=\"para\" hint-placeholder-count=\"3\">\n            <p style=\"font-size: 18px; line-height: 1.6; color: var(--muted,#5b5249); margin: 0;\">{{ para }}<\/p>\n          <\/sc-for>\n        <\/div>\n      <\/div>\n      <div style=\"background: var(--panel,#EDE6D9); border: var(--card-border,none); border-radius: var(--radius,4px); padding: 32px clamp(22px,5vw,40px);\">\n        <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 6px;\">The questions you carry<\/div>\n        <p style=\"font-size: 16px; color: var(--muted,#5b5249); margin: 0 0 8px;\">The ones most people bury:<\/p>\n        <div style=\"display: flex; flex-direction: column;\">\n          <sc-for list=\"{{ questions }}\" as=\"q\" hint-placeholder-count=\"3\">\n            <div style=\"padding: 22px 0 22px 18px; border-left: 3px solid var(--accent,#A77A3D); border-top: 1px solid var(--line,rgba(43,39,34,0.12)); margin-top: 22px; font-family: var(--display-font,'Newsreader',serif); font-style: var(--emph-style,italic); font-weight: var(--display-weight,400); font-size: 25px; line-height: 1.25;\">{{ q }}<\/div>\n          <\/sc-for>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- course intro -->\n  <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(56px,8vw,90px) clamp(20px,5vw,40px); display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: clamp(32px,5vw,60px); align-items: center;\">\n    <div style=\"aspect-ratio: 4\/3; border-radius: var(--radius,4px); overflow: hidden; border: var(--card-border,none); background-color: var(--hero-img-bg,#2B2722);\">\n      <img decoding=\"async\" src=\"https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/cafe-study.webp\" alt=\"Studying The Kabbalah Journey\" style=\"width: 100%; height: 100%; object-fit: cover; display: block;\" \/>\n    <\/div>\n    <div>\n      <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 16px;\">The Kabbalah Journey<\/div>\n      <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(28px, 5.5vw, 44px); line-height: 1.08; margin: 0 0 24px;\">Find the answers your soul has been searching for.<\/h2>\n      <p style=\"font-size: 18px; color: var(--muted,#5b5249); margin: 0 0 18px;\">A journey designed to answer the questions you've asked \u2014 or never dared to. No matter where you are in life, it meets you there, and takes you somewhere deeper.<\/p>\n      <p style=\"font-size: 18px; color: var(--muted,#5b5249); margin: 0 0 32px;\">Not just knowledge \u2014 a real system that helps you feel grounded, purposeful, and connected. You'll transform from the inside out.<\/p>\n      <a href=\"#offer\" style=\"text-decoration: none; color: var(--ink,#2B2722); font-weight: 600; font-size: 16px; border-bottom: 2px solid var(--accent,#A77A3D); padding-bottom: 4px;\">Start your journey \u2192<\/a>\n    <\/div>\n  <\/div>\n\n  <!-- why this is different -->\n  <sc-if value=\"{{ showWhyDifferent }}\" hint-placeholder-val=\"{{ true }}\">\n  <div style=\"border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(56px,8vw,90px) clamp(20px,5vw,40px);\">\n      <div style=\"max-width: 40em; margin: 0 0 48px;\">\n        <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 16px;\">Why this is different<\/div>\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(27px, 5vw, 40px); line-height: 1.12; margin: 0 0 18px;\">What Kabbalah actually is (and what it isn't).<\/h2>\n        <p style=\"font-size: 19px; line-height: 1.6; color: var(--muted,#5b5249); margin: 0;\">Kabbalah is a 6,000-year-old method for understanding yourself, other people, and the reality you live in. It's often confused with things it isn't \u2014 so here's the difference.<\/p>\n      <\/div>\n      <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr)); gap: 16px;\">\n        <sc-for list=\"{{ differences }}\" as=\"d\" hint-placeholder-count=\"5\">\n          <div style=\"border: var(--card-border,1px solid rgba(43,39,34,0.12)); border-radius: var(--radius,4px); overflow: hidden; background: var(--card,#F4EFE6); display: flex; flex-direction: column;\">\n            <div style=\"padding: 24px 26px 16px; display: flex; gap: 12px; align-items: flex-start;\">\n              <span style=\"flex-shrink: 0; color: var(--faint,#8a7f72); font-size: 17px; line-height: 1.4;\">\u2715<\/span>\n              <div>\n                <div style=\"font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 700; color: var(--faint,#8a7f72); margin-bottom: 5px;\">Most people think<\/div>\n                <div style=\"font-size: 16px; line-height: 1.45; color: var(--muted,#5b5249);\">{{ d.myth }}<\/div>\n              <\/div>\n            <\/div>\n            <div style=\"display: flex; align-items: center; gap: 12px; padding: 0 26px;\">\n              <span style=\"height: 1px; flex: 1; background: var(--line,rgba(43,39,34,0.14));\"><\/span>\n              <span style=\"color: var(--accent,#A77A3D); font-size: 15px; font-weight: 700;\">\u2193<\/span>\n              <span style=\"height: 1px; flex: 1; background: var(--line,rgba(43,39,34,0.14));\"><\/span>\n            <\/div>\n            <div style=\"padding: 16px 26px 24px; display: flex; gap: 12px; align-items: flex-start;\">\n              <span style=\"flex-shrink: 0; color: var(--accent,#A77A3D); font-size: 17px; line-height: 1.4; font-weight: 700;\">\u2713<\/span>\n              <div>\n                <div style=\"font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 700; color: var(--accent,#A77A3D); margin-bottom: 5px;\">What it actually is<\/div>\n                <div style=\"font-size: 16px; line-height: 1.45; color: var(--ink,#2B2722); font-weight: 600;\">{{ d.truth }}<\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/sc-for>\n      <\/div>\n    <\/div>\n  <\/div>\n  <\/sc-if>\n\n  <!-- testimonials -->\n  <div style=\"background: var(--panel,#EDE6D9);\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(52px,8vw,84px) clamp(20px,5vw,40px);\">\n      <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(26px, 4.5vw, 36px); text-align: center; margin: 0 0 44px;\">How the journey changed their lives<\/h2>\n\n      <!-- video testimonials -->\n      <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); gap: 24px; margin-bottom: clamp(40px,7vw,64px);\">\n        <sc-for list=\"{{ videos }}\" as=\"v\" hint-placeholder-count=\"3\">\n          <div>\n            <div onClick=\"{{ v.onOpen }}\" role=\"button\" aria-label=\"Play video\" style=\"position: relative; aspect-ratio: 398\/261; border-radius: var(--radius,4px); overflow: hidden; border: var(--card-border,none); cursor: pointer; background-color: var(--hero-img-bg,#e7ded0); background-size: cover; background-position: center; background-image: {{ v.bg }};\">\n              <div style=\"position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,0.04) 50%, rgba(0,0,0,0.28));\"><\/div>\n              <div style=\"position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); width: 60px; height: 60px; border-radius: 999px; background: #fff; display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 26px rgba(0,0,0,0.34);\">\n                <span style=\"display: block; width: 0; height: 0; border-style: solid; border-width: 10px 0 10px 17px; border-color: transparent transparent transparent var(--accent,#A77A3D); margin-left: 4px;\"><\/span>\n              <\/div>\n            <\/div>\n            <div style=\"margin-top: 14px; font-family: var(--display-font,'Newsreader',serif); font-style: var(--emph-style,italic); font-weight: var(--display-weight,400); font-size: 18px; line-height: 1.35; color: var(--ink,#2B2722);\">\"{{ v.label }}\"<\/div>\n          <\/div>\n        <\/sc-for>\n      <\/div>\n\n      <div style=\"text-align: center; font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--faint,#8a7f72); font-weight: 600; margin-bottom: 32px;\">In their words<\/div>\n      <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr)); gap: 24px; align-items: start;\">\n        <sc-for list=\"{{ testimonials }}\" as=\"t\" hint-placeholder-count=\"3\">\n          <div style=\"background: var(--card,#F4EFE6); border: var(--card-border,none); border-radius: var(--radius,4px); padding: 34px;\">\n            <div style=\"color: var(--accent,#A77A3D); letter-spacing: 2px; margin-bottom: 18px;\">\u2605\u2605\u2605\u2605\u2605<\/div>\n            <h3 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-style: var(--emph-style,italic); text-transform: var(--head-transform,none); font-size: 22px; line-height: 1.3; margin: 0 0 16px;\">\"{{ t.head }}\"<\/h3>\n            <p style=\"font-size: 16px; line-height: 1.6; color: var(--muted,#5b5249); margin: 0 0 22px;\">{{ t.body }}<\/p>\n            <div style=\"font-size: 14px; color: var(--faint,#8a7f72);\">\u2014 {{ t.who }}<\/div>\n          <\/div>\n        <\/sc-for>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- curriculum -->\n  <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(56px,8vw,90px) clamp(20px,5vw,40px);\">\n    <div style=\"text-align: center; margin-bottom: 52px;\">\n      <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 14px;\">A 4-part course<\/div>\n      <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(27px, 5vw, 40px); margin: 0;\">Here's what you'll discover inside<\/h2>\n    <\/div>\n    <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 20px;\">\n      <sc-for list=\"{{ curriculum }}\" as=\"c\" hint-placeholder-count=\"4\">\n        <div style=\"background: var(--card,#F4EFE6); border: var(--card-border,none); border-radius: var(--radius,4px); padding: 38px;\">\n          <div style=\"font-family: var(--display-font,'Newsreader',serif); font-style: var(--emph-style,italic); color: var(--accent,#A77A3D); font-size: 17px; margin-bottom: 8px;\">Part {{ c.n }}<\/div>\n          <h3 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); font-size: 26px; margin: 0 0 12px;\">{{ c.title }}<\/h3>\n          <p style=\"color: var(--muted,#5b5249); font-size: 16px; margin: 0;\">{{ c.desc }}<\/p>\n        <\/div>\n      <\/sc-for>\n    <\/div>\n  <\/div>\n\n  <!-- what's included -->\n  <div style=\"border-top: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12)); border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(52px,8vw,80px) clamp(20px,5vw,40px);\">\n      <div style=\"text-align: center; margin-bottom: 52px;\">\n        <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 14px;\">Everything you get<\/div>\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(27px, 5vw, 40px); margin: 0;\">Everything included in your journey<\/h2>\n      <\/div>\n      <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr)); gap: 40px 28px; max-width: 1000px; margin: 0 auto;\">\n        <sc-for list=\"{{ included }}\" as=\"i\" hint-placeholder-count=\"8\">\n          <div style=\"text-align: center;\">\n            <div style=\"width: 36px; height: 2px; background: var(--accent,#A77A3D); margin: 0 auto 16px;\"><\/div>\n            <div style=\"font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: 700; font-size: 18px; color: var(--ink,#2B2722); margin-bottom: 8px;\">{{ i.title }}<\/div>\n            <div style=\"font-size: 15px; line-height: 1.5; color: var(--muted,#5b5249);\">{{ i.sub }}<\/div>\n          <\/div>\n        <\/sc-for>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- author -->\n  <div style=\"background: var(--panel,#EDE6D9);\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(52px,8vw,80px) clamp(20px,5vw,40px); display: flex; flex-wrap: wrap; gap: clamp(28px,5vw,56px); align-items: center; justify-content: center;\">\n      <div style=\"flex: 0 0 240px; max-width: 240px; aspect-ratio: 1; border-radius: 999px; overflow: hidden; border: var(--card-border,none); background-color: var(--hero-img-bg,#d8cdb8);\">\n        <img decoding=\"async\" src=\"https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/photo-kosinec-s-500x500.webp\" alt=\"Tony Kosinec\" style=\"width: 100%; height: 100%; object-fit: cover; display: block;\" \/>\n      <\/div>\n      <div style=\"flex: 1 1 340px;\">\n        <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 14px;\">Your guide<\/div>\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(25px, 4vw, 34px); margin: 0 0 16px;\">Tony Kosinec<\/h2>\n        <p style=\"font-size: 17px; color: var(--muted,#5b5249); margin: 0 0 18px;\">Tony Kosinec is a senior Kabbalah instructor and one of the pioneers of online Kabbalah education in English. As a founding member of the ARI Online Kabbalah Education Center in 2006 \u2014 a learning environment that later developed into KabU \u2014 he helped shape the first structured online environments for authentic Kabbalah studies in the English language.<\/p>\n        <p style=\"font-size: 17px; color: var(--muted,#5b5249); margin: 0;\">A writer and film composer by profession, Tony's inspired approach has introduced hundreds of thousands to the wisdom of Kabbalah through his renowned webcast <em style=\"font-style: italic;\">Perceiving Reality<\/em> and the interactive FAQ site <em style=\"font-style: italic;\">Question Your Reality<\/em>. His contributions to KabU's programs continue to guide students toward a deeper understanding of reality and human development.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- trust \/ authority -->\n  <div style=\"max-width: 1100px; margin: 0 auto; padding: clamp(52px,8vw,76px) clamp(20px,5vw,40px); text-align: center; display: flex; flex-direction: column; align-items: center;\">\n    <div style=\"margin-bottom: 22px;\">{{ kabuLogo }}<\/div>\n    <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(25px, 4vw, 34px); margin: 0 0 40px;\">The #1 authority in authentic Kabbalah<\/h2>\n    <div style=\"font-size: 13px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--faint,#8a7f72); font-weight: 600; margin-bottom: 30px; display: flex; align-items: center; gap: 16px;\">\n      <span style=\"width: 30px; height: 1px; background: var(--line,rgba(43,39,34,0.2));\"><\/span> As Seen On <span style=\"width: 30px; height: 1px; background: var(--line,rgba(43,39,34,0.2));\"><\/span>\n    <\/div>\n    <div style=\"width: 100%; display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 28px 30px; align-items: center;\">{{ logoEls }}<\/div>\n  <\/div>\n\n  <!-- founder -->\n  <div style=\"border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(56px,8vw,90px) clamp(20px,5vw,40px); display: flex; flex-wrap: wrap; gap: clamp(32px,5vw,60px); align-items: center; justify-content: center;\">\n      <div style=\"flex: 0 0 260px; max-width: 260px;\">\n        <div style=\"aspect-ratio: 1; width: 100%; border-radius: 999px; overflow: hidden; border: var(--card-border,none); background-color: var(--hero-img-bg,#d8cdb8);\">\n          <img decoding=\"async\" src=\"https:\/\/kabuconnect.com\/app\/uploads\/2021\/08\/Michael_Laitman_01.jpg\" alt=\"Kabbalist Dr. Michael Laitman\" style=\"width: 100%; height: 100%; object-fit: cover; object-position: center top; display: block;\" \/>\n        <\/div>\n      <\/div>\n      <div style=\"flex: 1 1 380px;\">\n        <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 20px;\">The founder<\/div>\n        <blockquote style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-style: var(--emph-style,italic); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(24px, 4vw, 32px); line-height: 1.28; margin: 0 0 22px;\">\"By studying Kabbalah, you begin to truly live. Every day becomes new. You constantly discover new laws, relationships, and a new world inside yourself and around you.\"<\/blockquote>\n        <div style=\"font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: 700; font-size: 17px; margin-bottom: 4px;\">Kabbalist Dr. Michael Laitman<\/div>\n        <div style=\"font-size: 15px; color: var(--muted,#5b5249); margin-bottom: 26px;\">Founder &amp; President of the Bnei Baruch Kabbalah Education &amp; Research Institute \u2014 KabU's parent organization<\/div>\n        <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr)); gap: 12px 40px; border-top: 1px solid var(--line,rgba(43,39,34,0.14)); padding-top: 24px;\">\n          <sc-for list=\"{{ founderFacts }}\" as=\"f\" hint-placeholder-count=\"5\">\n            <div style=\"display: flex; gap: 12px; align-items: flex-start; font-size: 15px; color: var(--muted,#5b5249); line-height: 1.4;\">\n              <span style=\"color: var(--accent,#A77A3D); flex-shrink: 0; font-weight: 700;\">\u2014<\/span>\n              <span>{{ f }}<\/span>\n            <\/div>\n          <\/sc-for>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- bonuses -->\n  <div style=\"background: var(--panel,#EDE6D9); border-top: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12)); border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 1100px; margin: 0 auto; padding: clamp(52px,8vw,84px) clamp(20px,5vw,40px);\">\n      <div style=\"text-align: center; margin-bottom: 48px;\">\n        <div style=\"font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#A77A3D); font-weight: 600; margin-bottom: 14px;\">Enroll today and also get<\/div>\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(27px, 5vw, 40px); margin: 0;\">Your course bonuses \u2014 free<\/h2>\n      <\/div>\n      <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 24px;\">\n        <sc-for list=\"{{ bonuses }}\" as=\"b\" hint-placeholder-count=\"2\">\n          <div style=\"position: relative; background: var(--card,#F4EFE6); border: var(--card-border,none); border-radius: var(--radius,4px); padding: 38px; display: flex; flex-direction: column;\">\n            <div style=\"display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-bottom: 18px;\">\n              <span style=\"font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: 700; font-size: 13px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent,#A77A3D);\">{{ b.n }}<\/span>\n              <span style=\"font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--accent-ink,#fff); background: var(--accent,#A77A3D); padding: 5px 12px; border-radius: 999px;\">{{ b.value }} \u00b7 Free<\/span>\n            <\/div>\n            <h3 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); font-size: 26px; line-height: 1.15; margin: 0 0 14px;\">{{ b.title }}<\/h3>\n            <p style=\"font-size: 16px; color: var(--muted,#5b5249); margin: 0;\">{{ b.desc }}<\/p>\n          <\/div>\n        <\/sc-for>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- offer \/ pricing -->\n  <div id=\"offer\" style=\"background: var(--pricing-bg,#2B2722); color: var(--pricing-ink,#F4EFE6); scroll-margin-top: 20px;\">\n    <sc-if value=\"{{ offerIsCard }}\" hint-placeholder-val=\"{{ true }}\">\n    <div style=\"max-width: 1200px; margin: 0 auto; padding: clamp(56px,8vw,90px) clamp(20px,5vw,40px); display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: clamp(32px,5vw,60px); align-items: center;\">\n      <div>\n        <div style=\"display: inline-flex; align-items: center; gap: 8px; font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#E3B25A); font-weight: 700; margin-bottom: 18px;\">\n          <span style=\"width: 7px; height: 7px; border-radius: 999px; background: var(--accent,#E3B25A); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent,#E3B25A) 25%, transparent);\"><\/span> Extremely limited presale\n        <\/div>\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(29px, 6vw, 46px); line-height: 1.08; margin: 0 0 22px;\">{{ closingHead }}<\/h2>\n        <p style=\"font-size: 17px; color: var(--pricing-faint,#cdbfa6); margin: 0 0 28px;\">Everything you need to finally answer the question that's followed you your whole life \u2014 the complete 4-part course, five months of live guidance and community, and two free bonuses \u2014 for one payment.<\/p>\n        <div style=\"display: inline-flex; align-items: center; gap: 10px;\">\n          <span style=\"font-size: 20px;\">\u23f3<\/span>\n          <span style=\"font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-size: 17px; font-weight: 700; color: var(--pricing-ink,#F4EFE6);\">Gran inauguraci\u00f3n el <span>4 de octubreb2026<\/span><\/span>\n        <\/div>\n      <\/div>\n      <div style=\"background: var(--pricing-card-bg,#F4EFE6); color: var(--pricing-card-ink,#2B2722); border-radius: var(--radius,6px); border: var(--card-border,none); overflow: hidden;\">\n        <div style=\"background: var(--accent,#A77A3D); color: var(--accent-ink,#fff); text-align: center; padding: 12px 20px; font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: 700; font-size: 14px; letter-spacing: 0.06em; text-transform: uppercase;\">Join by July 12 \u2014 save $100<\/div>\n        <div style=\"padding: clamp(26px,5vw,44px);\">\n        <div style=\"display: flex; align-items: center; gap: 14px; margin-bottom: 18px;\">\n          <span style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-size: clamp(48px, 9vw, 66px); line-height: 0.9;\">$95<\/span>\n          <div style=\"display: flex; flex-direction: column; gap: 4px;\">\n            <span style=\"color: var(--faint,#8a7f72); font-size: 16px; text-decoration: line-through;\">$389 value<\/span>\n            <span style=\"align-self: flex-start; font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--accent-ink,#fff); background: var(--accent,#A77A3D); padding: 4px 10px; border-radius: 999px;\">Save $294<\/span>\n          <\/div>\n        <\/div>\n        <div style=\"display: flex; gap: 10px; margin-bottom: 20px;\">\n          <div style=\"flex: 1; border: 2px solid var(--accent,#A77A3D); border-radius: var(--radius,6px); padding: 14px 16px; position: relative;\">\n            <div style=\"position: absolute; top: -9px; left: 14px; font-size: 10px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--accent-ink,#fff); background: var(--accent,#A77A3D); padding: 2px 8px; border-radius: 999px;\">Best value<\/div>\n            <div style=\"font-size: 13px; color: var(--muted,#5b5249); margin-bottom: 3px;\">One payment<\/div>\n            <div style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-size: 26px; line-height: 1; color: var(--pricing-card-ink,#2B2722);\">$95<\/div>\n          <\/div>\n          <div style=\"flex: 1; border: 1px solid var(--line,rgba(43,39,34,0.2)); border-radius: var(--radius,6px); padding: 14px 16px;\">\n            <div style=\"font-size: 13px; color: var(--muted,#5b5249); margin-bottom: 3px;\">Monthly plan<\/div>\n            <div style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-size: 26px; line-height: 1; color: var(--pricing-card-ink,#2B2722);\">5 \u00d7 $19<\/div>\n          <\/div>\n        <\/div>\n        <div style=\"font-size: 13px; color: var(--faint,#8a7f72); margin-bottom: 22px; text-align: center;\">No subscription \u00b7 no auto-renew \u00b7 that's about $19 a month<\/div>\n        <div style=\"border-top: 1px solid var(--line,rgba(43,39,34,0.14)); padding-top: 18px; margin-bottom: 22px; display: flex; flex-direction: column; gap: 12px;\">\n          <div style=\"display: flex; align-items: baseline; justify-content: space-between; gap: 14px;\">\n            <span style=\"font-size: 15px; color: var(--pricing-card-ink,#2B2722);\">The Kabbalah Journey \u2014 full 4-part course<\/span>\n            <span style=\"white-space: nowrap;\"><span style=\"font-size: 13px; color: var(--faint,#8a7f72); text-decoration: line-through; margin-right: 7px;\">$197<\/span><span style=\"font-size: 13px; font-weight: 700; color: var(--pricing-card-ink,#2B2722);\">$95<\/span><\/span>\n          <\/div>\n          <sc-for list=\"{{ bonuses }}\" as=\"b\" hint-placeholder-count=\"2\">\n            <div style=\"display: flex; align-items: baseline; justify-content: space-between; gap: 14px;\">\n              <span style=\"font-size: 15px; color: var(--pricing-card-ink,#2B2722);\"><strong style=\"font-weight: 700;\">{{ b.n }}:<\/strong> {{ b.title }}<\/span>\n              <span style=\"white-space: nowrap;\"><span style=\"font-size: 13px; color: var(--faint,#8a7f72); text-decoration: line-through; margin-right: 7px;\">{{ b.reg }}<\/span><span style=\"font-size: 12px; font-weight: 700; letter-spacing: 0.06em; color: var(--accent,#A77A3D);\">FREE<\/span><\/span>\n            <\/div>\n          <\/sc-for>\n        <\/div>\n        <a href=\"https:\/\/kabuconnect.com\/?product_id=450875&referer=435471\" class=\"trigger-signup\" style=\"display: block; text-align: center; text-decoration: none; background: var(--btn-bg,#2B2722); color: var(--btn-color,#F4EFE6); border-radius: var(--btn-radius,999px); font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: var(--btn-weight,600); text-transform: var(--btn-transform,none); letter-spacing: var(--btn-letter,0); font-size: 17px; padding: 18px; margin-bottom: 12px;\">{{ closingCta }}<\/a>\n        <div style=\"display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 13px; color: var(--muted,#5b5249); text-align: center; margin-bottom: 16px;\">\n          <span style=\"color: var(--accent,#A77A3D); font-weight: 700;\">\u2713<\/span> 14-day money-back guarantee \u00b7 Instant access\n        <\/div>\n        <div style=\"display: flex; align-items: center; justify-content: center; gap: 8px; border-top: 1px solid var(--line,rgba(43,39,34,0.14)); padding-top: 16px;\">\n          <span style=\"color: var(--accent,#A77A3D); letter-spacing: 1px; font-size: 14px;\">\u2605\u2605\u2605\u2605\u2605<\/span>\n          <span style=\"font-size: 14px; font-weight: 600; color: var(--pricing-card-ink,#2B2722);\">Joined by 300,000+ students worldwide<\/span>\n        <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n    <\/sc-if>\n\n    <!-- Version B \u2014 Value Stack (centered receipt reveal) -->\n    <sc-if value=\"{{ offerIsStack }}\" hint-placeholder-val=\"{{ true }}\">\n    <div style=\"max-width: 720px; margin: 0 auto; padding: clamp(56px,8vw,90px) clamp(20px,5vw,40px); text-align: center;\">\n      <div style=\"display: inline-flex; align-items: center; gap: 9px; font-size: 15px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#E3B25A); font-weight: 700; margin-bottom: 10px;\">\n        <span style=\"width: 8px; height: 8px; border-radius: 999px; background: var(--accent,#E3B25A);\"><\/span> Extremely limited presale\n      <\/div>\n      <div style=\"font-size: 15px; color: var(--pricing-faint,#cdbfa6); margin-bottom: 24px;\">Gran inauguraci\u00f3n el <span>4 de octubreb2026<\/span><\/div>\n      <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(29px, 6vw, 46px); line-height: 1.08; margin: 0 0 32px;\">{{ closingHead }}<\/h2>\n      <div style=\"background: var(--pricing-card-bg,#F4EFE6); color: var(--pricing-card-ink,#2B2722); border: var(--card-border,none); border-radius: var(--radius,6px); padding: clamp(28px,5vw,44px); text-align: left;\">\n        <div style=\"font-size: 12px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent,#A77A3D); margin-bottom: 10px;\">Here's everything you get<\/div>\n        <div style=\"display: flex; flex-direction: column;\">\n          <div style=\"display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 14px 0; border-bottom: 1px solid var(--line,rgba(43,39,34,0.12));\">\n            <span style=\"font-size: 16px;\">The Kabbalah Journey \u2014 full 4-part course<\/span>\n            <span style=\"white-space: nowrap;\"><span style=\"font-size: 14px; color: var(--faint,#8a7f72); text-decoration: line-through; margin-right: 8px;\">$197<\/span><span style=\"font-size: 15px; font-weight: 700;\">$95<\/span><\/span>\n          <\/div>\n          <sc-for list=\"{{ bonuses }}\" as=\"b\" hint-placeholder-count=\"2\">\n            <div style=\"display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 14px 0; border-bottom: 1px solid var(--line,rgba(43,39,34,0.12));\">\n              <span style=\"font-size: 16px;\"><strong style=\"font-weight: 700;\">{{ b.n }}:<\/strong> {{ b.title }}<\/span>\n              <span style=\"white-space: nowrap;\"><span style=\"font-size: 14px; color: var(--faint,#8a7f72); text-decoration: line-through; margin-right: 8px;\">{{ b.reg }}<\/span><span style=\"font-size: 14px; font-weight: 700; color: var(--accent,#A77A3D);\">FREE<\/span><\/span>\n            <\/div>\n          <\/sc-for>\n          <div style=\"display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 16px 0 0;\">\n            <span style=\"font-size: 16px; font-weight: 600;\">Total value<\/span>\n            <span style=\"white-space: nowrap;\"><span style=\"font-size: 18px; font-weight: 700; text-decoration: line-through; color: var(--faint,#8a7f72); margin-right: 10px;\">$389<\/span><span style=\"font-size: 18px; font-weight: 700;\">$95<\/span><\/span>\n          <\/div>\n        <\/div>\n        <div style=\"margin: 24px 0; border-top: 2px solid var(--pricing-card-ink,#2B2722); padding-top: 24px; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px 14px; text-align: center;\">\n          <span style=\"font-size: 18px; font-weight: 600; color: var(--pricing-card-ink,#2B2722); width: 100%;\">Your price today<\/span>\n          <div style=\"display: inline-flex; align-items: center; gap: 14px;\">\n            <span style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-size: clamp(44px, 8vw, 60px); line-height: 0.9;\">$95<\/span>\n            <span style=\"font-size: 13px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--accent-ink,#fff); background: var(--accent,#A77A3D); padding: 6px 13px; border-radius: 999px;\">Save $294<\/span>\n          <\/div>\n          <span style=\"font-size: 15px; color: var(--muted,#5b5249); width: 100%;\">$95 one-time payment &mdash; or 5 monthly payments of $19<\/span>\n        <\/div>\n        <a href=\"https:\/\/kabuconnect.com\/?product_id=450875&referer=435471\" class=\"trigger-signup\" style=\"display: block; text-align: center; text-decoration: none; background: var(--btn-bg,#2B2722); color: var(--btn-color,#F4EFE6); border-radius: var(--btn-radius,999px); font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: var(--btn-weight,600); text-transform: var(--btn-transform,none); letter-spacing: var(--btn-letter,0); font-size: 17px; padding: 18px; margin-bottom: 16px;\">{{ closingCta }}<\/a>\n        <div style=\"text-align: center; font-size: 16px; color: var(--muted,#5b5249);\"><span style=\"color: var(--accent,#A77A3D); font-weight: 700;\">\u2713<\/span> 14-day money-back guarantee<\/div>\n      <\/div>\n    <\/div>\n    <\/sc-if>\n\n    <!-- Version C \u2014 Ticket (horizontal coupon) -->\n    <sc-if value=\"{{ offerIsTicket }}\" hint-placeholder-val=\"{{ true }}\">\n    <div style=\"max-width: 1040px; margin: 0 auto; padding: clamp(56px,8vw,90px) clamp(20px,5vw,40px);\">\n      <div style=\"text-align: center; margin-bottom: 40px;\">\n        <div style=\"display: inline-flex; align-items: center; gap: 8px; font-size: 13px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent,#E3B25A); font-weight: 700; margin-bottom: 16px;\">\n          <span style=\"width: 7px; height: 7px; border-radius: 999px; background: var(--accent,#E3B25A);\"><\/span> Extremely limited presale \u00b7 Join by July 12\n        <\/div>\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(29px, 6vw, 46px); line-height: 1.08; margin: 0 auto; max-width: 20em;\">{{ closingHead }}<\/h2>\n      <\/div>\n      <div style=\"display: flex; flex-wrap: wrap; background: var(--pricing-card-bg,#F4EFE6); color: var(--pricing-card-ink,#2B2722); border: var(--card-border,none); border-radius: var(--radius,6px); overflow: hidden;\">\n        <div style=\"flex: 1 1 260px; background: var(--accent,#A77A3D); color: var(--accent-ink,#fff); padding: clamp(30px,5vw,44px); display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center;\">\n          <div style=\"font-size: 13px; letter-spacing: 0.14em; text-transform: uppercase; font-weight: 700; opacity: 0.9; margin-bottom: 6px;\">Presale price<\/div>\n          <div style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-size: clamp(60px,12vw,84px); line-height: 0.9;\">$95<\/div>\n          <div style=\"font-size: 15px; opacity: 0.9; margin-top: 6px;\">once \u00b7 or 5 \u00d7 $19<\/div>\n          <div style=\"margin-top: 16px; font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; background: rgba(255,255,255,0.18); padding: 6px 14px; border-radius: 999px;\">$389 value \u2014 save $294<\/div>\n        <\/div>\n        <div style=\"flex: 0 0 0; border-left: 2px dashed color-mix(in srgb, var(--pricing-card-ink,#2B2722) 22%, transparent);\"><\/div>\n        <div style=\"flex: 2 1 340px; padding: clamp(30px,5vw,44px);\">\n          <div style=\"font-size: 12px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent,#A77A3D); margin-bottom: 16px;\">Your ticket includes<\/div>\n          <div style=\"display: flex; flex-direction: column; gap: 12px; margin-bottom: 24px;\">\n            <div style=\"display: flex; gap: 10px; align-items: flex-start;\"><span style=\"color: var(--accent,#A77A3D); font-weight: 700;\">\u2713<\/span><span style=\"font-size: 16px;\">The Kabbalah Journey \u2014 full 4-part course<\/span><\/div>\n            <sc-for list=\"{{ bonuses }}\" as=\"b\" hint-placeholder-count=\"2\">\n              <div style=\"display: flex; gap: 10px; align-items: flex-start;\"><span style=\"color: var(--accent,#A77A3D); font-weight: 700;\">\u2713<\/span><span style=\"font-size: 16px;\"><strong style=\"font-weight: 700;\">{{ b.n }}:<\/strong> {{ b.title }} <span style=\"color: var(--accent,#A77A3D); font-weight: 700;\">(free)<\/span><\/span><\/div>\n            <\/sc-for>\n            <div style=\"display: flex; gap: 10px; align-items: flex-start;\"><span style=\"color: var(--accent,#A77A3D); font-weight: 700;\">\u2713<\/span><span style=\"font-size: 16px;\">14-day money-back guarantee \u00b7 instant access<\/span><\/div>\n          <\/div>\n          <a href=\"https:\/\/kabuconnect.com\/?product_id=450875&referer=435471\" class=\"trigger-signup\" style=\"display: block; text-align: center; text-decoration: none; background: var(--btn-bg,#2B2722); color: var(--btn-color,#F4EFE6); border-radius: var(--btn-radius,999px); font-family: var(--btn-font,'Hanken Grotesk',sans-serif); font-weight: var(--btn-weight,600); text-transform: var(--btn-transform,none); letter-spacing: var(--btn-letter,0); font-size: 17px; padding: 17px;\">{{ closingCta }}<\/a>\n          <div style=\"text-align: center; margin-top: 14px; font-size: 13px; color: var(--faint,#8a7f72);\">\u2605\u2605\u2605\u2605\u2605 Joined by 300,000+ students worldwide<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n    <\/sc-if>\n  <\/div>\n\n  <!-- guarantee -->\n  <div style=\"border-top: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12)); border-bottom: var(--rule-w,1px) solid var(--line,rgba(43,39,34,0.12));\">\n    <div style=\"max-width: 820px; margin: 0 auto; padding: clamp(48px,8vw,72px) clamp(20px,5vw,40px); display: flex; flex-wrap: wrap; gap: clamp(24px,4vw,40px); align-items: center; justify-content: center;\">\n      <div style=\"width: 160px; flex-shrink: 0;\">{{ sealImg }}<\/div>\n      <div style=\"flex: 1 1 320px;\">\n        <h2 style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); text-transform: var(--head-transform,none); letter-spacing: var(--head-letter,-0.01em); font-size: clamp(24px, 4vw, 32px); line-height: 1.15; margin: 0 0 12px;\">Take the first step. If it's not for you, it's free.<\/h2>\n        <p style=\"font-size: 17px; color: var(--muted,#5b5249); margin: 0;\">Step in, explore the lessons, and feel it for yourself. If it's not right for you, just tell us within 14 days and we'll refund every cent \u2014 no questions, no forms, no hard feelings.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- footer -->\n  <div style=\"max-width: 1200px; margin: 0 auto; padding: 32px clamp(20px,5vw,40px); display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 16px;\">\n    <span style=\"font-family: var(--display-font,'Newsreader',serif); font-weight: var(--display-weight,400); font-size: 22px;\">KabU<\/span>\n    <span style=\"font-size: 13px; color: var(--faint,#8a7f72);\">\u00a9 2026 KabU. All rights reserved. \u00b7 <a href=\"https:\/\/kabuconnect.com\/privacy-policy\/\" target=\"_blank\" rel=\"noopener\" style=\"color: inherit; text-decoration: underline;\">Privacy<\/a> \u00b7 <a href=\"https:\/\/kabuconnect.com\/terms-of-use\/\" target=\"_blank\" rel=\"noopener\" style=\"color: inherit; text-decoration: underline;\">Terms<\/a><\/span>\n  <\/div>\n\n  <!-- video lightbox modal -->\n  <sc-if value=\"{{ videoOpen }}\" hint-placeholder-val=\"{{ false }}\">\n    <div onClick=\"{{ closeVideo }}\" role=\"dialog\" aria-modal=\"true\" style=\"position: fixed; inset: 0; z-index: 9000; background: rgba(14,12,9,0.94); backdrop-filter: blur(8px); display: flex; align-items: center; justify-content: center; padding: 20px;\">\n      <div onClick=\"{{ stopProp }}\" style=\"position: relative; width: 92vw; max-width: 1100px; aspect-ratio: 16\/9;\">\n        <button onClick=\"{{ closeVideo }}\" aria-label=\"Close video\" style=\"position: absolute; top: -46px; right: 0; background: none; border: none; color: #fff; font-family: 'Hanken Grotesk', sans-serif; font-size: 15px; font-weight: 600; letter-spacing: 0.02em; cursor: pointer;\">\u2715 Close<\/button>\n        <iframe src=\"{{ videoSrc }}\" allow=\"autoplay; fullscreen\" allowfullscreen title=\"Video testimonial\" style=\"width: 100%; height: 100%; border: none; border-radius: 8px;\"><\/iframe>\n      <\/div>\n    <\/div>\n  <\/sc-if>\n\n<\/div>\n<\/x-dc>\n<script type=\"text\/x-dc\" data-dc-script data-props=\"{&quot;$preview&quot;:{&quot;width&quot;:1280},&quot;segment&quot;:{&quot;editor&quot;:&quot;enum&quot;,&quot;options&quot;:[&quot;Seeker&quot;,&quot;Spiritually Curious&quot;,&quot;Crisis-Shaken&quot;,&quot;Change-Driven&quot;,&quot;Void-Filler&quot;,&quot;Wisdom Seeker&quot;,&quot;Burned-Out&quot;,&quot;Numb&quot;,&quot;Experience Seeker&quot;],&quot;default&quot;:&quot;Seeker&quot;,&quot;tsType&quot;:&quot;string&quot;},&quot;direction&quot;:{&quot;editor&quot;:&quot;enum&quot;,&quot;options&quot;:[&quot;Editorial Calm&quot;,&quot;Cosmic Dark&quot;,&quot;Structured Bold&quot;],&quot;default&quot;:&quot;Cosmic Dark&quot;,&quot;tsType&quot;:&quot;string&quot;,&quot;section&quot;:&quot;Style&quot;},&quot;showWhyDifferent&quot;:{&quot;editor&quot;:&quot;boolean&quot;,&quot;default&quot;:false,&quot;tsType&quot;:&quot;boolean&quot;,&quot;section&quot;:&quot;Sections&quot;,&quot;label&quot;:&quot;Show \\&quot;Why this is different\\&quot; section&quot;}}\">\nclass Component extends DCLogic {\n  state = { videoId: null };\n\n  componentDidMount() {\n    this._onKey = (e) => { if (e.key === 'Escape') this.closeVideo(); };\n    document.addEventListener('keydown', this._onKey);\n  }\n  componentWillUnmount() {\n    document.removeEventListener('keydown', this._onKey);\n    document.body.style.overflow = '';\n  }\n  openVideo(id) {\n    this.setState({ videoId: id });\n    document.body.style.overflow = 'hidden';\n  }\n  closeVideo() {\n    this.setState({ videoId: null });\n    document.body.style.overflow = '';\n  }\n\n  themes = {\n    '1a': {\n      bg:'#F4EFE6', panel:'#EDE6D9', card:'#F4EFE6', ink:'#2B2722', muted:'#5b5249', faint:'#8a7f72', line:'rgba(43,39,34,0.12)', ruleW:'1px',\n      displayFont:\"'Newsreader', serif\", displayWeight:'400', emphStyle:'italic', headTransform:'none', headLetter:'-0.01em',\n      radius:'4px', cardBorder:'none',\n      btnBg:'#2B2722', btnColor:'#F4EFE6', btnRadius:'999px', btnFont:\"'Hanken Grotesk', sans-serif\", btnWeight:'600', btnTransform:'none', btnLetter:'0.01em',\n      heroImgBg:'#e7ded0', glow:'transparent',\n      pricingBg:'#2B2722', pricingInk:'#F4EFE6', pricingFaint:'#cdbfa6', pricingCardBg:'#F4EFE6', pricingCardInk:'#2B2722',\n      accentWarm:'#A77A3D', accentCalm:'#6F8A86', accentInk:'#F4EFE6',\n      logoFilter:'grayscale(1) opacity(0.6)'\n    },\n    '1b': {\n      bg:'#0B0E1A', panel:'#0E1220', card:'#131829', ink:'#EAE6F0', muted:'#b9bcd0', faint:'#7d7f96', line:'rgba(255,255,255,0.09)', ruleW:'1px',\n      displayFont:\"'Cormorant Garamond', serif\", displayWeight:'500', emphStyle:'italic', headTransform:'none', headLetter:'-0.005em',\n      radius:'12px', cardBorder:'1px solid rgba(255,255,255,0.07)',\n      btnBg:'var(--accent)', btnColor:'#0B0E1A', btnRadius:'999px', btnFont:\"'Hanken Grotesk', sans-serif\", btnWeight:'700', btnTransform:'none', btnLetter:'0.01em',\n      heroImgBg:'#131829', glow:'radial-gradient(900px 700px at 72% 26%, rgba(99,79,180,0.42), transparent 60%), radial-gradient(600px 500px at 18% 80%, color-mix(in srgb, var(--accent) 28%, transparent), transparent 60%)',\n      pricingBg:'#0E1220', pricingInk:'#EAE6F0', pricingFaint:'#7d7f96', pricingCardBg:'#131829', pricingCardInk:'#EAE6F0',\n      accentWarm:'#E3B25A', accentCalm:'#8FB0C9', accentInk:'#0B0E1A',\n      logoFilter:'brightness(0) invert(1) opacity(0.8)'\n    },\n    '1c': {\n      bg:'#F5F2EC', panel:'#ECE7DD', card:'#ffffff', ink:'#15120F', muted:'#4a443c', faint:'#877f74', line:'#15120F', ruleW:'2px',\n      displayFont:\"'Archivo', sans-serif\", displayWeight:'900', emphStyle:'normal', headTransform:'uppercase', headLetter:'-0.02em',\n      radius:'0px', cardBorder:'2px solid #15120F',\n      btnBg:'#15120F', btnColor:'#F5F2EC', btnRadius:'0px', btnFont:\"'Archivo', sans-serif\", btnWeight:'700', btnTransform:'uppercase', btnLetter:'0.04em',\n      heroImgBg:'#15120F', glow:'transparent',\n      pricingBg:'var(--accent)', pricingInk:'#ffffff', pricingFaint:'rgba(255,255,255,0.82)', pricingCardBg:'#F5F2EC', pricingCardInk:'#15120F',\n      accentWarm:'#C2502D', accentCalm:'#4F7A6B', accentInk:'#ffffff',\n      logoFilter:'grayscale(1) opacity(0.72)'\n    }\n  };\n\n  shared = {\n    curriculum: [\n      { n:'01', title:'Kabbalah Revealed I', desc:'The fundamental principles. Expand your perception of reality, understand the purpose of life, and the reason for human suffering. You\\u2019ll begin to see the hidden system that connects everything around you, and why you experience life the way you do.' },\n      { n:'02', title:'Kabbalah Revealed II', desc:'The single causal force of existence, the secret to true independence, and how Kabbalah relates to correcting the world. You\\u2019ll discover how one law underlies all of reality, and what it means for the choices you make every day.' },\n      { n:'03', title:'Kabbalah in Action', desc:'The internal laws embedded in nature, working with the human ego, and learning to activate the \"Reforming Light.\" This is where the wisdom becomes practical, giving you tools to work with yourself rather than against yourself.' },\n      { n:'04', title:'Kabbalah Experience', desc:'Transform theory into real-time activation and experience real connection in a live workshop session. You\\u2019ll move from understanding the ideas to actually living them, together with others on the same path.' }\n    ],\n    included: [\n      { title:'5 Months of Learning', sub:'Five months of transformational learning \u2014 4 parts, with one new lesson released every week.' },\n      { title:'Busy Schedule?', sub:'All you need is 1 hour per week. Learn at your own pace, on your own time.' },\n      { title:'Weekly Live Q&A', sub:'Exclusive weekly live Q&A sessions with Tony Kosinec and other instructors.' },\n      { title:'24\/7 Support on WhatsApp', sub:'Guidance, connection, and support through exclusive WhatsApp groups.' },\n      { title:'Extra Resources', sub:'Additional study resources to deepen your understanding.' },\n      { title:'Interactive Learning', sub:'Collaborative discussion forums with KabU instructors.' },\n      { title:'No Prerequisites Needed', sub:'No prior knowledge needed. This wisdom is universal \u2014 open to all.' },\n      { title:'Certificate of Completion', sub:'Receive a personalized certificate when you complete your journey.' }\n    ],\n    bonuses: [\n      { n:'Bonus #1', value:'$95 value', reg:'$95', title:'5 Months of Full KabU Membership', desc:\"Accelerate your growth with the world's leading Kabbalah environment: VOD courses to study at your own pace, weekly live events with senior instructors, and the largest authentic Kabbalah community in the world.\" },\n      { n:'Bonus #2', value:'$97 value', reg:'$97', title:'The Top 10 Secrets of Authentic Kabbalah', desc:\"Go beyond the surface and unlock 10 of Kabbalah's most profound secrets \u2014 the Tree of Life, the soul, reincarnation, the spiritual worlds \u2014 the kind 99.9% of people never learn.\" }\n    ],\n    press: [\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2024\/01\/forbes.svg', text:'Forbes', h:26 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/Bloomberg_Television_logo.svg', text:'Bloomberg', h:26 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2024\/01\/fox-news.svg', text:'Fox News', h:26 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/The_Telegraph_logo.svg', text:'The Telegraph', h:24 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2021\/09\/the-Jerusalem-Post-logo-1.svg', text:'The Jerusalem Post', h:26 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/The-miami-herald-logo-svg.svg', text:'Miami Herald', h:24 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/the-globe-and-mail.svg', text:'The Globe and Mail', h:22 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/National_Post-Logo.wine_.svg', text:'National Post', h:24 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2021\/09\/The_Canadian_Press_Logo.svg', text:'The Canadian Press', h:26 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2024\/01\/chikago.svg', text:'Chicago Tribune', h:22 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2024\/01\/daily-herald.svg', text:'Daily Herald', h:24 },\n      { img:'https:\/\/kabuconnect.com\/app\/uploads\/2024\/01\/newsmax-tv.svg', text:'Newsmax TV', h:24 }\n    ],\n    videos: [\n      { bg:\"url('https:\/\/kabuconnect.com\/app\/uploads\/2026\/06\/testimonial-skeptical.jpg.webp')\", label:'Within the first lesson of the course\\u2026', id:'700937413' },\n      { bg:\"url('https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/cover-video-2.webp')\", label:'This is what I was looking for all this time.', id:'700938170' },\n      { bg:\"url('https:\/\/kabuconnect.com\/app\/uploads\/2026\/06\/testimonial-question.jpg.webp')\", label:'I was going to be the guy that knew everything.', id:'700937794' }\n    ]\n  };\n\n  founderFacts = [\n    \"PhD in Kabbalah & Philosophy; MSc in Bio-Cybernetics\",\n    \"Author of 70+ books on Kabbalah, published in over 40 languages\",\n    \"Internationally-sought speaker and lecturer on the wisdom of Kabbalah\",\n    \"Direct student of Kabbalist Baruch Ashlag (Rabash), son of Baal HaSulam\",\n    \"The internet's most prolific Kabbalah content creator since the early 2000s\"\n  ];\n\n  differences = [\n    { myth:'Red strings, celebrities, and vague mysticism.', truth:'The authentic tradition, passed down an unbroken lineage to Kabbalist Dr. Michael Laitman.' },\n    { myth:\"Another dose of inspiration you'll forget by next week.\", truth:'A structured, step-by-step method that actually builds \u2014 a map, not motivation.' },\n    { myth:\"A religion you'd have to convert to or believe in.\", truth:'No religion, no dogma, no lifestyle change. Open to everyone, whatever you believe.' },\n    { myth:\"A video course you'll start and never finish.\", truth:'A guided, experiential journey \u2014 with live sessions and a real community \u2014 built to be felt, not just watched.' },\n    { myth:'Fringe, new-age, and unserious.', truth:\"A 6,000-year-old method, drawn from the original source and adapted for today's world.\" }\n  ];\n\n  segments = [\n    {\n      name:'Seeker', mood:'aspirational', heroImg:'contemplative portrait, warm light', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/bg-seeker.webp', objPos:'100% center',\n      heroPre:\"You're not lost. You're being \", heroEmph:'called.', heroPost:'',\n      heroSub:\"That quiet ache that there must be more \u2014 the one no achievement, relationship, or distraction ever quiets. It isn't emptiness. It's a calling. And there's a 6,000-year-old path built to answer it.\",\n      heroCta:'Begin your journey today',\n      empPre:\"You've always sensed there's a \", empEmph:'deeper meaning', empPost:\" to life. This is where you finally uncover it.\",\n      empBody:[\n        \"There's a restlessness in you that won't go away \u2014 a longing for purpose that no achievement, relationship, or distraction can satisfy.\",\n        \"You're not just looking for information. You're searching for something to anchor you, to make sense of everything.\",\n        \"What you need isn't another book or podcast. It's a path that doesn't just explain life, but helps you live it \u2014 a journey that changes you from the inside out.\"\n      ],\n      questions:['Why am I here?',\"What's the point of it all?\",'Why do I feel empty when I have everything?'],\n      closingHead:\"You've been searching your whole life. Don't wait to feel whole.\", closingCta:'Answer the inner call',\n      testimonials:[\n        { head:\"I didn't even know what I was searching for.\", body:\"For years, I felt this quiet restlessness. Like something was missing but I couldn't name it. I tried books, podcasts, even different spiritual practices \u2014 but nothing fully clicked. Starting The Kabbalah Journey felt different. I wasn't told what to believe. I was invited to explore. The ideas didn't just sound wise \u2014 they felt true. For the first time, I feel like I'm not just reading about life's mysteries \u2014 I'm actually living them.\", who:'Naomi R., 34, New York' },\n        { head:\"It gave shape to what I've always felt inside.\", body:\"Ever since I was a kid, I sensed there was more to life than what we see. But over time, that sense got buried under work, responsibilities, and noise. The Kabbalah Journey helped me reconnect with that part of me. It didn't give me all the answers, but it gave me the right questions. And somehow, that was more powerful.\", who:'Eli T., 41, Toronto' },\n        { head:'Not religion. Not theory. Something real.', body:\"I grew up spiritual-but-not-religious, and I've always felt drawn to the unseen, but most programs felt too dogmatic or too vague. This course met me in the middle \u2014 ancient wisdom, but presented in a way that feels grounded and modern. I feel more in tune with life, more present, and more connected to something greater. I didn't expect that.\", who:'Marisa K., 28, Berlin' }\n      ]\n    },\n    {\n      name:'Spiritually Curious', mood:'aspirational', heroImg:'open sky \/ horizon, curious mood', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/bg-spirit.webp', objPos:'100% center',\n      heroPre:\"There's more to reality than \", heroEmph:'meets the eye.', heroPost:'',\n      heroSub:\"You've always been drawn to the unseen. Not to dogma \u2014 to something real you can explore, test, and know for yourself.\",\n      heroCta:'Start exploring',\n      empPre:\"You're curious about the deeper structure of reality \u2014 and here, you get to \", empEmph:'explore it', empPost:'. No belief required.',\n      empBody:[\n        \"You've always felt there's more to life \u2014 more than what science, logic, or daily routines can explain. You wonder about the soul, the afterlife, higher worlds, and unseen forces. These aren't just idle thoughts \u2014 they light something up inside you.\",\n        \"You don't need a rescue. You need a compass \u2014 a doorway to explore the deeper realms of reality as something you can feel, experience, and know for yourself.\",\n        \"It's time to go beyond the questions, and enter the mystery for yourself.\"\n      ],\n      questions:[\"What's really behind it all?\",'Is there a system to this?','Where do I even start?'],\n      closingHead:'Curiosity brought you here. Let it take you deeper.', closingCta:'Begin exploring',\n      testimonials:[\n        { head:\"I've always felt there's more out there\u2026 I just didn't know how to reach it.\", body:\"I was drawn to questions about the soul, the afterlife, energy \u2014 but most places either felt too surface-level or too vague. The Kabbalah Journey gave me something real to work with. It's not about belief \u2014 it's about discovery. Every lesson felt like I was unlocking a part of something I always sensed was there.\", who:'Liam M., 39, Dublin' },\n        { head:\"I didn't want theories. I wanted something I could feel.\", body:\"I've read dozens of spiritual books and watched countless videos. Most just gave me more ideas to think about. But this course made me feel. Not in a dramatic way \u2014 just real, steady shifts in how I see myself and the world. It made the invisible start to feel tangible.\", who:'Sarah N., 33, Los Angeles' },\n        { head:\"It finally connected the dots I've been collecting for years.\", body:\"Science, energy, consciousness, the soul \u2014 I've been circling these topics forever. The Kabbalah Journey didn't throw out what I already knew, it deepened it. It gave me a framework that helped everything click into place. I finally feel like I'm not just wandering \u2014 I'm exploring with direction.\", who:'Daniel K., 45, London' }\n      ]\n    },\n    {\n      name:'Crisis-Shaken', mood:'tender', heroImg:'soft light through a window, quiet calm', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/hero-crisis.webp', objPos:'100% center',\n      heroPre:'When life falls apart, it can be the beginning of ', heroEmph:'something deeper.', heroPost:'',\n      heroSub:\"You've faced a loss that knocked the wind out of you. You don't need theory \u2014 you need something real to hold onto, and a next step that's clear.\",\n      heroCta:'Find solid ground',\n      empPre:\"You're searching for solid ground in the middle of real pain \u2014 and \", empEmph:\"you don't have to do it alone.\", empPost:'',\n      empBody:[\n        \"You've faced a loss or a blow that knocked the wind out of you \u2014 maybe a relationship collapsed, your health shifted, or life as you knew it simply fell apart.\",\n        \"You're not in search of theory or philosophy. You just need something real to hold onto \u2014 something that makes the pain bearable and the next step clear.\",\n        \"What you need now isn't to be 'fixed,' but to be met exactly where you are. There's a deeper strength waiting to rise inside you \u2014 one that can turn even this heartbreak into the beginning of something meaningful.\"\n      ],\n      questions:['Why did this happen to me?','Is there meaning behind my pain?','How do I find solid ground again?'],\n      closingHead:\"You don't have to go through this alone. There's meaning waiting to be revealed.\", closingCta:'Find your way forward',\n      testimonials:[\n        { head:\"I started this course at one of the lowest points of my life.\", body:\"After losing someone close to me, I was drowning. Friends tried to help, but nothing really reached me. The Kabbalah Journey didn't give me answers overnight \u2014 but it gave me space to breathe, to feel, and to start making sense of things. It helped me reconnect to something deeper than pain.\", who:'Rebecca T., 42, Toronto' },\n        { head:\"I didn't think a course could hold space for what I was going through.\", body:\"I signed up honestly because I had nothing to lose. I was going through a divorce and felt like the ground beneath me had vanished. What I found here wasn't a fix \u2014 it was a quiet kind of strength. I could show up messy, confused, broken \u2014 and still be met with something real. Slowly, I started to rebuild.\", who:'Jason M., 37, Chicago' },\n        { head:\"It reminded me that I'm not alone in this.\", body:\"When you're in pain, everything feels like noise. This course was different. It didn't push me to 'move on' or 'stay positive.' It gave me a lens to understand what I was going through \u2014 and the hope that there's something meaningful on the other side of all this.\", who:'Maya S., 50, London' }\n      ]\n    },\n    {\n      name:'Change-Driven', mood:'aspirational', heroImg:'figure ascending, dawn light', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/hero-driven.webp', objPos:'100% center',\n      heroPre:'You\\u2019re ready to change. You just need the ', heroEmph:'right map.', heroPost:'',\n      heroSub:\"You've outgrown where you are, and you feel the pull toward something higher. This is the system that gets you there.\",\n      heroCta:'Start your ascent',\n      empPre:\"You're driven to grow, ready to do the inner work \u2014 and this is \", empEmph:'built for momentum.', empPost:'',\n      empBody:[\n        \"You see injustice, conflict, and suffering \u2014 and it doesn't let you sleep. You care deeply, maybe too deeply, and it hurts. You've tried to act, to help, to fix things, but the problems seem too big, too endless.\",\n        \"You don't just want answers \u2014 you want tools. Inner clarity. Strength. A higher vision that doesn't just explain what's wrong, but lights a path toward healing, starting with yourself.\",\n        \"Because real change out there begins with something deeper in here.\"\n      ],\n      questions:[\"What's the next level for me?\",'How do I actually change?',\"What's really holding me back?\"],\n      closingHead:\"You're ready for the next level. Take the first step.\", closingCta:'Begin the climb',\n      testimonials:[\n        { head:\"I care so much it hurts. This course helped me channel that.\", body:\"I've always been overwhelmed by injustice and suffering. Protests, donations, activism \u2014 I did it all, but I was burning out. The Kabbalah Journey didn't tell me to stop caring \u2014 it helped me understand the deeper roots of why the world is the way it is. And more importantly, how I can show up with wisdom, not just emotion.\", who:'Sofia L., 29, Berlin' },\n        { head:\"I wanted to change the world \u2014 but I had to start with myself.\", body:\"Everything felt broken. Climate, conflict, inequality \u2014 I couldn't sleep at night. I thought Kabbalah was going to give me spiritual answers, but it gave me something even better: a structure to deal with chaos. I learned how inner change isn't a retreat \u2014 it's the first ripple in real transformation.\", who:'David K., 41, Seattle' },\n        { head:\"It gave me clarity when I was losing faith in everything.\", body:\"I used to believe we could fix things if we just tried harder. But eventually I hit a wall \u2014 disillusionment, exhaustion, even apathy. This course helped me zoom out, understand the bigger picture, and reconnect to why I care so deeply. It doesn't give quick fixes, but it restores your sense of direction.\", who:'Lina G., 34, New York' }\n      ]\n    },\n    {\n      name:'Void-Filler', mood:'tender', heroImg:'still life, muted and spacious', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/hero-void.webp', objPos:'100% center',\n      heroPre:'Nothing seems to fill the ', heroEmph:'emptiness', heroPost:' for long.',\n      heroSub:\"You've tried the achievements, the relationships, the distractions \u2014 and the hollow feeling keeps coming back. There's a reason for that.\",\n      heroCta:\"Find what's missing\",\n      empPre:\"The things that used to work have stopped filling the gap \u2014 and \", empEmph:\"there's a deeper answer.\", empPost:'',\n      empBody:[\n        \"From the outside, your life may look successful \u2014 goals reached, boxes checked, comfort achieved. But inside, there's a quiet emptiness you can't explain.\",\n        \"You've done what you were supposed to do, and yet you're left wondering: is this really all there is? Your longing isn't for more stuff \u2014 it's for depth. For something that stirs your soul and makes life feel real.\",\n        \"The next chapter isn't about doing more. It's about discovering something meaningful enough to finally feel full.\"\n      ],\n      questions:['Why is nothing ever enough?','Why does the feeling keep returning?','What am I actually missing?'],\n      closingHead:'The emptiness is pointing you somewhere. Follow it.', closingCta:\"Find what's missing\",\n      testimonials:[\n        { head:\"I had the career, the house, the vacations \u2014 but something was missing.\", body:\"From the outside, my life looked perfect. But I'd lie awake at night wondering why I still felt empty. I thought I needed another project or trip. Instead, The Kabbalah Journey gave me a new lens \u2014 one that helped me finally feel something real again. Not more \u2014 deeper.\", who:'Emily R., 38, Toronto' },\n        { head:\"This didn't fill the void. It showed me why it was there.\", body:\"I kept achieving things, thinking the next win would make me feel whole. But the feeling never lasted. This course didn't just inspire me \u2014 it changed the questions I was asking. I stopped chasing the next thing and started tuning into something I didn't even know I was missing.\", who:'Tom\u00e1s A., 42, Barcelona' },\n        { head:\"I didn't need more \u2014 I needed meaning.\", body:\"I thought I was just bored or tired. But underneath, I was spiritually starving. The Kabbalah Journey wasn't loud or dramatic \u2014 it was gentle, but it shook me awake. I started seeing purpose in places I used to overlook. I feel present now \u2014 in a way I never did before.\", who:'Leah S., 35, New York' }\n      ]\n    },\n    {\n      name:'Wisdom Seeker', mood:'aspirational', heroImg:'old manuscript \/ sacred geometry, scholarly', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/hero-wisdom.webp', objPos:'100% center',\n      heroPre:\"You don't want answers. You want the \", heroEmph:'system behind them.', heroPost:'',\n      heroSub:\"You've read widely and thought deeply. What you're after is a coherent framework \u2014 6,000 years of tested wisdom, properly structured.\",\n      heroCta:'Study the system',\n      empPre:\"You want real depth and a genuine system, not surface-level inspiration \u2014 and \", empEmph:\"you'll feel at home here.\", empPost:'',\n      empBody:[\n        \"You don't just want to know what's happening \u2014 you want to know why. You think deeply, connect dots others don't see, and hunger for a framework that can explain it all.\",\n        \"But the more you search, the more chaotic and fragmented the world can feel. What you need is clarity \u2014 a map, a system that makes sense of the overwhelming complexity of life.\",\n        \"You don't need more information. You need insight that finally connects it all.\"\n      ],\n      questions:[\"What's the underlying structure?\",'How does it all connect?',\"Where's the real source?\"],\n      closingHead:'The deepest wisdom is structured. Study it properly.', closingCta:'Begin the study',\n      testimonials:[\n        { head:\"I've read countless books\u2026 this is the first that gave me a framework.\", body:\"Philosophy, psychology, spirituality \u2014 I kept collecting ideas but never found a structure that connected them. The Kabbalah Journey didn't just teach me something new \u2014 it helped me organize everything I already knew. It gave me a mental map I didn't realize I needed.\", who:'David M., 46, Berlin' },\n        { head:\"My mind was exhausted \u2014 now it finally feels clear.\", body:\"I used to overanalyze everything, trying to find deeper meaning in chaos. It was exhausting. This course didn't drown me in more information. It quieted the noise and showed me how everything fits together. It gave me clarity \u2014 and peace.\", who:'Chloe R., 33, London' },\n        { head:\"I wasn't looking for comfort. I needed truth.\", body:\"So many courses just repeat the same surface-level stuff. This was different. It felt like I was being guided through the structure behind life itself. I'm still thinking about the ideas from lesson one. Finally \u2014 something that respects how deep I want to go.\", who:'Jonas B., 39, Copenhagen' }\n      ]\n    },\n    {\n      name:'Burned-Out', mood:'tender', heroImg:'rest, soft morning light', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/hero-out.webp', objPos:'100% center',\n      heroPre:\"You're running on empty, and pushing harder \", heroEmph:\"isn't working.\", heroPost:'',\n      heroSub:\"You've given everything and there's nothing left. What you need isn't more effort \u2014 it's a different relationship with everything.\",\n      heroCta:'Refill from a deeper source',\n      empPre:\"You're depleted and tired of forcing it \u2014 and \", empEmph:\"there's a way to refill\", empPost:' from a deeper source.',\n      empBody:[\n        \"You've been chasing deadlines, meeting expectations, and showing up for everyone else \u2014 all while quietly losing touch with yourself. The pace has become overwhelming, and even rest doesn't feel restful anymore.\",\n        \"What you crave is peace. A break from the noise. A way to reconnect to something calm, true, and lasting.\",\n        \"It's time to find the stillness beneath the chaos, and rediscover what really matters \u2014 starting with you.\"\n      ],\n      questions:['Why am I so drained?','Is this really all there is?','How do I find energy that lasts?'],\n      closingHead:\"You don't need to push harder. You need a deeper source.\", closingCta:'Start to refill',\n      testimonials:[\n        { head:\"I didn't realize how disconnected I'd become until I finally slowed down.\", body:\"Everything in my life was go-go-go. Even when I wasn't working, I couldn't really rest. The Kabbalah Journey didn't just give me information \u2014 it helped me breathe again. It gave me permission to slow down and reconnect with something real inside me.\", who:'Lauren T., 35, New York' },\n        { head:\"I was functioning \u2014 but I wasn't living.\", body:\"From the outside, my life looked fine. But I felt empty, like I was running on autopilot. This course helped me step out of the noise and actually feel again. It didn't push me \u2014 it met me where I was and gently guided me back to myself.\", who:'Mark D., 41, Toronto' },\n        { head:\"It's the first thing I've done that didn't make me feel like I had to 'fix' myself.\", body:\"So many programs just add more to your to-do list. This was different. It helped me pause, reflect, and feel a kind of peace I hadn't felt in years. It reminded me that I'm not a machine \u2014 and that maybe I don't need to chase anything to feel whole.\", who:'Marisa K., 28, Berlin' }\n      ]\n    },\n    {\n      name:'Numb', mood:'tender', heroImg:'color returning to grey, subtle', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/hero-numb.webp', objPos:'100% center',\n      heroPre:'Somewhere along the way, you ', heroEmph:'stopped feeling.', heroPost:'',\n      heroSub:\"Life still happens, but it doesn't land. You're going through the motions, waiting to feel connected to something again.\",\n      heroCta:'Come back to life',\n      empPre:\"You've gone numb, and you want to feel connected again \u2014 \", empEmph:'this is a way back.', empPost:'',\n      empBody:[\n        \"Life moves forward, day by day \u2014 but it all feels like a loop. Work, eat, scroll, sleep. It's not bad, but it's not fulfilling. You're not sure what's missing, only that something is.\",\n        \"There's a spark buried inside you, waiting to be lit \u2014 a deeper experience of life that's been calling from just beyond the routine.\",\n        \"You're not stuck. You're just one spark away from waking up. And once you taste it, you won't want to go back.\"\n      ],\n      questions:[\"Why don't I feel anything?\",'When did I disconnect?','How do I come back to life?'],\n      closingHead:'Coming back to life starts with a single step.', closingCta:'Take the first step',\n      testimonials:[\n        { head:\"I wasn't depressed \u2014 just\u2026 flat. Like life lost its color.\", body:\"I couldn't even explain what was wrong. I had a decent job, good people around me, but I felt nothing. Taking The Kabbalah Journey stirred something in me I didn't know was missing. It didn't overwhelm me \u2014 it just woke me up slowly, like sunlight after a long night.\", who:'Jake M., 30, Chicago' },\n        { head:\"Every day felt like a copy-paste of the one before.\", body:\"Wake up, scroll, work, eat, sleep. I wasn't sad \u2014 I just felt\u2026 distant. The course didn't fix me, it reached me. Bit by bit, I started to feel more present. More curious. I didn't even know how numb I'd become until I started to feel again.\", who:'Nina V., 28, Berlin' },\n        { head:\"It gave me a spark I didn't know I needed.\", body:\"I wasn't looking for answers. I just wanted to feel something. And weirdly, this course gave me that. Not in a dramatic way \u2014 just in little moments that started to matter. A line, a thought, a feeling I hadn't had in years. It reminded me that life can still surprise you.\", who:'Ethan R., 33, Manchester' }\n      ]\n    },\n    {\n      name:'Experience Seeker', mood:'aspirational', heroImg:'immersive light, sensory', heroBg:'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/hero-exp.webp', objPos:'100% center',\n      heroPre:\"You don't want to read about it. You want to \", heroEmph:'feel it.', heroPost:'',\n      heroSub:'Concepts aren\\u2019t enough \u2014 you want a direct, lived experience of something greater. This journey is built to be felt, not just studied.',\n      heroCta:'Experience it',\n      empPre:\"You want to actually experience the wisdom, not just learn about it \u2014 and \", empEmph:\"that's exactly the point.\", empPost:'',\n      empBody:[\n        \"You're not looking for abstract ideas or endless explanations. You want something you can feel. Something real \u2014 a deeper layer of life, the kind of experience that shifts how you see the world, and yourself.\",\n        \"You need a direct encounter with something greater. A moment that cracks through the ordinary and reconnects you to wonder.\",\n        \"The kind of spark that makes you say: 'This. This is what I've been missing.'\"\n      ],\n      questions:['How do I actually experience this?','Can I feel it for myself?','Is this real, or just theory?'],\n      closingHead:'Stop reading about it. Start living it.', closingCta:'Start living it',\n      testimonials:[\n        { head:\"It wasn't about learning something \u2014 it was about feeling something real.\", body:\"I've tried mindfulness, retreats, even psychedelics. But this was different. The Kabbalah Journey didn't try to 'teach' me in the usual way \u2014 it opened something in me. Like I was stepping into a deeper layer of life that had always been there, just hidden. And it felt incredibly alive.\", who:'Lina P., 34, San Diego' },\n        { head:\"It gave me the experience I didn't know I was looking for.\", body:\"I didn't come in with expectations \u2014 just curiosity. But something shifted. It was subtle, like the air changed. There were moments in this course where I felt completely present, like the noise stopped and something quiet but powerful came through. That's rare. And I want more of it.\", who:'Sasha E., 29, Amsterdam' },\n        { head:\"It shook something loose in me.\", body:\"My life is full \u2014 friends, travel, work. But something always felt just out of reach. This course didn't give me 'answers,' it gave me a doorway. A real experience of something more. Not religious, not preachy \u2014 just deep, beautiful, and true. I didn't expect to be moved like this.\", who:'Noah G., 31, Toronto' }\n      ]\n    }\n  ];\n\n  renderVals() {\n    \/\/ URL params let a standalone index.html be driven via ?segment=&direction=&accent=\n    let qp = {};\n    try { qp = Object.fromEntries(new URLSearchParams(location.search)); } catch (e) {}\n    const norm = (s) => (s || '').toString().trim().toLowerCase();\n    const dirAliases = { '1a':'Editorial Calm', 'editorial':'Editorial Calm', 'editorial calm':'Editorial Calm', 'calm':'Editorial Calm', '1b':'Cosmic Dark', 'cosmic':'Cosmic Dark', 'cosmic dark':'Cosmic Dark', 'dark':'Cosmic Dark', '1c':'Structured Bold', 'structured':'Structured Bold', 'structured bold':'Structured Bold', 'bold':'Structured Bold' };\n    \/\/ URL params take priority when present (standalone), else fall back to props (hosted editor)\n    const dirName = dirAliases[norm(qp.view)] || this.props.direction || 'Cosmic Dark';\n\n    const dirMap = { 'Editorial Calm':'1a', 'Cosmic Dark':'1b', 'Structured Bold':'1c' };\n    const dirKey = dirMap[dirName] || '1a';\n    const t = this.themes[dirKey];\n\n    const segAliases = { 'seeker':'Seeker','spirit':'Spiritually Curious','crisis':'Crisis-Shaken','change':'Change-Driven','void':'Void-Filler','wisdom':'Wisdom Seeker','burned-out':'Burned-Out','burnedout':'Burned-Out','numb':'Numb','experience':'Experience Seeker' };\n    const segTarget = segAliases[norm(qp.seg)];\n    const segFromQp = qp.seg ? this.segments.find(s => s.name === segTarget || norm(s.name) === norm(qp.seg)) : null;\n    const seg = segFromQp || this.segments.find(s => s.name === this.props.segment) || this.segments[0];\n\n    const accAliases = { 'auto':'Auto', 'warm':'Warm', 'calm':'Calm' };\n    const mode = accAliases[norm(qp.accent)] || accAliases[norm(qp.accentMode)] || this.props.accentMode || 'Auto';\n    let accent;\n    if (mode === 'Warm') accent = t.accentWarm;\n    else if (mode === 'Calm') accent = t.accentCalm;\n    else accent = seg.mood === 'tender' ? t.accentCalm : t.accentWarm;\n\n    const v = {\n      '--bg': t.bg, '--panel': t.panel, '--card': t.card, '--ink': t.ink,\n      '--muted': t.muted, '--faint': t.faint, '--line': t.line, '--rule-w': t.ruleW,\n      '--accent': accent, '--accent-ink': t.accentInk,\n      '--display-font': t.displayFont, '--display-weight': t.displayWeight,\n      '--emph-style': t.emphStyle, '--head-transform': t.headTransform, '--head-letter': t.headLetter,\n      '--radius': t.radius, '--card-border': t.cardBorder,\n      '--btn-bg': t.btnBg, '--btn-color': t.btnColor, '--btn-radius': t.btnRadius,\n      '--btn-font': t.btnFont, '--btn-weight': t.btnWeight, '--btn-transform': t.btnTransform, '--btn-letter': t.btnLetter,\n      '--hero-img-bg': t.heroImgBg, '--glow': t.glow,\n      '--pricing-bg': t.pricingBg, '--pricing-ink': t.pricingInk, '--pricing-faint': t.pricingFaint,\n      '--pricing-card-bg': t.pricingCardBg, '--pricing-card-ink': t.pricingCardInk\n    };\n    let rootStyle = Object.entries(v).map(([k, val]) => k + ':' + val).join(';');\n    rootStyle += ';background:' + t.bg + ';color:' + t.ink + \";font-family:'Hanken Grotesk',sans-serif\";\n\n    const sealImg = React.createElement('img', {\n      src: 'https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/14-day-new.webp', alt: '14-day money-back guarantee',\n      style: { width: '100%', height: 'auto', flexShrink: 0, display: 'block' }\n    });\n\n    const kabuLogo = React.createElement('img', {\n      src: 'https:\/\/kabuconnect.com\/app\/uploads\/2025\/09\/logo-final.png.webp', alt: 'KabU',\n      style: { height: '78px', width: 'auto', display: 'block' }\n    });\n\n    const stripSet = ['https:\/\/kabuconnect.com\/app\/uploads\/2024\/01\/forbes.svg','https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/Bloomberg_Television_logo.svg','https:\/\/kabuconnect.com\/app\/uploads\/2024\/01\/fox-news.svg','https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/The_Telegraph_logo.svg','https:\/\/kabuconnect.com\/app\/uploads\/2021\/09\/the-Jerusalem-Post-logo-1.svg','https:\/\/kabuconnect.com\/app\/uploads\/2025\/04\/The-miami-herald-logo-svg.svg'];\n    const logoStripEls = this.shared.press.filter(p => stripSet.includes(p.img)).map((p, idx) => React.createElement('div', {\n      key: idx,\n      style: { display: 'flex', alignItems: 'center', justifyContent: 'center', height: '30px' }\n    }, React.createElement('img', {\n      src: p.img, alt: p.text, title: p.text,\n      style: { height: (p.strip || 20) + 'px', width: 'auto', display: 'block', filter: t.logoFilter, opacity: 0.85 }\n    })));\n\n    const logoEls = this.shared.press.map((p, idx) => React.createElement('div', {\n      key: idx,\n      style: { display: 'flex', alignItems: 'center', justifyContent: 'center', height: '46px' }\n    }, React.createElement('img', {\n      src: p.img, alt: p.text, title: p.text,\n      style: { maxWidth: '100%', maxHeight: (p.cap || 30) + 'px', width: 'auto', height: 'auto', display: 'block', filter: t.logoFilter }\n    })));\n\n    const offerLayout = this.props.offerLayout ?? 'Value Stack';\n\n    return {\n      rootStyle,\n      sealImg, kabuLogo, logoEls, logoStripEls,\n      segName: seg.name,\n      heroPre: seg.heroPre, heroEmph: seg.heroEmph, heroPost: seg.heroPost,\n      heroSub: seg.heroSub, heroCta: seg.heroCta, heroImg: seg.heroImg,\n      heroBgStyle: seg.heroBg ? (\"background-image: url('\" + seg.heroBg + \"'); background-size: cover; background-position: center;\") : \"\",\n      heroImgEl: ({'Numb':'https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/numb-hero.webp','Burned-Out':'https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/burned-out-hero.webp'})[seg.name] ? React.createElement('img', { src: {'Numb':'https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/numb-hero.webp','Burned-Out':'https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/burned-out-hero.webp'}[seg.name], alt: seg.name + ' hero', style: { width:'100%', height:'100%', objectFit:'cover', objectPosition:'center', display:'block' } }) : (this.shared.videos && this.shared.videos[0]) ? (function(){\n        var fv = this.shared.videos[0];\n        return React.createElement('div', {\n          onClick: () => this.openVideo(fv.id), role:'button', 'aria-label':'Play video',\n          style:{ position:'relative', width:'100%', height:'100%', minHeight:'inherit', cursor:'pointer',\n            backgroundImage: fv.bg, backgroundSize:'cover', backgroundPosition:'center' }\n        },\n          React.createElement('div', { key:'g', style:{ position:'absolute', inset:0, background:'linear-gradient(180deg, rgba(0,0,0,0.04) 50%, rgba(0,0,0,0.34))' } }),\n          React.createElement('div', { key:'p', style:{ position:'absolute', top:'72%', left:'50%', transform:'translate(-50%,-50%)', width:'74px', height:'74px', borderRadius:'999px', background:'#fff', display:'flex', alignItems:'center', justifyContent:'center', boxShadow:'0 8px 30px rgba(0,0,0,0.4)' } },\n            React.createElement('span', { style:{ display:'block', width:0, height:0, borderStyle:'solid', borderWidth:'12px 0 12px 20px', borderColor:'transparent transparent transparent var(--accent,#A77A3D)', marginLeft:'5px' } })\n          )\n        );\n      }).call(this) : (seg.heroBg ? React.createElement('img', { src: seg.heroBg, alt: seg.name + ' hero', style: { width:'100%', height:'100%', objectFit:'cover', objectPosition: seg.objPos || 'center', display:'block' } }) : null),\n      empPre: seg.empPre, empEmph: seg.empEmph, empPost: seg.empPost,\n      empBody: seg.empBody || [],\n      questions: seg.questions,\n      closingHead: seg.closingHead, closingCta: seg.closingCta,\n      testimonials: seg.testimonials.map(t => ({ head: t.head || t.quote, body: t.body || '', who: t.who })),\n      videos: this.shared.videos.map(v => ({ ...v, onOpen: () => this.openVideo(v.id) })),\n      videoOpen: !!this.state.videoId,\n      videoSrc: this.state.videoId ? ('https:\/\/player.vimeo.com\/video\/' + this.state.videoId + '?autoplay=1&title=0&byline=0&portrait=0') : '',\n      closeVideo: () => this.closeVideo(),\n      stopProp: (e) => e.stopPropagation(),\n      bonuses: this.shared.bonuses,\n      founderFacts: this.founderFacts,\n      differences: this.differences,\n      showWhyDifferent: (qp.why !== undefined) ? (norm(qp.why)==='1' || norm(qp.why)==='true' || norm(qp.why)==='yes' || norm(qp.why)==='on') : (this.props.showWhyDifferent ?? false),\n      offerIsCard: offerLayout === 'Anchored Card',\n      offerIsStack: offerLayout === 'Value Stack',\n      offerIsTicket: offerLayout === 'Ticket',\n      curriculum: this.shared.curriculum,\n      included: this.shared.included,\n      logos: this.shared.logos\n    };\n  }\n}\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<style>\nh1{<br \/>\n    color: rgb(234, 230, 240) !important;<br \/>\n}<br \/>\na:hover {<br \/>\n    color: var(--paper);<br \/>\n}<br \/>\nh2 {<br \/>\n    color: var(--text);<br \/>\n}<br \/>\nh3{<br \/>\n    color: rgb(234, 230, 240) !important;<br \/>\n}<br \/>\nsection.s--ink h2 {<br \/>\n    color: var(--paper);<br \/>\n}<br \/>\nhtml{<br \/>\n    margin-top: 0 !important;<br \/>\n}<br \/>\na.grotesk-link{<br \/>\n    font-family: \"Hanken Grotesk\", sans-serif !important;<br \/>\n}<br \/>\nimg[title=\"Fox News\"]{<br \/>\n    filter:unset !important;<br \/>\n}<br \/>\nblockquote{<br \/>\n    color: rgb(234, 230, 240);<br \/>\n    padding: 0;<br \/>\n    border-left: none;<br \/>\n}<br \/>\n<\/style>\n<p>&nbsp;<\/p>\n","protected":false},"author":2070,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"inline_featured_image":false,"footnotes":""},"class_list":["post-504766","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Kabbalah Journey Course - KabU<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kabuconnect.com\/es\/kj\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Kabbalah Journey Course - KabU\" \/>\n<meta property=\"og:description\" content=\"&nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kabuconnect.com\/es\/kj\/\" \/>\n<meta property=\"og:site_name\" content=\"KabU\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-03T17:08:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/cafe-study.webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Kabbalah Journey Course - KabU","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kabuconnect.com\/es\/kj\/","og_locale":"es_ES","og_type":"article","og_title":"The Kabbalah Journey Course - KabU","og_description":"&nbsp;","og_url":"https:\/\/kabuconnect.com\/es\/kj\/","og_site_name":"KabU","article_modified_time":"2026-09-03T17:08:16+00:00","og_image":[{"url":"https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/cafe-study.webp","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/kabuconnect.com\/es\/kj\/","url":"https:\/\/kabuconnect.com\/es\/kj\/","name":"The Kabbalah Journey Course - KabU","isPartOf":{"@id":"https:\/\/kabuconnect.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kabuconnect.com\/es\/kj\/#primaryimage"},"image":{"@id":"https:\/\/kabuconnect.com\/es\/kj\/#primaryimage"},"thumbnailUrl":"https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/cafe-study.webp","datePublished":"2026-07-06T11:05:30+00:00","dateModified":"2026-09-03T17:08:16+00:00","breadcrumb":{"@id":"https:\/\/kabuconnect.com\/es\/kj\/#breadcrumb"},"inLanguage":"es-ES","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kabuconnect.com\/es\/kj\/"]}]},{"@type":"ImageObject","inLanguage":"es-ES","@id":"https:\/\/kabuconnect.com\/es\/kj\/#primaryimage","url":"https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/cafe-study.webp","contentUrl":"https:\/\/kabuconnect.com\/app\/uploads\/2026\/07\/cafe-study.webp"},{"@type":"BreadcrumbList","@id":"https:\/\/kabuconnect.com\/es\/kj\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kabuconnect.com\/es\/"},{"@type":"ListItem","position":2,"name":"The Kabbalah Journey Course"}]},{"@type":"WebSite","@id":"https:\/\/kabuconnect.com\/#website","url":"https:\/\/kabuconnect.com\/","name":"KabU","description":"The Science of Everything","publisher":{"@id":"https:\/\/kabuconnect.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kabuconnect.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-ES"},{"@type":"Organization","@id":"https:\/\/kabuconnect.com\/#organization","name":"KabU","url":"https:\/\/kabuconnect.com\/","logo":{"@type":"ImageObject","inLanguage":"es-ES","@id":"https:\/\/kabuconnect.com\/#\/schema\/logo\/image\/","url":"https:\/\/kabuconnect.com\/app\/uploads\/2021\/08\/kabu_logo_dt_01.png","contentUrl":"https:\/\/kabuconnect.com\/app\/uploads\/2021\/08\/kabu_logo_dt_01.png","width":489,"height":192,"caption":"KabU"},"image":{"@id":"https:\/\/kabuconnect.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/pages\/504766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/users\/2070"}],"replies":[{"embeddable":true,"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/comments?post=504766"}],"version-history":[{"count":30,"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/pages\/504766\/revisions"}],"predecessor-version":[{"id":516601,"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/pages\/504766\/revisions\/516601"}],"wp:attachment":[{"href":"https:\/\/kabuconnect.com\/es\/wp-json\/wp\/v2\/media?parent=504766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}