{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\directive.js","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\directive.js","mtime":1667545182223},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\babel.config.js","mtime":1725536844935},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9ienpnai1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3Iuc29tZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudGVzdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiOwppbXBvcnQgVnVlIGZyb20gInZ1ZSI7CmltcG9ydCB1dGlscyBmcm9tICJAL2hvdGVudC11aS11dGlsLmpzIjsKaW1wb3J0IEZvcm1NYXRoIGZyb20gIkAvbWF0aC5qcyI7CmltcG9ydCBkaWFsb2cgZnJvbSAiQC9hcGkvZGlhbG9nQXBpLmpzIjsKaW1wb3J0IEN1c3RvbVF1ZXJ5IGZyb20gIkAvY29tcG9uZW50cy9laXBDb250cm9sL2J1cy9DdXN0b21RdWVyeS5qcyI7CmltcG9ydCBfIGZyb20gImxvZGFzaCI7CmltcG9ydCByZXEgZnJvbSAiQC9yZXF1ZXN0LmpzIjsKaW1wb3J0IGFwcCBmcm9tICJAL21haW4uanMiOwoKLy8g6KGo5Y2VdHLkuK3moLnmja7pmpDol4/lrZfmrrXliqjmgIHlkIjlubbljZXlhYPmoLznmoTmjIfku6QKVnVlLmRpcmVjdGl2ZSgncGlueWluJywgewogIC8vIOaMh+S7pOeahOWumuS5iQogIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7CiAgICAvLyDpmLLmipYKICAgIHZhciBkZWJvdW5jZUdldFBpbnlpbiA9IF8uZGVib3VuY2UoZnVuY3Rpb24gKG5ld1ZhbCkgewogICAgICAvLyBkaXNhYmxlZCDmiJbogIUgcmVhZG9ubHkg5pe2IOS4jemcgOimgeivt+axggogICAgICBpZiAoZWwuX192dWVfXy5kaXNhYmxlZCB8fCBlbC5fX3Z1ZV9fLnJlYWRvbmx5KSByZXR1cm47CiAgICAgIHJlcS5yZXF1ZXN0KHsKICAgICAgICB1cmw6ICIiLmNvbmNhdCh3aW5kb3cuY29udGV4dC51YywgIi9iYXNlL3Rvb2xzL3YxL2dldFBpbnlpbiIpLAogICAgICAgIG1ldGhvZDogIkdFVCIsCiAgICAgICAgcGFyYW1zOiB7CiAgICAgICAgICBjaGluZXNlOiBuZXdWYWwsCiAgICAgICAgICB0eXBlOiAiIi5jb25jYXQoYmluZGluZy5tb2RpZmllcnMuZnVsbCA/IDEgOiAwKQogICAgICAgIH0KICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXRlKSB7CiAgICAgICAgICB2YXIgbW9kZWxFeHAgPSB2bm9kZS5kYXRhLm1vZGVsLmV4cHJlc3Npb24ucmVwbGFjZSgvXFtcdysuP1wkXHcrXF0vZywgIlsiICsgYmluZGluZy5hcmcgKyAiXSIpOwogICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgoY29udGV4dCwgbW9kZWxFeHAsIHJlcy5kYXRhLnZhbHVlKTsKICAgICAgICAgIGFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICBhcHAuJHZhbGlkYXRvci52YWxpZGF0ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHt9KTsKICAgIH0sIDMwMCk7CiAgICBpZiAoYmluZGluZy52YWx1ZSAmJiBiaW5kaW5nLnZhbHVlICE9IGJpbmRpbmcub2xkVmFsdWUpIHsKICAgICAgZGVib3VuY2VHZXRQaW55aW4oYmluZGluZy52YWx1ZSk7CiAgICB9CgogICAgLy8gY29udGV4dC4kd2F0Y2god2F0Y2hFeHAoKSwgZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsKSB7CiAgICAvLyAJaWYgKG5ld1ZhbCAmJiBuZXdWYWwgIT0gb2xkVmFsKSB7CiAgICAvLyAJCWRlYm91bmNlR2V0UGlueWluKG5ld1ZhbCk7CiAgICAvLyAJfQogICAgLy8gfSwgewogICAgLy8gCWRlZXA6IHRydWUsCiAgICAvLyAJaW1tZWRpYXRlOiBmYWxzZQogICAgLy8gfSk7CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgncGVybWl0JywgewogIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcpIHsKICAgIGlmIChlbC50YWdOYW1lICE9PSAiVFIiKSB7CiAgICAgIHRocm93ICJ2LXBlcm1pdOaMh+S7pOWPquiDveeUqOWcqHRy5YWD57Sg5LiKLiI7CiAgICB9CiAgICBpZiAoIWJpbmRpbmcudmFsdWUgfHwgYmluZGluZy52YWx1ZS5jb25zdHJ1Y3RvciAhPT0gTnVtYmVyKSB7CiAgICAgIHRocm93ICJ2LXBlcm1pdOaMh+S7pOeahOWAvOWPquiDveaYr+Wkp+S6jjDnmoTmlbDlrZcuIjsKICAgIH0KICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIik7CgogICAgLy8gdHLkuK3msqHmnInlrZDlhYPntKDml7bvvIzliKDpmaR0cuiHqui6qwogICAgaWYgKGVsLmNlbGxzLmxlbmd0aCA9PSAwKSB7CiAgICAgIGVsLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwgImhpZGRlbiIpOwogICAgfSBlbHNlIGlmIChlbC5jZWxscy5sZW5ndGggPCBiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBjb2xzcGFuID0gYmluZGluZy52YWx1ZSAtIGVsLmNlbGxzLmxlbmd0aCArIDE7CiAgICAgIC8vIOiuvue9rmNvbHNwYW7lrp7njrDljZXlhYPmoLzlkIjlubYKICAgICAgZWwuY2VsbHNbZWwuY2VsbHMubGVuZ3RoIC0gMV0uc2V0QXR0cmlidXRlKCJjb2xzcGFuIiwgY29sc3Bhbik7CiAgICB9IGVsc2UgaWYgKGVsLmNlbGxzLmxlbmd0aCA9PT0gYmluZGluZy52YWx1ZSkgewogICAgICBmb3IgKHZhciBpID0gMCwgYzsgYyA9IGVsLmNlbGxzW2krK107KSB7CiAgICAgICAgYy5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKTsKICAgICAgfQogICAgfQogIH0KfSk7CgovLyDooajljZXmjIfku6TvvIzkvJrlnKjooajljZXnmoR2dWXlrp7kvovkuIrmt7vliqDkuIDkuKptYXDvvIznlKjku6XlrZjmlL7mlbDlrabov5DnrpfnmoTooajovr7lvI8KVnVlLmRpcmVjdGl2ZSgnZm9ybScsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgaWYgKGluc3QgJiYgIWluc3QuaGFzT3duUHJvcGVydHkoIndhdGNoTWFwIikpIHsKICAgICAgaW5zdFsid2F0Y2hNYXAiXSA9IG5ldyBNYXAoKTsKICAgIH0KICB9Cn0pOwoKLy8g5Yik5pat6L6T5YWl5qGG5piv5ZCm5L2c5Li66K6h566X5a2X5q6177yM5piv5YiZ5re75Yqg55uR5ZCsClZ1ZS5kaXJlY3RpdmUoJ2V4cHJlc3MnLCB7CiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgIGlmICghaW5zdC4kdm5vZGUuZGF0YS5tb2RlbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgZWxBdHRyID0gaW5zdC4kdm5vZGUuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGEubW9kZWxFeHByZXNzaW9uOwogICAgaWYgKGVsQXR0ciAmJiAhaW5zdC5fZXhwcmVzc0luaXQpIHsKICAgICAgaW5zdC5fZXhwcmVzc0luaXQgPSB0cnVlOwogICAgICAvLyDlrZDooajmr4/kuIDooYzmlbDmja7kvZznlKjln5/miYDlnKjnmoRkb23lhYPntKAKICAgICAgdmFyIF91dGlscyRnZXRTdWJTY29wZUVsQSA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCksCiAgICAgICAgc3ViU2NvcGVFbCA9IF91dGlscyRnZXRTdWJTY29wZUVsQS5zdWJTY29wZUVsOwogICAgICB2YXIgc3VibmFtZSA9IG51bGw7CiAgICAgIHZhciBhbGlhc0VsQXR0ciA9IG51bGw7CiAgICAgIC8vIOWtkOihqOaVsOaNru+8jOmcgOimgeaJvuWIsOmFjee9ruS6hmRhdGEtc3VibmFtZeeahOWFg+e0oAogICAgICBpZiAoc3ViU2NvcGVFbCkgewogICAgICAgIHN1Ym5hbWUgPSBzdWJTY29wZUVsLmRhdGFzZXRbInN1Ym5hbWUiXTsKICAgICAgICBpZiAoIXN1Ym5hbWUpIHsKICAgICAgICAgIHRocm93ICLml6Dms5Xojrflj5bliLDlvZPliY3lrZDooajliY3nvIAiOwogICAgICAgIH0KICAgICAgICB2YXIgZWxBdHRyQXJ5ID0gZWxBdHRyLnNwbGl0KCIuIiksCiAgICAgICAgICBlbEF0dHJBcnlTaXplID0gZWxBdHRyQXJ5Lmxlbmd0aDsKICAgICAgICBpZiAoZWxBdHRyQXJ5U2l6ZSA8IDEpIHsKICAgICAgICAgIHRocm93ICJcdTVCNTBcdTg4NjhcdTRFMkRcdTc2ODRcdTY1NzBcdTYzNkVcdTdFRDFcdTVCOUFcdTg4NjhcdThGQkVcdTVGMEYiLmNvbmNhdChlbEF0dHIsICJcdTk1MTlcdThCRUYiKTsKICAgICAgICB9CiAgICAgICAgYWxpYXNFbEF0dHIgPSAiIi5jb25jYXQoc3VibmFtZSwgIi4iKS5jb25jYXQoZWxBdHRyQXJ5W2VsQXR0ckFyeVNpemUgLSAxXSk7CiAgICAgIH0KICAgICAgdmFyIHAgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoaW5zdCk7CiAgICAgIGlmIChwLndhdGNoTWFwICYmIChwLndhdGNoTWFwLmhhcyhlbEF0dHIpIHx8IHAud2F0Y2hNYXAuaGFzKGFsaWFzRWxBdHRyKSkpIHsKICAgICAgICBpZiAoIWluc3QuX3dhdGNoZXJzLnNvbWUoZnVuY3Rpb24gKG0pIHsKICAgICAgICAgIHJldHVybiBtLmV4cHJlc3Npb24gPT09ICdpbnB1dFZhbCc7CiAgICAgICAgfSkpIHsKICAgICAgICAgIGluc3QuJHdhdGNoKCJpbnB1dFZhbCIsIGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbCwgZmFyZXdlbGwpIHsKICAgICAgICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7CiAgICAgICAgICAgICAgdmFyIGV4cExpc3QgPSBwLndhdGNoTWFwLmdldChlbEF0dHIpIHx8IHAud2F0Y2hNYXAuZ2V0KGFsaWFzRWxBdHRyKTsKICAgICAgICAgICAgICBleHBMaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwOwogICAgICAgICAgICAgICAgdmFyIHQgPSBpdGVtLnRhcmdldDsKICAgICAgICAgICAgICAgIC8vIOW9k+WcqOWtkOihqOWNleihjOS4reaXtu+8jOiAjOS4lOS4jeaYr+WvueWtkOihqOi/m+ihjOWIl+i/kOeul+aXtu+8jOWIpOWumuS4uuWtkOihqOW9k+WJjeihjOWGhei/kOeulwogICAgICAgICAgICAgICAgaWYgKHN1YlNjb3BlRWwgJiYgIS8uKj9cW1x7Lio/XH1cXS4qPy8udGVzdChpdGVtLmV4cCkpIHsKICAgICAgICAgICAgICAgICAgLy8g57uE5Lu26ZSA5q+B5pe277yM5LiN5YaN6K6h566X5a2Q6KGo5Y2V6KGM55qE5YWs5byPCiAgICAgICAgICAgICAgICAgIGlmIChmYXJld2VsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzdWJTY29wZUVsLmRhdGFzZXRbImluZGV4Il07CiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgIuiOt+WPluS4jeWIsOW9k+WJjeWtkOihqOihjOeahOe0ouW8le+8jOaXoOazleWujOaIkOiuoeeuly4iOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZvcm1NYXRoLmNhbGNTdWJFeHBWYWx1ZShpdGVtLmV4cCwgcCwgc3VibmFtZSwgaW5kZXgpOwogICAgICAgICAgICAgICAgICBwLiRlbWl0KHQsIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICByZXN1bHQgPSBGb3JtTWF0aC5jYWxjRXhwVmFsdWUoaXRlbS5leHAsIHApOwogICAgICAgICAgICAgICAgICBwLiRlbWl0KHQsIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgewogICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfSk7CgovLyDoh6rlrprkuYnlr7nor53moYYgdi1hdXRoLXNldC1ldmVudApWdWUuZGlyZWN0aXZlKCdhdXRoLXNldC1ldmVudCcsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5ncywgdm5vZGUpIHsKICAgIHZhciBodEF1dGhTZXRFdmVudCA9IGVsLmdldEF0dHJpYnV0ZSgiYXR0ciIpOwogICAgaWYgKCFodEF1dGhTZXRFdmVudCkgcmV0dXJuOwogICAgdmFyIGRlZmF1bHRQZXJtaXNzaW9uTGlzdCA9IFtdOwogICAgZGlhbG9nLmdldFBlcm1pc3Npb25MaXN0KGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgZGVmYXVsdFBlcm1pc3Npb25MaXN0ID0gcmVzdWx0OwogICAgfSk7CiAgICAvKioNCiAgICAgKiDorr7nva7orr7nva7mnYPpmZDjgIINCiAgICAgKiBvd25lck5hbWVKc29uIOagvOW8j+OAgg0KICAgICAqIFt7dHlwZToiZXZlcnlvbmUiLHRpdGxlOiLmiYDmnInkuroifSx7dHlwZToidXNlciIsdGl0bGU6IueUqOaItyIsaWQ6IjEsMiIsbmFtZToicmF5LHRvbSJ9XQ0KICAgICAqLwogICAgdmFyIHNldEF1dGggPSBmdW5jdGlvbiBzZXRBdXRoKCkgewogICAgICB2YXIgY29uZiA9IHsKICAgICAgICByaWdodDogb3duZXJOYW1lSnNvbiwKICAgICAgICBwZXJtaXNzaW9uTGlzdDogZGVmYXVsdFBlcm1pc3Npb25MaXN0CiAgICAgIH07CiAgICAgIC8v5o6I5p2D6YCJ5oup5ZmoCiAgICAgIHZub2RlLmNoaWxkLkF1dGhTZXR0aW5nU2hvdyhjb25mKTsKICAgIH07CiAgICB2YXIgb3duZXJOYW1lSnNvbiA9IFtdOwogICAgdmFyIGluaXREYXRhID0gYmluZGluZ3MudmFsdWU7CiAgICBpZiAoaW5pdERhdGEpIHsKICAgICAgb3duZXJOYW1lSnNvbiA9IEpTT04ucGFyc2UoaW5pdERhdGEpOwogICAgICA7CiAgICAgIC8vIHNob3dMYWJsZShvd25lck5hbWVKc29uKTsKICAgIH0KICAgIC8v5a+56K+d5qGG5Yid5aeL5YyW55uR5ZCsCiAgICBlbC5jaGlsZE5vZGVzWzJdLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHNldEF1dGgoKTsKICAgIH07CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgncGFyc2VUZW1wbGV0ZScsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeTsKICAgIGVsLmlubmVySFRNTCA9ICduYW1lOiAnICsgcyhiaW5kaW5nLm5hbWUpICsgJzxicj4nICsgJ3ZhbHVlOiAnICsgcyhiaW5kaW5nLnZhbHVlKSArICc8YnI+JyArICdleHByZXNzaW9uOiAnICsgcyhiaW5kaW5nLmV4cHJlc3Npb24pICsgJzxicj4nICsgJ2FyZ3VtZW50OiAnICsgcyhiaW5kaW5nLmFyZykgKyAnPGJyPicgKyAnbW9kaWZpZXJzOiAnICsgcyhiaW5kaW5nLm1vZGlmaWVycykgKyAnPGJyPicgKyAndm5vZGUga2V5czogJyArIE9iamVjdC5rZXlzKHZub2RlKS5qb2luKCcsICcpOwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ2Fsc0NoYXJ0cycsIHsKICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgaW5zdCA9IGJpbmRpbmcuY29udGV4dDsKICAgIGZ1bmN0aW9uIGluaXQoZGF0YSkgewogICAgICBpZiAoIShkYXRhLnZhbHVlICYmIGRhdGEudmFsdWUgIT09IHRydWUgJiYgZGF0YS52YWx1ZS5jb25zdHJ1Y3RvciA9PSBBcnJheSAmJiBkYXRhLnZhbHVlWzBdLmxlZ2VuZCkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIG9wdGlvbnMgPSBkYXRhLnZhbHVlWzBdOwogICAgICB2YXIgaGVpZ2h0ID0gZ2V0RGl2SGVpZ2h0KGVsKSAtIDM1OwogICAgICB2YXIgd3JhcCA9ICQoJzxkaXY+PC9kaXY+JykuY3NzKHsKICAgICAgICB3aWR0aDogJzEwMCUnLAogICAgICAgIGhlaWdodDogaGVpZ2h0CiAgICAgIH0pOwogICAgICAkKGVsKS5jc3MoewogICAgICAgIGRpc3BsYXk6ICdibG9jaycsCiAgICAgICAgd2lkdGg6ICcxMDAlJywKICAgICAgICBoZWlnaHQ6IGhlaWdodAogICAgICB9KTsKICAgICAgLy8gY29uc3QgZWNoYXJ0cyA9IHJlcXVpcmUoJ2VjaGFydHMnKTsKICAgICAgLy8gdmFyIG15Q2hhcnQgPSBlY2hhcnRzLmluaXQoZWwpOwogICAgICAvLyBpbnN0LiRyb290LiRvbigicmVzaXplIiwgKCkgPT4gewogICAgICAvLyAgICAgbXlDaGFydC5yZXNpemUoKTsvL+ebkea1i+WbvuihqOiHqumAguW6lAogICAgICAvLyB9KTsKICAgICAgdmFyIG9wdGlvbiA9IF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoewogICAgICAgIHRpdGxlOiB7CiAgICAgICAgICB0ZXh0OiBvcHRpb25zLm5hbWUsCiAgICAgICAgICBzdWJ0ZXh0OiBvcHRpb25zLnN1YnRleHQsCiAgICAgICAgICB0b3A6IDEyCiAgICAgICAgfSwKICAgICAgICB0b29sdGlwOiB7CiAgICAgICAgICB0cmlnZ2VyOiAnYXhpcycsCiAgICAgICAgICBheGlzUG9pbnRlcjogewogICAgICAgICAgICB0eXBlOiAnc2hhZG93JwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FsY3VsYWJsZTogdHJ1ZSwKICAgICAgICBsZWdlbmQ6IHsKICAgICAgICAgIHg6ICdyaWdodCcsCiAgICAgICAgICBkYXRhOiBvcHRpb25zLmxlZ2VuZAogICAgICAgIH0sCiAgICAgICAgdG9vbGJveDogewogICAgICAgICAgc2hvdzogdHJ1ZSwKICAgICAgICAgIG9yaWVudDogJ3ZlcnRpY2FsJywKICAgICAgICAgIHk6ICdjZW50ZXInLAogICAgICAgICAgcmlnaHQ6IDIwLAogICAgICAgICAgaXRlbUdhcDogMTMsCiAgICAgICAgICBmZWF0dXJlOiBfZGVmaW5lUHJvcGVydHkoewogICAgICAgICAgICBtYXJrOiB7CiAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBkYXRhVmlldzogewogICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgICAgcmVhZE9ubHk6IGZhbHNlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hZ2ljVHlwZTogewogICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgICAgdHlwZTogWydsaW5lJywgJ2JhcicsICdzdGFjaycsICd0aWxlZCddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlc3RvcmU6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNhdmVBc0ltYWdlOiB7CiAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBkYXRhWm9vbTogewogICAgICAgICAgICAgIHlBeGlzSW5kZXg6ICdub25lJwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAiZGF0YVZpZXciLCB7CiAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLAogICAgICAgICAgICBvcHRpb25Ub0NvbnRlbnQ6IGZ1bmN0aW9uIG9wdGlvblRvQ29udGVudChvcHQpIHsKICAgICAgICAgICAgICAvL2NvbnNvbGUuaW5mbyhvcHQpOwogICAgICAgICAgICAgIHZhciBheGlzRGF0YSA9IG9wdC54QXhpc1swXS5kYXRhOwogICAgICAgICAgICAgIHZhciBzZXJpZXMgPSBvcHQuc2VyaWVzOwogICAgICAgICAgICAgIHZhciB0ZEhlYWRlcnMgPSAnPHRoPjwvdGg+JzsgLy/ooajlpLQKICAgICAgICAgICAgICBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgdGRIZWFkZXJzICs9ICc8dGggc3R5bGU9InBhZGRpbmc6IDhweCAxMHB4O2JhY2tncm91bmQtY29sb3I6I0Y1RjVGNTsiPicgKyBpdGVtLm5hbWUgKyAnPC90aD4nOyAvL+e7hOijheihqOWktAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHZhciB0YWJsZSA9ICc8ZGl2Pjx0YWJsZSBjZWxsc3BhY2luZz0iMjAiIGNlbGxzcGFjaW5nPSIwIiAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgYmxhY2s7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyIgcnVsZXM9ImFsbCI+PHRib2R5Pjx0cj4nICsgdGRIZWFkZXJzICsgJzwvdHI+JzsKICAgICAgICAgICAgICB2YXIgdGRCb2R5cyA9ICcnOyAvL+aVsOaNrgogICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbJyNGRkZGRkYnLCAnI0Y1RjVGNSddOwogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXhpc0RhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlcmllcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICB0ZEJvZHlzICs9ICc8dGQ+JyArIHNlcmllc1tqXS5kYXRhW2ldICsgJzwvdGQ+JzsgLy/nu4Too4XooajmlbDmja4KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBjdXJDb2xvciA9IGNvbG9yc1tpICUgMl07CiAgICAgICAgICAgICAgICB0YWJsZSArPSAnPHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOicgKyBjdXJDb2xvciArICciPjx0ZCBzdHlsZT0icGFkZGluZzogOHB4IDEwcHg7Ij4nICsgYXhpc0RhdGFbaV0gKyAnPC90ZD4nICsgdGRCb2R5cyArICc8L3RyPic7CiAgICAgICAgICAgICAgICB0ZEJvZHlzID0gJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRhYmxlICs9ICc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKICAgICAgICAgICAgICByZXR1cm4gdGFibGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgfQogICAgICB9LCAiY2FsY3VsYWJsZSIsIHRydWUpLCAiZ3JpZCIsIHsKICAgICAgICB5OiA4MCwKICAgICAgICB5MjogNDAsCiAgICAgICAgeDI6IDQwCiAgICAgIH0pLCAieEF4aXMiLCBbewogICAgICAgIHR5cGU6ICdjYXRlZ29yeScsCiAgICAgICAgZGF0YTogb3B0aW9ucy54QXhpcwogICAgICB9XSksICJ5QXhpcyIsIFt7CiAgICAgICAgdHlwZTogJ3ZhbHVlJwogICAgICB9XSksICJzZXJpZXMiLCBvcHRpb25zLnNlcmllcyk7CiAgICAgIC8vIG15Q2hhcnQuc2V0T3B0aW9uKG9wdGlvbiwgdHJ1ZSk7CiAgICB9CgogICAgLy/ojrflj5blvZPliY3moI/nm67nmoTpq5jluqYKICAgIGZ1bmN0aW9uIGdldERpdkhlaWdodChlbCkgewogICAgICBpZiAoZWwpIHsKICAgICAgICB2YXIgcEhlaWdodCA9ICQoZWwpLnBhcmVudCgpLmhlaWdodCgpOwogICAgICAgIGlmIChwSGVpZ2h0IDwgMSkgewogICAgICAgICAgcmV0dXJuIGdldERpdkhlaWdodCgkKGVsKS5wYXJlbnQoKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAzNDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHBIZWlnaHQ7CiAgICB9CiAgICBpbml0KGJpbmRpbmcpOwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ29waW5pb24nLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHdoaWxlIChiaW5kaW5nLnZhbHVlLmluZGV4T2YoIlxuIikgIT0gLTEpIHsKICAgICAgICBiaW5kaW5nLnZhbHVlID0gYmluZGluZy52YWx1ZS5yZXBsYWNlKCJcbiIsICI8YnI+Iik7CiAgICAgIH0KICAgICAgZWwuaW5uZXJIVE1MID0gYmluZGluZy52YWx1ZTsKICAgIH0KICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdpZnJhbWV0cmlnZ2VyJywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBlbC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICQoImJvZHkiKS50cmlnZ2VyKCJmb3JtTG9hZGVkIik7CiAgICB9OwogICAgJCgiYm9keSIpLmJpbmQoImZvcm1Mb2FkZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZnJtID0gJCgiI2ZybUZyYW1lIilbMF07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICBpZiAoZS5kYXRhICYmIGUuZGF0YS5jb25zdHJ1Y3RvciA9PSBPYmplY3QgJiYgZS5kYXRhLnR5cGUgPT0gJ2hlaWdodCcpIHsKICAgICAgICAgIGZybS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CiAgICAgICAgICAvLyDmj5DliY3ov5jljp/pq5jluqYKICAgICAgICAgIGZybS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICdhdXRvJyk7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZnJtLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgZS5kYXRhLmhlaWdodCk7CiAgICAgICAgICAgIGZybS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwogICAgICAgICAgICAkKGZybSkudHJpZ2dlcigibW91c2VvdmVyIik7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgnbWV0aG9kYXV0aCcsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGFsbE1ldGhvZCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5hbGxNZXRob2Q7CiAgICB2YXIgbWV0aG9kQXV0aCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5tZXRob2RBdXRoOwogICAgdmFyIGVsQXV0aCA9IGJpbmRpbmcuZXhwcmVzc2lvbjsKICAgIHZhciBhbGxNZXRob2RBcnJheSA9IGFsbE1ldGhvZC5zcGxpdCgnLCcpOwogICAgdmFyIG1ldGhvZEF1dGhBcnJheSA9IG1ldGhvZEF1dGguc3BsaXQoJywnKTsKICAgIC8vIOaXoOadg+mZkOWImemakOiXj+aMiemSrgogICAgaWYgKCQuaW5BcnJheShlbEF1dGgsIG1ldGhvZEF1dGhBcnJheSkgPT0gLTEgJiYgJC5pbkFycmF5KGVsQXV0aCwgYWxsTWV0aG9kQXJyYXkpKSB7CiAgICAgICQoZWwpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICB9CiAgfQp9KTsKCi8vIOazqOWGjOWFqOWxgOWFrOW8j+iuoeeul+e7hOS7tgpWdWUuZGlyZWN0aXZlKCJmb3JtdWxhIiwgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgcHJvcHNEYXRhID0gdm5vZGUuY29udGV4dC4kb3B0aW9ucy5wcm9wc0RhdGE7CiAgICAvL+WIneWni+WMlueahOaXtuWAme+8jOWmguaenOayoeacieWAvO+8jOWImeeUqOWFrOW8j+eahOiuoeeul+e7k+aenOadpei1i+WAvOe7meW9k+WJjeWtl+autQogICAgdmFyIG9sZFZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKHByb3BzRGF0YSwgYmluZGluZy52YWx1ZS5iaW5kUGF0aCk7CiAgICBpZiAocHJvcHNEYXRhICYmICFvbGRWYWwpIHsKICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocHJvcHNEYXRhLCBiaW5kaW5nLnZhbHVlLmJpbmRQYXRoLCBiaW5kaW5nLnZhbHVlLnZhbHVlKTsKICAgICAgdm5vZGUuY29udGV4dC4kZm9yY2VVcGRhdGUoKTsKICAgIH0KICB9LAogIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgewogICAgICBpZiAoYmluZGluZy5vbGRWYWx1ZS52YWx1ZS5nZXRUaW1lKCkgIT09IGJpbmRpbmcudmFsdWUudmFsdWUuZ2V0VGltZSgpKSB7CiAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgodm5vZGUuY29udGV4dC4kb3B0aW9ucy5wcm9wc0RhdGEsIGJpbmRpbmcudmFsdWUuYmluZFBhdGgsIGJpbmRpbmcudmFsdWUudmFsdWUpOwogICAgICAgIHZub2RlLmNvbnRleHQuJGZvcmNlVXBkYXRlKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlLnZhbHVlICE9IGJpbmRpbmcudmFsdWUudmFsdWUpIHsKICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aCh2bm9kZS5jb250ZXh0LiRvcHRpb25zLnByb3BzRGF0YSwgYmluZGluZy52YWx1ZS5iaW5kUGF0aCwgYmluZGluZy52YWx1ZS52YWx1ZSk7CiAgICAgICAgdm5vZGUuY29udGV4dC4kZm9yY2VVcGRhdGUoKTsKICAgICAgfQogICAgfQogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoIm1hcHBpbmciLCB7CiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkgewogICAgaWYgKGJpbmRpbmcub2xkVmFsdWUgIT09IGJpbmRpbmcudmFsdWUpIHsKICAgICAgVnVlLnNldChlbC5fX3Z1ZV9fLCAiaW5wdXRWYWwiLCBiaW5kaW5nLnZhbHVlKTsKICAgIH0KICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCJkeW5hbWljLW9wdGlvbnMiLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBleHAgPSBudWxsOwogICAgaWYgKGJpbmRpbmcuZXhwcmVzc2lvbikgewogICAgICBleHAgPSB1dGlscy5wYXJzZVRvSnNvbihiaW5kaW5nLmV4cHJlc3Npb24pOwogICAgfQogICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgaWYgKGluc3QpIHsKICAgICAgLy8g5LiK5LiA5qyh5Yqo5oCB6YCJ6aG55p+l6K+i5p2h5Lu2CiAgICAgIGluc3QucHJlRHluYW1pY0xvYWRQYXJhbXMgPSBudWxsOwogICAgICBpbnN0LiRvbigiZHluYW1pYy1vcHRpb25zOmxvYWQiLCBmdW5jdGlvbiAoYWxpYXMsIHBhcmFtcykgewogICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTsKICAgICAgICAvLyDmmK/lkKbmiafooYzmn6Xor6IKICAgICAgICB2YXIgZG9Mb2FkID0gdHJ1ZTsKICAgICAgICBpZiAoZXhwICYmIGV4cC5jYWNoZSkgewogICAgICAgICAgLy8g55u45q+U5LiK5LiA5qyh77yM5p+l6K+i5Y+C5pWw5piv5ZCm5pyJ5Y+Y5YyWCiAgICAgICAgICB2YXIgY2hhbmdlZCA9ICF1dGlscy5vYmplY3RFcXVhbHMoaW5zdC5wcmVEeW5hbWljTG9hZFBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgICAgIGRvTG9hZCA9IHRydWU7CiAgICAgICAgICAgIGluc3QucHJlRHluYW1pY0xvYWRQYXJhbXMgPSBwYXJhbXM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb0xvYWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZG9Mb2FkICYmIEN1c3RvbVF1ZXJ5LmxvYWQoYWxpYXMsIHBhcmFtcykudGhlbihmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgaW5zdC4kZW1pdCgiZHluYW1pYy1vcHRpb25zOnVwZGF0ZSIsIGFsaWFzLCBkYXRhKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfQp9KTsKLy/nlKjkuo7kuIrnuqflgLzlj5jljJblkI7vvIzkuIvnuqflhoXlrrnpnIDopoHmuIXnqboKVnVlLmRpcmVjdGl2ZSgid2F0Y2gtcGFyZW50IiwgewogIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgaWYgKGJpbmRpbmcudmFsdWUgJiYgYmluZGluZy52YWx1ZS5waWQpIHsKICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7CiAgICAgICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgICAgIHZhciBpbnN0UGFyZW50ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKGluc3QpOwogICAgICAgIGluc3RQYXJlbnQuJHdhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB1dGlscy5nZXRWYWx1ZUJ5UGF0aChpbnN0UGFyZW50LCBiaW5kaW5nLnZhbHVlLnBpZFtrZXldLCBiaW5kaW5nLnZhbHVlLmluZGV4KTsKICAgICAgICB9LCBmdW5jdGlvbiAobmV3VmFsLCBvbGRWYWwsIGZhcmV3ZWxsKSB7CiAgICAgICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHsKICAgICAgICAgICAgaW5zdC5pbnB1dFZhbCA9ICIiOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBmb3IgKHZhciBrZXkgaW4gYmluZGluZy52YWx1ZS5waWQpIHsKICAgICAgICBfbG9vcCgpOwogICAgICB9CiAgICB9CiAgfQp9KTsKVnVlLmRpcmVjdGl2ZSgicmVsYXRlZC1xdWVyeSIsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgdmFyIGV4cCA9IG51bGw7CiAgICBpZiAoYmluZGluZy5leHByZXNzaW9uKSB7CiAgICAgIGV4cCA9IHV0aWxzLnBhcnNlVG9Kc29uKGJpbmRpbmcuZXhwcmVzc2lvbik7CiAgICB9CiAgICBpZiAoaW5zdCkgewogICAgICAvLyDkuIrkuIDmrKHlhbPogZTmn6Xor6LmnaHku7bvvIjkuIDkuKrnu4Tku7blj6/ku6Xnu5HlrprlpJrkuKrlhbPogZTmn6Xor6LvvIzvvIkKICAgICAgaW5zdC5wcmVSZWxhdGVkUXVlcnlQYXJhbXMgPSB7fTsKICAgICAgaW5zdC4kb24oInJlbGF0ZWQtcXVlcnk6bG9hZCIsIGZ1bmN0aW9uIChhbGlhcywgcGFyYW1zLCByZXN1bHRCaW5kKSB7CiAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9OwogICAgICAgIC8vIOaYr+WQpuaJp+ihjOafpeivogogICAgICAgIHZhciBkb0xvYWQgPSB0cnVlOwogICAgICAgIGlmIChleHAgJiYgZXhwLmNhY2hlKSB7CiAgICAgICAgICAvLyDnm7jmr5TkuIrkuIDmrKHvvIzmn6Xor6Llj4LmlbDmmK/lkKbmnInlj5jljJYKICAgICAgICAgIHZhciBjaGFuZ2VkID0gIXV0aWxzLm9iamVjdEVxdWFscyhpbnN0LnByZVJlbGF0ZWRRdWVyeVBhcmFtc1thbGlhc10sIHBhcmFtcyk7CiAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICBkb0xvYWQgPSB0cnVlOwogICAgICAgICAgICBpbnN0LnByZVJlbGF0ZWRRdWVyeVBhcmFtc1thbGlhc10gPSBwYXJhbXM7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb0xvYWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZG9Mb2FkICYmIEN1c3RvbVF1ZXJ5LmxvYWQoYWxpYXMsIHBhcmFtcykudGhlbihmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5jb25zdHJ1Y3RvciA9PSBBcnJheSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgcmVzdWx0QmluZCAmJiByZXN1bHRCaW5kLmNvbnN0cnVjdG9yID09IE9iamVjdCkgewogICAgICAgICAgICAvLyDojrflj5blvZPliY3mjqfku7bmmK/lkKblnKjlrZDooajmn5DooYzkuK0KICAgICAgICAgICAgdmFyIF91dGlscyRnZXRTdWJTY29wZUVsQTIgPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoZWwpLAogICAgICAgICAgICAgIGluZGV4ID0gX3V0aWxzJGdldFN1YlNjb3BlRWxBMi5pbmRleDsKICAgICAgICAgICAgdmFyIHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKGluc3QpOwogICAgICAgICAgICAvLyDlhbPogZTmn6Xor6LlgLzlm57nu5Hml7bvvIzpu5jorqTojrflj5bov5Tlm57nmoTnrKzkuIDmnaHorrDlvZUKICAgICAgICAgICAgdmFyIHNpbmdsZURhdGEgPSBkYXRhWzBdOwogICAgICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRCaW5kKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7CiAgICAgICAgICAgICAgdmFyIHBhdGggPSByZXN1bHRCaW5kW2tdOwogICAgICAgICAgICAgIC8vIOS4u+ihqAogICAgICAgICAgICAgIGlmIChpbmRleCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgcGF0aCwgc2luZ2xlRGF0YVtrXSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIOWtkOihqAogICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsIHBhdGgsIHNpbmdsZURhdGFba10sIGluZGV4KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICB9Cn0pOwovL+ihqOagvOaoquWQkeaLluaLvQpWdWUuZGlyZWN0aXZlKCd0YWJsZURyYWcnLCB7CiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsKSB7CiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlbC10YWJsZV9fYm9keS13cmFwcGVyJylbMF0gfHwgZWw7CiAgICB2YXIgdGFnTmFtZXMgPSBbJ3NwYW4nLCAnaW5wdXQnLCAndGV4dGFyZWEnLCAnYXNpZGUnXTsKICAgIGlmIChjdXJyZW50RWxlbWVudCkgewogICAgICBjdXJyZW50RWxlbWVudC5vbm1vdXNlZG93biA9IGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIHZhciBjdXJyZW50VGFnTmFtZXMgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmICh0YWdOYW1lcy5pbmNsdWRlcyhjdXJyZW50VGFnTmFtZXMpKSByZXR1cm47CiAgICAgICAgY3VycmVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWInOwogICAgICAgIHZhciBnYXBYID0gZXZlbnQuY2xpZW50WDsKICAgICAgICB2YXIgc3RhcnRYID0gZWwuc2Nyb2xsTGVmdDsKICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICB2YXIgeCA9IGUuY2xpZW50WCAtIGdhcFg7CiAgICAgICAgICBjdXJyZW50RWxlbWVudC5zY3JvbGxMZWZ0ID0gc3RhcnRYIC0geDsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9OwogICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7CiAgICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsOwogICAgICAgIH07CiAgICAgIH07CiAgICB9CiAgfQp9KTsKCi8v55So5LqO5o6n5Yi25a2Q6KGo5oiW5a2Z6KGo5Y2V6KGMcGVybWlzc2lvbgpWdWUuZGlyZWN0aXZlKCJwZXJtaXNzaW9uLWxpbmUiLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09ICdzdW4nICYmIGlkeE9iai5zdWJTY29wZUVsKSB7CiAgICAgICAgdmFyIHN1YklkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChpZHhPYmouc3ViU2NvcGVFbC5wYXJlbnRFbGVtZW50KTsKICAgICAgICBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBzdWJJZHhPYmouaW5kZXggKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKGluc3QucGVybWlzc2lvbiAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoZWwuX192dWVfXykgewogICAgICAgICAgICBlbC5fX3Z1ZV9fLnBlcm1pc3Npb25fc3ViID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl07CiAgICAgICAgICAgIGVsLl9fdnVlX18uc3ViX3dvcmsgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09ICdzdW4nICYmIGlkeE9iai5zdWJTY29wZUVsKSB7CiAgICAgICAgdmFyIHN1YklkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChpZHhPYmouc3ViU2NvcGVFbC5wYXJlbnRFbGVtZW50KTsKICAgICAgICBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBzdWJJZHhPYmouaW5kZXggKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKGluc3QucGVybWlzc2lvbiAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoZWwuX192dWVfXykgewogICAgICAgICAgICBlbC5fX3Z1ZV9fLnBlcm1pc3Npb25fc3ViID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl07CiAgICAgICAgICB9CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgIH0KICB9Cn0pOwovL+eUqOS6juaOp+WItuWtkOihqOaIluWtmeihqOWNleihjHBlcm1pc3Npb24gbGFibGXmoIfnrb4KVnVlLmRpcmVjdGl2ZSgicGVybWlzc2lvbi1saW5lLWxhYmxlIiwgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBpZiAoYmluZGluZy52YWx1ZSkgewogICAgICB2YXIgaW5zdCA9IHZub2RlLmNvbnRleHQ7CiAgICAgIHZhciBpZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoZWwpOwogICAgICB2YXIgcGF0aHMgPSBiaW5kaW5nLnZhbHVlLnNwbGl0KCdfJyk7CiAgICAgIHZhciBib1R5cGUgPSBwYXRoc1swXTsKICAgICAgdmFyIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgLy/lrZnooajml7bvvIzojrflj5blrZnooajmiYDlsZ7lrZDooajluo/lj7cKICAgICAgaWYgKGJvVHlwZSA9PSAnc3VuJyAmJiBpZHhPYmouc3ViU2NvcGVFbCkgewogICAgICAgIHZhciBzdWJJZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoaWR4T2JqLnN1YlNjb3BlRWwucGFyZW50RWxlbWVudCk7CiAgICAgICAgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgc3ViSWR4T2JqLmluZGV4ICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICB9CiAgICAgIGlmIChpbnN0LnBlcm1pc3Npb24gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXSAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddW2lkU3RyXSkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgZWwucGFyZW50RWxlbWVudC5oaWRkZW4gPSBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddW2lkU3RyXSA9PSAnbicgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgIH0KICB9LAogIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgaWYgKGJpbmRpbmcudmFsdWUpIHsKICAgICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgICB2YXIgaWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKTsKICAgICAgdmFyIHBhdGhzID0gYmluZGluZy52YWx1ZS5zcGxpdCgnXycpOwogICAgICB2YXIgYm9UeXBlID0gcGF0aHNbMF07CiAgICAgIHZhciBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIC8v5a2Z6KGo5pe277yM6I635Y+W5a2Z6KGo5omA5bGe5a2Q6KGo5bqP5Y+3CiAgICAgIGlmIChib1R5cGUgPT0gJ3N1bicgJiYgaWR4T2JqLnN1YlNjb3BlRWwpIHsKICAgICAgICB2YXIgc3ViSWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGlkeE9iai5zdWJTY29wZUVsLnBhcmVudEVsZW1lbnQpOwogICAgICAgIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIHN1YklkeE9iai5pbmRleCArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgfQogICAgICBpZiAoaW5zdC5wZXJtaXNzaW9uICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ10gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0pIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGVsLnBhcmVudEVsZW1lbnQuaGlkZGVuID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0gPT0gJ24nID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfQp9KTsKCi8vIOeUqOS6jueCueWHu+aMh+WumuWMuuWfn+WkluaJp+ihjOafkOWKn+iDvSAKVnVlLmRpcmVjdGl2ZSgiY2xpY2stb3V0c2lkZSIsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5ncywgdm5vZGUpIHsKICAgIGVsLmhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgewogICAgICBpZiAoIWVsLmNvbnRhaW5zKGUudGFyZ2V0KSkgewogICAgICAgIHZhciBtZXRob2QgPSBiaW5kaW5ncy5leHByZXNzaW9uOwogICAgICAgIHZub2RlLmNvbnRleHRbbWV0aG9kXSgpOwogICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlbC5oYW5kbGVyKTsKICB9LAogIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKGVsKSB7CiAgICAvLyDlj6/nlKjkuo7op6PpmaTkuovku7bnu5HlrpoKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZWwuaGFuZGxlcik7CiAgfQp9KTsKdmFyIGRpcmVjdGl2ZSA9IHt9OwpleHBvcnQgZGVmYXVsdCBkaXJlY3RpdmU7"},null]}