@glimmer/program
Advanced tools
Comparing version
@@ -135,3 +135,3 @@ define('@glimmer/program', ['exports', '@glimmer/util', '@glimmer/manager', '@glimmer/opcode-compiler'], function (exports, util, manager, opcodeCompiler) { 'use strict'; | ||
_proto3.modifier = function modifier(definitionState, resolvedName) { | ||
_proto3.modifier = function modifier(definitionState, resolvedName, isOptional) { | ||
if (resolvedName === void 0) { | ||
@@ -144,3 +144,9 @@ resolvedName = null; | ||
if (handle === undefined) { | ||
var manager$1 = manager.getInternalModifierManager(definitionState); | ||
var manager$1 = manager.getInternalModifierManager(definitionState, isOptional); | ||
if (manager$1 === null) { | ||
this.modifierDefinitionCache.set(definitionState, null); | ||
return null; | ||
} | ||
var definition = { | ||
@@ -568,2 +574,2 @@ resolvedName: resolvedName, | ||
}); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpbW1lci1wcm9ncmFtLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi91dGlsL2RlZmF1bHQtdGVtcGxhdGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9jb25zdGFudHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9vcGNvZGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9wcm9ncmFtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jayxcbiAgU2V4cE9wY29kZXMsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIERlZmF1bHQgY29tcG9uZW50IHRlbXBsYXRlLCB3aGljaCBpcyBhIHBsYWluIHlpZWxkXG4gKi9cbmNvbnN0IERFRkFVTFRfVEVNUExBVEVfQkxPQ0s6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrID0gW1xuICBbW1NleHBPcGNvZGVzLllpZWxkLCAxLCBudWxsXV0sXG4gIFsnJmRlZmF1bHQnXSxcbiAgZmFsc2UsXG4gIFtdLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVNUExBVEU6IFNlcmlhbGl6ZWRUZW1wbGF0ZVdpdGhMYXp5QmxvY2sgPSB7XG4gIC8vIHJhbmRvbSB1dWlkXG4gIGlkOiAnMWIzMmY1YzItNzYyMy00M2Q2LWEwYWQtOTY3Mjg5ODkyMGExJyxcbiAgbW9kdWxlTmFtZTogJ19fZGVmYXVsdF9fLmhicycsXG4gIGJsb2NrOiBKU09OLnN0cmluZ2lmeShERUZBVUxUX1RFTVBMQVRFX0JMT0NLKSxcbiAgc2NvcGU6IG51bGwsXG4gIGlzU3RyaWN0TW9kZTogdHJ1ZSxcbn07XG4iLCJpbXBvcnQge1xuICBDb21waWxlVGltZUNvbnN0YW50cyxcbiAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICBDb25zdGFudFBvb2wsXG4gIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eSxcbiAgQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUmVzb2x1dGlvblRpbWVDb25zdGFudHMsXG4gIFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUnVudGltZUNvbnN0YW50cyxcbiAgTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gIEhlbHBlckRlZmluaXRpb25TdGF0ZSxcbiAgVGVtcGxhdGUsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXNzZXJ0LCBjb25zdGFudHMsIGV4cGVjdCwgdW53cmFwVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIGNhcGFiaWxpdHlGbGFnc0Zyb20sXG4gIGdldENvbXBvbmVudFRlbXBsYXRlLFxuICBnZXRJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIsXG4gIGdldEludGVybmFsSGVscGVyTWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIsXG4gIG1hbmFnZXJIYXNDYXBhYmlsaXR5LFxufSBmcm9tICdAZ2xpbW1lci9tYW5hZ2VyJztcbmltcG9ydCB7IHRlbXBsYXRlRmFjdG9yeSB9IGZyb20gJ0BnbGltbWVyL29wY29kZS1jb21waWxlcic7XG5pbXBvcnQgeyBERUZBVUxUX1RFTVBMQVRFIH0gZnJvbSAnLi91dGlsL2RlZmF1bHQtdGVtcGxhdGUnO1xuXG5jb25zdCBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZOiB1bmtub3duID0gT2JqZWN0LmZyZWV6ZShbXSk7XG5jb25zdCBTVEFSVEVSX0NPTlNUQU5UUyA9IGNvbnN0YW50cyhXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT046IG51bWJlciA9IFNUQVJURVJfQ09OU1RBTlRTLmluZGV4T2YoV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSk7XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlVGltZUNvbnN0YW50SW1wbCBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW10gPSBTVEFSVEVSX0NPTlNUQU5UUy5zbGljZSgpO1xuICBwcm90ZWN0ZWQgaW5kZXhNYXA6IE1hcDx1bmtub3duLCBudW1iZXI+ID0gbmV3IE1hcChcbiAgICB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW3ZhbHVlLCBpbmRleF0pXG4gICk7XG5cbiAgdmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICBsZXQgaW5kZXhNYXAgPSB0aGlzLmluZGV4TWFwO1xuICAgIGxldCBpbmRleCA9IGluZGV4TWFwLmdldCh2YWx1ZSk7XG5cbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKSAtIDE7XG4gICAgICBpbmRleE1hcC5zZXQodmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IHVua25vd25bXSk6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OO1xuICAgIH1cblxuICAgIGxldCBoYW5kbGVzOiBudW1iZXJbXSA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYW5kbGVzW2ldID0gdGhpcy52YWx1ZSh2YWx1ZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbHVlKGhhbmRsZXMpO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzSW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW107XG5cbiAgY29uc3RydWN0b3IocG9vbDogQ29uc3RhbnRQb29sKSB7XG4gICAgdGhpcy52YWx1ZXMgPSBwb29sO1xuICB9XG5cbiAgZ2V0VmFsdWU8VD4oaGFuZGxlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaGFuZGxlXSBhcyBUO1xuICB9XG5cbiAgZ2V0QXJyYXk8VD4odmFsdWU6IG51bWJlcik6IFRbXSB7XG4gICAgbGV0IGhhbmRsZXMgPSB0aGlzLmdldFZhbHVlKHZhbHVlKSBhcyBudW1iZXJbXTtcbiAgICBsZXQgcmVpZmllZDogVFtdID0gbmV3IEFycmF5KGhhbmRsZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBoYW5kbGVzW2ldO1xuICAgICAgcmVpZmllZFtpXSA9IHRoaXMuZ2V0VmFsdWUobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlaWZpZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50c0ltcGxcbiAgZXh0ZW5kcyBDb21waWxlVGltZUNvbnN0YW50SW1wbFxuICBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMsIFJlc29sdXRpb25UaW1lQ29uc3RhbnRzIHtcbiAgcHJvdGVjdGVkIHJlaWZpZWRBcnJzOiB7IFtrZXk6IG51bWJlcl06IHVua25vd25bXSB9ID0ge1xuICAgIFtXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OXTogV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSBhcyB1bmtub3duW10sXG4gIH07XG5cbiAgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeShERUZBVUxUX1RFTVBMQVRFKSgpO1xuXG4gIC8vIFVzZWQgZm9yIHRlc3RzIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFuZCB0byBiZSBhYmxlIHRvIGFuYWx5emUgbGFyZ2UgYXBwc1xuICAvLyBUaGlzIGlzIHdoeSBpdCdzIGVuYWJsZWQgZXZlbiBpbiBwcm9kdWN0aW9uXG4gIGhlbHBlckRlZmluaXRpb25Db3VudCA9IDA7XG4gIG1vZGlmaWVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgY29tcG9uZW50RGVmaW5pdGlvbkNvdW50ID0gMDtcblxuICBwcml2YXRlIGhlbHBlckRlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPEhlbHBlckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyIHwgbnVsbD4oKTtcblxuICBwcml2YXRlIG1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8TW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIG51bWJlcj4oKTtcblxuICBwcml2YXRlIGNvbXBvbmVudERlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPFxuICAgIENvbXBvbmVudERlZmluaXRpb25TdGF0ZSB8IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbFxuICA+KCk7XG5cbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbDtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lPzogc3RyaW5nIHwgbnVsbFxuICApOiBudW1iZXI7XG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgaXNPcHRpb25hbD86IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlck9ySGVscGVyID0gZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyT3JIZWxwZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQobWFuYWdlck9ySGVscGVyLCAnQlVHOiBleHBlY3RlZCBtYW5hZ2VyIG9yIGhlbHBlcicpO1xuXG4gICAgICBsZXQgaGVscGVyID1cbiAgICAgICAgdHlwZW9mIG1hbmFnZXJPckhlbHBlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbWFuYWdlck9ySGVscGVyXG4gICAgICAgICAgOiBtYW5hZ2VyT3JIZWxwZXIuZ2V0SGVscGVyKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoaGVscGVyKTtcblxuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfVxuXG4gIG1vZGlmaWVyKGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIHJlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBudW1iZXIge1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IGdldEludGVybmFsTW9kaWZpZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGxldCBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWUsXG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIHN0YXRlOiBkZWZpbml0aW9uU3RhdGUsXG4gICAgICB9O1xuXG4gICAgICBoYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuXG4gICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIGhhbmRsZSk7XG4gICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfVxuXG4gIGNvbXBvbmVudChkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSk6IENvbXBvbmVudERlZmluaXRpb247XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsOiB0cnVlXG4gICk6IENvbXBvbmVudERlZmluaXRpb24gfCBudWxsO1xuICBjb21wb25lbnQoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gICAgaXNPcHRpb25hbD86IHRydWUsXG4gICAgb3duZXI/OiBvYmplY3RcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGwge1xuICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcihkZWZpbml0aW9uU3RhdGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAobWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChtYW5hZ2VyLCAnQlVHOiBleHBlY3RlZCBtYW5hZ2VyJyk7XG5cbiAgICAgIGxldCBjYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXR5RmxhZ3NGcm9tKG1hbmFnZXIuZ2V0Q2FwYWJpbGl0aWVzKGRlZmluaXRpb25TdGF0ZSkpO1xuXG4gICAgICBsZXQgdGVtcGxhdGVGYWN0b3J5ID0gZ2V0Q29tcG9uZW50VGVtcGxhdGUoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuICAgICAgbGV0IHRlbXBsYXRlO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5Py4ob3duZXIpID8/IHRoaXMuZGVmYXVsdFRlbXBsYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdW53cmFwVGVtcGxhdGUodGVtcGxhdGUpO1xuXG4gICAgICAgIGNvbXBpbGFibGUgPSBtYW5hZ2VySGFzQ2FwYWJpbGl0eShcbiAgICAgICAgICBtYW5hZ2VyLFxuICAgICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgICBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuV3JhcHBlZFxuICAgICAgICApXG4gICAgICAgICAgPyB0ZW1wbGF0ZS5hc1dyYXBwZWRMYXlvdXQoKVxuICAgICAgICAgIDogdGVtcGxhdGUuYXNMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgcmVzb2x2ZWROYW1lOiBudWxsLFxuICAgICAgICBoYW5kbGU6IC0xLCAvLyByZXBsYWNlZCBtb21lbnRhcmlseVxuICAgICAgICBtYW5hZ2VyLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgIHN0YXRlOiBkZWZpbml0aW9uU3RhdGUsXG4gICAgICAgIGNvbXBpbGFibGUsXG4gICAgICB9O1xuXG4gICAgICBkZWZpbml0aW9uIS5oYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcmVzb2x2ZWRDb21wb25lbnQoXG4gICAgcmVzb2x2ZWREZWZpbml0aW9uOiBSZXNvbHZlZENvbXBvbmVudERlZmluaXRpb24sXG4gICAgcmVzb2x2ZWROYW1lOiBzdHJpbmdcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQocmVzb2x2ZWREZWZpbml0aW9uKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCB7IG1hbmFnZXIsIHN0YXRlLCB0ZW1wbGF0ZSB9ID0gcmVzb2x2ZWREZWZpbml0aW9uO1xuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMocmVzb2x2ZWREZWZpbml0aW9uKSk7XG5cbiAgICAgIGxldCBjb21waWxhYmxlID0gbnVsbDtcblxuICAgICAgaWYgKCFtYW5hZ2VySGFzQ2FwYWJpbGl0eShtYW5hZ2VyLCBjYXBhYmlsaXRpZXMsIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5EeW5hbWljTGF5b3V0KSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlID8/IHRoaXMuZGVmYXVsdFRlbXBsYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVtcGxhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWUsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNvbXBpbGFibGUsXG4gICAgICB9O1xuXG4gICAgICBkZWZpbml0aW9uIS5oYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KHJlc29sdmVkRGVmaW5pdGlvbiwgZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBleHBlY3QoZGVmaW5pdGlvbiwgJ0JVRzogcmVzb2x2ZWQgY29tcG9uZW50IGRlZmluaXRpb25zIGNhbm5vdCBiZSBudWxsJyk7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihpbmRleDogbnVtYmVyKSB7XG4gICAgYXNzZXJ0KGluZGV4ID49IDAsIGBjYW5ub3QgZ2V0IHZhbHVlIGZvciBoYW5kbGU6ICR7aW5kZXh9YCk7XG5cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPihpbmRleDogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgcmVpZmllZEFycnMgPSB0aGlzLnJlaWZpZWRBcnJzO1xuICAgIGxldCByZWlmaWVkID0gcmVpZmllZEFycnNbaW5kZXhdIGFzIFRbXTtcblxuICAgIGlmIChyZWlmaWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBuYW1lczogbnVtYmVyW10gPSB0aGlzLmdldFZhbHVlKGluZGV4KTtcbiAgICAgIHJlaWZpZWQgPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuYW1lc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHJlaWZpZWRBcnJzW2luZGV4XSA9IHJlaWZpZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlaWZpZWQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IE9wY29kZVNpemUsIFJ1bnRpbWVPcCwgT3Bjb2RlSGVhcCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUnVudGltZU9wSW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVPcCB7XG4gIHB1YmxpYyBvZmZzZXQgPSAwO1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBoZWFwOiBPcGNvZGVIZWFwKSB7fVxuXG4gIGdldCBzaXplKCkge1xuICAgIGxldCByYXdUeXBlID0gdGhpcy5oZWFwLmdldGJ5YWRkcih0aGlzLm9mZnNldCk7XG4gICAgcmV0dXJuICgocmF3VHlwZSAmIE9wY29kZVNpemUuT1BFUkFORF9MRU5fTUFTSykgPj4gT3Bjb2RlU2l6ZS5BUkdfU0hJRlQpICsgMTtcbiAgfVxuXG4gIGdldCBpc01hY2hpbmUoKTogMCB8IDEge1xuICAgIGxldCByYXdUeXBlID0gdGhpcy5oZWFwLmdldGJ5YWRkcih0aGlzLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhd1R5cGUgJiBPcGNvZGVTaXplLk1BQ0hJTkVfTUFTSyA/IDEgOiAwO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcC5nZXRieWFkZHIodGhpcy5vZmZzZXQpICYgT3Bjb2RlU2l6ZS5UWVBFX01BU0s7XG4gIH1cblxuICBnZXQgb3AxKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMSk7XG4gIH1cblxuICBnZXQgb3AyKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMik7XG4gIH1cblxuICBnZXQgb3AzKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0ICsgMyk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIENvbXBpbGVUaW1lSGVhcCxcbiAgU2VyaWFsaXplZEhlYXAsXG4gIFJ1bnRpbWVIZWFwLFxuICBTdGRMaWJPcGVyYW5kLFxuICBSdW50aW1lQ29uc3RhbnRzLFxuICBSdW50aW1lUHJvZ3JhbSxcbiAgUmVzb2x1dGlvblRpbWVDb25zdGFudHMsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9DQUxfREVCVUcgfSBmcm9tICdAZ2xpbW1lci9sb2NhbC1kZWJ1Zy1mbGFncyc7XG5pbXBvcnQgeyBSdW50aW1lT3BJbXBsIH0gZnJvbSAnLi9vcGNvZGUnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmNvbnN0IGVudW0gVGFibGVTbG90U3RhdGUge1xuICBBbGxvY2F0ZWQsXG4gIEZyZWVkLFxuICBQdXJnZWQsXG4gIFBvaW50ZXIsXG59XG5cbmV4cG9ydCB0eXBlIFBsYWNlaG9sZGVyID0gW251bWJlciwgKCkgPT4gbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFN0ZGxpYlBsYWNlaG9sZGVyID0gW251bWJlciwgU3RkTGliT3BlcmFuZF07XG5cbmNvbnN0IFBBR0VfU0laRSA9IDB4MTAwMDAwO1xuXG5leHBvcnQgY2xhc3MgUnVudGltZUhlYXBJbXBsIGltcGxlbWVudHMgUnVudGltZUhlYXAge1xuICBwcml2YXRlIGhlYXA6IEludDMyQXJyYXk7XG4gIHByaXZhdGUgdGFibGU6IG51bWJlcltdO1xuXG4gIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZWRIZWFwOiBTZXJpYWxpemVkSGVhcCkge1xuICAgIGxldCB7IGJ1ZmZlciwgdGFibGUgfSA9IHNlcmlhbGl6ZWRIZWFwO1xuICAgIHRoaXMuaGVhcCA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgdGhpcy50YWJsZSA9IHRhYmxlO1xuICB9XG5cbiAgLy8gSXQgaXMgaWxsZWdhbCB0byBjbG9zZSBvdmVyIHRoaXMgYWRkcmVzcywgYXMgY29tcGFjdGlvblxuICAvLyBtYXkgbW92ZSBpdC4gSG93ZXZlciwgaXQgaXMgbGVnYWwgdG8gdXNlIHRoaXMgYWRkcmVzc1xuICAvLyBtdWx0aXBsZSB0aW1lcyBiZXR3ZWVuIGNvbXBhY3Rpb25zLlxuICBnZXRhZGRyKGhhbmRsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVtoYW5kbGVdO1xuICB9XG5cbiAgZ2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgYXNzZXJ0KHRoaXMuaGVhcFthZGRyZXNzXSAhPT0gdW5kZWZpbmVkLCAnQWNjZXNzIG1lbW9yeSBvdXQgb2YgYm91bmRzIG9mIHRoZSBoZWFwJyk7XG4gICAgcmV0dXJuIHRoaXMuaGVhcFthZGRyZXNzXTtcbiAgfVxuXG4gIHNpemVvZihoYW5kbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNpemVvZih0aGlzLnRhYmxlLCBoYW5kbGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlSGVhcChzZXJpYWxpemVkSGVhcDogU2VyaWFsaXplZEhlYXApOiBSdW50aW1lSGVhcCB7XG4gIHJldHVybiBuZXcgUnVudGltZUhlYXBJbXBsKHNlcmlhbGl6ZWRIZWFwKTtcbn1cblxuLyoqXG4gKiBUaGUgSGVhcCBpcyByZXNwb25zaWJsZSBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGluZ1xuICogbWVtb3J5IGluIHdoaWNoIHdlIHJlYWQvd3JpdGUgdGhlIFZNJ3MgaW5zdHJ1Y3Rpb25zXG4gKiBmcm9tL3RvLiBXaGVuIHdlIG1hbGxvYyB3ZSBwYXNzIG91dCBhIFZNSGFuZGxlLCB3aGljaFxuICogaXMgdXNlZCBhcyBhbiBpbmRpcmVjdCB3YXkgb2YgYWNjZXNzaW5nIHRoZSBtZW1vcnkgZHVyaW5nXG4gKiBleGVjdXRpb24gb2YgdGhlIFZNLiBJbnRlcm5hbGx5IHdlIHRyYWNrIHRoZSBkaWZmZXJlbnRcbiAqIHJlZ2lvbnMgb2YgdGhlIG1lbW9yeSBpbiBhbiBpbnQgYXJyYXkga25vd24gYXMgdGhlIHRhYmxlLlxuICpcbiAqIFRoZSB0YWJsZSAzMi1iaXQgYWxpZ25lZCBhbmQgaGFzIHRoZSBmb2xsb3dpbmcgbGF5b3V0OlxuICpcbiAqIHwgLi4uIHwgaHAgKHUzMikgfCAgICAgICBpbmZvICh1MzIpICAgfCBzaXplICh1MzIpIHxcbiAqIHwgLi4uIHwgIEhhbmRsZSAgfCBTY29wZSBTaXplIHwgU3RhdGUgfCBTaXplICAgICAgIHxcbiAqIHwgLi4uIHwgMzJiaXRzICAgfCAzMGJpdHMgICAgIHwgMmJpdHMgfCAzMmJpdCAgICAgIHxcbiAqXG4gKiBXaXRoIHRoaXMgaW5mb3JtYXRpb24gd2UgZWZmZWN0aXZlbHkgaGF2ZSB0aGUgYWJpbGl0eSB0b1xuICogY29udHJvbCB3aGVuIHdlIHdhbnQgdG8gZnJlZSBtZW1vcnkuIFRoYXQgYmVpbmcgc2FpZCB5b3VcbiAqIGNhbiBub3QgZnJlZSBkdXJpbmcgZXhlY3V0aW9uIGFzIHJhdyBhZGRyZXNzIGFyZSBvbmx5XG4gKiB2YWxpZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbi4gVGhpcyBtZWFucyB5b3UgY2Fubm90IGNsb3NlXG4gKiBvdmVyIHRoZW0gYXMgeW91IHdpbGwgaGF2ZSBhIGJhZCBtZW1vcnkgYWNjZXNzIGV4Y2VwdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEhlYXBJbXBsIGltcGxlbWVudHMgQ29tcGlsZVRpbWVIZWFwLCBSdW50aW1lSGVhcCB7XG4gIG9mZnNldCA9IDA7XG5cbiAgcHJpdmF0ZSBoZWFwOiBJbnQzMkFycmF5O1xuICBwcml2YXRlIGhhbmRsZVRhYmxlOiBudW1iZXJbXTtcbiAgcHJpdmF0ZSBoYW5kbGVTdGF0ZTogVGFibGVTbG90U3RhdGVbXTtcbiAgcHJpdmF0ZSBoYW5kbGUgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhcCA9IG5ldyBJbnQzMkFycmF5KFBBR0VfU0laRSk7XG4gICAgdGhpcy5oYW5kbGVUYWJsZSA9IFtdO1xuICAgIHRoaXMuaGFuZGxlU3RhdGUgPSBbXTtcbiAgfVxuXG4gIHB1c2goaXRlbTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zaXplQ2hlY2soKTtcbiAgICB0aGlzLmhlYXBbdGhpcy5vZmZzZXQrK10gPSBpdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBzaXplQ2hlY2soKSB7XG4gICAgbGV0IHsgaGVhcCB9ID0gdGhpcztcblxuICAgIGlmICh0aGlzLm9mZnNldCA9PT0gdGhpcy5oZWFwLmxlbmd0aCkge1xuICAgICAgbGV0IG5ld0hlYXAgPSBuZXcgSW50MzJBcnJheShoZWFwLmxlbmd0aCArIFBBR0VfU0laRSk7XG4gICAgICBuZXdIZWFwLnNldChoZWFwLCAwKTtcbiAgICAgIHRoaXMuaGVhcCA9IG5ld0hlYXA7XG4gICAgfVxuICB9XG5cbiAgZ2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcFthZGRyZXNzXTtcbiAgfVxuXG4gIHNldGJ5YWRkcihhZGRyZXNzOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmhlYXBbYWRkcmVzc10gPSB2YWx1ZTtcbiAgfVxuXG4gIG1hbGxvYygpOiBudW1iZXIge1xuICAgIC8vIHB1c2ggb2Zmc2V0LCBpbmZvLCBzaXplXG4gICAgdGhpcy5oYW5kbGVUYWJsZS5wdXNoKHRoaXMub2Zmc2V0KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVUYWJsZS5sZW5ndGggLSAxO1xuICB9XG5cbiAgZmluaXNoTWFsbG9jKGhhbmRsZTogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gQFRPRE86IEF0IHRoZSBtb21lbnQsIGdhcmJhZ2UgY29sbGVjdGlvbiBpc24ndCBhY3R1YWxseSB1c2VkLCBzbyB0aGlzIGlzXG4gICAgLy8gd3JhcHBlZCB0byBwcmV2ZW50IHVzIGZyb20gYWxsb2NhdGluZyBleHRyYSBzcGFjZSBpbiBwcm9kLiBJbiB0aGUgZnV0dXJlLFxuICAgIC8vIGlmIHdlIHN0YXJ0IHVzaW5nIHRoZSBjb21wYWN0IEFQSSwgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzLlxuICAgIGlmIChMT0NBTF9ERUJVRykge1xuICAgICAgdGhpcy5oYW5kbGVTdGF0ZVtoYW5kbGVdID0gVGFibGVTbG90U3RhdGUuQWxsb2NhdGVkO1xuICAgIH1cbiAgfVxuXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vZmZzZXQ7XG4gIH1cblxuICAvLyBJdCBpcyBpbGxlZ2FsIHRvIGNsb3NlIG92ZXIgdGhpcyBhZGRyZXNzLCBhcyBjb21wYWN0aW9uXG4gIC8vIG1heSBtb3ZlIGl0LiBIb3dldmVyLCBpdCBpcyBsZWdhbCB0byB1c2UgdGhpcyBhZGRyZXNzXG4gIC8vIG11bHRpcGxlIHRpbWVzIGJldHdlZW4gY29tcGFjdGlvbnMuXG4gIGdldGFkZHIoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVRhYmxlW2hhbmRsZV07XG4gIH1cblxuICBzaXplb2YoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaXplb2YodGhpcy5oYW5kbGVUYWJsZSwgaGFuZGxlKTtcbiAgfVxuXG4gIGZyZWUoaGFuZGxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVN0YXRlW2hhbmRsZV0gPSBUYWJsZVNsb3RTdGF0ZS5GcmVlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaGVhcCB1c2VzIHRoZSBbTWFyay1Db21wYWN0IEFsZ29yaXRobV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWFyay1jb21wYWN0X2FsZ29yaXRobSkgdG8gc2hpZnRcbiAgICogcmVhY2hhYmxlIG1lbW9yeSB0byB0aGUgYm90dG9tIG9mIHRoZSBoZWFwIGFuZCBmcmVlYWJsZVxuICAgKiBtZW1vcnkgdG8gdGhlIHRvcCBvZiB0aGUgaGVhcC4gV2hlbiB3ZSBoYXZlIHNoaWZ0ZWQgYWxsXG4gICAqIHRoZSByZWFjaGFibGUgbWVtb3J5IHRvIHRoZSB0b3Agb2YgdGhlIGhlYXAsIHdlIG1vdmUgdGhlXG4gICAqIG9mZnNldCB0byB0aGUgbmV4dCBmcmVlIHBvc2l0aW9uLlxuICAgKi9cbiAgY29tcGFjdCgpOiB2b2lkIHtcbiAgICBsZXQgY29tcGFjdGVkU2l6ZSA9IDA7XG4gICAgbGV0IHsgaGFuZGxlVGFibGUsIGhhbmRsZVN0YXRlLCBoZWFwIH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9mZnNldCA9IGhhbmRsZVRhYmxlW2ldO1xuICAgICAgbGV0IHNpemUgPSBoYW5kbGVUYWJsZVtpICsgMV0gLSBvZmZzZXQ7XG4gICAgICBsZXQgc3RhdGUgPSBoYW5kbGVTdGF0ZVtpXTtcblxuICAgICAgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5QdXJnZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5GcmVlZCkge1xuICAgICAgICAvLyB0cmFuc2l0aW9uIHRvIFwiYWxyZWFkeSBmcmVlZFwiIGFrYSBcInB1cmdlZFwiXG4gICAgICAgIC8vIGEgZ29vZCBpbXByb3ZlbWVudCB3b3VsZCBiZSB0byByZXVzZVxuICAgICAgICAvLyB0aGVzZSBzbG90c1xuICAgICAgICBoYW5kbGVTdGF0ZVtpXSA9IFRhYmxlU2xvdFN0YXRlLlB1cmdlZDtcbiAgICAgICAgY29tcGFjdGVkU2l6ZSArPSBzaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuQWxsb2NhdGVkKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBvZmZzZXQ7IGogPD0gaSArIHNpemU7IGorKykge1xuICAgICAgICAgIGhlYXBbaiAtIGNvbXBhY3RlZFNpemVdID0gaGVhcFtqXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVRhYmxlW2ldID0gb2Zmc2V0IC0gY29tcGFjdGVkU2l6ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlBvaW50ZXIpIHtcbiAgICAgICAgaGFuZGxlVGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5vZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICB9XG5cbiAgY2FwdHVyZShvZmZzZXQgPSB0aGlzLm9mZnNldCk6IFNlcmlhbGl6ZWRIZWFwIHtcbiAgICAvLyBPbmx5IGNhbGxlZCBpbiBlYWdlciBtb2RlXG4gICAgbGV0IGJ1ZmZlciA9IHNsaWNlKHRoaXMuaGVhcCwgMCwgb2Zmc2V0KS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZTogdGhpcy5oYW5kbGUsXG4gICAgICB0YWJsZTogdGhpcy5oYW5kbGVUYWJsZSxcbiAgICAgIGJ1ZmZlcjogYnVmZmVyIGFzIEFycmF5QnVmZmVyLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVQcm9ncmFtSW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVQcm9ncmFtIHtcbiAgW2tleTogbnVtYmVyXTogbmV2ZXI7XG5cbiAgcHJpdmF0ZSBfb3Bjb2RlOiBSdW50aW1lT3BJbXBsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb25zdGFudHM6IFJ1bnRpbWVDb25zdGFudHMgJiBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyxcbiAgICBwdWJsaWMgaGVhcDogUnVudGltZUhlYXBcbiAgKSB7XG4gICAgdGhpcy5fb3Bjb2RlID0gbmV3IFJ1bnRpbWVPcEltcGwodGhpcy5oZWFwKTtcbiAgfVxuXG4gIG9wY29kZShvZmZzZXQ6IG51bWJlcik6IFJ1bnRpbWVPcEltcGwge1xuICAgIHRoaXMuX29wY29kZS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuX29wY29kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzbGljZShhcnI6IEludDMyQXJyYXksIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogSW50MzJBcnJheSB7XG4gIGlmIChhcnIuc2xpY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcnIuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBsZXQgcmV0ID0gbmV3IEludDMyQXJyYXkoZW5kKTtcblxuICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHtcbiAgICByZXRbc3RhcnRdID0gYXJyW3N0YXJ0XTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHNpemVvZih0YWJsZTogbnVtYmVyW10sIGhhbmRsZTogbnVtYmVyKSB7XG4gIGlmIChMT0NBTF9ERUJVRykge1xuICAgIHJldHVybiB0YWJsZVtoYW5kbGUgKyAxXSAtIHRhYmxlW2hhbmRsZV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21waWxlVGltZUFydGlmYWN0cywgUnVudGltZUFydGlmYWN0cyB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29uc3RhbnRzSW1wbCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEhlYXBJbXBsIH0gZnJvbSAnLi9wcm9ncmFtJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFydGlmYWN0cygpOiBDb21waWxlVGltZUFydGlmYWN0cyAmIFJ1bnRpbWVBcnRpZmFjdHMge1xuICByZXR1cm4ge1xuICAgIGNvbnN0YW50czogbmV3IENvbnN0YW50c0ltcGwoKSxcbiAgICBoZWFwOiBuZXcgSGVhcEltcGwoKSxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJjb25zdGFudHMiLCJ0ZW1wbGF0ZUZhY3RvcnkiLCJnZXRJbnRlcm5hbEhlbHBlck1hbmFnZXIiLCJtYW5hZ2VyIiwiZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIiLCJnZXRJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIiLCJjYXBhYmlsaXR5RmxhZ3NGcm9tIiwiZ2V0Q29tcG9uZW50VGVtcGxhdGUiLCJtYW5hZ2VySGFzQ2FwYWJpbGl0eSIsInVud3JhcFRlbXBsYXRlIl0sIm1hcHBpbmdzIjoiOztFQU1BOzs7RUFHQSxJQUFN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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpbW1lci1wcm9ncmFtLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi91dGlsL2RlZmF1bHQtdGVtcGxhdGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9jb25zdGFudHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9vcGNvZGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9wcm9ncmFtL2xpYi9wcm9ncmFtLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQGdsaW1tZXIvcHJvZ3JhbS9saWIvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlV2l0aExhenlCbG9jayxcbiAgU2V4cE9wY29kZXMsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIERlZmF1bHQgY29tcG9uZW50IHRlbXBsYXRlLCB3aGljaCBpcyBhIHBsYWluIHlpZWxkXG4gKi9cbmNvbnN0IERFRkFVTFRfVEVNUExBVEVfQkxPQ0s6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrID0gW1xuICBbW1NleHBPcGNvZGVzLllpZWxkLCAxLCBudWxsXV0sXG4gIFsnJmRlZmF1bHQnXSxcbiAgZmFsc2UsXG4gIFtdLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVNUExBVEU6IFNlcmlhbGl6ZWRUZW1wbGF0ZVdpdGhMYXp5QmxvY2sgPSB7XG4gIC8vIHJhbmRvbSB1dWlkXG4gIGlkOiAnMWIzMmY1YzItNzYyMy00M2Q2LWEwYWQtOTY3Mjg5ODkyMGExJyxcbiAgbW9kdWxlTmFtZTogJ19fZGVmYXVsdF9fLmhicycsXG4gIGJsb2NrOiBKU09OLnN0cmluZ2lmeShERUZBVUxUX1RFTVBMQVRFX0JMT0NLKSxcbiAgc2NvcGU6IG51bGwsXG4gIGlzU3RyaWN0TW9kZTogdHJ1ZSxcbn07XG4iLCJpbXBvcnQge1xuICBDb21waWxlVGltZUNvbnN0YW50cyxcbiAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICBDb25zdGFudFBvb2wsXG4gIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eSxcbiAgQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUmVzb2x1dGlvblRpbWVDb25zdGFudHMsXG4gIFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUnVudGltZUNvbnN0YW50cyxcbiAgTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gIEhlbHBlckRlZmluaXRpb25TdGF0ZSxcbiAgVGVtcGxhdGUsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXNzZXJ0LCBjb25zdGFudHMsIGV4cGVjdCwgdW53cmFwVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIGNhcGFiaWxpdHlGbGFnc0Zyb20sXG4gIGdldENvbXBvbmVudFRlbXBsYXRlLFxuICBnZXRJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIsXG4gIGdldEludGVybmFsSGVscGVyTWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIsXG4gIG1hbmFnZXJIYXNDYXBhYmlsaXR5LFxufSBmcm9tICdAZ2xpbW1lci9tYW5hZ2VyJztcbmltcG9ydCB7IHRlbXBsYXRlRmFjdG9yeSB9IGZyb20gJ0BnbGltbWVyL29wY29kZS1jb21waWxlcic7XG5pbXBvcnQgeyBERUZBVUxUX1RFTVBMQVRFIH0gZnJvbSAnLi91dGlsL2RlZmF1bHQtdGVtcGxhdGUnO1xuXG5jb25zdCBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZOiB1bmtub3duID0gT2JqZWN0LmZyZWV6ZShbXSk7XG5jb25zdCBTVEFSVEVSX0NPTlNUQU5UUyA9IGNvbnN0YW50cyhXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT046IG51bWJlciA9IFNUQVJURVJfQ09OU1RBTlRTLmluZGV4T2YoV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSk7XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlVGltZUNvbnN0YW50SW1wbCBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW10gPSBTVEFSVEVSX0NPTlNUQU5UUy5zbGljZSgpO1xuICBwcm90ZWN0ZWQgaW5kZXhNYXA6IE1hcDx1bmtub3duLCBudW1iZXI+ID0gbmV3IE1hcChcbiAgICB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW3ZhbHVlLCBpbmRleF0pXG4gICk7XG5cbiAgdmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICBsZXQgaW5kZXhNYXAgPSB0aGlzLmluZGV4TWFwO1xuICAgIGxldCBpbmRleCA9IGluZGV4TWFwLmdldCh2YWx1ZSk7XG5cbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKSAtIDE7XG4gICAgICBpbmRleE1hcC5zZXQodmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IHVua25vd25bXSk6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OO1xuICAgIH1cblxuICAgIGxldCBoYW5kbGVzOiBudW1iZXJbXSA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYW5kbGVzW2ldID0gdGhpcy52YWx1ZSh2YWx1ZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbHVlKGhhbmRsZXMpO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzSW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW107XG5cbiAgY29uc3RydWN0b3IocG9vbDogQ29uc3RhbnRQb29sKSB7XG4gICAgdGhpcy52YWx1ZXMgPSBwb29sO1xuICB9XG5cbiAgZ2V0VmFsdWU8VD4oaGFuZGxlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaGFuZGxlXSBhcyBUO1xuICB9XG5cbiAgZ2V0QXJyYXk8VD4odmFsdWU6IG51bWJlcik6IFRbXSB7XG4gICAgbGV0IGhhbmRsZXMgPSB0aGlzLmdldFZhbHVlKHZhbHVlKSBhcyBudW1iZXJbXTtcbiAgICBsZXQgcmVpZmllZDogVFtdID0gbmV3IEFycmF5KGhhbmRsZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBoYW5kbGVzW2ldO1xuICAgICAgcmVpZmllZFtpXSA9IHRoaXMuZ2V0VmFsdWUobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlaWZpZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50c0ltcGxcbiAgZXh0ZW5kcyBDb21waWxlVGltZUNvbnN0YW50SW1wbFxuICBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMsIFJlc29sdXRpb25UaW1lQ29uc3RhbnRzIHtcbiAgcHJvdGVjdGVkIHJlaWZpZWRBcnJzOiB7IFtrZXk6IG51bWJlcl06IHVua25vd25bXSB9ID0ge1xuICAgIFtXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OXTogV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSBhcyB1bmtub3duW10sXG4gIH07XG5cbiAgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeShERUZBVUxUX1RFTVBMQVRFKSgpO1xuXG4gIC8vIFVzZWQgZm9yIHRlc3RzIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFuZCB0byBiZSBhYmxlIHRvIGFuYWx5emUgbGFyZ2UgYXBwc1xuICAvLyBUaGlzIGlzIHdoeSBpdCdzIGVuYWJsZWQgZXZlbiBpbiBwcm9kdWN0aW9uXG4gIGhlbHBlckRlZmluaXRpb25Db3VudCA9IDA7XG4gIG1vZGlmaWVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgY29tcG9uZW50RGVmaW5pdGlvbkNvdW50ID0gMDtcblxuICBwcml2YXRlIGhlbHBlckRlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPEhlbHBlckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyIHwgbnVsbD4oKTtcblxuICBwcml2YXRlIG1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8TW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIG51bWJlciB8IG51bGw+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnREZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxcbiAgICBDb21wb25lbnREZWZpbml0aW9uU3RhdGUgfCBSZXNvbHZlZENvbXBvbmVudERlZmluaXRpb24sXG4gICAgQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGxcbiAgPigpO1xuXG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICBpc09wdGlvbmFsOiB0cnVlXG4gICk6IG51bWJlciB8IG51bGw7XG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZT86IHN0cmluZyB8IG51bGxcbiAgKTogbnVtYmVyO1xuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGlzT3B0aW9uYWw/OiB0cnVlXG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChoYW5kbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG1hbmFnZXJPckhlbHBlciA9IGdldEludGVybmFsSGVscGVyTWFuYWdlcihkZWZpbml0aW9uU3RhdGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAobWFuYWdlck9ySGVscGVyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG1hbmFnZXJPckhlbHBlciwgJ0JVRzogZXhwZWN0ZWQgbWFuYWdlciBvciBoZWxwZXInKTtcblxuICAgICAgbGV0IGhlbHBlciA9XG4gICAgICAgIHR5cGVvZiBtYW5hZ2VyT3JIZWxwZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG1hbmFnZXJPckhlbHBlclxuICAgICAgICAgIDogbWFuYWdlck9ySGVscGVyLmdldEhlbHBlcihkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgICBoYW5kbGUgPSB0aGlzLnZhbHVlKGhlbHBlcik7XG5cbiAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIGhhbmRsZSk7XG4gICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGU7XG4gIH1cblxuICBtb2RpZmllcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IE1vZGlmaWVyRGVmaW5pdGlvblN0YXRlLFxuICAgIHJlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICBpc09wdGlvbmFsOiB0cnVlXG4gICk6IG51bWJlciB8IG51bGw7XG4gIG1vZGlmaWVyKGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIHJlc29sdmVkTmFtZT86IHN0cmluZyB8IG51bGwpOiBudW1iZXI7XG4gIG1vZGlmaWVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gICAgcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5tb2RpZmllckRlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChoYW5kbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG1hbmFnZXIgPSBnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlcihkZWZpbml0aW9uU3RhdGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAobWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG5cbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgY29tcG9uZW50KGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlKTogQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgY29tcG9uZW50KFxuICAgIGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGw7XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZSxcbiAgICBvd25lcj86IG9iamVjdFxuICApOiBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG1hbmFnZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXInKTtcblxuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMoZGVmaW5pdGlvblN0YXRlKSk7XG5cbiAgICAgIGxldCB0ZW1wbGF0ZUZhY3RvcnkgPSBnZXRDb21wb25lbnRUZW1wbGF0ZShkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgICBsZXQgY29tcGlsYWJsZSA9IG51bGw7XG4gICAgICBsZXQgdGVtcGxhdGU7XG5cbiAgICAgIGlmICghbWFuYWdlckhhc0NhcGFiaWxpdHkobWFuYWdlciwgY2FwYWJpbGl0aWVzLCBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuRHluYW1pY0xheW91dCkpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcikgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeT8uKG93bmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWU6IG51bGwsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICByZXNvbHZlZENvbXBvbmVudChcbiAgICByZXNvbHZlZERlZmluaXRpb246IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZ1xuICApOiBDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLmdldChyZXNvbHZlZERlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHsgbWFuYWdlciwgc3RhdGUsIHRlbXBsYXRlIH0gPSByZXNvbHZlZERlZmluaXRpb247XG4gICAgICBsZXQgY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0eUZsYWdzRnJvbShtYW5hZ2VyLmdldENhcGFiaWxpdGllcyhyZXNvbHZlZERlZmluaXRpb24pKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHVud3JhcFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgICAgICBjb21waWxhYmxlID0gbWFuYWdlckhhc0NhcGFiaWxpdHkoXG4gICAgICAgICAgbWFuYWdlcixcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LldyYXBwZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdGVtcGxhdGUuYXNXcmFwcGVkTGF5b3V0KClcbiAgICAgICAgICA6IHRlbXBsYXRlLmFzTGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgaGFuZGxlOiAtMSwgLy8gcmVwbGFjZWQgbW9tZW50YXJpbHlcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQocmVzb2x2ZWREZWZpbml0aW9uLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGVjdChkZWZpbml0aW9uLCAnQlVHOiByZXNvbHZlZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgY2Fubm90IGJlIG51bGwnKTtcbiAgfVxuXG4gIGdldFZhbHVlPFQ+KGluZGV4OiBudW1iZXIpIHtcbiAgICBhc3NlcnQoaW5kZXggPj0gMCwgYGNhbm5vdCBnZXQgdmFsdWUgZm9yIGhhbmRsZTogJHtpbmRleH1gKTtcblxuICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF0gYXMgVDtcbiAgfVxuXG4gIGdldEFycmF5PFQ+KGluZGV4OiBudW1iZXIpOiBUW10ge1xuICAgIGxldCByZWlmaWVkQXJycyA9IHRoaXMucmVpZmllZEFycnM7XG4gICAgbGV0IHJlaWZpZWQgPSByZWlmaWVkQXJyc1tpbmRleF0gYXMgVFtdO1xuXG4gICAgaWYgKHJlaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG5hbWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0VmFsdWUoaW5kZXgpO1xuICAgICAgcmVpZmllZCA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlaWZpZWRbaV0gPSB0aGlzLmdldFZhbHVlKG5hbWVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmVpZmllZEFycnNbaW5kZXhdID0gcmVpZmllZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgT3Bjb2RlU2l6ZSwgUnVudGltZU9wLCBPcGNvZGVIZWFwIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lT3BJbXBsIGltcGxlbWVudHMgUnVudGltZU9wIHtcbiAgcHVibGljIG9mZnNldCA9IDA7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGhlYXA6IE9wY29kZUhlYXApIHt9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgbGV0IHJhd1R5cGUgPSB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0KTtcbiAgICByZXR1cm4gKChyYXdUeXBlICYgT3Bjb2RlU2l6ZS5PUEVSQU5EX0xFTl9NQVNLKSA+PiBPcGNvZGVTaXplLkFSR19TSElGVCkgKyAxO1xuICB9XG5cbiAgZ2V0IGlzTWFjaGluZSgpOiAwIHwgMSB7XG4gICAgbGV0IHJhd1R5cGUgPSB0aGlzLmhlYXAuZ2V0YnlhZGRyKHRoaXMub2Zmc2V0KTtcbiAgICByZXR1cm4gcmF3VHlwZSAmIE9wY29kZVNpemUuTUFDSElORV9NQVNLID8gMSA6IDA7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFwLmdldGJ5YWRkcih0aGlzLm9mZnNldCkgJiBPcGNvZGVTaXplLlRZUEVfTUFTSztcbiAgfVxuXG4gIGdldCBvcDEoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcC5nZXRieWFkZHIodGhpcy5vZmZzZXQgKyAxKTtcbiAgfVxuXG4gIGdldCBvcDIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcC5nZXRieWFkZHIodGhpcy5vZmZzZXQgKyAyKTtcbiAgfVxuXG4gIGdldCBvcDMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhcC5nZXRieWFkZHIodGhpcy5vZmZzZXQgKyAzKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQ29tcGlsZVRpbWVIZWFwLFxuICBTZXJpYWxpemVkSGVhcCxcbiAgUnVudGltZUhlYXAsXG4gIFN0ZExpYk9wZXJhbmQsXG4gIFJ1bnRpbWVDb25zdGFudHMsXG4gIFJ1bnRpbWVQcm9ncmFtLFxuICBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0NBTF9ERUJVRyB9IGZyb20gJ0BnbGltbWVyL2xvY2FsLWRlYnVnLWZsYWdzJztcbmltcG9ydCB7IFJ1bnRpbWVPcEltcGwgfSBmcm9tICcuL29wY29kZSc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuY29uc3QgZW51bSBUYWJsZVNsb3RTdGF0ZSB7XG4gIEFsbG9jYXRlZCxcbiAgRnJlZWQsXG4gIFB1cmdlZCxcbiAgUG9pbnRlcixcbn1cblxuZXhwb3J0IHR5cGUgUGxhY2Vob2xkZXIgPSBbbnVtYmVyLCAoKSA9PiBudW1iZXJdO1xuZXhwb3J0IHR5cGUgU3RkbGliUGxhY2Vob2xkZXIgPSBbbnVtYmVyLCBTdGRMaWJPcGVyYW5kXTtcblxuY29uc3QgUEFHRV9TSVpFID0gMHgxMDAwMDA7XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lSGVhcEltcGwgaW1wbGVtZW50cyBSdW50aW1lSGVhcCB7XG4gIHByaXZhdGUgaGVhcDogSW50MzJBcnJheTtcbiAgcHJpdmF0ZSB0YWJsZTogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3Ioc2VyaWFsaXplZEhlYXA6IFNlcmlhbGl6ZWRIZWFwKSB7XG4gICAgbGV0IHsgYnVmZmVyLCB0YWJsZSB9ID0gc2VyaWFsaXplZEhlYXA7XG4gICAgdGhpcy5oZWFwID0gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gIH1cblxuICAvLyBJdCBpcyBpbGxlZ2FsIHRvIGNsb3NlIG92ZXIgdGhpcyBhZGRyZXNzLCBhcyBjb21wYWN0aW9uXG4gIC8vIG1heSBtb3ZlIGl0LiBIb3dldmVyLCBpdCBpcyBsZWdhbCB0byB1c2UgdGhpcyBhZGRyZXNzXG4gIC8vIG11bHRpcGxlIHRpbWVzIGJldHdlZW4gY29tcGFjdGlvbnMuXG4gIGdldGFkZHIoaGFuZGxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlW2hhbmRsZV07XG4gIH1cblxuICBnZXRieWFkZHIoYWRkcmVzczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBhc3NlcnQodGhpcy5oZWFwW2FkZHJlc3NdICE9PSB1bmRlZmluZWQsICdBY2Nlc3MgbWVtb3J5IG91dCBvZiBib3VuZHMgb2YgdGhlIGhlYXAnKTtcbiAgICByZXR1cm4gdGhpcy5oZWFwW2FkZHJlc3NdO1xuICB9XG5cbiAgc2l6ZW9mKGhhbmRsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc2l6ZW9mKHRoaXMudGFibGUsIGhhbmRsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVIZWFwKHNlcmlhbGl6ZWRIZWFwOiBTZXJpYWxpemVkSGVhcCk6IFJ1bnRpbWVIZWFwIHtcbiAgcmV0dXJuIG5ldyBSdW50aW1lSGVhcEltcGwoc2VyaWFsaXplZEhlYXApO1xufVxuXG4vKipcbiAqIFRoZSBIZWFwIGlzIHJlc3BvbnNpYmxlIGZvciBkeW5hbWljYWxseSBhbGxvY2F0aW5nXG4gKiBtZW1vcnkgaW4gd2hpY2ggd2UgcmVhZC93cml0ZSB0aGUgVk0ncyBpbnN0cnVjdGlvbnNcbiAqIGZyb20vdG8uIFdoZW4gd2UgbWFsbG9jIHdlIHBhc3Mgb3V0IGEgVk1IYW5kbGUsIHdoaWNoXG4gKiBpcyB1c2VkIGFzIGFuIGluZGlyZWN0IHdheSBvZiBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBkdXJpbmdcbiAqIGV4ZWN1dGlvbiBvZiB0aGUgVk0uIEludGVybmFsbHkgd2UgdHJhY2sgdGhlIGRpZmZlcmVudFxuICogcmVnaW9ucyBvZiB0aGUgbWVtb3J5IGluIGFuIGludCBhcnJheSBrbm93biBhcyB0aGUgdGFibGUuXG4gKlxuICogVGhlIHRhYmxlIDMyLWJpdCBhbGlnbmVkIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6XG4gKlxuICogfCAuLi4gfCBocCAodTMyKSB8ICAgICAgIGluZm8gKHUzMikgICB8IHNpemUgKHUzMikgfFxuICogfCAuLi4gfCAgSGFuZGxlICB8IFNjb3BlIFNpemUgfCBTdGF0ZSB8IFNpemUgICAgICAgfFxuICogfCAuLi4gfCAzMmJpdHMgICB8IDMwYml0cyAgICAgfCAyYml0cyB8IDMyYml0ICAgICAgfFxuICpcbiAqIFdpdGggdGhpcyBpbmZvcm1hdGlvbiB3ZSBlZmZlY3RpdmVseSBoYXZlIHRoZSBhYmlsaXR5IHRvXG4gKiBjb250cm9sIHdoZW4gd2Ugd2FudCB0byBmcmVlIG1lbW9yeS4gVGhhdCBiZWluZyBzYWlkIHlvdVxuICogY2FuIG5vdCBmcmVlIGR1cmluZyBleGVjdXRpb24gYXMgcmF3IGFkZHJlc3MgYXJlIG9ubHlcbiAqIHZhbGlkIGR1cmluZyB0aGUgZXhlY3V0aW9uLiBUaGlzIG1lYW5zIHlvdSBjYW5ub3QgY2xvc2VcbiAqIG92ZXIgdGhlbSBhcyB5b3Ugd2lsbCBoYXZlIGEgYmFkIG1lbW9yeSBhY2Nlc3MgZXhjZXB0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSGVhcEltcGwgaW1wbGVtZW50cyBDb21waWxlVGltZUhlYXAsIFJ1bnRpbWVIZWFwIHtcbiAgb2Zmc2V0ID0gMDtcblxuICBwcml2YXRlIGhlYXA6IEludDMyQXJyYXk7XG4gIHByaXZhdGUgaGFuZGxlVGFibGU6IG51bWJlcltdO1xuICBwcml2YXRlIGhhbmRsZVN0YXRlOiBUYWJsZVNsb3RTdGF0ZVtdO1xuICBwcml2YXRlIGhhbmRsZSA9IDA7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFwID0gbmV3IEludDMyQXJyYXkoUEFHRV9TSVpFKTtcbiAgICB0aGlzLmhhbmRsZVRhYmxlID0gW107XG4gICAgdGhpcy5oYW5kbGVTdGF0ZSA9IFtdO1xuICB9XG5cbiAgcHVzaChpdGVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNpemVDaGVjaygpO1xuICAgIHRoaXMuaGVhcFt0aGlzLm9mZnNldCsrXSA9IGl0ZW07XG4gIH1cblxuICBwcml2YXRlIHNpemVDaGVjaygpIHtcbiAgICBsZXQgeyBoZWFwIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMub2Zmc2V0ID09PSB0aGlzLmhlYXAubGVuZ3RoKSB7XG4gICAgICBsZXQgbmV3SGVhcCA9IG5ldyBJbnQzMkFycmF5KGhlYXAubGVuZ3RoICsgUEFHRV9TSVpFKTtcbiAgICAgIG5ld0hlYXAuc2V0KGhlYXAsIDApO1xuICAgICAgdGhpcy5oZWFwID0gbmV3SGVhcDtcbiAgICB9XG4gIH1cblxuICBnZXRieWFkZHIoYWRkcmVzczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oZWFwW2FkZHJlc3NdO1xuICB9XG5cbiAgc2V0YnlhZGRyKGFkZHJlc3M6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaGVhcFthZGRyZXNzXSA9IHZhbHVlO1xuICB9XG5cbiAgbWFsbG9jKCk6IG51bWJlciB7XG4gICAgLy8gcHVzaCBvZmZzZXQsIGluZm8sIHNpemVcbiAgICB0aGlzLmhhbmRsZVRhYmxlLnB1c2godGhpcy5vZmZzZXQpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVRhYmxlLmxlbmd0aCAtIDE7XG4gIH1cblxuICBmaW5pc2hNYWxsb2MoaGFuZGxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBAVE9ETzogQXQgdGhlIG1vbWVudCwgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzbid0IGFjdHVhbGx5IHVzZWQsIHNvIHRoaXMgaXNcbiAgICAvLyB3cmFwcGVkIHRvIHByZXZlbnQgdXMgZnJvbSBhbGxvY2F0aW5nIGV4dHJhIHNwYWNlIGluIHByb2QuIEluIHRoZSBmdXR1cmUsXG4gICAgLy8gaWYgd2Ugc3RhcnQgdXNpbmcgdGhlIGNvbXBhY3QgQVBJLCB3ZSBzaG91bGQgY2hhbmdlIHRoaXMuXG4gICAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgICB0aGlzLmhhbmRsZVN0YXRlW2hhbmRsZV0gPSBUYWJsZVNsb3RTdGF0ZS5BbGxvY2F0ZWQ7XG4gICAgfVxuICB9XG5cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIC8vIEl0IGlzIGlsbGVnYWwgdG8gY2xvc2Ugb3ZlciB0aGlzIGFkZHJlc3MsIGFzIGNvbXBhY3Rpb25cbiAgLy8gbWF5IG1vdmUgaXQuIEhvd2V2ZXIsIGl0IGlzIGxlZ2FsIHRvIHVzZSB0aGlzIGFkZHJlc3NcbiAgLy8gbXVsdGlwbGUgdGltZXMgYmV0d2VlbiBjb21wYWN0aW9ucy5cbiAgZ2V0YWRkcihoYW5kbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlVGFibGVbaGFuZGxlXTtcbiAgfVxuXG4gIHNpemVvZihoYW5kbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNpemVvZih0aGlzLmhhbmRsZVRhYmxlLCBoYW5kbGUpO1xuICB9XG5cbiAgZnJlZShoYW5kbGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlU3RhdGVbaGFuZGxlXSA9IFRhYmxlU2xvdFN0YXRlLkZyZWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFwIHVzZXMgdGhlIFtNYXJrLUNvbXBhY3QgQWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXJrLWNvbXBhY3RfYWxnb3JpdGhtKSB0byBzaGlmdFxuICAgKiByZWFjaGFibGUgbWVtb3J5IHRvIHRoZSBib3R0b20gb2YgdGhlIGhlYXAgYW5kIGZyZWVhYmxlXG4gICAqIG1lbW9yeSB0byB0aGUgdG9wIG9mIHRoZSBoZWFwLiBXaGVuIHdlIGhhdmUgc2hpZnRlZCBhbGxcbiAgICogdGhlIHJlYWNoYWJsZSBtZW1vcnkgdG8gdGhlIHRvcCBvZiB0aGUgaGVhcCwgd2UgbW92ZSB0aGVcbiAgICogb2Zmc2V0IHRvIHRoZSBuZXh0IGZyZWUgcG9zaXRpb24uXG4gICAqL1xuICBjb21wYWN0KCk6IHZvaWQge1xuICAgIGxldCBjb21wYWN0ZWRTaXplID0gMDtcbiAgICBsZXQgeyBoYW5kbGVUYWJsZSwgaGFuZGxlU3RhdGUsIGhlYXAgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gaGFuZGxlVGFibGVbaV07XG4gICAgICBsZXQgc2l6ZSA9IGhhbmRsZVRhYmxlW2kgKyAxXSAtIG9mZnNldDtcbiAgICAgIGxldCBzdGF0ZSA9IGhhbmRsZVN0YXRlW2ldO1xuXG4gICAgICBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLlB1cmdlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFRhYmxlU2xvdFN0YXRlLkZyZWVkKSB7XG4gICAgICAgIC8vIHRyYW5zaXRpb24gdG8gXCJhbHJlYWR5IGZyZWVkXCIgYWthIFwicHVyZ2VkXCJcbiAgICAgICAgLy8gYSBnb29kIGltcHJvdmVtZW50IHdvdWxkIGJlIHRvIHJldXNlXG4gICAgICAgIC8vIHRoZXNlIHNsb3RzXG4gICAgICAgIGhhbmRsZVN0YXRlW2ldID0gVGFibGVTbG90U3RhdGUuUHVyZ2VkO1xuICAgICAgICBjb21wYWN0ZWRTaXplICs9IHNpemU7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBUYWJsZVNsb3RTdGF0ZS5BbGxvY2F0ZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IG9mZnNldDsgaiA8PSBpICsgc2l6ZTsgaisrKSB7XG4gICAgICAgICAgaGVhcFtqIC0gY29tcGFjdGVkU2l6ZV0gPSBoZWFwW2pdO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlVGFibGVbaV0gPSBvZmZzZXQgLSBjb21wYWN0ZWRTaXplO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gVGFibGVTbG90U3RhdGUuUG9pbnRlcikge1xuICAgICAgICBoYW5kbGVUYWJsZVtpXSA9IG9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXQgPSB0aGlzLm9mZnNldCAtIGNvbXBhY3RlZFNpemU7XG4gIH1cblxuICBjYXB0dXJlKG9mZnNldCA9IHRoaXMub2Zmc2V0KTogU2VyaWFsaXplZEhlYXAge1xuICAgIC8vIE9ubHkgY2FsbGVkIGluIGVhZ2VyIG1vZGVcbiAgICBsZXQgYnVmZmVyID0gc2xpY2UodGhpcy5oZWFwLCAwLCBvZmZzZXQpLmJ1ZmZlcjtcbiAgICByZXR1cm4ge1xuICAgICAgaGFuZGxlOiB0aGlzLmhhbmRsZSxcbiAgICAgIHRhYmxlOiB0aGlzLmhhbmRsZVRhYmxlLFxuICAgICAgYnVmZmVyOiBidWZmZXIgYXMgQXJyYXlCdWZmZXIsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVudGltZVByb2dyYW1JbXBsIGltcGxlbWVudHMgUnVudGltZVByb2dyYW0ge1xuICBba2V5OiBudW1iZXJdOiBuZXZlcjtcblxuICBwcml2YXRlIF9vcGNvZGU6IFJ1bnRpbWVPcEltcGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbnN0YW50czogUnVudGltZUNvbnN0YW50cyAmIFJlc29sdXRpb25UaW1lQ29uc3RhbnRzLFxuICAgIHB1YmxpYyBoZWFwOiBSdW50aW1lSGVhcFxuICApIHtcbiAgICB0aGlzLl9vcGNvZGUgPSBuZXcgUnVudGltZU9wSW1wbCh0aGlzLmhlYXApO1xuICB9XG5cbiAgb3Bjb2RlKG9mZnNldDogbnVtYmVyKTogUnVudGltZU9wSW1wbCB7XG4gICAgdGhpcy5fb3Bjb2RlLm9mZnNldCA9IG9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5fb3Bjb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNsaWNlKGFycjogSW50MzJBcnJheSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBJbnQzMkFycmF5IHtcbiAgaWYgKGFyci5zbGljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIGxldCByZXQgPSBuZXcgSW50MzJBcnJheShlbmQpO1xuXG4gIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykge1xuICAgIHJldFtzdGFydF0gPSBhcnJbc3RhcnRdO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gc2l6ZW9mKHRhYmxlOiBudW1iZXJbXSwgaGFuZGxlOiBudW1iZXIpIHtcbiAgaWYgKExPQ0FMX0RFQlVHKSB7XG4gICAgcmV0dXJuIHRhYmxlW2hhbmRsZSArIDFdIC0gdGFibGVbaGFuZGxlXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBpbGVUaW1lQXJ0aWZhY3RzLCBSdW50aW1lQXJ0aWZhY3RzIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb25zdGFudHNJbXBsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSGVhcEltcGwgfSBmcm9tICcuL3Byb2dyYW0nO1xuXG5leHBvcnQgZnVuY3Rpb24gYXJ0aWZhY3RzKCk6IENvbXBpbGVUaW1lQXJ0aWZhY3RzICYgUnVudGltZUFydGlmYWN0cyB7XG4gIHJldHVybiB7XG4gICAgY29uc3RhbnRzOiBuZXcgQ29uc3RhbnRzSW1wbCgpLFxuICAgIGhlYXA6IG5ldyBIZWFwSW1wbCgpLFxuICB9O1xufVxuIl0sIm5hbWVzIjpbImNvbnN0YW50cyIsInRlbXBsYXRlRmFjdG9yeSIsImdldEludGVybmFsSGVscGVyTWFuYWdlciIsIm1hbmFnZXIiLCJnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlciIsImdldEludGVybmFsQ29tcG9uZW50TWFuYWdlciIsImNhcGFiaWxpdHlGbGFnc0Zyb20iLCJnZXRDb21wb25lbnRUZW1wbGF0ZSIsIm1hbmFnZXJIYXNDYXBhYmlsaXR5IiwidW53cmFwVGVtcGxhdGUiXSwibWFwcGluZ3MiOiI7O0VBTUE7OztFQUdBLElBQU0sc0JBQXNCLEdBQTRCLENBQ3RELENBQUMsQ0FBQTtFQUFBO0VBQUEsRUFBQSxDQUFBLEVBRHFELElBQ3JELENBQUQsQ0FEc0QsRUFFdEQsQ0FGc0QsVUFFdEQsQ0FGc0QsRUFBQSxLQUFBLEVBQXhELEVBQXdELENBQXhEO0VBT08sSUFBTSxnQkFBZ0IsR0FBb0M7RUFDL0Q7RUFDQSxFQUFBLEVBQUUsRUFGNkQsc0NBQUE7RUFHL0QsRUFBQSxVQUFVLEVBSHFELGlCQUFBO0VBSS9ELEVBQUEsS0FBSyxFQUFFLElBQUksQ0FBSixTQUFBLENBSndELHNCQUl4RCxDQUp3RDtFQUsvRCxFQUFBLEtBQUssRUFMMEQsSUFBQTtFQU0vRCxFQUFBLFlBQVksRUFBRTtFQU5pRCxDQUExRDs7O0VDU1AsSUFBTSxzQkFBc0IsR0FBWSxNQUFNLENBQU4sTUFBQSxDQUF4QyxFQUF3QyxDQUF4QztFQUNBLElBQU0saUJBQWlCLEdBQUdBLGNBQVMsQ0FBbkMsc0JBQW1DLENBQW5DO0VBQ0EsSUFBTSwrQkFBK0IsR0FBVyxpQkFBaUIsQ0FBakIsT0FBQSxDQUFoRCxz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 |
@@ -125,7 +125,13 @@ "use strict"; | ||
modifier(definitionState, resolvedName = null) { | ||
modifier(definitionState, resolvedName = null, isOptional) { | ||
let handle = this.modifierDefinitionCache.get(definitionState); | ||
if (handle === undefined) { | ||
let manager = (0, _manager.getInternalModifierManager)(definitionState); | ||
let manager = (0, _manager.getInternalModifierManager)(definitionState, isOptional); | ||
if (manager === null) { | ||
this.modifierDefinitionCache.set(definitionState, null); | ||
return null; | ||
} | ||
let definition = { | ||
@@ -261,2 +267,2 @@ resolvedName, | ||
exports.ConstantsImpl = ConstantsImpl; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBYUE7O0FBQ0E7O0FBUUE7O0FBQ0E7O0FBRUEsTUFBTSxzQkFBc0IsR0FBWSxNQUFNLENBQU4sTUFBQSxDQUF4QyxFQUF3QyxDQUF4QztBQUNBLE1BQU0saUJBQWlCLEdBQUcscUJBQTFCLHNCQUEwQixDQUExQjtBQUNBLE1BQU0sK0JBQStCLEdBQVcsaUJBQWlCLENBQWpCLE9BQUEsQ0FBaEQsc0JBQWdELENBQWhEOztBQUVNLE1BQUEsdUJBQUEsQ0FBOEI7QUFBcEMsRUFBQSxXQUFBLEdBQUE7QUFDRTtBQUVVLFNBQUEsTUFBQSxHQUFvQixpQkFBaUIsQ0FBckMsS0FBb0IsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBQSxHQUFBLENBQ3pDLEtBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBZ0IsQ0FBQSxLQUFBLEVBQUEsS0FBQSxLQUFrQixDQUFBLEtBQUEsRUFEMUIsS0FDMEIsQ0FBbEMsQ0FEeUMsQ0FBakM7QUFpQ1g7O0FBN0JDLEVBQUEsS0FBSyxDQUFBLEtBQUEsRUFBZTtBQUNsQixRQUFJLFFBQVEsR0FBRyxLQUFmLFFBQUE7QUFDQSxRQUFJLEtBQUssR0FBRyxRQUFRLENBQVIsR0FBQSxDQUFaLEtBQVksQ0FBWjs7QUFFQSxRQUFJLEtBQUssS0FBVCxTQUFBLEVBQXlCO0FBQ3ZCLE1BQUEsS0FBSyxHQUFHLEtBQUEsTUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBLElBQVIsQ0FBQTtBQUNBLE1BQUEsUUFBUSxDQUFSLEdBQUEsQ0FBQSxLQUFBLEVBQUEsS0FBQTtBQUNEOztBQUVELFdBQUEsS0FBQTtBQUNEOztBQUVELEVBQUEsS0FBSyxDQUFBLE1BQUEsRUFBa0I7QUFDckIsUUFBSSxNQUFNLENBQU4sTUFBQSxLQUFKLENBQUEsRUFBeUI7QUFDdkIsYUFBQSwrQkFBQTtBQUNEOztBQUVE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QU4sQ0FBTixFQUFtQixnQ0FBZ0MsS0FENUIsRUFDdkIsQ0FEdUI7QUFHdkIsV0FBTyxLQUFBLE1BQUEsQ0FBUCxLQUFPLENBQVA7QUFDRDs7QUFFRCxFQUFBLFFBQVEsQ0FBQSxLQUFBLEVBQWlCO0FBQ3ZCLFFBQUksV0FBVyxHQUFHLEtBQWxCLFdBQUE7QUFDQSxRQUFJLE9BQU8sR0FBRyxXQUFXLENBQXpCLEtBQXlCLENBQXpCOztBQUVBLFFBQUksT0FBTyxLQUFYLFNBQUEsRUFBMkI7QUFDekIsVUFBSSxLQUFLLEdBQWEsS0FBQSxRQUFBLENBQXRCLEtBQXNCLENBQXRCO0FBQ0EsTUFBQSxPQUFPLEdBQUcsSUFBQSxLQUFBLENBQVUsS0FBSyxDQUF6QixNQUFVLENBQVY7O0FBRUEsV0FBSyxJQUFJLENBQUMsR0FBVixDQUFBLEVBQWdCLENBQUMsR0FBRyxLQUFLLENBQXpCLE1BQUEsRUFBa0MsQ0FBbEMsRUFBQSxFQUF1QztBQUNyQyxRQUFBLE9BQU8sQ0FBUCxDQUFPLENBQVAsR0FBYSxLQUFBLFFBQUEsQ0FBYyxLQUFLLENBQWhDLENBQWdDLENBQW5CLENBQWI7QUFDRDs7QUFFRCxNQUFBLFdBQVcsQ0FBWCxLQUFXLENBQVgsR0FBQSxPQUFBO0FBQ0Q7O0FBRUQsV0FBQSxPQUFBO0FBQ0Q7O0FBN044QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBpbGVUaW1lQ29uc3RhbnRzLFxuICBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gIENvbnN0YW50UG9vbCxcbiAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyxcbiAgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICBSdW50aW1lQ29uc3RhbnRzLFxuICBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuICBUZW1wbGF0ZSxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGNvbnN0YW50cywgZXhwZWN0LCB1bndyYXBUZW1wbGF0ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgY2FwYWJpbGl0eUZsYWdzRnJvbSxcbiAgZ2V0Q29tcG9uZW50VGVtcGxhdGUsXG4gIGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyLFxuICBnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlcixcbiAgbWFuYWdlckhhc0NhcGFiaWxpdHksXG59IGZyb20gJ0BnbGltbWVyL21hbmFnZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IERFRkFVTFRfVEVNUExBVEUgfSBmcm9tICcuL3V0aWwvZGVmYXVsdC10ZW1wbGF0ZSc7XG5cbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVk6IHVua25vd24gPSBPYmplY3QuZnJlZXplKFtdKTtcbmNvbnN0IFNUQVJURVJfQ09OU1RBTlRTID0gY29uc3RhbnRzKFdFTExfS05PV05fRU1QVFlfQVJSQVkpO1xuY29uc3QgV0VMTF9LTk9XTl9FTVBUWV9BUlJBWV9QT1NJVElPTjogbnVtYmVyID0gU1RBUlRFUl9DT05TVEFOVFMuaW5kZXhPZihXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXSA9IFNUQVJURVJfQ09OU1RBTlRTLnNsaWNlKCk7XG4gIHByb3RlY3RlZCBpbmRleE1hcDogTWFwPHVua25vd24sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgIHRoaXMudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiBbdmFsdWUsIGluZGV4XSlcbiAgKTtcblxuICB2YWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGxldCBpbmRleE1hcCA9IHRoaXMuaW5kZXhNYXA7XG4gICAgbGV0IGluZGV4ID0gaW5kZXhNYXAuZ2V0KHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHRoaXMudmFsdWVzLnB1c2godmFsdWUpIC0gMTtcbiAgICAgIGluZGV4TWFwLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogdW5rbm93bltdKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT047XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZXM6IG51bWJlcltdID0gbmV3IEFycmF5KHZhbHVlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRsZXNbaV0gPSB0aGlzLnZhbHVlKHZhbHVlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWUoaGFuZGxlcyk7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHNJbXBsIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cyB7XG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXTtcblxuICBjb25zdHJ1Y3Rvcihwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHBvb2w7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihoYW5kbGU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1toYW5kbGVdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPih2YWx1ZTogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgaGFuZGxlcyA9IHRoaXMuZ2V0VmFsdWUodmFsdWUpIGFzIG51bWJlcltdO1xuICAgIGxldCByZWlmaWVkOiBUW10gPSBuZXcgQXJyYXkoaGFuZGxlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IGhhbmRsZXNbaV07XG4gICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzSW1wbFxuICBleHRlbmRzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsXG4gIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cywgUmVzb2x1dGlvblRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgcmVpZmllZEFycnM6IHsgW2tleTogbnVtYmVyXTogdW5rbm93bltdIH0gPSB7XG4gICAgW1dFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT05dOiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZIGFzIHVua25vd25bXSxcbiAgfTtcblxuICBkZWZhdWx0VGVtcGxhdGU6IFRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5KERFRkFVTFRfVEVNUExBVEUpKCk7XG5cbiAgLy8gVXNlZCBmb3IgdGVzdHMgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcywgYW5kIHRvIGJlIGFibGUgdG8gYW5hbHl6ZSBsYXJnZSBhcHBzXG4gIC8vIFRoaXMgaXMgd2h5IGl0J3MgZW5hYmxlZCBldmVuIGluIHByb2R1Y3Rpb25cbiAgaGVscGVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgbW9kaWZpZXJEZWZpbml0aW9uQ291bnQgPSAwO1xuICBjb21wb25lbnREZWZpbml0aW9uQ291bnQgPSAwO1xuXG4gIHByaXZhdGUgaGVscGVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8SGVscGVyRGVmaW5pdGlvblN0YXRlLCBudW1iZXIgfCBudWxsPigpO1xuXG4gIHByaXZhdGUgbW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyPigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8XG4gICAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlIHwgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICAgIENvbXBvbmVudERlZmluaXRpb24gfCBudWxsXG4gID4oKTtcblxuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgaXNPcHRpb25hbDogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsO1xuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gICk6IG51bWJlcjtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyT3JIZWxwZXIgPSBnZXRJbnRlcm5hbEhlbHBlck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlLCBpc09wdGlvbmFsKTtcblxuICAgICAgaWYgKG1hbmFnZXJPckhlbHBlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChtYW5hZ2VyT3JIZWxwZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXIgb3IgaGVscGVyJyk7XG5cbiAgICAgIGxldCBoZWxwZXIgPVxuICAgICAgICB0eXBlb2YgbWFuYWdlck9ySGVscGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBtYW5hZ2VyT3JIZWxwZXJcbiAgICAgICAgICA6IG1hbmFnZXJPckhlbHBlci5nZXRIZWxwZXIoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgaGFuZGxlID0gdGhpcy52YWx1ZShoZWxwZXIpO1xuXG4gICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBoYW5kbGUpO1xuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgbW9kaWZpZXIoZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IG51bWJlciB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgbGV0IGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG5cbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgY29tcG9uZW50KGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlKTogQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgY29tcG9uZW50KFxuICAgIGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGw7XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZSxcbiAgICBvd25lcj86IG9iamVjdFxuICApOiBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG1hbmFnZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXInKTtcblxuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMoZGVmaW5pdGlvblN0YXRlKSk7XG5cbiAgICAgIGxldCB0ZW1wbGF0ZUZhY3RvcnkgPSBnZXRDb21wb25lbnRUZW1wbGF0ZShkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgICBsZXQgY29tcGlsYWJsZSA9IG51bGw7XG4gICAgICBsZXQgdGVtcGxhdGU7XG5cbiAgICAgIGlmICghbWFuYWdlckhhc0NhcGFiaWxpdHkobWFuYWdlciwgY2FwYWJpbGl0aWVzLCBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuRHluYW1pY0xheW91dCkpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcikgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeT8uKG93bmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWU6IG51bGwsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICByZXNvbHZlZENvbXBvbmVudChcbiAgICByZXNvbHZlZERlZmluaXRpb246IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZ1xuICApOiBDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLmdldChyZXNvbHZlZERlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHsgbWFuYWdlciwgc3RhdGUsIHRlbXBsYXRlIH0gPSByZXNvbHZlZERlZmluaXRpb247XG4gICAgICBsZXQgY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0eUZsYWdzRnJvbShtYW5hZ2VyLmdldENhcGFiaWxpdGllcyhyZXNvbHZlZERlZmluaXRpb24pKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHVud3JhcFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgICAgICBjb21waWxhYmxlID0gbWFuYWdlckhhc0NhcGFiaWxpdHkoXG4gICAgICAgICAgbWFuYWdlcixcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LldyYXBwZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdGVtcGxhdGUuYXNXcmFwcGVkTGF5b3V0KClcbiAgICAgICAgICA6IHRlbXBsYXRlLmFzTGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgaGFuZGxlOiAtMSwgLy8gcmVwbGFjZWQgbW9tZW50YXJpbHlcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQocmVzb2x2ZWREZWZpbml0aW9uLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGVjdChkZWZpbml0aW9uLCAnQlVHOiByZXNvbHZlZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgY2Fubm90IGJlIG51bGwnKTtcbiAgfVxuXG4gIGdldFZhbHVlPFQ+KGluZGV4OiBudW1iZXIpIHtcbiAgICBhc3NlcnQoaW5kZXggPj0gMCwgYGNhbm5vdCBnZXQgdmFsdWUgZm9yIGhhbmRsZTogJHtpbmRleH1gKTtcblxuICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF0gYXMgVDtcbiAgfVxuXG4gIGdldEFycmF5PFQ+KGluZGV4OiBudW1iZXIpOiBUW10ge1xuICAgIGxldCByZWlmaWVkQXJycyA9IHRoaXMucmVpZmllZEFycnM7XG4gICAgbGV0IHJlaWZpZWQgPSByZWlmaWVkQXJyc1tpbmRleF0gYXMgVFtdO1xuXG4gICAgaWYgKHJlaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG5hbWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0VmFsdWUoaW5kZXgpO1xuICAgICAgcmVpZmllZCA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlaWZpZWRbaV0gPSB0aGlzLmdldFZhbHVlKG5hbWVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmVpZmllZEFycnNbaW5kZXhdID0gcmVpZmllZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBYUE7O0FBQ0E7O0FBUUE7O0FBQ0E7O0FBRUEsTUFBTSxzQkFBc0IsR0FBWSxNQUFNLENBQU4sTUFBQSxDQUF4QyxFQUF3QyxDQUF4QztBQUNBLE1BQU0saUJBQWlCLEdBQUcscUJBQTFCLHNCQUEwQixDQUExQjtBQUNBLE1BQU0sK0JBQStCLEdBQVcsaUJBQWlCLENBQWpCLE9BQUEsQ0FBaEQsc0JBQWdELENBQWhEOztBQUVNLE1BQUEsdUJBQUEsQ0FBOEI7QUFBcEMsRUFBQSxXQUFBLEdBQUE7QUFDRTtBQUVVLFNBQUEsTUFBQSxHQUFvQixpQkFBaUIsQ0FBckMsS0FBb0IsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBQSxHQUFBLENBQ3pDLEtBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBZ0IsQ0FBQSxLQUFBLEVBQUEsS0FBQSxLQUFrQixDQUFBLEtBQUEsRUFEMUIsS0FDMEIsQ0FBbEMsQ0FEeUMsQ0FBakM7QUFpQ1g7O0FBN0JDLEVBQUEsS0FBSyxDQUFBLEtBQUEsRUFBZTtBQUNsQixRQUFJLFFBQVEsR0FBRyxLQUFmLFFBQUE7QUFDQSxRQUFJLEtBQUssR0FBRyxRQUFRLENBQVIsR0FBQSxDQUFaLEtBQVksQ0FBWjs7QUFFQSxRQUFJLEtBQUssS0FBVCxTQUFBLEVBQXlCO0FBQ3ZCLE1BQUEsS0FBSyxHQUFHLEtBQUEsTUFBQSxDQUFBLElBQUEsQ0FBQSxLQUFBLElBQVIsQ0FBQTtBQUNBLE1BQUEsUUFBUSxDQUFSLEdBQUEsQ0FBQSxLQUFBLEVBQUEsS0FBQTtBQUNEOztBQUVELFdBQUEsS0FBQTtBQUNEOztBQUVELEVBQUEsS0FBSyxDQUFBLE1BQUEsRUFBa0I7QUFDckIsUUFBSSxNQUFNLENBQU4sTUFBQSxLQUFKLENBQUEsRUFBeUI7QUFDdkIsYUFBQSwrQkFBQTtBQUNEOztBQUVE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Q0FBQSxrQkFBQSxFQUFBLFVBQUE7QUFDQSxXQUFBLHdCQUFBO0FBQ0Q7O0FBRUQsV0FBQSxVQUFBO0FBQ0Q7O0FBRUQsRUFBQSxRQUFRLENBQUEsS0FBQSxFQUFpQjtBQUFBLGFBQ3ZCLGtCQUFPLEtBQUssSUFBTixDQUFOLEVBQW1CLGdDQUFnQyxLQUQ1QixFQUN2QixDQUR1QjtBQUd2QixXQUFPLEtBQUEsTUFBQSxDQUFQLEtBQU8sQ0FBUDtBQUNEOztBQUVELEVBQUEsUUFBUSxDQUFBLEtBQUEsRUFBaUI7QUFDdkIsUUFBSSxXQUFXLEdBQUcsS0FBbEIsV0FBQTtBQUNBLFFBQUksT0FBTyxHQUFHLFdBQVcsQ0FBekIsS0FBeUIsQ0FBekI7O0FBRUEsUUFBSSxPQUFPLEtBQVgsU0FBQSxFQUEyQjtBQUN6QixVQUFJLEtBQUssR0FBYSxLQUFBLFFBQUEsQ0FBdEIsS0FBc0IsQ0FBdEI7QUFDQSxNQUFBLE9BQU8sR0FBRyxJQUFBLEtBQUEsQ0FBVSxLQUFLLENBQXpCLE1BQVUsQ0FBVjs7QUFFQSxXQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLEtBQUssQ0FBekIsTUFBQSxFQUFrQyxDQUFsQyxFQUFBLEVBQXVDO0FBQ3JDLFFBQUEsT0FBTyxDQUFQLENBQU8sQ0FBUCxHQUFhLEtBQUEsUUFBQSxDQUFjLEtBQUssQ0FBaEMsQ0FBZ0MsQ0FBbkIsQ0FBYjtBQUNEOztBQUVELE1BQUEsV0FBVyxDQUFYLEtBQVcsQ0FBWCxHQUFBLE9BQUE7QUFDRDs7QUFFRCxXQUFBLE9BQUE7QUFDRDs7QUE1TzhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcGlsZVRpbWVDb25zdGFudHMsXG4gIENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgQ29uc3RhbnRQb29sLFxuICBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHksXG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIFJlc29sdXRpb25UaW1lQ29uc3RhbnRzLFxuICBSZXNvbHZlZENvbXBvbmVudERlZmluaXRpb24sXG4gIFJ1bnRpbWVDb25zdGFudHMsXG4gIE1vZGlmaWVyRGVmaW5pdGlvblN0YXRlLFxuICBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG4gIFRlbXBsYXRlLFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGFzc2VydCwgY29uc3RhbnRzLCBleHBlY3QsIHVud3JhcFRlbXBsYXRlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBjYXBhYmlsaXR5RmxhZ3NGcm9tLFxuICBnZXRDb21wb25lbnRUZW1wbGF0ZSxcbiAgZ2V0SW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyLFxuICBnZXRJbnRlcm5hbEhlbHBlck1hbmFnZXIsXG4gIGdldEludGVybmFsTW9kaWZpZXJNYW5hZ2VyLFxuICBtYW5hZ2VySGFzQ2FwYWJpbGl0eSxcbn0gZnJvbSAnQGdsaW1tZXIvbWFuYWdlcic7XG5pbXBvcnQgeyB0ZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICdAZ2xpbW1lci9vcGNvZGUtY29tcGlsZXInO1xuaW1wb3J0IHsgREVGQVVMVF9URU1QTEFURSB9IGZyb20gJy4vdXRpbC9kZWZhdWx0LXRlbXBsYXRlJztcblxuY29uc3QgV0VMTF9LTk9XTl9FTVBUWV9BUlJBWTogdW5rbm93biA9IE9iamVjdC5mcmVlemUoW10pO1xuY29uc3QgU1RBUlRFUl9DT05TVEFOVFMgPSBjb25zdGFudHMoV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSk7XG5jb25zdCBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OOiBudW1iZXIgPSBTVEFSVEVSX0NPTlNUQU5UUy5pbmRleE9mKFdFTExfS05PV05fRU1QVFlfQVJSQVkpO1xuXG5leHBvcnQgY2xhc3MgQ29tcGlsZVRpbWVDb25zdGFudEltcGwgaW1wbGVtZW50cyBDb21waWxlVGltZUNvbnN0YW50cyB7XG4gIC8vIGAwYCBtZWFucyBOVUxMXG5cbiAgcHJvdGVjdGVkIHZhbHVlczogdW5rbm93bltdID0gU1RBUlRFUl9DT05TVEFOVFMuc2xpY2UoKTtcbiAgcHJvdGVjdGVkIGluZGV4TWFwOiBNYXA8dW5rbm93biwgbnVtYmVyPiA9IG5ldyBNYXAoXG4gICAgdGhpcy52YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IFt2YWx1ZSwgaW5kZXhdKVxuICApO1xuXG4gIHZhbHVlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgbGV0IGluZGV4TWFwID0gdGhpcy5pbmRleE1hcDtcbiAgICBsZXQgaW5kZXggPSBpbmRleE1hcC5nZXQodmFsdWUpO1xuXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluZGV4ID0gdGhpcy52YWx1ZXMucHVzaCh2YWx1ZSkgLSAxO1xuICAgICAgaW5kZXhNYXAuc2V0KHZhbHVlLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgYXJyYXkodmFsdWVzOiB1bmtub3duW10pOiBudW1iZXIge1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gV0VMTF9LTk9XTl9FTVBUWV9BUlJBWV9QT1NJVElPTjtcbiAgICB9XG5cbiAgICBsZXQgaGFuZGxlczogbnVtYmVyW10gPSBuZXcgQXJyYXkodmFsdWVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaGFuZGxlc1tpXSA9IHRoaXMudmFsdWUodmFsdWVzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy52YWx1ZShoYW5kbGVzKTtcbiAgfVxuXG4gIHRvUG9vbCgpOiBDb25zdGFudFBvb2wge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVudGltZUNvbnN0YW50c0ltcGwgaW1wbGVtZW50cyBSdW50aW1lQ29uc3RhbnRzIHtcbiAgcHJvdGVjdGVkIHZhbHVlczogdW5rbm93bltdO1xuXG4gIGNvbnN0cnVjdG9yKHBvb2w6IENvbnN0YW50UG9vbCkge1xuICAgIHRoaXMudmFsdWVzID0gcG9vbDtcbiAgfVxuXG4gIGdldFZhbHVlPFQ+KGhhbmRsZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2hhbmRsZV0gYXMgVDtcbiAgfVxuXG4gIGdldEFycmF5PFQ+KHZhbHVlOiBudW1iZXIpOiBUW10ge1xuICAgIGxldCBoYW5kbGVzID0gdGhpcy5nZXRWYWx1ZSh2YWx1ZSkgYXMgbnVtYmVyW107XG4gICAgbGV0IHJlaWZpZWQ6IFRbXSA9IG5ldyBBcnJheShoYW5kbGVzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuID0gaGFuZGxlc1tpXTtcbiAgICAgIHJlaWZpZWRbaV0gPSB0aGlzLmdldFZhbHVlKG4pO1xuICAgIH1cblxuICAgIHJldHVybiByZWlmaWVkO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25zdGFudHNJbXBsXG4gIGV4dGVuZHMgQ29tcGlsZVRpbWVDb25zdGFudEltcGxcbiAgaW1wbGVtZW50cyBSdW50aW1lQ29uc3RhbnRzLCBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyB7XG4gIHByb3RlY3RlZCByZWlmaWVkQXJyczogeyBba2V5OiBudW1iZXJdOiB1bmtub3duW10gfSA9IHtcbiAgICBbV0VMTF9LTk9XTl9FTVBUWV9BUlJBWV9QT1NJVElPTl06IFdFTExfS05PV05fRU1QVFlfQVJSQVkgYXMgdW5rbm93bltdLFxuICB9O1xuXG4gIGRlZmF1bHRUZW1wbGF0ZTogVGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3RvcnkoREVGQVVMVF9URU1QTEFURSkoKTtcblxuICAvLyBVc2VkIGZvciB0ZXN0cyBhbmQgZGVidWdnaW5nIHB1cnBvc2VzLCBhbmQgdG8gYmUgYWJsZSB0byBhbmFseXplIGxhcmdlIGFwcHNcbiAgLy8gVGhpcyBpcyB3aHkgaXQncyBlbmFibGVkIGV2ZW4gaW4gcHJvZHVjdGlvblxuICBoZWxwZXJEZWZpbml0aW9uQ291bnQgPSAwO1xuICBtb2RpZmllckRlZmluaXRpb25Db3VudCA9IDA7XG4gIGNvbXBvbmVudERlZmluaXRpb25Db3VudCA9IDA7XG5cbiAgcHJpdmF0ZSBoZWxwZXJEZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxIZWxwZXJEZWZpbml0aW9uU3RhdGUsIG51bWJlciB8IG51bGw+KCk7XG5cbiAgcHJpdmF0ZSBtb2RpZmllckRlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPE1vZGlmaWVyRGVmaW5pdGlvblN0YXRlLCBudW1iZXIgfCBudWxsPigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8XG4gICAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlIHwgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICAgIENvbXBvbmVudERlZmluaXRpb24gfCBudWxsXG4gID4oKTtcblxuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgaXNPcHRpb25hbDogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsO1xuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gICk6IG51bWJlcjtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyT3JIZWxwZXIgPSBnZXRJbnRlcm5hbEhlbHBlck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlLCBpc09wdGlvbmFsKTtcblxuICAgICAgaWYgKG1hbmFnZXJPckhlbHBlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChtYW5hZ2VyT3JIZWxwZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXIgb3IgaGVscGVyJyk7XG5cbiAgICAgIGxldCBoZWxwZXIgPVxuICAgICAgICB0eXBlb2YgbWFuYWdlck9ySGVscGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBtYW5hZ2VyT3JIZWxwZXJcbiAgICAgICAgICA6IG1hbmFnZXJPckhlbHBlci5nZXRIZWxwZXIoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgaGFuZGxlID0gdGhpcy52YWx1ZShoZWxwZXIpO1xuXG4gICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBoYW5kbGUpO1xuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgbW9kaWZpZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgaXNPcHRpb25hbDogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsO1xuICBtb2RpZmllcihkZWZpbml0aW9uU3RhdGU6IE1vZGlmaWVyRGVmaW5pdGlvblN0YXRlLCByZXNvbHZlZE5hbWU/OiBzdHJpbmcgfCBudWxsKTogbnVtYmVyO1xuICBtb2RpZmllcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IE1vZGlmaWVyRGVmaW5pdGlvblN0YXRlLFxuICAgIHJlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgaXNPcHRpb25hbD86IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlLCBpc09wdGlvbmFsKTtcblxuICAgICAgaWYgKG1hbmFnZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5tb2RpZmllckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGxldCBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWUsXG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIHN0YXRlOiBkZWZpbml0aW9uU3RhdGUsXG4gICAgICB9O1xuXG4gICAgICBoYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuXG4gICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIGhhbmRsZSk7XG4gICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfVxuXG4gIGNvbXBvbmVudChkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSk6IENvbXBvbmVudERlZmluaXRpb247XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsOiB0cnVlXG4gICk6IENvbXBvbmVudERlZmluaXRpb24gfCBudWxsO1xuICBjb21wb25lbnQoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gICAgaXNPcHRpb25hbD86IHRydWUsXG4gICAgb3duZXI/OiBvYmplY3RcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGwge1xuICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcihkZWZpbml0aW9uU3RhdGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAobWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChtYW5hZ2VyLCAnQlVHOiBleHBlY3RlZCBtYW5hZ2VyJyk7XG5cbiAgICAgIGxldCBjYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXR5RmxhZ3NGcm9tKG1hbmFnZXIuZ2V0Q2FwYWJpbGl0aWVzKGRlZmluaXRpb25TdGF0ZSkpO1xuXG4gICAgICBsZXQgdGVtcGxhdGVGYWN0b3J5ID0gZ2V0Q29tcG9uZW50VGVtcGxhdGUoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuICAgICAgbGV0IHRlbXBsYXRlO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5Py4ob3duZXIpID8/IHRoaXMuZGVmYXVsdFRlbXBsYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdW53cmFwVGVtcGxhdGUodGVtcGxhdGUpO1xuXG4gICAgICAgIGNvbXBpbGFibGUgPSBtYW5hZ2VySGFzQ2FwYWJpbGl0eShcbiAgICAgICAgICBtYW5hZ2VyLFxuICAgICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgICBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuV3JhcHBlZFxuICAgICAgICApXG4gICAgICAgICAgPyB0ZW1wbGF0ZS5hc1dyYXBwZWRMYXlvdXQoKVxuICAgICAgICAgIDogdGVtcGxhdGUuYXNMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgcmVzb2x2ZWROYW1lOiBudWxsLFxuICAgICAgICBoYW5kbGU6IC0xLCAvLyByZXBsYWNlZCBtb21lbnRhcmlseVxuICAgICAgICBtYW5hZ2VyLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgIHN0YXRlOiBkZWZpbml0aW9uU3RhdGUsXG4gICAgICAgIGNvbXBpbGFibGUsXG4gICAgICB9O1xuXG4gICAgICBkZWZpbml0aW9uIS5oYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcmVzb2x2ZWRDb21wb25lbnQoXG4gICAgcmVzb2x2ZWREZWZpbml0aW9uOiBSZXNvbHZlZENvbXBvbmVudERlZmluaXRpb24sXG4gICAgcmVzb2x2ZWROYW1lOiBzdHJpbmdcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQocmVzb2x2ZWREZWZpbml0aW9uKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCB7IG1hbmFnZXIsIHN0YXRlLCB0ZW1wbGF0ZSB9ID0gcmVzb2x2ZWREZWZpbml0aW9uO1xuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMocmVzb2x2ZWREZWZpbml0aW9uKSk7XG5cbiAgICAgIGxldCBjb21waWxhYmxlID0gbnVsbDtcblxuICAgICAgaWYgKCFtYW5hZ2VySGFzQ2FwYWJpbGl0eShtYW5hZ2VyLCBjYXBhYmlsaXRpZXMsIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5EeW5hbWljTGF5b3V0KSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlID8/IHRoaXMuZGVmYXVsdFRlbXBsYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVtcGxhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWUsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNvbXBpbGFibGUsXG4gICAgICB9O1xuXG4gICAgICBkZWZpbml0aW9uIS5oYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KHJlc29sdmVkRGVmaW5pdGlvbiwgZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBleHBlY3QoZGVmaW5pdGlvbiwgJ0JVRzogcmVzb2x2ZWQgY29tcG9uZW50IGRlZmluaXRpb25zIGNhbm5vdCBiZSBudWxsJyk7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihpbmRleDogbnVtYmVyKSB7XG4gICAgYXNzZXJ0KGluZGV4ID49IDAsIGBjYW5ub3QgZ2V0IHZhbHVlIGZvciBoYW5kbGU6ICR7aW5kZXh9YCk7XG5cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPihpbmRleDogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgcmVpZmllZEFycnMgPSB0aGlzLnJlaWZpZWRBcnJzO1xuICAgIGxldCByZWlmaWVkID0gcmVpZmllZEFycnNbaW5kZXhdIGFzIFRbXTtcblxuICAgIGlmIChyZWlmaWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBuYW1lczogbnVtYmVyW10gPSB0aGlzLmdldFZhbHVlKGluZGV4KTtcbiAgICAgIHJlaWZpZWQgPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuYW1lc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHJlaWZpZWRBcnJzW2luZGV4XSA9IHJlaWZpZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlaWZpZWQ7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= |
@@ -150,3 +150,3 @@ "use strict"; | ||
_proto3.modifier = function modifier(definitionState, resolvedName) { | ||
_proto3.modifier = function modifier(definitionState, resolvedName, isOptional) { | ||
if (resolvedName === void 0) { | ||
@@ -159,3 +159,9 @@ resolvedName = null; | ||
if (handle === undefined) { | ||
var manager = (0, _manager.getInternalModifierManager)(definitionState); | ||
var manager = (0, _manager.getInternalModifierManager)(definitionState, isOptional); | ||
if (manager === null) { | ||
this.modifierDefinitionCache.set(definitionState, null); | ||
return null; | ||
} | ||
var definition = { | ||
@@ -292,2 +298,2 @@ resolvedName: resolvedName, | ||
exports.ConstantsImpl = ConstantsImpl; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBYUE7O0FBQ0E7O0FBUUE7O0FBQ0E7Ozs7Ozs7O0FBRUEsSUFBTSxzQkFBc0IsR0FBWSxNQUFNLENBQU4sTUFBQSxDQUF4QyxFQUF3QyxDQUF4QztBQUNBLElBQU0saUJBQWlCLEdBQUcscUJBQTFCLHNCQUEwQixDQUExQjtBQUNBLElBQU0sK0JBQStCLEdBQVcsaUJBQWlCLENBQWpCLE9BQUEsQ0FBaEQsc0JBQWdELENBQWhEOztBQUVBLElBQU0sdUJBQU4sR0FBQSxhQUFBLFlBQUE7QUFBQSxXQUFBLHVCQUFBLEdBQUE7QUFDRTtBQUVVLFNBQUEsTUFBQSxHQUFvQixpQkFBaUIsQ0FBckMsS0FBb0IsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBQSxHQUFBLENBQ3pDLEtBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBZ0IsVUFBQSxLQUFBLEVBQUEsS0FBQSxFQUFBO0FBQUEsYUFBa0IsQ0FBQSxLQUFBLEVBRDFCLEtBQzBCLENBQWxCO0FBRFIsS0FDUixDQUR5QyxDQUFqQztBQWlDWDs7QUFyQ0QsTUFBQSxNQUFBLEdBQUEsdUJBQUEsQ0FBQSxTQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLEtBQUEsR0FRRSxTQUFBLEtBQUEsQ0FBQSxNQUFBLEVBQW9CO0FBQ2xCLFFBQUksUUFBUSxHQUFHLEtBQWYsUUFBQTtBQUNBLFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBUixHQUFBLENBQVosTUFBWSxDQUFaOztBQUVBLFFBQUksS0FBSyxLQUFULFNBQUEsRUFBeUI7QUFDdkIsTUFBQSxLQUFLLEdBQUcsS0FBQSxNQUFBLENBQUEsSUFBQSxDQUFBLE1BQUEsSUFBUixDQUFBO0FBQ0EsTUFBQSxRQUFRLENBQVIsR0FBQSxDQUFBLE1BQUEsRUFBQSxLQUFBO0FBQ0Q7O0FBRUQsV0FBQSxLQUFBO0FBakJKLEdB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V0FBQSxVQUFBO0FBck1KLEdBQUE7O0FBQUEsRUFBQSxPQUFBLENBQUEsUUFBQSxHQXdNRSxTQUFBLFFBQUEsQ0FBQSxLQUFBLEVBQXlCO0FBQUEsYUFDdkIsa0JBQU8sS0FBSyxJQUFOLENBQU4sRUFBTSxrQ0FEaUIsS0FDdkIsQ0FEdUI7QUFHdkIsV0FBTyxLQUFBLE1BQUEsQ0FBUCxLQUFPLENBQVA7QUEzTUosR0FBQTs7QUFBQSxFQUFBLE9BQUEsQ0FBQSxRQUFBLEdBOE1FLFNBQUEsUUFBQSxDQUFBLEtBQUEsRUFBeUI7QUFDdkIsUUFBSSxXQUFXLEdBQUcsS0FBbEIsV0FBQTtBQUNBLFFBQUksT0FBTyxHQUFHLFdBQVcsQ0FBekIsS0FBeUIsQ0FBekI7O0FBRUEsUUFBSSxPQUFPLEtBQVgsU0FBQSxFQUEyQjtBQUN6QixVQUFJLEtBQUssR0FBYSxLQUFBLFFBQUEsQ0FBdEIsS0FBc0IsQ0FBdEI7QUFDQSxNQUFBLE9BQU8sR0FBRyxJQUFBLEtBQUEsQ0FBVSxLQUFLLENBQXpCLE1BQVUsQ0FBVjs7QUFFQSxXQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLEtBQUssQ0FBekIsTUFBQSxFQUFrQyxDQUFsQyxFQUFBLEVBQXVDO0FBQ3JDLFFBQUEsT0FBTyxDQUFQLENBQU8sQ0FBUCxHQUFhLEtBQUEsUUFBQSxDQUFjLEtBQUssQ0FBaEMsQ0FBZ0MsQ0FBbkIsQ0FBYjtBQUNEOztBQUVELE1BQUEsV0FBVyxDQUFYLEtBQVcsQ0FBWCxHQUFBLE9BQUE7QUFDRDs7QUFFRCxXQUFBLE9BQUE7QUE3TkosR0FBQTs7QUFBQSxTQUFBLGFBQUE7QUFBQSxDQUFBLENBQUEsdUJBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBpbGVUaW1lQ29uc3RhbnRzLFxuICBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gIENvbnN0YW50UG9vbCxcbiAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyxcbiAgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICBSdW50aW1lQ29uc3RhbnRzLFxuICBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuICBUZW1wbGF0ZSxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGNvbnN0YW50cywgZXhwZWN0LCB1bndyYXBUZW1wbGF0ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgY2FwYWJpbGl0eUZsYWdzRnJvbSxcbiAgZ2V0Q29tcG9uZW50VGVtcGxhdGUsXG4gIGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyLFxuICBnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlcixcbiAgbWFuYWdlckhhc0NhcGFiaWxpdHksXG59IGZyb20gJ0BnbGltbWVyL21hbmFnZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IERFRkFVTFRfVEVNUExBVEUgfSBmcm9tICcuL3V0aWwvZGVmYXVsdC10ZW1wbGF0ZSc7XG5cbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVk6IHVua25vd24gPSBPYmplY3QuZnJlZXplKFtdKTtcbmNvbnN0IFNUQVJURVJfQ09OU1RBTlRTID0gY29uc3RhbnRzKFdFTExfS05PV05fRU1QVFlfQVJSQVkpO1xuY29uc3QgV0VMTF9LTk9XTl9FTVBUWV9BUlJBWV9QT1NJVElPTjogbnVtYmVyID0gU1RBUlRFUl9DT05TVEFOVFMuaW5kZXhPZihXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXSA9IFNUQVJURVJfQ09OU1RBTlRTLnNsaWNlKCk7XG4gIHByb3RlY3RlZCBpbmRleE1hcDogTWFwPHVua25vd24sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgIHRoaXMudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiBbdmFsdWUsIGluZGV4XSlcbiAgKTtcblxuICB2YWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGxldCBpbmRleE1hcCA9IHRoaXMuaW5kZXhNYXA7XG4gICAgbGV0IGluZGV4ID0gaW5kZXhNYXAuZ2V0KHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHRoaXMudmFsdWVzLnB1c2godmFsdWUpIC0gMTtcbiAgICAgIGluZGV4TWFwLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogdW5rbm93bltdKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT047XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZXM6IG51bWJlcltdID0gbmV3IEFycmF5KHZhbHVlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRsZXNbaV0gPSB0aGlzLnZhbHVlKHZhbHVlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWUoaGFuZGxlcyk7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHNJbXBsIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cyB7XG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXTtcblxuICBjb25zdHJ1Y3Rvcihwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHBvb2w7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihoYW5kbGU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1toYW5kbGVdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPih2YWx1ZTogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgaGFuZGxlcyA9IHRoaXMuZ2V0VmFsdWUodmFsdWUpIGFzIG51bWJlcltdO1xuICAgIGxldCByZWlmaWVkOiBUW10gPSBuZXcgQXJyYXkoaGFuZGxlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IGhhbmRsZXNbaV07XG4gICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzSW1wbFxuICBleHRlbmRzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsXG4gIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cywgUmVzb2x1dGlvblRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgcmVpZmllZEFycnM6IHsgW2tleTogbnVtYmVyXTogdW5rbm93bltdIH0gPSB7XG4gICAgW1dFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT05dOiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZIGFzIHVua25vd25bXSxcbiAgfTtcblxuICBkZWZhdWx0VGVtcGxhdGU6IFRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5KERFRkFVTFRfVEVNUExBVEUpKCk7XG5cbiAgLy8gVXNlZCBmb3IgdGVzdHMgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcywgYW5kIHRvIGJlIGFibGUgdG8gYW5hbHl6ZSBsYXJnZSBhcHBzXG4gIC8vIFRoaXMgaXMgd2h5IGl0J3MgZW5hYmxlZCBldmVuIGluIHByb2R1Y3Rpb25cbiAgaGVscGVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgbW9kaWZpZXJEZWZpbml0aW9uQ291bnQgPSAwO1xuICBjb21wb25lbnREZWZpbml0aW9uQ291bnQgPSAwO1xuXG4gIHByaXZhdGUgaGVscGVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8SGVscGVyRGVmaW5pdGlvblN0YXRlLCBudW1iZXIgfCBudWxsPigpO1xuXG4gIHByaXZhdGUgbW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyPigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8XG4gICAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlIHwgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICAgIENvbXBvbmVudERlZmluaXRpb24gfCBudWxsXG4gID4oKTtcblxuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgaXNPcHRpb25hbDogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsO1xuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gICk6IG51bWJlcjtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyT3JIZWxwZXIgPSBnZXRJbnRlcm5hbEhlbHBlck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlLCBpc09wdGlvbmFsKTtcblxuICAgICAgaWYgKG1hbmFnZXJPckhlbHBlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChtYW5hZ2VyT3JIZWxwZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXIgb3IgaGVscGVyJyk7XG5cbiAgICAgIGxldCBoZWxwZXIgPVxuICAgICAgICB0eXBlb2YgbWFuYWdlck9ySGVscGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBtYW5hZ2VyT3JIZWxwZXJcbiAgICAgICAgICA6IG1hbmFnZXJPckhlbHBlci5nZXRIZWxwZXIoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgaGFuZGxlID0gdGhpcy52YWx1ZShoZWxwZXIpO1xuXG4gICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBoYW5kbGUpO1xuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgbW9kaWZpZXIoZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IG51bWJlciB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgbGV0IGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG5cbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgY29tcG9uZW50KGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlKTogQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgY29tcG9uZW50KFxuICAgIGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGw7XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZSxcbiAgICBvd25lcj86IG9iamVjdFxuICApOiBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG1hbmFnZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXInKTtcblxuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMoZGVmaW5pdGlvblN0YXRlKSk7XG5cbiAgICAgIGxldCB0ZW1wbGF0ZUZhY3RvcnkgPSBnZXRDb21wb25lbnRUZW1wbGF0ZShkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgICBsZXQgY29tcGlsYWJsZSA9IG51bGw7XG4gICAgICBsZXQgdGVtcGxhdGU7XG5cbiAgICAgIGlmICghbWFuYWdlckhhc0NhcGFiaWxpdHkobWFuYWdlciwgY2FwYWJpbGl0aWVzLCBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuRHluYW1pY0xheW91dCkpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcikgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeT8uKG93bmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWU6IG51bGwsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICByZXNvbHZlZENvbXBvbmVudChcbiAgICByZXNvbHZlZERlZmluaXRpb246IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZ1xuICApOiBDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLmdldChyZXNvbHZlZERlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHsgbWFuYWdlciwgc3RhdGUsIHRlbXBsYXRlIH0gPSByZXNvbHZlZERlZmluaXRpb247XG4gICAgICBsZXQgY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0eUZsYWdzRnJvbShtYW5hZ2VyLmdldENhcGFiaWxpdGllcyhyZXNvbHZlZERlZmluaXRpb24pKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHVud3JhcFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgICAgICBjb21waWxhYmxlID0gbWFuYWdlckhhc0NhcGFiaWxpdHkoXG4gICAgICAgICAgbWFuYWdlcixcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LldyYXBwZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdGVtcGxhdGUuYXNXcmFwcGVkTGF5b3V0KClcbiAgICAgICAgICA6IHRlbXBsYXRlLmFzTGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgaGFuZGxlOiAtMSwgLy8gcmVwbGFjZWQgbW9tZW50YXJpbHlcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQocmVzb2x2ZWREZWZpbml0aW9uLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGVjdChkZWZpbml0aW9uLCAnQlVHOiByZXNvbHZlZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgY2Fubm90IGJlIG51bGwnKTtcbiAgfVxuXG4gIGdldFZhbHVlPFQ+KGluZGV4OiBudW1iZXIpIHtcbiAgICBhc3NlcnQoaW5kZXggPj0gMCwgYGNhbm5vdCBnZXQgdmFsdWUgZm9yIGhhbmRsZTogJHtpbmRleH1gKTtcblxuICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF0gYXMgVDtcbiAgfVxuXG4gIGdldEFycmF5PFQ+KGluZGV4OiBudW1iZXIpOiBUW10ge1xuICAgIGxldCByZWlmaWVkQXJycyA9IHRoaXMucmVpZmllZEFycnM7XG4gICAgbGV0IHJlaWZpZWQgPSByZWlmaWVkQXJyc1tpbmRleF0gYXMgVFtdO1xuXG4gICAgaWYgKHJlaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG5hbWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0VmFsdWUoaW5kZXgpO1xuICAgICAgcmVpZmllZCA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlaWZpZWRbaV0gPSB0aGlzLmdldFZhbHVlKG5hbWVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmVpZmllZEFycnNbaW5kZXhdID0gcmVpZmllZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBYUE7O0FBQ0E7O0FBUUE7O0FBQ0E7Ozs7Ozs7O0FBRUEsSUFBTSxzQkFBc0IsR0FBWSxNQUFNLENBQU4sTUFBQSxDQUF4QyxFQUF3QyxDQUF4QztBQUNBLElBQU0saUJBQWlCLEdBQUcscUJBQTFCLHNCQUEwQixDQUExQjtBQUNBLElBQU0sK0JBQStCLEdBQVcsaUJBQWlCLENBQWpCLE9BQUEsQ0FBaEQsc0JBQWdELENBQWhEOztBQUVBLElBQU0sdUJBQU4sR0FBQSxhQUFBLFlBQUE7QUFBQSxXQUFBLHVCQUFBLEdBQUE7QUFDRTtBQUVVLFNBQUEsTUFBQSxHQUFvQixpQkFBaUIsQ0FBckMsS0FBb0IsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBQSxHQUFBLENBQ3pDLEtBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBZ0IsVUFBQSxLQUFBLEVBQUEsS0FBQSxFQUFBO0FBQUEsYUFBa0IsQ0FBQSxLQUFBLEVBRDFCLEtBQzBCLENBQWxCO0FBRFIsS0FDUixDQUR5QyxDQUFqQztBQWlDWDs7QUFyQ0QsTUFBQSxNQUFBLEdBQUEsdUJBQUEsQ0FBQSxTQUFBOztBQUFBLEVBQUEsTUFBQSxDQUFBLEtBQUEsR0FRRSxTQUFBLEtBQUEsQ0FBQSxNQUFBLEVBQW9CO0FBQ2xCLFFBQUksUUFBUSxHQUFHLEtBQWYsUUFBQTtBQUNBLFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBUixHQUFBLENBQVosTUFBWSxDQUFaOztBQUVBLFFBQUksS0FBSyxLQUFULFNBQUEsRUFBeUI7QUFDdkIsTUFBQSxLQUFLLEdBQUcsS0FBQSxNQUFBLENBQUEsSUFBQSxDQUFBLE1BQUEsSUFBUixDQUFBO0FBQ0EsTUFBQSxRQUFRLENBQVIsR0FBQSxDQUFBLE1BQUEsRUFBQSxLQUFBO0FBQ0Q7O0FBRUQsV0FBQSxLQUFBO0FBakJKLEdB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Q29uc3RhbnRzLFxuICBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gIENvbnN0YW50UG9vbCxcbiAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyxcbiAgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICBSdW50aW1lQ29uc3RhbnRzLFxuICBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuICBUZW1wbGF0ZSxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGNvbnN0YW50cywgZXhwZWN0LCB1bndyYXBUZW1wbGF0ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgY2FwYWJpbGl0eUZsYWdzRnJvbSxcbiAgZ2V0Q29tcG9uZW50VGVtcGxhdGUsXG4gIGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyLFxuICBnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlcixcbiAgbWFuYWdlckhhc0NhcGFiaWxpdHksXG59IGZyb20gJ0BnbGltbWVyL21hbmFnZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IERFRkFVTFRfVEVNUExBVEUgfSBmcm9tICcuL3V0aWwvZGVmYXVsdC10ZW1wbGF0ZSc7XG5cbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVk6IHVua25vd24gPSBPYmplY3QuZnJlZXplKFtdKTtcbmNvbnN0IFNUQVJURVJfQ09OU1RBTlRTID0gY29uc3RhbnRzKFdFTExfS05PV05fRU1QVFlfQVJSQVkpO1xuY29uc3QgV0VMTF9LTk9XTl9FTVBUWV9BUlJBWV9QT1NJVElPTjogbnVtYmVyID0gU1RBUlRFUl9DT05TVEFOVFMuaW5kZXhPZihXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXSA9IFNUQVJURVJfQ09OU1RBTlRTLnNsaWNlKCk7XG4gIHByb3RlY3RlZCBpbmRleE1hcDogTWFwPHVua25vd24sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgIHRoaXMudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiBbdmFsdWUsIGluZGV4XSlcbiAgKTtcblxuICB2YWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGxldCBpbmRleE1hcCA9IHRoaXMuaW5kZXhNYXA7XG4gICAgbGV0IGluZGV4ID0gaW5kZXhNYXAuZ2V0KHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHRoaXMudmFsdWVzLnB1c2godmFsdWUpIC0gMTtcbiAgICAgIGluZGV4TWFwLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogdW5rbm93bltdKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT047XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZXM6IG51bWJlcltdID0gbmV3IEFycmF5KHZhbHVlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRsZXNbaV0gPSB0aGlzLnZhbHVlKHZhbHVlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWUoaGFuZGxlcyk7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHNJbXBsIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cyB7XG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXTtcblxuICBjb25zdHJ1Y3Rvcihwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHBvb2w7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihoYW5kbGU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1toYW5kbGVdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPih2YWx1ZTogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgaGFuZGxlcyA9IHRoaXMuZ2V0VmFsdWUodmFsdWUpIGFzIG51bWJlcltdO1xuICAgIGxldCByZWlmaWVkOiBUW10gPSBuZXcgQXJyYXkoaGFuZGxlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IGhhbmRsZXNbaV07XG4gICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzSW1wbFxuICBleHRlbmRzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsXG4gIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cywgUmVzb2x1dGlvblRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgcmVpZmllZEFycnM6IHsgW2tleTogbnVtYmVyXTogdW5rbm93bltdIH0gPSB7XG4gICAgW1dFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT05dOiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZIGFzIHVua25vd25bXSxcbiAgfTtcblxuICBkZWZhdWx0VGVtcGxhdGU6IFRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5KERFRkFVTFRfVEVNUExBVEUpKCk7XG5cbiAgLy8gVXNlZCBmb3IgdGVzdHMgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcywgYW5kIHRvIGJlIGFibGUgdG8gYW5hbHl6ZSBsYXJnZSBhcHBzXG4gIC8vIFRoaXMgaXMgd2h5IGl0J3MgZW5hYmxlZCBldmVuIGluIHByb2R1Y3Rpb25cbiAgaGVscGVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgbW9kaWZpZXJEZWZpbml0aW9uQ291bnQgPSAwO1xuICBjb21wb25lbnREZWZpbml0aW9uQ291bnQgPSAwO1xuXG4gIHByaXZhdGUgaGVscGVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8SGVscGVyRGVmaW5pdGlvblN0YXRlLCBudW1iZXIgfCBudWxsPigpO1xuXG4gIHByaXZhdGUgbW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyIHwgbnVsbD4oKTtcblxuICBwcml2YXRlIGNvbXBvbmVudERlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPFxuICAgIENvbXBvbmVudERlZmluaXRpb25TdGF0ZSB8IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbFxuICA+KCk7XG5cbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbDtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lPzogc3RyaW5nIHwgbnVsbFxuICApOiBudW1iZXI7XG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgaXNPcHRpb25hbD86IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlck9ySGVscGVyID0gZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyT3JIZWxwZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQobWFuYWdlck9ySGVscGVyLCAnQlVHOiBleHBlY3RlZCBtYW5hZ2VyIG9yIGhlbHBlcicpO1xuXG4gICAgICBsZXQgaGVscGVyID1cbiAgICAgICAgdHlwZW9mIG1hbmFnZXJPckhlbHBlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbWFuYWdlck9ySGVscGVyXG4gICAgICAgICAgOiBtYW5hZ2VyT3JIZWxwZXIuZ2V0SGVscGVyKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoaGVscGVyKTtcblxuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfVxuXG4gIG1vZGlmaWVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gICAgcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbDtcbiAgbW9kaWZpZXIoZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgcmVzb2x2ZWROYW1lPzogc3RyaW5nIHwgbnVsbCk6IG51bWJlcjtcbiAgbW9kaWZpZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGlzT3B0aW9uYWw/OiB0cnVlXG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IGdldEludGVybmFsTW9kaWZpZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgcmVzb2x2ZWROYW1lLFxuICAgICAgICBtYW5hZ2VyLFxuICAgICAgICBzdGF0ZTogZGVmaW5pdGlvblN0YXRlLFxuICAgICAgfTtcblxuICAgICAgaGFuZGxlID0gdGhpcy52YWx1ZShkZWZpbml0aW9uKTtcblxuICAgICAgdGhpcy5tb2RpZmllckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBoYW5kbGUpO1xuICAgICAgdGhpcy5tb2RpZmllckRlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGU7XG4gIH1cblxuICBjb21wb25lbnQoZGVmaW5pdGlvblN0YXRlOiBDb21wb25lbnREZWZpbml0aW9uU3RhdGUpOiBDb21wb25lbnREZWZpbml0aW9uO1xuICBjb21wb25lbnQoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gICAgaXNPcHRpb25hbDogdHJ1ZVxuICApOiBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbDtcbiAgY29tcG9uZW50KFxuICAgIGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICAgIGlzT3B0aW9uYWw/OiB0cnVlLFxuICAgIG93bmVyPzogb2JqZWN0XG4gICk6IENvbXBvbmVudERlZmluaXRpb24gfCBudWxsIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG1hbmFnZXIgPSBnZXRJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIoZGVmaW5pdGlvblN0YXRlLCBpc09wdGlvbmFsKTtcblxuICAgICAgaWYgKG1hbmFnZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQobWFuYWdlciwgJ0JVRzogZXhwZWN0ZWQgbWFuYWdlcicpO1xuXG4gICAgICBsZXQgY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0eUZsYWdzRnJvbShtYW5hZ2VyLmdldENhcGFiaWxpdGllcyhkZWZpbml0aW9uU3RhdGUpKTtcblxuICAgICAgbGV0IHRlbXBsYXRlRmFjdG9yeSA9IGdldENvbXBvbmVudFRlbXBsYXRlKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGxldCBjb21waWxhYmxlID0gbnVsbDtcbiAgICAgIGxldCB0ZW1wbGF0ZTtcblxuICAgICAgaWYgKCFtYW5hZ2VySGFzQ2FwYWJpbGl0eShtYW5hZ2VyLCBjYXBhYmlsaXRpZXMsIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5EeW5hbWljTGF5b3V0KSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeT8uKG93bmVyKSA/PyB0aGlzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5Py4ob3duZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVtcGxhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHVud3JhcFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgICAgICBjb21waWxhYmxlID0gbWFuYWdlckhhc0NhcGFiaWxpdHkoXG4gICAgICAgICAgbWFuYWdlcixcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LldyYXBwZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdGVtcGxhdGUuYXNXcmFwcGVkTGF5b3V0KClcbiAgICAgICAgICA6IHRlbXBsYXRlLmFzTGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZTogbnVsbCxcbiAgICAgICAgaGFuZGxlOiAtMSwgLy8gcmVwbGFjZWQgbW9tZW50YXJpbHlcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICBzdGF0ZTogZGVmaW5pdGlvblN0YXRlLFxuICAgICAgICBjb21waWxhYmxlLFxuICAgICAgfTtcblxuICAgICAgZGVmaW5pdGlvbiEuaGFuZGxlID0gdGhpcy52YWx1ZShkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJlc29sdmVkQ29tcG9uZW50KFxuICAgIHJlc29sdmVkRGVmaW5pdGlvbjogUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICAgIHJlc29sdmVkTmFtZTogc3RyaW5nXG4gICk6IENvbXBvbmVudERlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuZ2V0KHJlc29sdmVkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgeyBtYW5hZ2VyLCBzdGF0ZSwgdGVtcGxhdGUgfSA9IHJlc29sdmVkRGVmaW5pdGlvbjtcbiAgICAgIGxldCBjYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXR5RmxhZ3NGcm9tKG1hbmFnZXIuZ2V0Q2FwYWJpbGl0aWVzKHJlc29sdmVkRGVmaW5pdGlvbikpO1xuXG4gICAgICBsZXQgY29tcGlsYWJsZSA9IG51bGw7XG5cbiAgICAgIGlmICghbWFuYWdlckhhc0NhcGFiaWxpdHkobWFuYWdlciwgY2FwYWJpbGl0aWVzLCBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuRHluYW1pY0xheW91dCkpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSA/PyB0aGlzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlICE9PSBudWxsKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdW53cmFwVGVtcGxhdGUodGVtcGxhdGUpO1xuXG4gICAgICAgIGNvbXBpbGFibGUgPSBtYW5hZ2VySGFzQ2FwYWJpbGl0eShcbiAgICAgICAgICBtYW5hZ2VyLFxuICAgICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgICBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuV3JhcHBlZFxuICAgICAgICApXG4gICAgICAgICAgPyB0ZW1wbGF0ZS5hc1dyYXBwZWRMYXlvdXQoKVxuICAgICAgICAgIDogdGVtcGxhdGUuYXNMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgcmVzb2x2ZWROYW1lLFxuICAgICAgICBoYW5kbGU6IC0xLCAvLyByZXBsYWNlZCBtb21lbnRhcmlseVxuICAgICAgICBtYW5hZ2VyLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb21waWxhYmxlLFxuICAgICAgfTtcblxuICAgICAgZGVmaW5pdGlvbiEuaGFuZGxlID0gdGhpcy52YWx1ZShkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChyZXNvbHZlZERlZmluaXRpb24sIGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwZWN0KGRlZmluaXRpb24sICdCVUc6IHJlc29sdmVkIGNvbXBvbmVudCBkZWZpbml0aW9ucyBjYW5ub3QgYmUgbnVsbCcpO1xuICB9XG5cbiAgZ2V0VmFsdWU8VD4oaW5kZXg6IG51bWJlcikge1xuICAgIGFzc2VydChpbmRleCA+PSAwLCBgY2Fubm90IGdldCB2YWx1ZSBmb3IgaGFuZGxlOiAke2luZGV4fWApO1xuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XSBhcyBUO1xuICB9XG5cbiAgZ2V0QXJyYXk8VD4oaW5kZXg6IG51bWJlcik6IFRbXSB7XG4gICAgbGV0IHJlaWZpZWRBcnJzID0gdGhpcy5yZWlmaWVkQXJycztcbiAgICBsZXQgcmVpZmllZCA9IHJlaWZpZWRBcnJzW2luZGV4XSBhcyBUW107XG5cbiAgICBpZiAocmVpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbmFtZXM6IG51bWJlcltdID0gdGhpcy5nZXRWYWx1ZShpbmRleCk7XG4gICAgICByZWlmaWVkID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVpZmllZFtpXSA9IHRoaXMuZ2V0VmFsdWUobmFtZXNbaV0pO1xuICAgICAgfVxuXG4gICAgICByZWlmaWVkQXJyc1tpbmRleF0gPSByZWlmaWVkO1xuICAgIH1cblxuICAgIHJldHVybiByZWlmaWVkO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 |
@@ -107,7 +107,13 @@ import { assert, constants, unwrapTemplate } from '@glimmer/util'; | ||
modifier(definitionState, resolvedName = null) { | ||
modifier(definitionState, resolvedName = null, isOptional) { | ||
let handle = this.modifierDefinitionCache.get(definitionState); | ||
if (handle === undefined) { | ||
let manager = getInternalModifierManager(definitionState); | ||
let manager = getInternalModifierManager(definitionState, isOptional); | ||
if (manager === null) { | ||
this.modifierDefinitionCache.set(definitionState, null); | ||
return null; | ||
} | ||
let definition = { | ||
@@ -241,2 +247,2 @@ resolvedName, | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxTQUFTLE1BQVQsRUFBaUIsU0FBakIsRUFBb0MsY0FBcEMsUUFBMEQsZUFBMUQ7QUFDQSxTQUNFLG1CQURGLEVBRUUsb0JBRkYsRUFHRSwyQkFIRixFQUlFLHdCQUpGLEVBS0UsMEJBTEYsRUFNRSxvQkFORixRQU9PLGtCQVBQO0FBUUEsU0FBUyxlQUFULFFBQWdDLDBCQUFoQztBQUNBLFNBQVMsZ0JBQVQsUUFBaUMseUJBQWpDO0FBRUEsTUFBTSxzQkFBc0IsR0FBWSxNQUFNLENBQUMsTUFBUCxDQUFjLEVBQWQsQ0FBeEM7QUFDQSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxzQkFBRCxDQUFuQztBQUNBLE1BQU0sK0JBQStCLEdBQVcsaUJBQWlCLENBQUMsT0FBbEIsQ0FBMEIsc0JBQTFCLENBQWhEO0FBRUEsT0FBTSxNQUFPLHVCQUFQLENBQThCO0FBQXBDLEVBQUEsV0FBQSxHQUFBO0FBQ0U7QUFFVSxTQUFBLE1BQUEsR0FBb0IsaUJBQWlCLENBQUMsS0FBbEIsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBSSxHQUFKLENBQ3pDLEtBQUssTUFBTCxDQUFZLEdBQVosQ0FBZ0IsQ0FBQyxLQUFELEVBQVEsS0FBUixLQUFrQixDQUFDLEtBQUQsRUFBUSxLQUFSLENBQWxDLENBRHlDLENBQWpDO0FBaUNYOztBQTdCQyxFQUFBLEtBQUssQ0FBQyxLQUFELEVBQWU7QUFDbEIsUUFBSSxRQUFRLEdBQUcsS0FBSyxRQUFwQjtBQUNBLFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFULENBQWEsS0FBYixDQUFaOztBQUVBLFFBQUksS0FBSyxLQUFLLFNBQWQsRUFBeUI7QUFDdkIsTUFBQSxLQUFLLEdBQUcsS0FBSyxNQUFMLENBQVksSUFBWixDQUFpQixLQUFqQixJQUEwQixDQUFsQztBQUNBLE1B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ZW50IjpbImltcG9ydCB7XG4gIENvbXBpbGVUaW1lQ29uc3RhbnRzLFxuICBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gIENvbnN0YW50UG9vbCxcbiAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyxcbiAgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICBSdW50aW1lQ29uc3RhbnRzLFxuICBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuICBUZW1wbGF0ZSxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGNvbnN0YW50cywgZXhwZWN0LCB1bndyYXBUZW1wbGF0ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgY2FwYWJpbGl0eUZsYWdzRnJvbSxcbiAgZ2V0Q29tcG9uZW50VGVtcGxhdGUsXG4gIGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyLFxuICBnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlcixcbiAgbWFuYWdlckhhc0NhcGFiaWxpdHksXG59IGZyb20gJ0BnbGltbWVyL21hbmFnZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IERFRkFVTFRfVEVNUExBVEUgfSBmcm9tICcuL3V0aWwvZGVmYXVsdC10ZW1wbGF0ZSc7XG5cbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVk6IHVua25vd24gPSBPYmplY3QuZnJlZXplKFtdKTtcbmNvbnN0IFNUQVJURVJfQ09OU1RBTlRTID0gY29uc3RhbnRzKFdFTExfS05PV05fRU1QVFlfQVJSQVkpO1xuY29uc3QgV0VMTF9LTk9XTl9FTVBUWV9BUlJBWV9QT1NJVElPTjogbnVtYmVyID0gU1RBUlRFUl9DT05TVEFOVFMuaW5kZXhPZihXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXSA9IFNUQVJURVJfQ09OU1RBTlRTLnNsaWNlKCk7XG4gIHByb3RlY3RlZCBpbmRleE1hcDogTWFwPHVua25vd24sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgIHRoaXMudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiBbdmFsdWUsIGluZGV4XSlcbiAgKTtcblxuICB2YWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGxldCBpbmRleE1hcCA9IHRoaXMuaW5kZXhNYXA7XG4gICAgbGV0IGluZGV4ID0gaW5kZXhNYXAuZ2V0KHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHRoaXMudmFsdWVzLnB1c2godmFsdWUpIC0gMTtcbiAgICAgIGluZGV4TWFwLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogdW5rbm93bltdKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT047XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZXM6IG51bWJlcltdID0gbmV3IEFycmF5KHZhbHVlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRsZXNbaV0gPSB0aGlzLnZhbHVlKHZhbHVlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWUoaGFuZGxlcyk7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHNJbXBsIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cyB7XG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXTtcblxuICBjb25zdHJ1Y3Rvcihwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHBvb2w7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihoYW5kbGU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1toYW5kbGVdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPih2YWx1ZTogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgaGFuZGxlcyA9IHRoaXMuZ2V0VmFsdWUodmFsdWUpIGFzIG51bWJlcltdO1xuICAgIGxldCByZWlmaWVkOiBUW10gPSBuZXcgQXJyYXkoaGFuZGxlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IGhhbmRsZXNbaV07XG4gICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzSW1wbFxuICBleHRlbmRzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsXG4gIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cywgUmVzb2x1dGlvblRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgcmVpZmllZEFycnM6IHsgW2tleTogbnVtYmVyXTogdW5rbm93bltdIH0gPSB7XG4gICAgW1dFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT05dOiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZIGFzIHVua25vd25bXSxcbiAgfTtcblxuICBkZWZhdWx0VGVtcGxhdGU6IFRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5KERFRkFVTFRfVEVNUExBVEUpKCk7XG5cbiAgLy8gVXNlZCBmb3IgdGVzdHMgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcywgYW5kIHRvIGJlIGFibGUgdG8gYW5hbHl6ZSBsYXJnZSBhcHBzXG4gIC8vIFRoaXMgaXMgd2h5IGl0J3MgZW5hYmxlZCBldmVuIGluIHByb2R1Y3Rpb25cbiAgaGVscGVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgbW9kaWZpZXJEZWZpbml0aW9uQ291bnQgPSAwO1xuICBjb21wb25lbnREZWZpbml0aW9uQ291bnQgPSAwO1xuXG4gIHByaXZhdGUgaGVscGVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8SGVscGVyRGVmaW5pdGlvblN0YXRlLCBudW1iZXIgfCBudWxsPigpO1xuXG4gIHByaXZhdGUgbW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyPigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8XG4gICAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlIHwgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICAgIENvbXBvbmVudERlZmluaXRpb24gfCBudWxsXG4gID4oKTtcblxuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgaXNPcHRpb25hbDogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsO1xuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gICk6IG51bWJlcjtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyT3JIZWxwZXIgPSBnZXRJbnRlcm5hbEhlbHBlck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlLCBpc09wdGlvbmFsKTtcblxuICAgICAgaWYgKG1hbmFnZXJPckhlbHBlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChtYW5hZ2VyT3JIZWxwZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXIgb3IgaGVscGVyJyk7XG5cbiAgICAgIGxldCBoZWxwZXIgPVxuICAgICAgICB0eXBlb2YgbWFuYWdlck9ySGVscGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBtYW5hZ2VyT3JIZWxwZXJcbiAgICAgICAgICA6IG1hbmFnZXJPckhlbHBlci5nZXRIZWxwZXIoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgaGFuZGxlID0gdGhpcy52YWx1ZShoZWxwZXIpO1xuXG4gICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBoYW5kbGUpO1xuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgbW9kaWZpZXIoZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IG51bWJlciB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoaGFuZGxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgbGV0IGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG5cbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgY29tcG9uZW50KGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlKTogQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgY29tcG9uZW50KFxuICAgIGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGw7XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZSxcbiAgICBvd25lcj86IG9iamVjdFxuICApOiBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG1hbmFnZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXInKTtcblxuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMoZGVmaW5pdGlvblN0YXRlKSk7XG5cbiAgICAgIGxldCB0ZW1wbGF0ZUZhY3RvcnkgPSBnZXRDb21wb25lbnRUZW1wbGF0ZShkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgICBsZXQgY29tcGlsYWJsZSA9IG51bGw7XG4gICAgICBsZXQgdGVtcGxhdGU7XG5cbiAgICAgIGlmICghbWFuYWdlckhhc0NhcGFiaWxpdHkobWFuYWdlciwgY2FwYWJpbGl0aWVzLCBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuRHluYW1pY0xheW91dCkpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcikgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeT8uKG93bmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWU6IG51bGwsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICByZXNvbHZlZENvbXBvbmVudChcbiAgICByZXNvbHZlZERlZmluaXRpb246IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZ1xuICApOiBDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLmdldChyZXNvbHZlZERlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHsgbWFuYWdlciwgc3RhdGUsIHRlbXBsYXRlIH0gPSByZXNvbHZlZERlZmluaXRpb247XG4gICAgICBsZXQgY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0eUZsYWdzRnJvbShtYW5hZ2VyLmdldENhcGFiaWxpdGllcyhyZXNvbHZlZERlZmluaXRpb24pKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHVud3JhcFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgICAgICBjb21waWxhYmxlID0gbWFuYWdlckhhc0NhcGFiaWxpdHkoXG4gICAgICAgICAgbWFuYWdlcixcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LldyYXBwZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdGVtcGxhdGUuYXNXcmFwcGVkTGF5b3V0KClcbiAgICAgICAgICA6IHRlbXBsYXRlLmFzTGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgaGFuZGxlOiAtMSwgLy8gcmVwbGFjZWQgbW9tZW50YXJpbHlcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQocmVzb2x2ZWREZWZpbml0aW9uLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGVjdChkZWZpbml0aW9uLCAnQlVHOiByZXNvbHZlZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgY2Fubm90IGJlIG51bGwnKTtcbiAgfVxuXG4gIGdldFZhbHVlPFQ+KGluZGV4OiBudW1iZXIpIHtcbiAgICBhc3NlcnQoaW5kZXggPj0gMCwgYGNhbm5vdCBnZXQgdmFsdWUgZm9yIGhhbmRsZTogJHtpbmRleH1gKTtcblxuICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF0gYXMgVDtcbiAgfVxuXG4gIGdldEFycmF5PFQ+KGluZGV4OiBudW1iZXIpOiBUW10ge1xuICAgIGxldCByZWlmaWVkQXJycyA9IHRoaXMucmVpZmllZEFycnM7XG4gICAgbGV0IHJlaWZpZWQgPSByZWlmaWVkQXJyc1tpbmRleF0gYXMgVFtdO1xuXG4gICAgaWYgKHJlaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG5hbWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0VmFsdWUoaW5kZXgpO1xuICAgICAgcmVpZmllZCA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlaWZpZWRbaV0gPSB0aGlzLmdldFZhbHVlKG5hbWVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmVpZmllZEFycnNbaW5kZXhdID0gcmVpZmllZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxTQUFTLE1BQVQsRUFBaUIsU0FBakIsRUFBb0MsY0FBcEMsUUFBMEQsZUFBMUQ7QUFDQSxTQUNFLG1CQURGLEVBRUUsb0JBRkYsRUFHRSwyQkFIRixFQUlFLHdCQUpGLEVBS0UsMEJBTEYsRUFNRSxvQkFORixRQU9PLGtCQVBQO0FBUUEsU0FBUyxlQUFULFFBQWdDLDBCQUFoQztBQUNBLFNBQVMsZ0JBQVQsUUFBaUMseUJBQWpDO0FBRUEsTUFBTSxzQkFBc0IsR0FBWSxNQUFNLENBQUMsTUFBUCxDQUFjLEVBQWQsQ0FBeEM7QUFDQSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxzQkFBRCxDQUFuQztBQUNBLE1BQU0sK0JBQStCLEdBQVcsaUJBQWlCLENBQUMsT0FBbEIsQ0FBMEIsc0JBQTFCLENBQWhEO0FBRUEsT0FBTSxNQUFPLHVCQUFQLENBQThCO0FBQXBDLEVBQUEsV0FBQSxHQUFBO0FBQ0U7QUFFVSxTQUFBLE1BQUEsR0FBb0IsaUJBQWlCLENBQUMsS0FBbEIsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBSSxHQUFKLENBQ3pDLEtBQUssTUFBTCxDQUFZLEdBQVosQ0FBZ0IsQ0FBQyxLQUFELEVBQVEsS0FBUixLQUFrQixDQUFDLEtBQUQsRUFBUSxLQUFSLENBQWxDLENBRHlDLENBQWpDO0FBaUNYOztBQTdCQyxFQUFBLEtBQUssQ0FBQyxLQUFELEVBQWU7QUFDbEIsUUFBSSxRQUFRLEdBQUcsS0FBSyxRQUFwQjtBQUNBLFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFULENBQWEsS0FBYixDQUFaOztBQUVBLFFBQUksS0FBSyxLQUFLLFNBQWQsRUFBeUI7QUFDdkIsTUFBQSxLQUFLLEdBQUcsS0FBSyxNQUFMLENBQVksSUFBWixDQUFpQixLQUFqQixJQUEwQixDQUFsQztBQUNBLE1B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LENBQWMsS0FBSyxDQUFDLENBQUQsQ0FBbkIsQ0FBYjtBQUNEOztBQUVELE1BQUEsV0FBVyxDQUFDLEtBQUQsQ0FBWCxHQUFxQixPQUFyQjtBQUNEOztBQUVELFdBQU8sT0FBUDtBQUNEOztBQTVPOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21waWxlVGltZUNvbnN0YW50cyxcbiAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICBDb25zdGFudFBvb2wsXG4gIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eSxcbiAgQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUmVzb2x1dGlvblRpbWVDb25zdGFudHMsXG4gIFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUnVudGltZUNvbnN0YW50cyxcbiAgTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gIEhlbHBlckRlZmluaXRpb25TdGF0ZSxcbiAgVGVtcGxhdGUsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXNzZXJ0LCBjb25zdGFudHMsIGV4cGVjdCwgdW53cmFwVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIGNhcGFiaWxpdHlGbGFnc0Zyb20sXG4gIGdldENvbXBvbmVudFRlbXBsYXRlLFxuICBnZXRJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIsXG4gIGdldEludGVybmFsSGVscGVyTWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIsXG4gIG1hbmFnZXJIYXNDYXBhYmlsaXR5LFxufSBmcm9tICdAZ2xpbW1lci9tYW5hZ2VyJztcbmltcG9ydCB7IHRlbXBsYXRlRmFjdG9yeSB9IGZyb20gJ0BnbGltbWVyL29wY29kZS1jb21waWxlcic7XG5pbXBvcnQgeyBERUZBVUxUX1RFTVBMQVRFIH0gZnJvbSAnLi91dGlsL2RlZmF1bHQtdGVtcGxhdGUnO1xuXG5jb25zdCBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZOiB1bmtub3duID0gT2JqZWN0LmZyZWV6ZShbXSk7XG5jb25zdCBTVEFSVEVSX0NPTlNUQU5UUyA9IGNvbnN0YW50cyhXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT046IG51bWJlciA9IFNUQVJURVJfQ09OU1RBTlRTLmluZGV4T2YoV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSk7XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlVGltZUNvbnN0YW50SW1wbCBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW10gPSBTVEFSVEVSX0NPTlNUQU5UUy5zbGljZSgpO1xuICBwcm90ZWN0ZWQgaW5kZXhNYXA6IE1hcDx1bmtub3duLCBudW1iZXI+ID0gbmV3IE1hcChcbiAgICB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW3ZhbHVlLCBpbmRleF0pXG4gICk7XG5cbiAgdmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICBsZXQgaW5kZXhNYXAgPSB0aGlzLmluZGV4TWFwO1xuICAgIGxldCBpbmRleCA9IGluZGV4TWFwLmdldCh2YWx1ZSk7XG5cbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKSAtIDE7XG4gICAgICBpbmRleE1hcC5zZXQodmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IHVua25vd25bXSk6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OO1xuICAgIH1cblxuICAgIGxldCBoYW5kbGVzOiBudW1iZXJbXSA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYW5kbGVzW2ldID0gdGhpcy52YWx1ZSh2YWx1ZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbHVlKGhhbmRsZXMpO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzSW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW107XG5cbiAgY29uc3RydWN0b3IocG9vbDogQ29uc3RhbnRQb29sKSB7XG4gICAgdGhpcy52YWx1ZXMgPSBwb29sO1xuICB9XG5cbiAgZ2V0VmFsdWU8VD4oaGFuZGxlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaGFuZGxlXSBhcyBUO1xuICB9XG5cbiAgZ2V0QXJyYXk8VD4odmFsdWU6IG51bWJlcik6IFRbXSB7XG4gICAgbGV0IGhhbmRsZXMgPSB0aGlzLmdldFZhbHVlKHZhbHVlKSBhcyBudW1iZXJbXTtcbiAgICBsZXQgcmVpZmllZDogVFtdID0gbmV3IEFycmF5KGhhbmRsZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBoYW5kbGVzW2ldO1xuICAgICAgcmVpZmllZFtpXSA9IHRoaXMuZ2V0VmFsdWUobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlaWZpZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50c0ltcGxcbiAgZXh0ZW5kcyBDb21waWxlVGltZUNvbnN0YW50SW1wbFxuICBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMsIFJlc29sdXRpb25UaW1lQ29uc3RhbnRzIHtcbiAgcHJvdGVjdGVkIHJlaWZpZWRBcnJzOiB7IFtrZXk6IG51bWJlcl06IHVua25vd25bXSB9ID0ge1xuICAgIFtXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OXTogV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSBhcyB1bmtub3duW10sXG4gIH07XG5cbiAgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeShERUZBVUxUX1RFTVBMQVRFKSgpO1xuXG4gIC8vIFVzZWQgZm9yIHRlc3RzIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFuZCB0byBiZSBhYmxlIHRvIGFuYWx5emUgbGFyZ2UgYXBwc1xuICAvLyBUaGlzIGlzIHdoeSBpdCdzIGVuYWJsZWQgZXZlbiBpbiBwcm9kdWN0aW9uXG4gIGhlbHBlckRlZmluaXRpb25Db3VudCA9IDA7XG4gIG1vZGlmaWVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgY29tcG9uZW50RGVmaW5pdGlvbkNvdW50ID0gMDtcblxuICBwcml2YXRlIGhlbHBlckRlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPEhlbHBlckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyIHwgbnVsbD4oKTtcblxuICBwcml2YXRlIG1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8TW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIG51bWJlciB8IG51bGw+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnREZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxcbiAgICBDb21wb25lbnREZWZpbml0aW9uU3RhdGUgfCBSZXNvbHZlZENvbXBvbmVudERlZmluaXRpb24sXG4gICAgQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGxcbiAgPigpO1xuXG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICBpc09wdGlvbmFsOiB0cnVlXG4gICk6IG51bWJlciB8IG51bGw7XG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZT86IHN0cmluZyB8IG51bGxcbiAgKTogbnVtYmVyO1xuICBoZWxwZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBIZWxwZXJEZWZpbml0aW9uU3RhdGUsXG5cbiAgICAvLyBUT0RPOiBBZGQgYSB3YXkgdG8gZXhwb3NlIHJlc29sdmVkIG5hbWUgZm9yIGRlYnVnZ2luZ1xuICAgIF9yZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGlzT3B0aW9uYWw/OiB0cnVlXG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhlbHBlckRlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChoYW5kbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG1hbmFnZXJPckhlbHBlciA9IGdldEludGVybmFsSGVscGVyTWFuYWdlcihkZWZpbml0aW9uU3RhdGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAobWFuYWdlck9ySGVscGVyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG1hbmFnZXJPckhlbHBlciwgJ0JVRzogZXhwZWN0ZWQgbWFuYWdlciBvciBoZWxwZXInKTtcblxuICAgICAgbGV0IGhlbHBlciA9XG4gICAgICAgIHR5cGVvZiBtYW5hZ2VyT3JIZWxwZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG1hbmFnZXJPckhlbHBlclxuICAgICAgICAgIDogbWFuYWdlck9ySGVscGVyLmdldEhlbHBlcihkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgICBoYW5kbGUgPSB0aGlzLnZhbHVlKGhlbHBlcik7XG5cbiAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIGhhbmRsZSk7XG4gICAgICB0aGlzLmhlbHBlckRlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGU7XG4gIH1cblxuICBtb2RpZmllcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IE1vZGlmaWVyRGVmaW5pdGlvblN0YXRlLFxuICAgIHJlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICBpc09wdGlvbmFsOiB0cnVlXG4gICk6IG51bWJlciB8IG51bGw7XG4gIG1vZGlmaWVyKGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIHJlc29sdmVkTmFtZT86IHN0cmluZyB8IG51bGwpOiBudW1iZXI7XG4gIG1vZGlmaWVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gICAgcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZVxuICApOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgaGFuZGxlID0gdGhpcy5tb2RpZmllckRlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChoYW5kbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG1hbmFnZXIgPSBnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlcihkZWZpbml0aW9uU3RhdGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAobWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgIH07XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG5cbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9XG5cbiAgY29tcG9uZW50KGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlKTogQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgY29tcG9uZW50KFxuICAgIGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGw7XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsPzogdHJ1ZSxcbiAgICBvd25lcj86IG9iamVjdFxuICApOiBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBtYW5hZ2VyID0gZ2V0SW50ZXJuYWxDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIG51bGwpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG1hbmFnZXIsICdCVUc6IGV4cGVjdGVkIG1hbmFnZXInKTtcblxuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMoZGVmaW5pdGlvblN0YXRlKSk7XG5cbiAgICAgIGxldCB0ZW1wbGF0ZUZhY3RvcnkgPSBnZXRDb21wb25lbnRUZW1wbGF0ZShkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgICBsZXQgY29tcGlsYWJsZSA9IG51bGw7XG4gICAgICBsZXQgdGVtcGxhdGU7XG5cbiAgICAgIGlmICghbWFuYWdlckhhc0NhcGFiaWxpdHkobWFuYWdlciwgY2FwYWJpbGl0aWVzLCBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuRHluYW1pY0xheW91dCkpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcikgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeT8uKG93bmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWU6IG51bGwsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGU6IGRlZmluaXRpb25TdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICByZXNvbHZlZENvbXBvbmVudChcbiAgICByZXNvbHZlZERlZmluaXRpb246IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZ1xuICApOiBDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLmdldChyZXNvbHZlZERlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHsgbWFuYWdlciwgc3RhdGUsIHRlbXBsYXRlIH0gPSByZXNvbHZlZERlZmluaXRpb247XG4gICAgICBsZXQgY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0eUZsYWdzRnJvbShtYW5hZ2VyLmdldENhcGFiaWxpdGllcyhyZXNvbHZlZERlZmluaXRpb24pKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgPz8gdGhpcy5kZWZhdWx0VGVtcGxhdGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHVud3JhcFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgICAgICBjb21waWxhYmxlID0gbWFuYWdlckhhc0NhcGFiaWxpdHkoXG4gICAgICAgICAgbWFuYWdlcixcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LldyYXBwZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdGVtcGxhdGUuYXNXcmFwcGVkTGF5b3V0KClcbiAgICAgICAgICA6IHRlbXBsYXRlLmFzTGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZSxcbiAgICAgICAgaGFuZGxlOiAtMSwgLy8gcmVwbGFjZWQgbW9tZW50YXJpbHlcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29tcGlsYWJsZSxcbiAgICAgIH07XG5cbiAgICAgIGRlZmluaXRpb24hLmhhbmRsZSA9IHRoaXMudmFsdWUoZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQocmVzb2x2ZWREZWZpbml0aW9uLCBkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGVjdChkZWZpbml0aW9uLCAnQlVHOiByZXNvbHZlZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgY2Fubm90IGJlIG51bGwnKTtcbiAgfVxuXG4gIGdldFZhbHVlPFQ+KGluZGV4OiBudW1iZXIpIHtcbiAgICBhc3NlcnQoaW5kZXggPj0gMCwgYGNhbm5vdCBnZXQgdmFsdWUgZm9yIGhhbmRsZTogJHtpbmRleH1gKTtcblxuICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRleF0gYXMgVDtcbiAgfVxuXG4gIGdldEFycmF5PFQ+KGluZGV4OiBudW1iZXIpOiBUW10ge1xuICAgIGxldCByZWlmaWVkQXJycyA9IHRoaXMucmVpZmllZEFycnM7XG4gICAgbGV0IHJlaWZpZWQgPSByZWlmaWVkQXJyc1tpbmRleF0gYXMgVFtdO1xuXG4gICAgaWYgKHJlaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG5hbWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0VmFsdWUoaW5kZXgpO1xuICAgICAgcmVpZmllZCA9IG5ldyBBcnJheShuYW1lcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlaWZpZWRbaV0gPSB0aGlzLmdldFZhbHVlKG5hbWVzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmVpZmllZEFycnNbaW5kZXhdID0gcmVpZmllZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== |
@@ -128,3 +128,3 @@ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } | ||
_proto3.modifier = function modifier(definitionState, resolvedName) { | ||
_proto3.modifier = function modifier(definitionState, resolvedName, isOptional) { | ||
if (resolvedName === void 0) { | ||
@@ -137,3 +137,9 @@ resolvedName = null; | ||
if (handle === undefined) { | ||
var manager = getInternalModifierManager(definitionState); | ||
var manager = getInternalModifierManager(definitionState, isOptional); | ||
if (manager === null) { | ||
this.modifierDefinitionCache.set(definitionState, null); | ||
return null; | ||
} | ||
var definition = { | ||
@@ -268,2 +274,2 @@ resolvedName: resolvedName, | ||
}(CompileTimeConstantImpl); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWFBLFNBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxjQUFBLFFBQUEsZUFBQTtBQUNBLFNBQUEsbUJBQUEsRUFBQSxvQkFBQSxFQUFBLDJCQUFBLEVBQUEsd0JBQUEsRUFBQSwwQkFBQSxFQUFBLG9CQUFBLFFBQUEsa0JBQUE7QUFRQSxTQUFBLGVBQUEsUUFBQSwwQkFBQTtBQUNBLFNBQUEsZ0JBQUEsUUFBQSx5QkFBQTtBQUVBLElBQU0sc0JBQXNCLEdBQVksTUFBTSxDQUFOLE1BQUEsQ0FBeEMsRUFBd0MsQ0FBeEM7QUFDQSxJQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBbkMsc0JBQW1DLENBQW5DO0FBQ0EsSUFBTSwrQkFBK0IsR0FBVyxpQkFBaUIsQ0FBakIsT0FBQSxDQUFoRCxzQkFBZ0QsQ0FBaEQ7QUFFQSxXQUFNLHVCQUFOO0FBQUEscUNBQUE7QUFDRTtBQUVVLFNBQUEsTUFBQSxHQUFvQixpQkFBaUIsQ0FBckMsS0FBb0IsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBQSxHQUFBLENBQ3pDLEtBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBZ0IsVUFBQSxLQUFBLEVBQUEsS0FBQTtBQUFBLGFBQWtCLENBQUEsS0FBQSxFQUQxQixLQUMwQixDQUFsQjtBQUFBLEtBQWhCLENBRHlDLENBQWpDO0FBaUNYOztBQXJDRDs7QUFBQSxTQVFFLEtBUkYsR0FRRSxlQUFLLE1BQUwsRUFBb0I7QUFDbEIsUUFBSSxRQUFRLEdBQUcsS0FBZixRQUFBO0FBQ0EsUUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFSLEdBQUEsQ0FBWixNQUFZLENBQVo7O0FBRUEsUUFBSSxLQUFLLEtBQVQsU0FBQSxFQUF5QjtBQUN2QixNQUFBLEtBQUssR0FBRyxLQUFBLE1BQUEsQ0FBQSxJQUFBLENBQUEsTUFBQSxJQUFSLENBQUE7QUFDQSxNQUFBLFFBQVEsQ0FBUixHQUFBLENBQUEsTUFBQSxFQUFBLEtBQUE7QUFDRDs7QUFFRCxXQUFBLEtBQUE7QUFDRCxHQWxCSDs7QUFBQSxTQW9CRSxLQXBCRixHQW9CRSxlQUFLLE1BQUwsRUFBdUI7QUFDckIsUUFBSSxNQUFNLENBQU4sTUFBQSxLQUFKLENBQUEsRUFBeUI7QUFDdkIsYUFBQSwrQkFBQTtBQUNEOztBQUVELFFBQUksT0FBTyxHQUFhLElBQUEsS0FBQSxDQUFVLE1BQU0sQ0FBeEMsTUFBd0IsQ0FBeEI7O0FBRUEsU0FBSyxJQUFJLENBQUMsR0FBVixDQUFBLEVBQWdCLENBQUMsR0FBRyxNQUFNLENBQTFCLE1BQUEsRUFBbUMsQ0FBbkMsRUFBQSxFQUF3QztBQUN0QyxNQUFBLE9BQU8sQ0FBUCxDQUFPLENBQVAsR0FBYSxLQUFBLEtBQUEsQ0FBVyxNQUFNLENBQTlCLENBQThCLENBQWpCLENBQWI7QUFDRDs7QUFFRCxXQUFPLEtBQUEsS0FBQSxDQUFQLE9BQU8sQ0FBUDtBQUNELEdBaENIOztBQUFBLFNBa0NFLE1BbENGLEdBa0NFLGtCQUFNO0FBQ0osV0FBTyxLQUFQLE1BQUE7QUFDRCxHQXBDSDs7QUFBQTtBQUFBO0FBdUNBLFdBQU0sb0JBQU47QUFHRSxnQ0FBQSxJQUFBLEVBQThCO0FBQzVCLFNBQUEsTUFBQSxHQUFBLElBQUE7QUFDRDs7QUFMSDs7QUFBQSxVQU9FLFFBUEYsR0FPRSxrQkFBUSxNQUFSLEVBQTBCO0FBQ3hCLFdBQU8sS0FBQSxNQUFBLENBQVAsTUFBTyxDQUFQO0FBQ0QsR0FUSDs7QUFBQSxVQVdFLFFBWEYsR0FXRSxrQkFBUSxLQUFSLEVBQXlCO0FBQ3ZCLFFBQUksT0FBTyxHQUFHLEtBQUEsUUFBQSxDQUFkLEtBQWMsQ0FBZDtBQUNBLFFBQUksT0FBTyxHQUFRLElBQUEsS0FBQSxDQUFVLE9BQU8sQ0FBcEMsTUFBbUIsQ0FBbkI7O0FBRUEsU0FBSyxJQUFJLENBQUMsR0FBVixDQUFBLEVBQWdCLENBQUMsR0FBRyxPQUFPLENBQTNCLE1BQUEsRUFBb0MsQ0FBcEMsRUFBQSxFQUF5QztBQUN2QyxVQUFJLENBQUMsR0FBRyxPQUFPLENBQWYsQ0FBZSxDQUFmO0FBQ0EsTUFBQSxPQUFPLENBQVAsQ0FBTyxDQUFQLEdBQWEsS0FBQSxRQUFBLENBQWIsQ0FBYSxDQUFiO0FBQ0Q7O0FBRUQsV0FBQSxPQUFBO0FBQ0QsR0FyQkg7O0FBQUE7QUFBQTtBQXdCQSxXQUFNLGFBQU47QUFBQTs7QUFBQSwyQkFBQTtBQUFBOztBQUFBOzs7QUFHWSxVQUFBLFdBQUEsOENBQ1IsK0JBRFEsSUFDMkIsc0JBRDNCO0FBSVYsVUFBQSxlQUFBLEdBQTRCLGVBQWUsQ0FQN0MsZ0JBTzZDLENBQWYsRUFBNUIsQ0FQRixDQVNFO0FBQ0E7O0FBQ0EsVUFBQSxxQkFBQSxHQUFBLENBQUE7QUFDQSxVQUFBLHVCQUFBLEdBQUEsQ0FBQTtBQUNBLFVBQUEsd0JBQUEsR0FBQSxDQUFBO0FBRVEsVUFBQSxxQkFBQSxHQUF3QixJQUF4QixPQUF3QixFQUF4QjtBQUVBLFVBQUEsdUJBQUEsR0FBMEIsSUFBMUIsT0FBMEIsRUFBMUI7QUFFQSxVQUFBLHdCQUFBLEdBQTJCLElBQTNCLE9BQTJCLEVBQTNCO0FBbkJWO0FBK05DOztBQS9ORDs7QUFBQSxVQXFDRSxNQXJDRixHQXFDRSxnQkFBTSxlQUFOLEVBR0U7QUFDQSxFQUFBLGFBSkYsRUFBTSxVQUFOLEVBS21CO0FBQUEsUUFEakIsYUFDaUI7QUFEakIsTUFBQSxhQUNpQixHQUxiLElBS2E7QUFBQTs7QUFFakIsUUFBSSxNQUFNLEdBQUcsS0FBQSxxQkFBQSxDQUFBLEdBQUEsQ0FBYixlQUFhLENBQWI7O0FBRUEsUUFBSSxNQUFNLEtBQVYsU0FBQSxFQUEwQjtBQUN4QixVQUFJLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQSxlQUFBLEVBQTlDLFVBQThDLENBQTlDOztBQUVBLFVBQUksZUFBZSxLQUFuQixJQUFBLEVBQThCO0FBQzVCLGFBQUEscUJBQUEsQ0FBQSxHQUFBLENBQUEsZUFBQSxFQUFBLElBQUE7QUFDQSxlQUFBLElBQUE7QUFDRDs7QUFOdUIsZUFReEIsTUFBTSxDQUFBLGVBQUEsRUFSa0IsaUNBUWxCLENBUmtCO0FBVXhCLFVBQUksTUFBTSxHQUNSLE9BQUEsZUFBQSxLQUFBLFVBQUEsR0FBQSxlQUFBLEdBRUksZUFBZSxDQUFmLFNBQUEsQ0FITixlQUdNLENBSE47QUFLQSxNQUFBLE1BQU0sR0FBRyxLQUFBLEtBQUEsQ0FBVCxNQUFTLENBQVQ7QUFFQSxXQUFBLHFCQUFBLENBQUEsR0FBQSxDQUFBLGVBQUEsRUFBQSxNQUFBO0FBQ0EsV0FBQSxxQkFBQTtBQUNEOztBQUVELFdBQUEsTUFBQTtBQUNELEdBcEVIOztBQUFBLFVBc0VFLFFBdEVGLEdBc0VFLGtCQUFRLGVBQVIsRUFBbUQsWUFBbkQsRUFBcUY7QUFBQSxRQUFsQyxZQUFrQztBQUFsQyxNQUFBLFlBQWtDLEdBQTdFLElBQTZFO0FBQUE7O0FBQ25GLFFBQUksTUFBTSxHQUFHLEtBQUEsdUJBQUEsQ0FBQSxHQUFBLENBQWIsZUFBYSxDQUFiOztBQUVBLFFBQUksTUFBTSxLQUFWLFNBQUEsRUFBMEI7QUFDeEIsVUFBSSxPQUFPLEdBQUcsMEJBQTBCLENBQXhDLGVBQXdDLENBQXhDO0FBRUEsVUFBSSxVQUFVLEdBQUc7QUFDZixRQUFBLFlBRGUsRUFDZixZQURlO0FBRWYsUUFBQSxPQUZlLEVBRWYsT0FGZTtBQUdmLFFBQUEsS0FBSyxFQUFFO0FBSFEsT0FBakI7QUFNQSxNQUFBLE1BQU0sR0FBRyxLQUFBLEtBQUEsQ0FBVCxVQUFTLENBQVQ7QUFFQSxXQUFBLHVCQUFBLENBQUEsR0FBQSxDQUFBLGVBQUEsRUFBQSxNQUFBO0FBQ0EsV0FBQSx1QkFBQTtBQUNEOztBQUVELFdBQUEsTUFBQTtBQUNELEdBekZIOztBQUFBLFVBZ0dFLFNBaEdGLEdBZ0dFLG1CQUFTLGVBQVQsRUFBUyxVQUFULEVBQVMsS0FBVCxFQUdnQjs7O0FBRWQsUUFBSSxVQUFVLEdBQUcsS0FBQSx3QkFBQSxDQUFBLEdBQUEsQ0FBakIsZUFBaUIsQ0FBakI7O0FBRUEsUUFBSSxVQUFVLEtBQWQsU0FBQSxFQUE4QjtBQUM1QixVQUFJLE9BQU8sR0FBRywyQkFBMkIsQ0FBQSxlQUFBLEVBQXpDLFVBQXlDLENBQXpDOztBQUVBLFVBQUksT0FBTyxLQUFYLElBQUEsRUFBc0I7QUFDcEIsYUFBQSx3QkFBQSxDQUFBLEdBQUEsQ0FBQSxlQUFBLEVBQUEsSUFBQTtBQUNBLGVBQUEsSUFBQTtBQUNEOztBQU4yQixlQVE1QixNQUFNLENBQUEsT0FBQSxFQVJzQix1QkFRdEIsQ0FSc0I7QUFVNUIsVUFBSSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFQLGVBQUEsQ0FBdkMsZUFBdUMsQ0FBRCxDQUF0Qzs7QUFFQSxVQUFJLGdCQUFlLEdBQUcsb0JBQW9CLENBQTFDLGVBQTBDLENBQTFDOztBQUVBLFVBQUksVUFBVSxHQUFkLElBQUE7QUFDQSxVQUFBLFFBQUE7O0FBRUEsVUFBSSxDQUFDLG9CQUFvQixDQUFBLE9BQUEsRUFBQSxZQUFBLEVBQXNCO0FBQUE7QUFBdEIsT0FBekIsRUFBNkY7QUFDM0YsUUFBQSxRQUFRLEdBQUEsQ0FBQSxFQUFBLEdBQUcsZ0JBQWUsS0FBZixJQUFBLElBQUEsZ0JBQWUsS0FBQSxLQUFmLENBQUEsR0FBZSxLQUFmLENBQUEsR0FBQSxnQkFBZSxDQUFsQixLQUFrQixDQUFsQixNQUFBLElBQUEsSUFBMEIsRUFBQSxLQUFBLEtBQTFCLENBQUEsR0FBQSxFQUFBLEdBQStCLEtBQXZDLGVBQUE7QUFERixPQUFBLE1BRU87QUFDTCxRQUFBLFFBQVEsR0FBRyxnQkFBZSxLQUFmLElBQUEsSUFBQSxnQkFBZSxLQUFBLEtBQWYsQ0FBQSxHQUFlLEtBQWYsQ0FBQSxHQUFBLGdCQUFlLENBQTFCLEtBQTBCLENBQTFCO0FBQ0Q7O0FBRUQsVUFBSSxRQUFRLEtBQVosU0FBQSxFQUE0QjtBQUMxQixRQUFBLFFBQVEsR0FBRyxjQUFjLENBQXpCLFFBQXlCLENBQXpCO0FBRUEsUUFBQSxVQUFVLEdBQUcsb0JBQW9CLENBQUEsT0FBQSxFQUFBLFlBQUEsRUFFbkI7QUFBQTtBQUZtQixTQUFwQixHQUtULFFBQVEsQ0FMQyxlQUtULEVBTFMsR0FNVCxRQUFRLENBTlosUUFNSSxFQU5KO0FBT0Q7O0FBRUQsTUFBQSxVQUFVLEdBQUc7QUFDWCxRQUFBLFlBQVksRUFERCxJQUFBO0FBRVgsUUFBQSxNQUFNLEVBQUUsQ0FGRyxDQUFBO0FBR1gsUUFBQSxPQUhXLEVBR1gsT0FIVztBQUlYLFFBQUEsWUFKVyxFQUlYLFlBSlc7QUFLWCxRQUFBLEtBQUssRUFMTSxlQUFBO0FBTVgsUUFBQSxVQUFBLEVBQUE7QUFOVyxPQUFiO0FBU0EsTUFBQSxVQUFXLENBQVgsTUFBQSxHQUFxQixLQUFBLEtBQUEsQ0FBckIsVUFBcUIsQ0FBckI7QUFDQSxXQUFBLHdCQUFBLENBQUEsR0FBQSxDQUFBLGVBQUEsRUFBQSxVQUFBO0FBQ0EsV0FBQSx3QkFBQTtBQUNEOztBQUVELFdBQUEsVUFBQTtBQUNELEdBekpIOztBQUFBLFVBMkpFLGlCQTNKRixHQTJKRSwyQkFBaUIsa0JBQWpCLEVBQWlCLFlBQWpCLEVBRXNCO0FBRXBCLFFBQUksVUFBVSxHQUFHLEtBQUEsd0JBQUEsQ0FBQSxHQUFBLENBQWpCLGtCQUFpQixDQUFqQjs7QUFFQSxRQUFJLFVBQVUsS0FBZCxTQUFBLEVBQThCO0FBQUEsVUFDeEIsT0FEd0IsR0FDNUIsa0JBRDRCLENBQ3hCLE9BRHdCO0FBQUEsVUFDeEIsS0FEd0IsR0FDNUIsa0JBRDRCLENBQ3hCLEtBRHdCO0FBQUEsVUFDTixRQURNLEdBQzVCLGtCQUQ0QixDQUNOLFFBRE07QUFFNUIsVUFBSSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFQLGVBQUEsQ0FBdkMsa0JBQXVDLENBQUQsQ0FBdEM7QUFFQSxVQUFJLFVBQVUsR0FBZCxJQUFBOztBQUVBLFVBQUksQ0FBQyxvQkFBb0IsQ0FBQSxPQUFBLEVBQUEsWUFBQSxFQUFzQjtBQUFBO0FBQXRCLE9BQXpCLEVBQTZGO0FBQzNGLFFBQUEsUUFBUSxHQUFHLFFBQVEsS0FBUixJQUFBLElBQUEsUUFBUSxLQUFBLEtBQVIsQ0FBQSxHQUFBLFFBQUEsR0FBWSxLQUF2QixlQUFBO0FBQ0Q7O0FBRUQsVUFBSSxRQUFRLEtBQVosSUFBQSxFQUF1QjtBQUNyQixRQUFBLFFBQVEsR0FBRyxjQUFjLENBQXpCLFFBQXlCLENBQXpCO0FBRUEsUUFBQSxVQUFVLEdBQUcsb0JBQW9CLENBQUEsT0FBQSxFQUFBLFlBQUEsRUFFbkI7QUFBQTtBQUZtQixTQUFwQixHQUtULFFBQVEsQ0FMQyxlQUtULEVBTFMsR0FNVCxRQUFRLENBTlosUUFNSSxFQU5KO0FBT0Q7O0FBRUQsTUFBQSxVQUFVLEdBQUc7QUFDWCxRQUFBLFlBRFcsRUFDWCxZQURXO0FBRVgsUUFBQSxNQUFNLEVBQUUsQ0FGRyxDQUFBO0FBR1gsUUFBQSxPQUhXLEVBR1gsT0FIVztBQUlYLFFBQUEsWUFKVyxFQUlYLFlBSlc7QUFLWCxRQUFBLEtBTFcsRUFLWCxLQUxXO0FBTVgsUUFBQSxVQUFBLEVBQUE7QUFOVyxPQUFiO0FBU0EsTUFBQSxVQUFXLENBQVgsTUFBQSxHQUFxQixLQUFBLEtBQUEsQ0FBckIsVUFBcUIsQ0FBckI7QUFDQSxXQUFBLHdCQUFBLENBQUEsR0FBQSxDQUFBLGtCQUFBLEVBQUEsVUFBQTtBQUNBLFdBQUEsd0JBQUE7QUFDRDs7QUFFRCxXQUFBLFVBQUE7QUFDRCxHQXRNSDs7QUFBQSxVQXdNRSxRQXhNRixHQXdNRSxrQkFBUSxLQUFSLEVBQXlCO0FBQUEsYUFDdkIsTUFBTSxDQUFDLEtBQUssSUFBTixDQUFBLG9DQURpQixLQUNqQixDQURpQjtBQUd2QixXQUFPLEtBQUEsTUFBQSxDQUFQLEtBQU8sQ0FBUDtBQUNELEdBNU1IOztBQUFBLFVBOE1FLFFBOU1GLEdBOE1FLGtCQUFRLEtBQVIsRUFBeUI7QUFDdkIsUUFBSSxXQUFXLEdBQUcsS0FBbEIsV0FBQTtBQUNBLFFBQUksT0FBTyxHQUFHLFdBQVcsQ0FBekIsS0FBeUIsQ0FBekI7O0FBRUEsUUFBSSxPQUFPLEtBQVgsU0FBQSxFQUEyQjtBQUN6QixVQUFJLEtBQUssR0FBYSxLQUFBLFFBQUEsQ0FBdEIsS0FBc0IsQ0FBdEI7QUFDQSxNQUFBLE9BQU8sR0FBRyxJQUFBLEtBQUEsQ0FBVSxLQUFLLENBQXpCLE1BQVUsQ0FBVjs7QUFFQSxXQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLEtBQUssQ0FBekIsTUFBQSxFQUFrQyxDQUFsQyxFQUFBLEVBQXVDO0FBQ3JDLFFBQUEsT0FBTyxDQUFQLENBQU8sQ0FBUCxHQUFhLEtBQUEsUUFBQSxDQUFjLEtBQUssQ0FBaEMsQ0FBZ0MsQ0FBbkIsQ0FBYjtBQUNEOztBQUVELE1BQUEsV0FBVyxDQUFYLEtBQVcsQ0FBWCxHQUFBLE9BQUE7QUFDRDs7QUFFRCxXQUFBLE9BQUE7QUFDRCxHQTlOSDs7QUFBQTtBQUFBLEVBQU0sdUJBQU4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21waWxlVGltZUNvbnN0YW50cyxcbiAgQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICBDb25zdGFudFBvb2wsXG4gIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eSxcbiAgQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUmVzb2x1dGlvblRpbWVDb25zdGFudHMsXG4gIFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgUnVudGltZUNvbnN0YW50cyxcbiAgTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gIEhlbHBlckRlZmluaXRpb25TdGF0ZSxcbiAgVGVtcGxhdGUsXG59IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYXNzZXJ0LCBjb25zdGFudHMsIGV4cGVjdCwgdW53cmFwVGVtcGxhdGUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIGNhcGFiaWxpdHlGbGFnc0Zyb20sXG4gIGdldENvbXBvbmVudFRlbXBsYXRlLFxuICBnZXRJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIsXG4gIGdldEludGVybmFsSGVscGVyTWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxNb2RpZmllck1hbmFnZXIsXG4gIG1hbmFnZXJIYXNDYXBhYmlsaXR5LFxufSBmcm9tICdAZ2xpbW1lci9tYW5hZ2VyJztcbmltcG9ydCB7IHRlbXBsYXRlRmFjdG9yeSB9IGZyb20gJ0BnbGltbWVyL29wY29kZS1jb21waWxlcic7XG5pbXBvcnQgeyBERUZBVUxUX1RFTVBMQVRFIH0gZnJvbSAnLi91dGlsL2RlZmF1bHQtdGVtcGxhdGUnO1xuXG5jb25zdCBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZOiB1bmtub3duID0gT2JqZWN0LmZyZWV6ZShbXSk7XG5jb25zdCBTVEFSVEVSX0NPTlNUQU5UUyA9IGNvbnN0YW50cyhXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT046IG51bWJlciA9IFNUQVJURVJfQ09OU1RBTlRTLmluZGV4T2YoV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSk7XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlVGltZUNvbnN0YW50SW1wbCBpbXBsZW1lbnRzIENvbXBpbGVUaW1lQ29uc3RhbnRzIHtcbiAgLy8gYDBgIG1lYW5zIE5VTExcblxuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW10gPSBTVEFSVEVSX0NPTlNUQU5UUy5zbGljZSgpO1xuICBwcm90ZWN0ZWQgaW5kZXhNYXA6IE1hcDx1bmtub3duLCBudW1iZXI+ID0gbmV3IE1hcChcbiAgICB0aGlzLnZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT4gW3ZhbHVlLCBpbmRleF0pXG4gICk7XG5cbiAgdmFsdWUodmFsdWU6IHVua25vd24pIHtcbiAgICBsZXQgaW5kZXhNYXAgPSB0aGlzLmluZGV4TWFwO1xuICAgIGxldCBpbmRleCA9IGluZGV4TWFwLmdldCh2YWx1ZSk7XG5cbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSB0aGlzLnZhbHVlcy5wdXNoKHZhbHVlKSAtIDE7XG4gICAgICBpbmRleE1hcC5zZXQodmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhcnJheSh2YWx1ZXM6IHVua25vd25bXSk6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OO1xuICAgIH1cblxuICAgIGxldCBoYW5kbGVzOiBudW1iZXJbXSA9IG5ldyBBcnJheSh2YWx1ZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYW5kbGVzW2ldID0gdGhpcy52YWx1ZSh2YWx1ZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbHVlKGhhbmRsZXMpO1xuICB9XG5cbiAgdG9Qb29sKCk6IENvbnN0YW50UG9vbCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uc3RhbnRzSW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgdmFsdWVzOiB1bmtub3duW107XG5cbiAgY29uc3RydWN0b3IocG9vbDogQ29uc3RhbnRQb29sKSB7XG4gICAgdGhpcy52YWx1ZXMgPSBwb29sO1xuICB9XG5cbiAgZ2V0VmFsdWU8VD4oaGFuZGxlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaGFuZGxlXSBhcyBUO1xuICB9XG5cbiAgZ2V0QXJyYXk8VD4odmFsdWU6IG51bWJlcik6IFRbXSB7XG4gICAgbGV0IGhhbmRsZXMgPSB0aGlzLmdldFZhbHVlKHZhbHVlKSBhcyBudW1iZXJbXTtcbiAgICBsZXQgcmVpZmllZDogVFtdID0gbmV3IEFycmF5KGhhbmRsZXMubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG4gPSBoYW5kbGVzW2ldO1xuICAgICAgcmVpZmllZFtpXSA9IHRoaXMuZ2V0VmFsdWUobik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlaWZpZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnN0YW50c0ltcGxcbiAgZXh0ZW5kcyBDb21waWxlVGltZUNvbnN0YW50SW1wbFxuICBpbXBsZW1lbnRzIFJ1bnRpbWVDb25zdGFudHMsIFJlc29sdXRpb25UaW1lQ29uc3RhbnRzIHtcbiAgcHJvdGVjdGVkIHJlaWZpZWRBcnJzOiB7IFtrZXk6IG51bWJlcl06IHVua25vd25bXSB9ID0ge1xuICAgIFtXRUxMX0tOT1dOX0VNUFRZX0FSUkFZX1BPU0lUSU9OXTogV0VMTF9LTk9XTl9FTVBUWV9BUlJBWSBhcyB1bmtub3duW10sXG4gIH07XG5cbiAgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeShERUZBVUxUX1RFTVBMQVRFKSgpO1xuXG4gIC8vIFVzZWQgZm9yIHRlc3RzIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMsIGFuZCB0byBiZSBhYmxlIHRvIGFuYWx5emUgbGFyZ2UgYXBwc1xuICAvLyBUaGlzIGlzIHdoeSBpdCdzIGVuYWJsZWQgZXZlbiBpbiBwcm9kdWN0aW9uXG4gIGhlbHBlckRlZmluaXRpb25Db3VudCA9IDA7XG4gIG1vZGlmaWVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgY29tcG9uZW50RGVmaW5pdGlvbkNvdW50ID0gMDtcblxuICBwcml2YXRlIGhlbHBlckRlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPEhlbHBlckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyIHwgbnVsbD4oKTtcblxuICBwcml2YXRlIG1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8TW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIG51bWJlcj4oKTtcblxuICBwcml2YXRlIGNvbXBvbmVudERlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPFxuICAgIENvbXBvbmVudERlZmluaXRpb25TdGF0ZSB8IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbFxuICA+KCk7XG5cbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbDtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lPzogc3RyaW5nIHwgbnVsbFxuICApOiBudW1iZXI7XG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgaXNPcHRpb25hbD86IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlck9ySGVscGVyID0gZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyT3JIZWxwZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQobWFuYWdlck9ySGVscGVyLCAnQlVHOiBleHBlY3RlZCBtYW5hZ2VyIG9yIGhlbHBlcicpO1xuXG4gICAgICBsZXQgaGVscGVyID1cbiAgICAgICAgdHlwZW9mIG1hbmFnZXJPckhlbHBlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbWFuYWdlck9ySGVscGVyXG4gICAgICAgICAgOiBtYW5hZ2VyT3JIZWxwZXIuZ2V0SGVscGVyKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoaGVscGVyKTtcblxuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfVxuXG4gIG1vZGlmaWVyKGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsIHJlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBudW1iZXIge1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IGdldEludGVybmFsTW9kaWZpZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGxldCBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWUsXG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIHN0YXRlOiBkZWZpbml0aW9uU3RhdGUsXG4gICAgICB9O1xuXG4gICAgICBoYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuXG4gICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIGhhbmRsZSk7XG4gICAgICB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfVxuXG4gIGNvbXBvbmVudChkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSk6IENvbXBvbmVudERlZmluaXRpb247XG4gIGNvbXBvbmVudChcbiAgICBkZWZpbml0aW9uU3RhdGU6IENvbXBvbmVudERlZmluaXRpb25TdGF0ZSxcbiAgICBpc09wdGlvbmFsOiB0cnVlXG4gICk6IENvbXBvbmVudERlZmluaXRpb24gfCBudWxsO1xuICBjb21wb25lbnQoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gICAgaXNPcHRpb25hbD86IHRydWUsXG4gICAgb3duZXI/OiBvYmplY3RcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB8IG51bGwge1xuICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuZ2V0KGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICBpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcihkZWZpbml0aW9uU3RhdGUsIGlzT3B0aW9uYWwpO1xuXG4gICAgICBpZiAobWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChtYW5hZ2VyLCAnQlVHOiBleHBlY3RlZCBtYW5hZ2VyJyk7XG5cbiAgICAgIGxldCBjYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXR5RmxhZ3NGcm9tKG1hbmFnZXIuZ2V0Q2FwYWJpbGl0aWVzKGRlZmluaXRpb25TdGF0ZSkpO1xuXG4gICAgICBsZXQgdGVtcGxhdGVGYWN0b3J5ID0gZ2V0Q29tcG9uZW50VGVtcGxhdGUoZGVmaW5pdGlvblN0YXRlKTtcblxuICAgICAgbGV0IGNvbXBpbGFibGUgPSBudWxsO1xuICAgICAgbGV0IHRlbXBsYXRlO1xuXG4gICAgICBpZiAoIW1hbmFnZXJIYXNDYXBhYmlsaXR5KG1hbmFnZXIsIGNhcGFiaWxpdGllcywgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LkR5bmFtaWNMYXlvdXQpKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5Py4ob3duZXIpID8/IHRoaXMuZGVmYXVsdFRlbXBsYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZhY3Rvcnk/Lihvd25lcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdW53cmFwVGVtcGxhdGUodGVtcGxhdGUpO1xuXG4gICAgICAgIGNvbXBpbGFibGUgPSBtYW5hZ2VySGFzQ2FwYWJpbGl0eShcbiAgICAgICAgICBtYW5hZ2VyLFxuICAgICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgICBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuV3JhcHBlZFxuICAgICAgICApXG4gICAgICAgICAgPyB0ZW1wbGF0ZS5hc1dyYXBwZWRMYXlvdXQoKVxuICAgICAgICAgIDogdGVtcGxhdGUuYXNMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgcmVzb2x2ZWROYW1lOiBudWxsLFxuICAgICAgICBoYW5kbGU6IC0xLCAvLyByZXBsYWNlZCBtb21lbnRhcmlseVxuICAgICAgICBtYW5hZ2VyLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgIHN0YXRlOiBkZWZpbml0aW9uU3RhdGUsXG4gICAgICAgIGNvbXBpbGFibGUsXG4gICAgICB9O1xuXG4gICAgICBkZWZpbml0aW9uIS5oYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcmVzb2x2ZWRDb21wb25lbnQoXG4gICAgcmVzb2x2ZWREZWZpbml0aW9uOiBSZXNvbHZlZENvbXBvbmVudERlZmluaXRpb24sXG4gICAgcmVzb2x2ZWROYW1lOiBzdHJpbmdcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbiB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLmNvbXBvbmVudERlZmluaXRpb25DYWNoZS5nZXQocmVzb2x2ZWREZWZpbml0aW9uKTtcblxuICAgIGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCB7IG1hbmFnZXIsIHN0YXRlLCB0ZW1wbGF0ZSB9ID0gcmVzb2x2ZWREZWZpbml0aW9uO1xuICAgICAgbGV0IGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdHlGbGFnc0Zyb20obWFuYWdlci5nZXRDYXBhYmlsaXRpZXMocmVzb2x2ZWREZWZpbml0aW9uKSk7XG5cbiAgICAgIGxldCBjb21waWxhYmxlID0gbnVsbDtcblxuICAgICAgaWYgKCFtYW5hZ2VySGFzQ2FwYWJpbGl0eShtYW5hZ2VyLCBjYXBhYmlsaXRpZXMsIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5EeW5hbWljTGF5b3V0KSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlID8/IHRoaXMuZGVmYXVsdFRlbXBsYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVtcGxhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB1bndyYXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgY29tcGlsYWJsZSA9IG1hbmFnZXJIYXNDYXBhYmlsaXR5KFxuICAgICAgICAgIG1hbmFnZXIsXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICAgIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5XcmFwcGVkXG4gICAgICAgIClcbiAgICAgICAgICA/IHRlbXBsYXRlLmFzV3JhcHBlZExheW91dCgpXG4gICAgICAgICAgOiB0ZW1wbGF0ZS5hc0xheW91dCgpO1xuICAgICAgfVxuXG4gICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICByZXNvbHZlZE5hbWUsXG4gICAgICAgIGhhbmRsZTogLTEsIC8vIHJlcGxhY2VkIG1vbWVudGFyaWx5XG4gICAgICAgIG1hbmFnZXIsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNvbXBpbGFibGUsXG4gICAgICB9O1xuXG4gICAgICBkZWZpbml0aW9uIS5oYW5kbGUgPSB0aGlzLnZhbHVlKGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KHJlc29sdmVkRGVmaW5pdGlvbiwgZGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBleHBlY3QoZGVmaW5pdGlvbiwgJ0JVRzogcmVzb2x2ZWQgY29tcG9uZW50IGRlZmluaXRpb25zIGNhbm5vdCBiZSBudWxsJyk7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihpbmRleDogbnVtYmVyKSB7XG4gICAgYXNzZXJ0KGluZGV4ID49IDAsIGBjYW5ub3QgZ2V0IHZhbHVlIGZvciBoYW5kbGU6ICR7aW5kZXh9YCk7XG5cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbaW5kZXhdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPihpbmRleDogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgcmVpZmllZEFycnMgPSB0aGlzLnJlaWZpZWRBcnJzO1xuICAgIGxldCByZWlmaWVkID0gcmVpZmllZEFycnNbaW5kZXhdIGFzIFRbXTtcblxuICAgIGlmIChyZWlmaWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBuYW1lczogbnVtYmVyW10gPSB0aGlzLmdldFZhbHVlKGluZGV4KTtcbiAgICAgIHJlaWZpZWQgPSBuZXcgQXJyYXkobmFtZXMubGVuZ3RoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuYW1lc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHJlaWZpZWRBcnJzW2luZGV4XSA9IHJlaWZpZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlaWZpZWQ7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3Byb2dyYW0vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWFBLFNBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxjQUFBLFFBQUEsZUFBQTtBQUNBLFNBQUEsbUJBQUEsRUFBQSxvQkFBQSxFQUFBLDJCQUFBLEVBQUEsd0JBQUEsRUFBQSwwQkFBQSxFQUFBLG9CQUFBLFFBQUEsa0JBQUE7QUFRQSxTQUFBLGVBQUEsUUFBQSwwQkFBQTtBQUNBLFNBQUEsZ0JBQUEsUUFBQSx5QkFBQTtBQUVBLElBQU0sc0JBQXNCLEdBQVksTUFBTSxDQUFOLE1BQUEsQ0FBeEMsRUFBd0MsQ0FBeEM7QUFDQSxJQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBbkMsc0JBQW1DLENBQW5DO0FBQ0EsSUFBTSwrQkFBK0IsR0FBVyxpQkFBaUIsQ0FBakIsT0FBQSxDQUFoRCxzQkFBZ0QsQ0FBaEQ7QUFFQSxXQUFNLHVCQUFOO0FBQUEscUNBQUE7QUFDRTtBQUVVLFNBQUEsTUFBQSxHQUFvQixpQkFBaUIsQ0FBckMsS0FBb0IsRUFBcEI7QUFDQSxTQUFBLFFBQUEsR0FBaUMsSUFBQSxHQUFBLENBQ3pDLEtBQUEsTUFBQSxDQUFBLEdBQUEsQ0FBZ0IsVUFBQSxLQUFBLEVBQUEsS0FBQTtBQUFBLGFBQWtCLENBQUEsS0FBQSxFQUQxQixLQUMwQixDQUFsQjtBQUFBLEtBQWhCLENBRHlDLENBQWpDO0FBaUNYOztBQXJDRDs7QUFBQSxTQVFFLEtBUkYsR0FRRSxlQUFLLE1BQUwsRUFBb0I7QUFDbEIsUUFBSSxRQUFRLEdBQUcsS0FBZixRQUFBO0FBQ0EsUUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFSLEdBQUEsQ0FBWixNQUFZLENBQVo7O0FBRUEsUUFBSSxLQUFLLEtBQVQsU0FBQSxFQUF5QjtBQUN2QixNQUFBLEtBQUssR0FBRyxLQUFBLE1BQUEsQ0FBQSxJQUFBLENBQUEsTUFBQSxJQUFSLENBQUE7QUFDQSxN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VyxDQUF6QixLQUF5QixDQUF6Qjs7QUFFQSxRQUFJLE9BQU8sS0FBWCxTQUFBLEVBQTJCO0FBQ3pCLFVBQUksS0FBSyxHQUFhLEtBQUEsUUFBQSxDQUF0QixLQUFzQixDQUF0QjtBQUNBLE1BQUEsT0FBTyxHQUFHLElBQUEsS0FBQSxDQUFVLEtBQUssQ0FBekIsTUFBVSxDQUFWOztBQUVBLFdBQUssSUFBSSxDQUFDLEdBQVYsQ0FBQSxFQUFnQixDQUFDLEdBQUcsS0FBSyxDQUF6QixNQUFBLEVBQWtDLENBQWxDLEVBQUEsRUFBdUM7QUFDckMsUUFBQSxPQUFPLENBQVAsQ0FBTyxDQUFQLEdBQWEsS0FBQSxRQUFBLENBQWMsS0FBSyxDQUFoQyxDQUFnQyxDQUFuQixDQUFiO0FBQ0Q7O0FBRUQsTUFBQSxXQUFXLENBQVgsS0FBVyxDQUFYLEdBQUEsT0FBQTtBQUNEOztBQUVELFdBQUEsT0FBQTtBQUNELEdBN09IOztBQUFBO0FBQUEsRUFBTSx1QkFBTiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBpbGVUaW1lQ29uc3RhbnRzLFxuICBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gIENvbnN0YW50UG9vbCxcbiAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBSZXNvbHV0aW9uVGltZUNvbnN0YW50cyxcbiAgUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICBSdW50aW1lQ29uc3RhbnRzLFxuICBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuICBUZW1wbGF0ZSxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBhc3NlcnQsIGNvbnN0YW50cywgZXhwZWN0LCB1bndyYXBUZW1wbGF0ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgY2FwYWJpbGl0eUZsYWdzRnJvbSxcbiAgZ2V0Q29tcG9uZW50VGVtcGxhdGUsXG4gIGdldEludGVybmFsQ29tcG9uZW50TWFuYWdlcixcbiAgZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyLFxuICBnZXRJbnRlcm5hbE1vZGlmaWVyTWFuYWdlcixcbiAgbWFuYWdlckhhc0NhcGFiaWxpdHksXG59IGZyb20gJ0BnbGltbWVyL21hbmFnZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnQGdsaW1tZXIvb3Bjb2RlLWNvbXBpbGVyJztcbmltcG9ydCB7IERFRkFVTFRfVEVNUExBVEUgfSBmcm9tICcuL3V0aWwvZGVmYXVsdC10ZW1wbGF0ZSc7XG5cbmNvbnN0IFdFTExfS05PV05fRU1QVFlfQVJSQVk6IHVua25vd24gPSBPYmplY3QuZnJlZXplKFtdKTtcbmNvbnN0IFNUQVJURVJfQ09OU1RBTlRTID0gY29uc3RhbnRzKFdFTExfS05PV05fRU1QVFlfQVJSQVkpO1xuY29uc3QgV0VMTF9LTk9XTl9FTVBUWV9BUlJBWV9QT1NJVElPTjogbnVtYmVyID0gU1RBUlRFUl9DT05TVEFOVFMuaW5kZXhPZihXRUxMX0tOT1dOX0VNUFRZX0FSUkFZKTtcblxuZXhwb3J0IGNsYXNzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsIGltcGxlbWVudHMgQ29tcGlsZVRpbWVDb25zdGFudHMge1xuICAvLyBgMGAgbWVhbnMgTlVMTFxuXG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXSA9IFNUQVJURVJfQ09OU1RBTlRTLnNsaWNlKCk7XG4gIHByb3RlY3RlZCBpbmRleE1hcDogTWFwPHVua25vd24sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgIHRoaXMudmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiBbdmFsdWUsIGluZGV4XSlcbiAgKTtcblxuICB2YWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGxldCBpbmRleE1hcCA9IHRoaXMuaW5kZXhNYXA7XG4gICAgbGV0IGluZGV4ID0gaW5kZXhNYXAuZ2V0KHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHRoaXMudmFsdWVzLnB1c2godmFsdWUpIC0gMTtcbiAgICAgIGluZGV4TWFwLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGFycmF5KHZhbHVlczogdW5rbm93bltdKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFdFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT047XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZXM6IG51bWJlcltdID0gbmV3IEFycmF5KHZhbHVlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhbmRsZXNbaV0gPSB0aGlzLnZhbHVlKHZhbHVlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWUoaGFuZGxlcyk7XG4gIH1cblxuICB0b1Bvb2woKTogQ29uc3RhbnRQb29sIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVDb25zdGFudHNJbXBsIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cyB7XG4gIHByb3RlY3RlZCB2YWx1ZXM6IHVua25vd25bXTtcblxuICBjb25zdHJ1Y3Rvcihwb29sOiBDb25zdGFudFBvb2wpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHBvb2w7XG4gIH1cblxuICBnZXRWYWx1ZTxUPihoYW5kbGU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1toYW5kbGVdIGFzIFQ7XG4gIH1cblxuICBnZXRBcnJheTxUPih2YWx1ZTogbnVtYmVyKTogVFtdIHtcbiAgICBsZXQgaGFuZGxlcyA9IHRoaXMuZ2V0VmFsdWUodmFsdWUpIGFzIG51bWJlcltdO1xuICAgIGxldCByZWlmaWVkOiBUW10gPSBuZXcgQXJyYXkoaGFuZGxlcy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgbiA9IGhhbmRsZXNbaV07XG4gICAgICByZWlmaWVkW2ldID0gdGhpcy5nZXRWYWx1ZShuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVpZmllZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzSW1wbFxuICBleHRlbmRzIENvbXBpbGVUaW1lQ29uc3RhbnRJbXBsXG4gIGltcGxlbWVudHMgUnVudGltZUNvbnN0YW50cywgUmVzb2x1dGlvblRpbWVDb25zdGFudHMge1xuICBwcm90ZWN0ZWQgcmVpZmllZEFycnM6IHsgW2tleTogbnVtYmVyXTogdW5rbm93bltdIH0gPSB7XG4gICAgW1dFTExfS05PV05fRU1QVFlfQVJSQVlfUE9TSVRJT05dOiBXRUxMX0tOT1dOX0VNUFRZX0FSUkFZIGFzIHVua25vd25bXSxcbiAgfTtcblxuICBkZWZhdWx0VGVtcGxhdGU6IFRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5KERFRkFVTFRfVEVNUExBVEUpKCk7XG5cbiAgLy8gVXNlZCBmb3IgdGVzdHMgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcywgYW5kIHRvIGJlIGFibGUgdG8gYW5hbHl6ZSBsYXJnZSBhcHBzXG4gIC8vIFRoaXMgaXMgd2h5IGl0J3MgZW5hYmxlZCBldmVuIGluIHByb2R1Y3Rpb25cbiAgaGVscGVyRGVmaW5pdGlvbkNvdW50ID0gMDtcbiAgbW9kaWZpZXJEZWZpbml0aW9uQ291bnQgPSAwO1xuICBjb21wb25lbnREZWZpbml0aW9uQ291bnQgPSAwO1xuXG4gIHByaXZhdGUgaGVscGVyRGVmaW5pdGlvbkNhY2hlID0gbmV3IFdlYWtNYXA8SGVscGVyRGVmaW5pdGlvblN0YXRlLCBudW1iZXIgfCBudWxsPigpO1xuXG4gIHByaXZhdGUgbW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUgPSBuZXcgV2Vha01hcDxNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgbnVtYmVyIHwgbnVsbD4oKTtcblxuICBwcml2YXRlIGNvbXBvbmVudERlZmluaXRpb25DYWNoZSA9IG5ldyBXZWFrTWFwPFxuICAgIENvbXBvbmVudERlZmluaXRpb25TdGF0ZSB8IFJlc29sdmVkQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbFxuICA+KCk7XG5cbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbDtcbiAgaGVscGVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogSGVscGVyRGVmaW5pdGlvblN0YXRlLFxuXG4gICAgLy8gVE9ETzogQWRkIGEgd2F5IHRvIGV4cG9zZSByZXNvbHZlZCBuYW1lIGZvciBkZWJ1Z2dpbmdcbiAgICBfcmVzb2x2ZWROYW1lPzogc3RyaW5nIHwgbnVsbFxuICApOiBudW1iZXI7XG4gIGhlbHBlcihcbiAgICBkZWZpbml0aW9uU3RhdGU6IEhlbHBlckRlZmluaXRpb25TdGF0ZSxcblxuICAgIC8vIFRPRE86IEFkZCBhIHdheSB0byBleHBvc2UgcmVzb2x2ZWQgbmFtZSBmb3IgZGVidWdnaW5nXG4gICAgX3Jlc29sdmVkTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgaXNPcHRpb25hbD86IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IGhhbmRsZSA9IHRoaXMuaGVscGVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlck9ySGVscGVyID0gZ2V0SW50ZXJuYWxIZWxwZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyT3JIZWxwZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQobWFuYWdlck9ySGVscGVyLCAnQlVHOiBleHBlY3RlZCBtYW5hZ2VyIG9yIGhlbHBlcicpO1xuXG4gICAgICBsZXQgaGVscGVyID1cbiAgICAgICAgdHlwZW9mIG1hbmFnZXJPckhlbHBlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbWFuYWdlck9ySGVscGVyXG4gICAgICAgICAgOiBtYW5hZ2VyT3JIZWxwZXIuZ2V0SGVscGVyKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGhhbmRsZSA9IHRoaXMudmFsdWUoaGVscGVyKTtcblxuICAgICAgdGhpcy5oZWxwZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgaGFuZGxlKTtcbiAgICAgIHRoaXMuaGVscGVyRGVmaW5pdGlvbkNvdW50Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZTtcbiAgfVxuXG4gIG1vZGlmaWVyKFxuICAgIGRlZmluaXRpb25TdGF0ZTogTW9kaWZpZXJEZWZpbml0aW9uU3RhdGUsXG4gICAgcmVzb2x2ZWROYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIGlzT3B0aW9uYWw6IHRydWVcbiAgKTogbnVtYmVyIHwgbnVsbDtcbiAgbW9kaWZpZXIoZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSwgcmVzb2x2ZWROYW1lPzogc3RyaW5nIHwgbnVsbCk6IG51bWJlcjtcbiAgbW9kaWZpZXIoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBNb2RpZmllckRlZmluaXRpb25TdGF0ZSxcbiAgICByZXNvbHZlZE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIGlzT3B0aW9uYWw/OiB0cnVlXG4gICk6IG51bWJlciB8IG51bGwge1xuICAgIGxldCBoYW5kbGUgPSB0aGlzLm1vZGlmaWVyRGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGhhbmRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbWFuYWdlciA9IGdldEludGVybmFsTW9kaWZpZXJNYW5hZ2VyKGRlZmluaXRpb25TdGF0ZSwgaXNPcHRpb25hbCk7XG5cbiAgICAgIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMubW9kaWZpZXJEZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgcmVzb2x2ZWROYW1lLFxuICAgICAgICBtYW5hZ2VyLFxuICAgICAgICBzdGF0ZTogZGVmaW5pdGlvblN0YXRlLFxuICAgICAgfTtcblxuICAgICAgaGFuZGxlID0gdGhpcy52YWx1ZShkZWZpbml0aW9uKTtcblxuICAgICAgdGhpcy5tb2RpZmllckRlZmluaXRpb25DYWNoZS5zZXQoZGVmaW5pdGlvblN0YXRlLCBoYW5kbGUpO1xuICAgICAgdGhpcy5tb2RpZmllckRlZmluaXRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGU7XG4gIH1cblxuICBjb21wb25lbnQoZGVmaW5pdGlvblN0YXRlOiBDb21wb25lbnREZWZpbml0aW9uU3RhdGUpOiBDb21wb25lbnREZWZpbml0aW9uO1xuICBjb21wb25lbnQoXG4gICAgZGVmaW5pdGlvblN0YXRlOiBDb21wb25lbnREZWZpbml0aW9uU3RhdGUsXG4gICAgaXNPcHRpb25hbDogdHJ1ZVxuICApOiBDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbDtcbiAgY29tcG9uZW50KFxuICAgIGRlZmluaXRpb25TdGF0ZTogQ29tcG9uZW50RGVmaW5pdGlvblN0YXRlLFxuICAgIGlzT3B0aW9uYWw/OiB0cnVlLFxuICAgIG93bmVyPzogb2JqZWN0XG4gICk6IENvbXBvbmVudERlZmluaXRpb24gfCBudWxsIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLmdldChkZWZpbml0aW9uU3RhdGUpO1xuXG4gICAgaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG1hbmFnZXIgPSBnZXRJbnRlcm5hbENvbXBvbmVudE1hbmFnZXIoZGVmaW5pdGlvblN0YXRlLCBpc09wdGlvbmFsKTtcblxuICAgICAgaWYgKG1hbmFnZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuc2V0KGRlZmluaXRpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQobWFuYWdlciwgJ0JVRzogZXhwZWN0ZWQgbWFuYWdlcicpO1xuXG4gICAgICBsZXQgY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0eUZsYWdzRnJvbShtYW5hZ2VyLmdldENhcGFiaWxpdGllcyhkZWZpbml0aW9uU3RhdGUpKTtcblxuICAgICAgbGV0IHRlbXBsYXRlRmFjdG9yeSA9IGdldENvbXBvbmVudFRlbXBsYXRlKGRlZmluaXRpb25TdGF0ZSk7XG5cbiAgICAgIGxldCBjb21waWxhYmxlID0gbnVsbDtcbiAgICAgIGxldCB0ZW1wbGF0ZTtcblxuICAgICAgaWYgKCFtYW5hZ2VySGFzQ2FwYWJpbGl0eShtYW5hZ2VyLCBjYXBhYmlsaXRpZXMsIEludGVybmFsQ29tcG9uZW50Q2FwYWJpbGl0eS5EeW5hbWljTGF5b3V0KSkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlRmFjdG9yeT8uKG93bmVyKSA/PyB0aGlzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVGYWN0b3J5Py4ob3duZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVtcGxhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZW1wbGF0ZSA9IHVud3JhcFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuICAgICAgICBjb21waWxhYmxlID0gbWFuYWdlckhhc0NhcGFiaWxpdHkoXG4gICAgICAgICAgbWFuYWdlcixcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgSW50ZXJuYWxDb21wb25lbnRDYXBhYmlsaXR5LldyYXBwZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gdGVtcGxhdGUuYXNXcmFwcGVkTGF5b3V0KClcbiAgICAgICAgICA6IHRlbXBsYXRlLmFzTGF5b3V0KCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgIHJlc29sdmVkTmFtZTogbnVsbCxcbiAgICAgICAgaGFuZGxlOiAtMSwgLy8gcmVwbGFjZWQgbW9tZW50YXJpbHlcbiAgICAgICAgbWFuYWdlcixcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgICBzdGF0ZTogZGVmaW5pdGlvblN0YXRlLFxuICAgICAgICBjb21waWxhYmxlLFxuICAgICAgfTtcblxuICAgICAgZGVmaW5pdGlvbiEuaGFuZGxlID0gdGhpcy52YWx1ZShkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChkZWZpbml0aW9uU3RhdGUsIGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJlc29sdmVkQ29tcG9uZW50KFxuICAgIHJlc29sdmVkRGVmaW5pdGlvbjogUmVzb2x2ZWRDb21wb25lbnREZWZpbml0aW9uLFxuICAgIHJlc29sdmVkTmFtZTogc3RyaW5nXG4gICk6IENvbXBvbmVudERlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ2FjaGUuZ2V0KHJlc29sdmVkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgeyBtYW5hZ2VyLCBzdGF0ZSwgdGVtcGxhdGUgfSA9IHJlc29sdmVkRGVmaW5pdGlvbjtcbiAgICAgIGxldCBjYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXR5RmxhZ3NGcm9tKG1hbmFnZXIuZ2V0Q2FwYWJpbGl0aWVzKHJlc29sdmVkRGVmaW5pdGlvbikpO1xuXG4gICAgICBsZXQgY29tcGlsYWJsZSA9IG51bGw7XG5cbiAgICAgIGlmICghbWFuYWdlckhhc0NhcGFiaWxpdHkobWFuYWdlciwgY2FwYWJpbGl0aWVzLCBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuRHluYW1pY0xheW91dCkpIHtcbiAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSA/PyB0aGlzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlbXBsYXRlICE9PSBudWxsKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdW53cmFwVGVtcGxhdGUodGVtcGxhdGUpO1xuXG4gICAgICAgIGNvbXBpbGFibGUgPSBtYW5hZ2VySGFzQ2FwYWJpbGl0eShcbiAgICAgICAgICBtYW5hZ2VyLFxuICAgICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgICBJbnRlcm5hbENvbXBvbmVudENhcGFiaWxpdHkuV3JhcHBlZFxuICAgICAgICApXG4gICAgICAgICAgPyB0ZW1wbGF0ZS5hc1dyYXBwZWRMYXlvdXQoKVxuICAgICAgICAgIDogdGVtcGxhdGUuYXNMYXlvdXQoKTtcbiAgICAgIH1cblxuICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgcmVzb2x2ZWROYW1lLFxuICAgICAgICBoYW5kbGU6IC0xLCAvLyByZXBsYWNlZCBtb21lbnRhcmlseVxuICAgICAgICBtYW5hZ2VyLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb21waWxhYmxlLFxuICAgICAgfTtcblxuICAgICAgZGVmaW5pdGlvbiEuaGFuZGxlID0gdGhpcy52YWx1ZShkZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVmaW5pdGlvbkNhY2hlLnNldChyZXNvbHZlZERlZmluaXRpb24sIGRlZmluaXRpb24pO1xuICAgICAgdGhpcy5jb21wb25lbnREZWZpbml0aW9uQ291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwZWN0KGRlZmluaXRpb24sICdCVUc6IHJlc29sdmVkIGNvbXBvbmVudCBkZWZpbml0aW9ucyBjYW5ub3QgYmUgbnVsbCcpO1xuICB9XG5cbiAgZ2V0VmFsdWU8VD4oaW5kZXg6IG51bWJlcikge1xuICAgIGFzc2VydChpbmRleCA+PSAwLCBgY2Fubm90IGdldCB2YWx1ZSBmb3IgaGFuZGxlOiAke2luZGV4fWApO1xuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XSBhcyBUO1xuICB9XG5cbiAgZ2V0QXJyYXk8VD4oaW5kZXg6IG51bWJlcik6IFRbXSB7XG4gICAgbGV0IHJlaWZpZWRBcnJzID0gdGhpcy5yZWlmaWVkQXJycztcbiAgICBsZXQgcmVpZmllZCA9IHJlaWZpZWRBcnJzW2luZGV4XSBhcyBUW107XG5cbiAgICBpZiAocmVpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbmFtZXM6IG51bWJlcltdID0gdGhpcy5nZXRWYWx1ZShpbmRleCk7XG4gICAgICByZWlmaWVkID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVpZmllZFtpXSA9IHRoaXMuZ2V0VmFsdWUobmFtZXNbaV0pO1xuICAgICAgfVxuXG4gICAgICByZWlmaWVkQXJyc1tpbmRleF0gPSByZWlmaWVkO1xuICAgIH1cblxuICAgIHJldHVybiByZWlmaWVkO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 |
@@ -28,2 +28,3 @@ import { CompileTimeConstants, ComponentDefinitionState, ConstantPool, ComponentDefinition, ResolutionTimeConstants, ResolvedComponentDefinition, RuntimeConstants, ModifierDefinitionState, HelperDefinitionState, Template } from '@glimmer/interfaces'; | ||
helper(definitionState: HelperDefinitionState, _resolvedName?: string | null): number; | ||
modifier(definitionState: ModifierDefinitionState, resolvedName: string | null, isOptional: true): number | null; | ||
modifier(definitionState: ModifierDefinitionState, resolvedName?: string | null): number; | ||
@@ -30,0 +31,0 @@ component(definitionState: ComponentDefinitionState): ComponentDefinition; |
{ | ||
"name": "@glimmer/program", | ||
"version": "0.71.1", | ||
"version": "0.71.2", | ||
"repository": "https://github.com/glimmerjs/glimmer-vm/tree/master/packages/@glimmer/program", | ||
"dependencies": { | ||
"@glimmer/env": "0.1.7", | ||
"@glimmer/util": "0.71.1", | ||
"@glimmer/opcode-compiler": "0.71.1", | ||
"@glimmer/manager": "0.71.1", | ||
"@glimmer/interfaces": "0.71.1", | ||
"@glimmer/encoder": "0.71.1" | ||
"@glimmer/util": "0.71.2", | ||
"@glimmer/opcode-compiler": "0.71.2", | ||
"@glimmer/manager": "0.71.2", | ||
"@glimmer/interfaces": "0.71.2", | ||
"@glimmer/encoder": "0.71.2" | ||
}, | ||
"devDependencies": { | ||
"@glimmer/local-debug-flags": "0.71.1" | ||
"@glimmer/local-debug-flags": "0.71.2" | ||
}, | ||
@@ -16,0 +16,0 @@ "main": "dist/commonjs/es2017/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
315826
1.59%2801
0.86%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated
Updated