@sapui5/sap.fe.test 1.130.1 → 1.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/JestTemplatingHelper.js +2 -2
- package/src/sap/fe/test/JestTemplatingHelper.tsx +1 -1
- package/src/sap/fe/test/ListReport.js +4 -1
- package/src/sap/fe/test/Shell.js +277 -272
- package/src/sap/fe/test/Utils.js +4 -0
- package/src/sap/fe/test/builder/KPIBuilder.js +13 -0
- package/src/sap/fe/test/builder/MdcTableBuilder.js +13 -8
- package/src/sap/fe/test/library.js +3 -2
- package/src/sap/fe/test/library.ts +1 -0
package/package.json
CHANGED
package/src/sap/fe/test/.library
CHANGED
|
@@ -404,7 +404,7 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
404
404
|
const metaModelCache = {};
|
|
405
405
|
const getMetaModel = async function (sMetadataUrl) {
|
|
406
406
|
const oRequestor = _MetadataRequestor.create({}, "4.0", undefined, {}, {}, function () {
|
|
407
|
-
return
|
|
407
|
+
return false;
|
|
408
408
|
});
|
|
409
409
|
if (!metaModelCache[sMetadataUrl]) {
|
|
410
410
|
const oMetaModel = new ODataMetaModel(oRequestor, sMetadataUrl, undefined, {
|
|
@@ -902,4 +902,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
|
|
|
902
902
|
_exports.waitForEvent = waitForEvent;
|
|
903
903
|
return _exports;
|
|
904
904
|
}, false);
|
|
905
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb3MiLCJmZUJCIiwibWFjcm9GaWVsZCIsIm1hY3JvZGF0YSIsImxvZyIsImN1c3RvbURhdGEiLCJjb250cm9sIiwiY29udHJvbHMiLCJjb3JlIiwiZHQiLCJtIiwiZiIsImZsIiwiaW50ZXJuYWxNYWNybyIsIm1kYyIsImFjdGlvbnRvb2xiYXIiLCJtZGNGaWVsZCIsIm1kY1RhYmxlIiwidSIsInV4YXAiLCJtYWNyb01pY3JvQ2hhcnQiLCJtaWNyb0NoYXJ0IiwibWFjcm9UYWJsZSIsIm1kY3ZjIiwibWRjdiIsInZhbHVlSGVscCIsImNvbnRlbnRTd2l0Y2hlciIsImZpbHRlckJhciIsImZiQ29udHJvbHMiLCJyZXZlc2VOYW1lc3BhY2VNYXAiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV2ZXJzZU1hcCIsImN1cnJlbnROYW1lIiwic2VsZWN0IiwieHBhdGgiLCJ1c2VOYW1lc3BhY2VzIiwiZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwiX2dldFRlbXBsYXRlZFNlbGVjdG9yIiwieG1sZG9tIiwic2VsZWN0b3IiLCJyb290UGF0aCIsIm5vZGVOYW1lIiwic3RhcnRzV2l0aCIsIl9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzIiwic01ldGFkYXRhVXJsIiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJmYWtlU2lkZUVmZmVjdFNlcnZpY2UiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiVGVtcGxhdGVNb2RlbCIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZm4iLCJnZXREaWFnbm9zdGljcyIsInVuZGVmaW5lZCIsImdldFNoZWxsU2VydmljZXMiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiX29NZXRhTW9kZWwiLCJleHBlY3QiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiX2xvYWRSZXNvdXJjZVZpZXciLCJ2aWV3TmFtZSIsIm5hbWUiLCJyZXBsYWNlIiwidmlldyIsIkxvYWRlckV4dGVuc2lvbnMiLCJsb2FkUmVzb3VyY2UiLCJkb2N1bWVudEVsZW1lbnQiLCJydW5YUGF0aFF1ZXJ5IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJsZW5ndGgiLCJ0b05vdEhhdmVDb250cm9sIiwidG9IYXZlVGVtcGxhdGluZ0Vycm9ycyIsInhtbCIsInhtbFRleHQiLCJiYXNlNjRFbnRyaWVzIiwibWF0Y2giLCJlcnJvck1lc3NhZ2VzIiwibWFwIiwiX21lc3NhZ2UkbWF0Y2giLCJfbWVzc2FnZSRtYXRjaCQiLCJhdG9iIiwic2xpY2UiLCJqb2luIiwiX2V4cG9ydHMiLCJmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MIiwieG1sU3RyaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0WE1MIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsIm5vZGUiLCJzZXJpYWxpemVUb1N0cmluZyIsIlNUQVJUIiwiRU5EIiwiVUlEIiwiVUlEMiIsImxpbmVzIiwiY3VycmVudExpbmUiLCJsZXZlbCIsImF0dHJpYnV0ZXMiLCJuZXdsaW5lIiwicHVzaCIsInJlcGVhdCIsImFwcGVuZEF0dHJpYnV0ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiaW5jbHVkZXMiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsImFwcGVuZCIsInBhcnNlciIsInJlYWQiLCJjcmVhdGVQYXJzZXIiLCJvbk9wZW5UYWdTdGFydCIsIm9uT3BlblRhZ05hbWUiLCJvbkF0dHJOYW1lIiwidW5zaGlmdCIsIm9uQXR0clZhbHVlIiwib25PcGVuVGFnRW5kIiwic2VsZkNsb3NlZCIsIm9uQ2xvc2VUYWdTdGFydCIsIm9uQ2xvc2VUYWdOYW1lIiwib25DbG9zZVRhZ0VuZCIsInBhcnNlIiwidHJpbSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJhbGxPcHRpb25zIiwiZW50cmllcyIsImVkbXhGaWxlTmFtZSIsImZpbGVuYW1lIiwiX3JlZiIsIm9wdGlvbktleSIsIm9wdGlvblZhbHVlIiwidG9TdHJpbmciLCJiYXNlbmFtZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsInJlcXVpcmUiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwiY2xhc3NOYW1lT0RhdGFNb2RlbCIsInNjb3BlT2JqZWN0IiwiZ2V0TW9kZWwiLCJpc0EiLCJnZXRTZXJ2aWNlVXJsIiwiZ2V0U2VydmljZSIsImdldENhcGFiaWxpdGllcyIsInNlcnZpY2VJbnN0YW5jZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImRhdGFNb2RlbFBhdGgiLCJjb250ZXh0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlcyIsImZldGNoRW50aXR5Q29udGFpbmVyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRlbnQiLCJtb2RlbCIsImdldFRleHQiLCJURVNUVklFV0lEIiwiYXBwbHlGbGV4Q2hhbmdlcyIsImZsZXhDaGFuZ2VzIiwicmVzdWx0WE1MIiwiX2ZsZXhDaGFuZ2VzJGNoYW5nZXMiLCJfZmxleENoYW5nZXMkdmFyaWFudEQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaWQiLCJjaGFuZ2VzIiwiY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0IiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJ0eXBlIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJnZXRNYW5pZmVzdE9iamVjdCIsImdldEVudHJ5IiwiZ2V0TG9jYWxJZCIsInNJZCIsInNweU9uIiwiQXBwU3RvcmFnZSIsIlByb21pc2UiLCJMb2FkZXIiLCJDb21wb25lbnQiLCJVdGlscyIsIkZsZXhTdGF0ZSIsImluaXRpYWxpemUiLCJjb21wb25lbnRJZCIsIlhtbFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJjaGFuZ2VzQXBwbGllZCIsImdldENoYW5nZXNGcm9tWE1MIiwidG9CZSIsInZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsImZsYXRNYXAiLCJlIiwiZmlsdGVyIiwiYXR0ciIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsImNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIiwidGVtcGxhdGVkWG1sIiwiRE9NUGFyc2VyIiwieG1sRG9jIiwicGFyc2VGcm9tU3RyaW5nIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiWE1MUHJlcHJvY2Vzc29yIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJnZXRUZW1wbGF0ZWRYTUwiLCJqc3giLCJkZWZpbmVYTUxOYW1lc3BhY2VNYXAiLCJ0ZW1wbGF0ZWRYTUwiLCJzZXJpYWxpZWRYTUwiLCJub3QiLCJwcm9jZXNzVmlldyIsIl9vUHJlcHJvY2Vzc2VkVmlldyIsIm9WaWV3RG9jdW1lbnQiLCJvUHJlcHJvY2Vzc2VkVmlldyIsImFzRWxlbWVudCIsImFzU3RyaW5nIiwib3V0ZXJIVE1MIiwicHJvY2Vzc0ZyYWdtZW50IiwidGVzdERhdGEiLCJpbnB1dFhtbCIsImlucHV0RG9jIiwianNvbk1vZGVsIiwic2V0RGF0YSIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJzaG93Q3VzdG9tU3R5bGVDbGFzc2VzIiwidGFiQ291bnQiLCJDT05UUk9MSUQiLCJnZXRUYWIiLCJ0b0FkZCIsInRhYiIsImkiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJfY29udHJvbCRnZXRQYXJlbnQkZ2UiLCJfY29udHJvbCRnZXRQYXJlbnQkZ2UyIiwiaW5kZXhJblBhcmVudCIsImdldEFnZ3JlZ2F0aW9uIiwiaW5kZXhPZiIsImNhbGwiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJfaWQiLCJfaWQkcmVwbGFjZSIsIl9jb250cm9sJGFDdXN0b21TdHlsZSIsImdldElkIiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsIm9Db250cm9sS2V5IiwibVByb3BlcnRpZXMiLCJfcHJvcGVydHlWYWx1ZSIsIl9wcm9wZXJ0eVZhbHVlJHJlcGxhYyIsIl9wcm9wZXJ0eVZhbHVlMiIsIl9wcm9wZXJ0eVZhbHVlMyIsIl9wcm9wZXJ0eVZhbHVlMyRyZXBsYSIsIl9wcm9wZXJ0eVZhbHVlNCIsInByb3BlcnR5VmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwibUJpbmRpbmdJbmZvcyIsIl9iaW5kaW5nRGV0YWlsJHR5cGUiLCJiaW5kaW5nRGV0YWlsIiwib091dHB1dEZvcm1hdCIsImJpbmRpbmciLCJtQXNzb2NpYXRpb25zIiwiX2Fzc29jaWF0aW9uVmFsdWUiLCJfYXNzb2NpYXRpb25WYWx1ZSRqb2kiLCJfYXNzb2NpYXRpb25WYWx1ZTIiLCJhc3NvY2lhdGlvblZhbHVlIiwiYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQiLCJfYXNzb2NpYXRpb25WYWx1ZUVsZW0iLCJhQ3VzdG9tU3R5bGVDbGFzc2VzIiwibUV2ZW50UmVnaXN0cnkiLCJzdGFydEFnZ3JlZ2F0aW9uIiwic05hbWUiLCJvdXQiLCJlbmRBZ2dyZWdhdGlvbiIsImNvbnRyb2xUb1JlbmRlciIsIlNlcmlhbGl6ZXIiLCJzZXJpYWxpemUiLCJjcmVhdGVBd2FpdGVyIiwiZm5SZXNvbHZlIiwibXlQcm9taXNlIiwicHJvbWlzZSIsInJlbmRlckJ1aWxkaW5nQmxvY2tXaXRoTW9kZWxzIiwiYnVpbGRpbmdCbG9jayIsIk1hbmFnZWRPYmplY3QiLCJydW5XaXRoUHJlcHJvY2Vzc29ycyIsImdldENvbnRlbnQiLCJjb250cm9sU2V0dGluZ3MiLCJyZWdpc3Rlck1vY2tGcmFnbWVudHMiLCJfbGVuMiIsIl9rZXkyIiwib3JpZ2luYWxMb2FkVGVtcGxhdGUiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZVByb21pc2UiLCJsb2FkVGVtcGxhdGVTdHViIiwibW9ja0ltcGxlbWVudGF0aW9uIiwidGVtcGxhdGVOYW1lIiwiZXh0ZW5zaW9uIiwicGFyc2VYTUxTdHJpbmciLCJpbml0aWFsaXplQXBwQ29tcG9uZW50Iiwidmlld0xldmVsIiwiX2xvYWQiLCJfcmVmMiIsImNkc0ZpbGUiLCJfX2Rpcm5hbWUiLCJndWlkIiwidWlkIiwiY2RzQ29udGVudCIsInNhcCIsInJlZ2lzdGVyRmFrZUZyYWdtZW50IiwidWkiLCJkZWZpbmUiLCJfQXBwQ29tcG9uZW50IiwiQXBwQ29tcG9uZW50IiwibWV0YWRhdGEiLCJtYW5pZmVzdCIsImRhdGFTb3VyY2VzIiwibWFpblNlcnZpY2UiLCJ1cmkiLCJvZGF0YVZlcnNpb24iLCJkYXRhU291cmNlIiwicm91dGluZyIsInRhcmdldHMiLCJEZWZhdWx0IiwibWFpbkNvbnRleHRQYXRoIiwidmlld1R5cGUiLCJ2aWV3Q29udGVudCIsInBhZ2VDb250ZW50IiwiX2pzeCIsIlBhZ2UiLCJyb3V0ZXMiLCJwYXR0ZXJuIiwidGFyZ2V0IiwibW9ja0FwcENvbXBvbmVudCIsImluaXRpYWxpemVkIiwidiIsImdldFJvdXRlciIsImdldFRhcmdldCIsImxvYWQiLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIm9iamVjdCIsImZpbmRFbGVtZW50IiwiY29sbGVjdGlvbiIsImVsZW1lbnQiLCJpdGVtIiwid2FpdEZvckV2ZW50IiwiZXZlbnROYW1lIiwiYXR0YWNoRXZlbnRPbmNlIiwiZXZlbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgUmFuZ2UsIFJhbmdlcyB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9hZGVyRXh0ZW5zaW9ucyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9Mb2FkZXJFeHRlbnNpb25zXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgcGFyc2VYTUxTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSURpYWdub3N0aWNzLCBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTaWRlRWZmZWN0c0ZhY3RvcnkgZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L1VJNU1vY2tIZWxwZXJcIjtcbmltcG9ydCBQYWdlIGZyb20gXCJzYXAvbS9QYWdlXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgTG9hZGVyIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL2ZsZXhTdGF0ZS9Mb2FkZXJcIjtcbmltcG9ydCBYbWxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBBcHBTdG9yYWdlIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvU3RvcmFnZVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IHhwYXRoIGZyb20gXCJ4cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QgfSBmcm9tIFwiLi9KZXN0RmxleGliaWxpdHlIZWxwZXJcIjtcblxudHlwZSBQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGUgPSB7XG5cdG1vZGVsczoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0fTtcblx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xudHlwZSBNb2NrRnJhZ21lbnQgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0Y29udGVudDogc3RyaW5nO1xufTtcblxudHlwZSBKZXN0VGVtcGxhdGVkVmlldyA9IHtcblx0YXNFbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRhc1N0cmluZzogc3RyaW5nO1xufTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRtYWNybzogXCJzYXAuZmUubWFjcm9zXCIsXG5cdG1hY3JvczogXCJzYXAuZmUubWFjcm9zXCIsXG5cdGZlQkI6IFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiLFxuXHRtYWNyb0ZpZWxkOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0bWFjcm9kYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0bG9nOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y3VzdG9tRGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGNvbnRyb2w6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0Y29udHJvbHM6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiLFxuXHRjb3JlOiBcInNhcC51aS5jb3JlXCIsXG5cdGR0OiBcInNhcC51aS5kdFwiLFxuXHRtOiBcInNhcC5tXCIsXG5cdGY6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdGZsOiBcInNhcC51aS5mbFwiLFxuXHRpbnRlcm5hbE1hY3JvOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0bWRjOiBcInNhcC51aS5tZGNcIixcblx0YWN0aW9udG9vbGJhcjogXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXJcIixcblx0bWRjRmllbGQ6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRtZGNUYWJsZTogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdHU6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0dXhhcDogXCJzYXAudXhhcFwiLFxuXHRtYWNyb01pY3JvQ2hhcnQ6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdG1pY3JvQ2hhcnQ6IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0bWFjcm9UYWJsZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCIsXG5cdG1kY3ZjOiBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnRcIixcblx0bWRjdjogXCJzYXAudWkubWRjLnZhbHVlaGVscFwiLFxuXHR2YWx1ZUhlbHA6IFwic2FwLmZlLm1hY3Jvcy52YWx1ZUhlbHBcIixcblx0Y29udGVudFN3aXRjaGVyOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyXCIsXG5cdGZpbHRlckJhcjogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhclwiLFxuXHRmYkNvbnRyb2xzOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyXCJcbn07XG5jb25zdCByZXZlc2VOYW1lc3BhY2VNYXAgPSBPYmplY3Qua2V5cyhuYW1lU3BhY2VNYXApLnJlZHVjZSgocmV2ZXJzZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY3VycmVudE5hbWUpID0+IHtcblx0cmV2ZXJzZU1hcFtuYW1lU3BhY2VNYXBbY3VycmVudE5hbWVdXSA9IGN1cnJlbnROYW1lO1xuXHRyZXR1cm4gcmV2ZXJzZU1hcDtcbn0sIHt9KTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuY29uc3QgZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSA9IHsgY29tcHV0ZUZpZWxkR3JvdXBJZHM6ICgpID0+IFtdIH07XG5cbmZ1bmN0aW9uIF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb206IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvKipcblx0ICogaWYgYSByb290IGVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgZHVyaW5nIHRoZSB0ZW1wbGF0aW5nIGJ5IG91ciBKZXN0IFRlbXBsYXRpbmcgbWV0aG9kc1xuXHQgKiB0aGUgcm9vdCBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBzZWxlY3RvciBwYXRoLlxuXHQgKi9cblx0Y29uc3Qgcm9vdFBhdGggPSBcIi9yb290XCI7XG5cdHJldHVybiBgJHt4bWxkb20ubm9kZU5hbWUgPT09IFwicm9vdFwiICYmICFzZWxlY3Rvci5zdGFydHNXaXRoKHJvb3RQYXRoKSA/IHJvb3RQYXRoIDogXCJcIn0ke3NlbGVjdG9yfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPFByZVByb2Nlc3NvclNldHRpbmdzVHlwZT4ge1xuXHRsZXQgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzTWV0YWRhdGFVcmwpIHtcblx0XHRvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cdFx0aWYgKCFtTW9kZWxzLmhhc093blByb3BlcnR5KFwiY29udmVydGVyQ29udGV4dFwiKSkge1xuXHRcdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBjb252ZXJ0ZXJDb250ZXh0OiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCEpIH0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCwgZ2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpIH1cblx0fTtcblxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShmYWtlU2lkZUVmZmVjdFNlcnZpY2UgPz8gZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbD8uZ2V0T2JqZWN0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pKS50b0JlRGVmaW5lZCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG1Nb2RlbHNbc0tleV0gfHwgb01ldGFNb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRzZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXHRyZXR1cm4gc2V0dGluZ3M7XG59XG5cbmZ1bmN0aW9uIF9sb2FkUmVzb3VyY2VWaWV3KHZpZXdOYW1lOiBzdHJpbmcpOiBFbGVtZW50IHtcblx0Y29uc3QgbmFtZSA9IHZpZXdOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIikgKyBcIi52aWV3LnhtbFwiO1xuXHRjb25zdCB2aWV3ID0gTG9hZGVyRXh0ZW5zaW9ucy5sb2FkUmVzb3VyY2UobmFtZSk7XG5cdHJldHVybiB2aWV3LmRvY3VtZW50RWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrcyBmb3IgZXJyb3JzIGluIGB4bWxgIGNyZWF0ZWQgZHVyaW5nIHRlbXBsYXRpbmcgb2YgYW4gWE1MIHN0cmluZyBvclxuXHQgKiBhbiBYTUwgbm9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjaGVja2VzIGZvciB0aGUgeG1sIGVycm9ycyBjcmVhdGVkIGJ5IHRoZVxuXHQgKiBmdW5jdGlvbiBbQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLmNyZWF0ZUVycm9yWE1MXXtAbGluayBzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvciNjcmVhdGVFcnJvclhNTH0uXG5cdCAqIEBwYXJhbSB4bWwgWE1MIFN0cmluZyBvciBYTUwgTm9kZSB0byBiZSB0ZXN0ZWQgZm9yIGVycm9yc1xuXHQgKiBAcmV0dXJucyBKZXN0IE1hdGNoZXIgcmVzdWx0IG9iamVjdFxuXHQgKi9cblx0dG9IYXZlVGVtcGxhdGluZ0Vycm9ycyh4bWw6IHN0cmluZyB8IE5vZGUpIHtcblx0XHRjb25zdCB4bWxUZXh0ID0gdHlwZW9mIHhtbCA9PT0gXCJzdHJpbmdcIiA/IHhtbCA6IHNlcmlhbGl6ZVhNTCh4bWwpO1xuXHRcdGNvbnN0IGJhc2U2NEVudHJpZXM6IHN0cmluZ1tdID0geG1sVGV4dC5tYXRjaCgvQkJGXFwuYmFzZTY0RGVjb2RlXFwoJyhbXiddKiknXFwpL2dtKSB8fCAoW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gYmFzZTY0RW50cmllcy5tYXAoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBhdG9iKG1lc3NhZ2UubWF0Y2goLygnW14nXSopLyk/LlswXT8uc2xpY2UoMSkgfHwgXCJcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9KTtcblx0XHRpZiAoZXJyb3JNZXNzYWdlcy5sZW5ndGggPD0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gYFhNTCBUZW1wbGF0aW5nIHdpdGhvdXQgZXJyb3JzYCxcblx0XHRcdFx0cGFzczogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGVycm9yTWVzc2FnZXMuam9pbihcIlxcblwiKSxcblx0XHRcdFx0cGFzczogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoJHtfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sRG9tLCBjb250cm9sU2VsZWN0b3IpfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwYXJ0cyBvciB0aGUgY29tcGxldGUgZ2l2ZW4gWE1MIERPTSB0byBzdHJpbmcuXG4gKiBAcGFyYW0geG1sRG9tIERPTSBub2RlIHRoYXQgaXMgdG8gYmUgc2VyaWFsaXplZC5cbiAqIEBwYXJhbSBzZWxlY3RvciBPcHRpb25hbCBzZWxlY3RvciBvZiBzdWIgbm9kZXNcbiAqIEByZXR1cm5zIFhNTCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uICh4bWxEb206IE5vZGUsIHNlbGVjdG9yPzogc3RyaW5nKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0bGV0IHhtbFN0cmluZzogc3RyaW5nO1xuXHRpZiAoc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSkgYXMgTm9kZVtdO1xuXHRcdHhtbFN0cmluZyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhub2RlKSkuam9pbihcIlxcblwiKTtcblx0fSBlbHNlIHtcblx0XHR4bWxTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvbSk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gWE1MIGRvY3VtZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gb25seSBjb25zaWRlcnMgWE1MIHRhZ3MgYW5kIGF0dHJpYnV0ZXMsIGlnbm9yaW5nIGV2ZXJ5dGhpbmcgZWxzZSAodGV4dCwgY29tbWVudHMpLiBBZGRpdGlvbmFsbHksXG4gKiBhdHRyaWJ1dGUgdmFsdWVzIGNvbnRhaW5pbmcgYSB2YXJ5aW5nIFVJRCBhcmUgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICpcbiAqIEFuIFwiWE1MXCIgc3RyaW5nIGNvbnRhaW5pbmcgbXVsdGlwbGUgcm9vdCBlbGVtZW50cyBjYW4gYmUuXG4gKiBAcGFyYW0geG1sU3RyaW5nICBUaGUgaW5wdXQgWE1MIHN0cmluZy4gVGhpcyBmdW5jdGlvbiBhbHNvIGFjY2VwdHMgXCJYTUxcIiBzdHJpbmdzIHdpdGggbXVsdGlwbGUgcm9vdCBlbGVtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgWE1MIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdFhNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IFNUQVJUID0gXCI8X19YTUxfXz5cIixcblx0XHRFTkQgPSBcIjwvX19YTUxfXz5cIixcblx0XHRVSUQgPSAvdWlkLS1pZC1cXGR7MTN9LVxcZHsxLDN9Lyxcblx0XHRVSUQyID0gL2lkLVxcZHsxM30tXFxkezEsM30vLFxuXHRcdGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGxldCBjdXJyZW50TGluZSA9IFwiXCIsXG5cdFx0bGV2ZWwgPSAtMSxcblx0XHRhdHRyaWJ1dGVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmcgfVtdID0gW107XG5cblx0ZnVuY3Rpb24gbmV3bGluZSgpIHtcblx0XHRpZiAoY3VycmVudExpbmUgJiYgY3VycmVudExpbmUgIT09IFNUQVJUKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGN1cnJlbnRMaW5lKTtcblx0XHR9XG5cblx0XHRjdXJyZW50TGluZSA9IGxldmVsID4gMCA/IFwiICBcIi5yZXBlYXQobGV2ZWwpIDogXCJcIjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZEF0dHJpYnV0ZXMoKSB7XG5cdFx0aWYgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiAhYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiAhYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiBiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRsZXZlbCsrO1xuXHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuXHRcdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRcdGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlLnZhbHVlKSBjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUudmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0YXR0cmlidXRlcyA9IFtdO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZChkYXRhOiBSYW5nZSkge1xuXHRcdGN1cnJlbnRMaW5lICs9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHR9XG5cblx0Y29uc3QgcGFyc2VyID0gY3JlYXRlUGFyc2VyKHtcblx0XHRvbk9wZW5UYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdOYW1lOiBhcHBlbmQsXG5cblx0XHRvbkF0dHJOYW1lKGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnVuc2hpZnQoeyBuYW1lOiBwYXJzZXIucmVhZChkYXRhKSB9KTtcblx0XHR9LFxuXG5cdFx0b25BdHRyVmFsdWUoZGF0YTogUmFuZ2VzLkF0dHJWYWx1ZSkge1xuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpLnJlcGxhY2UoVUlELCBcInVpZC0taWRcIik7IC8vIHJlcGxhY2UgdmFyeWluZyBVSURzIHdpdGggYSBjb25zdGFudCB2YWx1ZVxuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpLnJlcGxhY2UoVUlEMiwgXCJpZFwiKTsgLy8gcmVwbGFjZSB2YXJ5aW5nIFVJRHMgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ0VuZChkYXRhOiBSYW5nZXMuT3BlblRhZ0VuZCkge1xuXHRcdFx0YXBwZW5kQXR0cmlidXRlcygpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdFx0aWYgKCFkYXRhLnNlbGZDbG9zZWQpIGxldmVsKys7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ05hbWU6IGFwcGVuZCxcblx0XHRvbkNsb3NlVGFnRW5kOiBhcHBlbmRcblx0fSk7XG5cblx0cGFyc2VyLnBhcnNlKFNUQVJUICsgeG1sU3RyaW5nICsgRU5EKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKGNkc1VybDogc3RyaW5nLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHQvLyBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIENEUyBjb21waWxlciBvcHRpb25zOiBJbmNsdWRlIHRoZW0gaW4gdGhlIGZpbGVuYW1lLiBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgcmVzdWx0cyBpZiB0aGUgc2FtZSBDRFMgc291cmNlXG5cdC8vIGZpbGUgaXMgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIChlLmcuIGluIGEgdGVzdCBydW5uaW5nIGluIHBhcmFsbGVsKVxuXHRjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucyk7XG5cdGFsbE9wdGlvbnMuc29ydCgoYSwgYikgPT4gYlswXS5sb2NhbGVDb21wYXJlKGFbMF0pKTtcblxuXHRjb25zdCBlZG14RmlsZU5hbWUgPVxuXHRcdGFsbE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGZpbGVuYW1lLCBbb3B0aW9uS2V5LCBvcHRpb25WYWx1ZV0pID0+IGAke2ZpbGVuYW1lfSMke29wdGlvbktleX09JHtvcHRpb25WYWx1ZS50b1N0cmluZygpfSNgLFxuXHRcdFx0cGF0aC5iYXNlbmFtZShjZHNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiXCIpXG5cdFx0KSArIFwiLnhtbFwiO1xuXG5cdGNvbnN0IGVkbXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGVkbXhGaWxlTmFtZSk7XG5cblx0ZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14RmlsZVBhdGgsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhGaWxlUGF0aDtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBDRFMgdG8gRURNWC5cbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcInNvdXJjZS5jZHNcIjogY2RzIH07XG5cblx0Ly8gYWxsb3cgdG8gaW5jbHVkZSBzdHVmZiBmcm9tIEBzYXAvY2RzL2NvbW1vblxuXHRpZiAoY2RzLmluY2x1ZGVzKFwiJ0BzYXAvY2RzL2NvbW1vbidcIikpIHtcblx0XHRzb3VyY2VzW1wiY29tbW9uLmNkc1wiXSA9IGZzLnJlYWRGaWxlU3luYyhyZXF1aXJlLnJlc29sdmUoXCJAc2FwL2Nkcy9jb21tb24uY2RzXCIpLCBcInV0Zi04XCIpO1xuXHR9XG5cblx0Y29uc3QgY3NuID0gY29tcGlsZXIuY29tcGlsZVNvdXJjZXMoc291cmNlcywge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogdHJ1ZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjbGFzc05hbWVPRGF0YU1vZGVsID0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiXG4pOiBQcm9taXNlPFNpZGVFZmZlY3RzU2VydmljZT4ge1xuXHRjb25zdCBzY29wZU9iamVjdCA9IHtcblx0XHRnZXRNb2RlbDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXNBOiAoKSA9PiBjbGFzc05hbWVPRGF0YU1vZGVsID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIsXG5cdFx0XHRcdGdldE1ldGFNb2RlbDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBtZXRhTW9kZWw7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldFNlcnZpY2VVcmw6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGdldFNlcnZpY2U6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGdldENhcGFiaWxpdGllczogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblx0Y29uc3Qgc2VydmljZUluc3RhbmNlID0gYXdhaXQgbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKHsgc2NvcGVPYmplY3QsIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH0pO1xuXHRyZXR1cm4gc2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc3N1ZS5pc3N1ZUNhdGVnb3J5ID09PSBpc3N1ZUNhdGVnb3J5ICYmIGlzc3VlLmlzc3VlU2V2ZXJpdHkgPT09IGlzc3VlU2V2ZXJpdHkgJiYgaXNzdWUuZGV0YWlscyA9PT0gZGV0YWlscztcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCA9IGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoXG5cdFx0PyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aCkgYXMgQ29udGV4dClcblx0XHQ6IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXR9YCkpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB1bmRlZmluZWQsIHt9LCB7fSwgZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9KTtcblx0aWYgKCFtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG5ldyAoT0RhdGFNZXRhTW9kZWwgYXMgYW55KShvUmVxdWVzdG9yLCBzTWV0YWRhdGFVcmwsIHVuZGVmaW5lZCwgeyBfcmVxdWVzdEFubm90YXRpb25DaGFuZ2VzOiAoKSA9PiBbXSB9KTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiA8VCA9IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvbj4oXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHByb3BlcnR5PzogVFxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0Pjtcblx0cmV0dXJuIHRhcmdldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVCaW5kaW5nID0gZnVuY3Rpb24gKGJpbmRpbmdTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbnR5cGUgTW9kZWxDb250ZW50ID0ge1xuXHRbbmFtZTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSBhIGJpbmRpbmcgYWdhaW5zdCBhIG1vZGVsLlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChmbGV4Q2hhbmdlczogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSwgb01ldGFNb2RlbDogTWV0YU1vZGVsLCByZXN1bHRYTUw6IGFueSkge1xuXHQvLyBwcmVmaXggSWRzXG5cdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHR9KTtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdChURVNUVklFV0lELCBmbGV4Q2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KSxcblx0XHRnZXRMb2NhbElkOiBqZXN0LmZuKChzSWQpID0+IHNJZClcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0amVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0amVzdC5zcHlPbihMb2FkZXIsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXG5cdGplc3Quc3B5T24oQ29tcG9uZW50IGFzIHVua25vd24gYXMgeyBnZXRDb21wb25lbnRCeUlkOiAoKSA9PiBBcHBDb21wb25lbnQgfSwgXCJnZXRDb21wb25lbnRCeUlkXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0amVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXG5cdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRleHBlY3QoY2hhbmdlc0FwcGxpZWQubGVuZ3RoKS50b0JlKGZsZXhDaGFuZ2VzPy5jaGFuZ2VzPy5sZW5ndGggPz8gMCArIGZsZXhDaGFuZ2VzPy52YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/Lmxlbmd0aCA/PyAwKTtcblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDaGFuZ2VzRnJvbVhNTCA9ICh4bWw6IGFueSkgPT5cblx0Wy4uLnhtbC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKV1cblx0XHQuZmxhdE1hcCgoZSkgPT4gWy4uLmUuYXR0cmlidXRlc10ubWFwKChhKSA9PiBhLm5hbWUpKVxuXHRcdC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuaW5jbHVkZXMoXCJzYXAudWkuZmwuYXBwbGllZENoYW5nZXNcIikpO1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbikge1xuXHRpZiAoIW1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSkge1xuXHRcdG1Nb2RlbHNbXCJzYXAuZmUuaTE4blwiXSA9IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsKCk7XG5cdH1cblxuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMsIGZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cblx0Ly9UaGlzIGNvbnRleHQgZm9yIG1hY3JvIHRlc3Rpbmdcblx0aWYgKG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdKSB7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tcInRoaXNcIl0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblxuXHRsZXQgcmVzdWx0WE1MID0gKGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKSkgYXMgYW55O1xuXG5cdGlmIChzTWV0YWRhdGFVcmwgJiYgZmxleENoYW5nZXMpIHtcblx0XHQvLyBhcHBseSBmbGV4IGNoYW5nZXNcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0cmVzdWx0WE1MID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhmbGV4Q2hhbmdlcywgb01ldGFNb2RlbCwgcmVzdWx0WE1MKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRlZFhNTCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRyZXR1cm4ganN4LmRlZmluZVhNTE5hbWVzcGFjZU1hcChyZXZlc2VOYW1lc3BhY2VNYXAsIGFzeW5jICgpID0+IHtcblx0XHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KFxuXHRcdFx0eG1sSW5wdXQsXG5cdFx0XHRzTWV0YWRhdGFVcmwsXG5cdFx0XHRtQmluZGluZ0NvbnRleHRzLFxuXHRcdFx0bU1vZGVscyxcblx0XHRcdGZsZXhDaGFuZ2VzLFxuXHRcdFx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlXG5cdFx0KTtcblx0XHRjb25zdCBzZXJpYWxpZWRYTUwgPSBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MLCB1bmRlZmluZWQpO1xuXHRcdGV4cGVjdChzZXJpYWxpZWRYTUwpLm5vdC50b0hhdmVUZW1wbGF0aW5nRXJyb3JzKCk7XG5cdFx0cmV0dXJuIHNlcmlhbGllZFhNTDtcblx0fSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHN0cmluZz47XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCB2aWV3IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdmlldyB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gc01ldGFkYXRhVXJsIFVybCBvZiB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbUJpbmRpbmdDb250ZXh0cyBNYXAgb2YgdGhlIGJpbmRpbmdDb250ZXh0cyB0byBzZXQgb24gdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBtTW9kZWxzIE1hcCBvZiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIGZsZXhDaGFuZ2VzIE9iamVjdCB3aXRoIFVJIGNoYW5nZXMgbGlrZSAnY2hhbmdlcycgb3IgJ3ZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcydcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCB2aWV3IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoXG5cdG5hbWU6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9XG4pOiBQcm9taXNlPEplc3RUZW1wbGF0ZWRWaWV3PiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0Y29uc3Qgb1ZpZXdEb2N1bWVudCA9IF9sb2FkUmVzb3VyY2VWaWV3KG5hbWUpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRsZXQgb1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhvVmlld0RvY3VtZW50LCB7IG5hbWU6IG5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0aWYgKGZsZXhDaGFuZ2VzKSB7XG5cdFx0b1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzID8/IFtdLCBvTWV0YU1vZGVsLCBvUHJlcHJvY2Vzc2VkVmlldyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRhc0VsZW1lbnQ6IG9QcmVwcm9jZXNzZWRWaWV3LFxuXHRcdGFzU3RyaW5nOiBmb3JtYXRYTUwob1ByZXByb2Nlc3NlZFZpZXc/Lm91dGVySFRNTCB8fCBcIlwiKVxuXHR9O1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gdGVzdERhdGEgVGVzdCBkYXRhIGNvbnNpc3RpbmdcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCBmcmFnbWVudCBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcmFnbWVudChuYW1lOiBzdHJpbmcsIHRlc3REYXRhOiB7IFttb2RlbDogc3RyaW5nXTogb2JqZWN0IH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBpbnB1dFhtbCA9IGA8cm9vdD48Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCIke25hbWV9XCIgdHlwZT1cIlhNTFwiIHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiIC8+PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cblx0Y29uc3QgaW5wdXREb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGlucHV0WG1sLCBcInRleHQveG1sXCIpO1xuXG5cdC8vIGJ1aWxkIG1vZGVsIGFuZCBiaW5kaW5ncyBmb3IgZ2l2ZW4gdGVzdCBkYXRhXG5cdGNvbnN0IHNldHRpbmdzID0ge1xuXHRcdG1vZGVsczoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogSlNPTk1vZGVsIH0sXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBvYmplY3QgfSxcblx0XHRhcHBDb21wb25lbnQ6IHsgZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksIGdldERpYWdub3N0aWNzOiAoKSA9PiB1bmRlZmluZWQgfVxuXHR9O1xuXHRmb3IgKGNvbnN0IG1vZGVsIGluIHRlc3REYXRhKSB7XG5cdFx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGpzb25Nb2RlbC5zZXREYXRhKHRlc3REYXRhW21vZGVsXSk7XG5cdFx0c2V0dGluZ3MubW9kZWxzW21vZGVsXSA9IGpzb25Nb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbbW9kZWxdID0gc2V0dGluZ3MubW9kZWxzW21vZGVsXS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdH1cblx0c2V0dGluZ3MuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZS5tb2NrUmV0dXJuVmFsdWUoZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpIGFzIGFueTtcblx0aWYgKGZyYWdtZW50cz8ubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG5cdFx0XHRmcmFnbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdC8vIEtlZXAgdGhlIGZyYWdtZW50IHJlc3VsdCBhcyBjaGlsZCBvZiByb290IG5vZGUgd2hlbiBmcmFnbWVudCBnZW5lcmF0ZXMgbXVsdGlwbGUgcm9vdCBjb250cm9sc1xuXHRjb25zdCB4bWxSZXN1bHQgPSByZXN1bHREb2MuY2hpbGRyZW4ubGVuZ3RoID4gMSA/IHJlc3VsdERvYy5vdXRlckhUTUwgOiByZXN1bHREb2MuaW5uZXJIVE1MO1xuXG5cdHJldHVybiBmb3JtYXRYTUwoeG1sUmVzdWx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbnRyb2woY29udHJvbFRvU2VyaWFsaXplPzogVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSwgc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGNvbnN0IFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsM30vO1xuXHRjb25zdCBDT05UUk9MSUQgPSAvaWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZCA9IDApIHtcblx0XHRsZXQgdGFiID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdFx0dGFiICs9IFwiXFx0XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0YWI7XG5cdH1cblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IGNvbnRyb2xEZXRhaWwgPSBcIlwiO1xuXHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wuZ2V0UGFyZW50KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpbmRleEluUGFyZW50ID0gKGNvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKT8uaW5kZXhPZj8uKGNvbnRyb2wpO1xuXHRcdFx0XHRcdGlmIChpbmRleEluUGFyZW50ID4gMCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbERldGFpbCArPSBgLFxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Y29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX0oYDtcblx0XHRcdHJldHVybiBjb250cm9sRGV0YWlsO1xuXHRcdH0sXG5cdFx0ZW5kOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gXCJ9KVwiO1xuXHRcdH0sXG5cdFx0bWlkZGxlOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRsZXQgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IGlkPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IGB7aWQ6ICR7TWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoaWQpID8gXCJfX2R5bmFtaWNJZFwiIDogaWR9YDtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHlWYWx1ZSA9IGNvbnRyb2wubVByb3BlcnRpZXNbb0NvbnRyb2xLZXldO1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHByb3BlcnR5VmFsdWU/LnJlcGxhY2U/LihVSUQsIFwidWlkLS1pZFwiKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiID8gcHJvcGVydHlWYWx1ZT8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5VmFsdWUpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHQvLyBTdHJpbmdpZnkgbWF5IGZhaWwgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnV0IGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke3Byb3BlcnR5VmFsdWV9YDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3MuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0RldGFpbCA9IHsgLi4uY29udHJvbC5tQmluZGluZ0luZm9zW29Db250cm9sS2V5XSB9O1xuXHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnR5cGU/Lm9PdXRwdXRGb3JtYXQpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnR5cGUub091dHB1dEZvcm1hdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwuYmluZGluZykge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke0pTT04uc3RyaW5naWZ5KGJpbmRpbmdEZXRhaWwpfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tQXNzb2NpYXRpb25zKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Bc3NvY2lhdGlvbnMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0bGV0IGFzc29jaWF0aW9uVmFsdWUgPSBjb250cm9sLm1Bc3NvY2lhdGlvbnNbb0NvbnRyb2xLZXldO1xuXHRcdFx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhc3NvY2lhdGlvblZhbHVlKSkge1xuXHRcdFx0XHRcdFx0YXNzb2NpYXRpb25WYWx1ZSA9IFthc3NvY2lhdGlvblZhbHVlXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YXNzb2NpYXRpb25WYWx1ZSA9IGFzc29jaWF0aW9uVmFsdWUubWFwKChhc3NvY2lhdGlvblZhbHVlRWxlbWVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIGFzc29jaWF0aW9uVmFsdWVFbGVtZW50ID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0XHRcdD8gYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIilcblx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tRXZlbnRSZWdpc3RyeSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IHRydWVgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBgO1xuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogeyBtQmluZGluZ0luZm9zOiBSZWNvcmQ8c3RyaW5nLCBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbz4gfSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IG91dCA9IGAsXFxuJHtnZXRUYWIoKX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQnVpbGRpbmdCbG9ja1dpdGhNb2RlbHMoYnVpbGRpbmdCbG9jazogeyBnZXRDb250ZW50OiBGdW5jdGlvbiB9LCBtb2RlbHM6IHsgW2tleTogc3RyaW5nXTogTW9kZWwgfSk6IENvbnRyb2wge1xuXHRyZXR1cm4gKE1hbmFnZWRPYmplY3QgYXMgTWFuYWdlZE9iamVjdEV4KS5ydW5XaXRoUHJlcHJvY2Vzc29ycyhcblx0XHQoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYnVpbGRpbmdCbG9jay5nZXRDb250ZW50KCk7XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRzZXR0aW5nczogZnVuY3Rpb24gKGNvbnRyb2xTZXR0aW5nczogeyBtb2RlbHM6IHVua25vd24gfSkge1xuXHRcdFx0XHRjb250cm9sU2V0dGluZ3MubW9kZWxzID0gbW9kZWxzO1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9ja0ZyYWdtZW50cyguLi5mcmFnbWVudHM6IE1vY2tGcmFnbWVudFtdKTogamVzdC5TcHlJbnN0YW5jZSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGNvbnN0IG9yaWdpbmFsTG9hZFRlbXBsYXRlID0gKFhNTFRlbXBsYXRlUHJvY2Vzc29yIGFzIGFueSkubG9hZFRlbXBsYXRlUHJvbWlzZTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3QgbG9hZFRlbXBsYXRlU3R1YiA9IGplc3Quc3B5T24oWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55LCBcImxvYWRUZW1wbGF0ZVByb21pc2VcIik7XG5cdGxvYWRUZW1wbGF0ZVN0dWIubW9ja0ltcGxlbWVudGF0aW9uKCgodGVtcGxhdGVOYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGlmIChmcmFnbWVudC5uYW1lID09PSB0ZW1wbGF0ZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlWE1MU3RyaW5nKGZyYWdtZW50LmNvbnRlbnQpWzBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3JpZ2luYWxMb2FkVGVtcGxhdGUodGVtcGxhdGVOYW1lLCBleHRlbnNpb24pO1xuXHR9KSBhcyAoKCkgPT4gRWxlbWVudCkgfCB1bmRlZmluZWQpO1xuXHRyZXR1cm4gbG9hZFRlbXBsYXRlU3R1Yjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGFuIGFwcENvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5jZHNGaWxlIFRoZSBwYXRoIHRvIHRoZSBDRFMgZmlsZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLm1haW5Db250ZXh0UGF0aCBUaGUgbWFpbiBjb250ZXh0IHBhdGggdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5wYWdlQ29udGVudCBUaGUgcGFnZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMuY29udGVudCBUaGUgY29udGVudCB0byB1c2UgZm9yIHRoZSBhcHAgQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb21wb25lbnRJZFxuICogQHBhcmFtIG9wdGlvbnMubWFuaWZlc3RTZXR0aW5nc1xuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gdmlld0xldmVsIFRoZSB2aWV3IGxldmVsIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHJldHVybnMgVGhlIGFwcGNvbXBvbmVudCBhbmQgdGVtcGxhdGVDb21wb25lbnQgdG8gdXNlIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplQXBwQ29tcG9uZW50KFxuXHRvcHRpb25zPzoge1xuXHRcdGNkc0ZpbGU/OiBzdHJpbmc7XG5cdFx0Y29tcG9uZW50SWQ/OiBzdHJpbmc7XG5cdFx0bWFpbkNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRcdHBhZ2VDb250ZW50PzogRnVuY3Rpb247XG5cdFx0bWFuaWZlc3RTZXR0aW5ncz86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncz47XG5cdFx0Y29udGVudD86IHt9O1xuXHR9LFxuXHRuYW1lPzogc3RyaW5nLFxuXHR2aWV3TGV2ZWw/OiBudW1iZXJcbik6IFByb21pc2U8eyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50IH0+IHtcblx0bGV0IGNkc0ZpbGUgPSBvcHRpb25zPy5jZHNGaWxlO1xuXHRpZiAoIWNkc0ZpbGUpIHtcblx0XHRjZHNGaWxlID0gY29tcGlsZUNEUyhwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4vZGF0YS9Qcm9kdWN0cy5jZHNcIikpO1xuXHR9XG5cdGNvbnN0IGd1aWQgPSB1aWQoKTtcblx0Y29uc3QgaWQgPSBvcHRpb25zPy5jb21wb25lbnRJZCA/PyBgc2FwLmZlLnRlc3QuJHtndWlkfWA7XG5cdGNvbnN0IGNkc0NvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoY2RzRmlsZSkudG9TdHJpbmcoKTtcblx0c2FwLmplc3QucmVnaXN0ZXJGYWtlRnJhZ21lbnQoYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vJG1ldGFkYXRhP3NhcC1sYW5ndWFnZT1FTmAsIGNkc0NvbnRlbnQpO1xuXG5cdHNhcC51aS5kZWZpbmUoYHNhcC9mZS90ZXN0LyR7Z3VpZH0vQ29tcG9uZW50YCwgW1wic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCJdLCBmdW5jdGlvbiAoX0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0XHRyZXR1cm4gQXBwQ29tcG9uZW50LmV4dGVuZChgc2FwLmZlLnRlc3QuJHtndWlkfS5Db21wb25lbnRgLCB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRtYW5pZmVzdDoge1xuXHRcdFx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdFx0XHRkYXRhU291cmNlczoge1xuXHRcdFx0XHRcdFx0XHRtYWluU2VydmljZToge1xuXHRcdFx0XHRcdFx0XHRcdHVyaTogYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vYCxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIk9EYXRhXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9kYXRhVmVyc2lvbjogXCI0LjBcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRcIlwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YVNvdXJjZTogXCJtYWluU2VydmljZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cm91dGluZzoge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRzOiB7XG5cdFx0XHRcdFx0XHRcdFx0RGVmYXVsdDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJDb21wb25lbnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IG5hbWUgPz8gXCJzYXAuZmUuY29yZS5mcG1cIixcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZpZXdMZXZlbDogdmlld0xldmVsLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC4uLihvcHRpb25zPy5tYW5pZmVzdFNldHRpbmdzID8/IHt9KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb3B0aW9ucz8ubWFpbkNvbnRleHRQYXRoID8/IFwiL1Byb2R1Y3RzXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld1R5cGU6IFwiSlNYXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlld0NvbnRlbnQ6IG9wdGlvbnM/LnBhZ2VDb250ZW50ID8/ICgoKSA9PiA8UGFnZT48L1BhZ2U+KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBvcHRpb25zPy5jb250ZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHJvdXRlczogW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IFwiOj9xdWVyeTpcIixcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBcIkRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0Y29uc3QgbW9ja0FwcENvbXBvbmVudCA9IChhd2FpdCBDb21wb25lbnQuY3JlYXRlKHsgbmFtZTogYHNhcC5mZS50ZXN0LiR7Z3VpZH1gLCBpZDogaWQgfSkpIGFzIEFwcENvbXBvbmVudDtcblxuXHRhd2FpdCBtb2NrQXBwQ29tcG9uZW50LmluaXRpYWxpemVkO1xuXHRjb25zdCB2ID0gYXdhaXQgKG1vY2tBcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KFwiRGVmYXVsdFwiKSBhcyB7IGxvYWQ/OiBGdW5jdGlvbiB9KS5sb2FkPy4oKTtcblx0cmV0dXJuIHsgYXBwQ29tcG9uZW50OiBtb2NrQXBwQ29tcG9uZW50LCB0ZW1wbGF0ZUNvbXBvbmVudDogdi5vYmplY3QgfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIG9yIHVuZGVmaW5lZCBpZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWxlbWVudChjb2xsZWN0aW9uOiBIVE1MQ29sbGVjdGlvbiwgc2VsZWN0b3I6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uaXRlbShpKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoc2VsZWN0b3IoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nLlxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBldmVudE5hbWVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRXZlbnQoY29udHJvbDogRXZlbnRQcm92aWRlciwgZXZlbnROYW1lOiBzdHJpbmcpOiBQcm9taXNlPEV2ZW50PiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGNvbnRyb2wuYXR0YWNoRXZlbnRPbmNlKGV2ZW50TmFtZSwgKGV2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0cmVzb2x2ZShldmVudCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztFQXNFQUEsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFTLGtDQUFrQyxDQUFDO0VBQzFEQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFFdEIsTUFBTUMsWUFBb0MsR0FBRztJQUM1Q0MsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCQyxJQUFJLEVBQUUsdUNBQXVDO0lBQzdDQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxTQUFTLEVBQUUsa0VBQWtFO0lBQzdFQyxHQUFHLEVBQUUsa0VBQWtFO0lBQ3ZFQyxVQUFVLEVBQUUsa0VBQWtFO0lBQzlFQyxPQUFPLEVBQUUsc0JBQXNC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
|
|
905
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb3MiLCJmZUJCIiwibWFjcm9GaWVsZCIsIm1hY3JvZGF0YSIsImxvZyIsImN1c3RvbURhdGEiLCJjb250cm9sIiwiY29udHJvbHMiLCJjb3JlIiwiZHQiLCJtIiwiZiIsImZsIiwiaW50ZXJuYWxNYWNybyIsIm1kYyIsImFjdGlvbnRvb2xiYXIiLCJtZGNGaWVsZCIsIm1kY1RhYmxlIiwidSIsInV4YXAiLCJtYWNyb01pY3JvQ2hhcnQiLCJtaWNyb0NoYXJ0IiwibWFjcm9UYWJsZSIsIm1kY3ZjIiwibWRjdiIsInZhbHVlSGVscCIsImNvbnRlbnRTd2l0Y2hlciIsImZpbHRlckJhciIsImZiQ29udHJvbHMiLCJyZXZlc2VOYW1lc3BhY2VNYXAiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV2ZXJzZU1hcCIsImN1cnJlbnROYW1lIiwic2VsZWN0IiwieHBhdGgiLCJ1c2VOYW1lc3BhY2VzIiwiZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwiX2dldFRlbXBsYXRlZFNlbGVjdG9yIiwieG1sZG9tIiwic2VsZWN0b3IiLCJyb290UGF0aCIsIm5vZGVOYW1lIiwic3RhcnRzV2l0aCIsIl9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzIiwic01ldGFkYXRhVXJsIiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJmYWtlU2lkZUVmZmVjdFNlcnZpY2UiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiVGVtcGxhdGVNb2RlbCIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZm4iLCJnZXREaWFnbm9zdGljcyIsInVuZGVmaW5lZCIsImdldFNoZWxsU2VydmljZXMiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiX29NZXRhTW9kZWwiLCJleHBlY3QiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiX2xvYWRSZXNvdXJjZVZpZXciLCJ2aWV3TmFtZSIsIm5hbWUiLCJyZXBsYWNlIiwidmlldyIsIkxvYWRlckV4dGVuc2lvbnMiLCJsb2FkUmVzb3VyY2UiLCJkb2N1bWVudEVsZW1lbnQiLCJydW5YUGF0aFF1ZXJ5IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJsZW5ndGgiLCJ0b05vdEhhdmVDb250cm9sIiwidG9IYXZlVGVtcGxhdGluZ0Vycm9ycyIsInhtbCIsInhtbFRleHQiLCJiYXNlNjRFbnRyaWVzIiwibWF0Y2giLCJlcnJvck1lc3NhZ2VzIiwibWFwIiwiX21lc3NhZ2UkbWF0Y2giLCJfbWVzc2FnZSRtYXRjaCQiLCJhdG9iIiwic2xpY2UiLCJqb2luIiwiX2V4cG9ydHMiLCJmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MIiwieG1sU3RyaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0WE1MIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsIm5vZGUiLCJzZXJpYWxpemVUb1N0cmluZyIsIlNUQVJUIiwiRU5EIiwiVUlEIiwiVUlEMiIsImxpbmVzIiwiY3VycmVudExpbmUiLCJsZXZlbCIsImF0dHJpYnV0ZXMiLCJuZXdsaW5lIiwicHVzaCIsInJlcGVhdCIsImFwcGVuZEF0dHJpYnV0ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiaW5jbHVkZXMiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsImFwcGVuZCIsInBhcnNlciIsInJlYWQiLCJjcmVhdGVQYXJzZXIiLCJvbk9wZW5UYWdTdGFydCIsIm9uT3BlblRhZ05hbWUiLCJvbkF0dHJOYW1lIiwidW5zaGlmdCIsIm9uQXR0clZhbHVlIiwib25PcGVuVGFnRW5kIiwic2VsZkNsb3NlZCIsIm9uQ2xvc2VUYWdTdGFydCIsIm9uQ2xvc2VUYWdOYW1lIiwib25DbG9zZVRhZ0VuZCIsInBhcnNlIiwidHJpbSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJhbGxPcHRpb25zIiwiZW50cmllcyIsImVkbXhGaWxlTmFtZSIsImZpbGVuYW1lIiwiX3JlZiIsIm9wdGlvbktleSIsIm9wdGlvblZhbHVlIiwidG9TdHJpbmciLCJiYXNlbmFtZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsInJlcXVpcmUiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwiY2xhc3NOYW1lT0RhdGFNb2RlbCIsInNjb3BlT2JqZWN0IiwiZ2V0TW9kZWwiLCJpc0EiLCJnZXRTZXJ2aWNlVXJsIiwiZ2V0U2VydmljZSIsImdldENhcGFiaWxpdGllcyIsInNlcnZpY2VJbnN0YW5jZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImRhdGFNb2RlbFBhdGgiLCJjb250ZXh0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlcyIsImZldGNoRW50aXR5Q29udGFpbmVyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRlbnQiLCJtb2RlbCIsImdldFRleHQiLCJURVNUVklFV0lEIiwiYXBwbHlGbGV4Q2hhbmdlcyIsImZsZXhDaGFuZ2VzIiwicmVzdWx0WE1MIiwiX2ZsZXhDaGFuZ2VzJGNoYW5nZXMiLCJfZmxleENoYW5nZXMkdmFyaWFudEQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaWQiLCJjaGFuZ2VzIiwiY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0IiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJ0eXBlIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJnZXRNYW5pZmVzdE9iamVjdCIsImdldEVudHJ5IiwiZ2V0TG9jYWxJZCIsInNJZCIsInNweU9uIiwiQXBwU3RvcmFnZSIsIlByb21pc2UiLCJMb2FkZXIiLCJDb21wb25lbnQiLCJVdGlscyIsIkZsZXhTdGF0ZSIsImluaXRpYWxpemUiLCJjb21wb25lbnRJZCIsIlhtbFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJjaGFuZ2VzQXBwbGllZCIsImdldENoYW5nZXNGcm9tWE1MIiwidG9CZSIsInZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsImZsYXRNYXAiLCJlIiwiZmlsdGVyIiwiYXR0ciIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsImNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIiwidGVtcGxhdGVkWG1sIiwiRE9NUGFyc2VyIiwieG1sRG9jIiwicGFyc2VGcm9tU3RyaW5nIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiWE1MUHJlcHJvY2Vzc29yIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJnZXRUZW1wbGF0ZWRYTUwiLCJqc3giLCJkZWZpbmVYTUxOYW1lc3BhY2VNYXAiLCJ0ZW1wbGF0ZWRYTUwiLCJzZXJpYWxpZWRYTUwiLCJub3QiLCJwcm9jZXNzVmlldyIsIl9vUHJlcHJvY2Vzc2VkVmlldyIsIm9WaWV3RG9jdW1lbnQiLCJvUHJlcHJvY2Vzc2VkVmlldyIsImFzRWxlbWVudCIsImFzU3RyaW5nIiwib3V0ZXJIVE1MIiwicHJvY2Vzc0ZyYWdtZW50IiwidGVzdERhdGEiLCJpbnB1dFhtbCIsImlucHV0RG9jIiwianNvbk1vZGVsIiwic2V0RGF0YSIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJzaG93Q3VzdG9tU3R5bGVDbGFzc2VzIiwidGFiQ291bnQiLCJDT05UUk9MSUQiLCJnZXRUYWIiLCJ0b0FkZCIsInRhYiIsImkiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJfY29udHJvbCRnZXRQYXJlbnQkZ2UiLCJfY29udHJvbCRnZXRQYXJlbnQkZ2UyIiwiaW5kZXhJblBhcmVudCIsImdldEFnZ3JlZ2F0aW9uIiwiaW5kZXhPZiIsImNhbGwiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJfaWQiLCJfaWQkcmVwbGFjZSIsIl9jb250cm9sJGFDdXN0b21TdHlsZSIsImdldElkIiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsIm9Db250cm9sS2V5IiwibVByb3BlcnRpZXMiLCJfcHJvcGVydHlWYWx1ZSIsIl9wcm9wZXJ0eVZhbHVlJHJlcGxhYyIsIl9wcm9wZXJ0eVZhbHVlMiIsIl9wcm9wZXJ0eVZhbHVlMyIsIl9wcm9wZXJ0eVZhbHVlMyRyZXBsYSIsIl9wcm9wZXJ0eVZhbHVlNCIsInByb3BlcnR5VmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwibUJpbmRpbmdJbmZvcyIsIl9iaW5kaW5nRGV0YWlsJHR5cGUiLCJiaW5kaW5nRGV0YWlsIiwib091dHB1dEZvcm1hdCIsImJpbmRpbmciLCJtQXNzb2NpYXRpb25zIiwiX2Fzc29jaWF0aW9uVmFsdWUiLCJfYXNzb2NpYXRpb25WYWx1ZSRqb2kiLCJfYXNzb2NpYXRpb25WYWx1ZTIiLCJhc3NvY2lhdGlvblZhbHVlIiwiYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQiLCJfYXNzb2NpYXRpb25WYWx1ZUVsZW0iLCJhQ3VzdG9tU3R5bGVDbGFzc2VzIiwibUV2ZW50UmVnaXN0cnkiLCJzdGFydEFnZ3JlZ2F0aW9uIiwic05hbWUiLCJvdXQiLCJlbmRBZ2dyZWdhdGlvbiIsImNvbnRyb2xUb1JlbmRlciIsIlNlcmlhbGl6ZXIiLCJzZXJpYWxpemUiLCJjcmVhdGVBd2FpdGVyIiwiZm5SZXNvbHZlIiwibXlQcm9taXNlIiwicHJvbWlzZSIsInJlbmRlckJ1aWxkaW5nQmxvY2tXaXRoTW9kZWxzIiwiYnVpbGRpbmdCbG9jayIsIk1hbmFnZWRPYmplY3QiLCJydW5XaXRoUHJlcHJvY2Vzc29ycyIsImdldENvbnRlbnQiLCJjb250cm9sU2V0dGluZ3MiLCJyZWdpc3Rlck1vY2tGcmFnbWVudHMiLCJfbGVuMiIsIl9rZXkyIiwib3JpZ2luYWxMb2FkVGVtcGxhdGUiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZVByb21pc2UiLCJsb2FkVGVtcGxhdGVTdHViIiwibW9ja0ltcGxlbWVudGF0aW9uIiwidGVtcGxhdGVOYW1lIiwiZXh0ZW5zaW9uIiwicGFyc2VYTUxTdHJpbmciLCJpbml0aWFsaXplQXBwQ29tcG9uZW50Iiwidmlld0xldmVsIiwiX2xvYWQiLCJfcmVmMiIsImNkc0ZpbGUiLCJfX2Rpcm5hbWUiLCJndWlkIiwidWlkIiwiY2RzQ29udGVudCIsInNhcCIsInJlZ2lzdGVyRmFrZUZyYWdtZW50IiwidWkiLCJkZWZpbmUiLCJfQXBwQ29tcG9uZW50IiwiQXBwQ29tcG9uZW50IiwibWV0YWRhdGEiLCJtYW5pZmVzdCIsImRhdGFTb3VyY2VzIiwibWFpblNlcnZpY2UiLCJ1cmkiLCJvZGF0YVZlcnNpb24iLCJkYXRhU291cmNlIiwicm91dGluZyIsInRhcmdldHMiLCJEZWZhdWx0IiwibWFpbkNvbnRleHRQYXRoIiwidmlld1R5cGUiLCJ2aWV3Q29udGVudCIsInBhZ2VDb250ZW50IiwiX2pzeCIsIlBhZ2UiLCJyb3V0ZXMiLCJwYXR0ZXJuIiwidGFyZ2V0IiwibW9ja0FwcENvbXBvbmVudCIsImluaXRpYWxpemVkIiwidiIsImdldFJvdXRlciIsImdldFRhcmdldCIsImxvYWQiLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIm9iamVjdCIsImZpbmRFbGVtZW50IiwiY29sbGVjdGlvbiIsImVsZW1lbnQiLCJpdGVtIiwid2FpdEZvckV2ZW50IiwiZXZlbnROYW1lIiwiYXR0YWNoRXZlbnRPbmNlIiwiZXZlbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgUmFuZ2UsIFJhbmdlcyB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9hZGVyRXh0ZW5zaW9ucyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9Mb2FkZXJFeHRlbnNpb25zXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgcGFyc2VYTUxTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSURpYWdub3N0aWNzLCBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTaWRlRWZmZWN0c0ZhY3RvcnkgZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L1VJNU1vY2tIZWxwZXJcIjtcbmltcG9ydCBQYWdlIGZyb20gXCJzYXAvbS9QYWdlXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgTG9hZGVyIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL2ZsZXhTdGF0ZS9Mb2FkZXJcIjtcbmltcG9ydCBYbWxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBBcHBTdG9yYWdlIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvU3RvcmFnZVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IHhwYXRoIGZyb20gXCJ4cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QgfSBmcm9tIFwiLi9KZXN0RmxleGliaWxpdHlIZWxwZXJcIjtcblxudHlwZSBQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGUgPSB7XG5cdG1vZGVsczoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0fTtcblx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xudHlwZSBNb2NrRnJhZ21lbnQgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0Y29udGVudDogc3RyaW5nO1xufTtcblxudHlwZSBKZXN0VGVtcGxhdGVkVmlldyA9IHtcblx0YXNFbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRhc1N0cmluZzogc3RyaW5nO1xufTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRtYWNybzogXCJzYXAuZmUubWFjcm9zXCIsXG5cdG1hY3JvczogXCJzYXAuZmUubWFjcm9zXCIsXG5cdGZlQkI6IFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiLFxuXHRtYWNyb0ZpZWxkOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0bWFjcm9kYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0bG9nOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y3VzdG9tRGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGNvbnRyb2w6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0Y29udHJvbHM6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiLFxuXHRjb3JlOiBcInNhcC51aS5jb3JlXCIsXG5cdGR0OiBcInNhcC51aS5kdFwiLFxuXHRtOiBcInNhcC5tXCIsXG5cdGY6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdGZsOiBcInNhcC51aS5mbFwiLFxuXHRpbnRlcm5hbE1hY3JvOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0bWRjOiBcInNhcC51aS5tZGNcIixcblx0YWN0aW9udG9vbGJhcjogXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXJcIixcblx0bWRjRmllbGQ6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRtZGNUYWJsZTogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdHU6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0dXhhcDogXCJzYXAudXhhcFwiLFxuXHRtYWNyb01pY3JvQ2hhcnQ6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdG1pY3JvQ2hhcnQ6IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0bWFjcm9UYWJsZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCIsXG5cdG1kY3ZjOiBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnRcIixcblx0bWRjdjogXCJzYXAudWkubWRjLnZhbHVlaGVscFwiLFxuXHR2YWx1ZUhlbHA6IFwic2FwLmZlLm1hY3Jvcy52YWx1ZUhlbHBcIixcblx0Y29udGVudFN3aXRjaGVyOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyXCIsXG5cdGZpbHRlckJhcjogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhclwiLFxuXHRmYkNvbnRyb2xzOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyXCJcbn07XG5jb25zdCByZXZlc2VOYW1lc3BhY2VNYXAgPSBPYmplY3Qua2V5cyhuYW1lU3BhY2VNYXApLnJlZHVjZSgocmV2ZXJzZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY3VycmVudE5hbWUpID0+IHtcblx0cmV2ZXJzZU1hcFtuYW1lU3BhY2VNYXBbY3VycmVudE5hbWVdXSA9IGN1cnJlbnROYW1lO1xuXHRyZXR1cm4gcmV2ZXJzZU1hcDtcbn0sIHt9KTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuY29uc3QgZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSA9IHsgY29tcHV0ZUZpZWxkR3JvdXBJZHM6ICgpID0+IFtdIH07XG5cbmZ1bmN0aW9uIF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb206IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvKipcblx0ICogaWYgYSByb290IGVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgZHVyaW5nIHRoZSB0ZW1wbGF0aW5nIGJ5IG91ciBKZXN0IFRlbXBsYXRpbmcgbWV0aG9kc1xuXHQgKiB0aGUgcm9vdCBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBzZWxlY3RvciBwYXRoLlxuXHQgKi9cblx0Y29uc3Qgcm9vdFBhdGggPSBcIi9yb290XCI7XG5cdHJldHVybiBgJHt4bWxkb20ubm9kZU5hbWUgPT09IFwicm9vdFwiICYmICFzZWxlY3Rvci5zdGFydHNXaXRoKHJvb3RQYXRoKSA/IHJvb3RQYXRoIDogXCJcIn0ke3NlbGVjdG9yfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pOiBQcm9taXNlPFByZVByb2Nlc3NvclNldHRpbmdzVHlwZT4ge1xuXHRsZXQgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdGlmIChzTWV0YWRhdGFVcmwpIHtcblx0XHRvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdFx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cdFx0aWYgKCFtTW9kZWxzLmhhc093blByb3BlcnR5KFwiY29udmVydGVyQ29udGV4dFwiKSkge1xuXHRcdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBjb252ZXJ0ZXJDb250ZXh0OiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCEpIH0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5rZXlzKG1Nb2RlbHMpLmZvckVhY2goZnVuY3Rpb24gKHNNb2RlbE5hbWUpIHtcblx0XHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IHNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCwgZ2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpIH1cblx0fTtcblxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShmYWtlU2lkZUVmZmVjdFNlcnZpY2UgPz8gZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbD8uZ2V0T2JqZWN0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pKS50b0JlRGVmaW5lZCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG1Nb2RlbHNbc0tleV0gfHwgb01ldGFNb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRzZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXHRyZXR1cm4gc2V0dGluZ3M7XG59XG5cbmZ1bmN0aW9uIF9sb2FkUmVzb3VyY2VWaWV3KHZpZXdOYW1lOiBzdHJpbmcpOiBFbGVtZW50IHtcblx0Y29uc3QgbmFtZSA9IHZpZXdOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIikgKyBcIi52aWV3LnhtbFwiO1xuXHRjb25zdCB2aWV3ID0gTG9hZGVyRXh0ZW5zaW9ucy5sb2FkUmVzb3VyY2UobmFtZSk7XG5cdHJldHVybiB2aWV3LmRvY3VtZW50RWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrcyBmb3IgZXJyb3JzIGluIGB4bWxgIGNyZWF0ZWQgZHVyaW5nIHRlbXBsYXRpbmcgb2YgYW4gWE1MIHN0cmluZyBvclxuXHQgKiBhbiBYTUwgbm9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjaGVja2VzIGZvciB0aGUgeG1sIGVycm9ycyBjcmVhdGVkIGJ5IHRoZVxuXHQgKiBmdW5jdGlvbiBbQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLmNyZWF0ZUVycm9yWE1MXXtAbGluayBzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvciNjcmVhdGVFcnJvclhNTH0uXG5cdCAqIEBwYXJhbSB4bWwgWE1MIFN0cmluZyBvciBYTUwgTm9kZSB0byBiZSB0ZXN0ZWQgZm9yIGVycm9yc1xuXHQgKiBAcmV0dXJucyBKZXN0IE1hdGNoZXIgcmVzdWx0IG9iamVjdFxuXHQgKi9cblx0dG9IYXZlVGVtcGxhdGluZ0Vycm9ycyh4bWw6IHN0cmluZyB8IE5vZGUpIHtcblx0XHRjb25zdCB4bWxUZXh0ID0gdHlwZW9mIHhtbCA9PT0gXCJzdHJpbmdcIiA/IHhtbCA6IHNlcmlhbGl6ZVhNTCh4bWwpO1xuXHRcdGNvbnN0IGJhc2U2NEVudHJpZXM6IHN0cmluZ1tdID0geG1sVGV4dC5tYXRjaCgvQkJGXFwuYmFzZTY0RGVjb2RlXFwoJyhbXiddKiknXFwpL2dtKSB8fCAoW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gYmFzZTY0RW50cmllcy5tYXAoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBhdG9iKG1lc3NhZ2UubWF0Y2goLygnW14nXSopLyk/LlswXT8uc2xpY2UoMSkgfHwgXCJcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9KTtcblx0XHRpZiAoZXJyb3JNZXNzYWdlcy5sZW5ndGggPD0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gYFhNTCBUZW1wbGF0aW5nIHdpdGhvdXQgZXJyb3JzYCxcblx0XHRcdFx0cGFzczogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGVycm9yTWVzc2FnZXMuam9pbihcIlxcblwiKSxcblx0XHRcdFx0cGFzczogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoJHtfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sRG9tLCBjb250cm9sU2VsZWN0b3IpfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwYXJ0cyBvciB0aGUgY29tcGxldGUgZ2l2ZW4gWE1MIERPTSB0byBzdHJpbmcuXG4gKiBAcGFyYW0geG1sRG9tIERPTSBub2RlIHRoYXQgaXMgdG8gYmUgc2VyaWFsaXplZC5cbiAqIEBwYXJhbSBzZWxlY3RvciBPcHRpb25hbCBzZWxlY3RvciBvZiBzdWIgbm9kZXNcbiAqIEByZXR1cm5zIFhNTCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uICh4bWxEb206IE5vZGUsIHNlbGVjdG9yPzogc3RyaW5nKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0bGV0IHhtbFN0cmluZzogc3RyaW5nO1xuXHRpZiAoc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSkgYXMgTm9kZVtdO1xuXHRcdHhtbFN0cmluZyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhub2RlKSkuam9pbihcIlxcblwiKTtcblx0fSBlbHNlIHtcblx0XHR4bWxTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvbSk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gWE1MIGRvY3VtZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gb25seSBjb25zaWRlcnMgWE1MIHRhZ3MgYW5kIGF0dHJpYnV0ZXMsIGlnbm9yaW5nIGV2ZXJ5dGhpbmcgZWxzZSAodGV4dCwgY29tbWVudHMpLiBBZGRpdGlvbmFsbHksXG4gKiBhdHRyaWJ1dGUgdmFsdWVzIGNvbnRhaW5pbmcgYSB2YXJ5aW5nIFVJRCBhcmUgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICpcbiAqIEFuIFwiWE1MXCIgc3RyaW5nIGNvbnRhaW5pbmcgbXVsdGlwbGUgcm9vdCBlbGVtZW50cyBjYW4gYmUuXG4gKiBAcGFyYW0geG1sU3RyaW5nICBUaGUgaW5wdXQgWE1MIHN0cmluZy4gVGhpcyBmdW5jdGlvbiBhbHNvIGFjY2VwdHMgXCJYTUxcIiBzdHJpbmdzIHdpdGggbXVsdGlwbGUgcm9vdCBlbGVtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgWE1MIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdFhNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IFNUQVJUID0gXCI8X19YTUxfXz5cIixcblx0XHRFTkQgPSBcIjwvX19YTUxfXz5cIixcblx0XHRVSUQgPSAvdWlkLS1pZC1cXGR7MTN9LVxcZHsxLDN9Lyxcblx0XHRVSUQyID0gL2lkLVxcZHsxM30tXFxkezEsM30vLFxuXHRcdGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGxldCBjdXJyZW50TGluZSA9IFwiXCIsXG5cdFx0bGV2ZWwgPSAtMSxcblx0XHRhdHRyaWJ1dGVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmcgfVtdID0gW107XG5cblx0ZnVuY3Rpb24gbmV3bGluZSgpIHtcblx0XHRpZiAoY3VycmVudExpbmUgJiYgY3VycmVudExpbmUgIT09IFNUQVJUKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGN1cnJlbnRMaW5lKTtcblx0XHR9XG5cblx0XHRjdXJyZW50TGluZSA9IGxldmVsID4gMCA/IFwiICBcIi5yZXBlYXQobGV2ZWwpIDogXCJcIjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZEF0dHJpYnV0ZXMoKSB7XG5cdFx0aWYgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiAhYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiAhYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiBiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRsZXZlbCsrO1xuXHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuXHRcdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRcdGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlLnZhbHVlKSBjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUudmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0YXR0cmlidXRlcyA9IFtdO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZChkYXRhOiBSYW5nZSkge1xuXHRcdGN1cnJlbnRMaW5lICs9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHR9XG5cblx0Y29uc3QgcGFyc2VyID0gY3JlYXRlUGFyc2VyKHtcblx0XHRvbk9wZW5UYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdOYW1lOiBhcHBlbmQsXG5cblx0XHRvbkF0dHJOYW1lKGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnVuc2hpZnQoeyBuYW1lOiBwYXJzZXIucmVhZChkYXRhKSB9KTtcblx0XHR9LFxuXG5cdFx0b25BdHRyVmFsdWUoZGF0YTogUmFuZ2VzLkF0dHJWYWx1ZSkge1xuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpLnJlcGxhY2UoVUlELCBcInVpZC0taWRcIik7IC8vIHJlcGxhY2UgdmFyeWluZyBVSURzIHdpdGggYSBjb25zdGFudCB2YWx1ZVxuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpLnJlcGxhY2UoVUlEMiwgXCJpZFwiKTsgLy8gcmVwbGFjZSB2YXJ5aW5nIFVJRHMgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ0VuZChkYXRhOiBSYW5nZXMuT3BlblRhZ0VuZCkge1xuXHRcdFx0YXBwZW5kQXR0cmlidXRlcygpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdFx0aWYgKCFkYXRhLnNlbGZDbG9zZWQpIGxldmVsKys7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ05hbWU6IGFwcGVuZCxcblx0XHRvbkNsb3NlVGFnRW5kOiBhcHBlbmRcblx0fSk7XG5cblx0cGFyc2VyLnBhcnNlKFNUQVJUICsgeG1sU3RyaW5nICsgRU5EKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKGNkc1VybDogc3RyaW5nLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHQvLyBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIENEUyBjb21waWxlciBvcHRpb25zOiBJbmNsdWRlIHRoZW0gaW4gdGhlIGZpbGVuYW1lLiBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgcmVzdWx0cyBpZiB0aGUgc2FtZSBDRFMgc291cmNlXG5cdC8vIGZpbGUgaXMgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIChlLmcuIGluIGEgdGVzdCBydW5uaW5nIGluIHBhcmFsbGVsKVxuXHRjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucyk7XG5cdGFsbE9wdGlvbnMuc29ydCgoYSwgYikgPT4gYlswXS5sb2NhbGVDb21wYXJlKGFbMF0pKTtcblxuXHRjb25zdCBlZG14RmlsZU5hbWUgPVxuXHRcdGFsbE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGZpbGVuYW1lLCBbb3B0aW9uS2V5LCBvcHRpb25WYWx1ZV0pID0+IGAke2ZpbGVuYW1lfSMke29wdGlvbktleX09JHtvcHRpb25WYWx1ZS50b1N0cmluZygpfSNgLFxuXHRcdFx0cGF0aC5iYXNlbmFtZShjZHNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiXCIpXG5cdFx0KSArIFwiLnhtbFwiO1xuXG5cdGNvbnN0IGVkbXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGVkbXhGaWxlTmFtZSk7XG5cblx0ZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14RmlsZVBhdGgsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhGaWxlUGF0aDtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBDRFMgdG8gRURNWC5cbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcInNvdXJjZS5jZHNcIjogY2RzIH07XG5cblx0Ly8gYWxsb3cgdG8gaW5jbHVkZSBzdHVmZiBmcm9tIEBzYXAvY2RzL2NvbW1vblxuXHRpZiAoY2RzLmluY2x1ZGVzKFwiJ0BzYXAvY2RzL2NvbW1vbidcIikpIHtcblx0XHRzb3VyY2VzW1wiY29tbW9uLmNkc1wiXSA9IGZzLnJlYWRGaWxlU3luYyhyZXF1aXJlLnJlc29sdmUoXCJAc2FwL2Nkcy9jb21tb24uY2RzXCIpLCBcInV0Zi04XCIpO1xuXHR9XG5cblx0Y29uc3QgY3NuID0gY29tcGlsZXIuY29tcGlsZVNvdXJjZXMoc291cmNlcywge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogdHJ1ZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjbGFzc05hbWVPRGF0YU1vZGVsID0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiXG4pOiBQcm9taXNlPFNpZGVFZmZlY3RzU2VydmljZT4ge1xuXHRjb25zdCBzY29wZU9iamVjdCA9IHtcblx0XHRnZXRNb2RlbDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXNBOiAoKSA9PiBjbGFzc05hbWVPRGF0YU1vZGVsID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIsXG5cdFx0XHRcdGdldE1ldGFNb2RlbDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBtZXRhTW9kZWw7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldFNlcnZpY2VVcmw6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGdldFNlcnZpY2U6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGdldENhcGFiaWxpdGllczogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblx0Y29uc3Qgc2VydmljZUluc3RhbmNlID0gYXdhaXQgbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKHsgc2NvcGVPYmplY3QsIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH0pO1xuXHRyZXR1cm4gc2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc3N1ZS5pc3N1ZUNhdGVnb3J5ID09PSBpc3N1ZUNhdGVnb3J5ICYmIGlzc3VlLmlzc3VlU2V2ZXJpdHkgPT09IGlzc3VlU2V2ZXJpdHkgJiYgaXNzdWUuZGV0YWlscyA9PT0gZGV0YWlscztcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCA9IGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoXG5cdFx0PyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aCkgYXMgQ29udGV4dClcblx0XHQ6IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXR9YCkpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB1bmRlZmluZWQsIHt9LCB7fSwgZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIHsgX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlczogKCkgPT4gW10gfSk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24gPFQgPSBQcm9wZXJ0eSB8IEVudGl0eVNldCB8IEFueUFubm90YXRpb24+KFxuXHRlbnRpdHlTZXQ6IEVudGl0eVNldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eT86IFRcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCB0YXJnZXRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+ID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdHRhcmdldE9iamVjdDogcHJvcGVydHksXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRyZXR1cm4gYmluZGluZ0VsZW1lbnQuZm9ybWF0dGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG59O1xuXG50eXBlIE1vZGVsQ29udGVudCA9IHtcblx0W25hbWU6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgYSBiaW5kaW5nIGFnYWluc3QgYSBtb2RlbC5cbiAqIEBwYXJhbSBiaW5kaW5nU3RyaW5nIFRoZSBiaW5kaW5nIHN0cmluZy5cbiAqIEBwYXJhbSBtb2RlbENvbnRlbnQgQ29udGVudCBvZiB0aGUgZGVmYXVsdCBtb2RlbCB0byB1c2UgZm9yIGV2YWx1YXRpb24uXG4gKiBAcGFyYW0gbmFtZWRNb2RlbHNDb250ZW50IENvbnRlbnRzIG9mIGFkZGl0aW9uYWwsIG5hbWVkIG1vZGVscyB0byB1c2UuXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwoXG5cdGJpbmRpbmdTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxDb250ZW50OiBNb2RlbENvbnRlbnQsXG5cdG5hbWVkTW9kZWxzQ29udGVudD86IHsgW21vZGVsTmFtZTogc3RyaW5nXTogTW9kZWxDb250ZW50IH1cbik6IHN0cmluZyB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRjb25zdCB0ZXh0ID0gbmV3IEludmlzaWJsZVRleHQoKTtcblx0dGV4dC5iaW5kUHJvcGVydHkoXCJ0ZXh0XCIsIGJpbmRpbmdFbGVtZW50KTtcblxuXHRjb25zdCBkZWZhdWx0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1vZGVsQ29udGVudCk7XG5cdHRleHQuc2V0TW9kZWwoZGVmYXVsdE1vZGVsKTtcblx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChkZWZhdWx0TW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpKTtcblxuXHRpZiAobmFtZWRNb2RlbHNDb250ZW50KSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMobmFtZWRNb2RlbHNDb250ZW50KSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBuZXcgSlNPTk1vZGVsKGNvbnRlbnQpO1xuXHRcdFx0dGV4dC5zZXRNb2RlbChtb2RlbCwgbmFtZSk7XG5cdFx0XHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5jb25zdCBURVNUVklFV0lEID0gXCJ0ZXN0Vmlld0lkXCI7XG5cbmNvbnN0IGFwcGx5RmxleENoYW5nZXMgPSBhc3luYyBmdW5jdGlvbiAoZmxleENoYW5nZXM6IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sIG9NZXRhTW9kZWw6IE1ldGFNb2RlbCwgcmVzdWx0WE1MOiBhbnkpIHtcblx0Ly8gcHJlZml4IElkc1xuXHRbLi4ucmVzdWx0WE1MLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWRdXCIpXS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0bm9kZS5pZCA9IGAke1RFU1RWSUVXSUR9LS0ke25vZGUuaWR9YDtcblx0fSk7XG5cdGNvbnN0IGNoYW5nZXMgPSBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QoVEVTVFZJRVdJRCwgZmxleENoYW5nZXMpO1xuXHRjb25zdCBhcHBJZCA9IFwic29tZUNvbXBvbmVudFwiO1xuXHRjb25zdCBvTWFuaWZlc3QgPSB7XG5cdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdGlkOiBhcHBJZCxcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb25cIixcblx0XHRcdGNyb3NzTmF2aWdhdGlvbjoge1xuXHRcdFx0XHRvdXRib3VuZHM6IFtdXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgPSB7XG5cdFx0Z2V0RGlhZ25vc3RpY3M6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZ2V0RmFrZURpYWdub3N0aWNzKCkpLFxuXHRcdGdldE1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldE1ldGFNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShvTWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdGdldENvbXBvbmVudERhdGE6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pLFxuXHRcdGdldE1hbmlmZXN0T2JqZWN0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldEVudHJ5OiBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiAob01hbmlmZXN0IGFzIGFueSlbbmFtZV07XG5cdFx0XHR9XG5cdFx0fSksXG5cdFx0Z2V0TG9jYWxJZDogamVzdC5mbigoc0lkKSA9PiBzSWQpXG5cdH0gYXMgdW5rbm93biBhcyBBcHBDb21wb25lbnQ7XG5cdC8vZmFrZSBjaGFuZ2VzXG5cdGplc3Quc3B5T24oQXBwU3RvcmFnZSwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cdGplc3Quc3B5T24oTG9hZGVyLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblxuXHRqZXN0LnNweU9uKENvbXBvbmVudCBhcyB1bmtub3duIGFzIHsgZ2V0Q29tcG9uZW50QnlJZDogKCkgPT4gQXBwQ29tcG9uZW50IH0sIFwiZ2V0Q29tcG9uZW50QnlJZFwiKS5tb2NrUmV0dXJuVmFsdWUob0FwcENvbXBvbmVudCk7XG5cdGplc3Quc3B5T24oVXRpbHMsIFwiZ2V0QXBwQ29tcG9uZW50Rm9yQ29udHJvbFwiKS5tb2NrUmV0dXJuVmFsdWUob0FwcENvbXBvbmVudCk7XG5cdGF3YWl0IEZsZXhTdGF0ZS5pbml0aWFsaXplKHtcblx0XHRjb21wb25lbnRJZDogYXBwSWRcblx0fSk7XG5cdHJlc3VsdFhNTCA9IGF3YWl0IFhtbFByZXByb2Nlc3Nvci5wcm9jZXNzKHJlc3VsdFhNTCwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiwgY29tcG9uZW50SWQ6IGFwcElkLCBpZDogVEVTVFZJRVdJRCB9KTtcblxuXHQvL0Fzc2VydCB0aGF0IGFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkXG5cdGNvbnN0IGNoYW5nZXNBcHBsaWVkID0gZ2V0Q2hhbmdlc0Zyb21YTUwocmVzdWx0WE1MKTtcblx0ZXhwZWN0KGNoYW5nZXNBcHBsaWVkLmxlbmd0aCkudG9CZShmbGV4Q2hhbmdlcz8uY2hhbmdlcz8ubGVuZ3RoID8/IDAgKyBmbGV4Q2hhbmdlcz8udmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzPy5sZW5ndGggPz8gMCk7XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2hhbmdlc0Zyb21YTUwgPSAoeG1sOiBhbnkpID0+XG5cdFsuLi54bWwucXVlcnlTZWxlY3RvckFsbChcIipcIildXG5cdFx0LmZsYXRNYXAoKGUpID0+IFsuLi5lLmF0dHJpYnV0ZXNdLm1hcCgoYSkgPT4gYS5uYW1lKSlcblx0XHQuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmluY2x1ZGVzKFwic2FwLnVpLmZsLmFwcGxpZWRDaGFuZ2VzXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRpbmdSZXN1bHQgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pIHtcblx0aWYgKCFtTW9kZWxzW1wic2FwLmZlLmkxOG5cIl0pIHtcblx0XHRtTW9kZWxzW1wic2FwLmZlLmkxOG5cIl0gPSBjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCgpO1xuXHR9XG5cblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gYXdhaXQgX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3Moc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzLCBmYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0bGV0IHJlc3VsdFhNTCA9IChhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncykpIGFzIGFueTtcblxuXHRpZiAoc01ldGFkYXRhVXJsICYmIGZsZXhDaGFuZ2VzKSB7XG5cdFx0Ly8gYXBwbHkgZmxleCBjaGFuZ2VzXG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRcdHJlc3VsdFhNTCA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMsIG9NZXRhTW9kZWwsIHJlc3VsdFhNTCk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZWRYTUwgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0cmV0dXJuIGpzeC5kZWZpbmVYTUxOYW1lc3BhY2VNYXAocmV2ZXNlTmFtZXNwYWNlTWFwLCBhc3luYyAoKSA9PiB7XG5cdFx0Y29uc3QgdGVtcGxhdGVkWE1MID0gYXdhaXQgZ2V0VGVtcGxhdGluZ1Jlc3VsdChcblx0XHRcdHhtbElucHV0LFxuXHRcdFx0c01ldGFkYXRhVXJsLFxuXHRcdFx0bUJpbmRpbmdDb250ZXh0cyxcblx0XHRcdG1Nb2RlbHMsXG5cdFx0XHRmbGV4Q2hhbmdlcyxcblx0XHRcdGZha2VTaWRlRWZmZWN0U2VydmljZVxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VyaWFsaWVkWE1MID0gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCwgdW5kZWZpbmVkKTtcblx0XHRleHBlY3Qoc2VyaWFsaWVkWE1MKS5ub3QudG9IYXZlVGVtcGxhdGluZ0Vycm9ycygpO1xuXHRcdHJldHVybiBzZXJpYWxpZWRYTUw7XG5cdH0pIGFzIHVua25vd24gYXMgUHJvbWlzZTxzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBQcm9jZXNzIHRoZSByZXF1ZXN0ZWQgdmlldyB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHZpZXcgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHNNZXRhZGF0YVVybCBVcmwgb2YgdGhlIG1ldGFkYXRhLlxuICogQHBhcmFtIG1CaW5kaW5nQ29udGV4dHMgTWFwIG9mIHRoZSBiaW5kaW5nQ29udGV4dHMgdG8gc2V0IG9uIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gbU1vZGVscyBNYXAgb2YgdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBmbGV4Q2hhbmdlcyBPYmplY3Qgd2l0aCBVSSBjaGFuZ2VzIGxpa2UgJ2NoYW5nZXMnIG9yICd2YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMnXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgdmlldyBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KFxuXHRuYW1lOiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfVxuKTogUHJvbWlzZTxKZXN0VGVtcGxhdGVkVmlldz4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGNvbnN0IG9WaWV3RG9jdW1lbnQgPSBfbG9hZFJlc291cmNlVmlldyhuYW1lKTtcblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gYXdhaXQgX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3Moc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzKTtcblx0bGV0IG9QcmVwcm9jZXNzZWRWaWV3ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3Mob1ZpZXdEb2N1bWVudCwgeyBuYW1lOiBuYW1lIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG5cdGlmIChmbGV4Q2hhbmdlcykge1xuXHRcdG9QcmVwcm9jZXNzZWRWaWV3ID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhmbGV4Q2hhbmdlcyA/PyBbXSwgb01ldGFNb2RlbCwgb1ByZXByb2Nlc3NlZFZpZXcpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0YXNFbGVtZW50OiBvUHJlcHJvY2Vzc2VkVmlldyxcblx0XHRhc1N0cmluZzogZm9ybWF0WE1MKG9QcmVwcm9jZXNzZWRWaWV3Py5vdXRlckhUTUwgfHwgXCJcIilcblx0fTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSByZXF1ZXN0ZWQgWE1MIGZyYWdtZW50IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXG5cdGNvbnN0IGlucHV0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhpbnB1dFhtbCwgXCJ0ZXh0L3htbFwiKTtcblxuXHQvLyBidWlsZCBtb2RlbCBhbmQgYmluZGluZ3MgZm9yIGdpdmVuIHRlc3QgZGF0YVxuXHRjb25zdCBzZXR0aW5ncyA9IHtcblx0XHRtb2RlbHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB9LFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogb2JqZWN0IH0sXG5cdFx0YXBwQ29tcG9uZW50OiB7IGdldFNpZGVFZmZlY3RzU2VydmljZTogamVzdC5mbigpLCBnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkIH1cblx0fTtcblx0Zm9yIChjb25zdCBtb2RlbCBpbiB0ZXN0RGF0YSkge1xuXHRcdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRqc29uTW9kZWwuc2V0RGF0YSh0ZXN0RGF0YVttb2RlbF0pO1xuXHRcdHNldHRpbmdzLm1vZGVsc1ttb2RlbF0gPSBqc29uTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW21vZGVsXSA9IHNldHRpbmdzLm1vZGVsc1ttb2RlbF0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGRlZmF1bHRGYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXG5cdC8vIGV4ZWN1dGUgdGhlIHByZS1wcm9jZXNzb3Jcblx0Y29uc3QgcmVzdWx0RG9jID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoaW5wdXREb2MuZmlyc3RFbGVtZW50Q2hpbGQsIHsgbmFtZSB9LCBzZXR0aW5ncyk7XG5cblx0Ly8gZXhjbHVkZSBuZXN0ZWQgZnJhZ21lbnRzIGZyb20gdGVzdCBzbmFwc2hvdHNcblx0Y29uc3QgZnJhZ21lbnRzID0gcmVzdWx0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY29yZTpGcmFnbWVudFwiKSBhcyBhbnk7XG5cdGlmIChmcmFnbWVudHM/Lmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0ZnJhZ21lbnQuaW5uZXJIVE1MID0gXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvLyBLZWVwIHRoZSBmcmFnbWVudCByZXN1bHQgYXMgY2hpbGQgb2Ygcm9vdCBub2RlIHdoZW4gZnJhZ21lbnQgZ2VuZXJhdGVzIG11bHRpcGxlIHJvb3QgY29udHJvbHNcblx0Y29uc3QgeG1sUmVzdWx0ID0gcmVzdWx0RG9jLmNoaWxkcmVuLmxlbmd0aCA+IDEgPyByZXN1bHREb2Mub3V0ZXJIVE1MIDogcmVzdWx0RG9jLmlubmVySFRNTDtcblxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFJlc3VsdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sKGNvbnRyb2xUb1NlcmlhbGl6ZT86IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10sIHNob3dDdXN0b21TdHlsZUNsYXNzZXMgPSBmYWxzZSkge1xuXHRsZXQgdGFiQ291bnQgPSAwO1xuXHRjb25zdCBVSUQgPSAvdWlkLS1pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0Y29uc3QgQ09OVFJPTElEID0gL2lkLVxcZHsxM30tXFxkezEsM30vO1xuXHRmdW5jdGlvbiBnZXRUYWIodG9BZGQgPSAwKSB7XG5cdFx0bGV0IHRhYiA9IFwiXCI7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0YWJDb3VudCArIHRvQWRkOyBpKyspIHtcblx0XHRcdHRhYiArPSBcIlxcdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFiO1xuXHR9XG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSk/LmluZGV4T2Y/Lihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCxcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9KGA7XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFwifSlcIjtcblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0bGV0IGlkID0gY29udHJvbC5nZXRJZCgpO1xuXHRcdFx0aWQgPSB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyBpZD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKSA6IGlkO1xuXHRcdFx0bGV0IGRhdGEgPSBge2lkOiAke01hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSA/IFwiX19keW5hbWljSWRcIiA6IGlkfWA7XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubVByb3BlcnRpZXMpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5VmFsdWUgPSBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oVUlELCBcInVpZC0taWRcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHByb3BlcnR5VmFsdWU/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0Ly8gU3RyaW5naWZ5IG1heSBmYWlsIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtwcm9wZXJ0eVZhbHVlfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tQmluZGluZ0luZm9zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSB7IC4uLmNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV0gfTtcblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC50eXBlPy5vT3V0cHV0Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLmJpbmRpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubUFzc29jaWF0aW9ucykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5tQXNzb2NpYXRpb25zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkpIHtcblx0XHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBhc3NvY2lhdGlvblZhbHVlLm1hcCgoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHQ/IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50Py5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpXG5cdFx0XHRcdFx0XHRcdDogYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7KGFzc29jaWF0aW9uVmFsdWU/LmpvaW4/LihcIixcIikgPz8gYXNzb2NpYXRpb25WYWx1ZSkgfHwgdW5kZWZpbmVkfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzaG93Q3VzdG9tU3R5bGVDbGFzc2VzICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gY3VzdG9tU3R5bGVDbGFzc2VzIDogJHtjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXMuam9pbihcIiwgXCIpfWA7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubUV2ZW50UmVnaXN0cnkpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiB0cnVlYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgYDtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IHsgbUJpbmRpbmdJbmZvczogUmVjb3JkPHN0cmluZywgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8+IH0sIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblxuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0b3V0ICs9IGA9eyBwYXRoOicke2NvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0ucGF0aH0nLCB0ZW1wbGF0ZTpcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXQgKz0gYD1bXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfV1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udHJvbFRvU2VyaWFsaXplKSkge1xuXHRcdHJldHVybiBjb250cm9sVG9TZXJpYWxpemUubWFwKChjb250cm9sVG9SZW5kZXI6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9SZW5kZXIsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF3YWl0ZXIoKSB7XG5cdGxldCBmblJlc29sdmUhOiBGdW5jdGlvbjtcblx0Y29uc3QgbXlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHR9KTtcblx0cmV0dXJuIHsgcHJvbWlzZTogbXlQcm9taXNlLCByZXNvbHZlOiBmblJlc29sdmUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJ1aWxkaW5nQmxvY2tXaXRoTW9kZWxzKGJ1aWxkaW5nQmxvY2s6IHsgZ2V0Q29udGVudDogRnVuY3Rpb24gfSwgbW9kZWxzOiB7IFtrZXk6IHN0cmluZ106IE1vZGVsIH0pOiBDb250cm9sIHtcblx0cmV0dXJuIChNYW5hZ2VkT2JqZWN0IGFzIE1hbmFnZWRPYmplY3RFeCkucnVuV2l0aFByZXByb2Nlc3NvcnMoXG5cdFx0KCkgPT4ge1xuXHRcdFx0cmV0dXJuIGJ1aWxkaW5nQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0c2V0dGluZ3M6IGZ1bmN0aW9uIChjb250cm9sU2V0dGluZ3M6IHsgbW9kZWxzOiB1bmtub3duIH0pIHtcblx0XHRcdFx0Y29udHJvbFNldHRpbmdzLm1vZGVscyA9IG1vZGVscztcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2xTZXR0aW5ncztcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1vY2tGcmFnbWVudHMoLi4uZnJhZ21lbnRzOiBNb2NrRnJhZ21lbnRbXSk6IGplc3QuU3B5SW5zdGFuY2Uge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBvcmlnaW5hbExvYWRUZW1wbGF0ZSA9IChYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnkpLmxvYWRUZW1wbGF0ZVByb21pc2U7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGNvbnN0IGxvYWRUZW1wbGF0ZVN0dWIgPSBqZXN0LnNweU9uKFhNTFRlbXBsYXRlUHJvY2Vzc29yIGFzIGFueSwgXCJsb2FkVGVtcGxhdGVQcm9taXNlXCIpO1xuXHRsb2FkVGVtcGxhdGVTdHViLm1vY2tJbXBsZW1lbnRhdGlvbigoKHRlbXBsYXRlTmFtZTogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZykgPT4ge1xuXHRcdGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG5cdFx0XHRpZiAoZnJhZ21lbnQubmFtZSA9PT0gdGVtcGxhdGVOYW1lKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZVhNTFN0cmluZyhmcmFnbWVudC5jb250ZW50KVswXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsTG9hZFRlbXBsYXRlKHRlbXBsYXRlTmFtZSwgZXh0ZW5zaW9uKTtcblx0fSkgYXMgKCgpID0+IEVsZW1lbnQpIHwgdW5kZWZpbmVkKTtcblx0cmV0dXJuIGxvYWRUZW1wbGF0ZVN0dWI7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBhcHBDb21wb25lbnQgYW5kIHRlbXBsYXRlQ29tcG9uZW50IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2RzRmlsZSBUaGUgcGF0aCB0byB0aGUgQ0RTIGZpbGUgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5tYWluQ29udGV4dFBhdGggVGhlIG1haW4gY29udGV4dCBwYXRoIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMucGFnZUNvbnRlbnQgVGhlIHBhZ2UgY29udGVudCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbnRlbnQgVGhlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwIENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMuY29tcG9uZW50SWRcbiAqIEBwYXJhbSBvcHRpb25zLm1hbmlmZXN0U2V0dGluZ3NcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIHZpZXdMZXZlbCBUaGUgdmlldyBsZXZlbCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEByZXR1cm5zIFRoZSBhcHBjb21wb25lbnQgYW5kIHRlbXBsYXRlQ29tcG9uZW50IHRvIHVzZSBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcENvbXBvbmVudChcblx0b3B0aW9ucz86IHtcblx0XHRjZHNGaWxlPzogc3RyaW5nO1xuXHRcdGNvbXBvbmVudElkPzogc3RyaW5nO1xuXHRcdG1haW5Db250ZXh0UGF0aD86IHN0cmluZztcblx0XHRwYWdlQ29udGVudD86IEZ1bmN0aW9uO1xuXHRcdG1hbmlmZXN0U2V0dGluZ3M/OiBQYXJ0aWFsPExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3M+O1xuXHRcdGNvbnRlbnQ/OiB7fTtcblx0fSxcblx0bmFtZT86IHN0cmluZyxcblx0dmlld0xldmVsPzogbnVtYmVyXG4pOiBQcm9taXNlPHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IHRlbXBsYXRlQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCB9PiB7XG5cdGxldCBjZHNGaWxlID0gb3B0aW9ucz8uY2RzRmlsZTtcblx0aWYgKCFjZHNGaWxlKSB7XG5cdFx0Y2RzRmlsZSA9IGNvbXBpbGVDRFMocGF0aC5qb2luKF9fZGlybmFtZSwgXCIuL2RhdGEvUHJvZHVjdHMuY2RzXCIpKTtcblx0fVxuXHRjb25zdCBndWlkID0gdWlkKCk7XG5cdGNvbnN0IGlkID0gb3B0aW9ucz8uY29tcG9uZW50SWQgPz8gYHNhcC5mZS50ZXN0LiR7Z3VpZH1gO1xuXHRjb25zdCBjZHNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNkc0ZpbGUpLnRvU3RyaW5nKCk7XG5cdHNhcC5qZXN0LnJlZ2lzdGVyRmFrZUZyYWdtZW50KGAvc2FwL2ZlL2NvcmUvbW9jay8ke2d1aWR9LyRtZXRhZGF0YT9zYXAtbGFuZ3VhZ2U9RU5gLCBjZHNDb250ZW50KTtcblxuXHRzYXAudWkuZGVmaW5lKGBzYXAvZmUvdGVzdC8ke2d1aWR9L0NvbXBvbmVudGAsIFtcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiXSwgZnVuY3Rpb24gKF9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdFwidXNlIHN0cmljdFwiO1xuXG5cdFx0cmV0dXJuIEFwcENvbXBvbmVudC5leHRlbmQoYHNhcC5mZS50ZXN0LiR7Z3VpZH0uQ29tcG9uZW50YCwge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0bWFuaWZlc3Q6IHtcblx0XHRcdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRcdFx0ZGF0YVNvdXJjZXM6IHtcblx0XHRcdFx0XHRcdFx0bWFpblNlcnZpY2U6IHtcblx0XHRcdFx0XHRcdFx0XHR1cmk6IGAvc2FwL2ZlL2NvcmUvbW9jay8ke2d1aWR9L2AsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJPRGF0YVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvZGF0YVZlcnNpb246IFwiNC4wXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwic2FwLnVpNVwiOiB7XG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0XCJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFTb3VyY2U6IFwibWFpblNlcnZpY2VcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge31cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHJvdXRpbmc6IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0czoge1xuXHRcdFx0XHRcdFx0XHRcdERlZmF1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29tcG9uZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBuYW1lID8/IFwic2FwLmZlLmNvcmUuZnBtXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3TGV2ZWw6IHZpZXdMZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuLi4ob3B0aW9ucz8ubWFuaWZlc3RTZXR0aW5ncyA/PyB7fSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9wdGlvbnM/Lm1haW5Db250ZXh0UGF0aCA/PyBcIi9Qcm9kdWN0c1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpZXdUeXBlOiBcIkpTWFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpZXdDb250ZW50OiBvcHRpb25zPy5wYWdlQ29udGVudCA/PyAoKCkgPT4gPFBhZ2U+PC9QYWdlPiksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogb3B0aW9ucz8uY29udGVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRyb3V0ZXM6IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBcIjo/cXVlcnk6XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHRhcmdldDogXCJEZWZhdWx0XCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cdGNvbnN0IG1vY2tBcHBDb21wb25lbnQgPSAoYXdhaXQgQ29tcG9uZW50LmNyZWF0ZSh7IG5hbWU6IGBzYXAuZmUudGVzdC4ke2d1aWR9YCwgaWQ6IGlkIH0pKSBhcyBBcHBDb21wb25lbnQ7XG5cblx0YXdhaXQgbW9ja0FwcENvbXBvbmVudC5pbml0aWFsaXplZDtcblx0Y29uc3QgdiA9IGF3YWl0IChtb2NrQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFRhcmdldChcIkRlZmF1bHRcIikgYXMgeyBsb2FkPzogRnVuY3Rpb24gfSkubG9hZD8uKCk7XG5cdHJldHVybiB7IGFwcENvbXBvbmVudDogbW9ja0FwcENvbXBvbmVudCwgdGVtcGxhdGVDb21wb25lbnQ6IHYub2JqZWN0IH07XG59XG5cbi8qKlxuICogRmluZCBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHNlbGVjdG9yLlxuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBzZWxlY3RvclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciBvciB1bmRlZmluZWQgaWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVsZW1lbnQoY29sbGVjdGlvbjogSFRNTENvbGxlY3Rpb24sIHNlbGVjdG9yOiAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGJvb2xlYW4pOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29sbGVjdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBjb2xsZWN0aW9uLml0ZW0oaSkgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKHNlbGVjdG9yKGVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhbiBldmVudCB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZy5cbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gZXZlbnROYW1lXG4gKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBldmVudCBpcyByZWNlaXZlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckV2ZW50KGNvbnRyb2w6IEV2ZW50UHJvdmlkZXIsIGV2ZW50TmFtZTogc3RyaW5nKTogUHJvbWlzZTxFdmVudD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRjb250cm9sLmF0dGFjaEV2ZW50T25jZShldmVudE5hbWUsIChldmVudDogRXZlbnQpID0+IHtcblx0XHRcdHJlc29sdmUoZXZlbnQpO1xuXHRcdH0pO1xuXHR9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7RUFzRUFBLEdBQUcsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsRUFBUyxrQ0FBa0MsQ0FBQztFQUMxREMsSUFBSSxDQUFDQyxVQUFVLENBQUMsS0FBSyxDQUFDO0VBRXRCLE1BQU1DLFlBQW9DLEdBQUc7SUFDNUNDLEtBQUssRUFBRSxlQUFlO0lBQ3RCQyxNQUFNLEVBQUUsZUFBZTtJQUN2QkMsSUFBSSxFQUFFLHVDQUF1QztJQUM3Q0MsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsU0FBUyxFQUFFLGtFQUFrRTtJQUM3RUMsR0FBRyxFQUFFLGtFQUFrRTtJQUN2RUMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RUMsT0FBTyxFQUFFLHNCQUFzQjtJQUMvQkMsUUFBUSxFQUFFLHdCQUF3QjtJQUNsQ0MsSUFBSSxFQUFFLGFBQWE7SUFDbkJDLEVBQUUsRUFBRSxXQUFXO0lBQ2ZDLENBQUMsRUFBRSxPQUFPO0lBQ1ZDLENBQUMsRUFBRSxvQkFBb0I7SUFDdkJDLEVBQUUsRUFBRSxXQUFXO0lBQ2ZDLGFBQWEsRUFBRSx3QkFBd0I7SUFDdkNDLEdBQUcsRUFBRSxZQUFZO0lBQ2pCQyxhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDQyxRQUFRLEVBQUUsa0JBQWtCO0lBQzVCQyxRQUFRLEVBQUUsa0JBQWtCO0lBQzVCQyxDQUFDLEVBQUUsZ0JBQWdCO0lBQ25CQyxJQUFJLEVBQUUsVUFBVTtJQUNoQkMsZUFBZSxFQUFFLDBCQUEwQjtJQUMzQ0MsVUFBVSxFQUFFLHlCQUF5QjtJQUNyQ0MsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsS0FBSyxFQUFFLDhCQUE4QjtJQUNyQ0MsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QkMsU0FBUyxFQUFFLHlCQUF5QjtJQUNwQ0MsZUFBZSxFQUFFLCtCQUErQjtJQUNoREMsU0FBUyxFQUFFLHlCQUF5QjtJQUNwQ0MsVUFBVSxFQUFFO0VBQ2IsQ0FBQztFQUNELE1BQU1DLGtCQUFrQixHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ2pDLFlBQVksQ0FBQyxDQUFDa0MsTUFBTSxDQUFDLENBQUNDLFVBQWtDLEVBQUVDLFdBQVcsS0FBSztJQUNoSEQsVUFBVSxDQUFDbkMsWUFBWSxDQUFDb0MsV0FBVyxDQUFDLENBQUMsR0FBR0EsV0FBVztJQUNuRCxPQUFPRCxVQUFVO0VBQ2xCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNOLE1BQU1FLE1BQU0sR0FBR0MsS0FBSyxDQUFDQyxhQUFhLENBQUN2QyxZQUFZLENBQUM7RUFFaEQsTUFBTXdDLDRCQUE0QixHQUFHO0lBQUVDLG9CQUFvQixFQUFFQSxDQUFBLEtBQU07RUFBRyxDQUFDO0VBRXZFLFNBQVNDLHFCQUFxQkEsQ0FBQ0MsTUFBWSxFQUFFQyxRQUFnQixFQUFVO0lBQ3RFO0FBQ0Q7QUFDQTtBQUNBO0lBQ0MsTUFBTUMsUUFBUSxHQUFHLE9BQU87SUFDeEIsT0FBTyxHQUFHRixNQUFNLENBQUNHLFFBQVEsS0FBSyxNQUFNLElBQUksQ0FBQ0YsUUFBUSxDQUFDRyxVQUFVLENBQUNGLFFBQVEsQ0FBQyxHQUFHQSxRQUFRLEdBQUcsRUFBRSxHQUFHRCxRQUFRLEVBQUU7RUFDcEc7RUFFQSxlQUFlSSwwQkFBMEJBLENBQ3hDQyxZQUFnQyxFQUNoQ0MsZ0JBQXlDLEVBQ3pDQyxPQUE2QixFQUM3QkMscUJBQStCLEVBQ0s7SUFDcEMsSUFBSUMsVUFBc0M7SUFDMUMsSUFBSUosWUFBWSxFQUFFO01BQ2pCSSxVQUFVLEdBQUcsTUFBTUMsWUFBWSxDQUFDTCxZQUFZLENBQUM7TUFDN0M7TUFDQTtNQUNBLElBQUksQ0FBQ0UsT0FBTyxDQUFDSSxjQUFjLENBQUMsa0JBQWtCLENBQUMsRUFBRTtRQUNoREosT0FBTyxHQUFHbkIsTUFBTSxDQUFDd0IsTUFBTSxDQUFDTCxPQUFPLEVBQUU7VUFBRU0sZ0JBQWdCLEVBQUUsSUFBSUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFTCxVQUFXO1FBQUUsQ0FBQyxDQUFDO01BQzNGO01BRUFyQixNQUFNLENBQUNDLElBQUksQ0FBQ2tCLE9BQU8sQ0FBQyxDQUFDUSxPQUFPLENBQUMsVUFBVUMsVUFBVSxFQUFFO1FBQ2xELElBQUlULE9BQU8sQ0FBQ1MsVUFBVSxDQUFDLElBQUlULE9BQU8sQ0FBQ1MsVUFBVSxDQUFDLENBQUNDLGVBQWUsRUFBRTtVQUMvRFYsT0FBTyxDQUFDUyxVQUFVLENBQUMsR0FBRyxJQUFJRixhQUFhLENBQUNQLE9BQU8sQ0FBQ1MsVUFBVSxDQUFDLENBQUNFLElBQUksRUFBRVQsVUFBVyxDQUFDO1FBQy9FO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7SUFFQSxNQUFNVSxRQUFhLEdBQUc7TUFDckJDLE1BQU0sRUFBRWhDLE1BQU0sQ0FBQ3dCLE1BQU0sQ0FDcEI7UUFDQ1MsU0FBUyxFQUFFWjtNQUNaLENBQUMsRUFDREYsT0FDRCxDQUFDO01BQ0RlLGVBQWUsRUFBRSxDQUFDLENBQUM7TUFDbkJDLFlBQVksRUFBRTtRQUFFQyxxQkFBcUIsRUFBRXRFLElBQUksQ0FBQ3VFLEVBQUUsQ0FBQyxDQUFDO1FBQUVDLGNBQWMsRUFBRUEsQ0FBQSxLQUFNQyxTQUFTO1FBQUVDLGdCQUFnQixFQUFFMUUsSUFBSSxDQUFDdUUsRUFBRSxDQUFDO01BQUU7SUFDaEgsQ0FBQztJQUVETixRQUFRLENBQUNJLFlBQVksQ0FBQ0MscUJBQXFCLENBQUNLLGVBQWUsQ0FBQ3JCLHFCQUFxQixJQUFJWiw0QkFBNEIsQ0FBQztJQUNsSDtJQUNBUixNQUFNLENBQUNDLElBQUksQ0FBQ2lCLGdCQUFnQixDQUFDLENBQUNTLE9BQU8sQ0FBQyxVQUFVZSxJQUFJLEVBQUU7TUFBQSxJQUFBQyxXQUFBO01BQ3JEO01BQ0FDLE1BQU0sQ0FBQyxTQUFBRCxXQUFBLEdBQU90QixVQUFVLGNBQUFzQixXQUFBLHVCQUFWQSxXQUFBLENBQVlFLFNBQVMsQ0FBQzNCLGdCQUFnQixDQUFDd0IsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQztNQUMxRSxNQUFNQyxNQUFNLEdBQUc1QixPQUFPLENBQUN1QixJQUFJLENBQUMsSUFBSXJCLFVBQVU7TUFDMUNVLFFBQVEsQ0FBQ0csZUFBZSxDQUFDUSxJQUFJLENBQUMsR0FBR0ssTUFBTSxDQUFDQyxvQkFBb0IsQ0FBQzlCLGdCQUFnQixDQUFDd0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RGWCxRQUFRLENBQUNDLE1BQU0sQ0FBQ1UsSUFBSSxDQUFDLEdBQUdLLE1BQU07SUFDL0IsQ0FBQyxDQUFDO0lBQ0YsT0FBT2hCLFFBQVE7RUFDaEI7RUFFQSxTQUFTa0IsaUJBQWlCQSxDQUFDQyxRQUFnQixFQUFXO0lBQ3JELE1BQU1DLElBQUksR0FBR0QsUUFBUSxDQUFDRSxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFdBQVc7SUFDdkQsTUFBTUMsSUFBSSxHQUFHQyxnQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDSixJQUFJLENBQUM7SUFDaEQsT0FBT0UsSUFBSSxDQUFDRyxlQUFlO0VBQzVCO0VBRU8sTUFBTUMsYUFBYSxHQUFHLFNBQUFBLENBQVU3QyxRQUFnQixFQUFFRCxNQUF3QixFQUFFO0lBQ2xGLE9BQU9OLE1BQU0sQ0FBQ08sUUFBUSxFQUFFRCxNQUFNLENBQUM7RUFDaEMsQ0FBQztFQUVEaUMsTUFBTSxDQUFDYyxNQUFNLENBQUM7SUFDYkMsYUFBYUEsQ0FBQ2hELE1BQU0sRUFBRUMsUUFBUSxFQUFFO01BQy9CLE1BQU1nRCxLQUFLLEdBQUdILGFBQWEsQ0FBQy9DLHFCQUFxQixDQUFDQyxNQUFNLEVBQUVDLFFBQVEsQ0FBQyxFQUFFRCxNQUFNLENBQUM7TUFDNUUsT0FBTztRQUNOa0QsT0FBTyxFQUFFQSxDQUFBLEtBQU07VUFDZCxNQUFNQyxTQUFTLEdBQUdDLFlBQVksQ0FBQ3BELE1BQU0sQ0FBQztVQUN0QyxPQUFPLGtDQUFrQ0MsUUFBUSx3QkFBd0JrRCxTQUFTLEVBQUU7UUFDckYsQ0FBQztRQUNERSxJQUFJLEVBQUVKLEtBQUssSUFBSUEsS0FBSyxDQUFDSyxNQUFNLElBQUk7TUFDaEMsQ0FBQztJQUNGLENBQUM7SUFDREMsZ0JBQWdCQSxDQUFDdkQsTUFBTSxFQUFFQyxRQUFRLEVBQUU7TUFDbEMsTUFBTWdELEtBQUssR0FBR0gsYUFBYSxDQUFDL0MscUJBQXFCLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxDQUFDLEVBQUVELE1BQU0sQ0FBQztNQUM1RSxPQUFPO1FBQ05rRCxPQUFPLEVBQUVBLENBQUEsS0FBTTtVQUNkLE1BQU1DLFNBQVMsR0FBR0MsWUFBWSxDQUFDcEQsTUFBTSxDQUFDO1VBQ3RDLE9BQU8sK0JBQStCQyxRQUFRLHdCQUF3QmtELFNBQVMsRUFBRTtRQUNsRixDQUFDO1FBQ0RFLElBQUksRUFBRUosS0FBSyxJQUFJQSxLQUFLLENBQUNLLE1BQU0sS0FBSztNQUNqQyxDQUFDO0lBQ0YsQ0FBQztJQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRSxzQkFBc0JBLENBQUNDLEdBQWtCLEVBQUU7TUFDMUMsTUFBTUMsT0FBTyxHQUFHLE9BQU9ELEdBQUcsS0FBSyxRQUFRLEdBQUdBLEdBQUcsR0FBR0wsWUFBWSxDQUFDSyxHQUFHLENBQUM7TUFDakUsTUFBTUUsYUFBdUIsR0FBR0QsT0FBTyxDQUFDRSxLQUFLLENBQUMsa0NBQWtDLENBQUMsSUFBSyxFQUFlO01BQ3JHLE1BQU1DLGFBQXVCLEdBQUdGLGFBQWEsQ0FBQ0csR0FBRyxDQUFFWixPQUFlLElBQUs7UUFDdEUsSUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUNJLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFBQSxJQUFBUyxjQUFBLEVBQUFDLGVBQUE7VUFDbEMsT0FBT0MsSUFBSSxDQUFDLEVBQUFGLGNBQUEsR0FBQWIsT0FBTyxDQUFDVSxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQUFHLGNBQUEsd0JBQUFDLGVBQUEsR0FBekJELGNBQUEsQ0FBNEIsQ0FBQyxDQUFDLGNBQUFDLGVBQUEsdUJBQTlCQSxlQUFBLENBQWdDRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUksRUFBRSxDQUFDO1FBQzVEO1FBQ0EsT0FBTyxFQUFFO01BQ1YsQ0FBQyxDQUFDO01BQ0YsSUFBSUwsYUFBYSxDQUFDUCxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQzlCLE9BQU87VUFDTkosT0FBTyxFQUFFQSxDQUFBLEtBQU0sK0JBQStCO1VBQzlDRyxJQUFJLEVBQUU7UUFDUCxDQUFDO01BQ0YsQ0FBQyxNQUFNO1FBQ04sT0FBTztVQUNOSCxPQUFPLEVBQUVBLENBQUEsS0FBTVcsYUFBYSxDQUFDTSxJQUFJLENBQUMsSUFBSSxDQUFDO1VBQ3ZDZCxJQUFJLEVBQUU7UUFDUCxDQUFDO01BQ0Y7SUFDRDtFQUNELENBQUMsQ0FBQztFQUFDZSxRQUFBLENBQUF0QixhQUFBLEdBQUFBLGFBQUE7RUFFSSxNQUFNdUIsc0JBQXNCLEdBQUcsU0FBQUEsQ0FBVUMsU0FBNEIsRUFBVTtJQUNyRixJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsU0FBUyxDQUFDLEVBQUU7TUFDN0JBLFNBQVMsR0FBR0EsU0FBUyxDQUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQy9CO0lBQ0EsT0FBT00sU0FBUyxDQUFDSCxTQUFTLENBQUM7RUFDNUIsQ0FBQztFQUFDRixRQUFBLENBQUFDLHNCQUFBLEdBQUFBLHNCQUFBO0VBRUssTUFBTUssbUJBQW1CLEdBQUcsU0FBQUEsQ0FBVUMsZUFBdUIsRUFBRUMsYUFBcUIsRUFBRUMsTUFBWSxFQUFFO0lBQzFHLE1BQU01RSxRQUFRLEdBQUcsVUFBVUYscUJBQXFCLENBQUM4RSxNQUFNLEVBQUVGLGVBQWUsQ0FBQyxLQUFLQyxhQUFhLEdBQUc7SUFDOUYsT0FBTzlCLGFBQWEsQ0FBQzdDLFFBQVEsRUFBRTRFLE1BQU0sQ0FBQztFQUN2QyxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBVCxRQUFBLENBQUFNLG1CQUFBLEdBQUFBLG1CQUFBO0VBTU8sTUFBTXRCLFlBQVksR0FBRyxTQUFBQSxDQUFVeUIsTUFBWSxFQUFFNUUsUUFBaUIsRUFBRTtJQUN0RSxNQUFNNkUsVUFBVSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLENBQUM7SUFDN0MsSUFBSVYsU0FBaUI7SUFDckIsSUFBSXJFLFFBQVEsRUFBRTtNQUNiLE1BQU1nRCxLQUFLLEdBQUdILGFBQWEsQ0FBQzdDLFFBQVEsRUFBRTRFLE1BQU0sQ0FBVztNQUN2RFAsU0FBUyxHQUFHckIsS0FBSyxDQUFDYSxHQUFHLENBQUVtQixJQUFJLElBQUtILFVBQVUsQ0FBQ0ksaUJBQWlCLENBQUNELElBQUksQ0FBQyxDQUFDLENBQUNkLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDL0UsQ0FBQyxNQUFNO01BQ05HLFNBQVMsR0FBR1EsVUFBVSxDQUFDSSxpQkFBaUIsQ0FBQ0wsTUFBTSxDQUFDO0lBQ2pEO0lBQ0EsT0FBT0osU0FBUyxDQUFDSCxTQUFTLENBQUM7RUFDNUIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVRBRixRQUFBLENBQUFoQixZQUFBLEdBQUFBLFlBQUE7RUFVTyxNQUFNcUIsU0FBUyxHQUFHLFNBQUFBLENBQVVILFNBQWlCLEVBQVU7SUFDN0QsTUFBTWEsS0FBSyxHQUFHLFdBQVc7TUFDeEJDLEdBQUcsR0FBRyxZQUFZO01BQ2xCQyxHQUFHLEdBQUcsd0JBQXdCO01BQzlCQyxJQUFJLEdBQUcsbUJBQW1CO01BQzFCQyxLQUFlLEdBQUcsRUFBRTtJQUVyQixJQUFJQyxXQUFXLEdBQUcsRUFBRTtNQUNuQkMsS0FBSyxHQUFHLENBQUMsQ0FBQztNQUNWQyxVQUE4QyxHQUFHLEVBQUU7SUFFcEQsU0FBU0MsT0FBT0EsQ0FBQSxFQUFHO01BQ2xCLElBQUlILFdBQVcsSUFBSUEsV0FBVyxLQUFLTCxLQUFLLEVBQUU7UUFDekNJLEtBQUssQ0FBQ0ssSUFBSSxDQUFDSixXQUFXLENBQUM7TUFDeEI7TUFFQUEsV0FBVyxHQUFHQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ0ksTUFBTSxDQUFDSixLQUFLLENBQUMsR0FBRyxFQUFFO0lBQ2xEO0lBRUEsU0FBU0ssZ0JBQWdCQSxDQUFBLEVBQUc7TUFDM0IsSUFBSUosVUFBVSxDQUFDcEMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMxQm9DLFVBQVUsR0FBR0EsVUFBVSxDQUFDSyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUs7VUFDdEMsSUFBSUQsQ0FBQyxDQUFDeEQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM2RixDQUFDLENBQUN6RCxJQUFJLENBQUNwQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUQsT0FBTyxDQUFDLENBQUM7VUFDVixDQUFDLE1BQU0sSUFBSSxDQUFDNEYsQ0FBQyxDQUFDeEQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJNkYsQ0FBQyxDQUFDekQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JFLE9BQU8sQ0FBQztVQUNULENBQUMsTUFBTSxJQUFJNEYsQ0FBQyxDQUFDeEQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJNkYsQ0FBQyxDQUFDekQsSUFBSSxDQUFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BFLE9BQU80RixDQUFDLENBQUN4RCxJQUFJLENBQUMwRCxhQUFhLENBQUNELENBQUMsQ0FBQ3pELElBQUksQ0FBQztVQUNwQyxDQUFDLE1BQU0sSUFBSXdELENBQUMsQ0FBQ3hELElBQUksQ0FBQzJELFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDRixDQUFDLENBQUN6RCxJQUFJLENBQUMyRCxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsT0FBTyxDQUFDLENBQUM7VUFDVixDQUFDLE1BQU0sSUFBSSxDQUFDSCxDQUFDLENBQUN4RCxJQUFJLENBQUMyRCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUlGLENBQUMsQ0FBQ3pELElBQUksQ0FBQzJELFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxPQUFPLENBQUM7VUFDVCxDQUFDLE1BQU07WUFDTixPQUFPSCxDQUFDLENBQUN4RCxJQUFJLENBQUMwRCxhQUFhLENBQUNELENBQUMsQ0FBQ3pELElBQUksQ0FBQztVQUNwQztRQUNELENBQUMsQ0FBQztRQUVGaUQsS0FBSyxFQUFFO1FBQ1AsS0FBSyxNQUFNVyxTQUFTLElBQUlWLFVBQVUsRUFBRTtVQUNuQ0MsT0FBTyxDQUFDLENBQUM7VUFDVEgsV0FBVyxJQUFJWSxTQUFTLENBQUM1RCxJQUFJO1VBQzdCLElBQUk0RCxTQUFTLENBQUNDLEtBQUssRUFBRWIsV0FBVyxJQUFJWSxTQUFTLENBQUNDLEtBQUs7UUFDcEQ7UUFDQVosS0FBSyxFQUFFO1FBQ1BDLFVBQVUsR0FBRyxFQUFFO1FBQ2ZDLE9BQU8sQ0FBQyxDQUFDO01BQ1Y7SUFDRDtJQUVBLFNBQVNXLE1BQU1BLENBQUNuRixJQUFXLEVBQUU7TUFDNUJxRSxXQUFXLElBQUllLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDckYsSUFBSSxDQUFDO0lBQ2pDO0lBRUEsTUFBTW9GLE1BQU0sR0FBR0UsWUFBWSxDQUFDO01BQzNCQyxjQUFjQSxDQUFDdkYsSUFBVyxFQUFFO1FBQzNCd0UsT0FBTyxDQUFDLENBQUM7UUFDVFcsTUFBTSxDQUFDbkYsSUFBSSxDQUFDO01BQ2IsQ0FBQztNQUVEd0YsYUFBYSxFQUFFTCxNQUFNO01BRXJCTSxVQUFVQSxDQUFDekYsSUFBVyxFQUFFO1FBQ3ZCdUUsVUFBVSxDQUFDbUIsT0FBTyxDQUFDO1VBQUVyRSxJQUFJLEVBQUUrRCxNQUFNLENBQUNDLElBQUksQ0FBQ3JGLElBQUk7UUFBRSxDQUFDLENBQUM7TUFDaEQsQ0FBQztNQUVEMkYsV0FBV0EsQ0FBQzNGLElBQXNCLEVBQUU7UUFDbkN1RSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNXLEtBQUssR0FBR0UsTUFBTSxDQUFDQyxJQUFJLENBQUNyRixJQUFJLENBQUMsQ0FBQ3NCLE9BQU8sQ0FBQzRDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pFSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNXLEtBQUssR0FBR0UsTUFBTSxDQUFDQyxJQUFJLENBQUNyRixJQUFJLENBQUMsQ0FBQ3NCLE9BQU8sQ0FBQzZDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQzlELENBQUM7TUFFRHlCLFlBQVlBLENBQUM1RixJQUF1QixFQUFFO1FBQ3JDMkUsZ0JBQWdCLENBQUMsQ0FBQztRQUNsQlEsTUFBTSxDQUFDbkYsSUFBSSxDQUFDO1FBQ1osSUFBSSxDQUFDQSxJQUFJLENBQUM2RixVQUFVLEVBQUV2QixLQUFLLEVBQUU7TUFDOUIsQ0FBQztNQUVEd0IsZUFBZUEsQ0FBQzlGLElBQVcsRUFBRTtRQUM1QnNFLEtBQUssRUFBRTtRQUNQRSxPQUFPLENBQUMsQ0FBQztRQUNUVyxNQUFNLENBQUNuRixJQUFJLENBQUM7TUFDYixDQUFDO01BRUQrRixjQUFjLEVBQUVaLE1BQU07TUFDdEJhLGFBQWEsRUFBRWI7SUFDaEIsQ0FBQyxDQUFDO0lBRUZDLE1BQU0sQ0FBQ2EsS0FBSyxDQUFDakMsS0FBSyxHQUFHYixTQUFTLEdBQUdjLEdBQUcsQ0FBQztJQUNyQyxPQUFPRyxLQUFLLENBQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUNrRCxJQUFJLENBQUMsQ0FBQztFQUMvQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkFqRCxRQUFBLENBQUFLLFNBQUEsR0FBQUEsU0FBQTtFQU9PLE1BQU02QyxVQUFVLEdBQUcsU0FBQUEsQ0FBVUMsTUFBYyxFQUF1QztJQUFBLElBQXJDQyxPQUE4QixHQUFBQyxTQUFBLENBQUFuRSxNQUFBLFFBQUFtRSxTQUFBLFFBQUE3RixTQUFBLEdBQUE2RixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQ3RGLE1BQU1DLFNBQVMsR0FBR0MsRUFBRSxDQUFDQyxZQUFZLENBQUNMLE1BQU0sRUFBRSxPQUFPLENBQUM7SUFDbEQsTUFBTU0sV0FBVyxHQUFHQyxRQUFRLENBQUNKLFNBQVMsRUFBRSx5QkFBeUIsRUFBRUYsT0FBTyxDQUFDO0lBQzNFLE1BQU1PLEdBQUcsR0FBR0MsSUFBSSxDQUFDQyxPQUFPLENBQUNWLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDOztJQUU3QztJQUNBO0lBQ0EsTUFBTVcsVUFBVSxHQUFHN0ksTUFBTSxDQUFDOEksT0FBTyxDQUFDWCxPQUFPLENBQUM7SUFDMUNVLFVBQVUsQ0FBQ25DLElBQUksQ0FBQyxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUNGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5ELE1BQU1vQyxZQUFZLEdBQ2pCRixVQUFVLENBQUMzSSxNQUFNLENBQ2hCLENBQUM4SSxRQUFRLEVBQUFDLElBQUE7TUFBQSxJQUFFLENBQUNDLFNBQVMsRUFBRUMsV0FBVyxDQUFDLEdBQUFGLElBQUE7TUFBQSxPQUFLLEdBQUdELFFBQVEsSUFBSUUsU0FBUyxJQUFJQyxXQUFXLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEdBQUc7SUFBQSxHQUM3RlQsSUFBSSxDQUFDVSxRQUFRLENBQUNuQixNQUFNLENBQUMsQ0FBQzlFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUN6QyxDQUFDLEdBQUcsTUFBTTtJQUVYLE1BQU1rRyxZQUFZLEdBQUdYLElBQUksQ0FBQ0MsT0FBTyxDQUFDRixHQUFHLEVBQUVLLFlBQVksQ0FBQztJQUVwRFQsRUFBRSxDQUFDaUIsU0FBUyxDQUFDYixHQUFHLEVBQUU7TUFBRWMsU0FBUyxFQUFFO0lBQUssQ0FBQyxDQUFDO0lBRXRDbEIsRUFBRSxDQUFDbUIsYUFBYSxDQUFDSCxZQUFZLEVBQUVkLFdBQVcsQ0FBQztJQUMzQyxPQUFPYyxZQUFZO0VBQ3BCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQXZFLFFBQUEsQ0FBQWtELFVBQUEsR0FBQUEsVUFBQTtFQU9PLFNBQVNRLFFBQVFBLENBQUNpQixHQUFXLEVBQTRFO0lBQUEsSUFBMUVDLE9BQU8sR0FBQXZCLFNBQUEsQ0FBQW5FLE1BQUEsUUFBQW1FLFNBQUEsUUFBQTdGLFNBQUEsR0FBQTZGLFNBQUEsTUFBRyx5QkFBeUI7SUFBQSxJQUFFRCxPQUE4QixHQUFBQyxTQUFBLENBQUFuRSxNQUFBLFFBQUFtRSxTQUFBLFFBQUE3RixTQUFBLEdBQUE2RixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQzdHLE1BQU13QixPQUErQixHQUFHO01BQUUsWUFBWSxFQUFFRjtJQUFJLENBQUM7O0lBRTdEO0lBQ0EsSUFBSUEsR0FBRyxDQUFDNUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7TUFDdEM4QyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUd0QixFQUFFLENBQUNDLFlBQVksQ0FBQ3NCLE9BQU8sQ0FBQ2pCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN6RjtJQUVBLE1BQU1rQixHQUFHLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDSixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEQsTUFBTUssV0FBa0MsR0FBRztNQUMxQ0MsZ0JBQWdCLEVBQUUsSUFBSTtNQUN0QkMsV0FBVyxFQUFFLFlBQVk7TUFDekJDLGdCQUFnQixFQUFFLElBQUk7TUFDdEIsR0FBR2pDLE9BQU87TUFDVndCLE9BQU8sRUFBRUE7SUFDVixDQUFDO0lBRUQsTUFBTVUsSUFBSSxHQUFHTixRQUFRLENBQUNPLEVBQUUsQ0FBQ0QsSUFBSSxDQUFDUCxHQUFHLEVBQUVHLFdBQVcsQ0FBQztJQUMvQyxJQUFJLENBQUNJLElBQUksRUFBRTtNQUNWLE1BQU0sSUFBSUUsS0FBSyxDQUFDLDBFQUEwRVosT0FBTyxHQUFHLENBQUM7SUFDdEc7SUFDQSxPQUFPVSxJQUFJO0VBQ1o7RUFBQ3RGLFFBQUEsQ0FBQTBELFFBQUEsR0FBQUEsUUFBQTtFQUVNLE1BQU0rQix5QkFBeUIsR0FBRyxlQUFBQSxDQUN4Q3ZJLFNBQXlCLEVBRUs7SUFBQSxJQUQ5QndJLG1CQUFtQixHQUFBckMsU0FBQSxDQUFBbkUsTUFBQSxRQUFBbUUsU0FBQSxRQUFBN0YsU0FBQSxHQUFBNkYsU0FBQSxNQUFHLGtDQUFrQztJQUV4RCxNQUFNc0MsV0FBVyxHQUFHO01BQ25CQyxRQUFRLEVBQUVBLENBQUEsS0FBTTtRQUNmLE9BQU87VUFDTkMsR0FBRyxFQUFFQSxDQUFBLEtBQU1ILG1CQUFtQixLQUFLLGtDQUFrQztVQUNyRW5KLFlBQVksRUFBRUEsQ0FBQSxLQUFNO1lBQ25CLE9BQU9XLFNBQVM7VUFDakIsQ0FBQztVQUNENEksYUFBYSxFQUFFQSxDQUFBLEtBQU10STtRQUN0QixDQUFDO01BQ0YsQ0FBQztNQUNEdUksVUFBVSxFQUFFQSxDQUFBLEtBQU07UUFDakIsT0FBTztVQUNOQyxlQUFlLEVBQUVBLENBQUEsS0FBTXhJO1FBQ3hCLENBQUM7TUFDRjtJQUNELENBQUM7SUFDRCxNQUFNeUksZUFBZSxHQUFHLE1BQU0sSUFBSUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUM7TUFBRVIsV0FBVztNQUFFUyxTQUFTLEVBQUUsRUFBRTtNQUFFcEosUUFBUSxFQUFFLENBQUM7SUFBRSxDQUFDLENBQUM7SUFDbkgsT0FBT2lKLGVBQWUsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7RUFDdEMsQ0FBQztFQUFDckcsUUFBQSxDQUFBeUYseUJBQUEsR0FBQUEseUJBQUE7RUFFSyxNQUFNYSxrQkFBa0IsR0FBRyxTQUFBQSxDQUFBLEVBQTBCO0lBQzNELE1BQU1DLE1BQWEsR0FBRyxFQUFFO0lBQ3hCLE9BQU87TUFDTkMsUUFBUUEsQ0FBQ0MsYUFBNEIsRUFBRUMsYUFBNEIsRUFBRUMsT0FBZSxFQUFRO1FBQzNGSixNQUFNLENBQUMvRSxJQUFJLENBQUM7VUFDWGlGLGFBQWE7VUFDYkMsYUFBYTtVQUNiQztRQUNELENBQUMsQ0FBQztNQUNILENBQUM7TUFDREMsU0FBU0EsQ0FBQSxFQUFVO1FBQ2xCLE9BQU9MLE1BQU07TUFDZCxDQUFDO01BQ0RNLGtCQUFrQkEsQ0FBQ0osYUFBNEIsRUFBRUMsYUFBNEIsRUFBRUMsT0FBZSxFQUFXO1FBQ3hHLE9BQU9KLE1BQU0sQ0FBQ08sSUFBSSxDQUFFQyxLQUFLLElBQUs7VUFDN0IsT0FBT0EsS0FBSyxDQUFDTixhQUFhLEtBQUtBLGFBQWEsSUFBSU0sS0FBSyxDQUFDTCxhQUFhLEtBQUtBLGFBQWEsSUFBSUssS0FBSyxDQUFDSixPQUFPLEtBQUtBLE9BQU87UUFDbkgsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0VBQ0YsQ0FBQztFQUFDM0csUUFBQSxDQUFBc0csa0JBQUEsR0FBQUEsa0JBQUE7RUFFSyxNQUFNVSwwQkFBMEIsR0FBRyxTQUFBQSxDQUN6QzlKLFNBQXlCLEVBQ3pCK0osZ0JBQXlFLEVBQ3hFO0lBQ0QsTUFBTUMsY0FBYyxHQUFHQyxZQUFZLENBQUNqSyxTQUFTLENBQUM7SUFDOUMsTUFBTWtLLGFBQWEsR0FBR0gsZ0JBQWdCLENBQUNJLFdBQVcsR0FDL0NDLDJCQUEyQixDQUF3QnBLLFNBQVMsQ0FBQ2Usb0JBQW9CLENBQUNnSixnQkFBZ0IsQ0FBQ0ksV0FBVyxDQUFZLENBQUMsR0FDM0hDLDJCQUEyQixDQUF3QnBLLFNBQVMsQ0FBQ2Usb0JBQW9CLENBQUMsSUFBSWdKLGdCQUFnQixDQUFDTSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZILE9BQU8sSUFBSUMsZ0JBQWdCLENBQXdCTixjQUFjLEVBQUVELGdCQUFnQixFQUFFWCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUVtQixLQUFLLEVBQUVMLGFBQWEsQ0FBQztFQUNqSSxDQUFDO0VBQUNwSCxRQUFBLENBQUFnSCwwQkFBQSxHQUFBQSwwQkFBQTtFQUNGLE1BQU1VLGNBQW1CLEdBQUcsQ0FBQyxDQUFDO0VBQ3ZCLE1BQU1uTCxZQUFZLEdBQUcsZUFBQUEsQ0FBZ0JMLFlBQW9CLEVBQUU7SUFDakUsTUFBTXlMLFVBQVUsR0FBR0Msa0JBQWtCLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUVySyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWTtNQUN0RixPQUFPLEtBQUs7SUFDYixDQUFDLENBQUM7SUFDRixJQUFJLENBQUNrSyxjQUFjLENBQUN4TCxZQUFZLENBQUMsRUFBRTtNQUNsQyxNQUFNSSxVQUFVLEdBQUcsSUFBS3dMLGNBQWMsQ0FBU0gsVUFBVSxFQUFFekwsWUFBWSxFQUFFc0IsU0FBUyxFQUFFO1FBQUV1Syx5QkFBeUIsRUFBRUEsQ0FBQSxLQUFNO01BQUcsQ0FBQyxDQUFDO01BQzVILE1BQU16TCxVQUFVLENBQUMwTCxvQkFBb0IsQ0FBQyxDQUFDO01BQ3ZDTixjQUFjLENBQUN4TCxZQUFZLENBQUMsR0FBR0ksVUFBVTtJQUMxQztJQUVBLE9BQU9vTCxjQUFjLENBQUN4TCxZQUFZLENBQUM7RUFDcEMsQ0FBQztFQUFDOEQsUUFBQSxDQUFBekQsWUFBQSxHQUFBQSxZQUFBO0VBRUssTUFBTTBMLGlDQUFpQyxHQUFHLFNBQUFBLENBQ2hEVixTQUFvQixFQUNwQkwsY0FBaUMsRUFDakNnQixRQUFZLEVBQ2E7SUFDekIsTUFBTUMsVUFBa0MsR0FBRztNQUMxQ0MsaUJBQWlCLEVBQUViLFNBQVM7TUFDNUJjLG9CQUFvQixFQUFFLEVBQUU7TUFDeEJDLFlBQVksRUFBRUosUUFBUTtNQUN0QkssZUFBZSxFQUFFaEIsU0FBUztNQUMxQmlCLGdCQUFnQixFQUFFakIsU0FBUyxDQUFDa0IsVUFBVTtNQUN0Q3ZCLGNBQWMsRUFBRUE7SUFDakIsQ0FBQztJQUNEaUIsVUFBVSxDQUFDTyxlQUFlLEdBQUdQLFVBQTRDO0lBQ3pFLE9BQU9BLFVBQVU7RUFDbEIsQ0FBQztFQUFDbkksUUFBQSxDQUFBaUksaUNBQUEsR0FBQUEsaUNBQUE7RUFFSyxNQUFNVSxlQUFlLEdBQUcsU0FBQUEsQ0FBVUMsYUFBcUIsRUFBa0I7SUFDL0UsTUFBTUMsY0FBYyxHQUFHQyxhQUFhLENBQUNDLGFBQWEsQ0FBQ0gsYUFBYSxDQUFDO0lBQUMsU0FBQUksSUFBQSxHQUFBM0YsU0FBQSxDQUFBbkUsTUFBQSxFQURBK0osSUFBSSxPQUFBOUksS0FBQSxDQUFBNkksSUFBQSxPQUFBQSxJQUFBLFdBQUFFLElBQUEsTUFBQUEsSUFBQSxHQUFBRixJQUFBLEVBQUFFLElBQUE7TUFBSkQsSUFBSSxDQUFBQyxJQUFBLFFBQUE3RixTQUFBLENBQUE2RixJQUFBO0lBQUE7SUFFdEUsT0FBT0wsY0FBYyxDQUFDTSxTQUFTLENBQUNDLEtBQUssQ0FBQzVMLFNBQVMsRUFBRXlMLElBQUksQ0FBQztFQUN2RCxDQUFDO0VBQUNqSixRQUFBLENBQUEySSxlQUFBLEdBQUFBLGVBQUE7RUFNRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNVLHdCQUF3QkEsQ0FDdkNULGFBQWlDLEVBQ2pDVSxZQUEwQixFQUMxQkMsa0JBQTBELEVBQ2pEO0lBQ1QsTUFBTVYsY0FBYyxHQUFHQyxhQUFhLENBQUNDLGFBQWEsQ0FBQ0gsYUFBYSxDQUFDO0lBQ2pFLE1BQU1ZLElBQUksR0FBRyxJQUFJQyxhQUFhLENBQUMsQ0FBQztJQUNoQ0QsSUFBSSxDQUFDRSxZQUFZLENBQUMsTUFBTSxFQUFFYixjQUFjLENBQUM7SUFFekMsTUFBTWMsWUFBWSxHQUFHLElBQUlDLFNBQVMsQ0FBQ04sWUFBWSxDQUFDO0lBQ2hERSxJQUFJLENBQUNLLFFBQVEsQ0FBQ0YsWUFBWSxDQUFDO0lBQzNCSCxJQUFJLENBQUNNLGlCQUFpQixDQUFDSCxZQUFZLENBQUMxTCxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5RCxJQUFJc0wsa0JBQWtCLEVBQUU7TUFDdkIsS0FBSyxNQUFNLENBQUNuTCxJQUFJLEVBQUUyTCxPQUFPLENBQUMsSUFBSTlPLE1BQU0sQ0FBQzhJLE9BQU8sQ0FBQ3dGLGtCQUFrQixDQUFDLEVBQUU7UUFDakUsTUFBTVMsS0FBSyxHQUFHLElBQUlKLFNBQVMsQ0FBQ0csT0FBTyxDQUFDO1FBQ3BDUCxJQUFJLENBQUNLLFFBQVEsQ0FBQ0csS0FBSyxFQUFFNUwsSUFBSSxDQUFDO1FBQzFCb0wsSUFBSSxDQUFDTSxpQkFBaUIsQ0FBQ0UsS0FBSyxDQUFDL0wsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUVHLElBQUksQ0FBQztNQUM5RDtJQUNEO0lBRUEsT0FBT29MLElBQUksQ0FBQ1MsT0FBTyxDQUFDLENBQUM7RUFDdEI7RUFBQ2pLLFFBQUEsQ0FBQXFKLHdCQUFBLEdBQUFBLHdCQUFBO0VBRUQsTUFBTWEsVUFBVSxHQUFHLFlBQVk7RUFFL0IsTUFBTUMsZ0JBQWdCLEdBQUcsZUFBQUEsQ0FBZ0JDLFdBQXNDLEVBQUU5TixVQUFxQixFQUFFK04sU0FBYyxFQUFFO0lBQUEsSUFBQUMsb0JBQUEsRUFBQUMscUJBQUE7SUFDdkg7SUFDQSxDQUFDLEdBQUdGLFNBQVMsQ0FBQ0csZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzVOLE9BQU8sQ0FBRWlFLElBQUksSUFBSztNQUN6REEsSUFBSSxDQUFDNEosRUFBRSxHQUFHLEdBQUdQLFVBQVUsS0FBS3JKLElBQUksQ0FBQzRKLEVBQUUsRUFBRTtJQUN0QyxDQUFDLENBQUM7SUFDRixNQUFNQyxPQUFPLEdBQUdDLDhCQUE4QixDQUFDVCxVQUFVLEVBQUVFLFdBQVcsQ0FBQztJQUN2RSxNQUFNUSxLQUFLLEdBQUcsZUFBZTtJQUM3QixNQUFNQyxTQUFTLEdBQUc7TUFDakIsU0FBUyxFQUFFO1FBQ1ZKLEVBQUUsRUFBRUcsS0FBSztRQUNURSxJQUFJLEVBQUUsYUFBYTtRQUNuQkMsZUFBZSxFQUFFO1VBQ2hCQyxTQUFTLEVBQUU7UUFDWjtNQUNEO0lBQ0QsQ0FBQztJQUNELE1BQU1DLGFBQTJCLEdBQUc7TUFDbkMxTixjQUFjLEVBQUV4RSxJQUFJLENBQUN1RSxFQUFFLENBQUMsQ0FBQyxDQUFDSSxlQUFlLENBQUM0SSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7TUFDL0RWLFFBQVEsRUFBRTdNLElBQUksQ0FBQ3VFLEVBQUUsQ0FBQyxDQUFDLENBQUNJLGVBQWUsQ0FBQztRQUNuQ25CLFlBQVksRUFBRXhELElBQUksQ0FBQ3VFLEVBQUUsQ0FBQyxDQUFDLENBQUNJLGVBQWUsQ0FBQ3BCLFVBQVU7TUFDbkQsQ0FBQyxDQUFDO01BQ0Y0TyxnQkFBZ0IsRUFBRW5TLElBQUksQ0FBQ3VFLEVBQUUsQ0FBQyxDQUFDLENBQUNJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMvQ3lOLGlCQUFpQixFQUFFcFMsSUFBSSxDQUFDdUUsRUFBRSxDQUFDLENBQUMsQ0FBQ0ksZUFBZSxDQUFDO1FBQzVDME4sUUFBUSxFQUFFLFNBQUFBLENBQVVoTixJQUFZLEVBQUU7VUFDakMsT0FBUXlNLFNBQVMsQ0FBU3pNLElBQUksQ0FBQztRQUNoQztNQUNELENBQUMsQ0FBQztNQUNGaU4sVUFBVSxFQUFFdFMsSUFBSSxDQUFDdUUsRUFBRSxDQUFFZ08sR0FBRyxJQUFLQSxHQUFHO0lBQ2pDLENBQTRCO0lBQzVCO0lBQ0F2UyxJQUFJLENBQUN3UyxLQUFLLENBQUNDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQzlOLGVBQWUsQ0FBQytOLE9BQU8sQ0FBQzVILE9BQU8sQ0FBQzZHLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGM1IsSUFBSSxDQUFDd1MsS0FBSyxDQUFDRyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUNoTyxlQUFlLENBQUMrTixPQUFPLENBQUM1SCxPQUFPLENBQUM2RyxPQUFPLENBQUMsQ0FBQztJQUU1RTNSLElBQUksQ0FBQ3dTLEtBQUssQ0FBQ0ksU0FBUyxFQUF5RCxrQkFBa0IsQ0FBQyxDQUFDak8sZUFBZSxDQUFDdU4sYUFBYSxDQUFDO0lBQy9IbFMsSUFBSSxDQUFDd1MsS0FBSyxDQUFDSyxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQ2xPLGVBQWUsQ0FBQ3VOLGFBQWEsQ0FBQztJQUM3RSxNQUFNWSxTQUFTLENBQUNDLFVBQVUsQ0FBQztNQUMxQkMsV0FBVyxFQUFFbkI7SUFDZCxDQUFDLENBQUM7SUFDRlAsU0FBUyxHQUFHLE1BQU0yQixlQUFlLENBQUNDLE9BQU8sQ0FBQzVCLFNBQVMsRUFBRTtNQUFFak0sSUFBSSxFQUFFLGVBQWU7TUFBRTJOLFdBQVcsRUFBRW5CLEtBQUs7TUFBRUgsRUFBRSxFQUFFUDtJQUFXLENBQUMsQ0FBQzs7SUFFbkg7SUFDQSxNQUFNZ0MsY0FBYyxHQUFHQyxpQkFBaUIsQ0FBQzlCLFNBQVMsQ0FBQztJQUNuRHhNLE1BQU0sQ0FBQ3FPLGNBQWMsQ0FBQ2hOLE1BQU0sQ0FBQyxDQUFDa04sSUFBSSxDQUFDLENBQUFoQyxXQUFXLGFBQVhBLFdBQVcsd0JBQUFFLG9CQUFBLEdBQVhGLFdBQVcsQ0FBRU0sT0FBTyxjQUFBSixvQkFBQSx1QkFBcEJBLG9CQUFBLENBQXNCcEwsTUFBTSxLQUFJLENBQUMsSUFBR2tMLFdBQVcsYUFBWEEsV0FBVyx3QkFBQUcscUJBQUEsR0FBWEgsV0FBVyxDQUFFaUMsOEJBQThCLGNBQUE5QixxQkFBQSx1QkFBM0NBLHFCQUFBLENBQTZDckwsTUFBTSxLQUFJLENBQUMsQ0FBQztJQUNoSSxPQUFPbUwsU0FBUztFQUNqQixDQUFDO0VBRU0sTUFBTThCLGlCQUFpQixHQUFJOU0sR0FBUSxJQUN6QyxDQUFDLEdBQUdBLEdBQUcsQ0FBQ21MLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzVCOEIsT0FBTyxDQUFFQyxDQUFDLElBQUssQ0FBQyxHQUFHQSxDQUFDLENBQUNqTCxVQUFVLENBQUMsQ0FBQzVCLEdBQUcsQ0FBRWtDLENBQUMsSUFBS0EsQ0FBQyxDQUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FDcERvTyxNQUFNLENBQUVDLElBQUksSUFBS0EsSUFBSSxDQUFDMUssUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7RUFBQy9CLFFBQUEsQ0FBQW1NLGlCQUFBLEdBQUFBLGlCQUFBO0VBRXhELE1BQU1PLG1CQUFtQixHQUFHLGVBQUFBLENBQ2xDQyxRQUFnQixFQUNoQnpRLFlBQWdDLEVBQ2hDQyxnQkFBMEQsRUFDMURDLE9BQTZCLEVBQzdCZ08sV0FBdUMsRUFDdkMvTixxQkFBK0IsRUFDOUI7SUFDRCxJQUFJLENBQUNELE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtNQUM1QkEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHd1EsdUJBQXVCLENBQUMsQ0FBQztJQUNuRDtJQUVBLE1BQU1DLFlBQVksR0FBRyxTQUFTRixRQUFRLFNBQVM7SUFDL0MsTUFBTXhLLE1BQU0sR0FBRyxJQUFJeEIsTUFBTSxDQUFDbU0sU0FBUyxDQUFDLENBQUM7SUFDckMsTUFBTUMsTUFBTSxHQUFHNUssTUFBTSxDQUFDNkssZUFBZSxDQUFDSCxZQUFZLEVBQUUsVUFBVSxDQUFDO0lBQy9EO0lBQ0E7O0lBRUEsTUFBTUkscUJBQXFCLEdBQUcsTUFBTWhSLDBCQUEwQixDQUFDQyxZQUFZLEVBQUVDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUVDLHFCQUFxQixDQUFDOztJQUU5SDtJQUNBLElBQUk0USxxQkFBcUIsQ0FBQ2hRLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtNQUN6Q2dRLHFCQUFxQixDQUFDOVAsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHOFAscUJBQXFCLENBQUNoUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUNnQixvQkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDL0c7SUFFQSxJQUFJb00sU0FBUyxHQUFJLE1BQU02QyxlQUFlLENBQUNqQixPQUFPLENBQUNjLE1BQU0sQ0FBQ0ksaUJBQWlCLEVBQUc7TUFBRS9PLElBQUksRUFBRTtJQUFnQixDQUFDLEVBQUU2TyxxQkFBcUIsQ0FBUztJQUVuSSxJQUFJL1EsWUFBWSxJQUFJa08sV0FBVyxFQUFFO01BQ2hDO01BQ0EsTUFBTTlOLFVBQVUsR0FBRyxNQUFNQyxZQUFZLENBQUNMLFlBQVksQ0FBQztNQUNuRG1PLFNBQVMsR0FBRyxNQUFNRixnQkFBZ0IsQ0FBQ0MsV0FBVyxFQUFFOU4sVUFBVSxFQUFFK04sU0FBUyxDQUFDO0lBQ3ZFO0lBQ0EsT0FBT0EsU0FBUztFQUNqQixDQUFDO0VBQUNySyxRQUFBLENBQUEwTSxtQkFBQSxHQUFBQSxtQkFBQTtFQUVLLE1BQU1VLGVBQWUsR0FBRyxlQUFBQSxDQUM5QlQsUUFBZ0IsRUFDaEJ6USxZQUFnQyxFQUNoQ0MsZ0JBQXlDLEVBQ3pDQyxPQUE2QixFQUM3QmdPLFdBQXVDLEVBQ3ZDL04scUJBQStCLEVBQ2I7SUFDbEIsT0FBT2dSLEdBQUcsQ0FBQ0MscUJBQXFCLENBQUN0UyxrQkFBa0IsRUFBRSxZQUFZO01BQ2hFLE1BQU11UyxZQUFZLEdBQUcsTUFBTWIsbUJBQW1CLENBQzdDQyxRQUFRLEVBQ1J6USxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsT0FBTyxFQUNQZ08sV0FBVyxFQUNYL04scUJBQ0QsQ0FBQztNQUNELE1BQU1tUixZQUFZLEdBQUd4TyxZQUFZLENBQUN1TyxZQUFZLEVBQUUvUCxTQUFTLENBQUM7TUFDMURLLE1BQU0sQ0FBQzJQLFlBQVksQ0FBQyxDQUFDQyxHQUFHLENBQUNyTyxzQkFBc0IsQ0FBQyxDQUFDO01BQ2pELE9BQU9vTyxZQUFZO0lBQ3BCLENBQUMsQ0FBQztFQUNILENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUkF4TixRQUFBLENBQUFvTixlQUFBLEdBQUFBLGVBQUE7RUFTTyxlQUFlTSxXQUFXQSxDQUNoQ3RQLElBQVksRUFDWmxDLFlBQW9CLEVBQ3BCQyxnQkFBeUMsRUFDekNDLE9BQTZCLEVBQzdCZ08sV0FBdUMsRUFDVjtJQUFBLElBQUF1RCxrQkFBQTtJQUM3QixNQUFNclIsVUFBVSxHQUFHLE1BQU1DLFlBQVksQ0FBQ0wsWUFBWSxDQUFDO0lBQ25ELE1BQU0wUixhQUFhLEdBQUcxUCxpQkFBaUIsQ0FBQ0UsSUFBSSxDQUFDO0lBQzdDLE1BQU02TyxxQkFBcUIsR0FBRyxNQUFNaFIsMEJBQTBCLENBQUNDLFlBQVksRUFBRUMsZ0JBQWdCLEVBQUVDLE9BQU8sQ0FBQztJQUN2RyxJQUFJeVIsaUJBQWlCLEdBQUcsTUFBTVgsZUFBZSxDQUFDakIsT0FBTyxDQUFDMkIsYUFBYSxFQUFFO01BQUV4UCxJQUFJLEVBQUVBO0lBQUssQ0FBQyxFQUFFNk8scUJBQXFCLENBQUM7SUFDM0csSUFBSTdDLFdBQVcsRUFBRTtNQUNoQnlELGlCQUFpQixHQUFHLE1BQU0xRCxnQkFBZ0IsQ0FBQ0MsV0FBVyxJQUFJLEVBQUUsRUFBRTlOLFVBQVUsRUFBRXVSLGlCQUFpQixDQUFDO0lBQzdGO0lBQ0EsT0FBTztNQUNOQyxTQUFTLEVBQUVELGlCQUFpQjtNQUM1QkUsUUFBUSxFQUFFMU4sU0FBUyxDQUFDLEVBQUFzTixrQkFBQSxHQUFBRSxpQkFBaUIsY0FBQUYsa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQkssU0FBUyxLQUFJLEVBQUU7SUFDdkQsQ0FBQztFQUNGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBaE8sUUFBQSxDQUFBME4sV0FBQSxHQUFBQSxXQUFBO0VBTU8sZUFBZU8sZUFBZUEsQ0FBQzdQLElBQVksRUFBRThQLFFBQXFDLEVBQW1CO0lBQzNHLE1BQU1DLFFBQVEsR0FBRyxzQ0FBc0MvUCxJQUFJLGlEQUFpRDtJQUM1RyxNQUFNK0QsTUFBTSxHQUFHLElBQUl4QixNQUFNLENBQUNtTSxTQUFTLENBQUMsQ0FBQztJQUVyQyxNQUFNc0IsUUFBUSxHQUFHak0sTUFBTSxDQUFDNkssZUFBZSxDQUFDbUIsUUFBUSxFQUFFLFVBQVUsQ0FBQzs7SUFFN0Q7SUFDQSxNQUFNblIsUUFBUSxHQUFHO01BQ2hCQyxNQUFNLEVBQUUsQ0FBQyxDQUFrQztNQUMzQ0UsZUFBZSxFQUFFLENBQUMsQ0FBK0I7TUFDakRDLFlBQVksRUFBRTtRQUFFQyxxQkFBcUIsRUFBRXRFLElBQUksQ0FBQ3VFLEVBQUUsQ0FBQyxDQUFDO1FBQUVDLGNBQWMsRUFBRUEsQ0FBQSxLQUFNQztNQUFVO0lBQ25GLENBQUM7SUFDRCxLQUFLLE1BQU13TSxLQUFLLElBQUlrRSxRQUFRLEVBQUU7TUFDN0IsTUFBTUcsU0FBUyxHQUFHLElBQUl6RSxTQUFTLENBQUMsQ0FBQztNQUNqQ3lFLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDSixRQUFRLENBQUNsRSxLQUFLLENBQUMsQ0FBQztNQUNsQ2hOLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDK00sS0FBSyxDQUFDLEdBQUdxRSxTQUFTO01BQ2xDclIsUUFBUSxDQUFDRyxlQUFlLENBQUM2TSxLQUFLLENBQUMsR0FBR2hOLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDK00sS0FBSyxDQUFDLENBQUMvTCxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7SUFDbkY7SUFDQWpCLFFBQVEsQ0FBQ0ksWUFBWSxDQUFDQyxxQkFBcUIsQ0FBQ0ssZUFBZSxDQUFDakMsNEJBQTRCLENBQUM7O0lBRXpGO0lBQ0EsTUFBTThTLFNBQVMsR0FBRyxNQUFNckIsZUFBZSxDQUFDakIsT0FBTyxDQUFDbUMsUUFBUSxDQUFDakIsaUJBQWlCLEVBQUU7TUFBRS9PO0lBQUssQ0FBQyxFQUFFcEIsUUFBUSxDQUFDOztJQUUvRjtJQUNBLE1BQU13UixTQUFTLEdBQUdELFNBQVMsQ0FBQ0Usb0JBQW9CLENBQUMsZUFBZSxDQUFRO0lBQ3hFLElBQUksQ0FBQUQsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUV0UCxNQUFNLElBQUcsQ0FBQyxFQUFFO01BQzFCLEtBQUssTUFBTXdQLFFBQVEsSUFBSUYsU0FBUyxFQUFFO1FBQ2pDRSxRQUFRLENBQUNDLFNBQVMsR0FBRyxFQUFFO01BQ3hCO0lBQ0Q7O0lBRUE7SUFDQSxNQUFNQyxTQUFTLEdBQUdMLFNBQVMsQ0FBQ00sUUFBUSxDQUFDM1AsTUFBTSxHQUFHLENBQUMsR0FBR3FQLFNBQVMsQ0FBQ1AsU0FBUyxHQUFHTyxTQUFTLENBQUNJLFNBQVM7SUFFM0YsT0FBT3RPLFNBQVMsQ0FBQ3VPLFNBQVMsQ0FBQztFQUM1QjtFQUFDNU8sUUFBQSxDQUFBaU8sZUFBQSxHQUFBQSxlQUFBO0VBRU0sU0FBU2EsZ0JBQWdCQSxDQUFDQyxrQkFBOEMsRUFBa0M7SUFBQSxJQUFoQ0Msc0JBQXNCLEdBQUEzTCxTQUFBLENBQUFuRSxNQUFBLFFBQUFtRSxTQUFBLFFBQUE3RixTQUFBLEdBQUE2RixTQUFBLE1BQUcsS0FBSztJQUM5RyxJQUFJNEwsUUFBUSxHQUFHLENBQUM7SUFDaEIsTUFBTWhPLEdBQUcsR0FBRyx3QkFBd0I7SUFDcEMsTUFBTWlPLFNBQVMsR0FBRyxtQkFBbUI7SUFDckMsU0FBU0MsTUFBTUEsQ0FBQSxFQUFZO01BQUEsSUFBWEMsS0FBSyxHQUFBL0wsU0FBQSxDQUFBbkUsTUFBQSxRQUFBbUUsU0FBQSxRQUFBN0YsU0FBQSxHQUFBNkYsU0FBQSxNQUFHLENBQUM7TUFDeEIsSUFBSWdNLEdBQUcsR0FBRyxFQUFFO01BQ1osS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdMLFFBQVEsR0FBR0csS0FBSyxFQUFFRSxDQUFDLEVBQUUsRUFBRTtRQUMxQ0QsR0FBRyxJQUFJLElBQUk7TUFDWjtNQUNBLE9BQU9BLEdBQUc7SUFDWDtJQUNBLE1BQU1FLGlCQUFpQixHQUFHO01BQ3pCQyxLQUFLLEVBQUUsU0FBQUEsQ0FBVS9WLE9BQVksRUFBRWdXLGdCQUF3QixFQUFFO1FBQ3hELElBQUlDLGFBQWEsR0FBRyxFQUFFO1FBQ3RCLElBQUlELGdCQUFnQixFQUFFO1VBQ3JCLElBQUloVyxPQUFPLENBQUNrVyxTQUFTLENBQUMsQ0FBQyxFQUFFO1lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7WUFDeEIsTUFBTUMsYUFBYSxJQUFBRixxQkFBQSxHQUFJblcsT0FBTyxDQUFDa1csU0FBUyxDQUFDLENBQUMsQ0FBQ0ksY0FBYyxDQUFDTixnQkFBZ0IsQ0FBQyxjQUFBRyxxQkFBQSx3QkFBQUMsc0JBQUEsR0FBckRELHFCQUFBLENBQTJFSSxPQUFPLGNBQUFILHNCQUFBLHVCQUFsRkEsc0JBQUEsQ0FBQUksSUFBQSxDQUFBTCxxQkFBQSxFQUFxRm5XLE9BQU8sQ0FBQztZQUNuSCxJQUFJcVcsYUFBYSxHQUFHLENBQUMsRUFBRTtjQUN0QkosYUFBYSxJQUFJLE1BQU1QLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDbEM7VUFDRDtRQUNEO1FBQ0FPLGFBQWEsSUFBSSxHQUFHalcsT0FBTyxDQUFDeVcsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsR0FBRztRQUN0RCxPQUFPVCxhQUFhO01BQ3JCLENBQUM7TUFDRFUsR0FBRyxFQUFFLFNBQUFBLENBQUEsRUFBWTtRQUNoQixPQUFPLElBQUk7TUFDWixDQUFDO01BQ0RDLE1BQU0sRUFBRSxTQUFBQSxDQUFVNVcsT0FBWSxFQUFFO1FBQUEsSUFBQTZXLEdBQUEsRUFBQUMsV0FBQSxFQUFBQyxxQkFBQTtRQUMvQixJQUFJL0YsRUFBRSxHQUFHaFIsT0FBTyxDQUFDZ1gsS0FBSyxDQUFDLENBQUM7UUFDeEJoRyxFQUFFLEdBQUcsT0FBT0EsRUFBRSxLQUFLLFFBQVEsSUFBQTZGLEdBQUEsR0FBRzdGLEVBQUUsY0FBQTZGLEdBQUEsd0JBQUFDLFdBQUEsR0FBRkQsR0FBQSxDQUFJalMsT0FBTyxjQUFBa1MsV0FBQSx1QkFBWEEsV0FBQSxDQUFBTixJQUFBLENBQUFLLEdBQUEsRUFBY3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBR3pFLEVBQUU7UUFDakUsSUFBSTFOLElBQUksR0FBRyxRQUFRMlQscUJBQXFCLENBQUNDLGFBQWEsQ0FBQ2xHLEVBQUUsQ0FBQyxHQUFHLGFBQWEsR0FBR0EsRUFBRSxFQUFFO1FBQ2pGLEtBQUssTUFBTW1HLFdBQVcsSUFBSW5YLE9BQU8sQ0FBQ29YLFdBQVcsRUFBRTtVQUM5QyxJQUFJcFgsT0FBTyxDQUFDb1gsV0FBVyxDQUFDclUsY0FBYyxDQUFDb1UsV0FBVyxDQUFDLEVBQUU7WUFBQSxJQUFBRSxjQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGVBQUEsRUFBQUMsZUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxlQUFBO1lBQ3BELElBQUlDLGFBQWEsR0FBRzNYLE9BQU8sQ0FBQ29YLFdBQVcsQ0FBQ0QsV0FBVyxDQUFDO1lBQ3BEUSxhQUFhLEdBQUcsT0FBT0EsYUFBYSxLQUFLLFFBQVEsSUFBQU4sY0FBQSxHQUFHTSxhQUFhLGNBQUFOLGNBQUEsd0JBQUFDLHFCQUFBLEdBQWIsQ0FBQUMsZUFBQSxHQUFBRixjQUFBLEVBQWV6UyxPQUFPLGNBQUEwUyxxQkFBQSx1QkFBdEJBLHFCQUFBLENBQUFkLElBQUEsQ0FBQWUsZUFBQSxFQUF5Qi9QLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBR21RLGFBQWE7WUFDNUdBLGFBQWEsR0FBRyxPQUFPQSxhQUFhLEtBQUssUUFBUSxJQUFBSCxlQUFBLEdBQUdHLGFBQWEsY0FBQUgsZUFBQSx3QkFBQUMscUJBQUEsR0FBYixDQUFBQyxlQUFBLEdBQUFGLGVBQUEsRUFBZTVTLE9BQU8sY0FBQTZTLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBQWpCLElBQUEsQ0FBQWtCLGVBQUEsRUFBeUJqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUdrQyxhQUFhO1lBQzdHLElBQUk7Y0FDSEEsYUFBYSxHQUFHLE9BQU9BLGFBQWEsS0FBSyxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsU0FBUyxDQUFDRixhQUFhLENBQUMsR0FBR0EsYUFBYTtZQUNsRyxDQUFDLENBQUMsT0FBTzdFLENBQUMsRUFBRTtjQUNYO1lBQUE7WUFHRHhQLElBQUksSUFBSSxNQUFNb1MsTUFBTSxDQUFDLENBQUMsSUFBSXlCLFdBQVcsS0FBS1EsYUFBYSxFQUFFO1VBQzFELENBQUMsTUFBTSxJQUFJM1gsT0FBTyxDQUFDOFgsYUFBYSxDQUFDL1UsY0FBYyxDQUFDb1UsV0FBVyxDQUFDLEVBQUU7WUFBQSxJQUFBWSxtQkFBQTtZQUM3RCxNQUFNQyxhQUFhLEdBQUc7Y0FBRSxHQUFHaFksT0FBTyxDQUFDOFgsYUFBYSxDQUFDWCxXQUFXO1lBQUUsQ0FBQztZQUMvRCxLQUFBWSxtQkFBQSxHQUFJQyxhQUFhLENBQUMzRyxJQUFJLGNBQUEwRyxtQkFBQSxlQUFsQkEsbUJBQUEsQ0FBb0JFLGFBQWEsRUFBRTtjQUN0QyxPQUFPRCxhQUFhLENBQUMzRyxJQUFJLENBQUM0RyxhQUFhO1lBQ3hDO1lBQ0EsSUFBSUQsYUFBYSxDQUFDRSxPQUFPLEVBQUU7Y0FDMUIsT0FBT0YsYUFBYSxDQUFDRSxPQUFPO1lBQzdCO1lBQ0E1VSxJQUFJLElBQUksTUFBTW9TLE1BQU0sQ0FBQyxDQUFDLElBQUl5QixXQUFXLEtBQUtTLElBQUksQ0FBQ0MsU0FBUyxDQUFDRyxhQUFhLENBQUMsRUFBRTtVQUMxRTtRQUNEO1FBQ0EsS0FBSyxNQUFNYixXQUFXLElBQUluWCxPQUFPLENBQUNtWSxhQUFhLEVBQUU7VUFDaEQsSUFBSW5ZLE9BQU8sQ0FBQ21ZLGFBQWEsQ0FBQ3BWLGNBQWMsQ0FBQ29VLFdBQVcsQ0FBQyxFQUFFO1lBQUEsSUFBQWlCLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGtCQUFBO1lBQ3RELElBQUlDLGdCQUFnQixHQUFHdlksT0FBTyxDQUFDbVksYUFBYSxDQUFDaEIsV0FBVyxDQUFDO1lBQ3pELElBQUksQ0FBQ3pRLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNFIsZ0JBQWdCLENBQUMsRUFBRTtjQUNyQ0EsZ0JBQWdCLEdBQUcsQ0FBQ0EsZ0JBQWdCLENBQUM7WUFDdEM7WUFDQUEsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDdFMsR0FBRyxDQUFFdVMsdUJBQStCLElBQUs7Y0FBQSxJQUFBQyxxQkFBQTtjQUM1RSxPQUFPLE9BQU9ELHVCQUF1QixLQUFLLFFBQVEsR0FDL0NBLHVCQUF1QixhQUF2QkEsdUJBQXVCLHdCQUFBQyxxQkFBQSxHQUF2QkQsdUJBQXVCLENBQUU1VCxPQUFPLGNBQUE2VCxxQkFBQSx1QkFBaENBLHFCQUFBLENBQUFqQyxJQUFBLENBQUFnQyx1QkFBdUIsRUFBWS9DLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FDbkQrQyx1QkFBdUI7WUFDM0IsQ0FBQyxDQUFDO1lBRUZsVixJQUFJLElBQUksTUFBTW9TLE1BQU0sQ0FBQyxDQUFDLElBQUl5QixXQUFXLEtBQUssQ0FBQyxFQUFBaUIsaUJBQUEsR0FBQUcsZ0JBQWdCLGNBQUFILGlCQUFBLHdCQUFBQyxxQkFBQSxHQUFoQixDQUFBQyxrQkFBQSxHQUFBRixpQkFBQSxFQUFrQjlSLElBQUksY0FBQStSLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBQTdCLElBQUEsQ0FBQThCLGtCQUFBLEVBQXlCLEdBQUcsQ0FBQyxLQUFJQyxnQkFBZ0IsS0FBS3hVLFNBQVMsRUFBRTtVQUM3RztRQUNEO1FBQ0EsSUFBSXdSLHNCQUFzQixJQUFJLEVBQUF3QixxQkFBQSxHQUFBL1csT0FBTyxDQUFDMFksbUJBQW1CLGNBQUEzQixxQkFBQSx1QkFBM0JBLHFCQUFBLENBQTZCdFIsTUFBTSxJQUFHLENBQUMsRUFBRTtVQUN0RW5DLElBQUksSUFBSSxNQUFNb1MsTUFBTSxDQUFDLENBQUMseUJBQXlCMVYsT0FBTyxDQUFDMFksbUJBQW1CLENBQUNwUyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDeEY7UUFDQSxLQUFLLE1BQU02USxXQUFXLElBQUluWCxPQUFPLENBQUMyWSxjQUFjLEVBQUU7VUFDakQsSUFBSTNZLE9BQU8sQ0FBQzJZLGNBQWMsQ0FBQzVWLGNBQWMsQ0FBQ29VLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZEN1QsSUFBSSxJQUFJLE1BQU1vUyxNQUFNLENBQUMsQ0FBQyxJQUFJeUIsV0FBVyxRQUFRO1VBQzlDO1FBQ0Q7UUFDQTdULElBQUksSUFBSSxFQUFFO1FBQ1YsT0FBT0EsSUFBSTtNQUNaLENBQUM7TUFDRHNWLGdCQUFnQixFQUFFLFNBQUFBLENBQVU1WSxPQUFzRSxFQUFFNlksS0FBYSxFQUFFO1FBQ2xILElBQUlDLEdBQUcsR0FBRyxNQUFNcEQsTUFBTSxDQUFDLENBQUMsR0FBR21ELEtBQUssRUFBRTtRQUNsQ3JELFFBQVEsRUFBRTtRQUVWLElBQUl4VixPQUFPLENBQUM4WCxhQUFhLENBQUNlLEtBQUssQ0FBQyxFQUFFO1VBQ2pDQyxHQUFHLElBQUksWUFBWTlZLE9BQU8sQ0FBQzhYLGFBQWEsQ0FBQ2UsS0FBSyxDQUFDLENBQUMxTyxJQUFJLGlCQUFpQnVMLE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDaEYsQ0FBQyxNQUFNO1VBQ05vRCxHQUFHLElBQUksT0FBT3BELE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDekI7UUFDQSxPQUFPb0QsR0FBRztNQUNYLENBQUM7TUFDREMsY0FBYyxFQUFFLFNBQUFBLENBQVUvWSxPQUFZLEVBQUU2WSxLQUFhLEVBQUU7UUFDdERyRCxRQUFRLEVBQUU7UUFDVixJQUFJeFYsT0FBTyxDQUFDOFgsYUFBYSxDQUFDZSxLQUFLLENBQUMsRUFBRTtVQUNqQyxPQUFPLEtBQUtuRCxNQUFNLENBQUMsQ0FBQyxHQUFHO1FBQ3hCLENBQUMsTUFBTTtVQUNOLE9BQU8sS0FBS0EsTUFBTSxDQUFDLENBQUMsR0FBRztRQUN4QjtNQUNEO0lBQ0QsQ0FBQztJQUNELElBQUloUCxLQUFLLENBQUNDLE9BQU8sQ0FBQzJPLGtCQUFrQixDQUFDLEVBQUU7TUFDdEMsT0FBT0Esa0JBQWtCLENBQUNyUCxHQUFHLENBQUUrUyxlQUEyQixJQUFLO1FBQzlELE9BQU8sSUFBSUMsVUFBVSxDQUFDRCxlQUFlLEVBQUVsRCxpQkFBaUIsQ0FBQyxDQUFDb0QsU0FBUyxDQUFDLENBQUM7TUFDdEUsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ04sT0FBTyxJQUFJRCxVQUFVLENBQUMzRCxrQkFBa0IsRUFBRVEsaUJBQWlCLENBQUMsQ0FBQ29ELFNBQVMsQ0FBQyxDQUFDO0lBQ3pFO0VBQ0Q7RUFBQzNTLFFBQUEsQ0FBQThPLGdCQUFBLEdBQUFBLGdCQUFBO0VBRU0sU0FBUzhELGFBQWFBLENBQUEsRUFBRztJQUMvQixJQUFJQyxTQUFvQjtJQUN4QixNQUFNQyxTQUFTLEdBQUcsSUFBSXJILE9BQU8sQ0FBRTVILE9BQU8sSUFBSztNQUMxQ2dQLFNBQVMsR0FBR2hQLE9BQU87SUFDcEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTztNQUFFa1AsT0FBTyxFQUFFRCxTQUFTO01BQUVqUCxPQUFPLEVBQUVnUDtJQUFVLENBQUM7RUFDbEQ7RUFBQzdTLFFBQUEsQ0FBQTRTLGFBQUEsR0FBQUEsYUFBQTtFQUVNLFNBQVNJLDZCQUE2QkEsQ0FBQ0MsYUFBdUMsRUFBRWhXLE1BQWdDLEVBQVc7SUFDakksT0FBUWlXLGFBQWEsQ0FBcUJDLG9CQUFvQixDQUM3RCxNQUFNO01BQ0wsT0FBT0YsYUFBYSxDQUFDRyxVQUFVLENBQUMsQ0FBQztJQUNsQyxDQUFDLEVBQ0Q7TUFDQ3BXLFFBQVEsRUFBRSxTQUFBQSxDQUFVcVcsZUFBb0MsRUFBRTtRQUN6REEsZUFBZSxDQUFDcFcsTUFBTSxHQUFHQSxNQUFNO1FBQy9CLE9BQU9vVyxlQUFlO01BQ3ZCO0lBQ0QsQ0FDRCxDQUFDO0VBQ0Y7RUFBQ3JULFFBQUEsQ0FBQWdULDZCQUFBLEdBQUFBLDZCQUFBO0VBRU0sU0FBU00scUJBQXFCQSxDQUFBLEVBQWlEO0lBQUEsU0FBQUMsS0FBQSxHQUFBbFEsU0FBQSxDQUFBbkUsTUFBQSxFQUE3Q3NQLFNBQVMsT0FBQXJPLEtBQUEsQ0FBQW9ULEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtNQUFUaEYsU0FBUyxDQUFBZ0YsS0FBQSxJQUFBblEsU0FBQSxDQUFBbVEsS0FBQTtJQUFBO0lBQ2pEO0lBQ0EsTUFBTUMsb0JBQW9CLEdBQUlDLG9CQUFvQixDQUFTQyxtQkFBbUI7SUFDOUU7SUFDQSxNQUFNQyxnQkFBZ0IsR0FBRzdhLElBQUksQ0FBQ3dTLEtBQUssQ0FBQ21JLG9CQUFvQixFQUFTLHFCQUFxQixDQUFDO0lBQ3ZGRSxnQkFBZ0IsQ0FBQ0Msa0JBQWtCLENBQUUsQ0FBQ0MsWUFBb0IsRUFBRUMsU0FBaUIsS0FBSztNQUNqRixLQUFLLE1BQU1yRixRQUFRLElBQUlGLFNBQVMsRUFBRTtRQUNqQyxJQUFJRSxRQUFRLENBQUN0USxJQUFJLEtBQUswVixZQUFZLEVBQUU7VUFDbkMsT0FBT0UsY0FBYyxDQUFDdEYsUUFBUSxDQUFDM0UsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDO01BQ0Q7TUFDQSxPQUFPMEosb0JBQW9CLENBQUNLLFlBQVksRUFBRUMsU0FBUyxDQUFDO0lBQ3JELENBQWlDLENBQUM7SUFDbEMsT0FBT0gsZ0JBQWdCO0VBQ3hCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWkE1VCxRQUFBLENBQUFzVCxxQkFBQSxHQUFBQSxxQkFBQTtFQWFPLGVBQWVXLHNCQUFzQkEsQ0FDM0M3USxPQU9DLEVBQ0RoRixJQUFhLEVBQ2I4VixTQUFrQixFQUM4RDtJQUFBLElBQUFDLEtBQUEsRUFBQUMsS0FBQTtJQUNoRixJQUFJQyxPQUFPLEdBQUdqUixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRWlSLE9BQU87SUFDOUIsSUFBSSxDQUFDQSxPQUFPLEVBQUU7TUFDYkEsT0FBTyxHQUFHblIsVUFBVSxDQUFDVSxJQUFJLENBQUM3RCxJQUFJLENBQUN1VSxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUNsRTtJQUNBLE1BQU1DLElBQUksR0FBR0MsR0FBRyxDQUFDLENBQUM7SUFDbEIsTUFBTS9KLEVBQUUsR0FBRyxDQUFBckgsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUySSxXQUFXLEtBQUksZUFBZXdJLElBQUksRUFBRTtJQUN4RCxNQUFNRSxVQUFVLEdBQUdsUixFQUFFLENBQUNDLFlBQVksQ0FBQzZRLE9BQU8sQ0FBQyxDQUFDaFEsUUFBUSxDQUFDLENBQUM7SUFDdERxUSxHQUFHLENBQUMzYixJQUFJLENBQUM0YixvQkFBb0IsQ0FBQyxxQkFBcUJKLElBQUksNEJBQTRCLEVBQUVFLFVBQVUsQ0FBQztJQUVoR0MsR0FBRyxDQUFDRSxFQUFFLENBQUNDLE1BQU0sQ0FBQyxlQUFlTixJQUFJLFlBQVksRUFBRSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsVUFBVU8sYUFBMkIsRUFBRTtNQUNuSCxZQUFZOztNQUVaLE9BQU9DLFlBQVksQ0FBQ3BXLE1BQU0sQ0FBQyxlQUFlNFYsSUFBSSxZQUFZLEVBQUU7UUFDM0RTLFFBQVEsRUFBRTtVQUNUQyxRQUFRLEVBQUU7WUFDVCxTQUFTLEVBQUU7Y0FDVkMsV0FBVyxFQUFFO2dCQUNaQyxXQUFXLEVBQUU7a0JBQ1pDLEdBQUcsRUFBRSxxQkFBcUJiLElBQUksR0FBRztrQkFDakN6SixJQUFJLEVBQUUsT0FBTztrQkFDYjlOLFFBQVEsRUFBRTtvQkFDVHFZLFlBQVksRUFBRTtrQkFDZjtnQkFDRDtjQUNEO1lBQ0QsQ0FBQztZQUNELFNBQVMsRUFBRTtjQUNWcFksTUFBTSxFQUFFO2dCQUNQLEVBQUUsRUFBRTtrQkFDSHFZLFVBQVUsRUFBRSxhQUFhO2tCQUN6QnRZLFFBQVEsRUFBRSxDQUFDO2dCQUNaO2NBQ0QsQ0FBQztjQUNEdVksT0FBTyxFQUFFO2dCQUNSQyxPQUFPLEVBQUU7a0JBQ1JDLE9BQU8sRUFBRTtvQkFDUjNLLElBQUksRUFBRSxXQUFXO29CQUNqQjFNLElBQUksRUFBRUEsSUFBSSxJQUFJLGlCQUFpQjtvQkFDL0JxTSxFQUFFLEVBQUUsU0FBUztvQkFDYnlKLFNBQVMsRUFBRUEsU0FBUztvQkFDcEI5USxPQUFPLEVBQUU7c0JBQ1JwRyxRQUFRLEVBQUU7d0JBQ1QsSUFBSSxDQUFBb0csT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU2RCxnQkFBZ0IsS0FBSSxDQUFDLENBQUMsQ0FBQzt3QkFDcENJLFdBQVcsRUFBRSxDQUFBakUsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVzUyxlQUFlLEtBQUksV0FBVzt3QkFDcERDLFFBQVEsRUFBRSxLQUFLO3dCQUNmQyxXQUFXLEVBQUUsQ0FBQXhTLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFeVMsV0FBVyxNQUFLLE1BQU1DLElBQUEsQ0FBQ0MsSUFBSSxJQUFPLENBQUMsQ0FBQzt3QkFDMURoTSxPQUFPLEVBQUUzRyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTJHO3NCQUNuQjtvQkFDRDtrQkFDRDtnQkFDRCxDQUFDO2dCQUNEaU0sTUFBTSxFQUFFLENBQ1A7a0JBQ0NDLE9BQU8sRUFBRSxVQUFVO2tCQUNuQjdYLElBQUksRUFBRSxTQUFTO2tCQUNmOFgsTUFBTSxFQUFFO2dCQUNULENBQUM7Y0FFSDtZQUNEO1VBQ0Q7UUFDRDtNQUNELENBQUMsQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLE1BQU1DLGdCQUFnQixHQUFJLE1BQU14SyxTQUFTLENBQUM5RCxNQUFNLENBQUM7TUFBRXpKLElBQUksRUFBRSxlQUFlbVcsSUFBSSxFQUFFO01BQUU5SixFQUFFLEVBQUVBO0lBQUcsQ0FBQyxDQUFrQjtJQUUxRyxNQUFNMEwsZ0JBQWdCLENBQUNDLFdBQVc7SUFDbEMsTUFBTUMsQ0FBQyxHQUFHLFFBQUFsQyxLQUFBLEdBQU0sQ0FBQUMsS0FBQSxHQUFDK0IsZ0JBQWdCLENBQUNHLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBeUJDLElBQUksY0FBQXJDLEtBQUEsdUJBQS9FQSxLQUFBLENBQUFsRSxJQUFBLENBQUFtRSxLQUFrRixDQUFDO0lBQ25HLE9BQU87TUFBRWhYLFlBQVksRUFBRStZLGdCQUFnQjtNQUFFTSxpQkFBaUIsRUFBRUosQ0FBQyxDQUFDSztJQUFPLENBQUM7RUFDdkU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEExVyxRQUFBLENBQUFpVSxzQkFBQSxHQUFBQSxzQkFBQTtFQU1PLFNBQVMwQyxXQUFXQSxDQUFDQyxVQUEwQixFQUFFL2EsUUFBMkMsRUFBMkI7SUFDN0gsS0FBSyxJQUFJeVQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc0gsVUFBVSxDQUFDMVgsTUFBTSxFQUFFb1EsQ0FBQyxFQUFFLEVBQUU7TUFDM0MsTUFBTXVILE9BQU8sR0FBR0QsVUFBVSxDQUFDRSxJQUFJLENBQUN4SCxDQUFDLENBQWdCO01BQ2pELElBQUl6VCxRQUFRLENBQUNnYixPQUFPLENBQUMsRUFBRTtRQUN0QixPQUFPQSxPQUFPO01BQ2Y7SUFDRDtJQUNBLE9BQU9yWixTQUFTO0VBQ2pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBd0MsUUFBQSxDQUFBMlcsV0FBQSxHQUFBQSxXQUFBO0VBTU8sZUFBZUksWUFBWUEsQ0FBQ3RkLE9BQXNCLEVBQUV1ZCxTQUFpQixFQUFrQjtJQUM3RixPQUFPLElBQUl2TCxPQUFPLENBQUU1SCxPQUFPLElBQUs7TUFDL0JwSyxPQUFPLENBQUN3ZCxlQUFlLENBQUNELFNBQVMsRUFBR0UsS0FBWSxJQUFLO1FBQ3BEclQsT0FBTyxDQUFDcVQsS0FBSyxDQUFDO01BQ2YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0VBQ0g7RUFBQ2xYLFFBQUEsQ0FBQStXLFlBQUEsR0FBQUEsWUFBQTtFQUFBLE9BQUEvVyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -479,7 +479,7 @@ export const getConverterContextForTest = function (
|
|
|
479
479
|
const metaModelCache: any = {};
|
|
480
480
|
export const getMetaModel = async function (sMetadataUrl: string) {
|
|
481
481
|
const oRequestor = _MetadataRequestor.create({}, "4.0", undefined, {}, {}, function () {
|
|
482
|
-
return
|
|
482
|
+
return false;
|
|
483
483
|
});
|
|
484
484
|
if (!metaModelCache[sMetadataUrl]) {
|
|
485
485
|
const oMetaModel = new (ODataMetaModel as any)(oRequestor, sMetadataUrl, undefined, { _requestAnnotationChanges: () => [] });
|
|
@@ -293,6 +293,9 @@ sap.ui.define(
|
|
|
293
293
|
.clickKPITag(sTitle)
|
|
294
294
|
.description("Opening card for KPI '" + sTitle + "'")
|
|
295
295
|
.execute();
|
|
296
|
+
},
|
|
297
|
+
iCloseKPICard: function () {
|
|
298
|
+
return KPIBuilder.create(this).closeKPICard().description("Closing KPI card").execute();
|
|
296
299
|
}
|
|
297
300
|
},
|
|
298
301
|
/**
|
|
@@ -464,7 +467,7 @@ sap.ui.define(
|
|
|
464
467
|
return OpaBuilder.create(this)
|
|
465
468
|
.hasType("sap.f.DynamicPageTitle")
|
|
466
469
|
.has(function (oDynamicPageTitle) {
|
|
467
|
-
return oDynamicPageTitle.getSnappedContent()[0].getText() === sAppliedFilters;
|
|
470
|
+
return oDynamicPageTitle.getSnappedContent()[0].getContent().getText() === sAppliedFilters;
|
|
468
471
|
})
|
|
469
472
|
.description("The correct text on the collapsed filterbar is displayed")
|
|
470
473
|
.execute();
|
package/src/sap/fe/test/Shell.js
CHANGED
|
@@ -4,285 +4,290 @@
|
|
|
4
4
|
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
5
5
|
|
|
6
6
|
*/
|
|
7
|
-
sap.ui.define(
|
|
8
|
-
"
|
|
7
|
+
sap.ui.define(
|
|
8
|
+
["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils", "sap/ui/test/actions/Press"],
|
|
9
|
+
function (OpaBuilder, Opa5, Utils, Press) {
|
|
10
|
+
"use strict";
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
oTile
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
iSeeFlpDashboard: function () {
|
|
171
|
-
return OpaBuilder.create(this).hasId("mainShell").description("Seeing FLP Dashboard").execute();
|
|
172
|
-
},
|
|
173
|
-
iShouldSeeTheAppTile: function (sTitle) {
|
|
174
|
-
return OpaBuilder.create(this)
|
|
175
|
-
.hasType("sap.ushell.ui.launchpad.Tile")
|
|
176
|
-
.hasProperties({
|
|
177
|
-
target: sTitle
|
|
178
|
-
})
|
|
179
|
-
.description("Seeing Tile " + sTitle)
|
|
180
|
-
.execute();
|
|
181
|
-
},
|
|
182
|
-
iSeeNavigateBack: function () {
|
|
183
|
-
return OpaBuilder.create(this).hasId("backBtn").description("I see the back navigation button").execute();
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a test page definition for the shell.
|
|
14
|
+
* @class Provides a test page definition for the shell.
|
|
15
|
+
*
|
|
16
|
+
* When using {@link sap.fe.test.JourneyRunner}, this page is made available by default via <code>onTheShell</code>.
|
|
17
|
+
* @param {...object} [aAdditionalPageDefinitions] Additional custom page functions, provided in an object containing <code>actions</code> and <code>assertions</code>
|
|
18
|
+
* @returns {sap.fe.test.Shell} A shell page definition
|
|
19
|
+
* @name sap.fe.test.Shell
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
function ShellPage(aAdditionalPageDefinitions) {
|
|
23
|
+
aAdditionalPageDefinitions = Array.isArray(arguments[0]) ? arguments[0] : Array.prototype.slice.call(arguments, 0);
|
|
24
|
+
return Utils.mergeObjects.apply(
|
|
25
|
+
Utils,
|
|
26
|
+
[
|
|
27
|
+
{
|
|
28
|
+
actions: {
|
|
29
|
+
/**
|
|
30
|
+
* Navigates back via shell back button.
|
|
31
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
32
|
+
* @function
|
|
33
|
+
* @name sap.fe.test.Shell#iNavigateBack
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
iNavigateBack: function () {
|
|
37
|
+
return OpaBuilder.create(this)
|
|
38
|
+
.hasId("backBtn")
|
|
39
|
+
.doPress()
|
|
40
|
+
.description("Navigating back via shell")
|
|
41
|
+
.execute();
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Navigates to the launch pad via the home button.
|
|
45
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
46
|
+
* @function
|
|
47
|
+
* @name sap.fe.test.Shell#iNavigateHome
|
|
48
|
+
* @public
|
|
49
|
+
*/
|
|
50
|
+
iNavigateHome: function () {
|
|
51
|
+
return OpaBuilder.create(this)
|
|
52
|
+
.hasId("shell-header")
|
|
53
|
+
.do(function () {
|
|
54
|
+
// the logo is not a UI5 control
|
|
55
|
+
var oTestWindow = Opa5.getWindow();
|
|
56
|
+
oTestWindow.document.getElementById("shell-header-logo").click();
|
|
57
|
+
})
|
|
58
|
+
.description("Pressing Home button in Shell header")
|
|
59
|
+
.execute();
|
|
60
|
+
},
|
|
61
|
+
/**
|
|
62
|
+
* Opens the navigation menu in the shell header.
|
|
63
|
+
* @param {string} [NavigationTitle] The title of the navigation menu to be clicked. If undefined the menu is identified by the internal id only.
|
|
64
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
65
|
+
* @function
|
|
66
|
+
* @name sap.fe.test.Shell#iOpenNavigationMenu
|
|
67
|
+
* @public
|
|
68
|
+
*/
|
|
69
|
+
iOpenNavigationMenu: function (NavigationTitle) {
|
|
70
|
+
return OpaBuilder.create(this)
|
|
71
|
+
.pollingInterval(1000) // the shell needs some time to prepare the navigation menu
|
|
72
|
+
.hasId("shellAppTitle")
|
|
73
|
+
.has(function (oShellObject) {
|
|
74
|
+
return NavigationTitle ? oShellObject.getText() === NavigationTitle : true;
|
|
75
|
+
})
|
|
76
|
+
.doPress()
|
|
77
|
+
.description("Expanding Shell Navigation Menu")
|
|
78
|
+
.execute();
|
|
79
|
+
},
|
|
80
|
+
/**
|
|
81
|
+
* Navigates via a navigation item in the shell's navigation menu.
|
|
82
|
+
* @param {string} sItem The label of the navigation item
|
|
83
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
84
|
+
* @function
|
|
85
|
+
* @name sap.fe.test.Shell#iNavigateViaMenu
|
|
86
|
+
* @public
|
|
87
|
+
*/
|
|
88
|
+
iNavigateViaMenu: function (sItem) {
|
|
89
|
+
return OpaBuilder.create(this)
|
|
90
|
+
.hasId("sapUshellNavHierarchyItems")
|
|
91
|
+
.doOnAggregation("items", OpaBuilder.Matchers.properties({ title: sItem }), OpaBuilder.Actions.press())
|
|
92
|
+
.description(Utils.formatMessage("Navigating to '{0}' via Shell Navigation Menu", sItem))
|
|
93
|
+
.execute();
|
|
94
|
+
},
|
|
95
|
+
/**
|
|
96
|
+
* Selecting a tile in the launchpad by its target app, for example <code>iPressTile("SalesOrder-manage")</code>.
|
|
97
|
+
* @param {string} sTarget The target application (hash)
|
|
98
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
99
|
+
* @function
|
|
100
|
+
* @name sap.fe.test.Shell#iPressTile
|
|
101
|
+
* @public
|
|
102
|
+
*/
|
|
103
|
+
iPressTile: function (sTarget) {
|
|
104
|
+
return this.waitFor({
|
|
105
|
+
controlType: "sap.ushell.ui.launchpad.VizInstanceCdm",
|
|
106
|
+
matchers: function (oTile) {
|
|
107
|
+
return oTile.getTargetURL() === "#" + sTarget;
|
|
108
|
+
},
|
|
109
|
+
actions: new Press(),
|
|
110
|
+
success: function () {
|
|
111
|
+
Opa5.assert.ok(true, Utils.formatMessage("Clicking on tile with target '{0}'", sTarget));
|
|
112
|
+
},
|
|
113
|
+
errorMessage: "Could not find the tile"
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
iOpenDefaultValues: function () {
|
|
117
|
+
return OpaBuilder.create(this)
|
|
118
|
+
.hasId("userActionsMenuHeaderButton")
|
|
119
|
+
.doPress()
|
|
120
|
+
.description("Opening FLP Default Values dialog")
|
|
121
|
+
.execute();
|
|
122
|
+
},
|
|
123
|
+
iEnterAValueForUserDefaults: function (oField, vValue) {
|
|
124
|
+
return OpaBuilder.create(this)
|
|
125
|
+
.hasProperties({
|
|
126
|
+
name: oField.field
|
|
127
|
+
})
|
|
128
|
+
.isDialogElement()
|
|
129
|
+
.doEnterText(vValue)
|
|
130
|
+
.description("Entering text in the field '" + oField.field + "' with value '" + oField + "'")
|
|
131
|
+
.execute();
|
|
132
|
+
},
|
|
133
|
+
iSelectAListItem: function (sOption) {
|
|
134
|
+
return OpaBuilder.create(this)
|
|
135
|
+
.hasType("sap.m.StandardListItem")
|
|
136
|
+
.hasProperties({ title: sOption })
|
|
137
|
+
.doPress()
|
|
138
|
+
.description("Selecting item: " + sOption)
|
|
139
|
+
.execute();
|
|
140
|
+
},
|
|
141
|
+
iLaunchExtendedParameterDialog: function () {
|
|
142
|
+
return OpaBuilder.create(this)
|
|
143
|
+
.hasType("sap.m.Button")
|
|
144
|
+
.isDialogElement()
|
|
145
|
+
.hasProperties({
|
|
146
|
+
text: "Additional Values"
|
|
147
|
+
})
|
|
148
|
+
.doPress()
|
|
149
|
+
.description("Launching Extended Parameter Dialog")
|
|
150
|
+
.execute();
|
|
151
|
+
},
|
|
152
|
+
iClickOnButtonWithText: function (sText) {
|
|
153
|
+
return OpaBuilder.create(this)
|
|
154
|
+
.hasType("sap.m.Button")
|
|
155
|
+
.hasProperties({
|
|
156
|
+
text: sText
|
|
157
|
+
})
|
|
158
|
+
.doPress()
|
|
159
|
+
.description("Clicking on button with text: " + sText)
|
|
160
|
+
.execute();
|
|
161
|
+
},
|
|
162
|
+
iClickOnButtonWithIcon: function (sIcon) {
|
|
163
|
+
return OpaBuilder.create(this)
|
|
164
|
+
.hasType("sap.m.Button")
|
|
165
|
+
.hasProperties({
|
|
166
|
+
icon: "sap-icon://" + sIcon
|
|
167
|
+
})
|
|
168
|
+
.doPress()
|
|
169
|
+
.description("Clicking on button with icon: " + sIcon)
|
|
170
|
+
.execute();
|
|
171
|
+
}
|
|
184
172
|
},
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
.
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
173
|
+
assertions: {
|
|
174
|
+
iSeeFlpDashboard: function () {
|
|
175
|
+
return OpaBuilder.create(this).hasId("mainShell").description("Seeing FLP Dashboard").execute();
|
|
176
|
+
},
|
|
177
|
+
iShouldSeeTheAppTile: function (sTitle) {
|
|
178
|
+
return OpaBuilder.create(this)
|
|
179
|
+
.hasType("sap.ushell.ui.launchpad.VizInstanceCdm")
|
|
180
|
+
.hasProperties({
|
|
181
|
+
targetURL: sTitle
|
|
182
|
+
})
|
|
183
|
+
.description("Seeing Tile " + sTitle)
|
|
184
|
+
.execute();
|
|
185
|
+
},
|
|
186
|
+
iSeeNavigateBack: function () {
|
|
187
|
+
return OpaBuilder.create(this).hasId("backBtn").description("I see the back navigation button").execute();
|
|
188
|
+
},
|
|
189
|
+
iSeeShellNavHierarchyItem: function (sItemTitle, iItemPosition, iItemNumbers, sItemDesc) {
|
|
190
|
+
return OpaBuilder.create(this)
|
|
191
|
+
.viewId(null)
|
|
192
|
+
.hasId("backBtn")
|
|
193
|
+
.hasId("sapUshellNavHierarchyItems")
|
|
194
|
+
.hasAggregationLength("items", iItemNumbers)
|
|
195
|
+
.has(OpaBuilder.Matchers.aggregationAtIndex("items", iItemPosition - 1))
|
|
196
|
+
.hasProperties({ title: sItemTitle, description: sItemDesc })
|
|
197
|
+
.description(
|
|
198
|
+
Utils.formatMessage(
|
|
199
|
+
"Checking Navigation Hierarchy Items ({2}): Name={0}, Position={1}, Description={3}",
|
|
200
|
+
sItemTitle,
|
|
201
|
+
iItemPosition,
|
|
202
|
+
iItemNumbers,
|
|
203
|
+
sItemDesc
|
|
204
|
+
)
|
|
200
205
|
)
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
206
|
+
.execute();
|
|
207
|
+
},
|
|
208
|
+
iSeeShellAppTitle: function (sTitle) {
|
|
209
|
+
return OpaBuilder.create(this)
|
|
210
|
+
.viewId(null)
|
|
211
|
+
.hasId("shellAppTitle")
|
|
212
|
+
.hasProperties({ text: sTitle })
|
|
213
|
+
.description(sTitle + " is the Shell App Title")
|
|
214
|
+
.execute();
|
|
215
|
+
},
|
|
216
|
+
/**
|
|
217
|
+
* Check an intent-based navigation.
|
|
218
|
+
* The function checks the semantic object and the action within the URL of an application.
|
|
219
|
+
* Optionally, further URL parameters can be checked.
|
|
220
|
+
* @param {string} sSemanticObject The semantic object of the application
|
|
221
|
+
* @param {string} sAction The action of the application
|
|
222
|
+
* @param {Array} [aURLParams] More URL parameters to be checked. The pattern is:
|
|
223
|
+
* <code><pre>
|
|
224
|
+
* [{
|
|
225
|
+
* property: <expected name of URL parameter>,
|
|
226
|
+
* value: <expected value of URL parameter>
|
|
227
|
+
* }]
|
|
228
|
+
* </pre></code>
|
|
229
|
+
* @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
|
|
230
|
+
* @function
|
|
231
|
+
* @name sap.fe.test.Shell#iCheckIntentBasedNavigation
|
|
232
|
+
* @public
|
|
233
|
+
*/
|
|
234
|
+
iCheckIntentBasedNavigation: function (sSemanticObject, sAction, aURLParams) {
|
|
235
|
+
function _hasAllURLParameters(oURLParams, aInputURLParams) {
|
|
236
|
+
try {
|
|
237
|
+
aInputURLParams.forEach(function (oParam) {
|
|
238
|
+
if (oURLParams.hasOwnProperty(oParam.property)) {
|
|
239
|
+
if (oURLParams[oParam.property][0] !== oParam.value) {
|
|
240
|
+
throw "input parameter not equal to actual URL parameter";
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
throw "input parameter not found in URL";
|
|
237
244
|
}
|
|
245
|
+
});
|
|
246
|
+
return true;
|
|
247
|
+
} catch (error) {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return OpaBuilder.create(this)
|
|
253
|
+
.check(function () {
|
|
254
|
+
var oParsedHash = Opa5.getWindow()
|
|
255
|
+
.sap.ushell.Container.getService("URLParsing")
|
|
256
|
+
.parseShellHash(Opa5.getWindow().document.location.hash);
|
|
257
|
+
if (oParsedHash.semanticObject === sSemanticObject && oParsedHash.action === sAction) {
|
|
258
|
+
return !aURLParams || _hasAllURLParameters(oParsedHash.params, aURLParams) ? true : false;
|
|
238
259
|
} else {
|
|
239
|
-
|
|
260
|
+
return false;
|
|
240
261
|
}
|
|
241
|
-
})
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
262
|
+
})
|
|
263
|
+
.error(function () {
|
|
264
|
+
var sHash = Opa5.getWindow().document.location.hash,
|
|
265
|
+
sLogErr = "Expected properties/values: ";
|
|
266
|
+
Opa5.assert.ok(false, "Current hash value: " + sHash);
|
|
267
|
+
Opa5.assert.ok(false, "Expected semantic object: " + sSemanticObject);
|
|
268
|
+
Opa5.assert.ok(false, "Expected action: " + sAction);
|
|
269
|
+
if (aURLParams) {
|
|
270
|
+
aURLParams.forEach(function (oParam) {
|
|
271
|
+
sLogErr = sLogErr + oParam.property + "=" + oParam.value + ",";
|
|
272
|
+
});
|
|
273
|
+
Opa5.assert.ok(false, sLogErr);
|
|
274
|
+
}
|
|
275
|
+
})
|
|
276
|
+
.success(
|
|
277
|
+
"Navigation successful. SemanticObject: " +
|
|
278
|
+
sSemanticObject +
|
|
279
|
+
", Action: " +
|
|
280
|
+
sAction +
|
|
281
|
+
" and all URL parameters are valid."
|
|
282
|
+
)
|
|
283
|
+
.execute();
|
|
246
284
|
}
|
|
247
|
-
|
|
248
|
-
return OpaBuilder.create(this)
|
|
249
|
-
.check(function () {
|
|
250
|
-
var oParsedHash = Opa5.getWindow()
|
|
251
|
-
.sap.ushell.Container.getService("URLParsing")
|
|
252
|
-
.parseShellHash(Opa5.getWindow().document.location.hash);
|
|
253
|
-
if (oParsedHash.semanticObject === sSemanticObject && oParsedHash.action === sAction) {
|
|
254
|
-
return !aURLParams || _hasAllURLParameters(oParsedHash.params, aURLParams) ? true : false;
|
|
255
|
-
} else {
|
|
256
|
-
return false;
|
|
257
|
-
}
|
|
258
|
-
})
|
|
259
|
-
.error(function () {
|
|
260
|
-
var sHash = Opa5.getWindow().document.location.hash,
|
|
261
|
-
sLogErr = "Expected properties/values: ";
|
|
262
|
-
Opa5.assert.ok(false, "Current hash value: " + sHash);
|
|
263
|
-
Opa5.assert.ok(false, "Expected semantic object: " + sSemanticObject);
|
|
264
|
-
Opa5.assert.ok(false, "Expected action: " + sAction);
|
|
265
|
-
if (aURLParams) {
|
|
266
|
-
aURLParams.forEach(function (oParam) {
|
|
267
|
-
sLogErr = sLogErr + oParam.property + "=" + oParam.value + ",";
|
|
268
|
-
});
|
|
269
|
-
Opa5.assert.ok(false, sLogErr);
|
|
270
|
-
}
|
|
271
|
-
})
|
|
272
|
-
.success(
|
|
273
|
-
"Navigation successful. SemanticObject: " +
|
|
274
|
-
sSemanticObject +
|
|
275
|
-
", Action: " +
|
|
276
|
-
sAction +
|
|
277
|
-
" and all URL parameters are valid."
|
|
278
|
-
)
|
|
279
|
-
.execute();
|
|
280
285
|
}
|
|
281
286
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
}
|
|
287
|
+
].concat(aAdditionalPageDefinitions)
|
|
288
|
+
);
|
|
289
|
+
}
|
|
286
290
|
|
|
287
|
-
|
|
288
|
-
}
|
|
291
|
+
return ShellPage;
|
|
292
|
+
}
|
|
293
|
+
);
|
package/src/sap/fe/test/Utils.js
CHANGED
|
@@ -85,6 +85,10 @@ sap.ui.define(
|
|
|
85
85
|
appName: "SalesOrder",
|
|
86
86
|
appPath: "/apps/salesorder/webapp"
|
|
87
87
|
},
|
|
88
|
+
"SalesOrder-stickyRecommendations": {
|
|
89
|
+
appName: "SalesOrder",
|
|
90
|
+
appPath: "/apps/salesorder/webapp"
|
|
91
|
+
},
|
|
88
92
|
"SalesOrder-stickyFCL": {
|
|
89
93
|
appName: "SalesOrderFCL",
|
|
90
94
|
appPath: "/apps/salesorder-FCL/webapp"
|
|
@@ -60,6 +60,19 @@ sap.ui.define(["./FEBuilder", "sap/ui/test/OpaBuilder", "sap/fe/test/Utils"], fu
|
|
|
60
60
|
return this.hasType("sap.m.GenericTag").hasProperties(oTagProperties).doPress();
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Closes the popover containing the KPI card.
|
|
65
|
+
* @returns {sap.fe.test.builder.KPIBuilder} This instance
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
KPIBuilder.prototype.closeKPICard = function () {
|
|
69
|
+
return this.hasType("sap.m.Popover")
|
|
70
|
+
.hasChildren(FEBuilder.create(this).hasType("sap.ui.integration.widgets.Card"))
|
|
71
|
+
.do(function (popover) {
|
|
72
|
+
popover.close();
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
|
|
63
76
|
/**
|
|
64
77
|
* Checks if a KPI Card is displayed.
|
|
65
78
|
* @returns {sap.fe.test.builder.KPIBuilder} This instance
|
|
@@ -377,7 +377,7 @@ sap.ui.define(
|
|
|
377
377
|
if (oRow.getMetadata().getName() === "sap.ui.table.Row") {
|
|
378
378
|
var oTable = oRow.getParent(),
|
|
379
379
|
oRowIndex = oTable.indexOfRow(oRow);
|
|
380
|
-
return OpaBuilder.Actions.press("rows-row" + oRowIndex
|
|
380
|
+
return OpaBuilder.Actions.press("rows-row" + oRowIndex).executeOn(oTable);
|
|
381
381
|
}
|
|
382
382
|
return OpaBuilder.Actions.press().executeOn(oRow.getMultiSelectControl() || oRow.getSingleSelectControl());
|
|
383
383
|
});
|
|
@@ -433,7 +433,7 @@ sap.ui.define(
|
|
|
433
433
|
// might be table with or without checkboxes for selection
|
|
434
434
|
return (
|
|
435
435
|
OpaBuilder.Actions.press("rowsel" + oRowIndex).executeOn(oTable) ||
|
|
436
|
-
OpaBuilder.Actions.press("rows-row" + oRowIndex
|
|
436
|
+
OpaBuilder.Actions.press("rows-row" + oRowIndex).executeOn(oTable)
|
|
437
437
|
);
|
|
438
438
|
}
|
|
439
439
|
return OpaBuilder.Actions.press().executeOn(oRow.getMultiSelectControl() || oRow.getSingleSelectControl());
|
|
@@ -790,7 +790,9 @@ sap.ui.define(
|
|
|
790
790
|
TableBuilder.prototype.doExecuteAction = function (vActionMatcher, vAction) {
|
|
791
791
|
var oOverflowToolbarBuilder = new TableBuilder(this.getOpaInstance(), this.build()),
|
|
792
792
|
fnMatcherIsTextButton = function (oControl) {
|
|
793
|
-
return
|
|
793
|
+
return (
|
|
794
|
+
!!oControl.getText || (oControl.isA("sap.fe.core.buildingBlocks.BuildingBlock") && !!oControl.getContent()?.getText)
|
|
795
|
+
);
|
|
794
796
|
},
|
|
795
797
|
fnDeepAggregation = FEBuilder.Matchers.deepAggregation("actions/action", [fnMatcherIsTextButton, vActionMatcher]),
|
|
796
798
|
fnGetDefaultActionButton = function (oMenuButton) {
|
|
@@ -810,11 +812,14 @@ sap.ui.define(
|
|
|
810
812
|
return fnDeepAggregation(oOverflowToolbar).length === 1;
|
|
811
813
|
})
|
|
812
814
|
.do(function (oOverflowToolbar) {
|
|
813
|
-
var oToolbarButton = fnDeepAggregation(oOverflowToolbar)[0]
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
815
|
+
var oToolbarButton = fnDeepAggregation(oOverflowToolbar)[0];
|
|
816
|
+
if (oToolbarButton.isA("sap.fe.core.buildingBlocks.BuildingBlock")) {
|
|
817
|
+
oToolbarButton = oToolbarButton.getContent();
|
|
818
|
+
}
|
|
819
|
+
var oButtonForAction =
|
|
820
|
+
oToolbarButton.getMetadata().getName() === "sap.m.MenuButton"
|
|
821
|
+
? fnGetDefaultActionButton(oToolbarButton) || oToolbarButton
|
|
822
|
+
: oToolbarButton;
|
|
818
823
|
OpaBuilder.Actions.executor(vAction || OpaBuilder.Actions.press())(oButtonForAction);
|
|
819
824
|
})
|
|
820
825
|
.execute();
|
|
@@ -15,15 +15,16 @@ sap.ui.define(["sap/ui/core/Lib", "sap/ui/core/library"], function (Library, _li
|
|
|
15
15
|
// library dependencies
|
|
16
16
|
const thisLib = Library.init({
|
|
17
17
|
name: "sap.fe.test",
|
|
18
|
+
apiVersion: 2,
|
|
18
19
|
dependencies: ["sap.ui.core"],
|
|
19
20
|
types: [],
|
|
20
21
|
interfaces: [],
|
|
21
22
|
controls: [],
|
|
22
23
|
elements: [],
|
|
23
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
24
|
-
version: "1.
|
|
25
|
+
version: "1.131.0",
|
|
25
26
|
noLibraryCSS: true
|
|
26
27
|
});
|
|
27
28
|
return thisLib;
|
|
28
29
|
}, false);
|
|
29
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aGlzTGliIiwiTGlicmFyeSIsImluaXQiLCJuYW1lIiwiYXBpVmVyc2lvbiIsImRlcGVuZGVuY2llcyIsInR5cGVzIiwiaW50ZXJmYWNlcyIsImNvbnRyb2xzIiwiZWxlbWVudHMiLCJ2ZXJzaW9uIiwibm9MaWJyYXJ5Q1NTIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcblxuLyoqXG4gKiBUZXN0IGxpYnJhcnkgZm9yIFNBUCBGaW9yaSBlbGVtZW50c1xuICogQG5hbWVzcGFjZVxuICogQG5hbWUgc2FwLmZlLnRlc3RcbiAqIEBwdWJsaWNcbiAqL1xuXG4vLyBsaWJyYXJ5IGRlcGVuZGVuY2llc1xuY29uc3QgdGhpc0xpYiA9IExpYnJhcnkuaW5pdCh7XG5cdG5hbWU6IFwic2FwLmZlLnRlc3RcIixcblx0YXBpVmVyc2lvbjogMixcblx0ZGVwZW5kZW5jaWVzOiBbXCJzYXAudWkuY29yZVwiXSxcblx0dHlwZXM6IFtdLFxuXHRpbnRlcmZhY2VzOiBbXSxcblx0Y29udHJvbHM6IFtdLFxuXHRlbGVtZW50czogW10sXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcblx0dmVyc2lvbjogXCIke3ZlcnNpb259XCIsXG5cdG5vTGlicmFyeUNTUzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUE7RUFDQSxNQUFNQSxPQUFPLEdBQUdDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDO0lBQzVCQyxJQUFJLEVBQUUsYUFBYTtJQUNuQkMsVUFBVSxFQUFFLENBQUM7SUFDYkMsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQzdCQyxLQUFLLEVBQUUsRUFBRTtJQUNUQyxVQUFVLEVBQUUsRUFBRTtJQUNkQyxRQUFRLEVBQUUsRUFBRTtJQUNaQyxRQUFRLEVBQUUsRUFBRTtJQUNaO0lBQ0FDLE9BQU8sRUFBRSxZQUFZO0lBQ3JCQyxZQUFZLEVBQUU7RUFDZixDQUFDLENBQUM7RUFBQyxPQUVZWCxPQUFPO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|