{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\eipControl\\EipHotSubDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\eipControl\\EipHotSubDialog.vue","mtime":1733309211891},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBtYXBTdGF0ZSB9IGZyb20gInZ1ZXgiOw0KaW1wb3J0IHV0aWxzIGZyb20gIkAvdXRpbHMuanMiOw0KaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gImVsZW1lbnQtdWkiOw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJodC1ob3Qtc3ViRGlhbG9nIiwNCiAgcHJvcHM6IFsidmFsaWRhdGUiLCAidmFsdWUiLCAiYnRuTmFtZSIsICJhdHRlciIsICJzaW5nbGUiLCAiY3VzdGRpYWxvZyJdLA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICBjdXN0b21EaWFsb2dTaG93TGlzdDogZmFsc2UsDQogICAgICBjdXN0b21EaWFsb2dTaG93VHJlZTogZmFsc2UsDQogICAgICBzZWxlY3RPcmdQcm9wczogew0KICAgICAgICBsYWJlbDogImJ0bk5hbWUiDQogICAgICB9LA0KICAgICAgc3R5bGU6ICIiLCAvL+WvueivneahhuWuvemrmA0KICAgICAgc2VsZWN0T3JnczogbnVsbCwNCiAgICAgIGlucHV0U3VmZml4SGVpZ2h0OiAzMCwNCiAgICAgIGNvbmZpZzogbnVsbCwNCiAgICAgIHVwZGF0aW5nOiBmYWxzZSwNCiAgICAgIGRpc3BsYXlmaWVsZDogW10sIC8v5pi+56S65a2X5q61DQogICAgICBjdXN0b21EaWFsb2c6IHt9LCAvLw0KICAgICAgY29tbWVudDogIiIsDQogICAgICBxdWVyeVBhcmFtOiAiIiwNCiAgICAgIHByb3BzMTogW10sDQogICAgICBzaG93RGF0YTogW10sDQogICAgICBjaGVja0JveERhdGFBbGw6IFtdLCAvL+mAieS4reWvueixoeeahOmbhuWQiA0KICAgICAgZGVmYXVsdFByb3BzOiB7DQogICAgICAgIGNoaWxkcmVuOiAiY2hpbGRyZW5zIiwNCiAgICAgICAgbGFiZWw6ICJsYWJlbCINCiAgICAgIH0sDQogICAgICBwcm9wc0RhdGE6IFtdLA0KICAgICAgcXVlcnlzU2hvdzogZmFsc2UsIC8v5piv5ZCm5pi+56S65pCc57Si5qGGDQogICAgICB1bmRlZmluZWRhOiAiIiwNCiAgICAgIG9wTWFwOnsnRVEnOidFUVVBTCcsJ0dFJzonR1JFQVRfRVFVQUwnLCdHVCc6J0dSRUFUJywnTFQnOidMRVNTJywnTEUnOidMRVNTX0VRVUFMJywnSU4nOidJTicsJ0xLJzonTElLRScsJ0xGSyc6J0xFRlRfTElLRScsJ1JISyc6J1JJR0hUX0xJS0UnfSwNCiAgICB9Ow0KICB9LA0KICBjb21wdXRlZDogbWFwU3RhdGUoew0KICAgIHBhZ2luYXRpb246IHN0YXRlID0+IHN0YXRlLmRpYWxvZy5wYWdpbmF0aW9uLA0KICAgIHRvdGFsOiBzdGF0ZSA9PiBzdGF0ZS5kaWFsb2cudG90YWwsDQogICAgZGlhbG9nRGF0YTogc3RhdGUgPT4gew0KICAgICAgcmV0dXJuIHN0YXRlLmRpYWxvZy5yb3dzOw0KICAgIH0sDQogICAgaW5wdXRWYWw6IGZ1bmN0aW9uKCkgew0KICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7DQogICAgICAgIHJldHVybiBudWxsOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgbGV0IG5hbWVBcnkgPSB0aGlzLnZhbHVlLnNwbGl0KCIsIik7DQogICAgICAgIGlmICh0aGlzLnZhbHVlLmluZGV4T2YoInx8IikgPiAwKSB7DQogICAgICAgICAgbmFtZUFyeSA9IHRoaXMudmFsdWUuc3BsaXQoInx8IilbMF0uc3BsaXQoIiwiKTsNCiAgICAgICAgICB0aGlzLnNob3dEYXRhID0gSlNPTi5wYXJzZSh0aGlzLnZhbHVlLnNwbGl0KCJ8fCIpWzFdKTsNCiAgICAgICAgfQ0KICAgICAgICBsZXQgaWRBcnkgPSBudWxsOw0KICAgICAgICBsZXQgYWNjb3VudEFyeSA9IG51bGw7DQogICAgICAgIGxldCByZXN1bHQgPSBbXTsNCiAgICAgICAgbmFtZUFyeS5mb3JFYWNoKChtLCBpKSA9PiB7DQogICAgICAgICAgbGV0IG4gPSB7IHZhbHVlOiBtIH07DQogICAgICAgICAgcmVzdWx0LnB1c2gobik7DQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgfQ0KICAgIH0sDQogICAgaW5wdXRXcml0ZWFibGU6IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuIHV0aWxzLmdldFdyaXRlYWJsZSh0aGlzLnBlcm1pc3Npb24pOw0KICAgIH0sDQogICAgaW5wdXRWYWxpZGF0ZTogZnVuY3Rpb24oKSB7DQogICAgICB2YXIgdmFsaWRhdGVPYmogPSB0aGlzLiRzdG9yZS5zdGF0ZS5pbmRleC52YWxpZGF0ZTsNCiAgICAgIHJldHVybiB1dGlscy5hZGRSZXF1aXJlZE9yTm90KA0KICAgICAgICB0aGlzLnBlcm1pc3Npb24sDQogICAgICAgIHRoaXMudmFsaWRhdGUsDQogICAgICAgIHZhbGlkYXRlT2JqLA0KICAgICAgICB0aGlzDQogICAgICApOw0KICAgIH0sDQogICAgaW5wdXROYW1lOiBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLm5hbWUgPyB0aGlzLm5hbWUgOiB1dGlscy5nZXROYW1lKCk7DQogICAgfSwNCiAgICAvLyDmmK/lkKbmnInlm57loavorr7nva4NCiAgICBiaW5kU2V0OiBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yY29uZmlnID8gdGhpcy5zZWxlY3RvcmNvbmZpZy5iaW5kIDogbnVsbDsNCiAgICB9LA0KICAgIGdldFBsYWNlaG9sZGVyOiBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLmN1c3RkaWFsb2cubmFtZTsNCiAgICB9DQogIH0pLA0KICBtb3VudGVkKCkge30sDQogIGNyZWF0ZWQoKSB7DQogICAgdGhpcy4kdmFsaWRhdG9yID0gdGhpcy4kcm9vdC4kdmFsaWRhdG9yOw0KICB9LA0KICB3YXRjaDogew0KICAgIGN1c3RvbURpYWxvZ1Nob3dUcmVlOiBmdW5jdGlvbihuZXdWYWwpIHsNCiAgICAgIGlmIChuZXdWYWwpIHsNCiAgICAgICAgdGhpcy5jaGVja0JveERhdGFBbGwgPSBbXTsNCiAgICAgICAgaWYgKHRoaXMuaW5wdXRWYWwgJiYgdGhpcy5pbnB1dFZhbC5jb25zdHJ1Y3RvciA9PSBBcnJheSkgew0KICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFsuLi50aGlzLmlucHV0VmFsXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBbXTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgY3VzdG9tRGlhbG9nU2hvd0xpc3Q6IGZ1bmN0aW9uKG5ld1ZhbCkgew0KICAgICAgaWYgKG5ld1ZhbCkgew0KICAgICAgICB0aGlzLmNoZWNrQm94RGF0YUFsbCA9IFtdOw0KICAgICAgICBpZiAodGhpcy5pbnB1dFZhbCAmJiB0aGlzLmlucHV0VmFsLmNvbnN0cnVjdG9yID09IEFycmF5KSB7DQogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gWy4uLnRoaXMuaW5wdXRWYWxdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuc2VsZWN0T3JncyA9IFtdOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgaGFuZGxlU2l6ZUNoYW5nZTogZnVuY3Rpb24oc2l6ZSkgew0KICAgICAgLy/mr4/pobXkuIvmi4nmmL7npLrmlbDmja4NCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0UGFnaW5hdGlvblNpemUiLCBzaXplKTsNCiAgICAgIHRoaXMuc2VhcmNoKCk7DQogICAgfSwNCiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbihjdXJyZW50UGFnZSkgew0KICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgaWYgKHRoaXMuc2VsZWN0T3JncyAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RPcmdzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgdGhpcy5zZWxlY3RPcmdzLmZvckVhY2gocm93ID0+IHsNCiAgICAgICAgICBsZXQgcmVzID0gdGhpc18uaW5kZXhBcnJheSh0aGlzXy5jaGVja0JveERhdGFBbGwsIHJvdyk7DQogICAgICAgICAgaWYgKHJlcyA9PSAtMSkgew0KICAgICAgICAgICAgdGhpc18uY2hlY2tCb3hEYXRhQWxsLnB1c2gocm93KTsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgICAgdGhpc18uc2VsZWN0T3JncyA9IHRoaXNfLmNoZWNrQm94RGF0YUFsbDsNCiAgICAgIC8v54K55Ye756ys5Yeg6aG1DQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldFBhZ2luYXRpb25QYWdlTnVtIiwgY3VycmVudFBhZ2UpOw0KICAgICAgdGhpcy5zZWFyY2goKTsNCiAgICB9LA0KICAgIGNoZWNrTGlzdCgpIHsNCiAgICAgIGNvbnN0IHRoaXNfID0gdGhpczsNCiAgICAgIHNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgICBpZiAodGhpc18uc2VsZWN0T3JncyAhPSB1bmRlZmluZWQgJiYgdGhpc18uc2VsZWN0T3Jncy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgaWYgKHRoaXNfLnNlbGVjdE9yZ3MgPT0gdW5kZWZpbmVkIHx8IHRoaXNfLnNlbGVjdE9yZ3MubGVuZ3RoID09IDApIHsNCiAgICAgICAgICAgIHRoaXNfLnNlbGVjdE9yZ3MgPSB0aGlzXy5jaGVja0JveERhdGFBbGw7DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0aGlzXy5zZWxlY3RPcmdzICE9IHVuZGVmaW5lZCAmJiB0aGlzXy5zZWxlY3RPcmdzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIHRoaXNfLnNlbGVjdE9yZ3MuZm9yRWFjaChyb3cgPT4gew0KICAgICAgICAgICAgICBsZXQgcmVzID0gdGhpc18uaW5kZXhBcnJheSh0aGlzXy5kaWFsb2dEYXRhLCByb3cpOw0KICAgICAgICAgICAgICBpZiAocmVzICE9IC0xKSB7DQogICAgICAgICAgICAgICAgdGhpc18uJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKA0KICAgICAgICAgICAgICAgICAgdGhpc18uZGlhbG9nRGF0YVtyZXNdLA0KICAgICAgICAgICAgICAgICAgdHJ1ZQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBpZiAodGhpc18uc2hvd0RhdGEgIT0gdW5kZWZpbmVkICYmIHRoaXNfLnNob3dEYXRhLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIHRoaXNfLnNob3dEYXRhLmZvckVhY2gocm93ID0+IHsNCiAgICAgICAgICAgICAgbGV0IHJlcyA9IHRoaXNfLmluZGV4QXJyYXkodGhpc18uZGlhbG9nRGF0YSwgcm93KTsNCiAgICAgICAgICAgICAgaWYgKHJlcyAhPSAtMSkgew0KICAgICAgICAgICAgICAgIHRoaXNfLiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbigNCiAgICAgICAgICAgICAgICAgIHRoaXNfLmRpYWxvZ0RhdGFbcmVzXSwNCiAgICAgICAgICAgICAgICAgIHRydWUNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0sIDI1MCk7DQogICAgfSwNCiAgICBzaG93RGlhbG9nKGl0ZW0pIHsNCiAgICAgIGxldCBzZWxlY3ROdW0gPSAtMTsNCiAgICAgIGxldCBzdWJSZWxhdGlvbk9iaiA9ICQoaXRlbS50YXJnZXQpLnBhcmVudHMoIltzdWItcmVsYXRpb25dIik7DQogICAgICBpZiAoDQogICAgICAgIHN1YlJlbGF0aW9uT2JqLmxlbmd0aCA+IDAgJiYNCiAgICAgICAgJChzdWJSZWxhdGlvbk9ialswXSkuYXR0cigic3ViLXJlbGF0aW9uIikgPT0gIm9uZXRvb25lIg0KICAgICAgKSB7DQogICAgICAgIHNlbGVjdE51bSA9IDE7DQogICAgICB9DQogICAgICB2YXIgYWxpYXMgPSB0aGlzLmN1c3RkaWFsb2cuY3VzdERpYWxvZy5hbGlhczsNCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsNCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJmb3JtL2dldEJ5QWxpYXMiLCBhbGlhcykudGhlbihjdXN0b21EaWFsb2cgPT4gew0KICAgICAgICBpZiAoIWN1c3RvbURpYWxvZyB8fCAhY3VzdG9tRGlhbG9nLmFsaWFzKSB7DQogICAgICAgICAgTWVzc2FnZS5lcnJvcigi5a+56K+d5qGG5Yir5ZCN44CQIiArIGFsaWFzICsgIuOAkeS4jeWtmOWcqO+8gSIpOw0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBjdXN0b21EaWFsb2cuc2VsZWN0TnVtID0gc2VsZWN0TnVtOw0KICAgICAgICB2YXIgbGlzdCA9IEpTT04ucGFyc2UoY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKTsNCiAgICAgICAgdmFyIHBhcmFtID0ge307DQogICAgICAgIGxpc3QuZm9yRWFjaChlbGUgPT4gew0KICAgICAgICAgIGlmIChlbGUuZGVmYXVsdFR5cGUgPT0gIjQiKSB7DQogICAgICAgICAgICBwYXJhbVtlbGUuZmllbGRdID0gZWxlLmNvbW1lbnQ7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgdGhpcy5zdHlsZSA9ICJoZWlnaHQ6IiArIGN1c3RvbURpYWxvZy5oZWlnaHQgKyAicHgiOw0KDQogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShwYXJhbSkgPT0gInt9Iikgew0KICAgICAgICAgIC8v5rKh5pyJ5Yqo5oCB5Lyg5YWl55qE5a2X5q61DQogICAgICAgICAgaWYgKGN1c3RvbURpYWxvZy5zdHlsZSA9PSAwKSB7DQogICAgICAgICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3coeyBhbGlhczogYWxpYXMsIGN1c3RvbURpYWxvZzogY3VzdG9tRGlhbG9nIH0pOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmN1c3RvbURpYWxvZ1RyZWVTaG93KHsNCiAgICAgICAgICAgICAgYWxpYXM6IGFsaWFzLA0KICAgICAgICAgICAgICBjdXN0b21EaWFsb2c6IGN1c3RvbURpYWxvZw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgDQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sDQogICAgaW5kZXhBcnJheShhcnJheSwgaXRlbSkgew0KICAgICAgdmFyIGlkID0gIiI7DQogICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gIm9iamVjdCIpIHsNCiAgICAgICAgaWQgPSBpdGVtLmlkOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaWQgPSBpdGVtOw0KICAgICAgfQ0KDQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmIChhcnJheVtpXS5pZCA9PSBpZCkgew0KICAgICAgICAgIHJldHVybiBpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gLTE7DQogICAgfSwNCiAgICBvblRhYmxlU2VsZWN0KHJvd3MsIHJvdykgew0KICAgICAgbGV0IHNlbGVjdGVkID0gcm93cy5sZW5ndGggJiYgcm93cy5pbmRleE9mKHJvdykgIT09IC0xOw0KICAgICAgaWYgKCFzZWxlY3RlZCkgew0KICAgICAgICBsZXQgcmVzID0gdGhpcy5pbmRleEFycmF5KHRoaXMuY2hlY2tCb3hEYXRhQWxsLCByb3cpOw0KICAgICAgICB0aGlzLmNoZWNrQm94RGF0YUFsbC5zcGxpY2UocmVzLCAxKTsNCiAgICAgICAgaWYgKHRoaXMuY2hlY2tCb3hEYXRhQWxsLmxlbmd0aCA9PSAwKSB7DQogICAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gW107DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIG9yZ1Jvd0NsaWNrKHJvdywgY29sdW1uLCBldmVudCkgew0KICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgew0KICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0pLnRyaWdnZXIoDQogICAgICAgICAgImNsaWNrIg0KICAgICAgICApOw0KICAgICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBbcm93XTsNCiAgICAgIH0NCiAgICAgIHRoaXMuJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHJvdyk7DQogICAgfSwNCiAgICBvcmdUYWJsZVNlbGVjdGlvbihzZWxlY3Rpb24pIHsNCiAgICAgIGlmICgNCiAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtICE9IDEgJiYNCiAgICAgICAgc2VsZWN0aW9uICYmDQogICAgICAgIHNlbGVjdGlvbi5sZW5ndGggPiAwDQogICAgICApIHsNCiAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gc2VsZWN0aW9uOw0KICAgICAgfQ0KICAgIH0sDQogICAgZGlhbG9nQ29uZmlybSgpIHsNCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsNCiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd0xpc3QgPSBmYWxzZTsNCiAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOw0KICAgICAgdGhpcy5zeW5jSW5wdXRWYWx1ZSgpOw0KICAgIH0sIC8v6YeN572uDQogICAgcmVzZXQoKSB7DQogICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSAiIjsNCiAgICAgIHRoaXMuc2VhcmNoKCk7DQogICAgfSwNCiAgICBzZWFyY2goKSB7DQogICAgICBsZXQgcXVlcnlzID0gW107IC8v5p+l6K+i5p2h5Lu2DQogICAgICBsZXQgcXVlcnlGaWx0ZXIgPSB7fTsNCiAgICAgIGxldCBwYWdlQmVhbiA9IHsgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiB9Ow0KICAgICAgbGV0IF90aGlzID0gdGhpczsNCiAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW0gIT0gIiIpIHsNCiAgICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7DQogICAgICAgIGNvbmRpdGlvbmZpZWxkLmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgaWYoaXRlbS5kZWZhdWx0VHlwZSA9PSAnMScpew0KICAgICAgICAgICAgcXVlcnlzLnB1c2goew0KICAgICAgICAgICAgICBwcm9wZXJ0eTogaXRlbS5maWVsZCwNCiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucXVlcnlQYXJhbSwNCiAgICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwNCiAgICAgICAgICAgICAgb3BlcmF0aW9uOiBfdGhpcy5vcE1hcFtpdGVtLmNvbmRpdGlvbl0sDQogICAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9IA0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIC8v5aSE55CG5Y+C5pWw5Lyg5YWlDQogICAgICBjb25zdCBjb25kaXRpb25zID0gdGhpcy5jdXN0ZGlhbG9nLmN1c3REaWFsb2cuY29uZGl0aW9uczsNCiAgICAgIGNvbnN0IGZvcm1JbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOw0KICAgICAgaWYoY29uZGl0aW9ucyAmJiBjb25kaXRpb25zLmxlbmd0aD4wICYmIGZvcm1JbnN0ICYmIGZvcm1JbnN0WydkYXRhJ10pew0KICAgICAgICBjb25zdCBjdXJEYXRhID0gZm9ybUluc3RbJ2RhdGEnXTsNCiAgICAgICAgY29uZGl0aW9ucy5mb3JFYWNoKGl0ZW0gPT57DQogICAgICAgICAgaWYoaXRlbS5kZWZhdWx0VHlwZSA9PSAiMyIgJiYgaXRlbS5iaW5kKXsNCiAgICAgICAgICAgIGxldCBvYmogPSB7fTsNCiAgICAgICAgICAgIGl0ZW0uZmllbGQgPSBpdGVtLmZpZWxkOw0KICAgICAgICAgICAgY29uc3QgYmluZEFycmF5ID0gaXRlbS5iaW5kLnNwbGl0KCcuJyk7DQogICAgICAgICAgICBpZihiaW5kQXJyYXkubGVuZ3RoPT0zKXsNCiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBjdXJEYXRhW2JpbmRBcnJheVsxXV1bYmluZEFycmF5WzJdXTsNCiAgICAgICAgICAgICAgcXVlcnlzLnB1c2goew0KICAgICAgICAgICAgICAgIHByb3BlcnR5OiBpdGVtLmZpZWxkLA0KICAgICAgICAgICAgICAgIHZhbHVlOiB0YXJnZXRWYWx1ZSwNCiAgICAgICAgICAgICAgICBncm91cDogInR5cGUzIiwNCiAgICAgICAgICAgICAgICBvcGVyYXRpb246IF90aGlzLm9wTWFwW2l0ZW0uY29uZGl0aW9uXSwNCiAgICAgICAgICAgICAgICByZWxhdGlvbjogIkFORCINCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIGlmIChxdWVyeXMubGVuZ3RoID4gMCkgew0KICAgICAgICBxdWVyeUZpbHRlciA9IHsgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiwgcXVlcnlzIH07DQogICAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLnBhZ2VCZWFuID0gcXVlcnlGaWx0ZXI7DQogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvZ2V0bGlzdEpzb24iLCB0aGlzLmN1c3RvbURpYWxvZyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5wYWdlQmVhbiA9IHBhZ2VCZWFuOw0KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL2dldGxpc3RKc29uIiwgdGhpcy5jdXN0b21EaWFsb2cpOw0KICAgICAgfQ0KICAgICAgdGhpcy5jaGVja0xpc3QoKTsNCiAgICB9LA0KICAgIHNlYXJjaFRyZWUocmVxdWVzdFBhcmFtcykgew0KICAgICAgaWYgKHRoaXMucHJvcHMxLmxlbmd0aCA8IDEpIHsNCiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9nZXRUcmVlRGF0YSIsIHJlcXVlc3RQYXJhbXMpLnRoZW4ocmVzID0+IHsNCiAgICAgICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkICYmIHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKSB7DQogICAgICAgICAgICB2YXIgZGlzcGxheWZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOw0KICAgICAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMubGFiZWwgPSBkaXNwbGF5ZmllbGQuZGlzcGxheU5hbWU7DQogICAgICAgICAgICB2YXIgcmVzdWx0ZmllbGQgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsNCiAgICAgICAgICAgIHRoaXMucHJvcHMxID0gdGhpcy50b1RyZWVEYXRhKA0KICAgICAgICAgICAgICByZXMsDQogICAgICAgICAgICAgIGRpc3BsYXlmaWVsZC5pZCwNCiAgICAgICAgICAgICAgZGlzcGxheWZpZWxkLnBpZCwNCiAgICAgICAgICAgICAgZGlzcGxheWZpZWxkLmRpc3BsYXlOYW1lLA0KICAgICAgICAgICAgICBkaXNwbGF5ZmllbGQucHZhbHVlID8gZGlzcGxheWZpZWxkLnB2YWx1ZSA6ICIwIiwNCiAgICAgICAgICAgICAgcmVzdWx0ZmllbGQNCiAgICAgICAgICAgICk7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOWQjOatpemAieaLqee7k+aenA0KICAgIHN5bmNJbnB1dFZhbHVlKCkgew0KICAgICAgdmFyIHJldHVyblN0ciA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpOw0KICAgICAgLy/mi7/liLDov5Tlm57nmoTlrZfmrrUNCiAgICAgIHZhciBmaWVsZCA9IG5ldyBBcnJheShbcmV0dXJuU3RyLmxlbmd0aF0pOw0KICAgICAgdmFyIGNvbW1lbnQgPSBuZXcgQXJyYXkoW3JldHVyblN0ci5sZW5ndGhdKTsNCiAgICAgIHZhciBzdHIgPSBbXTsNCiAgICAgIHZhciBpZHMgPSBbXTsNCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0dXJuU3RyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGZpZWxkW2ldID0NCiAgICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiDQogICAgICAgICAgICA/IHJldHVyblN0cltpXS5maWVsZC50b1VwcGVyQ2FzZSgpDQogICAgICAgICAgICA6IHJldHVyblN0cltpXS5maWVsZDsNCiAgICAgICAgY29tbWVudFtpXSA9DQogICAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIg0KICAgICAgICAgICAgPyByZXR1cm5TdHJbaV0uY29tbWVudC50b1VwcGVyQ2FzZSgpDQogICAgICAgICAgICA6IHJldHVyblN0cltpXS5jb21tZW50Ow0KICAgICAgfQ0KICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgdGhpcy5zZWxlY3RPcmdzLmZvckVhY2gocm93ID0+IHsNCiAgICAgICAgaWYgKHRoaXNfLmNoZWNrQm94RGF0YUFsbCB8fCB0aGlzXy5jaGVja0JveERhdGFBbGwubGVuZ3RoIDwgMSkgew0KICAgICAgICAgIHRoaXNfLmNoZWNrQm94RGF0YUFsbC5wdXNoKHJvdyk7DQogICAgICAgIH0gZWxzZSBpZiAoDQogICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpc18uaW5kZXhBcnJheSkuaW5kZXhPZihKU09OLnN0cmluZ2lmeShyb3cpKSA9PSAtMQ0KICAgICAgICApIHsNCiAgICAgICAgICB0aGlzXy5jaGVja0JveERhdGFBbGwucHVzaChyb3cpOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICAgIHZhciBzID0gdGhpcy5jaGVja0JveERhdGFBbGw7DQoNCiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsNCiAgICAgICAgdmFyIHRlbXAgPSAiIjsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgY29uc3QgdmEgPSBzWzBdW2ZpZWxkW2ldXTsNCiAgICAgICAgICB2YSA9IHR5cGVvZih2YSk9PSd1bmRlZmluZWQnPycnOnZhOw0KICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtpXSArICciOiInICsgdmEgKyAnIiwnOw0KICAgICAgICB9DQogICAgICAgIGlmICh0ZW1wICE9ICIiKSB7DQogICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7DQogICAgICAgIH0NCiAgICAgICAgc3RyLnB1c2godXRpbHMucGFyc2VUb0pzb24odGVtcCkpOw0KICAgICAgICBpZHMucHVzaChzWzBdLmlkKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgIHZhciB0ZW1wID0gIiI7DQogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb21tZW50Lmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICBjb25zdCB2YSA9IHNbaV1bZmllbGRbal1dOw0KICAgICAgICAgICAgdmEgPSB0eXBlb2YodmEpPT0ndW5kZWZpbmVkJz8nJzp2YTsNCiAgICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtqXSArICciOiInICsgdmEgKyAnIiwnOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGVtcCAhPSAiIikgew0KICAgICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7DQogICAgICAgICAgfQ0KICAgICAgICAgIHN0ci5wdXNoKHV0aWxzLnBhcnNlVG9Kc29uKHRlbXApKTsNCiAgICAgICAgICBpZHMucHVzaChzW2ldLmlkKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IHN0cjsNCiAgICAgIGNvbnN0IF90aGlzID0gdGhpczsNCiAgICAgIGNvbnN0IGZvcm1JbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOw0KICAgICAgbGV0IGhvdFRhYmxlVGFyZ2V0ID0gJyc7DQogICAgICByZXR1cm5EYXRhLmZvckVhY2gocm93ID0+IHsNCiAgICAgICAgdmFyIHRhcmdldEFycmF5ID0gbnVsbDsNCiAgICAgICAgdmFyIHN1YkxpbmVEYXRhID0ge307DQogICAgICAgIHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLm1hcHBpbmdDb25mLmZvckVhY2goY29uID0+IHsNCiAgICAgICAgICBpZiAoY29uLnRhcmdldFswXSkgew0KICAgICAgICAgICAgaG90VGFibGVUYXJnZXQgPSBjb24udGFyZ2V0WzBdOw0KICAgICAgICAgICAgdGFyZ2V0QXJyYXkgPSBjb24udGFyZ2V0WzBdLnNwbGl0KCIuIik7DQogICAgICAgICAgICB2YXIgZnJvbSA9ICIiOw0KICAgICAgICAgICAgaWYgKF90aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gInJlc3RmdWwiKSB7DQogICAgICAgICAgICAgIGZyb20gPSBjb24uZnJvbTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIGZyb20gPSBjb24uZnJvbS50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc3ViTGluZURhdGFbdGFyZ2V0QXJyYXlbdGFyZ2V0QXJyYXkubGVuZ3RoIC0gMV1dID0gcm93W2Zyb21dOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIGlmICh0YXJnZXRBcnJheSkgew0KICAgICAgICAgIHZhciBzdWJCbyA9IGZvcm1JbnN0WyJkYXRhIl1bdGFyZ2V0QXJyYXlbMF1dW3RhcmdldEFycmF5WzFdXTsNCiAgICAgICAgICBpZiAoX3RoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PSAxICYmIHN1YkJvLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIHN1YkJvLnNoaWZ0KCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIC8v5a2Q6KGo5Zue5aGrIOiHquWKqOaKiuS5i+WJjea3u+WKoOeahOWtl+auteS4lOS4uuepuueahOS5n+WbnuWhqw0KICAgICAgICAgIC8vIGlmIChmb3JtSW5zdFsiZGF0YSJdW3RhcmdldEFycmF5WzBdXVt0YXJnZXRBcnJheVsxXV0pIHsNCiAgICAgICAgICAvLyAgIGZvcm1JbnN0WyJkYXRhIl1bdGFyZ2V0QXJyYXlbMF1dW3RhcmdldEFycmF5WzFdXS5mb3JFYWNoKG9iaiA9PiB7DQogICAgICAgICAgLy8gICAgIGZvciAobGV0IGl0ZW0gaW4gb2JqKSB7DQogICAgICAgICAgLy8gICAgICAgaWYgKCFvYmpbaXRlbV0pIHsNCiAgICAgICAgICAvLyAgICAgICAgIGZvciAobGV0IHN1YkRhdGEgaW4gc3ViTGluZURhdGEpIHsNCiAgICAgICAgICAvLyAgICAgICAgICAgb2JqW2l0ZW1dID0gc3ViTGluZURhdGFbaXRlbV07DQogICAgICAgICAgLy8gICAgICAgICB9DQogICAgICAgICAgLy8gICAgICAgfQ0KICAgICAgICAgIC8vICAgICB9DQogICAgICAgICAgLy8gICB9KTsNCiAgICAgICAgICAvLyB9DQogICAgICAgICAgc3ViQm8ucHVzaChzdWJMaW5lRGF0YSk7DQogICAgICAgICAgLy/miorlrZDooajlm57loavlgLzlrZjlnKjmjqfku7bnmoTniLbnu4Tku7bkuK0NCiAgICAgICAgICBmb3JtSW5zdC5zdWJCYWNrZmlsbC5zZXQoDQogICAgICAgICAgICAiZGF0YS4iICsgdGFyZ2V0QXJyYXlbMF0gKyAiLiIgKyB0YXJnZXRBcnJheVsxXSwNCiAgICAgICAgICAgIHN1YkxpbmVEYXRhDQogICAgICAgICAgKTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgICBpZihob3RUYWJsZVRhcmdldCl7DQogICAgICAgIGZvcm1JbnN0LmhvdFRhYmxlRmlsbGJhY2sgPSBob3RUYWJsZVRhcmdldCsnX3RpbWVzdGFtcF8nK0RhdGUucGFyc2UobmV3IERhdGUoKSk7DQogICAgICB9DQogICAgfSwNCiAgICBkaWFsb2dDYW5jZWwoKSB7DQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldERpYWxvZ0RhdGEiLCBbXSk7DQogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gZmFsc2U7DQogICAgICBpZiAodGhpcy5zZWxlY3RPcmdzKSB7DQogICAgICAgIHRoaXMuc2VsZWN0T3Jncy5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgIGlmICghdGhpcy5pbnB1dFZhbCB8fCB0aGlzLmlucHV0VmFsLmluZGV4T2YoaXRlbSkgPT09IC0xKSB7DQogICAgICAgICAgICB0aGlzLiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihpdGVtLCBmYWxzZSk7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIHRydWUpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICB9DQogICAgICAvLyB0aGlzLnNlbGVjdE9yZ3MgPSB0aGlzLmlucHV0VmFsID8gdGhpcy5pbnB1dFZhbCA6IG51bGw7DQogICAgfSwNCiAgICBkaWFsb2dUcmVlQ29uZmlybSgpIHsNCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsNCiAgICAgIHZhciByZXR1cm5TdHIgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsNCiAgICAgIHZhciBmaWVsZCA9IG5ldyBBcnJheShbcmV0dXJuU3RyLmxlbmd0aF0pOw0KICAgICAgdmFyIGNvbW1lbnQgPSBuZXcgQXJyYXkoW3JldHVyblN0ci5sZW5ndGhdKTsNCiAgICAgIHZhciBzdHIgPSBbXTsNCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0dXJuU3RyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGZpZWxkW2ldID0gcmV0dXJuU3RyW2ldLmZpZWxkOw0KICAgICAgICBjb21tZW50W2ldID0gcmV0dXJuU3RyW2ldLmNvbW1lbnQ7DQogICAgICB9DQogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7DQogICAgICAgIHZhciBub2RlcyA9IHRoaXMucHJvcHNEYXRhWzBdOw0KICAgICAgICB2YXIgdGVtcCA9ICIiOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnQubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2ZpZWxkW2ldXSArICciLCc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHRlbXAgIT0gIiIpIHsNCiAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsNCiAgICAgICAgfQ0KICAgICAgICBzdHIucHVzaCh1dGlscy5wYXJzZVRvSnNvbih0ZW1wKSk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLnByb3BzRGF0YTsNCiAgICAgICAgbm9kZXMuZm9yRWFjaCgoaXRlbSwgaykgPT4gew0KICAgICAgICAgIHZhciB0ZW1wID0gIiI7DQogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2ZpZWxkW2ldXSArICciLCc7DQogICAgICAgICAgICB0ZW1wICs9ICciJyArIGNvbW1lbnRbaV0gKyAnIjoiJyArIG5vZGVzW2tdW2ZpZWxkW2ldXSArICciLCc7DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0ZW1wICE9ICIiKSB7DQogICAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsNCiAgICAgICAgICB9DQogICAgICAgICAgc3RyLnB1c2godXRpbHMucGFyc2VUb0pzb24odGVtcCkpOw0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIGNvbnN0IHJldHVybkRhdGEgPSBzdHI7DQogICAgICBjb25zdCBfdGhpcyA9IHRoaXM7DQogICAgICBjb25zdCBmb3JtSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZSh0aGlzKTsNCiAgICAgIHJldHVybkRhdGEuZm9yRWFjaChyb3cgPT4gew0KICAgICAgICB2YXIgdGFyZ2V0QXJyYXkgPSBudWxsOw0KICAgICAgICB2YXIgc3ViTGluZURhdGEgPSB7fTsNCiAgICAgICAgdGhpcy5jdXN0ZGlhbG9nLmN1c3REaWFsb2cubWFwcGluZ0NvbmYuZm9yRWFjaChjb24gPT4gew0KICAgICAgICAgIHRhcmdldEFycmF5ID0gY29uLnRhcmdldFswXS5zcGxpdCgiLiIpOw0KICAgICAgICAgIHZhciBmcm9tID0gIiI7DQogICAgICAgICAgaWYgKF90aGlzLmN1c3RvbURpYWxvZy5kc1R5cGUgPT0gInJlc3RmdWwiKSB7DQogICAgICAgICAgICBmcm9tID0gY29uLmZyb207DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGZyb20gPSBjb24uZnJvbS50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBzdWJMaW5lRGF0YVt0YXJnZXRBcnJheVt0YXJnZXRBcnJheS5sZW5ndGggLSAxXV0gPSByb3dbZnJvbV07DQogICAgICAgIH0pOw0KICAgICAgICBpZiAodGFyZ2V0QXJyYXkpIHsNCiAgICAgICAgICB2YXIgc3ViQm8gPSBmb3JtSW5zdFsiZGF0YSJdW3RhcmdldEFycmF5WzBdXVt0YXJnZXRBcnJheVsxXV07DQogICAgICAgICAgaWYgKF90aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT0gMSAmJiBzdWJCby5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBzdWJCby5zaGlmdCgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBzdWJCby5wdXNoKHN1YkxpbmVEYXRhKTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgICAvL3RoaXMuJGVtaXQoImlucHV0IiwgSlNPTi5zdHJpbmdpZnkoc3RyKSk7DQogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dUcmVlID0gZmFsc2U7DQogICAgfSwNCiAgICBkaWFsb2dDYW5jZWxUcmVlKCkgew0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOw0KICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IGZhbHNlOw0KICAgIH0sDQogICAgZ2V0Q2hlY2tlZChkYXRhLCBjaGVja2VkLCBpbmRldGVybWluYXRlKSB7DQogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7DQogICAgICAgIHRoaXMucHJvcHNEYXRhID0gW107DQogICAgICAgIHRoaXMucHJvcHNEYXRhLnB1c2goZGF0YSk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLnByb3BzRGF0YSA9IHRoaXMuJHJlZnMudHJlZS5nZXRDaGVja2VkTm9kZXMoKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIHRyZWVDbGljayhkYXRhLCBuLCBpKSB7DQogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7DQogICAgICAgIHRoaXMucHJvcHNEYXRhID0gW107DQogICAgICAgIHRoaXMucHJvcHNEYXRhLnB1c2goZGF0YSk7DQogICAgICB9DQogICAgfSwNCiAgICBjbGVhckFsbFNlbGVjdE9yZ3MoKSB7DQogICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBudWxsOw0KICAgICAgdGhpcy4kcmVmcy5vcmdUYWJsZS5jbGVhclNlbGVjdGlvbigpOw0KICAgIH0sDQogICAgcmVtb3ZlU2VsZWN0T3JncygpIHsNCiAgICAgIGxldCBhcnkgPSB0aGlzLiRyZWZzLnNlbGVjdFRyZWUuZ2V0Q2hlY2tlZE5vZGVzKCk7DQogICAgICBhcnkuZm9yRWFjaChpdGVtID0+IHsNCiAgICAgICAgdGhpcy5zZWxlY3RPcmdzLnJlbW92ZShpdGVtKTsNCiAgICAgICAgdGhpcy4kcmVmcy5vcmdUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24oaXRlbSwgZmFsc2UpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICByZW1vdmVTZWxlY3RPcmcoaXRlbSkgew0KICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgew0KICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsICIiKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuaW5wdXRWYWwuc3BsaWNlKGl0ZW0sIDEpOw0KICAgICAgICB0aGlzLnNob3dEYXRhLnNwbGljZShpdGVtLCAxKTsNCiAgICAgICAgdGhpcy5jYWxhY0lucHV0U3VmZml4SGVpZ2h0KCk7DQogICAgICAgIGxldCB2YWx1ZSA9ICIiOw0KICAgICAgICB0aGlzLmlucHV0VmFsLmZvckVhY2godmFsID0+IHsNCiAgICAgICAgICB2YWx1ZSArPSB2YWwudmFsdWUgKyAiLCI7DQogICAgICAgIH0pOw0KICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkgew0KICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHZhbHVlLmxlbmd0aCAtIDEpOw0KICAgICAgICB9DQogICAgICAgIGlmICh2YWx1ZSAhPSAiIikgew0KICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAifHwiICsgSlNPTi5zdHJpbmdpZnkodGhpcy5zaG93RGF0YSk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCB2YWx1ZSk7DQogICAgICB9DQogICAgfSwNCiAgICBjYWxhY0lucHV0U3VmZml4SGVpZ2h0KCkgew0KICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgIGlmICghdGhpcy4kcmVmcy50YWdTcGFucykgcmV0dXJuOw0KICAgICAgICBpZiAodGhpcy4kcmVmcy50YWdTcGFucy5vZmZzZXRIZWlnaHQpIHsNCiAgICAgICAgICB0aGlzLmlucHV0U3VmZml4SGVpZ2h0ID0gdGhpcy4kcmVmcy50YWdTcGFucy5vZmZzZXRIZWlnaHQgKyA1Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuaW5wdXRTdWZmaXhIZWlnaHQgPSAzMDsNCiAgICAgICAgfQ0KICAgICAgICAvLyDop6blj5Hpqozor4ENCiAgICAgICAgdGhpcy4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7DQogICAgICB9LCAwKTsNCiAgICB9LA0KICAgIGN1c3RvbURpYWxvZ1Nob3cocGFnZVBhcmFtKSB7DQogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gdHJ1ZTsNCiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nID0gcGFnZVBhcmFtLmN1c3RvbURpYWxvZzsNCiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLnF1ZXJ5VXJsID0NCiAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIg0KICAgICAgICAgID8gIiR7Zm9ybX0vZm9ybS9jdXN0b21EaWFsb2cvdjEvZ2V0TGlzdERhdGE/YWxpYXM9IiArDQogICAgICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5hbGlhcyArDQogICAgICAgICAgICAiJm1hcFBhcmFtPSIgKw0KICAgICAgICAgICAgKHRoaXMuY3VzdG9tRGlhbG9nLm1hcFBhcmFtID8gdGhpcy5jdXN0b21EaWFsb2cubWFwUGFyYW0gOiAiIikNCiAgICAgICAgICA6IHRoaXMuY3VzdG9tRGlhbG9nLnVybDsNCg0KICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7DQogICAgICBpZiAoIXRoaXMuY29tbWVudCAmJiBjb25kaXRpb25maWVsZC5sZW5ndGggPiAwKSB7DQogICAgICAgIGNvbmRpdGlvbmZpZWxkLmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgaWYgKGl0ZW0uY29udHJvbGxlclR5cGUgPT0gMSAmJiBpdGVtLmRiVHlwZSA9PSAidmFyY2hhciIpIHsNCiAgICAgICAgICAgIHRoaXMuY29tbWVudCArPSBpdGVtLmNvbW1lbnQgKyAiLCI7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgaWYgKHRoaXMuY29tbWVudCkgew0KICAgICAgICAgIHRoaXMucXVlcnlzU2hvdyA9IHRydWU7DQogICAgICAgICAgdGhpcy5jb21tZW50ID0NCiAgICAgICAgICAgICLpgJrov4ciICsNCiAgICAgICAgICAgIHRoaXMuY29tbWVudC5zdWJzdHJpbmcoMCwgdGhpcy5jb21tZW50Lmxlbmd0aCAtIDEpICsNCiAgICAgICAgICAgICLmn6Xor6IiOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmxlbmd0aCA8IDEpIHsNCiAgICAgICAgdGhpcy5zZWFyY2goKTsNCiAgICAgICAgdGhpcy5kaXNwbGF5ZmllbGQgPSBKU09OLnBhcnNlKHBhZ2VQYXJhbS5jdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkKTsNCiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIpIHsNCiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGlzcGxheWZpZWxkLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZFtpXS5maWVsZCA9IHRoaXMuZGlzcGxheWZpZWxkWw0KICAgICAgICAgICAgICBpDQogICAgICAgICAgICBdLmZpZWxkLnRvVXBwZXJDYXNlKCk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICBjdXN0b21EaWFsb2dUcmVlU2hvdyhwYWdlUGFyYW0pIHsNCiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nID0gcGFnZVBhcmFtLmN1c3RvbURpYWxvZzsNCiAgICAgIHZhciBjdXN0b21EaWFsb2cgPSB0aGlzLmN1c3RvbURpYWxvZzsNCiAgICAgIHZhciBtYXBQYXJhbSA9ICIiOw0KICAgICAgaWYgKHBhZ2VQYXJhbS5wYXJhbSAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgbWFwUGFyYW0gPSBKU09OLnN0cmluZ2lmeShwYWdlUGFyYW0ucGFyYW0pOw0KICAgICAgICBtYXBQYXJhbSA9IG1hcFBhcmFtLnN1YnN0cmluZygxLCBtYXBQYXJhbS5sZW5ndGggLSAxKTsNCiAgICAgIH0NCiAgICAgIHZhciByZXF1ZXN0VHlwZSA9DQogICAgICAgIGN1c3RvbURpYWxvZy5kc1R5cGUgPT0gImRhdGFTb3VyY2UiDQogICAgICAgICAgPyAiR0VUIg0KICAgICAgICAgIDogY3VzdG9tRGlhbG9nLnJlcXVlc3RUeXBlDQogICAgICAgICAgPyBjdXN0b21EaWFsb2cucmVxdWVzdFR5cGUNCiAgICAgICAgICA6ICJQT1NUIjsNCiAgICAgIHZhciB1cmwgPQ0KICAgICAgICAiJHtmb3JtfS9mb3JtL2N1c3RvbURpYWxvZy92MS9nZXRUcmVlRGF0YT9hbGlhcz0iICsNCiAgICAgICAgcGFnZVBhcmFtLmFsaWFzICsNCiAgICAgICAgIiZtYXBQYXJhbT0iICsNCiAgICAgICAgbWFwUGFyYW07DQogICAgICB2YXIgcGFyYW1zT2JqID0ge307DQogICAgICBpZiAoY3VzdG9tRGlhbG9nLmRzVHlwZSAhPSAiZGF0YVNvdXJjZSIpIHsNCiAgICAgICAgdXJsID0gY3VzdG9tRGlhbG9nLnVybDsNCiAgICAgICAgdmFyIHRlbXBsYXRlUGEgPSBjdXN0b21EaWFsb2cuZGF0YVBhcmFtOw0KICAgICAgICBpZiAoY3VzdG9tRGlhbG9nLmNvbmRpdGlvbmZpZWxkKSB7DQogICAgICAgICAgdmFyIGNvbmRpdGlvbnMgPSBKU09OLnBhcnNlKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7DQogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgY29uID0gY29uZGl0aW9uc1tpXTsNCiAgICAgICAgICAgIGlmIChyZXF1ZXN0VHlwZSA9PSAiUE9TVCIpIHsNCiAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlUGEpIHsNCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhID0gdGVtcGxhdGVQYS5yZXBsYWNlKA0KICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCgiXFx7IiArIGNvbi5maWVsZCArICJcXH0iLCAiZyIpLA0KICAgICAgICAgICAgICAgICAgY29uLmRlZmF1bHRWYWx1ZQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcGFyYW1zT2JqW2Nvbi5maWVsZF0gPSBjb24uZGVmYXVsdFZhbHVlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB2YXIgbGpDaGFyID0gdXJsLmluZGV4T2YoIj8iKSA9PSAtMSA/ICI/IiA6ICImIjsNCiAgICAgICAgICAgICAgdXJsID0gdXJsICsgbGpDaGFyICsgY29uLmZpZWxkICsgIj0iICsgY29uLmRlZmF1bHRWYWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRlbXBsYXRlUGEpIHsNCiAgICAgICAgICAgIHBhcmFtc09iaiA9IEpTT04ucGFyc2UodGVtcGxhdGVQYSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICB2YXIgcmVxdWVzdFBhcmFtcyA9IHt9Ow0KICAgICAgcmVxdWVzdFBhcmFtcy5yZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOw0KICAgICAgcmVxdWVzdFBhcmFtcy51cmwgPSB1cmw7DQogICAgICByZXF1ZXN0UGFyYW1zLnBhcmFtc09iaiA9IHBhcmFtc09iajsNCiAgICAgIHRoaXMuc2VhcmNoVHJlZShyZXF1ZXN0UGFyYW1zKTsNCiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd1RyZWUgPSB0cnVlOw0KICAgIH0sDQogICAgdG9UcmVlRGF0YShkYXRhLCBpZCwgcGlkLCBuYW1lLCBwdmFsdWUsIHJldHVyblN0cikgew0KICAgICAgLy8g5bu656uL5Liq5qCR5b2i57uT5p6ELOmcgOimgeWumuS5ieS4quacgOmhtuWxgueahOeItuiKgueCue+8jHB2YWx1ZeaYrzANCiAgICAgIHZhciB6dHJlZSA9IHRyYW5zbGF0ZURhdGFUb1RyZWUoZGF0YSwgcGlkLCBpZCwgbmFtZSk7DQogICAgICBmdW5jdGlvbiB0cmFuc2xhdGVEYXRhVG9UcmVlKGRhdGEsIHBpZCwgaWQsIG5hbWUpIHsNCiAgICAgICAgbGV0IHBhcmVudHMgPSBkYXRhLmZpbHRlcigNCiAgICAgICAgICB2YWx1ZSA9Pg0KICAgICAgICAgICAgdmFsdWVbaWRdID09IHZhbHVlW3BpZF0gfHwNCiAgICAgICAgICAgIHZhbHVlW3BpZF0gPT0gbnVsbCB8fA0KICAgICAgICAgICAgdmFsdWVbcGlkXSA9PSBudWxsIHx8DQogICAgICAgICAgICB2YWx1ZVtwaWRdID09IDANCiAgICAgICAgKTsNCiAgICAgICAgcGFyZW50cy5sYWJlbCA9IHBhcmVudHNbbmFtZV07DQogICAgICAgIGxldCBjaGlsZHJlbnMgPSBkYXRhLmZpbHRlcigNCiAgICAgICAgICB2YWx1ZSA9Pg0KICAgICAgICAgICAgdmFsdWVbcGlkXSAhPT0gInVuZGVmaW5lZCIgJiYNCiAgICAgICAgICAgIHZhbHVlW3BpZF0gIT0gbnVsbCAmJg0KICAgICAgICAgICAgdmFsdWVbaWRdICE9IHZhbHVlW3BpZF0NCiAgICAgICAgKTsNCiAgICAgICAgbGV0IHRyYW5zbGF0b3IgPSAocGFyZW50cywgY2hpbGRyZW5zKSA9PiB7DQogICAgICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7DQogICAgICAgICAgICBjaGlsZHJlbnMuZm9yRWFjaCgoY3VycmVudCwgaW5kZXgpID0+IHsNCiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbcGlkXSA9PT0gcGFyZW50W2lkXSkgew0KICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjaGlsZHJlbnMpKTsNCiAgICAgICAgICAgICAgICB0ZW1wLnNwbGljZShpbmRleCwgMSk7DQogICAgICAgICAgICAgICAgdHJhbnNsYXRvcihbY3VycmVudF0sIHRlbXApOw0KICAgICAgICAgICAgICAgIGN1cnJlbnQubGFiZWwgPSBjdXJyZW50W25hbWVdOw0KICAgICAgICAgICAgICAgIHR5cGVvZiBwYXJlbnQuY2hpbGRyZW5zICE9PSAidW5kZWZpbmVkIg0KICAgICAgICAgICAgICAgICAgPyBwYXJlbnQuY2hpbGRyZW5zLnB1c2goY3VycmVudCkNCiAgICAgICAgICAgICAgICAgIDogKHBhcmVudC5jaGlsZHJlbnMgPSBbY3VycmVudF0pOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgfTsNCiAgICAgICAgdHJhbnNsYXRvcihwYXJlbnRzLCBjaGlsZHJlbnMpOw0KDQogICAgICAgIHJldHVybiBwYXJlbnRzOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHp0cmVlOw0KICAgIH0NCiAgfQ0KfTsNCg=="},null]}