Socket
Socket
Sign inDemoInstall

@glimmer/runtime

Package Overview
Dependencies
Maintainers
10
Versions
289
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glimmer/runtime - npm Package Compare versions

Comparing version 0.23.0-alpha.8 to 0.23.0-alpha.9

10

dist/commonjs/es2017/index.js

@@ -6,3 +6,3 @@ 'use strict';

});
exports.ConcreteBounds = exports.ElementStack = exports.Simple = exports.insertHTMLBefore = exports.isWhitespace = exports.DOMTreeConstruction = exports.IDOMChanges = exports.DOMChanges = exports.isComponentDefinition = exports.ComponentDefinition = exports.PartialDefinition = exports.Environment = exports.Scope = exports.isSafeString = exports.RenderResult = exports.UpdatingVM = exports.compileStatement = exports.CompilableTemplate = exports.ClientSide = exports.compileExpression = exports.compileList = exports.InlineMacros = exports.BlockMacros = exports.getDynamicVar = exports.resetDebuggerCallback = exports.setDebuggerCallback = exports.normalizeTextValue = exports.debugSlice = exports.readDOMAttr = exports.defaultPropertyManagers = exports.defaultAttributeManagers = exports.defaultManagers = exports.INPUT_VALUE_PROPERTY_MANAGER = exports.PropertyManager = exports.AttributeManager = exports.IAttributeManager = exports.CompiledDynamicTemplate = exports.CompiledStaticTemplate = exports.compileLayout = exports.OpcodeBuilderDSL = exports.ConditionalReference = exports.PrimitiveReference = exports.UNDEFINED_REFERENCE = exports.NULL_REFERENCE = exports.templateFactory = undefined;
exports.ConcreteBounds = exports.ElementStack = exports.Simple = exports.insertHTMLBefore = exports.isWhitespace = exports.DOMTreeConstruction = exports.IDOMChanges = exports.DOMChanges = exports.isComponentDefinition = exports.ComponentDefinition = exports.PartialDefinition = exports.Environment = exports.Scope = exports.isSafeString = exports.RenderResult = exports.UpdatingVM = exports.compileStatement = exports.CompilableTemplate = exports.ClientSide = exports.compileExpression = exports.compileList = exports.InlineMacros = exports.BlockMacros = exports.getDynamicVar = exports.resetDebuggerCallback = exports.setDebuggerCallback = exports.normalizeTextValue = exports.debugSlice = exports.Register = exports.readDOMAttr = exports.defaultPropertyManagers = exports.defaultAttributeManagers = exports.defaultManagers = exports.INPUT_VALUE_PROPERTY_MANAGER = exports.PropertyManager = exports.AttributeManager = exports.IAttributeManager = exports.CompiledDynamicTemplate = exports.CompiledStaticTemplate = exports.compileLayout = exports.OpcodeBuilderDSL = exports.ConditionalReference = exports.PrimitiveReference = exports.UNDEFINED_REFERENCE = exports.NULL_REFERENCE = exports.templateFactory = undefined;

@@ -131,2 +131,8 @@ var _template = require('./lib/template');

Object.defineProperty(exports, 'Register', {
enumerable: true,
get: function () {
return _opcodes.Register;
}
});
Object.defineProperty(exports, 'debugSlice', {

@@ -345,2 +351,2 @@ enumerable: true,

exports.Simple = Simple;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7NkNBRVMsQUFBTyxBQUFJLEFBQWUsQUFBNkIsQUFBTSxBQUFnQixBQUFDLEFBRXZGLEFBQU87Ozs7Ozs7Ozt1QkFBRSxBQUFjOzs7Ozs7dUJBQUUsQUFBbUI7Ozs7Ozt1QkFBRSxBQUFrQjs7Ozs7O3VCQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRWpILEFBQU87Ozs7Ozs7Ozs0Q0FDSixBQUFPLEFBQUksQUFBZ0IsQUFDN0IsQUFBTSxBQUFnQyxBQUFDLEFBRXhDLEFBQU87Ozs7Ozs7OztxQkFFTCxBQUFhLEFBQ2QsQUFBTSxBQUFnQixBQUFDLEFBT3hCLEFBQU87Ozs7Ozs7OzttQkFDTCxBQUFzQjs7Ozs7O21CQUN0QixBQUF1QixBQUd4QixBQUFNLEFBQXVCLEFBQUMsQUFFL0IsQUFBTzs7Ozs7Ozs7OzhCQUNMLEFBQWdCLEFBQUksQUFBaUI7Ozs7Ozs4QkFDckMsQUFBZ0I7Ozs7Ozs4QkFDaEIsQUFBZTs7Ozs7OzhCQUNmLEFBQTRCOzs7Ozs7OEJBQzVCLEFBQWU7Ozs7Ozs4QkFDZixBQUF3Qjs7Ozs7OzhCQUN4QixBQUF1Qjs7Ozs7OzhCQUN2QixBQUFXLEFBQ1osQUFBTSxBQUE4QixBQUFDLEFBRXRDLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFVLEFBQ1gsQUFBTSxBQUFlLEFBQUMsQUFFdkIsQUFBTzs7Ozs7Ozs7O29CQUNMLEFBQWtCLEFBQ25CLEFBQU0sQUFBZ0MsQUFBQyxBQUV4QyxBQUFPOzs7Ozs7Ozs7cUJBQ0wsQUFBbUI7Ozs7OztxQkFDbkIsQUFBcUIsQUFFdEIsQUFBTSxBQUFpQyxBQUFDLEFBRXpDLEFBQU87Ozs7Ozs7OztrREFDTCxBQUFPLEFBQUksQUFBYSxBQUN6QixBQUFNLEFBQStCLEFBQUMsQUFFdkMsQUFBTzs7Ozs7Ozs7O3NCQUNMLEFBQU0sQUFBSSxBQUFXOzs7Ozs7c0JBQ3JCLEFBQU8sQUFBSSxBQUFZOzs7Ozs7c0JBR3ZCLEFBQVc7Ozs7OztzQkFDWCxBQUFJLEFBQUksQUFBaUIsQUFDMUIsQUFBTSxBQUF3QixBQUFDLEFBRWhDLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFVOzs7Ozs7b0JBQ1YsQUFBa0I7Ozs7OztvQkFLbEIsQUFBZ0IsQUFDakIsQUFBTSxBQUFlLEFBQUMsQUFFdkIsQUFBTzs7Ozs7Ozs7O2VBQWtCLEFBQVU7Ozs7OztlQUFFLEFBQVksQUFBa0IsQUFBTSxBQUFVLEFBQUMsQUFXcEYsQUFBTzs7Ozs7Ozs7O21CQUFjLEFBQVksQUFBRSxBQUFNLEFBQWMsQUFBQyxBQUV4RCxBQUFPOzs7Ozs7Ozs7d0JBQ0wsQUFBSzs7Ozs7O2dEQUNMLEFBQU8sQUFBSSxBQUFXLEFBR3ZCLEFBQU0sQUFBbUIsQUFBQyxBQUUzQixBQUFPOzs7Ozs7Ozs7b0JBQ0wsQUFBaUIsQUFDbEIsQUFBTSxBQUFlLEFBQUMsQUFFdkIsQUFBTzs7Ozs7Ozs7O3VCQUlMLEFBQW1COzs7Ozs7dUJBSW5CLEFBQXFCLEFBQ3RCLEFBQU0sQUFBNEIsQUFBQyxBQU1wQyxBQUFPOzs7Ozs7Ozs7MkNBQUUsQUFBTyxBQUFJLEFBQVU7Ozs7OzttQkFBRSxBQUFVLEFBQUksQUFBVzs7Ozs7O21CQUFFLEFBQW1COzs7Ozs7bUJBQUUsQUFBWTs7Ozs7O21CQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFrQixBQUFDOzs7Ozs7Ozs7cUJBR2hJLEFBQVksQUFBcUIsQUFBTSxBQUFlLEFBQUMsQUFDaEUsQUFBTzs7Ozs7Ozs7O21CQUFxQixBQUFjLEFBQUUsQUFBTSxBQUFjLEFBQUM7Ozs7QUF0SGpFLEFBQU8sQUFBaUIsQUFBQyxBQUV6QixBQUFPOztBQWlIUCxBQUFROztJQUFLLEFBQU0sQUFBTSxBQUFzQixBQUFDLEFBQ2hELEFBQU87Ozs7OztRQUFFLEFBQU0sQUFBRSxBQUFDLEFBQ2xCLEFBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4vbGliL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUnO1xuXG5leHBvcnQgeyBOVUxMX1JFRkVSRU5DRSwgVU5ERUZJTkVEX1JFRkVSRU5DRSwgUHJpbWl0aXZlUmVmZXJlbmNlLCBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4vbGliL3JlZmVyZW5jZXMnO1xuXG5leHBvcnQge1xuICAgZGVmYXVsdCBhcyBPcGNvZGVCdWlsZGVyRFNMXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBpbGFibGVMYXlvdXQsXG4gIGNvbXBpbGVMYXlvdXRcbn0gZnJvbSAnLi9saWIvY29tcGlsZXInO1xuXG5leHBvcnQge1xuICBDb21wb25lbnRCdWlsZGVyLFxuICBDb21wb25lbnRBcmdzXG59IGZyb20gJy4vbGliL29wY29kZS1idWlsZGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZSxcbiAgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsXG4gIENvbXBpbGVkRHluYW1pY0Jsb2NrLFxuICBDb21waWxlZER5bmFtaWNQcm9ncmFtXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2Jsb2Nrcyc7XG5cbmV4cG9ydCB7XG4gIEF0dHJpYnV0ZU1hbmFnZXIgYXMgSUF0dHJpYnV0ZU1hbmFnZXIsXG4gIEF0dHJpYnV0ZU1hbmFnZXIsXG4gIFByb3BlcnR5TWFuYWdlcixcbiAgSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUixcbiAgZGVmYXVsdE1hbmFnZXJzLFxuICBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnMsXG4gIGRlZmF1bHRQcm9wZXJ0eU1hbmFnZXJzLFxuICByZWFkRE9NQXR0clxufSBmcm9tICcuL2xpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcblxuZXhwb3J0IHtcbiAgZGVidWdTbGljZVxufSBmcm9tICcuL2xpYi9vcGNvZGVzJztcblxuZXhwb3J0IHtcbiAgbm9ybWFsaXplVGV4dFZhbHVlXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvY29udGVudCc7XG5cbmV4cG9ydCB7XG4gIHNldERlYnVnZ2VyQ2FsbGJhY2ssXG4gIHJlc2V0RGVidWdnZXJDYWxsYmFjayxcbiAgRGVidWdDYWxsYmFja1xufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2RlYnVnZ2VyJztcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBnZXREeW5hbWljVmFyXG59IGZyb20gJy4vbGliL2hlbHBlcnMvZ2V0LWR5bmFtaWMtdmFyJztcblxuZXhwb3J0IHtcbiAgQmxvY2tzIGFzIEJsb2NrTWFjcm9zLFxuICBJbmxpbmVzIGFzIElubGluZU1hY3JvcyxcbiAgQmxvY2tNYWNybyxcbiAgTWlzc2luZ0Jsb2NrTWFjcm8sXG4gIGNvbXBpbGVMaXN0LFxuICBleHByIGFzIGNvbXBpbGVFeHByZXNzaW9uXG59IGZyb20gJy4vbGliL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQge1xuICBDbGllbnRTaWRlLFxuICBDb21waWxhYmxlVGVtcGxhdGUsXG4gIFNjYW5uZWRCbG9jayxcbiAgU2Nhbm5lZFByb2dyYW0sXG4gIEJsb2NrLFxuICBQcm9ncmFtLFxuICBjb21waWxlU3RhdGVtZW50XG59IGZyb20gJy4vbGliL3NjYW5uZXInO1xuXG5leHBvcnQgeyBQdWJsaWNWTSBhcyBWTSwgVXBkYXRpbmdWTSwgUmVuZGVyUmVzdWx0LCBJdGVyYXRvclJlc3VsdCB9IGZyb20gJy4vbGliL3ZtJztcblxuZXhwb3J0IHtcbiAgSUFyZ3VtZW50cyBhcyBBcmd1bWVudHMsXG4gIElDYXB0dXJlZEFyZ3VtZW50cyBhcyBDYXB0dXJlZEFyZ3VtZW50cyxcbiAgSVBvc2l0aW9uYWxBcmd1bWVudHMgYXMgUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyBhcyBDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHMsXG4gIElOYW1lZEFyZ3VtZW50cyBhcyBOYW1lZEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkTmFtZWRBcmd1bWVudHMgYXMgQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyxcbn0gZnJvbSAnLi9saWIvdm0vYXJndW1lbnRzJztcblxuZXhwb3J0IHsgU2FmZVN0cmluZywgaXNTYWZlU3RyaW5nIH0gZnJvbSAnLi9saWIvdXBzZXJ0JztcblxuZXhwb3J0IHtcbiAgU2NvcGUsXG4gIGRlZmF1bHQgYXMgRW52aXJvbm1lbnQsXG4gIEhlbHBlcixcbiAgRHluYW1pY1Njb3BlLFxufSBmcm9tICcuL2xpYi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCB7XG4gIFBhcnRpYWxEZWZpbml0aW9uXG59IGZyb20gJy4vbGliL3BhcnRpYWwnO1xuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudENsYXNzLFxuICBDb21wb25lbnRNYW5hZ2VyLFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRMYXlvdXRCdWlsZGVyLFxuICBDb21wb25lbnRBdHRyc0J1aWxkZXIsXG4gIFByZXBhcmVkQXJndW1lbnRzLFxuICBpc0NvbXBvbmVudERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvY29tcG9uZW50L2ludGVyZmFjZXMnO1xuXG5leHBvcnQge1xuICBNb2RpZmllck1hbmFnZXJcbn0gZnJvbSAnLi9saWIvbW9kaWZpZXIvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgRE9NQ2hhbmdlcywgRE9NQ2hhbmdlcyBhcyBJRE9NQ2hhbmdlcywgRE9NVHJlZUNvbnN0cnVjdGlvbiwgaXNXaGl0ZXNwYWNlLCBpbnNlcnRIVE1MQmVmb3JlIH0gZnJvbSAnLi9saWIvZG9tL2hlbHBlcic7XG5pbXBvcnQgICogYXMgU2ltcGxlIGZyb20gJy4vbGliL2RvbS9pbnRlcmZhY2VzJztcbmV4cG9ydCB7IFNpbXBsZSB9O1xuZXhwb3J0IHsgRWxlbWVudFN0YWNrLCBFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4vbGliL2J1aWxkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMsIENvbmNyZXRlQm91bmRzIH0gZnJvbSAnLi9saWIvYm91bmRzJztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7NkNBRVMsQUFBTyxBQUFJLEFBQWUsQUFBNkIsQUFBTSxBQUFnQixBQUFDLEFBRXZGLEFBQU87Ozs7Ozs7Ozt1QkFBRSxBQUFjOzs7Ozs7dUJBQUUsQUFBbUI7Ozs7Ozt1QkFBRSxBQUFrQjs7Ozs7O3VCQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRWpILEFBQU87Ozs7Ozs7Ozs0Q0FDSixBQUFPLEFBQUksQUFBZ0IsQUFDN0IsQUFBTSxBQUFnQyxBQUFDLEFBRXhDLEFBQU87Ozs7Ozs7OztxQkFFTCxBQUFhLEFBQ2QsQUFBTSxBQUFnQixBQUFDLEFBT3hCLEFBQU87Ozs7Ozs7OzttQkFDTCxBQUFzQjs7Ozs7O21CQUN0QixBQUF1QixBQUd4QixBQUFNLEFBQXVCLEFBQUMsQUFFL0IsQUFBTzs7Ozs7Ozs7OzhCQUNMLEFBQWdCLEFBQUksQUFBaUI7Ozs7Ozs4QkFDckMsQUFBZ0I7Ozs7Ozs4QkFDaEIsQUFBZTs7Ozs7OzhCQUNmLEFBQTRCOzs7Ozs7OEJBQzVCLEFBQWU7Ozs7Ozs4QkFDZixBQUF3Qjs7Ozs7OzhCQUN4QixBQUF1Qjs7Ozs7OzhCQUN2QixBQUFXLEFBQ1osQUFBTSxBQUE4QixBQUFDLEFBRXRDLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFROzs7Ozs7b0JBQ1IsQUFBVSxBQUNYLEFBQU0sQUFBZSxBQUFDLEFBRXZCLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFrQixBQUNuQixBQUFNLEFBQWdDLEFBQUMsQUFFeEMsQUFBTzs7Ozs7Ozs7O3FCQUNMLEFBQW1COzs7Ozs7cUJBQ25CLEFBQXFCLEFBRXRCLEFBQU0sQUFBaUMsQUFBQyxBQUV6QyxBQUFPOzs7Ozs7Ozs7a0RBQ0wsQUFBTyxBQUFJLEFBQWEsQUFDekIsQUFBTSxBQUErQixBQUFDLEFBRXZDLEFBQU87Ozs7Ozs7OztzQkFDTCxBQUFNLEFBQUksQUFBVzs7Ozs7O3NCQUNyQixBQUFPLEFBQUksQUFBWTs7Ozs7O3NCQUd2QixBQUFXOzs7Ozs7c0JBQ1gsQUFBSSxBQUFJLEFBQWlCLEFBQzFCLEFBQU0sQUFBd0IsQUFBQyxBQUVoQyxBQUFPOzs7Ozs7Ozs7b0JBQ0wsQUFBVTs7Ozs7O29CQUNWLEFBQWtCOzs7Ozs7b0JBS2xCLEFBQWdCLEFBQ2pCLEFBQU0sQUFBZSxBQUFDLEFBRXZCLEFBQU87Ozs7Ozs7OztlQUFrQixBQUFVOzs7Ozs7ZUFBRSxBQUFZLEFBQWtCLEFBQU0sQUFBVSxBQUFDLEFBV3BGLEFBQU87Ozs7Ozs7OzttQkFBYyxBQUFZLEFBQUUsQUFBTSxBQUFjLEFBQUMsQUFFeEQsQUFBTzs7Ozs7Ozs7O3dCQUNMLEFBQUs7Ozs7OztnREFDTCxBQUFPLEFBQUksQUFBVyxBQUd2QixBQUFNLEFBQW1CLEFBQUMsQUFFM0IsQUFBTzs7Ozs7Ozs7O29CQUNMLEFBQWlCLEFBQ2xCLEFBQU0sQUFBZSxBQUFDLEFBRXZCLEFBQU87Ozs7Ozs7Ozt1QkFJTCxBQUFtQjs7Ozs7O3VCQUluQixBQUFxQixBQUN0QixBQUFNLEFBQTRCLEFBQUMsQUFNcEMsQUFBTzs7Ozs7Ozs7OzJDQUFFLEFBQU8sQUFBSSxBQUFVOzs7Ozs7bUJBQUUsQUFBVSxBQUFJLEFBQVc7Ozs7OzttQkFBRSxBQUFtQjs7Ozs7O21CQUFFLEFBQVk7Ozs7OzttQkFBRSxBQUFnQixBQUFFLEFBQU0sQUFBa0IsQUFBQzs7Ozs7Ozs7O3FCQUdoSSxBQUFZLEFBQXFCLEFBQU0sQUFBZSxBQUFDLEFBQ2hFLEFBQU87Ozs7Ozs7OzttQkFBcUIsQUFBYyxBQUFFLEFBQU0sQUFBYyxBQUFDOzs7O0FBdkhqRSxBQUFPLEFBQWlCLEFBQUMsQUFFekIsQUFBTzs7QUFrSFAsQUFBUTs7SUFBSyxBQUFNLEFBQU0sQUFBc0IsQUFBQyxBQUNoRCxBQUFPOzs7Ozs7UUFBRSxBQUFNLEFBQUUsQUFBQyxBQUNsQixBQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuL2xpYi9ib290c3RyYXAnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRlbXBsYXRlRmFjdG9yeSwgVGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZSB9IGZyb20gJy4vbGliL3RlbXBsYXRlJztcblxuZXhwb3J0IHsgTlVMTF9SRUZFUkVOQ0UsIFVOREVGSU5FRF9SRUZFUkVOQ0UsIFByaW1pdGl2ZVJlZmVyZW5jZSwgQ29uZGl0aW9uYWxSZWZlcmVuY2UgfSBmcm9tICcuL2xpYi9yZWZlcmVuY2VzJztcblxuZXhwb3J0IHtcbiAgIGRlZmF1bHQgYXMgT3Bjb2RlQnVpbGRlckRTTFxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5leHBvcnQge1xuICBDb21waWxhYmxlTGF5b3V0LFxuICBjb21waWxlTGF5b3V0XG59IGZyb20gJy4vbGliL2NvbXBpbGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcG9uZW50QnVpbGRlcixcbiAgQ29tcG9uZW50QXJnc1xufSBmcm9tICcuL2xpYi9vcGNvZGUtYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBpbGVkU3RhdGljVGVtcGxhdGUsXG4gIENvbXBpbGVkRHluYW1pY1RlbXBsYXRlLFxuICBDb21waWxlZER5bmFtaWNCbG9jayxcbiAgQ29tcGlsZWREeW5hbWljUHJvZ3JhbVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9ibG9ja3MnO1xuXG5leHBvcnQge1xuICBBdHRyaWJ1dGVNYW5hZ2VyIGFzIElBdHRyaWJ1dGVNYW5hZ2VyLFxuICBBdHRyaWJ1dGVNYW5hZ2VyLFxuICBQcm9wZXJ0eU1hbmFnZXIsXG4gIElOUFVUX1ZBTFVFX1BST1BFUlRZX01BTkFHRVIsXG4gIGRlZmF1bHRNYW5hZ2VycyxcbiAgZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzLFxuICBkZWZhdWx0UHJvcGVydHlNYW5hZ2VycyxcbiAgcmVhZERPTUF0dHJcbn0gZnJvbSAnLi9saWIvZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycyc7XG5cbmV4cG9ydCB7XG4gIFJlZ2lzdGVyLFxuICBkZWJ1Z1NsaWNlXG59IGZyb20gJy4vbGliL29wY29kZXMnO1xuXG5leHBvcnQge1xuICBub3JtYWxpemVUZXh0VmFsdWVcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcblxuZXhwb3J0IHtcbiAgc2V0RGVidWdnZXJDYWxsYmFjayxcbiAgcmVzZXREZWJ1Z2dlckNhbGxiYWNrLFxuICBEZWJ1Z0NhbGxiYWNrXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvZGVidWdnZXInO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGdldER5bmFtaWNWYXJcbn0gZnJvbSAnLi9saWIvaGVscGVycy9nZXQtZHluYW1pYy12YXInO1xuXG5leHBvcnQge1xuICBCbG9ja3MgYXMgQmxvY2tNYWNyb3MsXG4gIElubGluZXMgYXMgSW5saW5lTWFjcm9zLFxuICBCbG9ja01hY3JvLFxuICBNaXNzaW5nQmxvY2tNYWNybyxcbiAgY29tcGlsZUxpc3QsXG4gIGV4cHIgYXMgY29tcGlsZUV4cHJlc3Npb25cbn0gZnJvbSAnLi9saWIvc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCB7XG4gIENsaWVudFNpZGUsXG4gIENvbXBpbGFibGVUZW1wbGF0ZSxcbiAgU2Nhbm5lZEJsb2NrLFxuICBTY2FubmVkUHJvZ3JhbSxcbiAgQmxvY2ssXG4gIFByb2dyYW0sXG4gIGNvbXBpbGVTdGF0ZW1lbnRcbn0gZnJvbSAnLi9saWIvc2Nhbm5lcic7XG5cbmV4cG9ydCB7IFB1YmxpY1ZNIGFzIFZNLCBVcGRhdGluZ1ZNLCBSZW5kZXJSZXN1bHQsIEl0ZXJhdG9yUmVzdWx0IH0gZnJvbSAnLi9saWIvdm0nO1xuXG5leHBvcnQge1xuICBJQXJndW1lbnRzIGFzIEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkQXJndW1lbnRzIGFzIENhcHR1cmVkQXJndW1lbnRzLFxuICBJUG9zaXRpb25hbEFyZ3VtZW50cyBhcyBQb3NpdGlvbmFsQXJndW1lbnRzLFxuICBJQ2FwdHVyZWRQb3NpdGlvbmFsQXJndW1lbnRzIGFzIENhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgSU5hbWVkQXJndW1lbnRzIGFzIE5hbWVkQXJndW1lbnRzLFxuICBJQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyBhcyBDYXB0dXJlZE5hbWVkQXJndW1lbnRzLFxufSBmcm9tICcuL2xpYi92bS9hcmd1bWVudHMnO1xuXG5leHBvcnQgeyBTYWZlU3RyaW5nLCBpc1NhZmVTdHJpbmcgfSBmcm9tICcuL2xpYi91cHNlcnQnO1xuXG5leHBvcnQge1xuICBTY29wZSxcbiAgZGVmYXVsdCBhcyBFbnZpcm9ubWVudCxcbiAgSGVscGVyLFxuICBEeW5hbWljU2NvcGUsXG59IGZyb20gJy4vbGliL2Vudmlyb25tZW50JztcblxuZXhwb3J0IHtcbiAgUGFydGlhbERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvcGFydGlhbCc7XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50Q2xhc3MsXG4gIENvbXBvbmVudE1hbmFnZXIsXG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIENvbXBvbmVudExheW91dEJ1aWxkZXIsXG4gIENvbXBvbmVudEF0dHJzQnVpbGRlcixcbiAgUHJlcGFyZWRBcmd1bWVudHMsXG4gIGlzQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7XG4gIE1vZGlmaWVyTWFuYWdlclxufSBmcm9tICcuL2xpYi9tb2RpZmllci9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBET01DaGFuZ2VzLCBET01DaGFuZ2VzIGFzIElET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uLCBpc1doaXRlc3BhY2UsIGluc2VydEhUTUxCZWZvcmUgfSBmcm9tICcuL2xpYi9kb20vaGVscGVyJztcbmltcG9ydCAgKiBhcyBTaW1wbGUgZnJvbSAnLi9saWIvZG9tL2ludGVyZmFjZXMnO1xuZXhwb3J0IHsgU2ltcGxlIH07XG5leHBvcnQgeyBFbGVtZW50U3RhY2ssIEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi9saWIvYnVpbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcywgQ29uY3JldGVCb3VuZHMgfSBmcm9tICcuL2xpYi9ib3VuZHMnO1xuIl19

6

dist/commonjs/es2017/lib/builder.js

@@ -61,2 +61,3 @@ 'use strict';

this.defaultOperations = new _dom.SimpleElementOperations(env);
this.pushSimpleBlock();
this.elementStack.push(this.element);

@@ -268,5 +269,6 @@ this.nextSiblingStack.push(this.nextSibling);

let nextSibling = (0, _bounds2.clear)(this);
this.destroyables = null;
this.first = null;
this.last = null;
this.destroyables = null;
this.nesting = 0;
return nextSibling;

@@ -310,2 +312,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQWUsQUFBNkIsQUFBSyxBQUFFLEFBQU0sQUFBVSxBQUFDOztBQUlwRSxBQUFPLEFBQXVCLEFBQUssQUFBOEIsQUFBTSxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFRdkcsQUFBTyxBQUNMLEFBQXVCLEFBQ3hCLEFBQU0sQUFBd0IsQUFBQzs7QUFZaEM7QUFDRSxnQkFBb0IsQUFBVTtBQUFWLGFBQUksT0FBSixBQUFJLEFBQU0sQUFBSTtBQUFDO0FBRW5DLEFBQVM7QUFDUCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUNuQjtBQUFDLEFBQ0Y7O0FBRUQ7QUFDRSxnQkFBb0IsQUFBVTtBQUFWLGFBQUksT0FBSixBQUFJLEFBQU0sQUFBSTtBQUFDO0FBRW5DLEFBQVE7QUFDTixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUNuQjtBQUFDLEFBQ0YsQUFVRCxBQUFNOzs7QUFHSixnQkFBWSxBQUFjO0FBQ3hCLEFBQUksYUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQ3ZCO0FBQUM7QUFFRCxBQUFhO0FBQ1gsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBYSxBQUFFLEFBQUMsQUFDckM7QUFBQztBQUVELEFBQVM7QUFDUCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNqQztBQUFDO0FBRUQsQUFBUTtBQUNOLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQVEsQUFBRSxBQUFDLEFBQ2hDO0FBQUM7QUFFRCxBQUFNLFdBQUMsQUFBYztBQUNuQixBQUFJLGFBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQyxBQUN2QjtBQUFDLEFBQ0YsQUFFRCxBQUFNOzs7O0FBNEJKLGdCQUFZLEFBQWdCLEtBQUUsQUFBMEIsWUFB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QUFBQyxBQUFDLEFBQ3JEO0FBQUM7QUFFRCxBQUFhO0FBQ1gsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLEFBQUMsQUFDckI7QUFBQztBQUVELEFBQVM7QUFDUCxZQUFJLEFBQUksT0FBRyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksQUFBRSxBQUFDO0FBQ2pDLEFBQU0sZUFBQyxBQUFJLFFBQUksQUFBSSxLQUFDLEFBQVMsQUFBRSxBQUFDLEFBQ2xDO0FBQUM7QUFFRCxBQUFRO0FBQ04sWUFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEFBQUUsQUFBQztBQUNqQyxBQUFNLGVBQUMsQUFBSSxRQUFJLEFBQUksS0FBQyxBQUFRLEFBQUUsQUFBQyxBQUNqQztBQUFDO0FBRUQsQUFBVyxnQkFBQyxBQUFpQjtBQUMzQixBQUFNLDBCQUFDLEFBQUssT0FBRSxBQUFpRCxBQUFDLEFBQUMsQUFDbkU7QUFBQztBQUVELEFBQVk7QUFDVixBQUFNLDBCQUFDLEFBQUssT0FBRSxBQUFrRCxBQUFDLEFBQUMsQUFDcEU7QUFBQztBQUVELEFBQU8sWUFBQyxBQUFXO0FBQ2pCLEFBQU0sMEJBQUMsQUFBSyxPQUFFLEFBQXVELEFBQUMsQUFBQyxBQUN6RTtBQUFDO0FBRUQsQUFBUyxjQUFDLEFBQWUsU0FDekIsQ0FBQztBQUVELEFBQWMsbUJBQUMsQUFBZSxJQUM5QixDQUFDO0FBRUQsQUFBUSxhQUFDLEFBQW9CLFFBQzdCLENBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCb3VuZHMsIHsgQ3Vyc29yLCBEZXN0cm95YWJsZUJvdW5kcywgY2xlYXIgfSBmcm9tICcuL2JvdW5kcyc7XG5cbmltcG9ydCB7IERPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuL2RvbS9oZWxwZXInO1xuXG5pbXBvcnQgeyBPcHRpb24sIERlc3Ryb3lhYmxlLCBTdGFjaywgTGlua2VkTGlzdCwgTGlua2VkTGlzdE5vZGUsIGFzc2VydCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7IFZNIH0gZnJvbSAnLi92bSc7XG5cbmltcG9ydCB7IFZlcnNpb25lZFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmltcG9ydCB7XG4gIFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zXG59IGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9kb20nO1xuXG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi9kb20vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyc3ROb2RlIHtcbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFzdE5vZGUge1xuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+O1xufVxuXG5jbGFzcyBGaXJzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbm9kZTogTm9kZSkgeyB9XG5cbiAgZmlyc3ROb2RlKCk6IE5vZGUge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cbn1cblxuY2xhc3MgTGFzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbm9kZTogTm9kZSkgeyB9XG5cbiAgbGFzdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKTogdm9pZDtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYWdtZW50IGltcGxlbWVudHMgQm91bmRzIHtcbiAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kcztcblxuICBjb25zdHJ1Y3Rvcihib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIHVwZGF0ZShib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50U3RhY2sgaW1wbGVtZW50cyBDdXJzb3Ige1xuICBwdWJsaWMgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG4gIHB1YmxpYyBkb206IERPTVRyZWVDb25zdHJ1Y3Rpb247XG4gIHB1YmxpYyB1cGRhdGVPcGVyYXRpb25zOiBET01DaGFuZ2VzO1xuICBwdWJsaWMgY29uc3RydWN0aW5nOiBPcHRpb248U2ltcGxlLkVsZW1lbnQ+ID0gbnVsbDtcbiAgcHVibGljIG9wZXJhdGlvbnM6IE9wdGlvbjxFbGVtZW50T3BlcmF0aW9ucz4gPSBudWxsO1xuICBwdWJsaWMgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQ7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuXG4gIHByaXZhdGUgZWxlbWVudFN0YWNrID0gbmV3IFN0YWNrPFNpbXBsZS5FbGVtZW50PigpO1xuICBwcml2YXRlIG5leHRTaWJsaW5nU3RhY2sgPSBuZXcgU3RhY2s8T3B0aW9uPFNpbXBsZS5Ob2RlPj4oKTtcbiAgcHJpdmF0ZSBibG9ja1N0YWNrID0gbmV3IFN0YWNrPFRyYWNrZXI+KCk7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0T3BlcmF0aW9uczogRWxlbWVudE9wZXJhdGlvbnM7XG5cbiAgc3RhdGljIGZvckluaXRpYWxSZW5kZXIoZW52OiBFbnZpcm9ubWVudCwgcGFyZW50Tm9kZTogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgcmV0dXJuIG5ldyBFbGVtZW50U3RhY2soZW52LCBwYXJlbnROb2RlLCBuZXh0U2libGluZyk7XG4gIH1cblxuICBzdGF0aWMgcmVzdW1lKGVudjogRW52aXJvbm1lbnQsIHRyYWNrZXI6IFRyYWNrZXIsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSB0cmFja2VyLnBhcmVudEVsZW1lbnQoKTtcblxuICAgIGxldCBzdGFjayA9IG5ldyBFbGVtZW50U3RhY2soZW52LCBwYXJlbnROb2RlLCBuZXh0U2libGluZyk7XG4gICAgc3RhY2sucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcblxuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIHBhcmVudE5vZGU6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPikge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuZG9tID0gZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZU9wZXJhdGlvbnMgPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5lbGVtZW50ID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmc7XG5cbiAgICB0aGlzLmRlZmF1bHRPcGVyYXRpb25zID0gbmV3IFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zKGVudik7XG5cbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2godGhpcy5uZXh0U2libGluZyk7XG4gIH1cblxuICBleHBlY3RDb25zdHJ1Y3RpbmcobWV0aG9kOiBzdHJpbmcpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmNvbnN0cnVjdGluZywgYCR7bWV0aG9kfSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hpbGUgY29uc3RydWN0aW5nIGFuIGVsZW1lbnRgKTtcbiAgfVxuXG4gIGV4cGVjdE9wZXJhdGlvbnMobWV0aG9kOiBzdHJpbmcpOiBFbGVtZW50T3BlcmF0aW9ucyB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLm9wZXJhdGlvbnMsIGAke21ldGhvZH0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG4gIH1cblxuICBibG9jaygpOiBUcmFja2VyIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tTdGFjay5jdXJyZW50LCBcIkV4cGVjdGVkIGEgY3VycmVudCBibG9jayB0cmFja2VyXCIpO1xuICB9XG5cbiAgcG9wRWxlbWVudCgpIHtcbiAgICBsZXQgeyBlbGVtZW50U3RhY2ssIG5leHRTaWJsaW5nU3RhY2sgfSAgPSB0aGlzO1xuXG4gICAgbGV0IHRvcEVsZW1lbnQgPSBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgbmV4dFNpYmxpbmdTdGFjay5wb3AoKTtcbiAgICAvLyBMT0dHRVIuZGVidWcoYC0+IGVsZW1lbnQgc3RhY2sgJHt0aGlzLmVsZW1lbnRTdGFjay50b0FycmF5KCkubWFwKGUgPT4gZS50YWdOYW1lKS5qb2luKCcsICcpfWApO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gZXhwZWN0KGVsZW1lbnRTdGFjay5jdXJyZW50LCBcImNhbid0IHBvcCBwYXN0IHRoZSBsYXN0IGVsZW1lbnRcIik7XG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nU3RhY2suY3VycmVudDtcblxuICAgIHJldHVybiB0b3BFbGVtZW50O1xuICB9XG5cbiAgcHVzaFNpbXBsZUJsb2NrKCk6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IFNpbXBsZUJsb2NrVHJhY2tlcih0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hVcGRhdGFibGVCbG9jaygpOiBVcGRhdGFibGVUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBVcGRhdGFibGVCbG9ja1RyYWNrZXIodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwcml2YXRlIHB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcjogVHJhY2tlciwgaXNSZW1vdGUgPSBmYWxzZSkge1xuICAgIGxldCBjdXJyZW50ID0gdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQ7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY3VycmVudC5uZXdEZXN0cm95YWJsZSh0cmFja2VyKTtcblxuICAgICAgaWYgKCFpc1JlbW90ZSkge1xuICAgICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hCbG9ja0xpc3QobGlzdDogTGlua2VkTGlzdDxMaW5rZWRMaXN0Tm9kZSAmIEJvdW5kcyAmIERlc3Ryb3lhYmxlPik6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IEJsb2NrTGlzdFRyYWNrZXIodGhpcy5lbGVtZW50LCBsaXN0KTtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuYmxvY2tTdGFjay5jdXJyZW50O1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQubmV3RGVzdHJveWFibGUodHJhY2tlcik7XG4gICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHBvcEJsb2NrKCk6IFRyYWNrZXIge1xuICAgIHRoaXMuYmxvY2soKS5maW5hbGl6ZSh0aGlzKTtcblxuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja1N0YWNrLnBvcCgpLCBcIkV4cGVjdGVkIHBvcEJsb2NrIHRvIHJldHVybiBhIGJsb2NrXCIpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQodGFnOiBzdHJpbmcsIG9wZXJhdGlvbnMgPSB0aGlzLmRlZmF1bHRPcGVyYXRpb25zKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIGxldCBlbGVtZW50ID0gdGhpcy5kb20uY3JlYXRlRWxlbWVudCh0YWcsIHRoaXMuZWxlbWVudCk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdGluZyA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gb3BlcmF0aW9ucztcblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIGxldCBwYXJlbnQgID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBlbGVtZW50ID0gZXhwZWN0KHRoaXMuY29uc3RydWN0aW5nLCBgZmx1c2hFbGVtZW50IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG5cbiAgICB0aGlzLmRvbS5pbnNlcnRCZWZvcmUocGFyZW50LCBlbGVtZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcblxuICAgIHRoaXMuY29uc3RydWN0aW5nID0gbnVsbDtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy5wdXNoRWxlbWVudChlbGVtZW50KTtcbiAgICB0aGlzLmJsb2NrKCkub3BlbkVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBwdXNoUmVtb3RlRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsKSB7XG4gICAgdGhpcy5wdXNoRWxlbWVudChlbGVtZW50LCBuZXh0U2libGluZyk7XG5cbiAgICBsZXQgdHJhY2tlciA9IG5ldyBSZW1vdGVCbG9ja1RyYWNrZXIoZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIsIHRydWUpO1xuICB9XG5cbiAgcG9wUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLnBvcEJsb2NrKCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGwpIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuZWxlbWVudFN0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgLy8gTE9HR0VSLmRlYnVnKGAtPiBlbGVtZW50IHN0YWNrICR7dGhpcy5lbGVtZW50U3RhY2sudG9BcnJheSgpLm1hcChlID0+IGUudGFnTmFtZSkuam9pbignLCAnKX1gKTtcblxuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZztcbiAgICB0aGlzLm5leHRTaWJsaW5nU3RhY2sucHVzaChuZXh0U2libGluZyk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuYmxvY2soKS5uZXdEZXN0cm95YWJsZShkKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYmxvY2soKS5uZXdCb3VuZHMoYm91bmRzKTtcbiAgfVxuXG4gIGFwcGVuZFRleHQoc3RyaW5nOiBzdHJpbmcpOiBTaW1wbGUuVGV4dCB7XG4gICAgbGV0IHsgZG9tIH0gPSB0aGlzO1xuICAgIGxldCB0ZXh0ID0gZG9tLmNyZWF0ZVRleHROb2RlKHN0cmluZyk7XG4gICAgZG9tLmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIHRleHQsIHRoaXMubmV4dFNpYmxpbmcpO1xuICAgIHRoaXMuYmxvY2soKS5uZXdOb2RlKHRleHQpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgYXBwZW5kQ29tbWVudChzdHJpbmc6IHN0cmluZyk6IFNpbXBsZS5Db21tZW50IHtcbiAgICBsZXQgeyBkb20gfSA9IHRoaXM7XG4gICAgbGV0IGNvbW1lbnQgPSBkb20uY3JlYXRlQ29tbWVudChzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCBjb21tZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrKCkubmV3Tm9kZShjb21tZW50KTtcbiAgICByZXR1cm4gY29tbWVudDtcbiAgfVxuXG4gIHNldFN0YXRpY0F0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldFN0YXRpY0F0dHJpYnV0ZScpLmFkZFN0YXRpY0F0dHJpYnV0ZSh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0U3RhdGljQXR0cmlidXRlJyksIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldFN0YXRpY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldFN0YXRpY0F0dHJpYnV0ZU5TJykuYWRkU3RhdGljQXR0cmlidXRlTlModGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldFN0YXRpY0F0dHJpYnV0ZU5TJyksIG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldER5bmFtaWNBdHRyaWJ1dGUnKS5hZGREeW5hbWljQXR0cmlidXRlKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXREeW5hbWljQXR0cmlidXRlJyksIG5hbWUsIHJlZmVyZW5jZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBzZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0RHluYW1pY0F0dHJpYnV0ZU5TJykuYWRkRHluYW1pY0F0dHJpYnV0ZU5TKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXREeW5hbWljQXR0cmlidXRlTlMnKSwgbmFtZXNwYWNlLCBuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIHRoaXMuYmxvY2soKS5jbG9zZUVsZW1lbnQoKTtcbiAgICB0aGlzLnBvcEVsZW1lbnQoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXIgZXh0ZW5kcyBEZXN0cm95YWJsZUJvdW5kcyB7XG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogdm9pZDtcbiAgY2xvc2VFbGVtZW50KCk6IHZvaWQ7XG4gIG5ld05vZGUobm9kZTogU2ltcGxlLk5vZGUpOiB2b2lkO1xuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpOiB2b2lkO1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk6IHZvaWQ7XG4gIGZpbmFsaXplKHN0YWNrOiBFbGVtZW50U3RhY2spOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlQmxvY2tUcmFja2VyIGltcGxlbWVudHMgVHJhY2tlciB7XG4gIHByb3RlY3RlZCBmaXJzdDogT3B0aW9uPEZpcnN0Tm9kZT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgbGFzdDogT3B0aW9uPExhc3ROb2RlPiA9IG51bGw7XG4gIHByb3RlY3RlZCBkZXN0cm95YWJsZXM6IE9wdGlvbjxEZXN0cm95YWJsZVtdPiA9IG51bGw7XG4gIHByb3RlY3RlZCBuZXN0aW5nID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU2ltcGxlLkVsZW1lbnQpe31cblxuICBkZXN0cm95KCkge1xuICAgIGxldCB7IGRlc3Ryb3lhYmxlcyB9ID0gdGhpcztcblxuICAgIGlmIChkZXN0cm95YWJsZXMgJiYgZGVzdHJveWFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPGRlc3Ryb3lhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZXN0cm95YWJsZXNbaV0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmZpcnN0ICYmIHRoaXMuZmlyc3QuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5sYXN0ICYmIHRoaXMubGFzdC5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICAgIHRoaXMubmV3Tm9kZShlbGVtZW50KTtcbiAgICB0aGlzLm5lc3RpbmcrKztcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICB0aGlzLm5lc3RpbmctLTtcbiAgfVxuXG4gIG5ld05vZGUobm9kZTogTm9kZSkge1xuICAgIGlmICh0aGlzLm5lc3RpbmcgIT09IDApIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgdGhpcy5maXJzdCA9IG5ldyBGaXJzdChub2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3QgPSBuZXcgTGFzdChub2RlKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcykge1xuICAgIGlmICh0aGlzLm5lc3RpbmcgIT09IDApIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgdGhpcy5maXJzdCA9IGJvdW5kcztcbiAgICB9XG5cbiAgICB0aGlzLmxhc3QgPSBib3VuZHM7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuZGVzdHJveWFibGVzID0gdGhpcy5kZXN0cm95YWJsZXMgfHwgW107XG4gICAgdGhpcy5kZXN0cm95YWJsZXMucHVzaChkKTtcbiAgfVxuXG4gIGZpbmFsaXplKHN0YWNrOiBFbGVtZW50U3RhY2spIHtcbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHN0YWNrLmFwcGVuZENvbW1lbnQoJycpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZW1vdGVCbG9ja1RyYWNrZXIgZXh0ZW5kcyBTaW1wbGVCbG9ja1RyYWNrZXIge1xuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcblxuICAgIGNsZWFyKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRhYmxlVHJhY2tlciBleHRlbmRzIFRyYWNrZXIge1xuICByZXNldChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0YWJsZUJsb2NrVHJhY2tlciBleHRlbmRzIFNpbXBsZUJsb2NrVHJhY2tlciBpbXBsZW1lbnRzIFVwZGF0YWJsZVRyYWNrZXIge1xuICByZXNldChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IHsgZGVzdHJveWFibGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlc3Ryb3lhYmxlcyAmJiBkZXN0cm95YWJsZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpPTA7IGk8ZGVzdHJveWFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudi5kaWREZXN0cm95KGRlc3Ryb3lhYmxlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5leHRTaWJsaW5nID0gY2xlYXIodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IG51bGw7XG4gICAgdGhpcy5maXJzdCA9IG51bGw7XG4gICAgdGhpcy5sYXN0ID0gbnVsbDtcblxuICAgIHJldHVybiBuZXh0U2libGluZztcbiAgfVxufVxuXG5jbGFzcyBCbG9ja0xpc3RUcmFja2VyIGltcGxlbWVudHMgVHJhY2tlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTaW1wbGUuRWxlbWVudCwgcHJpdmF0ZSBib3VuZExpc3Q6IExpbmtlZExpc3Q8TGlua2VkTGlzdE5vZGUgJiBCb3VuZHMgJiBEZXN0cm95YWJsZT4pIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLmJvdW5kTGlzdCA9IGJvdW5kTGlzdDtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ib3VuZExpc3QuZm9yRWFjaE5vZGUobm9kZSA9PiBub2RlLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgaGVhZCA9IHRoaXMuYm91bmRMaXN0LmhlYWQoKTtcbiAgICByZXR1cm4gaGVhZCAmJiBoZWFkLmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IHRhaWwgPSB0aGlzLmJvdW5kTGlzdC50YWlsKCk7XG4gICAgcmV0dXJuIHRhaWwgJiYgdGFpbC5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoX2VsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3Qgb3BlbkVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjbG9zZUVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgbmV3Tm9kZShfbm9kZTogTm9kZSkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgbm9kZSBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBuZXdCb3VuZHMoX2JvdW5kczogQm91bmRzKSB7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShfZDogRGVzdHJveWFibGUpIHtcbiAgfVxuXG4gIGZpbmFsaXplKF9zdGFjazogRWxlbWVudFN0YWNrKSB7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQWUsQUFBNkIsQUFBSyxBQUFFLEFBQU0sQUFBVSxBQUFDOztBQUlwRSxBQUFPLEFBQXVCLEFBQUssQUFBOEIsQUFBTSxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFRdkcsQUFBTyxBQUNMLEFBQXVCLEFBQ3hCLEFBQU0sQUFBd0IsQUFBQzs7QUFZaEM7QUFDRSxnQkFBb0IsQUFBVTtBQUFWLGFBQUksT0FBSixBQUFJLEFBQU0sQUFBSTtBQUFDO0FBRW5DLEFBQVM7QUFDUCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUNuQjtBQUFDLEFBQ0Y7O0FBRUQ7QUFDRSxnQkFBb0IsQUFBVTtBQUFWLGFBQUksT0FBSixBQUFJLEFBQU0sQUFBSTtBQUFDO0FBRW5DLEFBQVE7QUFDTixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUNuQjtBQUFDLEFBQ0YsQUFVRCxBQUFNOzs7QUFHSixnQkFBWSxBQUFjO0FBQ3hCLEFBQUksYUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQ3ZCO0FBQUM7QUFFRCxBQUFhO0FBQ1gsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBYSxBQUFFLEFBQUMsQUFDckM7QUFBQztBQUVELEFBQVM7QUFDUCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNqQztBQUFDO0FBRUQsQUFBUTtBQUNOLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQVEsQUFBRSxBQUFDLEFBQ2hDO0FBQUM7QUFFRCxBQUFNLFdBQUMsQUFBYztBQUNuQixBQUFJLGFBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQyxBQUN2QjtBQUFDLEFBQ0YsQUFFRCxBQUFNOzs7O0FBNEJKLGdCQUFZLEFBQWdCLEtBQUUsQUFBMEIsWUFB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QU87QUFDTCxBQUFJLGFBQUMsQUFBUyxVQUFDLEFBQVcsWUFBQyxBQUFJLFFBQUksQUFBSSxLQUFDLEFBQU8sQUFBRSxBQUFDLEFBQUMsQUFDckQ7QUFBQztBQUVELEFBQWE7QUFDWCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUNyQjtBQUFDO0FBRUQsQUFBUztBQUNQLFlBQUksQUFBSSxPQUFHLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSSxBQUFFLEFBQUM7QUFDakMsQUFBTSxlQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBUyxBQUFFLEFBQUMsQUFDbEM7QUFBQztBQUVELEFBQVE7QUFDTixZQUFJLEFBQUksT0FBRyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksQUFBRSxBQUFDO0FBQ2pDLEFBQU0sZUFBQyxBQUFJLFFBQUksQUFBSSxLQUFDLEFBQVEsQUFBRSxBQUFDLEFBQ2pDO0FBQUM7QUFFRCxBQUFXLGdCQUFDLEFBQWlCO0FBQzNCLEFBQU0sMEJBQUMsQUFBSyxPQUFFLEFBQWlELEFBQUMsQUFBQyxBQUNuRTtBQUFDO0FBRUQsQUFBWTtBQUNWLEFBQU0sMEJBQUMsQUFBSyxPQUFFLEFBQWtELEFBQUMsQUFBQyxBQUNwRTtBQUFDO0FBRUQsQUFBTyxZQUFDLEFBQVc7QUFDakIsQUFBTSwwQkFBQyxBQUFLLE9BQUUsQUFBdUQsQUFBQyxBQUFDLEFBQ3pFO0FBQUM7QUFFRCxBQUFTLGNBQUMsQUFBZSxTQUN6QixDQUFDO0FBRUQsQUFBYyxtQkFBQyxBQUFlLElBQzlCLENBQUM7QUFFRCxBQUFRLGFBQUMsQUFBb0IsUUFDN0IsQ0FBQyxBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJvdW5kcywgeyBDdXJzb3IsIERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciB9IGZyb20gJy4vYm91bmRzJztcblxuaW1wb3J0IHsgRE9NQ2hhbmdlcywgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4vZG9tL2hlbHBlcic7XG5cbmltcG9ydCB7IE9wdGlvbiwgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaW5rZWRMaXN0Tm9kZSwgYXNzZXJ0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50JztcblxuaW1wb3J0IHsgVk0gfSBmcm9tICcuL3ZtJztcblxuaW1wb3J0IHsgVmVyc2lvbmVkUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcblxuaW1wb3J0IHtcbiAgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnNcbn0gZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2RvbSc7XG5cbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2RvbS9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBGaXJzdE5vZGUge1xuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXN0Tm9kZSB7XG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmNsYXNzIEZpcnN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBmaXJzdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5jbGFzcyBMYXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBsYXN0Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE9wZXJhdGlvbnMge1xuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbik6IHZvaWQ7XG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhZ21lbnQgaW1wbGVtZW50cyBCb3VuZHMge1xuICBwcml2YXRlIGJvdW5kczogQm91bmRzO1xuXG4gIGNvbnN0cnVjdG9yKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgdXBkYXRlKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTdGFjayBpbXBsZW1lbnRzIEN1cnNvciB7XG4gIHB1YmxpYyBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbiAgcHVibGljIGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbjtcbiAgcHVibGljIHVwZGF0ZU9wZXJhdGlvbnM6IERPTUNoYW5nZXM7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rpbmc6IE9wdGlvbjxTaW1wbGUuRWxlbWVudD4gPSBudWxsO1xuICBwdWJsaWMgb3BlcmF0aW9uczogT3B0aW9uPEVsZW1lbnRPcGVyYXRpb25zPiA9IG51bGw7XG4gIHB1YmxpYyBlbGVtZW50OiBTaW1wbGUuRWxlbWVudDtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG5cbiAgcHJpdmF0ZSBlbGVtZW50U3RhY2sgPSBuZXcgU3RhY2s8U2ltcGxlLkVsZW1lbnQ+KCk7XG4gIHByaXZhdGUgbmV4dFNpYmxpbmdTdGFjayA9IG5ldyBTdGFjazxPcHRpb248U2ltcGxlLk5vZGU+PigpO1xuICBwcml2YXRlIGJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8VHJhY2tlcj4oKTtcblxuICBwcml2YXRlIGRlZmF1bHRPcGVyYXRpb25zOiBFbGVtZW50T3BlcmF0aW9ucztcblxuICBzdGF0aWMgZm9ySW5pdGlhbFJlbmRlcihlbnY6IEVudmlyb25tZW50LCBwYXJlbnROb2RlOiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICByZXR1cm4gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyByZXN1bWUoZW52OiBFbnZpcm9ubWVudCwgdHJhY2tlcjogVHJhY2tlciwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRyYWNrZXIucGFyZW50RWxlbWVudCgpO1xuXG4gICAgbGV0IHN0YWNrID0gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgICBzdGFjay5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgcGFyZW50Tm9kZTogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5kb20gPSBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0aW9ucyA9IGVudi5nZXRET00oKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBwYXJlbnROb2RlO1xuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZztcblxuICAgIHRoaXMuZGVmYXVsdE9wZXJhdGlvbnMgPSBuZXcgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnMoZW52KTtcblxuICAgIHRoaXMucHVzaFNpbXBsZUJsb2NrKCk7XG4gICAgdGhpcy5lbGVtZW50U3RhY2sucHVzaCh0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMubmV4dFNpYmxpbmdTdGFjay5wdXNoKHRoaXMubmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgZXhwZWN0Q29uc3RydWN0aW5nKG1ldGhvZDogc3RyaW5nKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5jb25zdHJ1Y3RpbmcsIGAke21ldGhvZH0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG4gIH1cblxuICBleHBlY3RPcGVyYXRpb25zKG1ldGhvZDogc3RyaW5nKTogRWxlbWVudE9wZXJhdGlvbnMge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5vcGVyYXRpb25zLCBgJHttZXRob2R9IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuICB9XG5cbiAgYmxvY2soKTogVHJhY2tlciB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmJsb2NrU3RhY2suY3VycmVudCwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgYmxvY2sgdHJhY2tlclwiKTtcbiAgfVxuXG4gIHBvcEVsZW1lbnQoKSB7XG4gICAgbGV0IHsgZWxlbWVudFN0YWNrLCBuZXh0U2libGluZ1N0YWNrIH0gID0gdGhpcztcblxuICAgIGxldCB0b3BFbGVtZW50ID0gZWxlbWVudFN0YWNrLnBvcCgpO1xuICAgIG5leHRTaWJsaW5nU3RhY2sucG9wKCk7XG4gICAgLy8gTE9HR0VSLmRlYnVnKGAtPiBlbGVtZW50IHN0YWNrICR7dGhpcy5lbGVtZW50U3RhY2sudG9BcnJheSgpLm1hcChlID0+IGUudGFnTmFtZSkuam9pbignLCAnKX1gKTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGV4cGVjdChlbGVtZW50U3RhY2suY3VycmVudCwgXCJjYW4ndCBwb3AgcGFzdCB0aGUgbGFzdCBlbGVtZW50XCIpO1xuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZ1N0YWNrLmN1cnJlbnQ7XG5cbiAgICByZXR1cm4gdG9wRWxlbWVudDtcbiAgfVxuXG4gIHB1c2hTaW1wbGVCbG9jaygpOiBUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBTaW1wbGVCbG9ja1RyYWNrZXIodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwdXNoVXBkYXRhYmxlQmxvY2soKTogVXBkYXRhYmxlVHJhY2tlciB7XG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgVXBkYXRhYmxlQmxvY2tUcmFja2VyKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQmxvY2tUcmFja2VyKHRyYWNrZXI6IFRyYWNrZXIsIGlzUmVtb3RlID0gZmFsc2UpIHtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuYmxvY2tTdGFjay5jdXJyZW50O1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQubmV3RGVzdHJveWFibGUodHJhY2tlcik7XG5cbiAgICAgIGlmICghaXNSZW1vdGUpIHtcbiAgICAgICAgY3VycmVudC5uZXdCb3VuZHModHJhY2tlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ibG9ja1N0YWNrLnB1c2godHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwdXNoQmxvY2tMaXN0KGxpc3Q6IExpbmtlZExpc3Q8TGlua2VkTGlzdE5vZGUgJiBCb3VuZHMgJiBEZXN0cm95YWJsZT4pOiBUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBCbG9ja0xpc3RUcmFja2VyKHRoaXMuZWxlbWVudCwgbGlzdCk7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmJsb2NrU3RhY2suY3VycmVudDtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjdXJyZW50Lm5ld0Rlc3Ryb3lhYmxlKHRyYWNrZXIpO1xuICAgICAgY3VycmVudC5uZXdCb3VuZHModHJhY2tlcik7XG4gICAgfVxuXG4gICAgdGhpcy5ibG9ja1N0YWNrLnB1c2godHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwb3BCbG9jaygpOiBUcmFja2VyIHtcbiAgICB0aGlzLmJsb2NrKCkuZmluYWxpemUodGhpcyk7XG5cbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tTdGFjay5wb3AoKSwgXCJFeHBlY3RlZCBwb3BCbG9jayB0byByZXR1cm4gYSBibG9ja1wiKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KHRhZzogc3RyaW5nLCBvcGVyYXRpb25zID0gdGhpcy5kZWZhdWx0T3BlcmF0aW9ucyk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQodGFnLCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RpbmcgPSBlbGVtZW50O1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICBsZXQgcGFyZW50ICA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgZWxlbWVudCA9IGV4cGVjdCh0aGlzLmNvbnN0cnVjdGluZywgYGZsdXNoRWxlbWVudCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuXG4gICAgdGhpcy5kb20uaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxlbWVudCwgdGhpcy5uZXh0U2libGluZyk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdGluZyA9IG51bGw7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCk7XG4gICAgdGhpcy5ibG9jaygpLm9wZW5FbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgcHVzaFJlbW90ZUVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+ID0gbnVsbCkge1xuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xuXG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgUmVtb3RlQmxvY2tUcmFja2VyKGVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyLCB0cnVlKTtcbiAgfVxuXG4gIHBvcFJlbW90ZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5wb3BCbG9jaygpO1xuICAgIHRoaXMucG9wRWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgIC8vIExPR0dFUi5kZWJ1ZyhgLT4gZWxlbWVudCBzdGFjayAke3RoaXMuZWxlbWVudFN0YWNrLnRvQXJyYXkoKS5tYXAoZSA9PiBlLnRhZ05hbWUpLmpvaW4oJywgJyl9YCk7XG5cbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmc7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2gobmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmJsb2NrKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJsb2NrKCkubmV3Qm91bmRzKGJvdW5kcyk7XG4gIH1cblxuICBhcHBlbmRUZXh0KHN0cmluZzogc3RyaW5nKTogU2ltcGxlLlRleHQge1xuICAgIGxldCB7IGRvbSB9ID0gdGhpcztcbiAgICBsZXQgdGV4dCA9IGRvbS5jcmVhdGVUZXh0Tm9kZShzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCB0ZXh0LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrKCkubmV3Tm9kZSh0ZXh0KTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGFwcGVuZENvbW1lbnQoc3RyaW5nOiBzdHJpbmcpOiBTaW1wbGUuQ29tbWVudCB7XG4gICAgbGV0IHsgZG9tIH0gPSB0aGlzO1xuICAgIGxldCBjb21tZW50ID0gZG9tLmNyZWF0ZUNvbW1lbnQoc3RyaW5nKTtcbiAgICBkb20uaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgY29tbWVudCwgdGhpcy5uZXh0U2libGluZyk7XG4gICAgdGhpcy5ibG9jaygpLm5ld05vZGUoY29tbWVudCk7XG4gICAgcmV0dXJuIGNvbW1lbnQ7XG4gIH1cblxuICBzZXRTdGF0aWNBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXRTdGF0aWNBdHRyaWJ1dGUnKS5hZGRTdGF0aWNBdHRyaWJ1dGUodGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldFN0YXRpY0F0dHJpYnV0ZScpLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRTdGF0aWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXRTdGF0aWNBdHRyaWJ1dGVOUycpLmFkZFN0YXRpY0F0dHJpYnV0ZU5TKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXRTdGF0aWNBdHRyaWJ1dGVOUycpLCBuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldER5bmFtaWNBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXREeW5hbWljQXR0cmlidXRlJykuYWRkRHluYW1pY0F0dHJpYnV0ZSh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0RHluYW1pY0F0dHJpYnV0ZScpLCBuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgc2V0RHluYW1pY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldER5bmFtaWNBdHRyaWJ1dGVOUycpLmFkZER5bmFtaWNBdHRyaWJ1dGVOUyh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0RHluYW1pY0F0dHJpYnV0ZU5TJyksIG5hbWVzcGFjZSwgbmFtZSwgcmVmZXJlbmNlLCBpc1RydXN0aW5nKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICB0aGlzLmJsb2NrKCkuY2xvc2VFbGVtZW50KCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja2VyIGV4dGVuZHMgRGVzdHJveWFibGVCb3VuZHMge1xuICBvcGVuRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCk6IHZvaWQ7XG4gIGNsb3NlRWxlbWVudCgpOiB2b2lkO1xuICBuZXdOb2RlKG5vZGU6IFNpbXBsZS5Ob2RlKTogdm9pZDtcbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKTogdm9pZDtcbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpOiB2b2lkO1xuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUJsb2NrVHJhY2tlciBpbXBsZW1lbnRzIFRyYWNrZXIge1xuICBwcm90ZWN0ZWQgZmlyc3Q6IE9wdGlvbjxGaXJzdE5vZGU+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGxhc3Q6IE9wdGlvbjxMYXN0Tm9kZT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgZGVzdHJveWFibGVzOiBPcHRpb248RGVzdHJveWFibGVbXT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgbmVzdGluZyA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFNpbXBsZS5FbGVtZW50KXt9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBsZXQgeyBkZXN0cm95YWJsZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVzdHJveWFibGVzICYmIGRlc3Ryb3lhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxkZXN0cm95YWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVzdHJveWFibGVzW2ldLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5maXJzdCAmJiB0aGlzLmZpcnN0LmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMubGFzdCAmJiB0aGlzLmxhc3QubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICB0aGlzLm5ld05vZGUoZWxlbWVudCk7XG4gICAgdGhpcy5uZXN0aW5nKys7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5uZXN0aW5nLS07XG4gIH1cblxuICBuZXdOb2RlKG5vZGU6IE5vZGUpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBuZXcgRmlyc3Qobm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gbmV3IExhc3Qobm9kZSk7XG4gIH1cblxuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gYm91bmRzO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IHRoaXMuZGVzdHJveWFibGVzIHx8IFtdO1xuICAgIHRoaXMuZGVzdHJveWFibGVzLnB1c2goZCk7XG4gIH1cblxuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKSB7XG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICBzdGFjay5hcHBlbmRDb21tZW50KCcnKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUmVtb3RlQmxvY2tUcmFja2VyIGV4dGVuZHMgU2ltcGxlQmxvY2tUcmFja2VyIHtcbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG5cbiAgICBjbGVhcih0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRyYWNrZXIgZXh0ZW5kcyBUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgZXh0ZW5kcyBTaW1wbGVCbG9ja1RyYWNrZXIgaW1wbGVtZW50cyBVcGRhdGFibGVUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIGxldCB7IGRlc3Ryb3lhYmxlcyB9ID0gdGhpcztcblxuICAgIGlmIChkZXN0cm95YWJsZXMgJiYgZGVzdHJveWFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPGRlc3Ryb3lhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbnYuZGlkRGVzdHJveShkZXN0cm95YWJsZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXh0U2libGluZyA9IGNsZWFyKHRoaXMpO1xuXG4gICAgdGhpcy5maXJzdCA9IG51bGw7XG4gICAgdGhpcy5sYXN0ID0gbnVsbDtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IG51bGw7XG4gICAgdGhpcy5uZXN0aW5nID0gMDtcblxuICAgIHJldHVybiBuZXh0U2libGluZztcbiAgfVxufVxuXG5jbGFzcyBCbG9ja0xpc3RUcmFja2VyIGltcGxlbWVudHMgVHJhY2tlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTaW1wbGUuRWxlbWVudCwgcHJpdmF0ZSBib3VuZExpc3Q6IExpbmtlZExpc3Q8TGlua2VkTGlzdE5vZGUgJiBCb3VuZHMgJiBEZXN0cm95YWJsZT4pIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLmJvdW5kTGlzdCA9IGJvdW5kTGlzdDtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ib3VuZExpc3QuZm9yRWFjaE5vZGUobm9kZSA9PiBub2RlLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgaGVhZCA9IHRoaXMuYm91bmRMaXN0LmhlYWQoKTtcbiAgICByZXR1cm4gaGVhZCAmJiBoZWFkLmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IHRhaWwgPSB0aGlzLmJvdW5kTGlzdC50YWlsKCk7XG4gICAgcmV0dXJuIHRhaWwgJiYgdGFpbC5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoX2VsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3Qgb3BlbkVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjbG9zZUVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgbmV3Tm9kZShfbm9kZTogTm9kZSkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgbm9kZSBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBuZXdCb3VuZHMoX2JvdW5kczogQm91bmRzKSB7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShfZDogRGVzdHJveWFibGUpIHtcbiAgfVxuXG4gIGZpbmFsaXplKF9zdGFjazogRWxlbWVudFN0YWNrKSB7XG4gIH1cbn1cbiJdfQ==

@@ -24,3 +24,3 @@ 'use strict';

let definition = vm.constants.getOther(_definition);
let stack = vm.evalStack;
let stack = vm.stack;
stack.push(definition);

@@ -30,3 +30,3 @@ stack.push(definition.manager);

_opcodes.APPEND_OPCODES.add(56 /* PushDynamicComponentManager */, vm => {
let stack = vm.evalStack;
let stack = vm.stack;
let reference = stack.pop();

@@ -41,10 +41,10 @@ let cache = (0, _reference.isConst)(reference) ? undefined : new _reference.ReferenceCache(reference);

});
_opcodes.APPEND_OPCODES.add(57 /* SetComponentState */, (vm, { op1: local }) => {
let stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(57 /* InitializeComponentState */, vm => {
let stack = vm.stack;
let manager = stack.pop();
let definition = stack.pop();
vm.setLocal(local, { definition, manager, component: null });
stack.push({ definition, manager, component: null });
});
_opcodes.APPEND_OPCODES.add(58 /* PushArgs */, (vm, { op1: positional, op2: synthetic }) => {
let stack = vm.evalStack;
let stack = vm.stack;
_arguments2.default.setup(stack, positional, !!synthetic);

@@ -54,4 +54,4 @@ stack.push(_arguments2.default);

_opcodes.APPEND_OPCODES.add(59 /* PrepareArgs */, (vm, { op1: _state }) => {
let stack = vm.evalStack;
let { definition, manager } = vm.getLocal(_state);
let stack = vm.stack;
let { definition, manager } = vm.fetchValue(_state);
let args = stack.pop();

@@ -78,5 +78,5 @@ let preparedArgs = manager.prepareArgs(definition, args);

let definition, manager;
let args = vm.evalStack.pop();
let args = vm.stack.pop();
let dynamicScope = vm.dynamicScope();
let state = ({ definition, manager } = vm.getLocal(_state));
let state = ({ definition, manager } = vm.fetchValue(_state));
let hasDefaultBlock = flags & 0b01;

@@ -88,3 +88,3 @@ let component = manager.create(vm.env, definition, args, dynamicScope, vm.getSelf(), !!hasDefaultBlock);

_opcodes.APPEND_OPCODES.add(61 /* RegisterComponentDestructor */, (vm, { op1: _state }) => {
let { manager, component } = vm.getLocal(_state);
let { manager, component } = vm.fetchValue(_state);
let destructor = manager.getDestructor(component);

@@ -95,23 +95,23 @@ if (destructor) vm.newDestroyable(destructor);

vm.beginCacheGroup();
vm.stack().pushSimpleBlock();
vm.elements().pushSimpleBlock();
});
_opcodes.APPEND_OPCODES.add(62 /* PushComponentOperations */, vm => {
vm.evalStack.push(new _dom.ComponentElementOperations(vm.env));
vm.stack.push(new _dom.ComponentElementOperations(vm.env));
});
_opcodes.APPEND_OPCODES.add(67 /* DidCreateElement */, (vm, { op1: _state }) => {
let { manager, component } = vm.getLocal(_state);
let { manager, component } = vm.fetchValue(_state);
let action = 'DidCreateElementOpcode#evaluate';
manager.didCreateElement(component, vm.stack().expectConstructing(action), vm.stack().expectOperations(action));
manager.didCreateElement(component, vm.elements().expectConstructing(action), vm.elements().expectOperations(action));
});
_opcodes.APPEND_OPCODES.add(63 /* GetComponentSelf */, (vm, { op1: _state }) => {
let state = vm.getLocal(_state);
vm.evalStack.push(state.manager.getSelf(state.component));
let state = vm.fetchValue(_state);
vm.stack.push(state.manager.getSelf(state.component));
});
_opcodes.APPEND_OPCODES.add(64 /* GetComponentLayout */, (vm, { op1: _state }) => {
let { manager, definition, component } = vm.getLocal(_state);
vm.evalStack.push(manager.layoutFor(definition, component, vm.env));
let { manager, definition, component } = vm.fetchValue(_state);
vm.stack.push(manager.layoutFor(definition, component, vm.env));
});
_opcodes.APPEND_OPCODES.add(69 /* DidRenderLayout */, (vm, { op1: _state }) => {
let { manager, component } = vm.getLocal(_state);
let bounds = vm.stack().popBlock();
_opcodes.APPEND_OPCODES.add(68 /* DidRenderLayout */, (vm, { op1: _state }) => {
let { manager, component } = vm.fetchValue(_state);
let bounds = vm.elements().popBlock();
manager.didRenderLayout(component, bounds);

@@ -166,2 +166,2 @@ vm.env.didCreate(component, manager);

exports.DidUpdateLayoutOpcode = DidUpdateLayoutOpcode;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUMzRCxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBTSxBQUFDOztBQUU5QixBQUFPLEFBQStCLEFBQU0sQUFBb0IsQUFBQyxBQUlqRSxBQUFPLEFBQUUsQUFBYyxBQUFZLEFBQU0sQUFBZSxBQUFDOzs7O0FBQ3pELEFBQU8sQUFBRSxBQUEwQixBQUFFLEFBQU0sQUFBTyxBQUFDOztBQUVuRCxBQUFPLEFBQ0wsQUFBWSxBQUNaLEFBQWMsQUFHZCxBQUFPLEFBQ1AsQUFBTyxBQUNSLEFBQU0sQUFBb0IsQUFBQzs7OztBQUU1QixBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUF1Qiw0QkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFXLEFBQUU7QUFDbkUsUUFBSSxBQUFVLGFBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFRLFNBQThCLEFBQVcsQUFBQyxBQUFDO0FBQ2pGLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLEFBQUM7QUFFekIsQUFBSyxVQUFDLEFBQUksS0FBQyxBQUFVLEFBQUMsQUFBQztBQUN2QixBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFPLEFBQUMsQUFBQyxBQUNqQztBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQThCLG1DQUFFLEFBQUU7QUFDbkQsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsQUFBQztBQUN6QixRQUFJLEFBQVMsWUFBRyxBQUFLLE1BQUMsQUFBRyxBQUF1RCxBQUFDO0FBQ2pGLFFBQUksQUFBSyxRQUFHLEFBQU8sd0JBQUMsQUFBUyxBQUFDLGFBQUcsQUFBUyxZQUFHLEFBQUksQUFBYyw4QkFBOEIsQUFBUyxBQUFD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QUMsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDbEMsQUFBQyxBQUNKO0FBTFM7QUFLUixBQUNGLEFBRUQsQUFBTTs7O01BQTZCLEFBQVEsQUFBYztBQUl2RCxnQkFDVSxBQUFvQyxTQUNwQyxBQUFvQixXQUNwQixBQUFjO0FBRXRCLEFBQUssQUFBRSxBQUFDO0FBSkEsYUFBTyxVQUFQLEFBQU8sQUFBNkI7QUFDcEMsYUFBUyxZQUFULEFBQVMsQUFBVztBQUNwQixhQUFNLFNBQU4sQUFBTSxBQUFRO0FBTmpCLGFBQUksT0FBRyxBQUFtQixBQUFDO0FBQzNCLGFBQUcsQUFBUSxBQUFZLEFBQUMsQUFRL0I7QUFBQztBQUVELEFBQVEsYUFBQyxBQUFjO0FBQ3JCLFlBQUksRUFBRSxBQUFPLFNBQUUsQUFBUyxXQUFFLEFBQU0sQUFBRSxXQUFHLEFBQUksQUFBQztBQUUxQyxBQUFPLGdCQUFDLEFBQWUsZ0JBQUMsQUFBUyxXQUFFLEFBQU0sQUFBQyxBQUFDO0FBRTNDLEFBQUUsV0FBQyxBQUFHLElBQUMsQUFBUyxVQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN2QztBQUFDLEFBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQXNzZXJ0IH0gZnJvbSAnLi92bSc7XG5pbXBvcnQgeyBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IEFSR1MsIHsgQXJndW1lbnRzLCBJQXJndW1lbnRzIH0gZnJvbSAnLi4vLi4vdm0vYXJndW1lbnRzJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ29tcG9uZW50TWFuYWdlciwgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IER5bmFtaWNTY29wZSB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCBCb3VuZHMgZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENPTlNUQU5UX1RBRyxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsXG4gIFRhZyxcbiAgY29tYmluZSxcbiAgaXNDb25zdFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE1hbmFnZXIsICh2bSwgeyBvcDE6IF9kZWZpbml0aW9uIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24gPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihfZGVmaW5pdGlvbik7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcblxuICBzdGFjay5wdXNoKGRlZmluaXRpb24pO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24ubWFuYWdlcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlciwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCByZWZlcmVuY2UgPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxDb21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4+PigpO1xuICBsZXQgY2FjaGUgPSBpc0NvbnN0KHJlZmVyZW5jZSkgPyB1bmRlZmluZWQgOiBuZXcgUmVmZXJlbmNlQ2FjaGU8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihyZWZlcmVuY2UpO1xuICBsZXQgZGVmaW5pdGlvbiA9IGNhY2hlID8gY2FjaGUucGVlaygpIDogcmVmZXJlbmNlLnZhbHVlKCk7XG5cbiAgc3RhY2sucHVzaChkZWZpbml0aW9uKTtcbiAgc3RhY2sucHVzaChkZWZpbml0aW9uLm1hbmFnZXIpO1xuXG4gIGlmIChjYWNoZSkge1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG59KTtcblxuaW50ZXJmYWNlIEluaXRpYWxDb21wb25lbnRTdGF0ZTxUPiB7XG4gIGRlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb248VD47XG4gIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8VD47XG4gIGNvbXBvbmVudDogbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRTdGF0ZTxUPiB7XG4gIGRlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb248VD47XG4gIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8VD47XG4gIGNvbXBvbmVudDogVDtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlNldENvbXBvbmVudFN0YXRlLCAodm0sIHsgb3AxOiBsb2NhbCB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcblxuICBsZXQgbWFuYWdlciA9IHN0YWNrLnBvcCgpO1xuICBsZXQgZGVmaW5pdGlvbiA9IHN0YWNrLnBvcCgpO1xuXG4gIHZtLnNldExvY2FsKGxvY2FsLCB7IGRlZmluaXRpb24sIG1hbmFnZXIsIGNvbXBvbmVudDogbnVsbCB9KTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaEFyZ3MsICh2bSwgeyBvcDE6IHBvc2l0aW9uYWwsIG9wMjogc3ludGhldGljIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBBUkdTLnNldHVwKHN0YWNrLCBwb3NpdGlvbmFsLCAhIXN5bnRoZXRpYyk7XG4gIHN0YWNrLnB1c2goQVJHUyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlByZXBhcmVBcmdzLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmdldExvY2FsPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG5cbiAgbGV0IHByZXBhcmVkQXJncyA9IG1hbmFnZXIucHJlcGFyZUFyZ3MoZGVmaW5pdGlvbiwgYXJncyk7XG5cbiAgaWYgKHByZXBhcmVkQXJncykge1xuICAgIGFyZ3MuY2xlYXIoKTtcblxuICAgIGxldCB7IHBvc2l0aW9uYWwsIG5hbWVkIH0gPSBwcmVwYXJlZEFyZ3M7XG5cbiAgICBsZXQgcG9zaXRpb25hbENvdW50ID0gcG9zaXRpb25hbC5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8cG9zaXRpb25hbENvdW50OyBpKyspIHtcbiAgICAgIHN0YWNrLnB1c2gocG9zaXRpb25hbFtpXSk7XG4gICAgfVxuXG4gICAgbGV0IG5hbWVzID0gT2JqZWN0LmtleXMobmFtZWQpO1xuICAgIGxldCBuYW1lZENvdW50ID0gbmFtZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPG5hbWVkQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChuYW1lZFtuYW1lc1tpXV0pO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2gobmFtZXMpO1xuICAgIGFyZ3Muc2V0dXAoc3RhY2ssIHBvc2l0aW9uYWxDb3VudCwgdHJ1ZSk7XG4gIH1cblxuICBzdGFjay5wdXNoKGFyZ3MpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5DcmVhdGVDb21wb25lbnQsICh2bSwgeyBvcDE6IGZsYWdzLCBvcDI6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCBkZWZpbml0aW9uLCBtYW5hZ2VyO1xuICBsZXQgYXJncyA9IHZtLmV2YWxTdGFjay5wb3A8SUFyZ3VtZW50cz4oKTtcbiAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLmR5bmFtaWNTY29wZSgpO1xuICBsZXQgc3RhdGUgPSB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmdldExvY2FsPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBoYXNEZWZhdWx0QmxvY2sgPSBmbGFncyAmIDBiMDE7XG5cbiAgbGV0IGNvbXBvbmVudCA9IG1hbmFnZXIuY3JlYXRlKHZtLmVudiwgZGVmaW5pdGlvbiwgYXJncywgZHluYW1pY1Njb3BlLCB2bS5nZXRTZWxmKCksICEhaGFzRGVmYXVsdEJsb2NrKTtcbiAgKHN0YXRlIGFzIENvbXBvbmVudFN0YXRlPHR5cGVvZiBjb21wb25lbnQ+KS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlQ29tcG9uZW50T3Bjb2RlKGFyZ3MudGFnLCBkZWZpbml0aW9uLm5hbWUsIGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvciwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBkZXN0cnVjdG9yID0gbWFuYWdlci5nZXREZXN0cnVjdG9yKGNvbXBvbmVudCk7XG4gIGlmIChkZXN0cnVjdG9yKSB2bS5uZXdEZXN0cm95YWJsZShkZXN0cnVjdG9yKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQmVnaW5Db21wb25lbnRUcmFuc2FjdGlvbiwgdm0gPT4ge1xuICB2bS5iZWdpbkNhY2hlR3JvdXAoKTtcbiAgdm0uc3RhY2soKS5wdXNoU2ltcGxlQmxvY2soKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE9wZXJhdGlvbnMsIHZtID0+IHtcbiAgdm0uZXZhbFN0YWNrLnB1c2gobmV3IENvbXBvbmVudEVsZW1lbnRPcGVyYXRpb25zKHZtLmVudikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EaWRDcmVhdGVFbGVtZW50LCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQgfSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGFjdGlvbiA9ICdEaWRDcmVhdGVFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgbWFuYWdlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdm0uc3RhY2soKS5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0uc3RhY2soKS5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRTZWxmLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhdGUgPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5ldmFsU3RhY2sucHVzaChzdGF0ZS5tYW5hZ2VyLmdldFNlbGYoc3RhdGUuY29tcG9uZW50KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldENvbXBvbmVudExheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgZGVmaW5pdGlvbiwgY29tcG9uZW50IH0gPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5ldmFsU3RhY2sucHVzaChtYW5hZ2VyLmxheW91dEZvcihkZWZpbml0aW9uLCBjb21wb25lbnQsIHZtLmVudikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EaWRSZW5kZXJMYXlvdXQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGNvbXBvbmVudCB9ID0gdm0uZ2V0TG9jYWw8Q29tcG9uZW50U3RhdGU8T3BhcXVlPj4oX3N0YXRlKTtcbiAgbGV0IGJvdW5kcyA9IHZtLnN0YWNrKCkucG9wQmxvY2soKTtcblxuICBtYW5hZ2VyLmRpZFJlbmRlckxheW91dChjb21wb25lbnQsIGJvdW5kcyk7XG5cbiAgdm0uZW52LmRpZENyZWF0ZShjb21wb25lbnQsIG1hbmFnZXIpO1xuXG4gIHZtLnVwZGF0ZVdpdGgobmV3IERpZFVwZGF0ZUxheW91dE9wY29kZShtYW5hZ2VyLCBjb21wb25lbnQsIGJvdW5kcykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db21taXRDb21wb25lbnRUcmFuc2FjdGlvbiwgdm0gPT4gdm0uY29tbWl0Q2FjaGVHcm91cCgpKTtcblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUNvbXBvbmVudE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInVwZGF0ZS1jb21wb25lbnRcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0YWc6IFRhZyxcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgIHByaXZhdGUgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBsZXQgY29tcG9uZW50VGFnID0gbWFuYWdlci5nZXRUYWcoY29tcG9uZW50KTtcblxuICAgIGlmIChjb21wb25lbnRUYWcpIHtcbiAgICAgIHRoaXMudGFnID0gY29tYmluZShbdGFnLCBjb21wb25lbnRUYWddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgfVxuICB9XG5cbiAgZXZhbHVhdGUoX3ZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgY29tcG9uZW50LCBtYW5hZ2VyLCBkeW5hbWljU2NvcGUgfSA9IHRoaXM7XG5cbiAgICBtYW5hZ2VyLnVwZGF0ZShjb21wb25lbnQsIGR5bmFtaWNTY29wZSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy5uYW1lKV1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaWRVcGRhdGVMYXlvdXRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJkaWQtdXBkYXRlLWxheW91dFwiO1xuICBwdWJsaWMgdGFnOiBUYWcgPSBDT05TVEFOVF9UQUc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPENvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBwcml2YXRlIGJvdW5kczogQm91bmRzXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IG1hbmFnZXIsIGNvbXBvbmVudCwgYm91bmRzIH0gPSB0aGlzO1xuXG4gICAgbWFuYWdlci5kaWRVcGRhdGVMYXlvdXQoY29tcG9uZW50LCBib3VuZHMpO1xuXG4gICAgdm0uZW52LmRpZFVwZGF0ZShjb21wb25lbnQsIG1hbmFnZXIpO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBYyxBQUFrQixBQUFjLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQy9FLEFBQU8sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFNLEFBQUM7O0FBRTlCLEFBQU8sQUFBK0IsQUFBTSxBQUFvQixBQUFDOzs7O0FBSWpFLEFBQU8sQUFBRSxBQUEwQixBQUFFLEFBQU0sQUFBTyxBQUFDOztBQUVuRCxBQUFPLEFBQ0wsQUFBWSxBQUNaLEFBQWMsQUFHZCxBQUFPLEFBQ1AsQUFBTyxBQUNSLEFBQU0sQUFBb0IsQUFBQzs7OztBQUU1QixBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUF1Qiw0QkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFXLEFBQUU7QUFDbkUsUUFBSSxBQUFVLGFBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFRLFNBQThCLEFBQVcsQUFBQyxBQUFDO0FBQ2pGLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUM7QUFFckIsQUFBSyxVQUFDLEFBQUksS0FBQyxBQUFVLEFBQUMsQUFBQztBQUN2QixBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFPLEFBQUMsQUFBQyxBQUNqQztBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQThCLG1DQUFFLEFBQUU7QUFDbkQsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssQUFBQztBQUNyQixRQUFJLEFBQVMsWUFBRyxBQUFLLE1BQUMsQUFBRyxBQUF1RCxBQUFDO0FBQ2pGLFFBQUksQUFBSyxRQUFHLEFBQU8sd0JBQUMsQUFBUyxBQUFDLGFBQUcsQUFBUyxZQUFHLEFBQUksQUFBYyw4QkFBOEIsQUFBUyxBQUFDLEFBQUM7QUFDeEcsUUFBSSxBQUFVLGFBQUcsQUFB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QUNGLEFBRUQsQUFBTTs7O01BQTZCLEFBQVEsQUFBYztBQUl2RCxnQkFDVSxBQUFvQyxTQUNwQyxBQUFvQixXQUNwQixBQUFjO0FBRXRCLEFBQUssQUFBRSxBQUFDO0FBSkEsYUFBTyxVQUFQLEFBQU8sQUFBNkI7QUFDcEMsYUFBUyxZQUFULEFBQVMsQUFBVztBQUNwQixhQUFNLFNBQU4sQUFBTSxBQUFRO0FBTmpCLGFBQUksT0FBRyxBQUFtQixBQUFDO0FBQzNCLGFBQUcsQUFBUSxBQUFZLEFBQUMsQUFRL0I7QUFBQztBQUVELEFBQVEsYUFBQyxBQUFjO0FBQ3JCLFlBQUksRUFBRSxBQUFPLFNBQUUsQUFBUyxXQUFFLEFBQU0sQUFBRSxXQUFHLEFBQUksQUFBQztBQUUxQyxBQUFPLGdCQUFDLEFBQWUsZ0JBQUMsQUFBUyxXQUFFLEFBQU0sQUFBQyxBQUFDO0FBRTNDLEFBQUUsV0FBQyxBQUFHLElBQUMsQUFBUyxVQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN2QztBQUFDLEFBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AsIE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgQVJHUywgeyBBcmd1bWVudHMsIElBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHluYW1pY1Njb3BlIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IEJvdW5kcyBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENPTlNUQU5UX1RBRyxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsXG4gIFRhZyxcbiAgY29tYmluZSxcbiAgaXNDb25zdFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE1hbmFnZXIsICh2bSwgeyBvcDE6IF9kZWZpbml0aW9uIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24gPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihfZGVmaW5pdGlvbik7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgcmVmZXJlbmNlID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+Pj4oKTtcbiAgbGV0IGNhY2hlID0gaXNDb25zdChyZWZlcmVuY2UpID8gdW5kZWZpbmVkIDogbmV3IFJlZmVyZW5jZUNhY2hlPENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPj4ocmVmZXJlbmNlKTtcbiAgbGV0IGRlZmluaXRpb24gPSBjYWNoZSA/IGNhY2hlLnBlZWsoKSA6IHJlZmVyZW5jZS52YWx1ZSgpO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcblxuICBpZiAoY2FjaGUpIHtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbmludGVyZmFjZSBJbml0aWFsQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IFQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Jbml0aWFsaXplQ29tcG9uZW50U3RhdGUsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG5cbiAgbGV0IG1hbmFnZXIgPSBzdGFjay5wb3AoKTtcbiAgbGV0IGRlZmluaXRpb24gPSBzdGFjay5wb3AoKTtcblxuICBzdGFjay5wdXNoKHsgZGVmaW5pdGlvbiwgbWFuYWdlciwgY29tcG9uZW50OiBudWxsIH0pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQXJncywgKHZtLCB7IG9wMTogcG9zaXRpb25hbCwgb3AyOiBzeW50aGV0aWMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgQVJHUy5zZXR1cChzdGFjaywgcG9zaXRpb25hbCwgISFzeW50aGV0aWMpO1xuICBzdGFjay5wdXNoKEFSR1MpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QcmVwYXJlQXJncywgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmZldGNoVmFsdWU8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcblxuICBsZXQgcHJlcGFyZWRBcmdzID0gbWFuYWdlci5wcmVwYXJlQXJncyhkZWZpbml0aW9uLCBhcmdzKTtcblxuICBpZiAocHJlcGFyZWRBcmdzKSB7XG4gICAgYXJncy5jbGVhcigpO1xuXG4gICAgbGV0IHsgcG9zaXRpb25hbCwgbmFtZWQgfSA9IHByZXBhcmVkQXJncztcblxuICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGk9MDsgaTxwb3NpdGlvbmFsQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChwb3NpdGlvbmFsW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZXMgPSBPYmplY3Qua2V5cyhuYW1lZCk7XG4gICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bmFtZWRDb3VudDsgaSsrKSB7XG4gICAgICBzdGFjay5wdXNoKG5hbWVkW25hbWVzW2ldXSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaChuYW1lcyk7XG4gICAgYXJncy5zZXR1cChzdGFjaywgcG9zaXRpb25hbENvdW50LCB0cnVlKTtcbiAgfVxuXG4gIHN0YWNrLnB1c2goYXJncyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNyZWF0ZUNvbXBvbmVudCwgKHZtLCB7IG9wMTogZmxhZ3MsIG9wMjogX3N0YXRlIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24sIG1hbmFnZXI7XG4gIGxldCBhcmdzID0gdm0uc3RhY2sucG9wPElBcmd1bWVudHM+KCk7XG4gIGxldCBkeW5hbWljU2NvcGUgPSB2bS5keW5hbWljU2NvcGUoKTtcbiAgbGV0IHN0YXRlID0geyBkZWZpbml0aW9uLCBtYW5hZ2VyIH0gPSB2bS5mZXRjaFZhbHVlPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBoYXNEZWZhdWx0QmxvY2sgPSBmbGFncyAmIDBiMDE7XG5cbiAgbGV0IGNvbXBvbmVudCA9IG1hbmFnZXIuY3JlYXRlKHZtLmVudiwgZGVmaW5pdGlvbiwgYXJncywgZHluYW1pY1Njb3BlLCB2bS5nZXRTZWxmKCksICEhaGFzRGVmYXVsdEJsb2NrKTtcbiAgKHN0YXRlIGFzIENvbXBvbmVudFN0YXRlPHR5cGVvZiBjb21wb25lbnQ+KS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlQ29tcG9uZW50T3Bjb2RlKGFyZ3MudGFnLCBkZWZpbml0aW9uLm5hbWUsIGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvciwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IoY29tcG9uZW50KTtcbiAgaWYgKGRlc3RydWN0b3IpIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB7XG4gIHZtLmJlZ2luQ2FjaGVHcm91cCgpO1xuICB2bS5lbGVtZW50cygpLnB1c2hTaW1wbGVCbG9jaygpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50T3BlcmF0aW9ucywgdm0gPT4ge1xuICB2bS5zdGFjay5wdXNoKG5ldyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyh2bS5lbnYpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRGlkQ3JlYXRlRWxlbWVudCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGFjdGlvbiA9ICdEaWRDcmVhdGVFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgbWFuYWdlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdm0uZWxlbWVudHMoKS5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0uZWxlbWVudHMoKS5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRTZWxmLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhdGUgPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLnN0YWNrLnB1c2goc3RhdGUubWFuYWdlci5nZXRTZWxmKHN0YXRlLmNvbXBvbmVudCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRMYXlvdXQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGRlZmluaXRpb24sIGNvbXBvbmVudCB9ID0gdm0uZmV0Y2hWYWx1ZTxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5zdGFjay5wdXNoKG1hbmFnZXIubGF5b3V0Rm9yKGRlZmluaXRpb24sIGNvbXBvbmVudCwgdm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZFJlbmRlckxheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBib3VuZHMgPSB2bS5lbGVtZW50cygpLnBvcEJsb2NrKCk7XG5cbiAgbWFuYWdlci5kaWRSZW5kZXJMYXlvdXQoY29tcG9uZW50LCBib3VuZHMpO1xuXG4gIHZtLmVudi5kaWRDcmVhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcblxuICB2bS51cGRhdGVXaXRoKG5ldyBEaWRVcGRhdGVMYXlvdXRPcGNvZGUobWFuYWdlciwgY29tcG9uZW50LCBib3VuZHMpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWl0Q29tcG9uZW50VHJhbnNhY3Rpb24sIHZtID0+IHZtLmNvbW1pdENhY2hlR3JvdXAoKSk7XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDb21wb25lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtY29tcG9uZW50XCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFnOiBUYWcsXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBwcml2YXRlIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBwcml2YXRlIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgbGV0IGNvbXBvbmVudFRhZyA9IG1hbmFnZXIuZ2V0VGFnKGNvbXBvbmVudCk7XG5cbiAgICBpZiAoY29tcG9uZW50VGFnKSB7XG4gICAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW3RhZywgY29tcG9uZW50VGFnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKF92bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlIH0gPSB0aGlzO1xuXG4gICAgbWFuYWdlci51cGRhdGUoY29tcG9uZW50LCBkeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMubmFtZSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlkVXBkYXRlTGF5b3V0T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLXVwZGF0ZS1sYXlvdXRcIjtcbiAgcHVibGljIHRhZzogVGFnID0gQ09OU1RBTlRfVEFHO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kc1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQsIGJvdW5kcyB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIuZGlkVXBkYXRlTGF5b3V0KGNvbXBvbmVudCwgYm91bmRzKTtcblxuICAgIHZtLmVudi5kaWRVcGRhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcbiAgfVxufVxuIl19

@@ -23,3 +23,3 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(26 /* DynamicContent */, (vm, { op1: append }) => {
_opcodes.APPEND_OPCODES.add(25 /* DynamicContent */, (vm, { op1: append }) => {
let opcode = vm.constants.getOther(append);

@@ -66,3 +66,3 @@ opcode.evaluate(vm);

evaluate(vm) {
let reference = vm.evalStack.pop();
let reference = vm.stack.pop();
let normalized = this.normalize(reference);

@@ -76,3 +76,3 @@ let value, cache;

}
let stack = vm.stack();
let stack = vm.elements();
let upsert = this.insert(vm.env.getAppendOperations(), stack, value);

@@ -97,10 +97,10 @@ let bounds = new _builder.Fragment(upsert.bounds);

if (this.deopted) {
vm.pushEvalFrame(this.start);
vm.goto(this.start);
} else {
let value = vm.evalStack.pop();
let value = vm.stack.pop();
if ((0, _interfaces.isComponentDefinition)(value)) {
this.deopt(vm.env);
vm.pushEvalFrame(this.start);
vm.goto(this.start);
} else {
vm.evalStack.push(value);
vm.stack.push(value);
super.evaluate(vm);

@@ -361,2 +361,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFlLEFBS2IsQUFBWSxBQUNaLEFBQU0sQUFDTixBQUFRLEFBRVIsQUFBYyxBQUNkLEFBQWMsQUFDZixBQUFNLEFBQWMsQUFBQzs7QUFDdEIsQUFBTyxBQUFFLEFBQXFCLEFBQUUsQUFBTSxBQUE0QixBQUFDOztBQUVuRSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUczRCxBQUFPLEFBQXFDLEFBQWMsQUFBRSxBQUFZLEFBQWMsQUFBVSxBQUFFLEFBQU8sQUFBRSxBQUFHLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUUzSSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQUssQUFBRSxBQUFNLEFBQWMsQUFBQzs7QUFDN0MsQUFBTyxBQUFFLEFBQVEsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFDekMsQUFBTyxBQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRXhELEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7O0FBRW5ELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWlCLHNCQUFFLENBQUMsQUFBRSxJQUFFLEVBQUUsQUFBRyxLQUFFLEFBQU0sQUFBRTtBQUN4RCxRQUFJLEFBQU0sU0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBQyxBQUFNLEFBQW1DLEFBQUM7QUFDN0UsQUFBTSxXQUFDLEFBQVEsU0FBQyxBQUFFLEFBQUMsQUFBQyxBQUN0QjtBQUFDLEFBQUMsQUFBQztBQUVILGlCQUFpQixBQUFhO0FBQzVCLEFBQU0sV0FBQyxBQUFLLFVBQUssQUFBSSxRQUFJLEFBQUssVUFBSyxBQUFTLGFBQUksT0FBTyxBQUFLLE1BQUMsQUFBVSxBQUFDLGdCQUFLLEFBQVUsQUFBQyxBQUMxRjtBQUFDLEFBRUQsQUFBTTs0QkFBNkIsQUFBYTtBQUM5QyxBQUFF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QWMsUUFBRSxBQUF3QjtBQUNqRixBQUFNLGVBQUMsQUFBYyw0QkFBQyxBQUFHLEtBQUUsQUFBTSxRQUFFLEFBQUssQUFBQyxBQUFDLEFBQzVDO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVcHNlcnQsIHtcbiAgSW5zZXJ0aW9uLFxuICBDYXV0aW91c0luc2VydGlvbixcbiAgVHJ1c3RpbmdJbnNlcnRpb24sXG5cbiAgaXNTYWZlU3RyaW5nLFxuICBpc05vZGUsXG4gIGlzU3RyaW5nLFxuXG4gIGNhdXRpb3VzSW5zZXJ0LFxuICB0cnVzdGluZ0luc2VydFxufSBmcm9tICcuLi8uLi91cHNlcnQnO1xuaW1wb3J0IHsgaXNDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4uLy4uL2RvbS9oZWxwZXInO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNLCBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgVHJ5T3Bjb2RlIH0gZnJvbSAnLi4vLi4vdm0vdXBkYXRlJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSwgUmVmZXJlbmNlQ2FjaGUsIFVwZGF0YWJsZVRhZywgVGFnV3JhcHBlciwgaXNNb2RpZmllZCwgaXNDb25zdCwgbWFwIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBDdXJzb3IsIGNsZWFyIH0gZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNDb250ZW50LCAodm0sIHsgb3AxOiBhcHBlbmQgfSkgPT4ge1xuICBsZXQgb3Bjb2RlID0gdm0uY29uc3RhbnRzLmdldE90aGVyKGFwcGVuZCkgYXMgQXBwZW5kRHluYW1pY09wY29kZTxJbnNlcnRpb24+O1xuICBvcGNvZGUuZXZhbHVhdGUodm0pO1xufSk7XG5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWVbJ3RvU3RyaW5nJ10gIT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUZXh0VmFsdWUodmFsdWU6IE9wYXF1ZSk6IHN0cmluZyB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVHJ1c3RlZFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBUcnVzdGluZ0luc2VydGlvbiB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvSFRNTCgpO1xuICB9XG4gIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZTogT3BhcXVlKTogQ2F1dGlvdXNJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgdHlwZSBBcHBlbmREeW5hbWljT3Bjb2RlQ29uc3RydWN0b3IgPSAgdHlwZW9mIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIHwgdHlwZW9mIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwZW5kRHluYW1pY09wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUPjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGU7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICAgIGxldCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemUocmVmZXJlbmNlKTtcblxuICAgIGxldCB2YWx1ZSwgY2FjaGU7XG5cbiAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICB2YWx1ZSA9IG5vcm1hbGl6ZWQudmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUobm9ybWFsaXplZCk7XG4gICAgICB2YWx1ZSA9IGNhY2hlLnBlZWsoKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhY2sgPSB2bS5zdGFjaygpO1xuICAgIGxldCB1cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBzdGFjaywgdmFsdWUpO1xuICAgIGxldCBib3VuZHMgPSBuZXcgRnJhZ21lbnQodXBzZXJ0LmJvdW5kcyk7XG5cbiAgICBzdGFjay5uZXdCb3VuZHMoYm91bmRzKTtcblxuICAgIGlmIChjYWNoZSAvKiBpLmUuICFpc0NvbnN0KHJlZmVyZW5jZSkgKi8pIHtcbiAgICAgIHZtLnVwZGF0ZVdpdGgodGhpcy51cGRhdGVXaXRoKHZtLCByZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VhcmRlZEFwcGVuZE9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgQXBwZW5kT3Bjb2RlOiB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG4gIHByaXZhdGUgc3RhcnQgPSAtMTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IGRlb3B0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQgPT09IC0xO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgaWYgKHRoaXMuZGVvcHRlZCkge1xuICAgICAgdm0ucHVzaEV2YWxGcmFtZSh0aGlzLnN0YXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbHVlID0gdm0uZXZhbFN0YWNrLnBvcCgpO1xuXG4gICAgICBpZihpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGVvcHQodm0uZW52KTtcbiAgICAgICAgdm0ucHVzaEV2YWxGcmFtZSh0aGlzLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZtLmV2YWxTdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZW9wdChfZW52OiBFbnZpcm9ubWVudCk6IG51bWJlciB7IC8vIFB1YmxpYyBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgbGF6eSBkZW9wdFxuICAgIC8vIEF0IGNvbXBpbGUgdGltZSwgd2UgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgYXBwZW5kIGNhbGxzaXRlIG1pZ2h0IHJlZmVyXG4gICAgLy8gdG8gYSBsb2NhbCB2YXJpYWJsZS9wcm9wZXJ0eSBsb29rdXAgdGhhdCByZXNvbHZlcyB0byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gYXQgcnVudGltZS5cbiAgICAvL1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgZWFnZXJseSBjb21waWxlZCB0aGlzIGNhbGxzaXRlIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vICAge3sjaWYgKGlzLWNvbXBvbmVudC1kZWZpbml0aW9uIGZvbyl9fVxuICAgIC8vICAgICB7e2NvbXBvbmVudCBmb299fVxuICAgIC8vICAge3tlbHNlfX1cbiAgICAvLyAgICAge3tmb299fVxuICAgIC8vICAge3svaWZ9fVxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoZXJlIG1pZ2h0IGJlIGEgbGFyZ2UgYW1vdXQgb2YgdGhlc2UgY2FsbHNpdGVzXG4gICAgLy8gYW5kIG1vc3Qgb2YgdGhlbSB3b3VsZCByZXNvbHZlIHRvIGEgc2ltcGxlIHZhbHVlIGxvb2t1cC4gVGhlcmVmb3JlLCB3ZVxuICAgIC8vIHRyaWVkIHRvIGJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZWQgdGhhdCB0aGUgY2FsbHNpdGUgd2lsbCByZXNvbHZlIHRvXG4gICAgLy8gYXBwZW5kaW5nIGEgc2ltcGxlIHZhbHVlLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgd2UgaGF2ZSByZWFjaGVkIGhlcmUgYmVjYXVzZSBhdCBydW50aW1lLCB0aGUgZ3VhcmQgY29uZGl0aW9uYWxcbiAgICAvLyBoYXZlIGRldGVjdGVkIHRoYXQgdGhpcyBjYWxsc2l0ZSBpcyBpbmRlZWQgcmVmZXJyaW5nIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBvYmplY3QuIFNpbmNlIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIHRydWUgZm9yIG90aGVyXG4gICAgLy8gaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNhbGxzaXRlLCBpdCBpcyBub3cgYXBwcm9waWF0ZSB0byBkZW9wdCBpbnRvIHRoZVxuICAgIC8vIGV4cGFuZGVkIHZlcnNpb24gdGhhdCBoYW5kbGVzIGJvdGggY2FzZXMuIFRoZSBjb21waWxhdGlvbiB3b3VsZCBsb29rXG4gICAgLy8gbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgICBQdXRWYWx1ZShleHByZXNzaW9uKVxuICAgIC8vICAgICAgICAgICAgICAgVGVzdChpcy1jb21wb25lbnQtZGVmaW5pdGlvbilcbiAgICAvLyAgICAgICAgICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gICBCRUdJTjogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBKdW1wVW5sZXNzKFZBTFVFKVxuICAgIC8vICAgICAgICAgICAgICAgUHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25PcGNvZGVcbiAgICAvLyAgICAgICAgICAgICAgIE9wZW5Db21wb25lbnRcbiAgICAvLyAgICAgICAgICAgICAgIENsb3NlQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBKdW1wKEVORClcbiAgICAvLyAgIFZBTFVFOiAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIE9wdGltaXplZEFwcGVuZFxuICAgIC8vICAgRU5EOiAgICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy8gS2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBpZiB3ZSAqZG9uJ3QqIHJlYWNoIGhlcmUgYXQgaW5pdGlhbCByZW5kZXIgdGltZSxcbiAgICAvLyBpdCBpcyBzdGlsbCBwb3NzaWJsZSAoYWx0aG91Z2ggcXVpdGUgcmFyZSkgdGhhdCB0aGUgc2ltcGxlIHZhbHVlIHdlXG4gICAgLy8gZW5jb3VudGVyIGR1cmluZyBpbml0aWFsIHJlbmRlciBjb3VsZCBsYXRlciBjaGFuZ2UgaW50byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gb2JqZWN0IGF0IHVwZGF0ZSB0aW1lLiBUaGF0IGlzIGhhbmRsZWQgYnkgdGhlIFwibGF6eSBkZW9wdFwiXG4gICAgLy8gY29kZSBvbiB0aGUgdXBkYXRlIHNpZGUgKHNjcm9sbCBkb3duIGZvciB0aGUgbmV4dCBiaWcgYmxvY2sgb2YgY29tbWVudCkuXG5cbiAgICByZXR1cm4gbnVsbCBhcyBhbnk7XG4gIH1cbn1cblxuY2xhc3MgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIGV4dGVuZHMgQ29uZGl0aW9uYWxSZWZlcmVuY2Uge1xuICBzdGF0aWMgY3JlYXRlKGlubmVyOiBSZWZlcmVuY2U8T3BhcXVlPik6IElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UoaW5uZXIpO1xuICB9XG5cbiAgdG9Cb29sKHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgcHJvdGVjdGVkIGJvdW5kczogRnJhZ21lbnQsXG4gICAgcHJvdGVjdGVkIHVwc2VydDogVXBzZXJ0XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjYWNoZS50YWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jYWNoZS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIGxldCB7IGJvdW5kcywgdXBzZXJ0IH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgaWYoIXRoaXMudXBzZXJ0LnVwZGF0ZShkb20sIHZhbHVlKSkge1xuICAgICAgICBsZXQgY3Vyc29yID0gbmV3IEN1cnNvcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBjbGVhcihib3VuZHMpKTtcbiAgICAgICAgdXBzZXJ0ID0gdGhpcy51cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBjdXJzb3IsIHZhbHVlIGFzIFQpO1xuICAgICAgfVxuXG4gICAgICBib3VuZHMudXBkYXRlKHVwc2VydC5ib3VuZHMpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiB7IGxhc3RWYWx1ZTogSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKSB9XG4gICAgfTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFQ+IHtcbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG4gIHByaXZhdGUgZGVvcHRlZDogT3B0aW9uPFRyeU9wY29kZT4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgYm91bmRzOiBGcmFnbWVudCxcbiAgICB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcihjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICAgIHRoaXMudGFnID0gdGhpcy5fdGFnID0gVXBkYXRhYmxlVGFnLmNyZWF0ZSh0aGlzLnRhZyk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLmV2YWx1YXRlT3Bjb2RlKHRoaXMuZGVvcHRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0NvbXBvbmVudERlZmluaXRpb24odGhpcy5yZWZlcmVuY2UudmFsdWUoKSkpIHtcbiAgICAgICAgdGhpcy5sYXp5RGVvcHQodm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGF6eURlb3B0KF92bTogVXBkYXRpbmdWTSkge1xuICAgIC8vIER1cmlnbiBpbml0aWFsIHJlbmRlciwgd2Uga25vdyB0aGF0IHRoZSByZWZlcmVuY2UgZG9lcyBub3QgY29udGFpbiBhXG4gICAgLy8gY29tcG9uZW50IGRlZmluaXRpb24sIHNvIHdlIG9wdGltaXN0aWNhbGx5IGFzc3VtZWQgdGhhdCB0aGlzIGFwcGVuZFxuICAgIC8vIGlzIGp1c3QgYSBub3JtYWwgYXBwZW5kLiBIb3dldmVyLCBhdCB1cGRhdGUgdGltZSwgd2UgZGlzY292ZXJlZCB0aGF0XG4gICAgLy8gdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgaW50byBjb250YWluaW5nIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHNvXG4gICAgLy8gd2UgbmVlZCB0byBkbyBhIFwibGF6eSBkZW9wdFwiLCBzaW11bGF0aW5nIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpZlxuICAgIC8vIHdlIGhhZCBkZWNpZGVkIHRvIHBlcmZvcm0gdGhlIGRlb3B0IGluIHRoZSBmaXJzdCBwbGFjZSBkdXJpbmcgaW5pdGlhbFxuICAgIC8vIHJlbmRlci5cbiAgICAvL1xuICAgIC8vIE1vcmUgY29uY3JldGVseSwgd2Ugd291bGQgaGF2ZSBleHBhbmRlZCB0aGUgY3VybHkgaW50byBhIGlmL2Vsc2UsIGFuZFxuICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgY29tcG9uZW50IGRlZmluaXRpb24gb3Igbm90LCB3ZSB3b3VsZFxuICAgIC8vIGhhdmUgZW50ZXJlZCBlaXRoZXIgdGhlIGR5bmFtaWMgY29tcG9uZW50IGJyYW5jaCBvciB0aGUgc2ltcGxlIHZhbHVlXG4gICAgLy8gYnJhbmNoLlxuICAgIC8vXG4gICAgLy8gU2luY2Ugd2UgcmVuZGVyZWQgYSBzaW1wbGUgdmFsdWUgZHVyaW5nIGluaXRpYWwgcmVuZGVyIChhbmQgYWxsIHRoZVxuICAgIC8vIHVwZGF0ZXMgdXAgdW50aWwgdGhpcyBwb2ludCksIHdlIG5lZWQgdG8gcHJldGVuZCB0aGF0IHRoZSByZXN1bHQgaXNcbiAgICAvLyBwcm9kdWNlZCBieSB0aGUgXCJWQUxVRVwiIGJyYW5jaCBvZiB0aGUgZGVvcHRlZCBhcHBlbmQgb3Bjb2RlOlxuICAgIC8vXG4gICAgLy8gICBUcnkoQkVHSU4sIEVORClcbiAgICAvLyAgICAgQXNzZXJ0KElzQ29tcG9uZW50RGVmaW5pdGlvbiwgZXhwZWN0ZWQ9ZmFsc2UpXG4gICAgLy8gICAgIE9wdGltaXplZFVwZGF0ZVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGZyb20gYmVpbmcgYSBzaW1wbGVcbiAgICAvLyB2YWx1ZSBpbnRvIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpcyB0aGF0XG4gICAgLy8gdGhlIGFzc2VydCB3b3VsZCB0aHJvdywgY2F1c2luZyB0aGUgVHJ5IG9wY29kZSB0byB0ZWFyZG93biB0aGUgYm91bmRzXG4gICAgLy8gYW5kIHJlcnVuIHRoZSBvcmlnaW5hbCBhcHBlbmQgb3Bjb2RlLlxuICAgIC8vXG4gICAgLy8gU2luY2UgdGhlIFRyeSBvcGNvZGUgd291bGQgaGF2ZSBudWtlZCB0aGUgdXBkYXRpbmcgb3Bjb2RlcyBhbnl3YXksIHdlXG4gICAgLy8gd291bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBzaW11bGF0aW5nIHRob3NlLiBBbGwgd2UgaGF2ZSB0byBkbyBpcyB0b1xuICAgIC8vIGV4ZWN1dGUgdGhlIFRyeSBvcGNvZGUgYW5kIGltbWVkaWF0ZWx5IHRocm93LlxuXG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBkZW9wdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlb3B0ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGd1aWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlb3B0ZWQ6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiBbZGVvcHRlZC50b0pTT04oKV1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCBfcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIF9yZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLXRydXN0aW5nLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICd0cnVzdGluZy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFlLEFBS2IsQUFBWSxBQUNaLEFBQU0sQUFDTixBQUFRLEFBRVIsQUFBYyxBQUNkLEFBQWMsQUFDZixBQUFNLEFBQWMsQUFBQzs7QUFDdEIsQUFBTyxBQUFFLEFBQXFCLEFBQUUsQUFBTSxBQUE0QixBQUFDOztBQUVuRSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUczRCxBQUFPLEFBQXFDLEFBQWMsQUFBRSxBQUFZLEFBQWMsQUFBVSxBQUFFLEFBQU8sQUFBRSxBQUFHLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUUzSSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQUssQUFBRSxBQUFNLEFBQWMsQUFBQzs7QUFDN0MsQUFBTyxBQUFFLEFBQVEsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFDekMsQUFBTyxBQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRXhELEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7O0FBRW5ELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWlCLHNCQUFFLENBQUMsQUFBRSxJQUFFLEVBQUUsQUFBRyxLQUFFLEFBQU0sQUFBRTtBQUN4RCxRQUFJLEFBQU0sU0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBQyxBQUFNLEFBQW1DLEFBQUM7QUFDN0UsQUFBTSxXQUFDLEFBQVEsU0FBQyxBQUFFLEFBQUMsQUFBQyxBQUN0QjtBQUFDLEFBQUMsQUFBQztBQUVILGlCQUFpQixBQUFhO0FBQzVCLEFBQU0sV0FBQyxBQUFLLFVBQUssQUFBSSxRQUFJLEFBQUssVUFBSyxBQUFTLGFBQUksT0FBTyxBQUFLLE1BQUMsQUFBVSxBQUFDLGdCQUFLLEFBQVUsQUFBQyxBQUMxRjtBQUFDLEFBRUQsQUFBTTs0QkFBNkIsQUFBYTtBQUM5QyxBQUFFLEFBQUMsUUFBQyxBQUFPLFFBQUMsQUFBSyxBQUFDLEFBQUMsUUFBQyxBQUFDO0FBQ25CLEFBQU0sZUFBQyxBQUFFLEFBQUMsQUFDWjtBQUFDO0FBQ0QsQUFBTSxXQUFDLEFBQU0sT0FBQyxBQUFLLEFBQUMsQUFBQyxBQUN2QjtBQUFDO0FBRUQsK0JBQStCLEFBQWE7QUFDMUMsQUFBRSxBQUFDLFFBQUMsQUFBTyxRQUFDLEFBQUssQUFBQyxBQUFDLFFBQUMsQUFBQztBQUNuQixBQUFNLGVBQUMsQUFBRSxBQUFDLEFBQ1o7QUFBQztBQUNELEFBQUUsQUFBQyxRQUFDLEFBQVEsc0JBQUMsQUFBSyxBQUFDLEFBQUMsUUFBQyxBQUFDO0FBQ3BCLEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDO0FBQ0QsQUFBRSxBQUFDLFFBQUMsQUFBWSwwQkFBQyxBQUFLLEFBQUMsQUFBQyxRQUFDLEFBQUM7QUFDeEIsQUFBTSxlQUFDLEFBQUssTUFBQyxBQUFNLEFBQUUsQUFBQyxBQUN4QjtBQUFDO0FBQ0QsQUFBRSxBQUFDLFFBQUMsQUFBTSxvQkFBQyxBQUFLLEFBQUMsQUFBQyxRQUFDLEFBQUM7QUFDbEIsQUFBTSxlQUFDLEFBQUssQUFBQyxBQUNmO0FBQUM7QUFDRCxBQUFNLFdBQUMsQUFBTSxPQUFDLEFBQUssQUFBQyxBQUFDLEFBQ3ZCO0FBQUM7QUFFRCx3QkFBd0IsQUFBYTtBQUNuQyxBQUFFLEFBQUMsUUFBQyxBQUFPLFFBQUMsQUFBSyxBQUFDLEFBQUMsUUFBQyxBQUFDO0FBQ25CLEFBQU0sZUFBQyxBQUFFLEFBQUMsQUFDWjtBQUFDO0FBQ0QsQUFBRSxBQUFDLFFBQUMsQUFBUSxzQkFBQyxBQUFLLEFBQUMsQUFBQyxRQUFDLEFBQUM7QUFDcEIsQUFBTSxlQUFDLEFBQUssQUFBQyxBQUNmO0FBQUM7QUFDRCxBQUFFLEFBQUMsUUFBQyxBQUFZLDBCQUFDLEFBQUssQUFBQyxVQUFJLEFBQU0sb0JBQUMsQUFBSyxBQUFDLEFBQUMsUUFBQyxBQUFDO0FBQ3pDLEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDO0FBQ0QsQUFBTSxXQUFDLEFBQU0sT0FBQyxBQUFLLEFBQUMsQUFBQyxBQUN2QjtBQUFDLEFBSUQsQUFBTTs7QUFLSixBQUFRLGFBQUMsQUFBTTtBQUNiLFlBQUksQUFBUyxZQUFHLEFBQUUsR0FBQyxBQUFLLE1BQUMsQUFBRyxBQUFrQyxBQUFDO0FBQy9ELFlBQUksQUFBVSxhQUFHLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBUyxBQUFDLEFBQUM7QUFFM0MsWUFBSSxBQUFLLE9BQUUsQUFBSyxBQUFDO0FBRWpCLEFBQUUsQUFBQyxZQUFDLEFBQU8seUJBQUMsQUFBUyxBQUFDLEFBQUMsWUFBQyxBQUFDO0FBQ3ZCLEFBQUssb0JBQUcsQUFBVSxXQUFDLEFBQUssQUFBRSxBQUFDLEFBQzdCO0FBQUMsQUFBQyxBQUFJLGVBQUMsQUFBQztBQUNOLEFBQUssb0JBQUcsQUFBSSxBQUFjLCtCQUFDLEFBQVUsQUFBQyxBQUFDO0FBQ3ZDLEFBQUssb0JBQUcsQUFBSyxNQUFDLEFBQUksQUFBRSxBQUFDLEFBQ3ZCO0FBQUM7QUFFRCxZQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUM7QUFDMUIsWUFBSSxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFFLEdBQUMsQUFBRyxJQUFDLEFBQW1CLEFBQUUsdUJBQUUsQUFBSyxPQUFFLEFBQUssQUFBQyxBQUFDO0FBQ3JFLFlBQUksQUFBTSxTQUFHLEFBQUksQUFBUSxzQkFBQyxBQUFNLE9BQUMsQUFBTSxBQUFDLEFBQUM7QUFFekMsQUFBSyxjQUFDLEFBQVMsVUFBQyxBQUFNLEFBQUMsQUFBQztBQUV4QixBQUFFLEFBQUMsWUFBQyxBQUFLLE1BQUMsQUFBOEIsQUFBQyxnQ0FBQyxBQUFDO0FBQ3pDLEFBQUUsbUJBQUMsQUFBVSxXQUFDLEFBQUksS0FBQyxBQUFVLFdBQUMsQUFBRSxJQUFFLEFBQVMsV0FBRSxBQUFLLE9BQUUsQUFBTSxRQUFFLEFBQU0sQUFBQyxBQUFDLEFBQUMsQUFDdkU7QUFBQyxBQUNIO0FBQUMsQUFDRixBQUVELEFBQU07OztNQUF5RCw0QkFBUSxBQUFzQjtBQUkzRjtBQUNFLEFBQUssQUFBRSxBQUFDO0FBSEYsYUFBSyxRQUFHLENBQUMsQUFBQyxBQUFDLEFBSW5CO0FBQUM7QUFFRCxRQUFJLEFBQU87QUFDVCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssVUFBSyxDQUFDLEFBQUMsQUFBQyxBQUMzQjtBQUFDO0FBRUQsQUFBUSxhQUFDLEFBQU07QUFDYixBQUFFLEFBQUMsWUFBQyxBQUFJLEtBQUMsQUFBTyxBQUFDLFNBQUMsQUFBQztBQUNqQixBQUFFLGVBQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUN0QjtBQUFDLEFBQUMsQUFBSSxlQUFDLEFBQUM7QUFDTixnQkFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssTUFBQyxBQUFHLEFBQUUsQUFBQztBQUUzQixBQUFFLGdCQUFDLEFBQXFCLHVDQUFDLEFBQUssQUFBQyxBQUFDLFFBQUMsQUFBQztBQUNoQyxBQUFJLHFCQUFDLEFBQUssTUFBQyxBQUFFLEdBQUMsQUFBRyxBQUFDLEFBQUM7QUFDbkIsQUFBRSxtQkFBQyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQ3RCO0FBQUMsQUFBQyxBQUFJLG1CQUFDLEFBQUM7QUFDTixBQUFFLG1CQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUM7QUFDckIsQUFBSyxzQkFBQyxBQUFRLFNBQUMsQUFBRSxBQUFDLEFBQUMsQUFDckI7QUFBQyxBQUNIO0FBQUMsQUFDSDtBQUFDO0FBRU0sQUFBSyxVQUFDLEFBQWlCO0FBQzVCLEFBQXVFO0FBQ3ZFLEFBQW1FO0FBQ25FLEFBQXlCO0FBQ3pCLEFBQUU7QUFDRixBQUF5RTtBQUN6RSxBQUFFO0FBQ0YsQUFBMEM7QUFDMUMsQUFBd0I7QUFDeEIsQUFBYTtBQUNiLEFBQWM7QUFDZCxBQUFZO0FBQ1osQUFBRTtBQUNGLEFBQXdFO0FBQ3hFLEFBQXlFO0FBQ3pFLEFBQXVFO0FBQ3ZFLEFBQTRCO0FBQzVCLEFBQUU7QUFDRixBQUEwRTtBQUMxRSxBQUFzRTtBQUN0RSxBQUFxRTtBQUNyRSxBQUF5RTtBQUN6RSxBQUF1RTtBQUN2RSxBQUFhO0FBQ2IsQUFBRTtBQUNGLEFBQXFDO0FBQ3JDLEFBQThDO0FBQzlDLEFBQWtDO0FBQ2xDLEFBQXFCO0FBQ3JCLEFBQWtDO0FBQ2xDLEFBQW9EO0FBQ3BELEFBQThCO0FBQzlCLEFBQStCO0FBQy9CLEFBQTBCO0FBQzFCLEFBQXFCO0FBQ3JCLEFBQWdDO0FBQ2hDLEFBQXFCO0FBQ3JCLEFBQXFCO0FBQ3JCLEFBQUU7QUFDRixBQUEwRTtBQUMxRSxBQUFzRTtBQUN0RSxBQUFzRTtBQUN0RSxBQUF3RTtBQUN4RSxBQUEyRTtBQUUzRSxBQUFNLGVBQUMsQUFBVyxBQUFDLEFBQ3JCO0FBQUMsQUFDRjs7O0FBRUQsTUFBcUMsQUFBUSxBQUFvQjtBQUMvRCxBQUFNLFdBQUMsQUFBTSxPQUFDLEFBQXdCO0FBQ3BDLEFBQU0sZUFBQyxJQUFJLEFBQThCLCtCQUFDLEFBQUssQUFBQyxBQUFDLEFBQ25EO0FBQUM7QUFFRCxBQUFNLFdBQUMsQUFBYTtBQUNsQixBQUFNLGVBQUMsQUFBcUIsdUNBQUMsQUFBSyxBQUFDLEFBQUMsQUFDdEM7QUFBQyxBQUNGOztBQUVELE1BQWlELEFBQVEsQUFBYztBQUNyRSxnQkFDWSxBQUF3QixPQUN4QixBQUFnQixRQUNoQixBQUFjO0FBRXhCLEFBQUssQUFBRSxBQUFDO0FBSkUsYUFBSyxRQUFMLEFBQUssQUFBbUI7QUFDeEIsYUFBTSxTQUFOLEFBQU0sQUFBVTtBQUNoQixhQUFNLFNBQU4sQUFBTSxBQUFRO0FBR3hCLEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBSyxNQUFDLEFBQUcsQUFBQyxBQUN2QjtBQUFDO0FBSUQsQUFBUSxhQUFDLEFBQWM7QUFDckIsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFVLEFBQUUsQUFBQztBQUVwQyxBQUFFLEFBQUMsWUFBQyxBQUFVLDRCQUFDLEFBQUssQUFBQyxBQUFDLFFBQUMsQUFBQztBQUN0QixnQkFBSSxFQUFFLEFBQU0sUUFBRSxBQUFNLEFBQUUsV0FBRyxBQUFJLEFBQUM7QUFDOUIsZ0JBQUksRUFBRSxBQUFHLEFBQUUsUUFBRyxBQUFFLEFBQUM7QUFFakIsQUFBRSxnQkFBQyxDQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBTSxPQUFDLEFBQUcsS0FBRSxBQUFLLEFBQUMsQUFBQyxRQUFDLEFBQUM7QUFDbkMsb0JBQUksQUFBTSxTQUFHLEFBQUksQUFBTSxtQkFBQyxBQUFNLE9BQUMsQUFBYSxBQUFFLGlCQUFFLEFBQUssbUJBQUMsQUFBTSxBQUFDLEFBQUMsQUFBQztBQUMvRCxBQUFNLHlCQUFHLEFBQUksS0FBQyxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFFLEdBQUMsQUFBRyxJQUFDLEFBQW1CLEFBQUUsdUJBQUUsQUFBTSxRQUFFLEFBQVUsQUFBQyxBQUFDLEFBQ3ZGO0FBQUM7QUFFRCxBQUFNLG1CQUFDLEFBQU0sT0FBQyxBQUFNLE9BQUMsQUFBTSxBQUFDLEFBQUMsQUFDL0I7QUFBQyxBQUNIO0FBQUM7QUFFRCxBQUFNO0FBQ0osWUFBSSxFQUFFLEFBQUssT0FBRSxBQUFJLE1BQUUsQUFBSSxNQUFFLEFBQUssQUFBRSxVQUFHLEFBQUksQUFBQztBQUV4QyxBQUFNO0FBQ0osQUFBSTtBQUNKLEFBQUk7QUFDSixBQUFPLHFCQUFFLEVBQUUsQUFBUyxXQUFFLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSyxNQUFDLEFBQUksQUFBRSxBQUFDLEFBQUUsQUFDckQsQUFBQyxBQUNKO0FBTFM7QUFLUixBQUNGOztBQUVELE1BQXdELDRCQUFRLEFBQWU7QUFJN0UsZ0JBQ1UsQUFBNEIsV0FDcEMsQUFBd0IsT0FDeEIsQUFBZ0IsUUFDaEIsQUFBYztBQUVkLEFBQUssY0FBQyxBQUFLLE9BQUUsQUFBTSxRQUFFLEFBQU0sQUFBQyxBQUFDO0FBTHJCLGFBQVMsWUFBVCxBQUFTLEFBQW1CO0FBSDlCLGFBQU8sVUFBc0IsQUFBSSxBQUFDO0FBU3hDLEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBSSxLQUFDLEFBQUksT0FBRyxBQUFZLHlCQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBRyxBQUFDLEFBQUMsQUFDdkQ7QUFBQztBQUVELEFBQVEsYUFBQyxBQUFjO0FBQ3JCLEFBQUUsQUFBQyxZQUFDLEFBQUksS0FBQyxBQUFPLEFBQUMsU0FBQyxBQUFDO0FBQ2pCLEFBQUUsZUFBQyxBQUFjLGVBQUMsQUFBSSxLQUFDLEFBQU8sQUFBQyxBQUFDLEFBQ2xDO0FBQUMsQUFBQyxBQUFJLGVBQUMsQUFBQztBQUNOLEFBQUUsQUFBQyxnQkFBQyxBQUFxQix1Q0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUssQUFBRSxBQUFDLEFBQUMsVUFBQyxBQUFDO0FBQ2xELEFBQUkscUJBQUMsQUFBUyxVQUFDLEFBQUUsQUFBQyxBQUFDLEFBQ3JCO0FBQUMsQUFBQyxBQUFJLG1CQUFDLEFBQUM7QUFDTixBQUFLLHNCQUFDLEFBQVEsU0FBQyxBQUFFLEFBQUMsQUFBQyxBQUNyQjtBQUFDLEFBQ0g7QUFBQyxBQUNIO0FBQUM7QUFFTyxBQUFTLGNBQUMsQUFBZTtBQUMvQixBQUF1RTtBQUN2RSxBQUFzRTtBQUN0RSxBQUF1RTtBQUN2RSxBQUF3RTtBQUN4RSxBQUF1RTtBQUN2RSxBQUF3RTtBQUN4RSxBQUFVO0FBQ1YsQUFBRTtBQUNGLEFBQXdFO0FBQ3hFLEFBQXdFO0FBQ3hFLEFBQXVFO0FBQ3ZFLEFBQVU7QUFDVixBQUFFO0FBQ0YsQUFBc0U7QUFDdEUsQUFBc0U7QUFDdEUsQUFBK0Q7QUFDL0QsQUFBRTtBQUNGLEFBQW9CO0FBQ3BCLEFBQW9EO0FBQ3BELEFBQXNCO0FBQ3RCLEFBQUU7QUFDRixBQUF1RTtBQUN2RSxBQUFzRTtBQUN0RSxBQUF3RTtBQUN4RSxBQUF3QztBQUN4QyxBQUFFO0FBQ0YsQUFBd0U7QUFDeEUsQUFBeUU7QUFDekUsQUFBZ0Q7QUFFaEQsQUFBTSxlQUFDLEFBQVcsQUFBQyxBQUNyQjtBQUFDO0FBRUQsQUFBTTtBQUNKLFlBQUksRUFBRSxBQUFLLE9BQUUsQUFBSSxNQUFFLEFBQUksTUFBRSxBQUFPLEFBQUUsWUFBRyxBQUFJLEFBQUM7QUFFMUMsQUFBRSxBQUFDLFlBQUMsQUFBTyxBQUFDLFNBQUMsQUFBQztBQUNaLEFBQU07QUFDSixBQUFJO0FBQ0osQUFBSTtBQUNKLEFBQU8seUJBQUUsQUFBSTtBQUNiLEFBQVEsMEJBQUUsQ0FBQyxBQUFPLFFBQUMsQUFBTSxBQUFFLEFBQUMsQUFDN0IsQUFBQyxBQUNKO0FBTlM7QUFNUixBQUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sQUFBTSxtQkFBQyxBQUFLLE1BQUMsQUFBTSxBQUFFLEFBQUMsQUFDeEI7QUFBQyxBQUNIO0FBQUMsQUFDRixBQUVELEFBQU07O01BQXFDLHNDQUFRLEFBQXNDO0FBQXpGOztBQUNFLGFBQUksT0FBRyxBQUEyQixBQUFDLEFBYXJDO0FBQUM7QUFYVyxBQUFTLGNBQUMsQUFBNEI7QUFDOUMsQUFBTSxlQUFDLEFBQUcscUJBQUMsQUFBUyxXQUFFLEFBQWMsQUFBQyxBQUFDLEFBQ3hDO0FBQUM7QUFFUyxBQUFNLFdBQUMsQUFBd0IsS0FBRSxBQUFjLFFBQUUsQUFBd0I7QUFDakYsQUFBTSxlQUFDLEFBQWMsNEJBQUMsQUFBRyxLQUFFLEFBQU0sUUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QztBQUFDO0FBRVMsQUFBVSxlQUFDLEFBQU8sS0FBRSxBQUE2QixZQUFFLEFBQXdDLE9BQUUsQUFBZ0IsUUFBRSxBQUFjO0FBQ3JJLEFBQU0sZUFBQyxJQUFJLEFBQTZCLDhCQUFDLEFBQUssT0FBRSxBQUFNLFFBQUUsQUFBTSxBQUFDLEFBQUMsQUFDbEU7QUFBQyxBQUNGOzs7QUFFRCxNQUFvQyxzQ0FBUSxBQUErQjtBQUEzRTs7QUFDRSxhQUFJLE9BQUcsQUFBMkIsQUFBQyxBQUtyQztBQUFDO0FBSFcsQUFBTSxXQUFDLEFBQXdCLEtBQUUsQUFBYyxRQUFFLEFBQXdCO0FBQ2pGLEFBQU0sZUFBQyxBQUFjLDRCQUFDLEFBQUcsS0FBRSxBQUFNLFFBQUUsQUFBSyxBQUFDLEFBQUMsQUFDNUM7QUFBQyxBQUNGLEFBRUQsQUFBTTs7TUFBbUMsb0NBQVEsQUFBc0M7QUFBdkY7O0FBQ0UsYUFBSSxPQUFHLEFBQXlCLEFBQUM7QUFFdkIsYUFBWSxlQUFHLEFBQTZCLEFBQUMsQUFhekQ7QUFBQztBQVhXLEFBQVMsY0FBQyxBQUE0QjtBQUM5QyxBQUFNLGVBQUMsQUFBRyxxQkFBQyxBQUFTLFdBQUUsQUFBYyxBQUFDLEFBQUMsQUFDeEM7QUFBQztBQUVTLEFBQU0sV0FBQyxBQUF3QixLQUFFLEFBQWMsUUFBRSxBQUF3QjtBQUNqRixBQUFNLGVBQUMsQUFBYyw0QkFBQyxBQUFHLEtBQUUsQUFBTSxRQUFFLEFBQUssQUFBQyxBQUFDLEFBQzVDO0FBQUM7QUFFUyxBQUFVLGVBQUMsQUFBTyxLQUFFLEFBQTRCLFdBQUUsQUFBd0MsT0FBRSxBQUFnQixRQUFFLEFBQWM7QUFDcEksQUFBTSxlQUFDLElBQUksQUFBMkIsNEJBQUMsQUFBUyxXQUFFLEFBQUssT0FBRSxBQUFNLFFBQUUsQUFBTSxBQUFDLEFBQUMsQUFDM0U7QUFBQyxBQUNGOzs7QUFFRCxNQUFrQyxvQ0FBUSxBQUFzQztBQUFoRjs7QUFDRSxhQUFJLE9BQUcsQUFBeUIsQUFBQyxBQUtuQztBQUFDO0FBSFcsQUFBTSxXQUFDLEFBQXdCLEtBQUUsQUFBYyxRQUFFLEFBQXdCO0FBQ2pGLEFBQU0sZUFBQyxBQUFjLDRCQUFDLEFBQUcsS0FBRSxBQUFNLFFBQUUsQUFBSyxBQUFDLEFBQUMsQUFDNUM7QUFBQyxBQUNGLEFBRUQsQUFBTTs7TUFBcUMsc0NBQVEsQUFBc0M7QUFBekY7O0FBQ0UsYUFBSSxPQUFHLEFBQTJCLEFBQUMsQUFhckM7QUFBQztBQVhXLEFBQVMsY0FBQyxBQUE0QjtBQUM5QyxBQUFNLGVBQUMsQUFBRyxxQkFBQyxBQUFTLFdBQUUsQUFBcUIsQUFBQyxBQUFDLEFBQy9DO0FBQUM7QUFFUyxBQUFNLFdBQUMsQUFBd0IsS0FBRSxBQUFjLFFBQUUsQUFBd0I7QUFDakYsQUFBTSxlQUFDLEFBQWMsNEJBQUMsQUFBRyxLQUFFLEFBQU0sUUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QztBQUFDO0FBRVMsQUFBVSxlQUFDLEFBQU8sS0FBRSxBQUE2QixZQUFFLEFBQXdDLE9BQUUsQUFBZ0IsUUFBRSxBQUFjO0FBQ3JJLEFBQU0sZUFBQyxJQUFJLEFBQTZCLDhCQUFDLEFBQUssT0FBRSxBQUFNLFFBQUUsQUFBTSxBQUFDLEFBQUMsQUFDbEU7QUFBQyxBQUNGOzs7QUFFRCxNQUFvQyxzQ0FBUSxBQUErQjtBQUEzRTs7QUFDRSxhQUFJLE9BQUcsQUFBMkIsQUFBQyxBQUtyQztBQUFDO0FBSFcsQUFBTSxXQUFDLEFBQXdCLEtBQUUsQUFBYyxRQUFFLEFBQXdCO0FBQ2pGLEFBQU0sZUFBQyxBQUFjLDRCQUFDLEFBQUcsS0FBRSxBQUFNLFFBQUUsQUFBSyxBQUFDLEFBQUMsQUFDNUM7QUFBQyxBQUNGLEFBRUQsQUFBTTs7TUFBbUMsb0NBQVEsQUFBc0M7QUFBdkY7O0FBQ0UsYUFBSSxPQUFHLEFBQXlCLEFBQUM7QUFFdkIsYUFBWSxlQUFHLEFBQTZCLEFBQUMsQUFhekQ7QUFBQztBQVhXLEFBQVMsY0FBQyxBQUE0QjtBQUM5QyxBQUFNLGVBQUMsQUFBRyxxQkFBQyxBQUFTLFdBQUUsQUFBcUIsQUFBQyxBQUFDLEFBQy9DO0FBQUM7QUFFUyxBQUFNLFdBQUMsQUFBd0IsS0FBRSxBQUFjLFFBQUUsQUFBd0I7QUFDakYsQUFBTSxlQUFDLEFBQWMsNEJBQUMsQUFBRyxLQUFFLEFBQU0sUUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QztBQUFDO0FBRVMsQUFBVSxlQUFDLEFBQU8sS0FBRSxBQUE0QixXQUFFLEFBQXdDLE9BQUUsQUFBZ0IsUUFBRSxBQUFjO0FBQ3BJLEFBQU0sZUFBQyxJQUFJLEFBQTJCLDRCQUFDLEFBQVMsV0FBRSxBQUFLLE9BQUUsQUFBTSxRQUFFLEFBQU0sQUFBQyxBQUFDLEFBQzNFO0FBQUMsQUFDRjs7O0FBRUQsTUFBa0Msb0NBQVEsQUFBc0M7QUFBaEY7O0FBQ0UsYUFBSSxPQUFHLEFBQWlCLEFBQUMsQUFLM0I7QUFBQztBQUhXLEFBQU0sV0FBQyxBQUF3QixLQUFFLEFBQWMsUUFBRSxBQUF3QjtBQUNqRixBQUFNLGVBQUMsQUFBYyw0QkFBQyxBQUFHLEtBQUUsQUFBTSxRQUFFLEFBQUssQUFBQyxBQUFDLEFBQzVDO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVcHNlcnQsIHtcbiAgSW5zZXJ0aW9uLFxuICBDYXV0aW91c0luc2VydGlvbixcbiAgVHJ1c3RpbmdJbnNlcnRpb24sXG5cbiAgaXNTYWZlU3RyaW5nLFxuICBpc05vZGUsXG4gIGlzU3RyaW5nLFxuXG4gIGNhdXRpb3VzSW5zZXJ0LFxuICB0cnVzdGluZ0luc2VydFxufSBmcm9tICcuLi8uLi91cHNlcnQnO1xuaW1wb3J0IHsgaXNDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4uLy4uL2RvbS9oZWxwZXInO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNLCBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgVHJ5T3Bjb2RlIH0gZnJvbSAnLi4vLi4vdm0vdXBkYXRlJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSwgUmVmZXJlbmNlQ2FjaGUsIFVwZGF0YWJsZVRhZywgVGFnV3JhcHBlciwgaXNNb2RpZmllZCwgaXNDb25zdCwgbWFwIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBDdXJzb3IsIGNsZWFyIH0gZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNDb250ZW50LCAodm0sIHsgb3AxOiBhcHBlbmQgfSkgPT4ge1xuICBsZXQgb3Bjb2RlID0gdm0uY29uc3RhbnRzLmdldE90aGVyKGFwcGVuZCkgYXMgQXBwZW5kRHluYW1pY09wY29kZTxJbnNlcnRpb24+O1xuICBvcGNvZGUuZXZhbHVhdGUodm0pO1xufSk7XG5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWVbJ3RvU3RyaW5nJ10gIT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUZXh0VmFsdWUodmFsdWU6IE9wYXF1ZSk6IHN0cmluZyB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVHJ1c3RlZFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBUcnVzdGluZ0luc2VydGlvbiB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvSFRNTCgpO1xuICB9XG4gIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZTogT3BhcXVlKTogQ2F1dGlvdXNJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgdHlwZSBBcHBlbmREeW5hbWljT3Bjb2RlQ29uc3RydWN0b3IgPSAgdHlwZW9mIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIHwgdHlwZW9mIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwZW5kRHluYW1pY09wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUPjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGU7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZShyZWZlcmVuY2UpO1xuXG4gICAgbGV0IHZhbHVlLCBjYWNoZTtcblxuICAgIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICAgIHZhbHVlID0gbm9ybWFsaXplZC52YWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShub3JtYWxpemVkKTtcbiAgICAgIHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgIH1cblxuICAgIGxldCBzdGFjayA9IHZtLmVsZW1lbnRzKCk7XG4gICAgbGV0IHVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIHN0YWNrLCB2YWx1ZSk7XG4gICAgbGV0IGJvdW5kcyA9IG5ldyBGcmFnbWVudCh1cHNlcnQuYm91bmRzKTtcblxuICAgIHN0YWNrLm5ld0JvdW5kcyhib3VuZHMpO1xuXG4gICAgaWYgKGNhY2hlIC8qIGkuZS4gIWlzQ29uc3QocmVmZXJlbmNlKSAqLykge1xuICAgICAgdm0udXBkYXRlV2l0aCh0aGlzLnVwZGF0ZVdpdGgodm0sIHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxUPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBBcHBlbmRPcGNvZGU6IHR5cGVvZiBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSB8IHR5cGVvZiBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcbiAgcHJpdmF0ZSBzdGFydCA9IC0xO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgZGVvcHRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydCA9PT0gLTE7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBpZiAodGhpcy5kZW9wdGVkKSB7XG4gICAgICB2bS5nb3RvKHRoaXMuc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsdWUgPSB2bS5zdGFjay5wb3AoKTtcblxuICAgICAgaWYoaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmRlb3B0KHZtLmVudik7XG4gICAgICAgIHZtLmdvdG8odGhpcy5zdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bS5zdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZW9wdChfZW52OiBFbnZpcm9ubWVudCk6IG51bWJlciB7IC8vIFB1YmxpYyBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgbGF6eSBkZW9wdFxuICAgIC8vIEF0IGNvbXBpbGUgdGltZSwgd2UgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgYXBwZW5kIGNhbGxzaXRlIG1pZ2h0IHJlZmVyXG4gICAgLy8gdG8gYSBsb2NhbCB2YXJpYWJsZS9wcm9wZXJ0eSBsb29rdXAgdGhhdCByZXNvbHZlcyB0byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gYXQgcnVudGltZS5cbiAgICAvL1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgZWFnZXJseSBjb21waWxlZCB0aGlzIGNhbGxzaXRlIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vICAge3sjaWYgKGlzLWNvbXBvbmVudC1kZWZpbml0aW9uIGZvbyl9fVxuICAgIC8vICAgICB7e2NvbXBvbmVudCBmb299fVxuICAgIC8vICAge3tlbHNlfX1cbiAgICAvLyAgICAge3tmb299fVxuICAgIC8vICAge3svaWZ9fVxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoZXJlIG1pZ2h0IGJlIGEgbGFyZ2UgYW1vdXQgb2YgdGhlc2UgY2FsbHNpdGVzXG4gICAgLy8gYW5kIG1vc3Qgb2YgdGhlbSB3b3VsZCByZXNvbHZlIHRvIGEgc2ltcGxlIHZhbHVlIGxvb2t1cC4gVGhlcmVmb3JlLCB3ZVxuICAgIC8vIHRyaWVkIHRvIGJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZWQgdGhhdCB0aGUgY2FsbHNpdGUgd2lsbCByZXNvbHZlIHRvXG4gICAgLy8gYXBwZW5kaW5nIGEgc2ltcGxlIHZhbHVlLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgd2UgaGF2ZSByZWFjaGVkIGhlcmUgYmVjYXVzZSBhdCBydW50aW1lLCB0aGUgZ3VhcmQgY29uZGl0aW9uYWxcbiAgICAvLyBoYXZlIGRldGVjdGVkIHRoYXQgdGhpcyBjYWxsc2l0ZSBpcyBpbmRlZWQgcmVmZXJyaW5nIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBvYmplY3QuIFNpbmNlIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIHRydWUgZm9yIG90aGVyXG4gICAgLy8gaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNhbGxzaXRlLCBpdCBpcyBub3cgYXBwcm9waWF0ZSB0byBkZW9wdCBpbnRvIHRoZVxuICAgIC8vIGV4cGFuZGVkIHZlcnNpb24gdGhhdCBoYW5kbGVzIGJvdGggY2FzZXMuIFRoZSBjb21waWxhdGlvbiB3b3VsZCBsb29rXG4gICAgLy8gbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgICBQdXRWYWx1ZShleHByZXNzaW9uKVxuICAgIC8vICAgICAgICAgICAgICAgVGVzdChpcy1jb21wb25lbnQtZGVmaW5pdGlvbilcbiAgICAvLyAgICAgICAgICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gICBCRUdJTjogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBKdW1wVW5sZXNzKFZBTFVFKVxuICAgIC8vICAgICAgICAgICAgICAgUHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25PcGNvZGVcbiAgICAvLyAgICAgICAgICAgICAgIE9wZW5Db21wb25lbnRcbiAgICAvLyAgICAgICAgICAgICAgIENsb3NlQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBKdW1wKEVORClcbiAgICAvLyAgIFZBTFVFOiAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIE9wdGltaXplZEFwcGVuZFxuICAgIC8vICAgRU5EOiAgICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy8gS2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBpZiB3ZSAqZG9uJ3QqIHJlYWNoIGhlcmUgYXQgaW5pdGlhbCByZW5kZXIgdGltZSxcbiAgICAvLyBpdCBpcyBzdGlsbCBwb3NzaWJsZSAoYWx0aG91Z2ggcXVpdGUgcmFyZSkgdGhhdCB0aGUgc2ltcGxlIHZhbHVlIHdlXG4gICAgLy8gZW5jb3VudGVyIGR1cmluZyBpbml0aWFsIHJlbmRlciBjb3VsZCBsYXRlciBjaGFuZ2UgaW50byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gb2JqZWN0IGF0IHVwZGF0ZSB0aW1lLiBUaGF0IGlzIGhhbmRsZWQgYnkgdGhlIFwibGF6eSBkZW9wdFwiXG4gICAgLy8gY29kZSBvbiB0aGUgdXBkYXRlIHNpZGUgKHNjcm9sbCBkb3duIGZvciB0aGUgbmV4dCBiaWcgYmxvY2sgb2YgY29tbWVudCkuXG5cbiAgICByZXR1cm4gbnVsbCBhcyBhbnk7XG4gIH1cbn1cblxuY2xhc3MgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIGV4dGVuZHMgQ29uZGl0aW9uYWxSZWZlcmVuY2Uge1xuICBzdGF0aWMgY3JlYXRlKGlubmVyOiBSZWZlcmVuY2U8T3BhcXVlPik6IElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UoaW5uZXIpO1xuICB9XG5cbiAgdG9Cb29sKHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgcHJvdGVjdGVkIGJvdW5kczogRnJhZ21lbnQsXG4gICAgcHJvdGVjdGVkIHVwc2VydDogVXBzZXJ0XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjYWNoZS50YWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jYWNoZS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIGxldCB7IGJvdW5kcywgdXBzZXJ0IH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgaWYoIXRoaXMudXBzZXJ0LnVwZGF0ZShkb20sIHZhbHVlKSkge1xuICAgICAgICBsZXQgY3Vyc29yID0gbmV3IEN1cnNvcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBjbGVhcihib3VuZHMpKTtcbiAgICAgICAgdXBzZXJ0ID0gdGhpcy51cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBjdXJzb3IsIHZhbHVlIGFzIFQpO1xuICAgICAgfVxuXG4gICAgICBib3VuZHMudXBkYXRlKHVwc2VydC5ib3VuZHMpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiB7IGxhc3RWYWx1ZTogSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKSB9XG4gICAgfTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFQ+IHtcbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG4gIHByaXZhdGUgZGVvcHRlZDogT3B0aW9uPFRyeU9wY29kZT4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgYm91bmRzOiBGcmFnbWVudCxcbiAgICB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcihjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICAgIHRoaXMudGFnID0gdGhpcy5fdGFnID0gVXBkYXRhYmxlVGFnLmNyZWF0ZSh0aGlzLnRhZyk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLmV2YWx1YXRlT3Bjb2RlKHRoaXMuZGVvcHRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0NvbXBvbmVudERlZmluaXRpb24odGhpcy5yZWZlcmVuY2UudmFsdWUoKSkpIHtcbiAgICAgICAgdGhpcy5sYXp5RGVvcHQodm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGF6eURlb3B0KF92bTogVXBkYXRpbmdWTSkge1xuICAgIC8vIER1cmlnbiBpbml0aWFsIHJlbmRlciwgd2Uga25vdyB0aGF0IHRoZSByZWZlcmVuY2UgZG9lcyBub3QgY29udGFpbiBhXG4gICAgLy8gY29tcG9uZW50IGRlZmluaXRpb24sIHNvIHdlIG9wdGltaXN0aWNhbGx5IGFzc3VtZWQgdGhhdCB0aGlzIGFwcGVuZFxuICAgIC8vIGlzIGp1c3QgYSBub3JtYWwgYXBwZW5kLiBIb3dldmVyLCBhdCB1cGRhdGUgdGltZSwgd2UgZGlzY292ZXJlZCB0aGF0XG4gICAgLy8gdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgaW50byBjb250YWluaW5nIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHNvXG4gICAgLy8gd2UgbmVlZCB0byBkbyBhIFwibGF6eSBkZW9wdFwiLCBzaW11bGF0aW5nIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpZlxuICAgIC8vIHdlIGhhZCBkZWNpZGVkIHRvIHBlcmZvcm0gdGhlIGRlb3B0IGluIHRoZSBmaXJzdCBwbGFjZSBkdXJpbmcgaW5pdGlhbFxuICAgIC8vIHJlbmRlci5cbiAgICAvL1xuICAgIC8vIE1vcmUgY29uY3JldGVseSwgd2Ugd291bGQgaGF2ZSBleHBhbmRlZCB0aGUgY3VybHkgaW50byBhIGlmL2Vsc2UsIGFuZFxuICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgY29tcG9uZW50IGRlZmluaXRpb24gb3Igbm90LCB3ZSB3b3VsZFxuICAgIC8vIGhhdmUgZW50ZXJlZCBlaXRoZXIgdGhlIGR5bmFtaWMgY29tcG9uZW50IGJyYW5jaCBvciB0aGUgc2ltcGxlIHZhbHVlXG4gICAgLy8gYnJhbmNoLlxuICAgIC8vXG4gICAgLy8gU2luY2Ugd2UgcmVuZGVyZWQgYSBzaW1wbGUgdmFsdWUgZHVyaW5nIGluaXRpYWwgcmVuZGVyIChhbmQgYWxsIHRoZVxuICAgIC8vIHVwZGF0ZXMgdXAgdW50aWwgdGhpcyBwb2ludCksIHdlIG5lZWQgdG8gcHJldGVuZCB0aGF0IHRoZSByZXN1bHQgaXNcbiAgICAvLyBwcm9kdWNlZCBieSB0aGUgXCJWQUxVRVwiIGJyYW5jaCBvZiB0aGUgZGVvcHRlZCBhcHBlbmQgb3Bjb2RlOlxuICAgIC8vXG4gICAgLy8gICBUcnkoQkVHSU4sIEVORClcbiAgICAvLyAgICAgQXNzZXJ0KElzQ29tcG9uZW50RGVmaW5pdGlvbiwgZXhwZWN0ZWQ9ZmFsc2UpXG4gICAgLy8gICAgIE9wdGltaXplZFVwZGF0ZVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGZyb20gYmVpbmcgYSBzaW1wbGVcbiAgICAvLyB2YWx1ZSBpbnRvIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpcyB0aGF0XG4gICAgLy8gdGhlIGFzc2VydCB3b3VsZCB0aHJvdywgY2F1c2luZyB0aGUgVHJ5IG9wY29kZSB0byB0ZWFyZG93biB0aGUgYm91bmRzXG4gICAgLy8gYW5kIHJlcnVuIHRoZSBvcmlnaW5hbCBhcHBlbmQgb3Bjb2RlLlxuICAgIC8vXG4gICAgLy8gU2luY2UgdGhlIFRyeSBvcGNvZGUgd291bGQgaGF2ZSBudWtlZCB0aGUgdXBkYXRpbmcgb3Bjb2RlcyBhbnl3YXksIHdlXG4gICAgLy8gd291bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBzaW11bGF0aW5nIHRob3NlLiBBbGwgd2UgaGF2ZSB0byBkbyBpcyB0b1xuICAgIC8vIGV4ZWN1dGUgdGhlIFRyeSBvcGNvZGUgYW5kIGltbWVkaWF0ZWx5IHRocm93LlxuXG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBkZW9wdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlb3B0ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGd1aWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlb3B0ZWQ6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiBbZGVvcHRlZC50b0pTT04oKV1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCBfcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIF9yZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLXRydXN0aW5nLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICd0cnVzdGluZy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuIl19

@@ -58,3 +58,3 @@ 'use strict';

}
_opcodes.APPEND_OPCODES.add(72 /* Debugger */, (vm, { op1: _symbols, op2: _evalInfo }) => {
_opcodes.APPEND_OPCODES.add(71 /* Debugger */, (vm, { op1: _symbols, op2: _evalInfo }) => {
let symbols = vm.constants.getOther(_symbols);

@@ -61,0 +61,0 @@ let evalInfo = vm.constants.getArray(_evalInfo);

@@ -18,24 +18,24 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(24 /* Text */, (vm, { op1: text }) => {
vm.stack().appendText(vm.constants.getString(text));
_opcodes.APPEND_OPCODES.add(23 /* Text */, (vm, { op1: text }) => {
vm.elements().appendText(vm.constants.getString(text));
});
_opcodes.APPEND_OPCODES.add(25 /* Comment */, (vm, { op1: text }) => {
vm.stack().appendComment(vm.constants.getString(text));
_opcodes.APPEND_OPCODES.add(24 /* Comment */, (vm, { op1: text }) => {
vm.elements().appendComment(vm.constants.getString(text));
});
_opcodes.APPEND_OPCODES.add(27 /* OpenElement */, (vm, { op1: tag }) => {
vm.stack().openElement(vm.constants.getString(tag));
_opcodes.APPEND_OPCODES.add(26 /* OpenElement */, (vm, { op1: tag }) => {
vm.elements().openElement(vm.constants.getString(tag));
});
_opcodes.APPEND_OPCODES.add(28 /* OpenElementWithOperations */, (vm, { op1: tag }) => {
_opcodes.APPEND_OPCODES.add(27 /* OpenElementWithOperations */, (vm, { op1: tag }) => {
let tagName = vm.constants.getString(tag);
let operations = vm.evalStack.pop();
vm.stack().openElement(tagName, operations);
let operations = vm.stack.pop();
vm.elements().openElement(tagName, operations);
});
_opcodes.APPEND_OPCODES.add(29 /* OpenDynamicElement */, vm => {
let operations = vm.evalStack.pop();
let tagName = vm.evalStack.pop().value();
vm.stack().openElement(tagName, operations);
_opcodes.APPEND_OPCODES.add(28 /* OpenDynamicElement */, vm => {
let operations = vm.stack.pop();
let tagName = vm.stack.pop().value();
vm.elements().openElement(tagName, operations);
});
_opcodes.APPEND_OPCODES.add(36 /* PushRemoteElement */, vm => {
let elementRef = vm.evalStack.pop();
let nextSiblingRef = vm.evalStack.pop();
_opcodes.APPEND_OPCODES.add(35 /* PushRemoteElement */, vm => {
let elementRef = vm.stack.pop();
let nextSiblingRef = vm.stack.pop();
let element;

@@ -57,5 +57,5 @@ let nextSibling;

}
vm.stack().pushRemoteElement(element, nextSibling);
vm.elements().pushRemoteElement(element, nextSibling);
});
_opcodes.APPEND_OPCODES.add(37 /* PopRemoteElement */, vm => vm.stack().popRemoteElement());
_opcodes.APPEND_OPCODES.add(36 /* PopRemoteElement */, vm => vm.elements().popRemoteElement());
class ClassList {

@@ -238,4 +238,4 @@ constructor() {

exports.ComponentElementOperations = ComponentElementOperations;
_opcodes.APPEND_OPCODES.add(33 /* FlushElement */, vm => {
let stack = vm.stack();
_opcodes.APPEND_OPCODES.add(32 /* FlushElement */, vm => {
let stack = vm.elements();
let action = 'FlushElementOpcode#evaluate';

@@ -245,4 +245,4 @@ stack.expectOperations(action).flush(stack.expectConstructing(action), vm);

});
_opcodes.APPEND_OPCODES.add(34 /* CloseElement */, vm => vm.stack().closeElement());
_opcodes.APPEND_OPCODES.add(30 /* StaticAttr */, (vm, { op1: _name, op2: _value, op3: _namespace }) => {
_opcodes.APPEND_OPCODES.add(33 /* CloseElement */, vm => vm.elements().closeElement());
_opcodes.APPEND_OPCODES.add(29 /* StaticAttr */, (vm, { op1: _name, op2: _value, op3: _namespace }) => {
let name = vm.constants.getString(_name);

@@ -252,13 +252,13 @@ let value = vm.constants.getString(_value);

let namespace = vm.constants.getString(_namespace);
vm.stack().setStaticAttributeNS(namespace, name, value);
vm.elements().setStaticAttributeNS(namespace, name, value);
} else {
vm.stack().setStaticAttribute(name, value);
vm.elements().setStaticAttribute(name, value);
}
});
_opcodes.APPEND_OPCODES.add(35 /* Modifier */, (vm, { op1: _manager }) => {
_opcodes.APPEND_OPCODES.add(34 /* Modifier */, (vm, { op1: _manager }) => {
let manager = vm.constants.getOther(_manager);
let stack = vm.evalStack;
let stack = vm.stack;
let args = stack.pop();
let tag = args.tag;
let { constructing: element, updateOperations } = vm.stack();
let { constructing: element, updateOperations } = vm.elements();
let dynamicScope = vm.dynamicScope();

@@ -367,12 +367,12 @@ let modifier = manager.create(element, args, dynamicScope, updateOperations);

}
_opcodes.APPEND_OPCODES.add(32 /* DynamicAttrNS */, (vm, { op1: _name, op2: _namespace, op3: trusting }) => {
_opcodes.APPEND_OPCODES.add(31 /* DynamicAttrNS */, (vm, { op1: _name, op2: _namespace, op3: trusting }) => {
let name = vm.constants.getString(_name);
let namespace = vm.constants.getString(_namespace);
let reference = vm.evalStack.pop();
vm.stack().setDynamicAttributeNS(namespace, name, reference, !!trusting);
let reference = vm.stack.pop();
vm.elements().setDynamicAttributeNS(namespace, name, reference, !!trusting);
});
_opcodes.APPEND_OPCODES.add(31 /* DynamicAttr */, (vm, { op1: _name, op2: trusting }) => {
_opcodes.APPEND_OPCODES.add(30 /* DynamicAttr */, (vm, { op1: _name, op2: trusting }) => {
let name = vm.constants.getString(_name);
let reference = vm.evalStack.pop();
vm.stack().setDynamicAttribute(name, reference, !!trusting);
let reference = vm.stack.pop();
vm.elements().setDynamicAttribute(name, reference, !!trusting);
});

@@ -399,2 +399,2 @@ class PatchElementOpcode extends _opcodes.UpdatingOpcode {

exports.PatchElementOpcode = PatchElementOpcode;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQU0zRCxBQUFPLEFBQStCLEFBQU0sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQzVFLEFBQU8sQUFDTCxBQUFlLEFBR2YsQUFBYyxBQUlkLEFBQWEsQUFDYixBQUFPLEFBQUksQUFBZ0IsQUFDM0IsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQzs7QUFFNUIsQUFBTyxBQUFFLEFBQWMsQUFBRSxBQUFrQixBQUFFLEFBQU0sQUFBa0IsQUFBQzs7QUFHdEUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQU0sQUFBQyxBQUM5QixBQUFPLEFBQUUsQUFBYyxBQUFZLEFBQU0sQUFBZSxBQUFDOztBQUV6RCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFPLFlBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBSSxBQUFFO0FBQzVDLEFBQUUsT0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFVLFdBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQyxBQUN0RDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVUsZUFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFJLEFBQUU7QUFDL0MsQUFBRSxPQUFDLEFBQUssQUFBRSxRQUFDLEFBQWEsY0FBQyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3pEO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFHLEFBQUU7QUFDbEQsQUFBRSxPQUFDLEFBQUssQUFB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RSxHQUFDLEFBQUcsQUFBQyxBQUFDLEFBQy9CO0FBQUM7QUFFRCxBQUFNO0FBQ0osWUFBSSxFQUFFLEFBQUssT0FBRSxBQUFJLE1BQUUsQUFBUyxBQUFFLGNBQUcsQUFBSSxBQUFDO0FBRXRDLEFBQU07QUFDSixBQUFJLGtCQUFFLEFBQUs7QUFDWCxBQUFJO0FBQ0osQUFBTyxxQkFBRSxBQUFTLFVBQUMsQUFBTSxBQUFFLEFBQzVCLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IEFyZ3VtZW50cyB9IGZyb20gJy4uLy4uL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRklYX1JFSUZJQ0FUSU9OIH0gZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBGSVhNRSwgT3B0aW9uLCBPcGFxdWUsIERpY3QsIHVud3JhcCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBDYWNoZWRSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZSxcbiAgVmVyc2lvbmVkUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVGFnLFxuICBSZXZpc2lvbixcbiAgUGF0aFJlZmVyZW5jZSxcbiAgY29tYmluZVRhZ2dlZCxcbiAgaXNDb25zdCBhcyBpc0NvbnN0UmVmZXJlbmNlLFxuICBpc01vZGlmaWVkXG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBNb2RpZmllck1hbmFnZXIgfSBmcm9tICcuLi8uLi9tb2RpZmllci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5VTExfUkVGRVJFTkNFLCBQcmltaXRpdmVSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IEF0dHJpYnV0ZU1hbmFnZXIgfSBmcm9tICcuLi8uLi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcbmltcG9ydCB7IEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGV4dCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLnN0YWNrKCkuYXBwZW5kVGV4dCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWVudCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLnN0YWNrKCkuYXBwZW5kQ29tbWVudCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnQsICh2bSwgeyBvcDE6IHRhZyB9KSA9PiB7XG4gIHZtLnN0YWNrKCkub3BlbkVsZW1lbnQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0YWcpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucywgKHZtLCB7IG9wMTogdGFnIH0pID0+IHtcbiAgbGV0IHRhZ05hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRhZyk7XG4gIGxldCBvcGVyYXRpb25zID0gdm0uZXZhbFN0YWNrLnBvcDxFbGVtZW50T3BlcmF0aW9ucz4oKTtcbiAgdm0uc3RhY2soKS5vcGVuRWxlbWVudCh0YWdOYW1lLCBvcGVyYXRpb25zKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkR5bmFtaWNFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBvcGVyYXRpb25zID0gdm0uZXZhbFN0YWNrLnBvcDxFbGVtZW50T3BlcmF0aW9ucz4oKTtcbiAgbGV0IHRhZ05hbWUgPSB2bS5ldmFsU3RhY2sucG9wPFJlZmVyZW5jZTxzdHJpbmc+PigpLnZhbHVlKCk7XG4gIHZtLnN0YWNrKCkub3BlbkVsZW1lbnQodGFnTmFtZSwgb3BlcmF0aW9ucyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hSZW1vdGVFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBlbGVtZW50UmVmID0gdm0uZXZhbFN0YWNrLnBvcDxSZWZlcmVuY2U8U2ltcGxlLkVsZW1lbnQ+PigpO1xuICBsZXQgbmV4dFNpYmxpbmdSZWYgPSB2bS5ldmFsU3RhY2sucG9wPFJlZmVyZW5jZTxPcHRpb248U2ltcGxlLk5vZGU+Pj4oKTtcblxuICBsZXQgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQ7XG4gIGxldCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcblxuICBpZiAoaXNDb25zdFJlZmVyZW5jZShlbGVtZW50UmVmKSkge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50UmVmLnZhbHVlKCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKGVsZW1lbnRSZWYpO1xuICAgIGVsZW1lbnQgPSBjYWNoZS5wZWVrKCk7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cblxuICBpZiAoaXNDb25zdFJlZmVyZW5jZShuZXh0U2libGluZ1JlZikpIHtcbiAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nUmVmLnZhbHVlKCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5leHRTaWJsaW5nUmVmKTtcbiAgICBuZXh0U2libGluZyA9IGNhY2hlLnBlZWsoKTtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxuXG4gIHZtLnN0YWNrKCkucHVzaFJlbW90ZUVsZW1lbnQoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3BSZW1vdGVFbGVtZW50LCB2bSA9PiB2bS5zdGFjaygpLnBvcFJlbW90ZUVsZW1lbnQoKSk7XG5cbmNsYXNzIENsYXNzTGlzdCB7XG4gIHByaXZhdGUgbGlzdDogT3B0aW9uPFJlZmVyZW5jZTxzdHJpbmc+W10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0NvbnN0ID0gdHJ1ZTtcblxuICBhcHBlbmQocmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGxpc3QsIGlzQ29uc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAobGlzdCA9PT0gbnVsbCkgbGlzdCA9IHRoaXMubGlzdCA9IFtdO1xuXG4gICAgbGlzdC5wdXNoKHJlZmVyZW5jZSk7XG4gICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdCAmJiBpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG4gIH1cblxuICB0b1JlZmVyZW5jZSgpOiBSZWZlcmVuY2U8T3B0aW9uPHN0cmluZz4+IHtcbiAgICBsZXQgeyBsaXN0LCBpc0NvbnN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFsaXN0KSByZXR1cm4gTlVMTF9SRUZFUkVOQ0U7XG5cbiAgICBpZiAoaXNDb25zdCkgcmV0dXJuIFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodG9DbGFzc05hbWUobGlzdCkpO1xuXG4gICAgcmV0dXJuIG5ldyBDbGFzc0xpc3RSZWZlcmVuY2UobGlzdCk7XG4gIH1cblxufVxuXG5jbGFzcyBDbGFzc0xpc3RSZWZlcmVuY2UgZXh0ZW5kcyBDYWNoZWRSZWZlcmVuY2U8T3B0aW9uPHN0cmluZz4+IHtcbiAgcHVibGljIHRhZzogVGFnO1xuICBwcml2YXRlIGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmVUYWdnZWQobGlzdCk7XG4gICAgdGhpcy5saXN0ID0gbGlzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlKCk6IE9wdGlvbjxzdHJpbmc+IHtcbiAgICByZXR1cm4gdG9DbGFzc05hbWUodGhpcy5saXN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0NsYXNzTmFtZShsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdKTogT3B0aW9uPHN0cmluZz4ge1xuICBsZXQgcmV0OiBPcGFxdWVbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGxldCB2YWx1ZTogRklYTUU8T3BhcXVlLCAndXNlIE9wYXF1ZSBhbmQgbm9ybWFsaXplJz4gPSBsaXN0W2ldLnZhbHVlKCk7XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXQucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gKHJldC5sZW5ndGggPT09IDApID8gbnVsbCA6IHJldC5qb2luKCcgJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVFbGVtZW50T3BlcmF0aW9ucyBpbXBsZW1lbnRzIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBPcHRpb248VXBkYXRpbmdPcGNvZGVbXT4gPSBudWxsO1xuICBwcml2YXRlIGNsYXNzTGlzdDogT3B0aW9uPENsYXNzTGlzdD4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKHJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IFNpbXBsZS5OYW1lc3BhY2UsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICAgIGxldCBuc0F0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSwgbmFtZXNwYWNlKTtcblxuICAgIHRoaXMuYWRkQXR0cmlidXRlKG5zQXR0cmlidXRlKTtcbiAgfVxuXG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pIHtcbiAgICBsZXQgeyBlbnYgfSA9IHZtO1xuICAgIGxldCB7IG9wY29kZXMsIGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBvcGNvZGVzICYmIGkgPCBvcGNvZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKG9wY29kZXNbaV0pO1xuICAgIH1cblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgJ2NsYXNzJywgY2xhc3NMaXN0LnRvUmVmZXJlbmNlKCkpO1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMgPSBudWxsO1xuICAgIHRoaXMuY2xhc3NMaXN0ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MocmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGlmICghY2xhc3NMaXN0KSB7XG4gICAgICBjbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCA9IG5ldyBDbGFzc0xpc3QoKTtcbiAgICB9XG5cbiAgICBjbGFzc0xpc3QuYXBwZW5kKHJlZmVyZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSkge1xuICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2godGhpcy5lbnYpO1xuXG4gICAgaWYgKG9wY29kZSkge1xuICAgICAgbGV0IHsgb3Bjb2RlcyB9ID0gdGhpcztcblxuICAgICAgaWYgKCFvcGNvZGVzKSB7XG4gICAgICAgIG9wY29kZXMgPSB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICAgIH1cblxuICAgICAgb3Bjb2Rlcy5wdXNoKG9wY29kZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyBpbXBsZW1lbnRzIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgcHJpdmF0ZSBhdHRyaWJ1dGVOYW1lczogT3B0aW9uPHN0cmluZ1tdPiA9IG51bGw7XG4gIHByaXZhdGUgYXR0cmlidXRlczogT3B0aW9uPEF0dHJpYnV0ZVtdPiA9IG51bGw7XG4gIHByaXZhdGUgY2xhc3NMaXN0OiBPcHRpb248Q2xhc3NMaXN0PiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuZXcgU3RhdGljQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5ldyBTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhyZWZlcmVuY2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IFNpbXBsZS5OYW1lc3BhY2UsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcsIG5hbWVzcGFjZSk7XG4gICAgICBsZXQgbnNBdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UsIG5hbWVzcGFjZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5zQXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKSB7XG4gICAgbGV0IHsgZW52IH0gPSB0aGlzO1xuICAgIGxldCB7IGF0dHJpYnV0ZXMsIGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBhdHRyaWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlc1tpXS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xhc3NMaXN0KSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IGVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgJ2NsYXNzJywgZmFsc2UpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsICdjbGFzcycsIGNsYXNzTGlzdC50b1JlZmVyZW5jZSgpKTtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRBZGRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmF0dHJpYnV0ZU5hbWVzIHx8IHRoaXMuYXR0cmlidXRlTmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTE7XG4gIH1cblxuICBwcml2YXRlIGFkZENsYXNzKHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjbGFzc0xpc3QpIHtcbiAgICAgIGNsYXNzTGlzdCA9IHRoaXMuY2xhc3NMaXN0ID0gbmV3IENsYXNzTGlzdCgpO1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hcHBlbmQocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXR0cmlidXRlKG5hbWU6IHN0cmluZywgYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBsZXQgeyBhdHRyaWJ1dGVOYW1lcywgYXR0cmlidXRlcyB9ID0gdGhpcztcblxuICAgIGlmICghYXR0cmlidXRlTmFtZXMpIHtcbiAgICAgIGF0dHJpYnV0ZU5hbWVzID0gdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IFtdO1xuICAgICAgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZU5hbWVzLnB1c2gobmFtZSk7XG4gICAgdW53cmFwKGF0dHJpYnV0ZXMpLnB1c2goYXR0cmlidXRlKTtcbiAgfVxufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRmx1c2hFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrKCk7XG5cbiAgbGV0IGFjdGlvbiA9ICdGbHVzaEVsZW1lbnRPcGNvZGUjZXZhbHVhdGUnO1xuICBzdGFjay5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikuZmx1c2goc3RhY2suZXhwZWN0Q29uc3RydWN0aW5nKGFjdGlvbiksIHZtKTtcbiAgc3RhY2suZmx1c2hFbGVtZW50KCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNsb3NlRWxlbWVudCwgdm0gPT4gdm0uc3RhY2soKS5jbG9zZUVsZW1lbnQoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5TdGF0aWNBdHRyLCAodm0sIHsgb3AxOiBfbmFtZSwgb3AyOiBfdmFsdWUsIG9wMzogX25hbWVzcGFjZSB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCB2YWx1ZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX3ZhbHVlKTtcblxuICBpZiAoX25hbWVzcGFjZSkge1xuICAgIGxldCBuYW1lc3BhY2UgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lc3BhY2UpO1xuICAgIHZtLnN0YWNrKCkuc2V0U3RhdGljQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uc3RhY2soKS5zZXRTdGF0aWNBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk1vZGlmaWVyLCAodm0sIHsgb3AxOiBfbWFuYWdlciB9KSA9PiB7XG4gIGxldCBtYW5hZ2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyPE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+PihfbWFuYWdlcik7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdGFnID0gYXJncy50YWc7XG4gIGxldCB7IGNvbnN0cnVjdGluZzogZWxlbWVudCwgdXBkYXRlT3BlcmF0aW9ucyB9ID0gdm0uc3RhY2soKTtcbiAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLmR5bmFtaWNTY29wZSgpO1xuICBsZXQgbW9kaWZpZXIgPSBtYW5hZ2VyLmNyZWF0ZShlbGVtZW50IGFzIEZJWF9SRUlGSUNBVElPTjxFbGVtZW50PiwgYXJncywgZHluYW1pY1Njb3BlLCB1cGRhdGVPcGVyYXRpb25zKTtcblxuICBhcmdzLmNsZWFyKCk7XG5cbiAgdm0uZW52LnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVyKG1vZGlmaWVyLCBtYW5hZ2VyKTtcbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IobW9kaWZpZXIpO1xuXG4gIGlmIChkZXN0cnVjdG9yKSB7XG4gICAgdm0ubmV3RGVzdHJveWFibGUoZGVzdHJ1Y3Rvcik7XG4gIH1cblxuICB2bS51cGRhdGVXaXRoKG5ldyBVcGRhdGVNb2RpZmllck9wY29kZShcbiAgICB0YWcsXG4gICAgbWFuYWdlcixcbiAgICBtb2RpZmllclxuICApKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVXBkYXRlTW9kaWZpZXJPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtbW9kaWZpZXJcIjtcbiAgcHJpdmF0ZSBsYXN0VXBkYXRlZDogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhZzogVGFnLFxuICAgIHByaXZhdGUgbWFuYWdlcjogTW9kaWZpZXJNYW5hZ2VyPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBtb2RpZmllcjogT3BhcXVlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBtb2RpZmllciwgdGFnLCBsYXN0VXBkYXRlZCB9ID0gdGhpcztcblxuICAgIGlmICghdGFnLnZhbGlkYXRlKGxhc3RVcGRhdGVkKSkge1xuICAgICAgdm0uZW52LnNjaGVkdWxlVXBkYXRlTW9kaWZpZXIobW9kaWZpZXIsIG1hbmFnZXIpO1xuICAgICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xufVxuXG5leHBvcnQgY2xhc3MgU3RhdGljQXR0cmlidXRlIGltcGxlbWVudHMgQXR0cmlidXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgdmFsdWU6IHN0cmluZyxcbiAgICBwcml2YXRlIG5hbWVzcGFjZT86IHN0cmluZ1xuICApIHt9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhpcy5uYW1lLCB0aGlzLnZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGUgIHtcbiAgcHJpdmF0ZSBjYWNoZTogT3B0aW9uPFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT4+ID0gbnVsbDtcblxuICBwdWJsaWMgdGFnOiBUYWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwcml2YXRlIGF0dHJpYnV0ZU1hbmFnZXI6IEF0dHJpYnV0ZU1hbmFnZXIsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBuYW1lc3BhY2U/OiBTaW1wbGUuTmFtZXNwYWNlXG4gICkge1xuICAgIHRoaXMudGFnID0gcmVmZXJlbmNlLnRhZztcbiAgfVxuXG4gIHBhdGNoKGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBsZXQgeyBlbGVtZW50LCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCB2YWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3QgcGF0Y2ggYWZ0ZXIgZmx1c2gnKS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci51cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50IGFzIEZJWE1FPEVsZW1lbnQsICduZWVkcyB0byBiZSByZWlmaWVkIHByb3Blcmx5Jz4sIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IHJlZmVyZW5jZSwgZWxlbWVudCB9ID0gdGhpcztcblxuICAgIGlmIChpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSkpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHJlZmVyZW5jZS52YWx1ZSgpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhY2hlID0gdGhpcy5jYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuICAgICAgbGV0IHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbmV3IFBhdGNoRWxlbWVudE9wY29kZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogRGljdDxPcHRpb248c3RyaW5nPj4ge1xuICAgIGxldCB7IGVsZW1lbnQsIG5hbWVzcGFjZSwgbmFtZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZm9ybWF0dGVkRWxlbWVudCA9IGZvcm1hdEVsZW1lbnQoZWxlbWVudCk7XG4gICAgbGV0IGxhc3RWYWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3Qgc2VyaWFsaXplIGFmdGVyIGZsdXNoJykucGVlaygpIGFzIHN0cmluZztcblxuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IGZvcm1hdHRlZEVsZW1lbnQsXG4gICAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhc3RWYWx1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogZm9ybWF0dGVkRWxlbWVudCxcbiAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBuYW1lc3BhY2UsXG4gICAgICBuYW1lLFxuICAgICAgbGFzdFZhbHVlXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGA8JHtlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKX0gLz5gKTtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNBdHRyTlMsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IF9uYW1lc3BhY2UsIG9wMzogdHJ1c3RpbmcgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbmFtZXNwYWNlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZXNwYWNlKTtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIHZtLnN0YWNrKCkuc2V0RHluYW1pY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgcmVmZXJlbmNlLCAhIXRydXN0aW5nKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0F0dHIsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IHRydXN0aW5nIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIHZtLnN0YWNrKCkuc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lLCByZWZlcmVuY2UsICEhdHJ1c3RpbmcpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBQYXRjaEVsZW1lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwYXRjaC1lbGVtZW50XCI7XG5cbiAgcHJpdmF0ZSBvcGVyYXRpb246IER5bmFtaWNBdHRyaWJ1dGU7XG5cbiAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBEeW5hbWljQXR0cmlidXRlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IG9wZXJhdGlvbi50YWc7XG4gICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHRoaXMub3BlcmF0aW9uLnBhdGNoKHZtLmVudik7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQsIHR5cGUsIG9wZXJhdGlvbiB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiBfZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiBvcGVyYXRpb24udG9KU09OKClcbiAgICB9O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQU0zRCxBQUFPLEFBQStCLEFBQU0sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQzVFLEFBQU8sQUFDTCxBQUFlLEFBR2YsQUFBYyxBQUlkLEFBQWEsQUFDYixBQUFPLEFBQUksQUFBZ0IsQUFDM0IsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQzs7QUFFNUIsQUFBTyxBQUFFLEFBQWMsQUFBRSxBQUFrQixBQUFFLEFBQU0sQUFBa0IsQUFBQzs7QUFHdEUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQU0sQUFBQyxBQUM5QixBQUFPLEFBQUUsQUFBYyxBQUFZLEFBQU0sQUFBZSxBQUFDOztBQUV6RCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFPLFlBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBSSxBQUFFO0FBQzVDLEFBQUUsT0FBQyxBQUFRLEFBQUUsV0FBQyxBQUFVLFdBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQyxBQUN6RDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVUsZUFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFJLEFBQUU7QUFDL0MsQUFBRSxPQUFDLEFBQVEsQUFBRSxXQUFDLEFBQWEsY0FBQyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQzVEO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFHLEFBQUU7QUFDbEQsQUFBRSxPQUFDLEFBQVEsQUFB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RSxHQUFDLEFBQUcsQUFBQyxBQUFDLEFBQy9CO0FBQUM7QUFFRCxBQUFNO0FBQ0osWUFBSSxFQUFFLEFBQUssT0FBRSxBQUFJLE1BQUUsQUFBUyxBQUFFLGNBQUcsQUFBSSxBQUFDO0FBRXRDLEFBQU07QUFDSixBQUFJLGtCQUFFLEFBQUs7QUFDWCxBQUFJO0FBQ0osQUFBTyxxQkFBRSxBQUFTLFVBQUMsQUFBTSxBQUFFLEFBQzVCLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IEFyZ3VtZW50cyB9IGZyb20gJy4uLy4uL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRklYX1JFSUZJQ0FUSU9OIH0gZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBGSVhNRSwgT3B0aW9uLCBPcGFxdWUsIERpY3QsIHVud3JhcCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBDYWNoZWRSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZSxcbiAgVmVyc2lvbmVkUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVGFnLFxuICBSZXZpc2lvbixcbiAgUGF0aFJlZmVyZW5jZSxcbiAgY29tYmluZVRhZ2dlZCxcbiAgaXNDb25zdCBhcyBpc0NvbnN0UmVmZXJlbmNlLFxuICBpc01vZGlmaWVkXG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBNb2RpZmllck1hbmFnZXIgfSBmcm9tICcuLi8uLi9tb2RpZmllci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5VTExfUkVGRVJFTkNFLCBQcmltaXRpdmVSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IEF0dHJpYnV0ZU1hbmFnZXIgfSBmcm9tICcuLi8uLi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcbmltcG9ydCB7IEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGV4dCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLmVsZW1lbnRzKCkuYXBwZW5kVGV4dCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWVudCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLmVsZW1lbnRzKCkuYXBwZW5kQ29tbWVudCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnQsICh2bSwgeyBvcDE6IHRhZyB9KSA9PiB7XG4gIHZtLmVsZW1lbnRzKCkub3BlbkVsZW1lbnQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0YWcpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucywgKHZtLCB7IG9wMTogdGFnIH0pID0+IHtcbiAgbGV0IHRhZ05hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRhZyk7XG4gIGxldCBvcGVyYXRpb25zID0gdm0uc3RhY2sucG9wPEVsZW1lbnRPcGVyYXRpb25zPigpO1xuICB2bS5lbGVtZW50cygpLm9wZW5FbGVtZW50KHRhZ05hbWUsIG9wZXJhdGlvbnMpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5PcGVuRHluYW1pY0VsZW1lbnQsIHZtID0+IHtcbiAgbGV0IG9wZXJhdGlvbnMgPSB2bS5zdGFjay5wb3A8RWxlbWVudE9wZXJhdGlvbnM+KCk7XG4gIGxldCB0YWdOYW1lID0gdm0uc3RhY2sucG9wPFJlZmVyZW5jZTxzdHJpbmc+PigpLnZhbHVlKCk7XG4gIHZtLmVsZW1lbnRzKCkub3BlbkVsZW1lbnQodGFnTmFtZSwgb3BlcmF0aW9ucyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hSZW1vdGVFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBlbGVtZW50UmVmID0gdm0uc3RhY2sucG9wPFJlZmVyZW5jZTxTaW1wbGUuRWxlbWVudD4+KCk7XG4gIGxldCBuZXh0U2libGluZ1JlZiA9IHZtLnN0YWNrLnBvcDxSZWZlcmVuY2U8T3B0aW9uPFNpbXBsZS5Ob2RlPj4+KCk7XG5cbiAgbGV0IGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50O1xuICBsZXQgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG5cbiAgaWYgKGlzQ29uc3RSZWZlcmVuY2UoZWxlbWVudFJlZikpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudFJlZi52YWx1ZSgpO1xuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShlbGVtZW50UmVmKTtcbiAgICBlbGVtZW50ID0gY2FjaGUucGVlaygpO1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG5cbiAgaWYgKGlzQ29uc3RSZWZlcmVuY2UobmV4dFNpYmxpbmdSZWYpKSB7XG4gICAgbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZ1JlZi52YWx1ZSgpO1xuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShuZXh0U2libGluZ1JlZik7XG4gICAgbmV4dFNpYmxpbmcgPSBjYWNoZS5wZWVrKCk7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cblxuICB2bS5lbGVtZW50cygpLnB1c2hSZW1vdGVFbGVtZW50KGVsZW1lbnQsIG5leHRTaWJsaW5nKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wUmVtb3RlRWxlbWVudCwgdm0gPT4gdm0uZWxlbWVudHMoKS5wb3BSZW1vdGVFbGVtZW50KCkpO1xuXG5jbGFzcyBDbGFzc0xpc3Qge1xuICBwcml2YXRlIGxpc3Q6IE9wdGlvbjxSZWZlcmVuY2U8c3RyaW5nPltdPiA9IG51bGw7XG4gIHByaXZhdGUgaXNDb25zdCA9IHRydWU7XG5cbiAgYXBwZW5kKHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBsaXN0LCBpc0NvbnN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKGxpc3QgPT09IG51bGwpIGxpc3QgPSB0aGlzLmxpc3QgPSBbXTtcblxuICAgIGxpc3QucHVzaChyZWZlcmVuY2UpO1xuICAgIHRoaXMuaXNDb25zdCA9IGlzQ29uc3QgJiYgaXNDb25zdFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICB9XG5cbiAgdG9SZWZlcmVuY2UoKTogUmVmZXJlbmNlPE9wdGlvbjxzdHJpbmc+PiB7XG4gICAgbGV0IHsgbGlzdCwgaXNDb25zdCB9ID0gdGhpcztcblxuICAgIGlmICghbGlzdCkgcmV0dXJuIE5VTExfUkVGRVJFTkNFO1xuXG4gICAgaWYgKGlzQ29uc3QpIHJldHVybiBQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHRvQ2xhc3NOYW1lKGxpc3QpKTtcblxuICAgIHJldHVybiBuZXcgQ2xhc3NMaXN0UmVmZXJlbmNlKGxpc3QpO1xuICB9XG5cbn1cblxuY2xhc3MgQ2xhc3NMaXN0UmVmZXJlbmNlIGV4dGVuZHMgQ2FjaGVkUmVmZXJlbmNlPE9wdGlvbjxzdHJpbmc+PiB7XG4gIHB1YmxpYyB0YWc6IFRhZztcbiAgcHJpdmF0ZSBsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdID0gW107XG5cbiAgY29uc3RydWN0b3IobGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lVGFnZ2VkKGxpc3QpO1xuICAgIHRoaXMubGlzdCA9IGxpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZSgpOiBPcHRpb248c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRvQ2xhc3NOYW1lKHRoaXMubGlzdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9DbGFzc05hbWUobGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSk6IE9wdGlvbjxzdHJpbmc+IHtcbiAgbGV0IHJldDogT3BhcXVlW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdmFsdWU6IEZJWE1FPE9wYXF1ZSwgJ3VzZSBPcGFxdWUgYW5kIG5vcm1hbGl6ZSc+ID0gbGlzdFtpXS52YWx1ZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0LnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIChyZXQubGVuZ3RoID09PSAwKSA/IG51bGwgOiByZXQuam9pbignICcpO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgb3Bjb2RlczogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlW10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBjbGFzc0xpc3Q6IE9wdGlvbjxDbGFzc0xpc3Q+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhyZWZlcmVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBTaW1wbGUuTmFtZXNwYWNlLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZywgbmFtZXNwYWNlKTtcbiAgICBsZXQgbnNBdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UsIG5hbWVzcGFjZSk7XG5cbiAgICB0aGlzLmFkZEF0dHJpYnV0ZShuc0F0dHJpYnV0ZSk7XG4gIH1cblxuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKSB7XG4gICAgbGV0IHsgZW52IH0gPSB2bTtcbiAgICBsZXQgeyBvcGNvZGVzLCBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgb3Bjb2RlcyAmJiBpIDwgb3Bjb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGVzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NMaXN0KSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IGVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgJ2NsYXNzJywgZmFsc2UpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsICdjbGFzcycsIGNsYXNzTGlzdC50b1JlZmVyZW5jZSgpKTtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzTGlzdCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFkZENsYXNzKHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgPSBuZXcgQ2xhc3NMaXN0KCk7XG4gICAgfVxuXG4gICAgY2xhc3NMaXN0LmFwcGVuZChyZWZlcmVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKHRoaXMuZW52KTtcblxuICAgIGlmIChvcGNvZGUpIHtcbiAgICAgIGxldCB7IG9wY29kZXMgfSA9IHRoaXM7XG5cbiAgICAgIGlmICghb3Bjb2Rlcykge1xuICAgICAgICBvcGNvZGVzID0gdGhpcy5vcGNvZGVzID0gW107XG4gICAgICB9XG5cbiAgICAgIG9wY29kZXMucHVzaChvcGNvZGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgYXR0cmlidXRlTmFtZXM6IE9wdGlvbjxzdHJpbmdbXT4gPSBudWxsO1xuICBwcml2YXRlIGF0dHJpYnV0ZXM6IE9wdGlvbjxBdHRyaWJ1dGVbXT4gPSBudWxsO1xuICBwcml2YXRlIGNsYXNzTGlzdDogT3B0aW9uPENsYXNzTGlzdD4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbmV3IFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuZXcgU3RhdGljQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MocmVmZXJlbmNlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBTaW1wbGUuTmFtZXNwYWNlLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICAgICAgbGV0IG5zQXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlLCBuYW1lc3BhY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuc0F0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSkge1xuICAgIGxldCB7IGVudiB9ID0gdGhpcztcbiAgICBsZXQgeyBhdHRyaWJ1dGVzLCBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgYXR0cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZXNbaV0uZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSBlbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsICdjbGFzcycsIGZhbHNlKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCAnY2xhc3MnLCBjbGFzc0xpc3QudG9SZWZlcmVuY2UoKSk7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQWRkQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hdHRyaWJ1dGVOYW1lcyB8fCB0aGlzLmF0dHJpYnV0ZU5hbWVzLmluZGV4T2YobmFtZSkgPT09IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDbGFzcyhyZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGlmICghY2xhc3NMaXN0KSB7XG4gICAgICBjbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCA9IG5ldyBDbGFzc0xpc3QoKTtcbiAgICB9XG5cbiAgICBjbGFzc0xpc3QuYXBwZW5kKHJlZmVyZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogQXR0cmlidXRlKSB7XG4gICAgbGV0IHsgYXR0cmlidXRlTmFtZXMsIGF0dHJpYnV0ZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgICBhdHRyaWJ1dGVOYW1lcyA9IHRoaXMuYXR0cmlidXRlTmFtZXMgPSBbXTtcbiAgICAgIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lcy5wdXNoKG5hbWUpO1xuICAgIHVud3JhcChhdHRyaWJ1dGVzKS5wdXNoKGF0dHJpYnV0ZSk7XG4gIH1cbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkZsdXNoRWxlbWVudCwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5lbGVtZW50cygpO1xuXG4gIGxldCBhY3Rpb24gPSAnRmx1c2hFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgc3RhY2suZXhwZWN0T3BlcmF0aW9ucyhhY3Rpb24pLmZsdXNoKHN0YWNrLmV4cGVjdENvbnN0cnVjdGluZyhhY3Rpb24pLCB2bSk7XG4gIHN0YWNrLmZsdXNoRWxlbWVudCgpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5DbG9zZUVsZW1lbnQsIHZtID0+IHZtLmVsZW1lbnRzKCkuY2xvc2VFbGVtZW50KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU3RhdGljQXR0ciwgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogX3ZhbHVlLCBvcDM6IF9uYW1lc3BhY2UgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgdmFsdWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF92YWx1ZSk7XG5cbiAgaWYgKF9uYW1lc3BhY2UpIHtcbiAgICBsZXQgbmFtZXNwYWNlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZXNwYWNlKTtcbiAgICB2bS5lbGVtZW50cygpLnNldFN0YXRpY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHZtLmVsZW1lbnRzKCkuc2V0U3RhdGljQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Nb2RpZmllciwgKHZtLCB7IG9wMTogX21hbmFnZXIgfSkgPT4ge1xuICBsZXQgbWFuYWdlciA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcjxNb2RpZmllck1hbmFnZXI8T3BhcXVlPj4oX21hbmFnZXIpO1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdGFnID0gYXJncy50YWc7XG4gIGxldCB7IGNvbnN0cnVjdGluZzogZWxlbWVudCwgdXBkYXRlT3BlcmF0aW9ucyB9ID0gdm0uZWxlbWVudHMoKTtcbiAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLmR5bmFtaWNTY29wZSgpO1xuICBsZXQgbW9kaWZpZXIgPSBtYW5hZ2VyLmNyZWF0ZShlbGVtZW50IGFzIEZJWF9SRUlGSUNBVElPTjxFbGVtZW50PiwgYXJncywgZHluYW1pY1Njb3BlLCB1cGRhdGVPcGVyYXRpb25zKTtcblxuICBhcmdzLmNsZWFyKCk7XG5cbiAgdm0uZW52LnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVyKG1vZGlmaWVyLCBtYW5hZ2VyKTtcbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IobW9kaWZpZXIpO1xuXG4gIGlmIChkZXN0cnVjdG9yKSB7XG4gICAgdm0ubmV3RGVzdHJveWFibGUoZGVzdHJ1Y3Rvcik7XG4gIH1cblxuICB2bS51cGRhdGVXaXRoKG5ldyBVcGRhdGVNb2RpZmllck9wY29kZShcbiAgICB0YWcsXG4gICAgbWFuYWdlcixcbiAgICBtb2RpZmllclxuICApKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVXBkYXRlTW9kaWZpZXJPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtbW9kaWZpZXJcIjtcbiAgcHJpdmF0ZSBsYXN0VXBkYXRlZDogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhZzogVGFnLFxuICAgIHByaXZhdGUgbWFuYWdlcjogTW9kaWZpZXJNYW5hZ2VyPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBtb2RpZmllcjogT3BhcXVlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBtb2RpZmllciwgdGFnLCBsYXN0VXBkYXRlZCB9ID0gdGhpcztcblxuICAgIGlmICghdGFnLnZhbGlkYXRlKGxhc3RVcGRhdGVkKSkge1xuICAgICAgdm0uZW52LnNjaGVkdWxlVXBkYXRlTW9kaWZpZXIobW9kaWZpZXIsIG1hbmFnZXIpO1xuICAgICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xufVxuXG5leHBvcnQgY2xhc3MgU3RhdGljQXR0cmlidXRlIGltcGxlbWVudHMgQXR0cmlidXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgdmFsdWU6IHN0cmluZyxcbiAgICBwcml2YXRlIG5hbWVzcGFjZT86IHN0cmluZ1xuICApIHt9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhpcy5uYW1lLCB0aGlzLnZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGUgIHtcbiAgcHJpdmF0ZSBjYWNoZTogT3B0aW9uPFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT4+ID0gbnVsbDtcblxuICBwdWJsaWMgdGFnOiBUYWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwcml2YXRlIGF0dHJpYnV0ZU1hbmFnZXI6IEF0dHJpYnV0ZU1hbmFnZXIsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBuYW1lc3BhY2U/OiBTaW1wbGUuTmFtZXNwYWNlXG4gICkge1xuICAgIHRoaXMudGFnID0gcmVmZXJlbmNlLnRhZztcbiAgfVxuXG4gIHBhdGNoKGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBsZXQgeyBlbGVtZW50LCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCB2YWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3QgcGF0Y2ggYWZ0ZXIgZmx1c2gnKS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci51cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50IGFzIEZJWE1FPEVsZW1lbnQsICduZWVkcyB0byBiZSByZWlmaWVkIHByb3Blcmx5Jz4sIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IHJlZmVyZW5jZSwgZWxlbWVudCB9ID0gdGhpcztcblxuICAgIGlmIChpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSkpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHJlZmVyZW5jZS52YWx1ZSgpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhY2hlID0gdGhpcy5jYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuICAgICAgbGV0IHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbmV3IFBhdGNoRWxlbWVudE9wY29kZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogRGljdDxPcHRpb248c3RyaW5nPj4ge1xuICAgIGxldCB7IGVsZW1lbnQsIG5hbWVzcGFjZSwgbmFtZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZm9ybWF0dGVkRWxlbWVudCA9IGZvcm1hdEVsZW1lbnQoZWxlbWVudCk7XG4gICAgbGV0IGxhc3RWYWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3Qgc2VyaWFsaXplIGFmdGVyIGZsdXNoJykucGVlaygpIGFzIHN0cmluZztcblxuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IGZvcm1hdHRlZEVsZW1lbnQsXG4gICAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhc3RWYWx1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogZm9ybWF0dGVkRWxlbWVudCxcbiAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBuYW1lc3BhY2UsXG4gICAgICBuYW1lLFxuICAgICAgbGFzdFZhbHVlXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGA8JHtlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKX0gLz5gKTtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNBdHRyTlMsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IF9uYW1lc3BhY2UsIG9wMzogdHJ1c3RpbmcgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbmFtZXNwYWNlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZXNwYWNlKTtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgdm0uZWxlbWVudHMoKS5zZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCByZWZlcmVuY2UsICEhdHJ1c3RpbmcpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EeW5hbWljQXR0ciwgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogdHJ1c3RpbmcgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wPFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+PigpO1xuICB2bS5lbGVtZW50cygpLnNldER5bmFtaWNBdHRyaWJ1dGUobmFtZSwgcmVmZXJlbmNlLCAhIXRydXN0aW5nKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgUGF0Y2hFbGVtZW50T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicGF0Y2gtZWxlbWVudFwiO1xuXG4gIHByaXZhdGUgb3BlcmF0aW9uOiBEeW5hbWljQXR0cmlidXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wZXJhdGlvbjogRHluYW1pY0F0dHJpYnV0ZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBvcGVyYXRpb24udGFnO1xuICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB0aGlzLm9wZXJhdGlvbi5wYXRjaCh2bS5lbnYpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkLCB0eXBlLCBvcGVyYXRpb24gfSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsczogb3BlcmF0aW9uLnRvSlNPTigpXG4gICAgfTtcbiAgfVxufVxuIl19

@@ -10,3 +10,3 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(1 /* Helper */, (vm, { op1: _helper }) => {
let stack = vm.evalStack;
let stack = vm.stack;
let helper = vm.constants.getFunction(_helper);

@@ -16,17 +16,17 @@ let args = stack.pop();

args.clear();
vm.evalStack.push(value);
vm.stack.push(value);
});
_opcodes.APPEND_OPCODES.add(2 /* Function */, (vm, { op1: _function }) => {
let func = vm.constants.getFunction(_function);
vm.evalStack.push(func(vm));
vm.stack.push(func(vm));
});
_opcodes.APPEND_OPCODES.add(4 /* GetVariable */, (vm, { op1: symbol }) => {
_opcodes.APPEND_OPCODES.add(5 /* GetVariable */, (vm, { op1: symbol }) => {
let expr = vm.referenceForSymbol(symbol);
vm.evalStack.push(expr);
vm.stack.push(expr);
});
_opcodes.APPEND_OPCODES.add(3 /* SetVariable */, (vm, { op1: symbol }) => {
let expr = vm.evalStack.pop();
_opcodes.APPEND_OPCODES.add(4 /* SetVariable */, (vm, { op1: symbol }) => {
let expr = vm.stack.pop();
vm.scope().bindSymbol(symbol, expr);
});
_opcodes.APPEND_OPCODES.add(71 /* ResolveMaybeLocal */, (vm, { op1: _name }) => {
_opcodes.APPEND_OPCODES.add(70 /* ResolveMaybeLocal */, (vm, { op1: _name }) => {
let name = vm.constants.getString(_name);

@@ -38,26 +38,22 @@ let locals = vm.scope().getPartialMap();

}
vm.evalStack.push(ref);
vm.stack.push(ref);
});
_opcodes.APPEND_OPCODES.add(20 /* RootScope */, (vm, { op1: symbols, op2: bindCallerScope }) => {
_opcodes.APPEND_OPCODES.add(19 /* RootScope */, (vm, { op1: symbols, op2: bindCallerScope }) => {
vm.pushRootScope(symbols, !!bindCallerScope);
});
_opcodes.APPEND_OPCODES.add(5 /* GetProperty */, (vm, { op1: _key }) => {
_opcodes.APPEND_OPCODES.add(6 /* GetProperty */, (vm, { op1: _key }) => {
let key = vm.constants.getString(_key);
let expr = vm.evalStack.pop();
vm.evalStack.push(expr.get(key));
let expr = vm.stack.pop();
vm.stack.push(expr.get(key));
});
_opcodes.APPEND_OPCODES.add(6 /* PushBlock */, (vm, { op1: _block }) => {
_opcodes.APPEND_OPCODES.add(7 /* PushBlock */, (vm, { op1: _block }) => {
let block = _block ? vm.constants.getBlock(_block) : null;
vm.evalStack.push(block);
vm.stack.push(block);
});
_opcodes.APPEND_OPCODES.add(7 /* PushBlocks */, (vm, { op1: defaultBlock, op2: inverseBlock }) => {
if (defaultBlock) vm.evalStack.push(vm.constants.getBlock(defaultBlock));
if (inverseBlock) vm.evalStack.push(vm.constants.getBlock(inverseBlock));
});
_opcodes.APPEND_OPCODES.add(8 /* GetBlock */, (vm, { op1: _block }) => {
vm.evalStack.push(vm.scope().getBlock(_block));
vm.stack.push(vm.scope().getBlock(_block));
});
_opcodes.APPEND_OPCODES.add(9 /* HasBlock */, (vm, { op1: _block }) => {
let hasBlock = !!vm.scope().getBlock(_block);
vm.evalStack.push(hasBlock ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
vm.stack.push(hasBlock ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
});

@@ -67,3 +63,3 @@ _opcodes.APPEND_OPCODES.add(10 /* HasBlockParams */, (vm, { op1: _block }) => {

let hasBlockParams = block && block.symbolTable.parameters.length;
vm.evalStack.push(hasBlockParams ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
vm.stack.push(hasBlockParams ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
});

@@ -73,6 +69,6 @@ _opcodes.APPEND_OPCODES.add(11 /* Concat */, (vm, { op1: count }) => {

for (let i = count; i > 0; i--) {
out.push(vm.evalStack.pop());
out.push(vm.stack.pop());
}
vm.evalStack.push(new _concat.ConcatReference(out.reverse()));
vm.stack.push(new _concat.ConcatReference(out.reverse()));
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7O0FBQ25ELEFBQU8sQUFBRSxBQUFlLEFBQUUsQUFBTSxBQUF1QixBQUFDOztBQUV4RCxBQUFPLEFBQUUsQUFBYyxBQUFFLEFBQWUsQUFBRSxBQUFNLEFBQWtCLEFBQUM7O0FBUW5FLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQVMsY0FBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFPLEFBQUU7QUFDakQsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsQUFBQztBQUN6QixRQUFJLEFBQU0sU0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVcsWUFBUyxBQUFPLEFBQUMsQUFBQztBQUN2RCxRQUFJLEFBQUksT0FBRyxBQUFLLE1BQUMsQUFBRyxBQUFhLEFBQUM7QUFDbEMsUUFBSSxBQUFLLFFBQUcsQUFBTSxPQUFDLEFBQUUsSUFBRSxBQUFJLEFBQUMsQUFBQztBQUU3QixBQUFJLFNBQUMsQUFBSyxBQUFFLEFBQUM7QUFFYixBQUFFLE9BQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUMzQjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQVcsZ0JBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBUyxBQUFFO0FBQ3JELFFBQUksQUFBSSxPQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBVyxZQUE2QixBQUFTLEFBQUMsQUFBQztBQUMzRSxBQUFFLE9BQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBRSxBQUFDLEFBQUMsQUFBQyxBQUM5QjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQWMsbUJBQUUs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SUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFLLEFBQUU7QUFDL0MsUUFBSSxBQUFHLE1BQXFDLEFBQUUsQUFBQztBQUUvQyxBQUFHLEFBQUMsU0FBQyxJQUFJLEFBQUMsSUFBQyxBQUFLLE9BQUUsQUFBQyxJQUFDLEFBQUMsR0FBRSxBQUFDLEFBQUUsS0FBRSxBQUFDO0FBQzNCLEFBQUcsWUFBQyxBQUFJLEtBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFHLEFBQWtDLEFBQUMsQUFBQyxBQUMvRDtBQUFDO0FBRUQsQUFBRSxPQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFlLDRCQUFDLEFBQUcsSUFBQyxBQUFPLEFBQUUsQUFBQyxBQUFDLEFBQUMsQUFDeEQ7QUFBQyxBQUFDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbmNhdFJlZmVyZW5jZSB9IGZyb20gJy4uL2V4cHJlc3Npb25zL2NvbmNhdCc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBUUlVFX1JFRkVSRU5DRSwgRkFMU0VfUkVGRVJFTkNFIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tIFwiLi4vLi4vdm1cIjtcbmltcG9ydCB7IEFyZ3VtZW50cyB9IGZyb20gXCIuLi8uLi92bS9hcmd1bWVudHNcIjtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gKHZtOiBQdWJsaWNWTSkgPT4gVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPjtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkhlbHBlciwgKHZtLCB7IG9wMTogX2hlbHBlciB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGhlbHBlciA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbjxIZWxwZXI+KF9oZWxwZXIpO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG4gIGxldCB2YWx1ZSA9IGhlbHBlcih2bSwgYXJncyk7XG5cbiAgYXJncy5jbGVhcigpO1xuXG4gIHZtLmV2YWxTdGFjay5wdXNoKHZhbHVlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRnVuY3Rpb24sICh2bSwgeyBvcDE6IF9mdW5jdGlvbiB9KSA9PiB7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uPEZ1bmN0aW9uRXhwcmVzc2lvbjxPcGFxdWU+PihfZnVuY3Rpb24pO1xuICB2bS5ldmFsU3RhY2sucHVzaChmdW5jKHZtKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldFZhcmlhYmxlLCAodm0sIHsgb3AxOiBzeW1ib2wgfSkgPT4ge1xuICBsZXQgZXhwciA9IHZtLnJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2wpO1xuICB2bS5ldmFsU3RhY2sucHVzaChleHByKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0VmFyaWFibGUsICh2bSwgeyBvcDE6IHN5bWJvbCB9KSA9PiB7XG4gIGxldCBleHByID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLnNjb3BlKCkuYmluZFN5bWJvbChzeW1ib2wsIGV4cHIpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgKHZtLCB7IG9wMTogX25hbWUgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbG9jYWxzID0gdm0uc2NvcGUoKS5nZXRQYXJ0aWFsTWFwKCkhO1xuXG4gIGxldCByZWYgPSBsb2NhbHNbbmFtZV07XG4gIGlmIChyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHZtLmdldFNlbGYoKS5nZXQobmFtZSk7XG4gIH1cblxuICB2bS5ldmFsU3RhY2sucHVzaChyZWYpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Sb290U2NvcGUsICh2bSwgeyBvcDE6IHN5bWJvbHMsIG9wMjogYmluZENhbGxlclNjb3BlIH0pID0+IHtcbiAgdm0ucHVzaFJvb3RTY29wZShzeW1ib2xzLCAhIWJpbmRDYWxsZXJTY29wZSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldFByb3BlcnR5LCAodm0sIHsgb3AxOiBfa2V5IH0pID0+IHtcbiAgbGV0IGtleSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX2tleSk7XG4gIGxldCBleHByID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGV4cHIuZ2V0KGtleSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IF9ibG9jayA/IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spIDogbnVsbDtcbiAgdm0uZXZhbFN0YWNrLnB1c2goYmxvY2spO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2tzLCAodm0sIHsgb3AxOiBkZWZhdWx0QmxvY2ssIG9wMjogaW52ZXJzZUJsb2NrIH0pID0+IHtcbiAgaWYgKGRlZmF1bHRCbG9jaykgdm0uZXZhbFN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldEJsb2NrKGRlZmF1bHRCbG9jaykpO1xuICBpZiAoaW52ZXJzZUJsb2NrKSB2bS5ldmFsU3RhY2sucHVzaCh2bS5jb25zdGFudHMuZ2V0QmxvY2soaW52ZXJzZUJsb2NrKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldEJsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICB2bS5ldmFsU3RhY2sucHVzaCh2bS5zY29wZSgpLmdldEJsb2NrKF9ibG9jaykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IYXNCbG9jaywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGhhc0Jsb2NrID0gISF2bS5zY29wZSgpLmdldEJsb2NrKF9ibG9jayk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGhhc0Jsb2NrID8gVFJVRV9SRUZFUkVOQ0UgOiBGQUxTRV9SRUZFUkVOQ0UpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IYXNCbG9ja1BhcmFtcywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spO1xuICBsZXQgaGFzQmxvY2tQYXJhbXMgPSBibG9jayAmJiBibG9jay5zeW1ib2xUYWJsZS5wYXJhbWV0ZXJzLmxlbmd0aDtcbiAgdm0uZXZhbFN0YWNrLnB1c2goaGFzQmxvY2tQYXJhbXMgPyBUUlVFX1JFRkVSRU5DRSA6IEZBTFNFX1JFRkVSRU5DRSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbmNhdCwgKHZtLCB7IG9wMTogY291bnQgfSkgPT4ge1xuICBsZXQgb3V0OiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSA9IFtdO1xuXG4gIGZvciAobGV0IGk9Y291bnQ7IGk+MDsgaS0tKSB7XG4gICAgb3V0LnB1c2godm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCkpO1xuICB9XG5cbiAgdm0uZXZhbFN0YWNrLnB1c2gobmV3IENvbmNhdFJlZmVyZW5jZShvdXQucmV2ZXJzZSgpKSk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7O0FBQ25ELEFBQU8sQUFBRSxBQUFlLEFBQUUsQUFBTSxBQUF1QixBQUFDOztBQUV4RCxBQUFPLEFBQUUsQUFBYyxBQUFFLEFBQWUsQUFBRSxBQUFNLEFBQWtCLEFBQUM7O0FBUW5FLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQVMsY0FBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFPLEFBQUU7QUFDakQsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssQUFBQztBQUNyQixRQUFJLEFBQU0sU0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVcsWUFBUyxBQUFPLEFBQUMsQUFBQztBQUN2RCxRQUFJLEFBQUksT0FBRyxBQUFLLE1BQUMsQUFBRyxBQUFhLEFBQUM7QUFDbEMsUUFBSSxBQUFLLFFBQUcsQUFBTSxPQUFDLEFBQUUsSUFBRSxBQUFJLEFBQUMsQUFBQztBQUU3QixBQUFJLFNBQUMsQUFBSyxBQUFFLEFBQUM7QUFFYixBQUFFLE9BQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQyxBQUN2QjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQVcsZ0JBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBUyxBQUFFO0FBQ3JELFFBQUksQUFBSSxPQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBVyxZQUE2QixBQUFTLEFBQUMsQUFBQztBQUMzRSxBQUFFLE9BQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBRSxBQUFDLEFBQUMsQUFBQyxBQUMxQjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQWMsbUJBQUUs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OlsiaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb25jYXRSZWZlcmVuY2UgfSBmcm9tICcuLi9leHByZXNzaW9ucy9jb25jYXQnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgVFJVRV9SRUZFUkVOQ0UsIEZBTFNFX1JFRkVSRU5DRSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFB1YmxpY1ZNIH0gZnJvbSBcIi4uLy4uL3ZtXCI7XG5pbXBvcnQgeyBBcmd1bWVudHMgfSBmcm9tIFwiLi4vLi4vdm0vYXJndW1lbnRzXCI7XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiA9ICh2bTogUHVibGljVk0pID0+IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8VD47XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IZWxwZXIsICh2bSwgeyBvcDE6IF9oZWxwZXIgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGhlbHBlciA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbjxIZWxwZXI+KF9oZWxwZXIpO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG4gIGxldCB2YWx1ZSA9IGhlbHBlcih2bSwgYXJncyk7XG5cbiAgYXJncy5jbGVhcigpO1xuXG4gIHZtLnN0YWNrLnB1c2godmFsdWUpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5GdW5jdGlvbiwgKHZtLCB7IG9wMTogX2Z1bmN0aW9uIH0pID0+IHtcbiAgbGV0IGZ1bmMgPSB2bS5jb25zdGFudHMuZ2V0RnVuY3Rpb248RnVuY3Rpb25FeHByZXNzaW9uPE9wYXF1ZT4+KF9mdW5jdGlvbik7XG4gIHZtLnN0YWNrLnB1c2goZnVuYyh2bSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRWYXJpYWJsZSwgKHZtLCB7IG9wMTogc3ltYm9sIH0pID0+IHtcbiAgbGV0IGV4cHIgPSB2bS5yZWZlcmVuY2VGb3JTeW1ib2woc3ltYm9sKTtcbiAgdm0uc3RhY2sucHVzaChleHByKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0VmFyaWFibGUsICh2bSwgeyBvcDE6IHN5bWJvbCB9KSA9PiB7XG4gIGxldCBleHByID0gdm0uc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcbiAgdm0uc2NvcGUoKS5iaW5kU3ltYm9sKHN5bWJvbCwgZXhwcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlc29sdmVNYXliZUxvY2FsLCAodm0sIHsgb3AxOiBfbmFtZSB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCBsb2NhbHMgPSB2bS5zY29wZSgpLmdldFBhcnRpYWxNYXAoKSE7XG5cbiAgbGV0IHJlZiA9IGxvY2Fsc1tuYW1lXTtcbiAgaWYgKHJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmVmID0gdm0uZ2V0U2VsZigpLmdldChuYW1lKTtcbiAgfVxuXG4gIHZtLnN0YWNrLnB1c2gocmVmKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUm9vdFNjb3BlLCAodm0sIHsgb3AxOiBzeW1ib2xzLCBvcDI6IGJpbmRDYWxsZXJTY29wZSB9KSA9PiB7XG4gIHZtLnB1c2hSb290U2NvcGUoc3ltYm9scywgISFiaW5kQ2FsbGVyU2NvcGUpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRQcm9wZXJ0eSwgKHZtLCB7IG9wMTogX2tleSB9KSA9PiB7XG4gIGxldCBrZXkgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9rZXkpO1xuICBsZXQgZXhwciA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLnN0YWNrLnB1c2goZXhwci5nZXQoa2V5KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hCbG9jaywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gX2Jsb2NrID8gdm0uY29uc3RhbnRzLmdldEJsb2NrKF9ibG9jaykgOiBudWxsO1xuICB2bS5zdGFjay5wdXNoKGJsb2NrKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0QmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIHZtLnN0YWNrLnB1c2godm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGFzQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBoYXNCbG9jayA9ICEhdm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spO1xuICB2bS5zdGFjay5wdXNoKGhhc0Jsb2NrID8gVFJVRV9SRUZFUkVOQ0UgOiBGQUxTRV9SRUZFUkVOQ0UpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IYXNCbG9ja1BhcmFtcywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spO1xuICBsZXQgaGFzQmxvY2tQYXJhbXMgPSBibG9jayAmJiBibG9jay5zeW1ib2xUYWJsZS5wYXJhbWV0ZXJzLmxlbmd0aDtcbiAgdm0uc3RhY2sucHVzaChoYXNCbG9ja1BhcmFtcyA/IFRSVUVfUkVGRVJFTkNFIDogRkFMU0VfUkVGRVJFTkNFKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29uY2F0LCAodm0sIHsgb3AxOiBjb3VudCB9KSA9PiB7XG4gIGxldCBvdXQ6IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPltdID0gW107XG5cbiAgZm9yIChsZXQgaT1jb3VudDsgaT4wOyBpLS0pIHtcbiAgICBvdXQucHVzaCh2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpKTtcbiAgfVxuXG4gIHZtLnN0YWNrLnB1c2gobmV3IENvbmNhdFJlZmVyZW5jZShvdXQucmV2ZXJzZSgpKSk7XG59KTtcbiJdfQ==

@@ -16,4 +16,4 @@ 'use strict';

}
_opcodes.APPEND_OPCODES.add(52 /* PutIterator */, vm => {
let stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(53 /* PutIterator */, vm => {
let stack = vm.stack;
let listRef = stack.pop();

@@ -26,11 +26,11 @@ let key = stack.pop();

});
_opcodes.APPEND_OPCODES.add(50 /* EnterList */, (vm, { op2: start, op3: end }) => {
vm.enterList(start, end);
_opcodes.APPEND_OPCODES.add(51 /* EnterList */, (vm, { op1: start }) => {
vm.enterList(start);
});
_opcodes.APPEND_OPCODES.add(51 /* ExitList */, vm => vm.exitList());
_opcodes.APPEND_OPCODES.add(53 /* Iterate */, (vm, { op1: breaks, op2: start, op3: end }) => {
let stack = vm.evalStack;
let item = stack.top().next();
_opcodes.APPEND_OPCODES.add(52 /* ExitList */, vm => vm.exitList());
_opcodes.APPEND_OPCODES.add(54 /* Iterate */, (vm, { op1: breaks }) => {
let stack = vm.stack;
let item = stack.peek().next();
if (item) {
let tryOpcode = vm.iterate(start, end, item.memo, item.value);
let tryOpcode = vm.iterate(item.memo, item.value);
vm.enterItem(item.key, tryOpcode);

@@ -41,2 +41,2 @@ } else {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLEFBQU8sQUFBa0IsQUFBaUIsQUFBOEMsQUFBTSxBQUFvQixBQUFDOztBQUNuSCxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDOztBQUVuRDtBQUlFLGdCQUFZLEFBQTZCO0FBQ3ZDLEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBUyxVQUFDLEFBQUcsQUFBQztBQUN6QixBQUFJLGFBQUMsQUFBUyxZQUFHLEFBQVMsQUFBQyxBQUM3QjtBQUFDO0FBRUQsQUFBSztBQUNILEFBQU0sZUFBQyxDQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBTyxBQUFFLEFBQUMsQUFDbkM7QUFBQyxBQUNGOztBQUVELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWMsbUJBQUUsQUFBRTtBQUNuQyxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBUyxBQUFDO0FBQ3pCLFFBQUksQUFBTyxVQUFHLEFBQUssTUFBQyxBQUFHLEFBQWtDLEFBQUM7QUFDMUQsUUFBSSxBQUFHLE1BQUcsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQztBQUN0RCxRQUFJLEFBQVEsV0FBRyxBQUFFLEdBQUMsQUFBRyxJQUFDLEFBQVcsWUFBQyxBQUFPLFNBQUUsQUFBRyxJQUFDLEFBQUssQUFBRSxBQUFDLEFBQUM7QUFDeEQsUUFBSSxBQUFRLFdBQUcsQUFBSSxBQUFpQixpQ0FBQyxBQUFRLEFBQUMsQUFBQztBQUUvQyxBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVEsQUFBQyxBQUFDO0FBQ3JCLEFBQUssVUFBQyxBQUFJLEtBQUMsSUFBSSxBQUF5QiwwQkFBQyxBQUFRLFNBQUMsQUFBUyxBQUFDLEFBQUMsQUFBQyxBQUNoRTtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVksaUJBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBSyxPQUFFLEFBQUcsS0FBRSxBQUFHLEFBQUU7QUFDNUQsQUFBRSxPQUFDLEFBQVMsVUFBQyxBQUFLLE9BQUUsQUFBRyxBQUFDLEFBQUMsQUFDM0I7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFXLGdCQUFFLEFBQUUsTUFBSSxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUMsQUFBQztBQUVyRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBTSxRQUFFLEFBQUcsS0FBRSxBQUFLLE9BQUUsQUFBRyxLQUFFLEFBQUcsQUFBRTtBQUN2RSxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBUyxBQUFDO0FBQ3pCLFFBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFHLEFBQXFCLE1BQUMsQUFBSSxBQUFFLEFBQUM7QUFFakQsQUFBRSxBQUFDLFFBQUMsQUFBSSxBQUFDLE1BQUMsQUFBQztBQUNULFlBQUksQUFBUyxZQUFHLEFBQUUsR0FBQyxBQUFPLFFBQUMsQUFBSyxPQUFFLEFBQUcsS0FBRSxBQUFJLEtBQUMsQUFBSSxNQUFFLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQztBQUM5RCxBQUFFLFdBQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFHLEtBQUUsQUFBUyxBQUFDLEFBQUMsQUFDcEM7QUFBQyxBQUFDLEFBQUksV0FBQyxBQUFDO0FBQ04sQUFBRSxXQUFDLEFBQUksS0FBQyxBQUFNLEFBQUMsQUFBQyxBQUNsQjtBQUFDLEFBQ0g7QUFBQyxBQUFDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFRhZywgUmVmZXJlbmNlLCBSZWZlcmVuY2VJdGVyYXRvciwgSXRlcmF0aW9uQXJ0aWZhY3RzLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5jbGFzcyBJdGVyYWJsZVByZXNlbmNlUmVmZXJlbmNlIGltcGxlbWVudHMgUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcHVibGljIHRhZzogVGFnO1xuICBwcml2YXRlIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzO1xuXG4gIGNvbnN0cnVjdG9yKGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzKSB7XG4gICAgdGhpcy50YWcgPSBhcnRpZmFjdHMudGFnO1xuICAgIHRoaXMuYXJ0aWZhY3RzID0gYXJ0aWZhY3RzO1xuICB9XG5cbiAgdmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmFydGlmYWN0cy5pc0VtcHR5KCk7XG4gIH1cbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1dEl0ZXJhdG9yLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGxpc3RSZWYgPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICBsZXQga2V5ID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgbGV0IGl0ZXJhYmxlID0gdm0uZW52Lml0ZXJhYmxlRm9yKGxpc3RSZWYsIGtleS52YWx1ZSgpKTtcbiAgbGV0IGl0ZXJhdG9yID0gbmV3IFJlZmVyZW5jZUl0ZXJhdG9yKGl0ZXJhYmxlKTtcblxuICBzdGFjay5wdXNoKGl0ZXJhdG9yKTtcbiAgc3RhY2sucHVzaChuZXcgSXRlcmFibGVQcmVzZW5jZVJlZmVyZW5jZShpdGVyYXRvci5hcnRpZmFjdHMpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXJMaXN0LCAodm0sIHsgb3AyOiBzdGFydCwgb3AzOiBlbmQgfSkgPT4ge1xuICB2bS5lbnRlckxpc3Qoc3RhcnQsIGVuZCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXRMaXN0LCB2bSA9PiB2bS5leGl0TGlzdCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkl0ZXJhdGUsICh2bSwgeyBvcDE6IGJyZWFrcywgb3AyOiBzdGFydCwgb3AzOiBlbmQgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBpdGVtID0gc3RhY2sudG9wPFJlZmVyZW5jZUl0ZXJhdG9yPigpLm5leHQoKTtcblxuICBpZiAoaXRlbSkge1xuICAgIGxldCB0cnlPcGNvZGUgPSB2bS5pdGVyYXRlKHN0YXJ0LCBlbmQsIGl0ZW0ubWVtbywgaXRlbS52YWx1ZSk7XG4gICAgdm0uZW50ZXJJdGVtKGl0ZW0ua2V5LCB0cnlPcGNvZGUpO1xuICB9IGVsc2Uge1xuICAgIHZtLmdvdG8oYnJlYWtzKTtcbiAgfVxufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLEFBQU8sQUFBa0IsQUFBaUIsQUFBOEMsQUFBTSxBQUFvQixBQUFDOztBQUNuSCxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDOztBQUVuRDtBQUlFLGdCQUFZLEFBQTZCO0FBQ3ZDLEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBUyxVQUFDLEFBQUcsQUFBQztBQUN6QixBQUFJLGFBQUMsQUFBUyxZQUFHLEFBQVMsQUFBQyxBQUM3QjtBQUFDO0FBRUQsQUFBSztBQUNILEFBQU0sZUFBQyxDQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBTyxBQUFFLEFBQUMsQUFDbkM7QUFBQyxBQUNGOztBQUVELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWMsbUJBQUUsQUFBRTtBQUNuQyxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBSyxBQUFDO0FBQ3JCLFFBQUksQUFBTyxVQUFHLEFBQUssTUFBQyxBQUFHLEFBQWtDLEFBQUM7QUFDMUQsUUFBSSxBQUFHLE1BQUcsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQztBQUN0RCxRQUFJLEFBQVEsV0FBRyxBQUFFLEdBQUMsQUFBRyxJQUFDLEFBQVcsWUFBQyxBQUFPLFNBQUUsQUFBRyxJQUFDLEFBQUssQUFBRSxBQUFDLEFBQUM7QUFDeEQsUUFBSSxBQUFRLFdBQUcsQUFBSSxBQUFpQixpQ0FBQyxBQUFRLEFBQUMsQUFBQztBQUUvQyxBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVEsQUFBQyxBQUFDO0FBQ3JCLEFBQUssVUFBQyxBQUFJLEtBQUMsSUFBSSxBQUF5QiwwQkFBQyxBQUFRLFNBQUMsQUFBUyxBQUFDLEFBQUMsQUFBQyxBQUNoRTtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVksaUJBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBSyxBQUFFO0FBQ2xELEFBQUUsT0FBQyxBQUFTLFVBQUMsQUFBSyxBQUFDLEFBQUMsQUFDdEI7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFXLGdCQUFFLEFBQUUsTUFBSSxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUMsQUFBQztBQUVyRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBTSxBQUFFO0FBQ2pELFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUM7QUFDckIsUUFBSSxBQUFJLE9BQUcsQUFBSyxNQUFDLEFBQUksQUFBcUIsT0FBQyxBQUFJLEFBQUUsQUFBQztBQUVsRCxBQUFFLEFBQUMsUUFBQyxBQUFJLEFBQUMsTUFBQyxBQUFDO0FBQ1QsWUFBSSxBQUFTLFlBQUcsQUFBRSxHQUFDLEFBQU8sUUFBQyxBQUFJLEtBQUMsQUFBSSxNQUFFLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQztBQUNsRCxBQUFFLFdBQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFHLEtBQUUsQUFBUyxBQUFDLEFBQUMsQUFDcEM7QUFBQyxBQUFDLEFBQUksV0FBQyxBQUFDO0FBQ04sQUFBRSxXQUFDLEFBQUksS0FBQyxBQUFNLEFBQUMsQUFBQyxBQUNsQjtBQUFDLEFBQ0g7QUFBQyxBQUFDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFRhZywgUmVmZXJlbmNlLCBSZWZlcmVuY2VJdGVyYXRvciwgSXRlcmF0aW9uQXJ0aWZhY3RzLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5jbGFzcyBJdGVyYWJsZVByZXNlbmNlUmVmZXJlbmNlIGltcGxlbWVudHMgUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcHVibGljIHRhZzogVGFnO1xuICBwcml2YXRlIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzO1xuXG4gIGNvbnN0cnVjdG9yKGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzKSB7XG4gICAgdGhpcy50YWcgPSBhcnRpZmFjdHMudGFnO1xuICAgIHRoaXMuYXJ0aWZhY3RzID0gYXJ0aWZhY3RzO1xuICB9XG5cbiAgdmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmFydGlmYWN0cy5pc0VtcHR5KCk7XG4gIH1cbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1dEl0ZXJhdG9yLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgbGlzdFJlZiA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIGxldCBrZXkgPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxzdHJpbmc+PigpO1xuICBsZXQgaXRlcmFibGUgPSB2bS5lbnYuaXRlcmFibGVGb3IobGlzdFJlZiwga2V5LnZhbHVlKCkpO1xuICBsZXQgaXRlcmF0b3IgPSBuZXcgUmVmZXJlbmNlSXRlcmF0b3IoaXRlcmFibGUpO1xuXG4gIHN0YWNrLnB1c2goaXRlcmF0b3IpO1xuICBzdGFjay5wdXNoKG5ldyBJdGVyYWJsZVByZXNlbmNlUmVmZXJlbmNlKGl0ZXJhdG9yLmFydGlmYWN0cykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FbnRlckxpc3QsICh2bSwgeyBvcDE6IHN0YXJ0IH0pID0+IHtcbiAgdm0uZW50ZXJMaXN0KHN0YXJ0KTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRXhpdExpc3QsIHZtID0+IHZtLmV4aXRMaXN0KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSXRlcmF0ZSwgKHZtLCB7IG9wMTogYnJlYWtzIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBpdGVtID0gc3RhY2sucGVlazxSZWZlcmVuY2VJdGVyYXRvcj4oKS5uZXh0KCk7XG5cbiAgaWYgKGl0ZW0pIHtcbiAgICBsZXQgdHJ5T3Bjb2RlID0gdm0uaXRlcmF0ZShpdGVtLm1lbW8sIGl0ZW0udmFsdWUpO1xuICAgIHZtLmVudGVySXRlbShpdGVtLmtleSwgdHJ5T3Bjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2bS5nb3RvKGJyZWFrcyk7XG4gIH1cbn0pO1xuIl19

@@ -5,7 +5,7 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(70 /* GetPartialTemplate */, vm => {
let stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(69 /* GetPartialTemplate */, vm => {
let stack = vm.stack;
let definition = stack.pop();
stack.push(definition.value().template.asPartial());
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDOztBQUduRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFxQiwwQkFBRSxBQUFFO0FBQzFDLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLEFBQUM7QUFDekIsUUFBSSxBQUFVLGFBQUcsQUFBSyxNQUFDLEFBQUcsQUFBMkQsQUFBQztBQUN0RixBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFRLFNBQUMsQUFBUyxBQUFFLEFBQUMsQUFBQyxBQUN0RDtBQUFDLEFBQUMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3BhcnRpYWwnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UGFydGlhbFRlbXBsYXRlLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGRlZmluaXRpb24gPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxQYXJ0aWFsRGVmaW5pdGlvbjxUZW1wbGF0ZU1ldGE+Pj4oKTtcbiAgc3RhY2sucHVzaChkZWZpbml0aW9uLnZhbHVlKCkudGVtcGxhdGUuYXNQYXJ0aWFsKCkpO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDOztBQUduRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFxQiwwQkFBRSxBQUFFO0FBQzFDLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUM7QUFDckIsUUFBSSxBQUFVLGFBQUcsQUFBSyxNQUFDLEFBQUcsQUFBMkQsQUFBQztBQUN0RixBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFRLFNBQUMsQUFBUyxBQUFFLEFBQUMsQUFBQyxBQUN0RDtBQUFDLEFBQUMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3BhcnRpYWwnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UGFydGlhbFRlbXBsYXRlLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgZGVmaW5pdGlvbiA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPFBhcnRpYWxEZWZpbml0aW9uPFRlbXBsYXRlTWV0YT4+PigpO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24udmFsdWUoKS50ZW1wbGF0ZS5hc1BhcnRpYWwoKSk7XG59KTtcbiJdfQ==

@@ -16,21 +16,14 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(18 /* ReserveLocals */, (vm, { op1: amount }) => {
vm.reserveLocals(amount);
_opcodes.APPEND_OPCODES.add(20 /* ChildScope */, vm => vm.pushChildScope());
_opcodes.APPEND_OPCODES.add(21 /* PopScope */, vm => vm.popScope());
_opcodes.APPEND_OPCODES.add(38 /* PushDynamicScope */, vm => vm.pushDynamicScope());
_opcodes.APPEND_OPCODES.add(39 /* PopDynamicScope */, vm => vm.popDynamicScope());
_opcodes.APPEND_OPCODES.add(12 /* Immediate */, (vm, { op1: number }) => {
vm.stack.push(number);
});
_opcodes.APPEND_OPCODES.add(19 /* ReleaseLocals */, vm => vm.releaseLocals());
_opcodes.APPEND_OPCODES.add(14 /* SetLocal */, (vm, { op1: position }) => {
vm.setLocal(position, vm.evalStack.pop());
_opcodes.APPEND_OPCODES.add(13 /* Constant */, (vm, { op1: other }) => {
vm.stack.push(vm.constants.getOther(other));
});
_opcodes.APPEND_OPCODES.add(15 /* GetLocal */, (vm, { op1: position }) => {
vm.evalStack.push(vm.getLocal(position));
});
_opcodes.APPEND_OPCODES.add(21 /* ChildScope */, vm => vm.pushChildScope());
_opcodes.APPEND_OPCODES.add(22 /* PopScope */, vm => vm.popScope());
_opcodes.APPEND_OPCODES.add(39 /* PushDynamicScope */, vm => vm.pushDynamicScope());
_opcodes.APPEND_OPCODES.add(40 /* PopDynamicScope */, vm => vm.popDynamicScope());
_opcodes.APPEND_OPCODES.add(12 /* Constant */, (vm, { op1: other }) => {
vm.evalStack.push(vm.constants.getOther(other));
});
_opcodes.APPEND_OPCODES.add(13 /* Primitive */, (vm, { op1: primitive }) => {
let stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(14 /* PrimitiveReference */, (vm, { op1: primitive }) => {
let stack = vm.stack;
let flag = (primitive & 3 << 30) >>> 30;

@@ -63,27 +56,35 @@ let value = primitive & ~(3 << 30);

});
_opcodes.APPEND_OPCODES.add(16 /* Dup */, vm => vm.evalStack.dup());
_opcodes.APPEND_OPCODES.add(17 /* Pop */, vm => vm.evalStack.pop());
_opcodes.APPEND_OPCODES.add(38 /* BindDynamicScope */, (vm, { op1: _names }) => {
_opcodes.APPEND_OPCODES.add(15 /* Dup */, (vm, { op1: register, op2: offset }) => {
let position = vm.fetchValue(register) - offset;
vm.stack.dup(position);
});
_opcodes.APPEND_OPCODES.add(16 /* Pop */, (vm, { op1: count }) => vm.stack.pop(count));
_opcodes.APPEND_OPCODES.add(17 /* Load */, (vm, { op1: register }) => vm.load(register));
_opcodes.APPEND_OPCODES.add(18 /* Fetch */, (vm, { op1: register }) => vm.fetch(register));
_opcodes.APPEND_OPCODES.add(37 /* BindDynamicScope */, (vm, { op1: _names }) => {
let names = vm.constants.getArray(_names);
vm.bindDynamicScope(names);
});
_opcodes.APPEND_OPCODES.add(47 /* Enter */, (vm, { op1: args, op2: start, op3: end }) => vm.enter(args, start, end));
_opcodes.APPEND_OPCODES.add(48 /* Exit */, vm => vm.exit());
_opcodes.APPEND_OPCODES.add(41 /* CompileDynamicBlock */, vm => {
let stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(46 /* PushFrame */, vm => vm.pushFrame());
_opcodes.APPEND_OPCODES.add(47 /* PopFrame */, vm => vm.popFrame());
_opcodes.APPEND_OPCODES.add(48 /* Enter */, (vm, { op1: args }) => vm.enter(args));
_opcodes.APPEND_OPCODES.add(49 /* Exit */, vm => vm.exit());
_opcodes.APPEND_OPCODES.add(40 /* CompileDynamicBlock */, vm => {
let stack = vm.stack;
let block = stack.pop();
stack.push(block ? block.compileDynamic(vm.env) : null);
});
_opcodes.APPEND_OPCODES.add(42 /* InvokeStatic */, (vm, { op1: _block }) => {
_opcodes.APPEND_OPCODES.add(41 /* InvokeStatic */, (vm, { op1: _block }) => {
let block = vm.constants.getBlock(_block);
vm.invokeBlock(block);
let compiled = block.compileStatic(vm.env);
vm.call(compiled.start);
});
_opcodes.APPEND_OPCODES.add(43 /* InvokeDynamic */, (vm, { op1: _invoker }) => {
_opcodes.APPEND_OPCODES.add(42 /* InvokeDynamic */, (vm, { op1: _invoker }) => {
let invoker = vm.constants.getOther(_invoker);
let block = vm.evalStack.pop();
let block = vm.stack.pop();
invoker.invoke(vm, block);
});
_opcodes.APPEND_OPCODES.add(44 /* Jump */, (vm, { op1: target }) => vm.goto(target));
_opcodes.APPEND_OPCODES.add(45 /* JumpIf */, (vm, { op1: target }) => {
let reference = vm.evalStack.pop();
_opcodes.APPEND_OPCODES.add(43 /* Jump */, (vm, { op1: target }) => vm.goto(target));
_opcodes.APPEND_OPCODES.add(44 /* JumpIf */, (vm, { op1: target }) => {
let reference = vm.stack.pop();
if ((0, _reference.isConst)(reference)) {

@@ -101,4 +102,4 @@ if (reference.value()) {

});
_opcodes.APPEND_OPCODES.add(46 /* JumpUnless */, (vm, { op1: target }) => {
let reference = vm.evalStack.pop();
_opcodes.APPEND_OPCODES.add(45 /* JumpUnless */, (vm, { op1: target }) => {
let reference = vm.stack.pop();
if ((0, _reference.isConst)(reference)) {

@@ -116,3 +117,3 @@ if (!reference.value()) {

});
_opcodes.APPEND_OPCODES.add(23 /* Return */, vm => vm.return());
_opcodes.APPEND_OPCODES.add(22 /* Return */, vm => vm.return());
const ConstTest = exports.ConstTest = function (ref, _env) {

@@ -127,4 +128,4 @@ return new _reference.ConstReference(!!ref.value());

};
_opcodes.APPEND_OPCODES.add(49 /* Test */, (vm, { op1: _func }) => {
let stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(50 /* Test */, (vm, { op1: _func }) => {
let stack = vm.stack;
let operand = stack.pop();

@@ -225,2 +226,2 @@ let func = vm.constants.getFunction(_func);

exports.LabelOpcode = LabelOpcode;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsQUFBTyxBQUFjLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFHM0QsQUFBTyxBQUFhLEFBQWMsQUFBMEIsQUFBTSxBQUFvQixBQUFDOztBQUN2RixBQUFPLEFBQWtCLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQyxBQUMvRCxBQUFPLEFBQUUsQUFBWSxBQUFFLEFBQWMsQUFBaUIsQUFBTyxBQUFFLEFBQVUsQUFBRSxBQUFNLEFBQW9CLEFBQUMsQUFFdEcsQUFBTyxBQUFFLEFBQWMsQUFBWSxBQUFNLEFBQWUsQUFBQzs7QUFNekQsQUFBTyxBQUNMLEFBQWMsQUFDZCxBQUFtQixBQUNuQixBQUFjLEFBQ2QsQUFBZSxBQUNmLEFBQWtCLEFBQ25CLEFBQU0sQUFBa0IsQUFBQzs7QUFFMUIsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBZ0IscUJBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBTSxBQUFFO0FBQ3ZELEFBQUUsT0FBQyxBQUFhLGNBQUMsQUFBTSxBQUFDLEFBQUMsQUFDM0I7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFnQixxQkFBRSxBQUFFLE1BQUksQUFBRSxHQUFDLEFBQWEsQUFBRSxBQUFDLEFBQUM7QUFFL0QsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBVyxnQkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFRLEFBQUU7QUFDcEQsQUFBRSxPQUFDLEFBQVEsU0FBQyxBQUFRLFVBQUUsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFHLEFBQUUsQUFBQyxBQUFDLEFBQzVDO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBVyxnQkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFRLEFBQUU7QUFDcEQs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UyxVQUFDLEFBQUksS0FBQyxBQUFPLEFBQUUsQUFBQyxBQUFDLEFBQ3ZDLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlIH0gZnJvbSAnLi4vYmxvY2tzJztcbmltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBVcGRhdGluZ1ZNLCBWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFN5bWJvbFRhYmxlIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIENvbnN0UmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQ09OU1RBTlRfVEFHLCBSZWZlcmVuY2VDYWNoZSwgUmV2aXNpb24sIFRhZywgaXNDb25zdCwgaXNNb2RpZmllZCB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7XG4gIEJsb2NrXG59IGZyb20gJy4uLy4uL3NjYW5uZXInO1xuXG5pbXBvcnQge1xuICBOVUxMX1JFRkVSRU5DRSxcbiAgVU5ERUZJTkVEX1JFRkVSRU5DRSxcbiAgVFJVRV9SRUZFUkVOQ0UsXG4gIEZBTFNFX1JFRkVSRU5DRSxcbiAgUHJpbWl0aXZlUmVmZXJlbmNlXG59IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUmVzZXJ2ZUxvY2FscywgKHZtLCB7IG9wMTogYW1vdW50IH0pID0+IHtcbiAgdm0ucmVzZXJ2ZUxvY2FscyhhbW91bnQpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZWxlYXNlTG9jYWxzLCB2bSA9PiB2bS5yZWxlYXNlTG9jYWxzKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0TG9jYWwsICh2bSwgeyBvcDE6IHBvc2l0aW9uIH0pID0+IHtcbiAgdm0uc2V0TG9jYWwocG9zaXRpb24sIHZtLmV2YWxTdGFjay5wb3AoKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldExvY2FsLCAodm0sIHsgb3AxOiBwb3NpdGlvbiB9KSA9PiB7XG4gIHZtLmV2YWxTdGFjay5wdXNoKHZtLmdldExvY2FsKHBvc2l0aW9uKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNoaWxkU2NvcGUsIHZtID0+IHZtLnB1c2hDaGlsZFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wU2NvcGUsIHZtID0+IHZtLnBvcFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucHVzaER5bmFtaWNTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucG9wRHluYW1pY1Njb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29uc3RhbnQsICh2bSwgeyBvcDE6IG90aGVyIH0pID0+IHtcbiAgdm0uZXZhbFN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldE90aGVyKG90aGVyKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlByaW1pdGl2ZSwgKHZtLCB7IG9wMTogcHJpbWl0aXZlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgZmxhZyA9IChwcmltaXRpdmUgJiAoMyA8PCAzMCkpID4+PiAzMDtcbiAgbGV0IHZhbHVlID0gcHJpbWl0aXZlICYgfigzIDw8IDMwKTtcblxuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHZhbHVlKSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlIDA6IHN0YWNrLnB1c2goRkFMU0VfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogc3RhY2sucHVzaChUUlVFX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IHN0YWNrLnB1c2goTlVMTF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBzdGFjay5wdXNoKFVOREVGSU5FRF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR1cCwgdm0gPT4gdm0uZXZhbFN0YWNrLmR1cCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcCwgdm0gPT4gdm0uZXZhbFN0YWNrLnBvcCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkJpbmREeW5hbWljU2NvcGUsICh2bSwgeyBvcDE6IF9uYW1lcyB9KSA9PiB7XG4gIGxldCBuYW1lcyA9IHZtLmNvbnN0YW50cy5nZXRBcnJheShfbmFtZXMpO1xuICB2bS5iaW5kRHluYW1pY1Njb3BlKG5hbWVzKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXIsICh2bSwgeyBvcDE6IGFyZ3MsIG9wMjogc3RhcnQsIG9wMzogZW5kIH0pID0+IHZtLmVudGVyKGFyZ3MsIHN0YXJ0LCBlbmQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXQsICh2bSkgPT4gdm0uZXhpdCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbXBpbGVEeW5hbWljQmxvY2ssIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgYmxvY2sgPSBzdGFjay5wb3A8QmxvY2s+KCk7XG4gIHN0YWNrLnB1c2goYmxvY2sgPyBibG9jay5jb21waWxlRHluYW1pYyh2bS5lbnYpIDogbnVsbCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkludm9rZVN0YXRpYywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uY29uc3RhbnRzLmdldEJsb2NrKF9ibG9jayk7XG4gIHZtLmludm9rZUJsb2NrKGJsb2NrKTtcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNJbnZva2VyPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBpbnZva2Uodm06IFZNLCBibG9jazogT3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+Pik6IHZvaWQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JbnZva2VEeW5hbWljLCAodm0sIHsgb3AxOiBfaW52b2tlciB9KSA9PiB7XG4gIGxldCBpbnZva2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyPER5bmFtaWNJbnZva2VyPFN5bWJvbFRhYmxlPj4oX2ludm9rZXIpO1xuICBsZXQgYmxvY2sgPSB2bS5ldmFsU3RhY2sucG9wPE9wdGlvbjxDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTeW1ib2xUYWJsZT4+PigpO1xuICBpbnZva2VyLmludm9rZSh2bSwgYmxvY2spO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4gdm0uZ290byh0YXJnZXQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkp1bXBJZiwgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAocmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoY2FjaGUucGVlaygpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcFVubGVzcywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAoIXJlZmVyZW5jZS52YWx1ZSgpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKCFjYWNoZS5wZWVrKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXR1cm4sIHZtID0+IHZtLnJldHVybigpKTtcblxuZXhwb3J0IHR5cGUgVGVzdEZ1bmN0aW9uID0gKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpID0+IFJlZmVyZW5jZTxib29sZWFuPjtcblxuZXhwb3J0IGNvbnN0IENvbnN0VGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgX2VudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IENvbnN0UmVmZXJlbmNlKCEhcmVmLnZhbHVlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IFNpbXBsZVRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIF9lbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIHJlZiBhcyBSZWZlcmVuY2U8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBlbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIGVudi50b0NvbmRpdGlvbmFsUmVmZXJlbmNlKHJlZik7XG59O1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGVzdCwgKHZtLCB7IG9wMTogX2Z1bmMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBvcGVyYW5kID0gc3RhY2sucG9wKCk7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uKF9mdW5jKTtcbiAgc3RhY2sucHVzaChmdW5jKG9wZXJhbmQsIHZtLmVudikpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBBc3NlcnQgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJhc3NlcnRcIjtcblxuICBwcml2YXRlIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+O1xuXG4gIGNvbnN0cnVjdG9yKGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQoY2FjaGUucmV2YWxpZGF0ZSgpKSkge1xuICAgICAgdm0udGhyb3coKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgdHlwZSwgX2d1aWQsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGV4cGVjdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGV4cGVjdGVkID0gU3RyaW5nKGNhY2hlLnBlZWsoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGFyZ3M6IFtdLFxuICAgICAgZGV0YWlsczogeyBleHBlY3RlZCB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJqdW1wLWlmLW5vdC1tb2RpZmllZFwiO1xuXG4gIHByaXZhdGUgbGFzdFJldmlzaW9uOiBSZXZpc2lvbjtcblxuICBjb25zdHJ1Y3Rvcih0YWc6IFRhZywgcHJpdmF0ZSB0YXJnZXQ6IExhYmVsT3Bjb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IHRhZztcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyB0YWcsIHRhcmdldCwgbGFzdFJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF2bS5hbHdheXNSZXZhbGlkYXRlICYmIHRhZy52YWxpZGF0ZShsYXN0UmV2aXNpb24pKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgZGlkTW9kaWZ5KCkge1xuICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGhpcy50YWcudmFsdWUoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLnRhcmdldC5pbnNwZWN0KCkpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZE1vZGlmeU9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImRpZC1tb2RpZnlcIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhcmdldDogSnVtcElmTm90TW9kaWZpZWRPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gQ09OU1RBTlRfVEFHO1xuICB9XG5cbiAgZXZhbHVhdGUoKSB7XG4gICAgdGhpcy50YXJnZXQuZGlkTW9kaWZ5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhYmVsT3Bjb2RlIGltcGxlbWVudHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdGFnOiBUYWcgPSBDT05TVEFOVF9UQUc7XG4gIHB1YmxpYyB0eXBlID0gXCJsYWJlbFwiO1xuICBwdWJsaWMgbGFiZWw6IE9wdGlvbjxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIF9ndWlkOiBudW1iZXI7XG5cbiAgcHJldjogYW55ID0gbnVsbDtcbiAgbmV4dDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihsYWJlbDogc3RyaW5nKSB7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBldmFsdWF0ZSgpIHt9XG5cbiAgaW5zcGVjdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfSBbJHt0aGlzLl9ndWlkfV1gO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMuaW5zcGVjdCgpKV1cbiAgICB9O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsQUFBTyxBQUFjLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFHM0QsQUFBTyxBQUFhLEFBQWMsQUFBMEIsQUFBTSxBQUFvQixBQUFDOztBQUN2RixBQUFPLEFBQWtCLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQyxBQUMvRCxBQUFPLEFBQUUsQUFBWSxBQUFFLEFBQWMsQUFBaUIsQUFBTyxBQUFFLEFBQVUsQUFBRSxBQUFNLEFBQW9CLEFBQUMsQUFFdEcsQUFBTyxBQUFFLEFBQWMsQUFBWSxBQUFNLEFBQWUsQUFBQzs7QUFNekQsQUFBTyxBQUNMLEFBQWMsQUFDZCxBQUFtQixBQUNuQixBQUFjLEFBQ2QsQUFBZSxBQUNmLEFBQWtCLEFBQ25CLEFBQU0sQUFBa0IsQUFBQzs7QUFFMUIsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBYSxrQkFBRSxBQUFFLE1BQUksQUFBRSxHQUFDLEFBQWMsQUFBRSxBQUFDLEFBQUM7QUFFN0QsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBVyxnQkFBRSxBQUFFLE1BQUksQUFBRSxHQUFDLEFBQVEsQUFBRSxBQUFDLEFBQUM7QUFFckQsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBbUIsd0JBQUUsQUFBRSxNQUFJLEFBQUUsR0FBQyxBQUFnQixBQUFFLEFBQUMsQUFBQztBQUVyRSxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFrQix1QkFBRSxBQUFFLE1BQUksQUFBRSxHQUFDLEFBQWUsQUFBRSxBQUFDLEFBQUM7QUFFbkUsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBWSxpQkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFNLEFBQUU7QUFDbkQsQUFBRSxPQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDeEI7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFXLGdCQUFFLENBQUMsQUFBRSxJQUFFLEVBQUUsQUFBRyxLQUFFLEFBQUssQUFBRTtBQUNqRCxBQUFFLE9BQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBQyxBQUFLLEFBQUMsQUFBQyxBQUFDLEFBQzlDO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBcUIsMEJBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBUyxBQUFFO0FBQy9ELFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUM7QUFDckIsUUFBSSxBQUFJLE9BQUcsQ0FBQyxBQUFTLEFBQUcsWUFBQyxBQUFDLEtBQUksQUFBRSxBQUFDLEFBQUMsUUFBSyxBQUFFLEFBQUM7QUFDMUMsUUFBSSxBQUFLLFFBQUcsQUFBUyxZQUFHLEFBQUMsRUFBQyxBQUFDLEtBQUksQUFBRSxBQUFDLEFBQUM7QUFFbkMsQUFBTSxBQUFDLFlBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQztBQUNiLGFBQUssQUFBQztBQUNKLEFBQUssa0JBQUMsQUFBSSxLQUFDLEFBQWtCLCtCQUFDLEFBQU0sT0FBQyxBQUFLLEFBQUMsQUFBQyxBQUFDO0FBQzdDLEFBQUssQUFBQztBQUNSLGFBQUssQUFBQztBQUNKLEFBQUssa0JBQUMsQUFBSSxLQUFDLEFBQWtCLCtCQUFDLEFBQU0sT0FBQyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFLLEFBQUMsQUFBQyxBQUFDLEFBQUM7QUFDckUsQUFBSyxBQUFDO0FBQ1IsYUFBSyxBQUFDO0FBQ0osQUFBTSxBQUFDLG9CQUFDLEFBQUssQUFBQyxBQUFDLEFBQUM7QUFDZCxxQkFBSyxBQUFDO0FBQUUsQUFBSywwQkFBQyxBQUFJLEFBQUMsQUFBZSxBQUFDLEFBQUM7QUFBQyxBQUFLLEFBQUM7QUFDM0MscUJBQUssQUFBQztBQUFFLEFBQUssMEJBQUMsQUFBSSxBQUFDLEFBQWMsQUFBQyxBQUFDO0FBQUMsQUFBSyxBQUFDO0FBQzFDLHFCQUFLLEFBQUM7QUFBRSxBQUFLLDBCQUFDLEFBQUksQUFBQyxBQUFjLEFBQUMsQUFBQztBQUFDLEFBQUssQUFBQztBQUMxQyxxQkFBSyxBQUFDO0FBQUUsQUFBSywwQkFBQyxBQUFJLEFBQUMsQUFBbUIsQUFBQyxBQUFDO0FBQUMsQUFBSyxBQUFDLEFBQ2pELEFBQUM7O0FBQ0QsQUFBSyxBQUFDLEFBQ1YsQUFBQyxBQUNIOztBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQU0sV0FBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFRLFVBQUUsQUFBRyxLQUFFLEFBQU0sQUFBRTtBQUM1RCxRQUFJLEFBQVEsV0FBRyxBQUFFLEdBQUMsQUFBVSxXQUFTLEFBQVEsQUFBQyxZQUFHLEFBQU0sQUFBQztBQUN4RCxBQUFFLE9BQUMsQUFBSyxNQUFDLEFBQUcsSUFBQyxBQUFRLEFBQUMsQUFBQyxBQUN6QjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQU0sV0FBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFLLEFBQUUsWUFBSyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsSUFBQyxBQUFLLEFBQUMsQUFBQyxBQUFDO0FBRXhFLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQU8sWUFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFRLEFBQUUsZUFBSyxBQUFFLEdBQUMsQUFBSSxLQUFDLEFBQVEsQUFBQyxBQUFDLEFBQUM7QUFFMUUsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBUSxhQUFFLENBQUMsQUFBRSxJQUFFLEVBQUUsQUFBRyxLQUFFLEFBQVEsQUFBRSxlQUFLLEFBQUUsR0FBQyxBQUFLLE1BQUMsQUFBUSxBQUFDLEFBQUMsQUFBQztBQUU1RSxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFtQix3QkFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFNLEFBQUU7QUFDMUQsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFRLFNBQUMsQUFBTSxBQUFDLEFBQUM7QUFDMUMsQUFBRSxPQUFDLEFBQWdCLGlCQUFDLEFBQUssQUFBQyxBQUFDLEFBQzdCO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBWSxpQkFBRSxBQUFFLE1BQUksQUFBRSxHQUFDLEFBQVMsQUFBRSxBQUFDLEFBQUM7QUFFdkQsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBVyxnQkFBRSxBQUFFLE1BQUksQUFBRSxHQUFDLEFBQVEsQUFBRSxBQUFDLEFBQUM7QUFFckQsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBUSxhQUFFLENBQUMsQUFBRSxJQUFFLEVBQUUsQUFBRyxLQUFFLEFBQUksQUFBRSxXQUFLLEFBQUUsR0FBQyxBQUFLLE1BQUMsQUFBSSxBQUFDLEFBQUMsQUFBQztBQUVwRSxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFPLFlBQUcsQUFBRSxFQUFILElBQVEsQUFBRSxHQUFDLEFBQUksQUFBRSxBQUFDLEFBQUM7QUFFL0MsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBc0IsMkJBQUUsQUFBRTtBQUMzQyxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBSyxBQUFDO0FBQ3JCLFFBQUksQUFBSyxRQUFHLEFBQUssTUFBQyxBQUFHLEFBQVMsQUFBQztBQUMvQixBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQUssUUFBRyxBQUFLLE1BQUMsQUFBYyxlQUFDLEFBQUUsR0FBQyxBQUFHLEFBQUMsT0FBRyxBQUFJLEFBQUMsQUFBQyxBQUMxRDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWUsb0JBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBTSxBQUFFO0FBQ3RELFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUSxTQUFDLEFBQU0sQUFBQyxBQUFDO0FBQzFDLFFBQUksQUFBUSxXQUFHLEFBQUssTUFBQyxBQUFhLGNBQUMsQUFBRSxHQUFDLEFBQUcsQUFBQyxBQUFDO0FBQzNDLEFBQUUsT0FBQyxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUssQUFBQyxBQUFDLEFBQzFCO0FBQUMsQUFBQyxBQUFDO0FBTUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBZ0IscUJBQUUsQ0FBQyxBQUFFLElBQUUsRUFBRSxBQUFHLEtBQUUsQUFBUSxBQUFFO0FBQ3pELFFBQUksQUFBTyxVQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUSxTQUE4QixBQUFRLEFBQUMsQUFBQztBQUMzRSxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBZ0QsQUFBQztBQUN6RSxBQUFPLFlBQUMsQUFBTSxPQUFDLEFBQUUsSUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQU8sWUFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFNLEFBQUUsYUFBSyxBQUFFLEdBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUFDLEFBQUM7QUFFdEUsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBUyxjQUFFLENBQUMsQUFBRSxJQUFFLEVBQUUsQUFBRyxLQUFFLEFBQU0sQUFBRTtBQUNoRCxRQUFJLEFBQVMsWUFBRyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQztBQUUvRCxBQUFFLEFBQUMsUUFBQyxBQUFPLHdCQUFDLEFBQVMsQUFBQyxBQUFDLFlBQUMsQUFBQztBQUN2QixBQUFFLEFBQUMsWUFBQyxBQUFTLFVBQUMsQUFBSyxBQUFFLEFBQUMsU0FBQyxBQUFDO0FBQ3RCLEFBQUUsZUFBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEI7QUFBQyxBQUNIO0FBQUMsQUFBQyxBQUFJLFdBQUMsQUFBQztBQUNOLFlBQUksQUFBSyxRQUFHLEFBQUksQUFBYyw4QkFBQyxBQUFTLEFBQUMsQUFBQztBQUUxQyxBQUFFLEFBQUMsWUFBQyxBQUFLLE1BQUMsQUFBSSxBQUFFLEFBQUMsUUFBQyxBQUFDO0FBQ2pCLEFBQUUsZUFBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEI7QUFBQztBQUVELEFBQUUsV0FBQyxBQUFVLFdBQUMsSUFBSSxBQUFNLE9BQUMsQUFBSyxBQUFDLEFBQUMsQUFBQyxBQUNuQztBQUFDLEFBQ0g7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFhLGtCQUFFLENBQUMsQUFBRSxJQUFFLEVBQUUsQUFBRyxLQUFFLEFBQU0sQUFBRTtBQUNwRCxRQUFJLEFBQVMsWUFBRyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQztBQUUvRCxBQUFFLEFBQUMsUUFBQyxBQUFPLHdCQUFDLEFBQVMsQUFBQyxBQUFDLFlBQUMsQUFBQztBQUN2QixBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQVMsVUFBQyxBQUFLLEFBQUUsQUFBQyxTQUFDLEFBQUM7QUFDdkIsQUFBRSxlQUFDLEFBQUksS0FBQyxBQUFNLEFBQUMsQUFBQyxBQUNsQjtBQUFDLEFBQ0g7QUFBQyxBQUFDLEFBQUksV0FBQyxBQUFDO0FBQ04sWUFBSSxBQUFLLFFBQUcsQUFBSSxBQUFjLDhCQUFDLEFBQVMsQUFBQyxBQUFDO0FBRTFDLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBSyxNQUFDLEFBQUksQUFBRSxBQUFDLFFBQUMsQUFBQztBQUNsQixBQUFFLGVBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ2xCO0FBQUM7QUFFRCxBQUFFLFdBQUMsQUFBVSxXQUFDLElBQUksQUFBTSxPQUFDLEFBQUssQUFBQyxBQUFDLEFBQUMsQUFDbkM7QUFBQyxBQUNIO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBUyxjQUFFLEFBQUUsTUFBSSxBQUFFLEdBQUMsQUFBTSxBQUFFLEFBQUMsQUFBQyxBQUlqRCxBQUFNO0FBQUMsTUFBTSxBQUFTLGdDQUFpQixVQUFTLEFBQXNCLEtBQUUsQUFBaUI7QUFDdkYsQUFBTSxXQUFDLEFBQUksQUFBYyw4QkFBQyxDQUFDLENBQUMsQUFBRyxJQUFDLEFBQUssQUFBRSxBQUFDLEFBQUMsQUFDM0M7QUFBQyxBQUFDLEFBRUYsQUFBTTtBQUFDLE1BQU0sQUFBVSxrQ0FBaUIsVUFBUyxBQUFzQixLQUFFLEFBQWlCO0FBQ3hGLEFBQU0sV0FBQyxBQUF5QixBQUFDLEFBQ25DO0FBQUMsQUFBQyxBQUVGLEFBQU07QUFBQyxNQUFNLEFBQWUsNENBQWlCLFVBQVMsQUFBc0IsS0FBRSxBQUFnQjtBQUM1RixBQUFNLFdBQUMsQUFBRyxJQUFDLEFBQXNCLHVCQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ3pDO0FBQUMsQUFBQztBQUVGLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQU8sWUFBRSxDQUFDLEFBQUUsSUFBRSxFQUFFLEFBQUcsS0FBRSxBQUFLLEFBQUU7QUFDN0MsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssQUFBQztBQUNyQixRQUFJLEFBQU8sVUFBRyxBQUFLLE1BQUMsQUFBRyxBQUFFLEFBQUM7QUFDMUIsUUFBSSxBQUFJLE9BQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFXLFlBQUMsQUFBSyxBQUFDLEFBQUM7QUFDM0MsQUFBSyxVQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBTyxTQUFFLEFBQUUsR0FBQyxBQUFHLEFBQUMsQUFBQyxBQUFDLEFBQ3BDO0FBQUMsQUFBQyxBQUFDLEFBRUgsQUFBTTtNQUFjLEFBQVEsQUFBYztBQUt4QyxnQkFBWSxBQUE2QjtBQUN2QyxBQUFLLEFBQUUsQUFBQztBQUxILGFBQUksT0FBRyxBQUFRLEFBQUM7QUFNckIsQUFBSSxhQUFDLEFBQUcsTUFBRyxBQUFLLE1BQUMsQUFBRyxBQUFDO0FBQ3JCLEFBQUksYUFBQyxBQUFLLFFBQUcsQUFBSyxBQUFDLEFBQ3JCO0FBQUM7QUFFRCxBQUFRLGFBQUMsQUFBYztBQUNyQixZQUFJLEVBQUUsQUFBSyxBQUFFLFVBQUcsQUFBSSxBQUFDO0FBRXJCLEFBQUUsQUFBQyxZQUFDLEFBQVUsMkJBQUMsQUFBSyxNQUFDLEFBQVUsQUFBRSxBQUFDLEFBQUMsZUFBQyxBQUFDO0FBQ25DLEFBQUUsZUFBQyxBQUFLLEFBQUUsQUFBQyxBQUNiO0FBQUMsQUFDSDtBQUFDO0FBRUQsQUFBTTtBQUNKLFlBQUksRUFBRSxBQUFJLE1BQUUsQUFBSyxPQUFFLEFBQUssQUFBRSxVQUFHLEFBQUksQUFBQztBQUVsQyxZQUFJLEFBQVEsQUFBQztBQUViLFlBQUksQUFBQztBQUNILEFBQVEsdUJBQUcsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBSSxBQUFFLEFBQUMsQUFBQyxBQUMxQztBQUFDLFVBQUMsQUFBSyxPQUFDLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDVixBQUFRLHVCQUFHLEFBQU0sT0FBQyxBQUFLLE1BQUMsQUFBSSxBQUFFLEFBQUMsQUFBQyxBQUNsQztBQUFDO0FBRUQsQUFBTTtBQUNKLEFBQUksa0JBQUUsQUFBSztBQUNYLEFBQUk7QUFDSixBQUFJLGtCQUFFLEFBQUU7QUFDUixBQUFPLHFCQUFFLEVBQUUsQUFBUSxBQUFFLEFBQ3RCLEFBQUMsQUFDSjtBQU5TO0FBTVIsQUFDRixBQUVELEFBQU07OztNQUErQixBQUFRLEFBQWM7QUFLekQsZ0JBQVksQUFBUSxLQUFVLEFBQW1CO0FBQy9DLEFBQUssQUFBRSxBQUFDO0FBRG9CLGFBQU0sU0FBTixBQUFNLEFBQWE7QUFKMUMsYUFBSSxPQUFHLEFBQXNCLEFBQUM7QUFNbkMsQUFBSSxhQUFDLEFBQUcsTUFBRyxBQUFHLEFBQUM7QUFDZixBQUFJLGFBQUMsQUFBWSxlQUFHLEFBQUcsSUFBQyxBQUFLLEFBQUUsQUFBQyxBQUNsQztBQUFDO0FBRUQsQUFBUSxhQUFDLEFBQWM7QUFDckIsWUFBSSxFQUFFLEFBQUcsS0FBRSxBQUFNLFFBQUUsQUFBWSxBQUFFLGlCQUFHLEFBQUksQUFBQztBQUV6QyxBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQUUsR0FBQyxBQUFnQixvQkFBSSxBQUFHLElBQUMsQUFBUSxTQUFDLEFBQVksQUFBQyxBQUFDLGVBQUMsQUFBQztBQUN2RCxBQUFFLGVBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ2xCO0FBQUMsQUFDSDtBQUFDO0FBRUQsQUFBUztBQUNQLEFBQUksYUFBQyxBQUFZLGVBQUcsQUFBSSxLQUFDLEFBQUcsSUFBQyxBQUFLLEFBQUUsQUFBQyxBQUN2QztBQUFDO0FBRUQsQUFBTTtBQUNKLEFBQU07QUFDSixBQUFJLGtCQUFFLEFBQUksS0FBQyxBQUFLO0FBQ2hCLEFBQUksa0JBQUUsQUFBSSxLQUFDLEFBQUk7QUFDZixBQUFJLGtCQUFFLENBQUMsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU8sQUFBRSxBQUFDLEFBQUMsQUFDOUMsQUFBQyxBQUNKO0FBTFM7QUFLUixBQUNGLEFBRUQsQUFBTTs7O01BQXVCLEFBQVEsQUFBYztBQUdqRCxnQkFBb0IsQUFBK0I7QUFDakQsQUFBSyxBQUFFLEFBQUM7QUFEVSxhQUFNLFNBQU4sQUFBTSxBQUF5QjtBQUY1QyxhQUFJLE9BQUcsQUFBWSxBQUFDO0FBSXpCLEFBQUksYUFBQyxBQUFHLEFBQUcsQUFBWSxBQUFDLEFBQzFCO0FBQUM7QUFFRCxBQUFRO0FBQ04sQUFBSSxhQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUMxQjtBQUFDLEFBQ0YsQUFFRCxBQUFNOzs7O0FBU0osZ0JBQVksQUFBYTtBQVJsQixhQUFHLEFBQVEsQUFBWSxBQUFDO0FBQ3hCLGFBQUksT0FBRyxBQUFPLEFBQUM7QUFDZixhQUFLLFFBQW1CLEFBQUksQUFBQztBQUdwQyxhQUFJLE9BQVEsQUFBSSxBQUFDO0FBQ2pCLGFBQUksT0FBUSxBQUFJLEFBQUM7QUFHZixBQUFjLGtDQUFDLEFBQUksQUFBQyxBQUFDO0FBQ3JCLEFBQUUsQUFBQyxZQUFDLEFBQUssQUFBQyxPQUFDLEFBQUksS0FBQyxBQUFLLFFBQUcsQUFBSyxBQUFDLEFBQ2hDO0FBQUM7QUFFRCxBQUFRLGVBQUksQ0FBQztBQUViLEFBQU87QUFDTCxBQUFNLEFBQUMsa0JBQUcsQUFBSSxLQUFDLEFBQUssVUFBSyxBQUFJLEtBQUMsQUFBSyxLQUFHLEFBQUMsQUFDekM7QUFBQztBQUVELEFBQU07QUFDSixBQUFNO0FBQ0osQUFBSSxrQkFBRSxBQUFJLEtBQUMsQUFBSztBQUNoQixBQUFJLGtCQUFFLEFBQUksS0FBQyxBQUFJO0FBQ2YsQUFBSSxrQkFBRSxDQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSSxLQUFDLEFBQU8sQUFBRSxBQUFDLEFBQUMsQUFDdkMsQUFBQyxBQUNKO0FBTFM7QUFLUixBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuLi9ibG9ja3MnO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFVwZGF0aW5nVk0sIFZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgU3ltYm9sVGFibGUgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgQ29uc3RSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUsIGluaXRpYWxpemVHdWlkIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBDT05TVEFOVF9UQUcsIFJlZmVyZW5jZUNhY2hlLCBSZXZpc2lvbiwgVGFnLCBpc0NvbnN0LCBpc01vZGlmaWVkIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgYXMgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuaW1wb3J0IHtcbiAgQmxvY2tcbn0gZnJvbSAnLi4vLi4vc2Nhbm5lcic7XG5cbmltcG9ydCB7XG4gIE5VTExfUkVGRVJFTkNFLFxuICBVTkRFRklORURfUkVGRVJFTkNFLFxuICBUUlVFX1JFRkVSRU5DRSxcbiAgRkFMU0VfUkVGRVJFTkNFLFxuICBQcmltaXRpdmVSZWZlcmVuY2Vcbn0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5DaGlsZFNjb3BlLCB2bSA9PiB2bS5wdXNoQ2hpbGRTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcFNjb3BlLCB2bSA9PiB2bS5wb3BTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hEeW5hbWljU2NvcGUsIHZtID0+IHZtLnB1c2hEeW5hbWljU2NvcGUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3BEeW5hbWljU2NvcGUsIHZtID0+IHZtLnBvcER5bmFtaWNTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkltbWVkaWF0ZSwgKHZtLCB7IG9wMTogbnVtYmVyIH0pID0+IHtcbiAgdm0uc3RhY2sucHVzaChudW1iZXIpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db25zdGFudCwgKHZtLCB7IG9wMTogb3RoZXIgfSkgPT4ge1xuICB2bS5zdGFjay5wdXNoKHZtLmNvbnN0YW50cy5nZXRPdGhlcihvdGhlcikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QcmltaXRpdmVSZWZlcmVuY2UsICh2bSwgeyBvcDE6IHByaW1pdGl2ZSB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgZmxhZyA9IChwcmltaXRpdmUgJiAoMyA8PCAzMCkpID4+PiAzMDtcbiAgbGV0IHZhbHVlID0gcHJpbWl0aXZlICYgfigzIDw8IDMwKTtcblxuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHZhbHVlKSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlIDA6IHN0YWNrLnB1c2goRkFMU0VfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogc3RhY2sucHVzaChUUlVFX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IHN0YWNrLnB1c2goTlVMTF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBzdGFjay5wdXNoKFVOREVGSU5FRF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR1cCwgKHZtLCB7IG9wMTogcmVnaXN0ZXIsIG9wMjogb2Zmc2V0IH0pID0+IHtcbiAgbGV0IHBvc2l0aW9uID0gdm0uZmV0Y2hWYWx1ZTxudW1iZXI+KHJlZ2lzdGVyKSAtIG9mZnNldDtcbiAgdm0uc3RhY2suZHVwKHBvc2l0aW9uKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wLCAodm0sIHsgb3AxOiBjb3VudCB9KSA9PiB2bS5zdGFjay5wb3AoY291bnQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkxvYWQsICh2bSwgeyBvcDE6IHJlZ2lzdGVyIH0pID0+IHZtLmxvYWQocmVnaXN0ZXIpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkZldGNoLCAodm0sIHsgb3AxOiByZWdpc3RlciB9KSA9PiB2bS5mZXRjaChyZWdpc3RlcikpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQmluZER5bmFtaWNTY29wZSwgKHZtLCB7IG9wMTogX25hbWVzIH0pID0+IHtcbiAgbGV0IG5hbWVzID0gdm0uY29uc3RhbnRzLmdldEFycmF5KF9uYW1lcyk7XG4gIHZtLmJpbmREeW5hbWljU2NvcGUobmFtZXMpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoRnJhbWUsIHZtID0+IHZtLnB1c2hGcmFtZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcEZyYW1lLCB2bSA9PiB2bS5wb3BGcmFtZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkVudGVyLCAodm0sIHsgb3AxOiBhcmdzIH0pID0+IHZtLmVudGVyKGFyZ3MpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXQsICh2bSkgPT4gdm0uZXhpdCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbXBpbGVEeW5hbWljQmxvY2ssIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBibG9jayA9IHN0YWNrLnBvcDxCbG9jaz4oKTtcbiAgc3RhY2sucHVzaChibG9jayA/IGJsb2NrLmNvbXBpbGVEeW5hbWljKHZtLmVudikgOiBudWxsKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSW52b2tlU3RhdGljLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICBsZXQgYmxvY2sgPSB2bS5jb25zdGFudHMuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgbGV0IGNvbXBpbGVkID0gYmxvY2suY29tcGlsZVN0YXRpYyh2bS5lbnYpO1xuICB2bS5jYWxsKGNvbXBpbGVkLnN0YXJ0KTtcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNJbnZva2VyPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBpbnZva2Uodm06IFZNLCBibG9jazogT3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+Pik6IHZvaWQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JbnZva2VEeW5hbWljLCAodm0sIHsgb3AxOiBfaW52b2tlciB9KSA9PiB7XG4gIGxldCBpbnZva2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyPER5bmFtaWNJbnZva2VyPFN5bWJvbFRhYmxlPj4oX2ludm9rZXIpO1xuICBsZXQgYmxvY2sgPSB2bS5zdGFjay5wb3A8T3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFN5bWJvbFRhYmxlPj4+KCk7XG4gIGludm9rZXIuaW52b2tlKHZtLCBibG9jayk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkp1bXAsICh2bSwgeyBvcDE6IHRhcmdldCB9KSA9PiB2bS5nb3RvKHRhcmdldCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcElmLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4ge1xuICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcblxuICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgaWYgKHJlZmVyZW5jZS52YWx1ZSgpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKGNhY2hlLnBlZWsoKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cblxuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkp1bXBVbmxlc3MsICh2bSwgeyBvcDE6IHRhcmdldCB9KSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAoIXJlZmVyZW5jZS52YWx1ZSgpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKCFjYWNoZS5wZWVrKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXR1cm4sIHZtID0+IHZtLnJldHVybigpKTtcblxuZXhwb3J0IHR5cGUgVGVzdEZ1bmN0aW9uID0gKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpID0+IFJlZmVyZW5jZTxib29sZWFuPjtcblxuZXhwb3J0IGNvbnN0IENvbnN0VGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgX2VudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IENvbnN0UmVmZXJlbmNlKCEhcmVmLnZhbHVlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IFNpbXBsZVRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIF9lbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIHJlZiBhcyBSZWZlcmVuY2U8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBlbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIGVudi50b0NvbmRpdGlvbmFsUmVmZXJlbmNlKHJlZik7XG59O1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGVzdCwgKHZtLCB7IG9wMTogX2Z1bmMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IG9wZXJhbmQgPSBzdGFjay5wb3AoKTtcbiAgbGV0IGZ1bmMgPSB2bS5jb25zdGFudHMuZ2V0RnVuY3Rpb24oX2Z1bmMpO1xuICBzdGFjay5wdXNoKGZ1bmMob3BlcmFuZCwgdm0uZW52KSk7XG59KTtcblxuZXhwb3J0IGNsYXNzIEFzc2VydCBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImFzc2VydFwiO1xuXG4gIHByaXZhdGUgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT47XG5cbiAgY29uc3RydWN0b3IoY2FjaGU6IFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICAgIHRoaXMuY2FjaGUgPSBjYWNoZTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBpZiAoaXNNb2RpZmllZChjYWNoZS5yZXZhbGlkYXRlKCkpKSB7XG4gICAgICB2bS50aHJvdygpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyB0eXBlLCBfZ3VpZCwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZXhwZWN0ZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgZXhwZWN0ZWQgPSBTdHJpbmcoY2FjaGUucGVlaygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgYXJnczogW10sXG4gICAgICBkZXRhaWxzOiB7IGV4cGVjdGVkIH1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImp1bXAtaWYtbm90LW1vZGlmaWVkXCI7XG5cbiAgcHJpdmF0ZSBsYXN0UmV2aXNpb246IFJldmlzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKHRhZzogVGFnLCBwcml2YXRlIHRhcmdldDogTGFiZWxPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gdGFnO1xuICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGFnLnZhbHVlKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IHRhZywgdGFyZ2V0LCBsYXN0UmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICBpZiAoIXZtLmFsd2F5c1JldmFsaWRhdGUgJiYgdGFnLnZhbGlkYXRlKGxhc3RSZXZpc2lvbikpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH1cblxuICBkaWRNb2RpZnkoKSB7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0aGlzLnRhZy52YWx1ZSgpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMudGFyZ2V0Lmluc3BlY3QoKSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlkTW9kaWZ5T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLW1vZGlmeVwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFyZ2V0OiBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBDT05TVEFOVF9UQUc7XG4gIH1cblxuICBldmFsdWF0ZSgpIHtcbiAgICB0aGlzLnRhcmdldC5kaWRNb2RpZnkoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFiZWxPcGNvZGUgaW1wbGVtZW50cyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0YWc6IFRhZyA9IENPTlNUQU5UX1RBRztcbiAgcHVibGljIHR5cGUgPSBcImxhYmVsXCI7XG4gIHB1YmxpYyBsYWJlbDogT3B0aW9uPHN0cmluZz4gPSBudWxsO1xuICBwdWJsaWMgX2d1aWQ6IG51bWJlcjtcblxuICBwcmV2OiBhbnkgPSBudWxsO1xuICBuZXh0OiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcpIHtcbiAgICBpbml0aWFsaXplR3VpZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgfVxuXG4gIGV2YWx1YXRlKCkge31cblxuICBpbnNwZWN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubGFiZWx9IFske3RoaXMuX2d1aWR9XWA7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy5pbnNwZWN0KCkpXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==

@@ -92,10 +92,10 @@ 'use strict';

b.startLabels();
// let state = b.local();
// b.setLocal(state);
if (dynamicTag) {
b.fetch(_opcodes.Register.s1);
(0, _functions.expr)(dynamicTag, b);
b.dup();
b.load(_opcodes.Register.s1);
b.test('simple');
b.jumpUnless('BODY');
b.dup();
b.fetch(_opcodes.Register.s1);
b.pushComponentOperations();

@@ -108,3 +108,3 @@ b.openDynamicElement();

if (dynamicTag || staticTag) {
// b.didCreateElement(state);
b.didCreateElement(_opcodes.Register.s0);
let attrs = this.attrs['buffer'];

@@ -119,9 +119,6 @@ for (let i = 0; i < attrs.length; i++) {

if (dynamicTag) {
b.dup();
b.fetch(_opcodes.Register.s1);
b.test('simple');
b.jumpUnless('ELSE');
b.jumpUnless('END');
b.closeElement();
b.jump('END');
b.label('ELSE');
b.pop();
} else if (staticTag) {

@@ -131,3 +128,6 @@ b.closeElement();

b.label('END');
// b.didRenderLayout(state);
b.didRenderLayout(_opcodes.Register.s0);
if (dynamicTag) {
b.load(_opcodes.Register.s1);
}
b.stopLabels();

@@ -207,24 +207,28 @@ let start = b.start;

dynamic(definitionArgs, getDefinition, args) {
this.builder.unit(b => {
let [params, hash, block, inverse] = args;
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
let meta = this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
b.compileArgs(definitionArgs[0], definitionArgs[1], true);
b.helper(helper);
b.dup();
b.test('simple');
b.closure(2, b => {
b.jumpUnless('ELSE');
b.pushDynamicComponentManager();
b.invokeComponent(null, params, hash, block, inverse);
b.jump('END');
b.label('ELSE');
b.pop();
});
});
let [params, hash, block, inverse] = args;
let { builder } = this;
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
let meta = this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
builder.compileArgs(definitionArgs[0], definitionArgs[1], true);
builder.helper(helper);
builder.dup();
builder.test('simple');
builder.enter(2);
builder.jumpUnless('ELSE');
builder.pushDynamicComponentManager();
builder.invokeComponent(null, params, hash, block, inverse);
builder.label('ELSE');
builder.exit();
builder.return();
builder.label('END');
builder.popFrame();
builder.stopLabels();
}

@@ -236,2 +240,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxBQUFPLEFBQTBCLEFBQXVCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUVwRixBQUFPLEFBQUUsQUFBRyxBQUFnQixBQUFNLEFBQXNCLEFBQUM7O0FBR3pELEFBQU8sQUFBRSxBQUFVLEFBQUUsQUFBTSxBQUFXLEFBQUM7O0FBRXZDLEFBQU8sQUFBRSxBQUFXLEFBQUUsQUFBVSxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFXLEFBQUM7O0FBUXRFLEFBQU8sQUFBRSxBQUFJLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUUxQyxBQUFPLEFBQWdCLEFBQU0sQUFBNEIsQUFBQyxBQWMxRCxBQUFNOzs7Ozs7dUJBQXdCLEFBQTRCLFlBQUUsQUFBZ0I7QUFDMUUsUUFBSSxBQUFPLFVBQUcsSUFBSSxBQUFzQix1QkFBQyxBQUFHLEFBQUMsQUFBQztBQUU5QyxBQUFVLGVBQUMsQUFBTyxRQUFDLEFBQU8sQUFBQyxBQUFDO0FBRTVCLEFBQU0sV0FBQyxBQUFPLFFBQUMsQUFBTyxBQUFFLEFBQUMsQUFDM0I7QUFBQztBQVFEO0FBR0UsZ0JBQW1CLEFBQWdCO0FBQWhCLGFBQUcsTUFBSCxBQUFHLEFBQWEsQUFBRztBQUFDO0FBRXZDLEFBQVUsZUFBQyxBQUE4QjtBQUN2QyxBQUFJLGFBQUMsQUFBSyxRQUFHLElBQUksQUFBYyxlQUFDLEFBQUksS0FBQyxBQUFHLEtBQUUsQUFBTSxBQUFDLEFBQUMsQUFDcEQ7QUFBQztBQUVELEFBQVUsZUFBQyxBQUE4QjtBQUN2QyxBQUFJLGFBQUMsQUFBSyxRQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxLQUFDLEFBQUcsS0FBRSxBQUFNLEFBQUMsQUFBQyxBQUN0RDtBQUFDO0FBRUQsQUFBTztBQUNMLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU8sQUFBRSxBQUFD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LGtCQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQztBQUNkLEFBQUMsa0JBQUMsQUFBSyxNQUFDLEFBQU0sQUFBQyxBQUFDO0FBQ2hCLEFBQUMsa0JBQUMsQUFBRyxBQUFFLEFBQUMsQUFDVjtBQUFDLEFBQUMsQUFBQyxBQUNMO0FBQUMsQUFBQyxBQUFDLEFBQ0w7QUFBQyxBQUNGLEFBRUQsQUFBTTs7O2lCQUFrQixBQUFnQixLQUFFLEFBQXFCO0FBQzdELEFBQU0sV0FBQyxBQUFJLEFBQWdCLHNCQUFDLEFBQUcsS0FBRSxBQUFJLEFBQUMsQUFBQyxBQUN6QztBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BhcXVlLCBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7IENvbXBpbGVkRHluYW1pY1Byb2dyYW0sIENvbXBpbGVkRHluYW1pY1RlbXBsYXRlIH0gZnJvbSAnLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgTWF5YmUsIE9wdGlvbiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgT3BzLCBUZW1wbGF0ZU1ldGEgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi90ZW1wbGF0ZSc7XG5pbXBvcnQgeyBkZWJ1Z1NsaWNlIH0gZnJvbSAnLi9vcGNvZGVzJztcblxuaW1wb3J0IHsgQVRUUlNfQkxPQ0ssIENsaWVudFNpZGUsIGNvbXBpbGVTdGF0ZW1lbnQgfSBmcm9tICcuL3NjYW5uZXInO1xuXG5pbXBvcnQge1xuICBDb21wb25lbnRBcmdzLFxuICBDb21wb25lbnRCdWlsZGVyIGFzIElDb21wb25lbnRCdWlsZGVyLFxuICBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL29wY29kZS1idWlsZGVyJztcblxuaW1wb3J0IHsgZXhwciB9IGZyb20gJy4vc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmltcG9ydCBPcGNvZGVCdWlsZGVyRFNMIGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuaW1wb3J0ICogYXMgQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tICcuL3ZtL2FwcGVuZCc7XG5pbXBvcnQgeyBJQXJndW1lbnRzIH0gZnJvbSAnLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4vY29tcGlsZWQvb3Bjb2Rlcy9leHByZXNzaW9uc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGFibGVMYXlvdXQge1xuICBjb21waWxlKGJ1aWxkZXI6IENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVMYXlvdXQoY29tcGlsYWJsZTogQ29tcGlsYWJsZUxheW91dCwgZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICBsZXQgYnVpbGRlciA9IG5ldyBDb21wb25lbnRMYXlvdXRCdWlsZGVyKGVudik7XG5cbiAgY29tcGlsYWJsZS5jb21waWxlKGJ1aWxkZXIpO1xuXG4gIHJldHVybiBidWlsZGVyLmNvbXBpbGUoKTtcbn1cblxuaW50ZXJmYWNlIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHRhZzogQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXI7XG4gIGF0dHJzOiBDb21wb25lbnQuQ29tcG9uZW50QXR0cnNCdWlsZGVyO1xuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW07XG59XG5cbmNsYXNzIENvbXBvbmVudExheW91dEJ1aWxkZXIgaW1wbGVtZW50cyBDb21wb25lbnQuQ29tcG9uZW50TGF5b3V0QnVpbGRlciB7XG4gIHByaXZhdGUgaW5uZXI6IElubmVyTGF5b3V0QnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCkge31cblxuICB3cmFwTGF5b3V0KGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgV3JhcHBlZEJ1aWxkZXIodGhpcy5lbnYsIGxheW91dCk7XG4gIH1cblxuICBmcm9tTGF5b3V0KGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgVW53cmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuY29tcGlsZSgpO1xuICB9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIudGFnO1xuICB9XG5cbiAgZ2V0IGF0dHJzKCk6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmlubmVyLmF0dHJzO1xuICB9XG59XG5cbmNsYXNzIFdyYXBwZWRCdWlsZGVyIGltcGxlbWVudHMgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgcHVibGljIHRhZyA9IG5ldyBDb21wb25lbnRUYWdCdWlsZGVyKCk7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICAvLz09PT09PT09RFlOQU1JQ1xuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoQk9EWSlcbiAgICAvLyAgICAgICAgT3BlbkR5bmFtaWNQcmltaXRpdmVFbGVtZW50XG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vIEJPRFk6ICBOb29wXG4gICAgLy8gICAgICAgIC4uLmJvZHkgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoRU5EKVxuICAgIC8vICAgICAgICBDbG9zZUVsZW1lbnRcbiAgICAvLyBFTkQ6ICAgTm9vcFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy89PT09PT09PVNUQVRJQ1xuICAgIC8vICAgICAgICBPcGVuUHJpbWl0aXZlRWxlbWVudE9wY29kZVxuICAgIC8vICAgICAgICBEaWRDcmVhdGVFbGVtZW50XG4gICAgLy8gICAgICAgIC4uLmF0dHIgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBGbHVzaEVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuXG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgbGV0IG1ldGEgPSB7IHRlbXBsYXRlTWV0YTogbGF5b3V0Lm1ldGEsIHN5bWJvbHM6IGxheW91dC5zeW1ib2xzLCBhc1BhcnRpYWw6IGZhbHNlIH07XG5cbiAgICBsZXQgZHluYW1pY1RhZyA9IHRoaXMudGFnLmdldER5bmFtaWMoKTtcbiAgICBsZXQgc3RhdGljVGFnID0gdGhpcy50YWcuZ2V0U3RhdGljKCk7XG5cbiAgICBsZXQgYiA9IGJ1aWxkZXIoZW52LCBtZXRhKTtcbiAgICBiLnN0YXJ0TGFiZWxzKCk7XG5cbiAgICAvLyBsZXQgc3RhdGUgPSBiLmxvY2FsKCk7XG4gICAgLy8gYi5zZXRMb2NhbChzdGF0ZSk7XG5cbiAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgZXhwcihkeW5hbWljVGFnLCBiKTtcblxuICAgICAgYi5kdXAoKTtcbiAgICAgIGIudGVzdCgnc2ltcGxlJyk7XG5cbiAgICAgIGIuanVtcFVubGVzcygnQk9EWScpO1xuXG4gICAgICBiLmR1cCgpO1xuICAgICAgYi5wdXNoQ29tcG9uZW50T3BlcmF0aW9ucygpO1xuICAgICAgYi5vcGVuRHluYW1pY0VsZW1lbnQoKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpY1RhZykge1xuICAgICAgYi5wdXNoQ29tcG9uZW50T3BlcmF0aW9ucygpO1xuICAgICAgYi5vcGVuRWxlbWVudFdpdGhPcGVyYXRpb25zKHN0YXRpY1RhZyk7XG4gICAgfVxuXG4gICAgaWYgKGR5bmFtaWNUYWcgfHwgc3RhdGljVGFnKSB7XG4gICAgICAvLyBiLmRpZENyZWF0ZUVsZW1lbnQoc3RhdGUpO1xuXG4gICAgICBsZXQgYXR0cnMgPSB0aGlzLmF0dHJzWydidWZmZXInXTtcblxuICAgICAgZm9yIChsZXQgaT0wOyBpPGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbXBpbGVTdGF0ZW1lbnQoYXR0cnNbaV0sIGIpO1xuICAgICAgfVxuXG4gICAgICBiLmZsdXNoRWxlbWVudCgpO1xuICAgIH1cblxuICAgIGIubGFiZWwoJ0JPRFknKTtcbiAgICBiLmludm9rZVN0YXRpYyhsYXlvdXQuYXNCbG9jaygpKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBiLmR1cCgpO1xuICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcbiAgICAgIGIuanVtcFVubGVzcygnRUxTRScpO1xuICAgICAgYi5jbG9zZUVsZW1lbnQoKTtcbiAgICAgIGIuanVtcCgnRU5EJyk7XG4gICAgICBiLmxhYmVsKCdFTFNFJyk7XG4gICAgICBiLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGljVGFnKSB7XG4gICAgICBiLmNsb3NlRWxlbWVudCgpO1xuICAgIH1cblxuICAgIGIubGFiZWwoJ0VORCcpO1xuXG4gICAgLy8gYi5kaWRSZW5kZXJMYXlvdXQoc3RhdGUpO1xuXG4gICAgYi5zdG9wTGFiZWxzKCk7XG5cbiAgICBsZXQgc3RhcnQgPSBiLnN0YXJ0O1xuICAgIGxldCBlbmQgPSBiLmZpbmFsaXplKCk7XG5cbiAgICBkZWJ1Z1NsaWNlKGVudiwgc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gbmV3IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlKHN0YXJ0LCBlbmQsIHtcbiAgICAgIG1ldGEsXG4gICAgICBoYXNFdmFsOiBsYXlvdXQuaGFzRXZhbCxcbiAgICAgIHN5bWJvbHM6IGxheW91dC5zeW1ib2xzLmNvbmNhdChbQVRUUlNfQkxPQ0tdKVxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIFVud3JhcHBlZEJ1aWxkZXIgaW1wbGVtZW50cyBJbm5lckxheW91dEJ1aWxkZXIge1xuICBwdWJsaWMgYXR0cnMgPSBuZXcgQ29tcG9uZW50QXR0cnNCdWlsZGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVudjogRW52aXJvbm1lbnQsIHByaXZhdGUgbGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7fVxuXG4gIGdldCB0YWcoKTogQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignQlVHOiBDYW5ub3QgY2FsbCBgdGFnYCBvbiBhbiBVbndyYXBwZWRCdWlsZGVyJyk7XG4gIH1cblxuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICAgIGxldCB7IGVudiwgbGF5b3V0IH0gPSB0aGlzO1xuICAgIHJldHVybiBsYXlvdXQuYXNMYXlvdXQodGhpcy5hdHRyc1snYnVmZmVyJ10pLmNvbXBpbGVEeW5hbWljKGVudik7XG4gIH1cbn1cblxuY2xhc3MgQ29tcG9uZW50VGFnQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgcHVibGljIGlzRHluYW1pYzogT3B0aW9uPGJvb2xlYW4+ID0gbnVsbDtcbiAgcHVibGljIGlzU3RhdGljOiBPcHRpb248Ym9vbGVhbj4gPSBudWxsO1xuICBwdWJsaWMgc3RhdGljVGFnTmFtZTogT3B0aW9uPHN0cmluZz4gPSBudWxsO1xuICBwdWJsaWMgZHluYW1pY1RhZ05hbWU6IE9wdGlvbjxXaXJlRm9ybWF0LkV4cHJlc3Npb24+ID0gbnVsbDtcblxuICBnZXREeW5hbWljKCk6IE1heWJlPFdpcmVGb3JtYXQuRXhwcmVzc2lvbj4ge1xuICAgIGlmICh0aGlzLmlzRHluYW1pYykge1xuICAgICAgcmV0dXJuIHRoaXMuZHluYW1pY1RhZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdGljKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmlzU3RhdGljKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0aWNUYWdOYW1lO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyh0YWdOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzU3RhdGljID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXRpY1RhZ05hbWUgPSB0YWdOYW1lO1xuICB9XG5cbiAgZHluYW1pYyh0YWdOYW1lOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuaXNEeW5hbWljID0gdHJ1ZTtcbiAgICB0aGlzLmR5bmFtaWNUYWdOYW1lID0gW09wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiwgQ2xpZW50U2lkZS5PcHMuRnVuY3Rpb25FeHByZXNzaW9uLCB0YWdOYW1lXTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRBdHRyc0J1aWxkZXIgaW1wbGVtZW50cyBDb21wb25lbnQuQ29tcG9uZW50QXR0cnNCdWlsZGVyIHtcbiAgcHJpdmF0ZSBidWZmZXI6IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuXG4gIHN0YXRpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1ZmZlci5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG51bGxdKTtcbiAgfVxuXG4gIGR5bmFtaWMobmFtZTogc3RyaW5nLCB2YWx1ZTogRnVuY3Rpb25FeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgICB0aGlzLmJ1ZmZlci5wdXNoKFtPcHMuRHluYW1pY0F0dHIsIG5hbWUsIFtPcHMuQ2xpZW50U2lkZUV4cHJlc3Npb24sIENsaWVudFNpZGUuT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgdmFsdWVdLCBudWxsXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJ1aWxkZXIgaW1wbGVtZW50cyBJQ29tcG9uZW50QnVpbGRlciB7XG4gIHByaXZhdGUgZW52OiBFbnZpcm9ubWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1aWxkZXI6IE9wY29kZUJ1aWxkZXJEU0wpIHtcbiAgICB0aGlzLmVudiA9IGJ1aWxkZXIuZW52O1xuICB9XG5cbiAgc3RhdGljKGRlZmluaXRpb246IENvbXBvbmVudC5Db21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4sIGFyZ3M6IENvbXBvbmVudEFyZ3MpIHtcbiAgICBsZXQgW3BhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2VdID0gYXJncztcbiAgICBsZXQgeyBidWlsZGVyIH0gPSB0aGlzO1xuXG4gICAgYnVpbGRlci5wdXNoQ29tcG9uZW50TWFuYWdlcihkZWZpbml0aW9uKTtcbiAgICBidWlsZGVyLmludm9rZUNvbXBvbmVudChudWxsLCBwYXJhbXMsIGhhc2gsIF9kZWZhdWx0LCBpbnZlcnNlKTtcbiAgfVxuXG4gIGR5bmFtaWMoZGVmaW5pdGlvbkFyZ3M6IENvbXBvbmVudEFyZ3MsIGdldERlZmluaXRpb246IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLCBhcmdzOiBDb21wb25lbnRBcmdzKSB7XG4gICAgdGhpcy5idWlsZGVyLnVuaXQoYiA9PiB7XG4gICAgICBsZXQgW3BhcmFtcywgaGFzaCwgYmxvY2ssIGludmVyc2VdID0gYXJncztcblxuICAgICAgaWYgKCFkZWZpbml0aW9uQXJncyB8fCBkZWZpbml0aW9uQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyBzeW50YXggd2l0aG91dCBhbiBhcmd1bWVudFwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1ldGEgPSB0aGlzLmJ1aWxkZXIubWV0YS50ZW1wbGF0ZU1ldGE7XG5cbiAgICAgIGZ1bmN0aW9uIGhlbHBlcih2bTogUHVibGljVk0sIGFyZ3M6IElBcmd1bWVudHMpIHtcbiAgICAgICAgcmV0dXJuIGdldERlZmluaXRpb24odm0sIGFyZ3MsIG1ldGEpO1xuICAgICAgfVxuXG4gICAgICBiLmNvbXBpbGVBcmdzKGRlZmluaXRpb25BcmdzWzBdLCBkZWZpbml0aW9uQXJnc1sxXSwgdHJ1ZSk7XG4gICAgICBiLmhlbHBlcihoZWxwZXIpO1xuXG4gICAgICBiLmR1cCgpO1xuICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcblxuICAgICAgYi5jbG9zdXJlKDIsIGIgPT4ge1xuICAgICAgICBiLmp1bXBVbmxlc3MoJ0VMU0UnKTtcbiAgICAgICAgYi5wdXNoRHluYW1pY0NvbXBvbmVudE1hbmFnZXIoKTtcbiAgICAgICAgYi5pbnZva2VDb21wb25lbnQobnVsbCwgcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZSk7XG4gICAgICAgIGIuanVtcCgnRU5EJyk7XG4gICAgICAgIGIubGFiZWwoJ0VMU0UnKTtcbiAgICAgICAgYi5wb3AoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZGVyKGVudjogRW52aXJvbm1lbnQsIG1ldGE6IENvbXBpbGF0aW9uTWV0YSkge1xuICByZXR1cm4gbmV3IE9wY29kZUJ1aWxkZXJEU0woZW52LCBtZXRhKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxBQUFPLEFBQTBCLEFBQXVCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUVwRixBQUFPLEFBQUUsQUFBRyxBQUFnQixBQUFNLEFBQXNCLEFBQUM7O0FBR3pELEFBQU8sQUFBRSxBQUFRLEFBQUUsQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUVqRCxBQUFPLEFBQUUsQUFBVyxBQUFFLEFBQVUsQUFBRSxBQUFnQixBQUFFLEFBQU0sQUFBVyxBQUFDOztBQVF0RSxBQUFPLEFBQUUsQUFBSSxBQUFFLEFBQU0sQUFBb0IsQUFBQzs7QUFFMUMsQUFBTyxBQUFnQixBQUFNLEFBQTRCLEFBQUMsQUFjMUQsQUFBTTs7Ozs7O3VCQUF3QixBQUE0QixZQUFFLEFBQWdCO0FBQzFFLFFBQUksQUFBTyxVQUFHLElBQUksQUFBc0IsdUJBQUMsQUFBRyxBQUFDLEFBQUM7QUFFOUMsQUFBVSxlQUFDLEFBQU8sUUFBQyxBQUFPLEFBQUMsQUFBQztBQUU1QixBQUFNLFdBQUMsQUFBTyxRQUFDLEFBQU8sQUFBRSxBQUFDLEFBQzNCO0FBQUM7QUFRRDtBQUdFLGdCQUFtQixBQUFnQjtBQUFoQixhQUFHLE1BQUgsQUFBRyxBQUFhLEFBQUc7QUFBQztBQUV2QyxBQUFVLGVBQUMsQUFBOEI7QUFDdkMsQUFBSSxhQUFDLEFBQUssUUFBRyxJQUFJLEFBQWMsZUFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQU0sQUFBQyxBQUFDLEFBQ3BEO0FBQUM7QUFFRCxBQUFVLGVBQUMsQUFBOEI7QUFDdkMsQUFBSSxhQUFDLEFBQUssUUFBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQUksS0FBQyxBQUFHLEtBQUUsQUFBTSxBQUFDLEFBQUMsQUFDdEQ7QUFBQztBQUVELEFBQU87QUFDTCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFP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QU8sZ0JBQUMsQUFBTSxPQUFDLEFBQU0sQUFBQyxBQUFDO0FBRXZCLEFBQU8sZ0JBQUMsQUFBRyxBQUFFLEFBQUM7QUFDZCxBQUFPLGdCQUFDLEFBQUksS0FBQyxBQUFRLEFBQUMsQUFBQztBQUV2QixBQUFPLGdCQUFDLEFBQUssTUFBQyxBQUFDLEFBQUMsQUFBQztBQUVqQixBQUFPLGdCQUFDLEFBQVUsV0FBQyxBQUFNLEFBQUMsQUFBQztBQUUzQixBQUFPLGdCQUFDLEFBQTJCLEFBQUUsQUFBQztBQUN0QyxBQUFPLGdCQUFDLEFBQWUsZ0JBQUMsQUFBSSxNQUFFLEFBQU0sUUFBRSxBQUFJLE1BQUUsQUFBSyxPQUFFLEFBQU8sQUFBQyxBQUFDO0FBRTVELEFBQU8sZ0JBQUMsQUFBSyxNQUFDLEFBQU0sQUFBQyxBQUFDO0FBQ3RCLEFBQU8sZ0JBQUMsQUFBSSxBQUFFLEFBQUM7QUFDZixBQUFPLGdCQUFDLEFBQU0sQUFBRSxBQUFDO0FBRWpCLEFBQU8sZ0JBQUMsQUFBSyxNQUFDLEFBQUssQUFBQyxBQUFDO0FBQ3JCLEFBQU8sZ0JBQUMsQUFBUSxBQUFFLEFBQUM7QUFFbkIsQUFBTyxnQkFBQyxBQUFVLEFBQUUsQUFBQyxBQUN2QjtBQUFDLEFBQ0YsQUFFRCxBQUFNOzs7aUJBQWtCLEFBQWdCLEtBQUUsQUFBcUI7QUFDN0QsQUFBTSxXQUFDLEFBQUksQUFBZ0Isc0JBQUMsQUFBRyxLQUFFLEFBQUksQUFBQyxBQUFDLEFBQ3pDO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIENvbXBpbGF0aW9uTWV0YSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljUHJvZ3JhbSwgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBNYXliZSwgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBPcHMsIFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlJztcbmltcG9ydCB7IFJlZ2lzdGVyLCBkZWJ1Z1NsaWNlIH0gZnJvbSAnLi9vcGNvZGVzJztcblxuaW1wb3J0IHsgQVRUUlNfQkxPQ0ssIENsaWVudFNpZGUsIGNvbXBpbGVTdGF0ZW1lbnQgfSBmcm9tICcuL3NjYW5uZXInO1xuXG5pbXBvcnQge1xuICBDb21wb25lbnRBcmdzLFxuICBDb21wb25lbnRCdWlsZGVyIGFzIElDb21wb25lbnRCdWlsZGVyLFxuICBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL29wY29kZS1idWlsZGVyJztcblxuaW1wb3J0IHsgZXhwciB9IGZyb20gJy4vc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmltcG9ydCBPcGNvZGVCdWlsZGVyRFNMIGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuaW1wb3J0ICogYXMgQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tICcuL3ZtL2FwcGVuZCc7XG5pbXBvcnQgeyBJQXJndW1lbnRzIH0gZnJvbSAnLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4vY29tcGlsZWQvb3Bjb2Rlcy9leHByZXNzaW9uc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGFibGVMYXlvdXQge1xuICBjb21waWxlKGJ1aWxkZXI6IENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVMYXlvdXQoY29tcGlsYWJsZTogQ29tcGlsYWJsZUxheW91dCwgZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICBsZXQgYnVpbGRlciA9IG5ldyBDb21wb25lbnRMYXlvdXRCdWlsZGVyKGVudik7XG5cbiAgY29tcGlsYWJsZS5jb21waWxlKGJ1aWxkZXIpO1xuXG4gIHJldHVybiBidWlsZGVyLmNvbXBpbGUoKTtcbn1cblxuaW50ZXJmYWNlIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHRhZzogQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXI7XG4gIGF0dHJzOiBDb21wb25lbnQuQ29tcG9uZW50QXR0cnNCdWlsZGVyO1xuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW07XG59XG5cbmNsYXNzIENvbXBvbmVudExheW91dEJ1aWxkZXIgaW1wbGVtZW50cyBDb21wb25lbnQuQ29tcG9uZW50TGF5b3V0QnVpbGRlciB7XG4gIHByaXZhdGUgaW5uZXI6IElubmVyTGF5b3V0QnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCkge31cblxuICB3cmFwTGF5b3V0KGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgV3JhcHBlZEJ1aWxkZXIodGhpcy5lbnYsIGxheW91dCk7XG4gIH1cblxuICBmcm9tTGF5b3V0KGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgVW53cmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuY29tcGlsZSgpO1xuICB9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIudGFnO1xuICB9XG5cbiAgZ2V0IGF0dHJzKCk6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmlubmVyLmF0dHJzO1xuICB9XG59XG5cbmNsYXNzIFdyYXBwZWRCdWlsZGVyIGltcGxlbWVudHMgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgcHVibGljIHRhZyA9IG5ldyBDb21wb25lbnRUYWdCdWlsZGVyKCk7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICAvLz09PT09PT09RFlOQU1JQ1xuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoQk9EWSlcbiAgICAvLyAgICAgICAgT3BlbkR5bmFtaWNQcmltaXRpdmVFbGVtZW50XG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vIEJPRFk6ICBOb29wXG4gICAgLy8gICAgICAgIC4uLmJvZHkgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoRU5EKVxuICAgIC8vICAgICAgICBDbG9zZUVsZW1lbnRcbiAgICAvLyBFTkQ6ICAgTm9vcFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy89PT09PT09PVNUQVRJQ1xuICAgIC8vICAgICAgICBPcGVuUHJpbWl0aXZlRWxlbWVudE9wY29kZVxuICAgIC8vICAgICAgICBEaWRDcmVhdGVFbGVtZW50XG4gICAgLy8gICAgICAgIC4uLmF0dHIgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBGbHVzaEVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuXG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgbGV0IG1ldGEgPSB7IHRlbXBsYXRlTWV0YTogbGF5b3V0Lm1ldGEsIHN5bWJvbHM6IGxheW91dC5zeW1ib2xzLCBhc1BhcnRpYWw6IGZhbHNlIH07XG5cbiAgICBsZXQgZHluYW1pY1RhZyA9IHRoaXMudGFnLmdldER5bmFtaWMoKTtcbiAgICBsZXQgc3RhdGljVGFnID0gdGhpcy50YWcuZ2V0U3RhdGljKCk7XG5cbiAgICBsZXQgYiA9IGJ1aWxkZXIoZW52LCBtZXRhKTtcblxuICAgIGIuc3RhcnRMYWJlbHMoKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBiLmZldGNoKFJlZ2lzdGVyLnMxKTtcblxuICAgICAgZXhwcihkeW5hbWljVGFnLCBiKTtcblxuICAgICAgYi5kdXAoKTtcbiAgICAgIGIubG9hZChSZWdpc3Rlci5zMSk7XG5cbiAgICAgIGIudGVzdCgnc2ltcGxlJyk7XG5cbiAgICAgIGIuanVtcFVubGVzcygnQk9EWScpO1xuXG4gICAgICBiLmZldGNoKFJlZ2lzdGVyLnMxKTtcbiAgICAgIGIucHVzaENvbXBvbmVudE9wZXJhdGlvbnMoKTtcbiAgICAgIGIub3BlbkR5bmFtaWNFbGVtZW50KCk7XG4gICAgfSBlbHNlIGlmIChzdGF0aWNUYWcpIHtcbiAgICAgIGIucHVzaENvbXBvbmVudE9wZXJhdGlvbnMoKTtcbiAgICAgIGIub3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucyhzdGF0aWNUYWcpO1xuICAgIH1cblxuICAgIGlmIChkeW5hbWljVGFnIHx8IHN0YXRpY1RhZykge1xuICAgICAgYi5kaWRDcmVhdGVFbGVtZW50KFJlZ2lzdGVyLnMwKTtcblxuICAgICAgbGV0IGF0dHJzID0gdGhpcy5hdHRyc1snYnVmZmVyJ107XG5cbiAgICAgIGZvciAobGV0IGk9MDsgaTxhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb21waWxlU3RhdGVtZW50KGF0dHJzW2ldLCBiKTtcbiAgICAgIH1cblxuICAgICAgYi5mbHVzaEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBiLmxhYmVsKCdCT0RZJyk7XG4gICAgYi5pbnZva2VTdGF0aWMobGF5b3V0LmFzQmxvY2soKSk7XG5cbiAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgYi5mZXRjaChSZWdpc3Rlci5zMSk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgYi5qdW1wVW5sZXNzKCdFTkQnKTtcbiAgICAgIGIuY2xvc2VFbGVtZW50KCk7XG4gICAgfSBlbHNlIGlmIChzdGF0aWNUYWcpIHtcbiAgICAgIGIuY2xvc2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnRU5EJyk7XG5cbiAgICBiLmRpZFJlbmRlckxheW91dChSZWdpc3Rlci5zMCk7XG5cbiAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgYi5sb2FkKFJlZ2lzdGVyLnMxKTtcbiAgICB9XG5cbiAgICBiLnN0b3BMYWJlbHMoKTtcblxuICAgIGxldCBzdGFydCA9IGIuc3RhcnQ7XG4gICAgbGV0IGVuZCA9IGIuZmluYWxpemUoKTtcblxuICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhcnQsIGVuZCwge1xuICAgICAgbWV0YSxcbiAgICAgIGhhc0V2YWw6IGxheW91dC5oYXNFdmFsLFxuICAgICAgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMuY29uY2F0KFtBVFRSU19CTE9DS10pXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgVW53cmFwcGVkQnVpbGRlciBpbXBsZW1lbnRzIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCVUc6IENhbm5vdCBjYWxsIGB0YWdgIG9uIGFuIFVud3JhcHBlZEJ1aWxkZXInKTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgcmV0dXJuIGxheW91dC5hc0xheW91dCh0aGlzLmF0dHJzWydidWZmZXInXSkuY29tcGlsZUR5bmFtaWMoZW52KTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRUYWdCdWlsZGVyIGltcGxlbWVudHMgQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICBwdWJsaWMgaXNEeW5hbWljOiBPcHRpb248Ym9vbGVhbj4gPSBudWxsO1xuICBwdWJsaWMgaXNTdGF0aWM6IE9wdGlvbjxib29sZWFuPiA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWNUYWdOYW1lOiBPcHRpb248c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBkeW5hbWljVGFnTmFtZTogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbj4gPSBudWxsO1xuXG4gIGdldER5bmFtaWMoKTogTWF5YmU8V2lyZUZvcm1hdC5FeHByZXNzaW9uPiB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljVGFnTmFtZTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0aWMoKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0aWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRpY1RhZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljKHRhZ05hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNTdGF0aWMgPSB0cnVlO1xuICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IHRhZ05hbWU7XG4gIH1cblxuICBkeW5hbWljKHRhZ05hbWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gICAgdGhpcy5pc0R5bmFtaWMgPSB0cnVlO1xuICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBbT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uLCBDbGllbnRTaWRlLk9wcy5GdW5jdGlvbkV4cHJlc3Npb24sIHRhZ05hbWVdO1xuICB9XG59XG5cbmNsYXNzIENvbXBvbmVudEF0dHJzQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG5cbiAgc3RhdGljKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbnVsbF0pO1xuICB9XG5cbiAgZHluYW1pYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgW09wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiwgQ2xpZW50U2lkZS5PcHMuRnVuY3Rpb25FeHByZXNzaW9uLCB2YWx1ZV0sIG51bGxdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QnVpbGRlciBpbXBsZW1lbnRzIElDb21wb25lbnRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBlbnY6IEVudmlyb25tZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVpbGRlcjogT3Bjb2RlQnVpbGRlckRTTCkge1xuICAgIHRoaXMuZW52ID0gYnVpbGRlci5lbnY7XG4gIH1cblxuICBzdGF0aWMoZGVmaW5pdGlvbjogQ29tcG9uZW50LkNvbXBvbmVudERlZmluaXRpb248T3BhcXVlPiwgYXJnczogQ29tcG9uZW50QXJncykge1xuICAgIGxldCBbcGFyYW1zLCBoYXNoLCBfZGVmYXVsdCwgaW52ZXJzZV0gPSBhcmdzO1xuICAgIGxldCB7IGJ1aWxkZXIgfSA9IHRoaXM7XG5cbiAgICBidWlsZGVyLnB1c2hDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb24pO1xuICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2UpO1xuICB9XG5cbiAgZHluYW1pYyhkZWZpbml0aW9uQXJnczogQ29tcG9uZW50QXJncywgZ2V0RGVmaW5pdGlvbjogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIGFyZ3M6IENvbXBvbmVudEFyZ3MpIHtcbiAgICBsZXQgW3BhcmFtcywgaGFzaCwgYmxvY2ssIGludmVyc2VdID0gYXJncztcbiAgICBsZXQgeyBidWlsZGVyIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uQXJncyB8fCBkZWZpbml0aW9uQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkR5bmFtaWMgc3ludGF4IHdpdGhvdXQgYW4gYXJndW1lbnRcIik7XG4gICAgfVxuXG4gICAgbGV0IG1ldGEgPSB0aGlzLmJ1aWxkZXIubWV0YS50ZW1wbGF0ZU1ldGE7XG5cbiAgICBmdW5jdGlvbiBoZWxwZXIodm06IFB1YmxpY1ZNLCBhcmdzOiBJQXJndW1lbnRzKSB7XG4gICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbih2bSwgYXJncywgbWV0YSk7XG4gICAgfVxuXG4gICAgYnVpbGRlci5zdGFydExhYmVscygpO1xuXG4gICAgYnVpbGRlci5wdXNoRnJhbWUoKTtcblxuICAgIGJ1aWxkZXIucmV0dXJuVG8oJ0VORCcpO1xuXG4gICAgYnVpbGRlci5jb21waWxlQXJncyhkZWZpbml0aW9uQXJnc1swXSwgZGVmaW5pdGlvbkFyZ3NbMV0sIHRydWUpO1xuICAgIGJ1aWxkZXIuaGVscGVyKGhlbHBlcik7XG5cbiAgICBidWlsZGVyLmR1cCgpO1xuICAgIGJ1aWxkZXIudGVzdCgnc2ltcGxlJyk7XG5cbiAgICBidWlsZGVyLmVudGVyKDIpO1xuXG4gICAgYnVpbGRlci5qdW1wVW5sZXNzKCdFTFNFJyk7XG5cbiAgICBidWlsZGVyLnB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlcigpO1xuICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgYmxvY2ssIGludmVyc2UpO1xuXG4gICAgYnVpbGRlci5sYWJlbCgnRUxTRScpO1xuICAgIGJ1aWxkZXIuZXhpdCgpO1xuICAgIGJ1aWxkZXIucmV0dXJuKCk7XG5cbiAgICBidWlsZGVyLmxhYmVsKCdFTkQnKTtcbiAgICBidWlsZGVyLnBvcEZyYW1lKCk7XG5cbiAgICBidWlsZGVyLnN0b3BMYWJlbHMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRlcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEpIHtcbiAgcmV0dXJuIG5ldyBPcGNvZGVCdWlsZGVyRFNMKGVudiwgbWV0YSk7XG59XG4iXX0=

@@ -72,5 +72,6 @@ 'use strict';

prelude.push([Ops.ClientSideStatement, ClientSide.Ops.OpenComponentElement, tag]);
prelude.push([Ops.ClientSideStatement, ClientSide.Ops.DidCreateElement]);
let attrsSymbol = symbolTable.symbols.length + 1;
symbolTable.symbols.push(ATTRS_BLOCK);
let statements = prelude.concat([[Ops.Yield, attrsSymbol, _util.EMPTY_ARRAY]]).concat(head).concat(body);
let statements = prelude.concat([[Ops.Yield, attrsSymbol, _util.EMPTY_ARRAY]]).concat(head).concat(body).concat([[Ops.ClientSideStatement, ClientSide.Ops.DidRenderLayout]]);
return new CompilableTemplate(statements, symbolTable);

@@ -125,9 +126,11 @@ }

Ops[Ops["OpenComponentElement"] = 0] = "OpenComponentElement";
Ops[Ops["OptimizedAppend"] = 1] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 2] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 3] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 4] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 5] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 6] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 7] = "FunctionExpression";
Ops[Ops["DidCreateElement"] = 1] = "DidCreateElement";
Ops[Ops["DidRenderLayout"] = 2] = "DidRenderLayout";
Ops[Ops["OptimizedAppend"] = 3] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 4] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 5] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 6] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 7] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 8] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 9] = "FunctionExpression";
})(Ops = ClientSide.Ops || (ClientSide.Ops = {}));

@@ -185,2 +188,2 @@ function is(variant) {

exports.RawProgram = RawProgram;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLEFBQU8sQUFBRSxBQUF1QixBQUFFLEFBQXNCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUNwRixBQUFPLEFBQUUsQUFBTyxBQUFFLEFBQU0sQUFBWSxBQUFDOztBQUdyQyxBQUFPLEFBQVUsQUFBVyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUNwRCxBQUFPOztJQUFLLEFBQVUsQUFBTSxBQUFzQixBQUFDOztBQUVuRCxBQUFPLEFBQUUsQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUd2QyxBQUFPLEFBQ0wsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQyxBQUk1QixBQUFNOzs7OzBCQUEyQixBQUErQixXQUFFLEFBQXNCO0FBQ3RGLEFBQVUsMEJBQUMsQUFBTyxRQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN6QztBQUFDLEFBT0QsQUFBTTs7QUFJSixnQkFBbUIsQUFBa0MsWUFBUyxBQUFjO0FBQXpELGFBQVUsYUFBVixBQUFVLEFBQXdCO0FBQVMsYUFBVyxjQUFYLEFBQVcsQUFBRztBQUhwRSxhQUFjLGlCQUFtQyxBQUFJLEFBQUM7QUFDdEQsYUFBZSxrQkFBdUMsQUFBSSxBQUFDLEFBRVk7QUFBQztBQUVoRixBQUFhLGtCQUFDLEFBQWdCO0FBQzVCLFlBQUksRUFBRSxBQUFjLEFBQUUsbUJBQUcsQUFBSSxBQUFDO0FBRTlCLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBYyxBQUFDLGdCQUFDLEFBQUM7QUFDcEIsZ0JBQUksQUFBTyxVQUFHLEFBQWlCLGtCQUFDLEFBQUksS0FBQyxBQUFVLFlBQUUsQUFBSSxLQUFDLEFBQVcsWUFBQyxBQUFJLE1BQUUsQUFBRyxBQUFDLEFBQUM7QUFFN0UsZ0JBQUksQUFBSyxRQUFHLEFBQU8sUUFBQyxBQUFLLEFBQUM7QUFDMUIsZ0JBQUksQUFBRyxNQUFH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QUFFLEFBQUMsQUFBQyxBQUMvRztBQUFDLEFBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21waWxlZER5bmFtaWNUZW1wbGF0ZSwgQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZSB9IGZyb20gJy4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCB7IGJ1aWxkZXIgfSBmcm9tICcuL2NvbXBpbGVyJztcbmltcG9ydCBPcGNvZGVCdWlsZGVyIGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7IE9wdGlvbiwgRU1QVFlfQVJSQVkgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgT3BhcXVlLCBTeW1ib2xUYWJsZSwgUHJvZ3JhbVN5bWJvbFRhYmxlLCBCbG9ja1N5bWJvbFRhYmxlIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkZWJ1Z1NsaWNlIH0gZnJvbSAnLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbXBpbGF0aW9uTWV0YSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQge1xuICBTVEFURU1FTlRTXG59IGZyb20gJy4vc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZFN0YXRlbWVudCA9IFdpcmVGb3JtYXQuU3RhdGVtZW50IHwgV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZSB8IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5Bcmd1bWVudDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVTdGF0ZW1lbnQoc3RhdGVtZW50OiBXaXJlRm9ybWF0LlN0YXRlbWVudCwgYnVpbGRlcjogT3Bjb2RlQnVpbGRlcikge1xuICBTVEFURU1FTlRTLmNvbXBpbGUoc3RhdGVtZW50LCBidWlsZGVyKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2FubmVkVGVtcGxhdGU8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiB7XG4gIGNvbXBpbGVTdGF0aWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkU3RhdGljVGVtcGxhdGU7XG4gIGNvbXBpbGVEeW5hbWljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTPjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBpbGFibGVUZW1wbGF0ZTxTIGV4dGVuZHMgU3ltYm9sVGFibGU+IGltcGxlbWVudHMgU2Nhbm5lZFRlbXBsYXRlPFM+IHtcbiAgcHJpdmF0ZSBjb21waWxlZFN0YXRpYzogT3B0aW9uPENvbXBpbGVkU3RhdGljVGVtcGxhdGU+ID0gbnVsbDtcbiAgcHJpdmF0ZSBjb21waWxlZER5bmFtaWM6IE9wdGlvbjxDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTPj4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBwdWJsaWMgc3ltYm9sVGFibGU6IFMpIHt9XG5cbiAgY29tcGlsZVN0YXRpYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZSB7XG4gICAgbGV0IHsgY29tcGlsZWRTdGF0aWMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNvbXBpbGVkU3RhdGljKSB7XG4gICAgICBsZXQgYnVpbGRlciA9IGNvbXBpbGVTdGF0ZW1lbnRzKHRoaXMuc3RhdGVtZW50cywgdGhpcy5zeW1ib2xUYWJsZS5tZXRhLCBlbnYpO1xuXG4gICAgICBsZXQgc3RhcnQgPSBidWlsZGVyLnN0YXJ0O1xuICAgICAgbGV0IGVuZCA9IGJ1aWxkZXIuZmluYWxpemUoKTtcblxuICAgICAgZGVidWdTbGljZShlbnYsIHN0YXJ0LCBlbmQpO1xuXG4gICAgICBjb21waWxlZFN0YXRpYyA9IHRoaXMuY29tcGlsZWRTdGF0aWMgPSBuZXcgQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZShzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGlsZWRTdGF0aWM7XG4gIH1cblxuICBjb21waWxlRHluYW1pYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4ge1xuICAgIGxldCB7IGNvbXBpbGVkRHluYW1pYyB9ID0gdGhpcztcblxuICAgIGlmICghY29tcGlsZWREeW5hbWljKSB7XG4gICAgICBsZXQgc3RhdGljQmxvY2sgPSB0aGlzLmNvbXBpbGVTdGF0aWMoZW52KTtcbiAgICAgIGNvbXBpbGVkRHluYW1pYyA9IG5ldyBDb21waWxlZER5bmFtaWNUZW1wbGF0ZShzdGF0aWNCbG9jay5zdGFydCwgc3RhdGljQmxvY2suZW5kLCB0aGlzLnN5bWJvbFRhYmxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGlsZWREeW5hbWljO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7IEdsaW1tZXJEZWJ1ZzogJzx0ZW1wbGF0ZT4nIH07XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVGVtcGxhdGUgPSBDb21waWxhYmxlVGVtcGxhdGU8U3ltYm9sVGFibGU+O1xuZXhwb3J0IHR5cGUgUHJvZ3JhbSA9IENvbXBpbGFibGVUZW1wbGF0ZTxQcm9ncmFtU3ltYm9sVGFibGU+O1xuZXhwb3J0IHR5cGUgQmxvY2sgPSBDb21waWxhYmxlVGVtcGxhdGU8QmxvY2tTeW1ib2xUYWJsZT47XG5cbmV4cG9ydCB0eXBlIFNjYW5uZWRQcm9ncmFtID0gU2Nhbm5lZFRlbXBsYXRlPFByb2dyYW1TeW1ib2xUYWJsZT47XG5leHBvcnQgdHlwZSBTY2FubmVkQmxvY2sgPSBTY2FubmVkVGVtcGxhdGU8QmxvY2tTeW1ib2xUYWJsZT47XG5cbmZ1bmN0aW9uIGNvbXBpbGVTdGF0ZW1lbnRzKHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgZW52OiBFbnZpcm9ubWVudCkge1xuICBsZXQgYiA9IGJ1aWxkZXIoZW52LCBtZXRhKTtcbiAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudCwgYik7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cblxuZXhwb3J0IGNvbnN0IEFUVFJTX0JMT0NLID0gJyZhdHRycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXlvdXQocHJlbHVkZTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgaGVhZDogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgYm9keTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgc3ltYm9sVGFibGU6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICBsZXQgWywgdGFnXSA9IHByZWx1ZGUucG9wKCkgYXMgV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLk9wZW5FbGVtZW50O1xuICBwcmVsdWRlLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5PcGVuQ29tcG9uZW50RWxlbWVudCwgdGFnXSk7XG5cbiAgbGV0IGF0dHJzU3ltYm9sID0gc3ltYm9sVGFibGUuc3ltYm9scy5sZW5ndGggKyAxO1xuICBzeW1ib2xUYWJsZS5zeW1ib2xzLnB1c2goQVRUUlNfQkxPQ0spO1xuXG4gIGxldCBzdGF0ZW1lbnRzID0gcHJlbHVkZVxuICAgIC5jb25jYXQoW1tPcHMuWWllbGQsIGF0dHJzU3ltYm9sLCBFTVBUWV9BUlJBWV1dKVxuICAgIC5jb25jYXQoaGVhZClcbiAgICAuY29uY2F0KGJvZHkpO1xuXG4gIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHN5bWJvbFRhYmxlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Nhbm5lciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYmxvY2s6IFdpcmVGb3JtYXQuU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssIHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgc2NhbkVudHJ5UG9pbnQobWV0YTogQ29tcGlsYXRpb25NZXRhKTogUHJvZ3JhbSB7XG4gICAgbGV0IHsgYmxvY2ssIGVudiB9ID0gdGhpcztcblxuICAgIGxldCBzdGF0ZW1lbnRzO1xuICAgIGlmIChibG9jay5wcmVsdWRlICYmIGJsb2NrLmhlYWQpIHtcbiAgICAgIHN0YXRlbWVudHMgPSBibG9jay5wcmVsdWRlLmNvbmNhdChibG9jay5oZWFkKS5jb25jYXQoYmxvY2suc3RhdGVtZW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlbWVudHMgPSBibG9jay5zdGF0ZW1lbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmF3UHJvZ3JhbShlbnYsIG1ldGEsIHN0YXRlbWVudHMsIGJsb2NrLnN5bWJvbHMsIGJsb2NrLmhhc0V2YWwpLnNjYW4oKTtcbiAgfVxuXG4gIHNjYW5CbG9jayhtZXRhOiBDb21waWxhdGlvbk1ldGEpOiBCbG9jayB7XG4gICAgbGV0IHsgYmxvY2ssIGVudiB9ID0gdGhpcztcblxuICAgIGxldCBzdGF0ZW1lbnRzO1xuICAgIGlmIChibG9jay5wcmVsdWRlICYmIGJsb2NrLmhlYWQpIHtcbiAgICAgIHN0YXRlbWVudHMgPSBibG9jay5wcmVsdWRlLmNvbmNhdChibG9jay5oZWFkKS5jb25jYXQoYmxvY2suc3RhdGVtZW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlbWVudHMgPSBibG9jay5zdGF0ZW1lbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2soZW52LCBtZXRhLCBzdGF0ZW1lbnRzLCBFTVBUWV9BUlJBWSkuc2NhbigpO1xuICB9XG5cbiAgc2NhbkxheW91dChtZXRhOiBDb21waWxhdGlvbk1ldGEsIGF0dHJzOiBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlW10pOiBQcm9ncmFtIHtcbiAgICBsZXQgeyBibG9jayB9ID0gdGhpcztcbiAgICBsZXQgeyBzeW1ib2xzLCBoYXNFdmFsIH0gPSBibG9jaztcblxuICAgIGlmICghYmxvY2sucHJlbHVkZSB8fCAhYmxvY2suaGVhZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGxheW91dCBtdXN0IGhhdmUgYSB0b3AtbGV2ZWwgZWxlbWVudGApO1xuICAgIH1cblxuICAgIGxldCBzeW1ib2xUYWJsZSA9IHsgbWV0YSwgaGFzRXZhbCwgc3ltYm9scyB9O1xuICAgIGxldCB7IHN0YXRlbWVudHM6IHByZWx1ZGUgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IGJsb2NrLnByZWx1ZGUsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBoZWFkIH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBbLi4uYXR0cnMsIC4uLmJsb2NrLmhlYWRdLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG4gICAgbGV0IHsgc3RhdGVtZW50czogYm9keSB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogYmxvY2suc3RhdGVtZW50cywgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuXG4gICAgcmV0dXJuIGxheW91dChwcmVsdWRlLCBoZWFkLCBib2R5LCBzeW1ib2xUYWJsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYW5CbG9jayhibG9jazogV2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2ssIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgZW52OiBFbnZpcm9ubWVudCk6IEJsb2NrIHtcbiAgcmV0dXJuIG5ldyBSYXdJbmxpbmVCbG9jayhlbnYsIG1ldGEsIGJsb2NrLnN0YXRlbWVudHMsIEVNUFRZX0FSUkFZKS5zY2FuKCk7XG59XG5cbmltcG9ydCB7IFB1YmxpY1ZNIH0gZnJvbSAnLi92bSc7XG5pbXBvcnQgeyBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBDbGllbnRTaWRlIHtcbiAgZXhwb3J0IGVudW0gT3BzIHtcbiAgICBPcGVuQ29tcG9uZW50RWxlbWVudCxcbiAgICBPcHRpbWl6ZWRBcHBlbmQsXG4gICAgVW5vcHRpbWl6ZWRBcHBlbmQsXG4gICAgU3RhdGljUGFydGlhbCxcbiAgICBEeW5hbWljUGFydGlhbCxcbiAgICBOZXN0ZWRCbG9jayxcbiAgICBTY2FubmVkQmxvY2ssXG5cbiAgICBGdW5jdGlvbkV4cHJlc3Npb25cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpczxUIGV4dGVuZHMgYW55W10+KHZhcmlhbnQ6IE9wcyk6ICh2YWx1ZTogYW55W10pID0+IHZhbHVlIGlzIFQge1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZTogYW55W10pOiB2YWx1ZSBpcyBUIHtcbiAgICAgIHJldHVybiB2YWx1ZVswXSA9PT0gV2lyZUZvcm1hdC5PcHMuQ2xpZW50U2lkZUV4cHJlc3Npb24gfHwgdmFsdWVbMF0gPT09IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQgJiYgdmFsdWVbMV0gPT09IHZhcmlhbnQ7XG4gICAgfTtcbiAgfVxuXG4gIGltcG9ydCBDbGllbnRTaWRlU3RhdGVtZW50ID0gV2lyZUZvcm1hdC5PcHMuQ2xpZW50U2lkZVN0YXRlbWVudDtcbiAgaW1wb3J0IENsaWVudFNpZGVFeHByZXNzaW9uID0gV2lyZUZvcm1hdC5PcHMuQ2xpZW50U2lkZUV4cHJlc3Npb247XG5cbiAgZXhwb3J0IHR5cGUgT3BlbkNvbXBvbmVudEVsZW1lbnQgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5PcGVuQ29tcG9uZW50RWxlbWVudCwgc3RyaW5nXTtcbiAgZXhwb3J0IHR5cGUgT3B0aW1pemVkQXBwZW5kICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5PcHRpbWl6ZWRBcHBlbmQsIFdpcmVGb3JtYXQuRXhwcmVzc2lvbiwgYm9vbGVhbl07XG4gIGV4cG9ydCB0eXBlIFVub3B0aW1pemVkQXBwZW5kICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuVW5vcHRpbWl6ZWRBcHBlbmQsIFdpcmVGb3JtYXQuRXhwcmVzc2lvbiwgYm9vbGVhbl07XG4gIGV4cG9ydCB0eXBlIFN0YXRpY1BhcnRpYWwgICAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuU3RhdGljUGFydGlhbCwgc3RyaW5nLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuICBleHBvcnQgdHlwZSBEeW5hbWljUGFydGlhbCAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLkR5bmFtaWNQYXJ0aWFsLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIFdpcmVGb3JtYXQuQ29yZS5FdmFsSW5mb107XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uICAgID0gW0NsaWVudFNpZGVFeHByZXNzaW9uLCBPcHMuRnVuY3Rpb25FeHByZXNzaW9uLCBGdW5jdGlvbkV4cHJlc3Npb25DYWxsYmFjazxPcGFxdWU+XTtcblxuICBleHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb25DYWxsYmFjazxUPiA9IChWTTogUHVibGljVk0sIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkgPT4gVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPjtcblxuICBleHBvcnQgdHlwZSBDbGllbnRTaWRlU3RhdGVtZW50ID1cbiAgICB8IE9wZW5Db21wb25lbnRFbGVtZW50XG4gICAgfCBPcHRpbWl6ZWRBcHBlbmRcbiAgICB8IFVub3B0aW1pemVkQXBwZW5kXG4gICAgfCBTdGF0aWNQYXJ0aWFsXG4gICAgfCBEeW5hbWljUGFydGlhbFxuICAgIDtcblxuICBleHBvcnQgdHlwZSBDbGllbnRTaWRlRXhwcmVzc2lvbiA9XG4gICAgfCBGdW5jdGlvbkV4cHJlc3Npb25cbiAgICA7XG59XG5cbmNvbnN0IHsgT3BzIH0gPSBXaXJlRm9ybWF0O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmF3QmxvY2s8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbnY6IEVudmlyb25tZW50LCBwcm90ZWN0ZWQgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBwcml2YXRlIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10pIHt9XG5cbiAgc2NhblN0YXRlbWVudHMoKTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSB7XG4gICAgbGV0IGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zdGF0ZW1lbnRzO1xuICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICBidWZmZXIucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBjaGlsZChibG9jazogT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPik6IE9wdGlvbjxSYXdJbmxpbmVCbG9jaz4ge1xuICAgIGlmICghYmxvY2spIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2sodGhpcy5lbnYsIHRoaXMubWV0YSwgYmxvY2suc3RhdGVtZW50cywgYmxvY2sucGFyYW1ldGVycyk7XG4gIH1cblxuICBhYnN0cmFjdCBzY2FuKCk6IENvbXBpbGFibGVUZW1wbGF0ZTxTPjtcbn1cblxuZXhwb3J0IGNsYXNzIFJhd0lubGluZUJsb2NrIGV4dGVuZHMgUmF3QmxvY2s8QmxvY2tTeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHByaXZhdGUgcGFyYW1ldGVyczogbnVtYmVyW10pIHtcbiAgICBzdXBlcihlbnYsIG1ldGEsIHN0YXRlbWVudHMpO1xuICB9XG5cbiAgc2NhbigpOiBCbG9jayB7XG4gICAgbGV0IHN0YXRlbWVudHMgPSB0aGlzLnNjYW5TdGF0ZW1lbnRzKCk7XG4gICAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgeyBwYXJhbWV0ZXJzOiB0aGlzLnBhcmFtZXRlcnMsIG1ldGE6IHRoaXMubWV0YSB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmF3UHJvZ3JhbSBleHRlbmRzIFJhd0Jsb2NrPFByb2dyYW1TeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHByaXZhdGUgc3ltYm9sczogc3RyaW5nW10sIHByaXZhdGUgaGFzRXZhbDogYm9vbGVhbikge1xuICAgIHN1cGVyKGVudiwgbWV0YSwgc3RhdGVtZW50cyk7XG4gIH1cblxuICBzY2FuKCk6IFByb2dyYW0ge1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zY2FuU3RhdGVtZW50cygpO1xuICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgc3ltYm9sczogdGhpcy5zeW1ib2xzLCBoYXNFdmFsOiB0aGlzLmhhc0V2YWwsIG1ldGE6IHRoaXMubWV0YSB9KTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLEFBQU8sQUFBRSxBQUF1QixBQUFFLEFBQXNCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUNwRixBQUFPLEFBQUUsQUFBTyxBQUFFLEFBQU0sQUFBWSxBQUFDOztBQUdyQyxBQUFPLEFBQVUsQUFBVyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUNwRCxBQUFPOztJQUFLLEFBQVUsQUFBTSxBQUFzQixBQUFDOztBQUVuRCxBQUFPLEFBQUUsQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUd2QyxBQUFPLEFBQ0wsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQyxBQUk1QixBQUFNOzs7OzBCQUEyQixBQUErQixXQUFFLEFBQXNCO0FBQ3RGLEFBQVUsMEJBQUMsQUFBTyxRQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN6QztBQUFDLEFBT0QsQUFBTTs7QUFJSixnQkFBbUIsQUFBa0MsWUFBUyxBQUFjO0FBQXpELGFBQVUsYUFBVixBQUFVLEFBQXdCO0FBQVMsYUFBVyxjQUFYLEFBQVcsQUFBRztBQUhwRSxhQUFjLGlCQUFtQyxBQUFJLEFBQUM7QUFDdEQsYUFBZSxrQkFBdUMsQUFBSSxBQUFDLEFBRVk7QUFBQztBQUVoRixBQUFhLGtCQUFDLEFBQWdCO0FBQzVCLFlBQUksRUFBRSxBQUFjLEFBQUUsbUJBQUcsQUFBSSxBQUFDO0FBRTlCLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBYyxBQUFDLGdCQUFDLEFBQUM7QUFDcEIsZ0JBQUksQUFBTyxVQUFHLEFBQWlCLGtCQUFDLEFBQUksS0FBQyxBQUFVLFlBQUUsQUFBSSxLQUFDLEFBQVcsWUFBQyxBQUFJLE1BQUUsQUFBRyxBQUFDLEFBQUM7QUFFN0UsZ0JBQUksQUFBSyxRQUFHLEFBQU8sUUFBQyxBQUFLLEFBQUM7QUFDMUIsZ0JBQUksQUFBRyxNQUFH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QUFBUyxBQUU1STtBQUFDO0FBRUQsQUFBSTtBQUNGLFlBQUksQUFBVSxhQUFHLEFBQUksS0FBQyxBQUFjLEFBQUUsQUFBQztBQUN2QyxBQUFNLGVBQUMsSUFBSSxBQUFrQixtQkFBQyxBQUFVLFlBQUUsRUFBRSxBQUFPLFNBQUUsQUFBSSxLQUFDLEFBQU8sU0FBRSxBQUFPLFNBQUUsQUFBSSxLQUFDLEFBQU8sU0FBRSxBQUFJLE1BQUUsQUFBSSxLQUFDLEFBQUksQUFBRSxBQUFDLEFBQUMsQUFDL0c7QUFBQyxBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsIENvbXBpbGVkU3RhdGljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgT3Bjb2RlQnVpbGRlciBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBPcHRpb24sIEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgQmxvY2tTeW1ib2xUYWJsZSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVidWdTbGljZSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtcbiAgU1RBVEVNRU5UU1xufSBmcm9tICcuL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRTdGF0ZW1lbnQgPSBXaXJlRm9ybWF0LlN0YXRlbWVudCB8IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGUgfCBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXJndW1lbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudDogV2lyZUZvcm1hdC5TdGF0ZW1lbnQsIGJ1aWxkZXI6IE9wY29kZUJ1aWxkZXIpIHtcbiAgU1RBVEVNRU5UUy5jb21waWxlKHN0YXRlbWVudCwgYnVpbGRlcik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lZFRlbXBsYXRlPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb21waWxlU3RhdGljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZFN0YXRpY1RlbXBsYXRlO1xuICBjb21waWxlRHluYW1pYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBDb21waWxhYmxlVGVtcGxhdGU8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiBpbXBsZW1lbnRzIFNjYW5uZWRUZW1wbGF0ZTxTPiB7XG4gIHByaXZhdGUgY29tcGlsZWRTdGF0aWM6IE9wdGlvbjxDb21waWxlZFN0YXRpY1RlbXBsYXRlPiA9IG51bGw7XG4gIHByaXZhdGUgY29tcGlsZWREeW5hbWljOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHVibGljIHN5bWJvbFRhYmxlOiBTKSB7fVxuXG4gIGNvbXBpbGVTdGF0aWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkU3RhdGljVGVtcGxhdGUge1xuICAgIGxldCB7IGNvbXBpbGVkU3RhdGljIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjb21waWxlZFN0YXRpYykge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBjb21waWxlU3RhdGVtZW50cyh0aGlzLnN0YXRlbWVudHMsIHRoaXMuc3ltYm9sVGFibGUubWV0YSwgZW52KTtcblxuICAgICAgbGV0IHN0YXJ0ID0gYnVpbGRlci5zdGFydDtcbiAgICAgIGxldCBlbmQgPSBidWlsZGVyLmZpbmFsaXplKCk7XG5cbiAgICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgICAgY29tcGlsZWRTdGF0aWMgPSB0aGlzLmNvbXBpbGVkU3RhdGljID0gbmV3IENvbXBpbGVkU3RhdGljVGVtcGxhdGUoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkU3RhdGljO1xuICB9XG5cbiAgY29tcGlsZUR5bmFtaWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+IHtcbiAgICBsZXQgeyBjb21waWxlZER5bmFtaWMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNvbXBpbGVkRHluYW1pYykge1xuICAgICAgbGV0IHN0YXRpY0Jsb2NrID0gdGhpcy5jb21waWxlU3RhdGljKGVudik7XG4gICAgICBjb21waWxlZER5bmFtaWMgPSBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhdGljQmxvY2suc3RhcnQsIHN0YXRpY0Jsb2NrLmVuZCwgdGhpcy5zeW1ib2xUYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkRHluYW1pYztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4geyBHbGltbWVyRGVidWc6ICc8dGVtcGxhdGU+JyB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0gQ29tcGlsYWJsZVRlbXBsYXRlPFN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIFByb2dyYW0gPSBDb21waWxhYmxlVGVtcGxhdGU8UHJvZ3JhbVN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIEJsb2NrID0gQ29tcGlsYWJsZVRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5leHBvcnQgdHlwZSBTY2FubmVkUHJvZ3JhbSA9IFNjYW5uZWRUZW1wbGF0ZTxQcm9ncmFtU3ltYm9sVGFibGU+O1xuZXhwb3J0IHR5cGUgU2Nhbm5lZEJsb2NrID0gU2Nhbm5lZFRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5mdW5jdGlvbiBjb21waWxlU3RhdGVtZW50cyhzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgbGV0IGIgPSBidWlsZGVyKGVudiwgbWV0YSk7XG5cbiAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudCwgYik7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cblxuZXhwb3J0IGNvbnN0IEFUVFJTX0JMT0NLID0gJyZhdHRycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXlvdXQocHJlbHVkZTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgaGVhZDogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgYm9keTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgc3ltYm9sVGFibGU6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICBsZXQgWywgdGFnXSA9IHByZWx1ZGUucG9wKCkgYXMgV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLk9wZW5FbGVtZW50O1xuICBwcmVsdWRlLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5PcGVuQ29tcG9uZW50RWxlbWVudCwgdGFnXSk7XG4gIHByZWx1ZGUucHVzaChbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLkRpZENyZWF0ZUVsZW1lbnRdKTtcblxuICBsZXQgYXR0cnNTeW1ib2wgPSBzeW1ib2xUYWJsZS5zeW1ib2xzLmxlbmd0aCArIDE7XG4gIHN5bWJvbFRhYmxlLnN5bWJvbHMucHVzaChBVFRSU19CTE9DSyk7XG5cbiAgbGV0IHN0YXRlbWVudHMgPSBwcmVsdWRlXG4gICAgLmNvbmNhdChbW09wcy5ZaWVsZCwgYXR0cnNTeW1ib2wsIEVNUFRZX0FSUkFZXV0pXG4gICAgLmNvbmNhdChoZWFkKVxuICAgIC5jb25jYXQoYm9keSlcbiAgICAuY29uY2F0KFtbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLkRpZFJlbmRlckxheW91dF1dKTtcblxuICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCBzeW1ib2xUYWJsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJsb2NrOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLCBwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIHNjYW5FbnRyeVBvaW50KG1ldGE6IENvbXBpbGF0aW9uTWV0YSk6IFByb2dyYW0ge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd1Byb2dyYW0oZW52LCBtZXRhLCBzdGF0ZW1lbnRzLCBibG9jay5zeW1ib2xzLCBibG9jay5oYXNFdmFsKS5zY2FuKCk7XG4gIH1cblxuICBzY2FuQmxvY2sobWV0YTogQ29tcGlsYXRpb25NZXRhKTogQmxvY2sge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKGVudiwgbWV0YSwgc3RhdGVtZW50cywgRU1QVFlfQVJSQVkpLnNjYW4oKTtcbiAgfVxuXG4gIHNjYW5MYXlvdXQobWV0YTogQ29tcGlsYXRpb25NZXRhLCBhdHRyczogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdKTogUHJvZ3JhbSB7XG4gICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgbGV0IHsgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG5cbiAgICBpZiAoIWJsb2NrLnByZWx1ZGUgfHwgIWJsb2NrLmhlYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBsYXlvdXQgbXVzdCBoYXZlIGEgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICB9XG5cbiAgICBsZXQgc3ltYm9sVGFibGUgPSB7IG1ldGEsIGhhc0V2YWwsIHN5bWJvbHMgfTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBwcmVsdWRlIH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBibG9jay5wcmVsdWRlLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG4gICAgbGV0IHsgc3RhdGVtZW50czogaGVhZCB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogWy4uLmF0dHJzLCAuLi5ibG9jay5oZWFkXSwgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuICAgIGxldCB7IHN0YXRlbWVudHM6IGJvZHkgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IGJsb2NrLnN0YXRlbWVudHMsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcblxuICAgIHJldHVybiBsYXlvdXQocHJlbHVkZSwgaGVhZCwgYm9keSwgc3ltYm9sVGFibGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FuQmxvY2soYmxvY2s6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpOiBCbG9jayB7XG4gIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2soZW52LCBtZXRhLCBibG9jay5zdGF0ZW1lbnRzLCBFTVBUWV9BUlJBWSkuc2NhbigpO1xufVxuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2xpZW50U2lkZSB7XG4gIGV4cG9ydCBlbnVtIE9wcyB7XG4gICAgT3BlbkNvbXBvbmVudEVsZW1lbnQsXG4gICAgRGlkQ3JlYXRlRWxlbWVudCxcbiAgICBEaWRSZW5kZXJMYXlvdXQsXG4gICAgT3B0aW1pemVkQXBwZW5kLFxuICAgIFVub3B0aW1pemVkQXBwZW5kLFxuICAgIFN0YXRpY1BhcnRpYWwsXG4gICAgRHluYW1pY1BhcnRpYWwsXG4gICAgTmVzdGVkQmxvY2ssXG4gICAgU2Nhbm5lZEJsb2NrLFxuXG4gICAgRnVuY3Rpb25FeHByZXNzaW9uXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXM8VCBleHRlbmRzIGFueVtdPih2YXJpYW50OiBPcHMpOiAodmFsdWU6IGFueVtdKSA9PiB2YWx1ZSBpcyBUIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWU6IGFueVtdKTogdmFsdWUgaXMgVCB7XG4gICAgICByZXR1cm4gdmFsdWVbMF0gPT09IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uIHx8IHZhbHVlWzBdID09PSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlU3RhdGVtZW50ICYmIHZhbHVlWzFdID09PSB2YXJpYW50O1xuICAgIH07XG4gIH1cblxuICBpbXBvcnQgQ2xpZW50U2lkZVN0YXRlbWVudCA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQ7XG4gIGltcG9ydCBDbGllbnRTaWRlRXhwcmVzc2lvbiA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uO1xuXG4gIGV4cG9ydCB0eXBlIE9wZW5Db21wb25lbnRFbGVtZW50ICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHN0cmluZ107XG4gIGV4cG9ydCB0eXBlIERpZENyZWF0ZUVsZW1lbnQgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuRGlkQ3JlYXRlRWxlbWVudF07XG4gIGV4cG9ydCB0eXBlIERpZFJlbmRlckxheW91dCAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuRGlkUmVuZGVyTGF5b3V0XTtcbiAgZXhwb3J0IHR5cGUgT3B0aW1pemVkQXBwZW5kICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5PcHRpbWl6ZWRBcHBlbmQsIFdpcmVGb3JtYXQuRXhwcmVzc2lvbiwgYm9vbGVhbl07XG4gIGV4cG9ydCB0eXBlIFVub3B0aW1pemVkQXBwZW5kICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuVW5vcHRpbWl6ZWRBcHBlbmQsIFdpcmVGb3JtYXQuRXhwcmVzc2lvbiwgYm9vbGVhbl07XG4gIGV4cG9ydCB0eXBlIFN0YXRpY1BhcnRpYWwgICAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuU3RhdGljUGFydGlhbCwgc3RyaW5nLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuICBleHBvcnQgdHlwZSBEeW5hbWljUGFydGlhbCAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLkR5bmFtaWNQYXJ0aWFsLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIFdpcmVGb3JtYXQuQ29yZS5FdmFsSW5mb107XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uICAgID0gW0NsaWVudFNpZGVFeHByZXNzaW9uLCBPcHMuRnVuY3Rpb25FeHByZXNzaW9uLCBGdW5jdGlvbkV4cHJlc3Npb25DYWxsYmFjazxPcGFxdWU+XTtcblxuICBleHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb25DYWxsYmFjazxUPiA9IChWTTogUHVibGljVk0sIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkgPT4gVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPjtcblxuICBleHBvcnQgdHlwZSBDbGllbnRTaWRlU3RhdGVtZW50ID1cbiAgICB8IE9wZW5Db21wb25lbnRFbGVtZW50XG4gICAgfCBEaWRDcmVhdGVFbGVtZW50XG4gICAgfCBEaWRSZW5kZXJMYXlvdXRcbiAgICB8IE9wdGltaXplZEFwcGVuZFxuICAgIHwgVW5vcHRpbWl6ZWRBcHBlbmRcbiAgICB8IFN0YXRpY1BhcnRpYWxcbiAgICB8IER5bmFtaWNQYXJ0aWFsXG4gICAgO1xuXG4gIGV4cG9ydCB0eXBlIENsaWVudFNpZGVFeHByZXNzaW9uID1cbiAgICB8IEZ1bmN0aW9uRXhwcmVzc2lvblxuICAgIDtcbn1cblxuY29uc3QgeyBPcHMgfSA9IFdpcmVGb3JtYXQ7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSYXdCbG9jazxTIGV4dGVuZHMgU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVudjogRW52aXJvbm1lbnQsIHByb3RlY3RlZCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHByaXZhdGUgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSkge31cblxuICBzY2FuU3RhdGVtZW50cygpOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdIHtcbiAgICBsZXQgYnVmZmVyOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdID0gW107XG4gICAgbGV0IHN0YXRlbWVudHMgPSB0aGlzLnN0YXRlbWVudHM7XG4gICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGNoaWxkKGJsb2NrOiBPcHRpb248V2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2s+KTogT3B0aW9uPFJhd0lubGluZUJsb2NrPiB7XG4gICAgaWYgKCFibG9jaykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBSYXdJbmxpbmVCbG9jayh0aGlzLmVudiwgdGhpcy5tZXRhLCBibG9jay5zdGF0ZW1lbnRzLCBibG9jay5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIGFic3RyYWN0IHNjYW4oKTogQ29tcGlsYWJsZVRlbXBsYXRlPFM+O1xufVxuXG5leHBvcnQgY2xhc3MgUmF3SW5saW5lQmxvY2sgZXh0ZW5kcyBSYXdCbG9jazxCbG9ja1N5bWJvbFRhYmxlPiB7XG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHJpdmF0ZSBwYXJhbWV0ZXJzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKGVudiwgbWV0YSwgc3RhdGVtZW50cyk7XG4gIH1cblxuICBzY2FuKCk6IEJsb2NrIHtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc2NhblN0YXRlbWVudHMoKTtcbiAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycywgbWV0YTogdGhpcy5tZXRhIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYXdQcm9ncmFtIGV4dGVuZHMgUmF3QmxvY2s8UHJvZ3JhbVN5bWJvbFRhYmxlPiB7XG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHJpdmF0ZSBzeW1ib2xzOiBzdHJpbmdbXSwgcHJpdmF0ZSBoYXNFdmFsOiBib29sZWFuKSB7XG4gICAgc3VwZXIoZW52LCBtZXRhLCBzdGF0ZW1lbnRzKTtcbiAgfVxuXG4gIHNjYW4oKTogUHJvZ3JhbSB7XG4gICAgbGV0IHN0YXRlbWVudHMgPSB0aGlzLnNjYW5TdGF0ZW1lbnRzKCk7XG4gICAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgeyBzeW1ib2xzOiB0aGlzLnN5bWJvbHMsIGhhc0V2YWw6IHRoaXMuaGFzRXZhbCwgbWV0YTogdGhpcy5tZXRhIH0pO1xuICB9XG59XG4iXX0=

@@ -8,2 +8,4 @@ 'use strict';

var _opcodes = require('../opcodes');
var _environment = require('../environment');

@@ -23,47 +25,51 @@

var _opcodes = require('../opcodes');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class EvaluationStack {
constructor(stack = []) {
constructor(stack, fp, sp) {
this.stack = stack;
this.fp = fp;
this.sp = sp;
Object.seal(this);
}
get pos() {
return this.stack.length;
static empty() {
return new this([], 0, -1);
}
snapshot(args = 0) {
return new EvaluationStack(this.stack.slice(-args));
static restore(snapshot) {
return new this(snapshot.slice(), 0, snapshot.length - 1);
}
restore(bp) {
this.stack.length = bp;
return this.pop();
isEmpty() {
return this.sp === -1;
}
set(pos, value) {
this.stack[pos] = value;
push(value) {
this.stack[++this.sp] = value;
}
get(pos) {
return this.stack[pos];
dup(position = this.sp) {
this.push(this.stack[position]);
}
push(value) {
this.stack.push(value);
pop(n = 1) {
let top = this.stack[this.sp];
this.sp -= n;
return top;
}
dup() {
this.push(this.fromTop(0));
peek() {
return this.stack[this.sp];
}
pop() {
return this.stack.pop();
fromBase(offset) {
return this.stack[this.fp - offset];
}
top() {
return this.stack[this.stack.length - 1];
fromTop(offset) {
return this.stack[this.sp - offset];
}
fromTop(pos) {
return this.stack[this.stack.length - 1 - pos];
capture(items) {
let end = this.sp + 1;
let start = end - items;
return this.stack.slice(start, end);
}
slice(count) {
return this.stack.slice(this.stack.length - count);
toArray() {
return this.stack.slice(this.fp, this.sp + 1);
}
}
exports.EvaluationStack = EvaluationStack;
let i = 0;
class VM {

@@ -75,8 +81,13 @@ constructor(env, scope, dynamicScope, elementStack) {

this.scopeStack = new _util.Stack();
this.bp = 0;
this.updatingOpcodeStack = new _util.Stack();
this.cacheGroups = new _util.Stack();
this.listBlockStack = new _util.Stack();
this.frames = [];
this.evalStack = new EvaluationStack();
this.stack = EvaluationStack.empty();
/** Registers **/
this.pc = -1;
this.ra = -1;
this.s0 = null;
this.s1 = null;
this.t0 = null;
this.t1 = null;
this.env = env;

@@ -88,14 +99,70 @@ this.constants = env.constants;

}
get fp() {
return this.stack.fp;
}
set fp(fp) {
this.stack.fp = fp;
}
get sp() {
return this.stack.sp;
}
set sp(sp) {
this.stack.sp = sp;
}
// Fetch a value from a register onto the stack
fetch(register) {
this.stack.push(this[_opcodes.Register[register]]);
}
// Load a value from the stack into a register
load(register) {
this[_opcodes.Register[register]] = this.stack.pop();
}
// Fetch a value from a register
fetchValue(register) {
return this[_opcodes.Register[register]];
}
// Load a value into a register
loadValue(register, value) {
this[_opcodes.Register[register]] = value;
}
// Start a new frame and save $ra and $fp on the stack
pushFrame() {
this.stack.push(this.ra);
this.stack.push(this.fp);
this.fp = this.sp - 1;
// this.fp = this.sp + 1;
}
// Restore $ra, $sp and $fp
popFrame() {
this.sp = this.fp - 1;
this.ra = this.stack.fromBase(0);
this.fp = this.stack.fromBase(-1);
}
// Jump to an address in `program`
goto(pc) {
this.pc = pc;
}
// Save $pc into $ra, then jump to a new address in `program` (jal in MIPS)
call(pc) {
this.ra = this.pc;
this.pc = pc;
}
// Put a specific `program` address in $ra
returnTo(ra) {
this.ra = ra;
}
// Return to the `program` address stored in $ra
return() {
if (this.pc === this.ra + 4) {
throw "ZOMG";
}
this.pc = this.ra;
}
static initial(env, self, dynamicScope, elementStack, program) {
let scope = _environment.Scope.root(self, program.symbolTable.symbols.length);
let vm = new VM(env, scope, dynamicScope, elementStack);
vm.prepare(program.start);
vm.pc = program.start;
vm.updatingOpcodeStack.push(new _util.LinkedList());
return vm;
}
get ip() {
return this.frames[this.frames.length - 1];
}
set ip(val) {
this.frames[this.frames.length - 1] = val;
}
capture(args) {

@@ -106,27 +173,5 @@ return {

dynamicScope: this.dynamicScope(),
stack: this.evalStack.snapshot(args),
bp: this.bp
stack: this.stack.capture(args)
};
}
reserveLocals(size) {
let { evalStack: stack, bp } = this;
stack.push(bp);
this.bp = stack.pos;
for (let i = 0; i < size; i++) {
stack.push(null);
}
}
releaseLocals() {
let { evalStack: stack, bp } = this;
this.bp = stack.restore(bp);
}
setLocal(position, value) {
this.evalStack.set(this.bp + position, value);
}
getLocal(position) {
return this.evalStack.get(this.bp + position);
}
goto(ip) {
this.ip = ip;
}
beginCacheGroup() {

@@ -153,22 +198,19 @@ this.cacheGroups.push(this.updating().tail());

}
enter(args, start, end) {
enter(args) {
let updating = new _util.LinkedList();
let state = this.capture(args);
let tracker = this.stack().pushUpdatableBlock();
let tryOpcode = new _update.TryOpcode(start, end, state, tracker, updating);
let ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
let tracker = this.elements().pushUpdatableBlock();
let tryOpcode = new _update.TryOpcode(this.pc, state, tracker, updating);
this.didEnter(tryOpcode);
}
iterate(start, end, memo, value, updating = new _util.LinkedList()) {
let stack = this.evalStack;
iterate(memo, value, updating = new _util.LinkedList()) {
let stack = this.stack;
stack.push(value);
stack.push(memo);
let state = this.capture(2);
let tracker = this.stack().pushUpdatableBlock();
let ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
return new _update.TryOpcode(start, end, state, tracker, updating);
let tracker = this.elements().pushUpdatableBlock();
// let ip = this.ip;
// this.ip = end + 4;
// this.frames.push(ip);
return new _update.TryOpcode(this.pc, state, tracker, updating);
}

@@ -179,8 +221,8 @@ enterItem(key, opcode) {

}
enterList(start, end) {
enterList(start) {
let updating = new _util.LinkedList();
let state = this.capture(1);
let tracker = this.stack().pushBlockList(updating);
let artifacts = this.evalStack.top().artifacts;
let opcode = new _update.ListBlockOpcode(start, end, state, tracker, updating, artifacts);
let state = this.capture(0);
let tracker = this.elements().pushBlockList(updating);
let artifacts = this.stack.peek().artifacts;
let opcode = new _update.ListBlockOpcode(start, state, tracker, updating, artifacts);
this.listBlockStack.push(opcode);

@@ -194,17 +236,9 @@ this.didEnter(opcode);

exit() {
this.frames.pop();
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
let parent = this.updating().tail();
parent.didInitializeChildren();
}
this.elements().popBlock();
this.updatingOpcodeStack.pop();
let parent = this.updating().tail();
parent.didInitializeChildren();
}
exitList() {
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
let parent = this.updating().tail();
parent.didInitializeChildren();
}
this.exit();
this.listBlockStack.pop();

@@ -221,3 +255,3 @@ }

}
stack() {
elements() {
return this.elementStack;

@@ -231,8 +265,2 @@ }

}
pushFrame(block) {
this.frames.push(block.start);
}
pushEvalFrame(start) {
this.frames.push(start);
}
pushChildScope() {

@@ -263,3 +291,3 @@ this.scopeStack.push(this.scope().child());

newDestroyable(d) {
this.stack().newDestroyable(d);
this.elements().newDestroyable(d);
}

@@ -274,10 +302,5 @@ /// SCOPE HELPERS

/// EXECUTION
resume(start, stack, bp) {
return this.execute(start, vm => {
vm.evalStack = stack;
vm.bp = bp;
});
}
execute(start, initialize) {
this.prepare(start, initialize);
this.pc = start;
if (initialize) initialize(this);
let result;

@@ -290,12 +313,8 @@ while (true) {

}
prepare(start, initialize) {
let { elementStack, frames, updatingOpcodeStack } = this;
elementStack.pushSimpleBlock();
updatingOpcodeStack.push(new _util.LinkedList());
frames.push(start);
if (initialize) initialize(this);
}
next() {
let { env, updatingOpcodeStack, elementStack } = this;
let opcode;
if (i++ > 100000) {
throw "zomg";
}
if (opcode = this.nextStatement(env)) {

@@ -310,13 +329,10 @@ _opcodes.APPEND_OPCODES.evaluate(this, opcode, opcode.type);

}
return() {
this.frames.pop();
}
nextStatement(env) {
if (this.frames.length === 0) {
let { pc } = this;
if (pc === -1) {
return null;
}
let { ip } = this;
let program = env.program;
this.ip += 4;
return program.opcode(ip);
this.pc += 4;
return program.opcode(pc);
}

@@ -326,11 +342,2 @@ evaluateOpcode(opcode) {

}
invoke(compiled) {
this.pushFrame(compiled);
}
// Make sure you have opcodes that push and pop a scope around this opcode
// if you need to change the scope.
invokeBlock(block) {
let compiled = block.compileStatic(this.env);
this.invoke(compiled);
}
bindDynamicScope(names) {

@@ -340,3 +347,3 @@ let scope = this.dynamicScope();

let name = this.constants.getString(names[i]);
scope.set(name, this.evalStack.pop());
scope.set(name, this.stack.pop());
}

@@ -346,2 +353,2 @@ }

exports.default = VM;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBSyxBQUFxQyxBQUFNLEFBQWdCLEFBQUM7O0FBRTFFLEFBQU8sQUFBdUIsQUFBSyxBQUFFLEFBQVUsQUFBRSxBQUFTLEFBQVUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUNsRyxBQUFPLEFBQTRELEFBQVksQUFBRSxBQUFNLEFBQW9CLEFBQUM7O0FBRzVHLEFBQU8sQUFBRSxBQUFXLEFBQUUsQUFBdUIsQUFBRSxBQUFlLEFBQUUsQUFBTSxBQUF3QixBQUFDOztBQUMvRixBQUFPLEFBQVcsQUFBZSxBQUFFLEFBQVMsQUFBZSxBQUFNLEFBQVUsQUFBQzs7QUFDNUUsQUFBTyxBQUFZLEFBQU0sQUFBaUIsQUFBQzs7OztBQUUzQyxBQUFPLEFBQ0wsQUFBYyxBQUVmLEFBQU0sQUFBWSxBQUFDLEFBY3BCLEFBQU07Ozs7O0FBQ0osZ0JBQW9CLFFBQWtCLEFBQUU7QUFBcEIsYUFBSyxRQUFMLEFBQUssQUFBZTtBQUN0QyxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3BCO0FBQUM7QUFFRCxRQUFJLEFBQUc7QUFDTCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFNLEFBQUMsQUFDM0I7QUFBQztBQUVELEFBQVEsYUFBQyxBQUFJLE9BQUcsQUFBQztBQUNmLEFBQU0sZUFBQyxJQUFJLEFBQWUsZ0JBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLE1BQUMsQ0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3REO0FBQUM7QUFFRCxBQUFPLFlBQUMsQUFBVTtBQUNoQixBQUFJLGFBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFFLEFBQUM7QUFDdkIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFHLEFBQVUsQUFBQyxBQUM1QjtBQUFDO0FBRUQsQUFBRyxRQUFD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LEFBQVEsV0FBRyxBQUFLLE1BQUMsQUFBYSxjQUFDLEFBQUksS0FBQyxBQUFHLEFBQUMsQUFBQztBQUM3QyxBQUFJLGFBQUMsQUFBTSxPQUFDLEFBQVEsQUFBQyxBQUFDLEFBQ3hCO0FBQUM7QUFFRCxBQUFnQixxQkFBQyxBQUF1QjtBQUN0QyxZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBWSxBQUFFLEFBQUM7QUFFaEMsQUFBRyxhQUFDLElBQUksQUFBQyxJQUFDLEFBQUssTUFBQyxBQUFNLFNBQUcsQUFBQyxHQUFFLEFBQUMsS0FBRSxBQUFDLEdBQUUsQUFBQyxBQUFFLEtBQUUsQUFBQztBQUN0QyxnQkFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSyxNQUFDLEFBQUMsQUFBQyxBQUFDLEFBQUM7QUFDOUMsQUFBSyxrQkFBQyxBQUFHLElBQUMsQUFBSSxNQUFFLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBRyxBQUFrQyxBQUFDLEFBQUMsQUFDeEU7QUFBQyxBQUNIO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjb3BlLCBEeW5hbWljU2NvcGUsIEVudmlyb25tZW50LCBPcGNvZGUgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBFbGVtZW50U3RhY2sgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IE9wdGlvbiwgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaXN0U2xpY2UsIE9wYXF1ZSwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBSZWZlcmVuY2VJdGVyYXRvciwgUGF0aFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSwgY29tYmluZVNsaWNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IENvbXBpbGVkRHluYW1pY1Byb2dyYW0sIE9wU2xpY2UgfSBmcm9tICcuLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9zY2FubmVyJztcbmltcG9ydCB7IExhYmVsT3Bjb2RlLCBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSwgRGlkTW9kaWZ5T3Bjb2RlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy92bSc7XG5pbXBvcnQgeyBWTVN0YXRlLCBMaXN0QmxvY2tPcGNvZGUsIFRyeU9wY29kZSwgQmxvY2tPcGNvZGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5pbXBvcnQgUmVuZGVyUmVzdWx0IGZyb20gJy4vcmVuZGVyLXJlc3VsdCc7XG5cbmltcG9ydCB7XG4gIEFQUEVORF9PUENPREVTLFxuICBVcGRhdGluZ09wY29kZVxufSBmcm9tICcuLi9vcGNvZGVzJztcblxuaW1wb3J0IHtcbiAgQ29uc3RhbnRzLFxuICBDb25zdGFudFN0cmluZ1xufSBmcm9tICcuLi9lbnZpcm9ubWVudC9jb25zdGFudHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1ZNIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgZHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZTtcbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT47XG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRpb25TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhY2s6IE9wYXF1ZVtdID0gW10pIHtcbiAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgfVxuXG4gIGdldCBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2subGVuZ3RoO1xuICB9XG5cbiAgc25hcHNob3QoYXJncyA9IDApOiBFdmFsdWF0aW9uU3RhY2sge1xuICAgIHJldHVybiBuZXcgRXZhbHVhdGlvblN0YWNrKHRoaXMuc3RhY2suc2xpY2UoLWFyZ3MpKTtcbiAgfVxuXG4gIHJlc3RvcmUoYnA6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhpcy5zdGFjay5sZW5ndGggPSBicDtcbiAgICByZXR1cm4gdGhpcy5wb3A8bnVtYmVyPigpO1xuICB9XG5cbiAgc2V0KHBvczogbnVtYmVyLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgdGhpcy5zdGFja1twb3NdID0gdmFsdWU7XG4gIH1cblxuICBnZXQocG9zOiBudW1iZXIpOiBPcGFxdWUge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3Bvc107XG4gIH1cblxuICBwdXNoKHZhbHVlOiBPcGFxdWUpOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godmFsdWUpO1xuICB9XG5cbiAgZHVwKCk6IHZvaWQge1xuICAgIHRoaXMucHVzaCh0aGlzLmZyb21Ub3AoMCkpO1xuICB9XG5cbiAgcG9wPFQ+KCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpIGFzIFQ7XG4gIH1cblxuICB0b3A8VD4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXSBhcyBUO1xuICB9XG5cbiAgZnJvbVRvcDxUPihwb3M6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMSAtIHBvc10gYXMgVDtcbiAgfVxuXG4gIHNsaWNlPFQgZXh0ZW5kcyBPcGFxdWVbXT4oY291bnQ6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNsaWNlKHRoaXMuc3RhY2subGVuZ3RoIC0gY291bnQpIGFzIFQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSXRlcmF0b3JSZXN1bHQ8VD4gPSB7XG4gIGRvbmU6IGZhbHNlO1xuICB2YWx1ZTogbnVsbDtcbn0gfCB7XG4gIGRvbmU6IHRydWU7XG4gIHZhbHVlOiBUO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVk0gaW1wbGVtZW50cyBQdWJsaWNWTSB7XG4gIHByaXZhdGUgZHluYW1pY1Njb3BlU3RhY2sgPSBuZXcgU3RhY2s8RHluYW1pY1Njb3BlPigpO1xuICBwcml2YXRlIHNjb3BlU3RhY2sgPSBuZXcgU3RhY2s8U2NvcGU+KCk7XG4gIHByaXZhdGUgYnAgPSAwO1xuICBwdWJsaWMgdXBkYXRpbmdPcGNvZGVTdGFjayA9IG5ldyBTdGFjazxMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPj4oKTtcbiAgcHVibGljIGNhY2hlR3JvdXBzID0gbmV3IFN0YWNrPE9wdGlvbjxVcGRhdGluZ09wY29kZT4+KCk7XG4gIHB1YmxpYyBsaXN0QmxvY2tTdGFjayA9IG5ldyBTdGFjazxMaXN0QmxvY2tPcGNvZGU+KCk7XG4gIHB1YmxpYyBmcmFtZXM6IG51bWJlcltdID0gW107XG4gIHB1YmxpYyBjb25zdGFudHM6IENvbnN0YW50cztcbiAgcHVibGljIGV2YWxTdGFjayA9IG5ldyBFdmFsdWF0aW9uU3RhY2soKTtcblxuICBzdGF0aWMgaW5pdGlhbChcbiAgICBlbnY6IEVudmlyb25tZW50LFxuICAgIHNlbGY6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgICBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjayxcbiAgICBwcm9ncmFtOiBDb21waWxlZER5bmFtaWNQcm9ncmFtXG4gICkge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnJvb3Qoc2VsZiwgcHJvZ3JhbS5zeW1ib2xUYWJsZS5zeW1ib2xzLmxlbmd0aCk7XG4gICAgbGV0IHZtID0gbmV3IFZNKGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgZWxlbWVudFN0YWNrKTtcbiAgICB2bS5wcmVwYXJlKHByb2dyYW0uc3RhcnQpO1xuICAgIHJldHVybiB2bTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbnY6IEVudmlyb25tZW50LFxuICAgIHNjb3BlOiBTY29wZSxcbiAgICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgICBwcml2YXRlIGVsZW1lbnRTdGFjazogRWxlbWVudFN0YWNrLFxuICApIHtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLmNvbnN0YW50cyA9IGVudi5jb25zdGFudHM7XG4gICAgdGhpcy5lbGVtZW50U3RhY2sgPSBlbGVtZW50U3RhY2s7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goc2NvcGUpO1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucHVzaChkeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFtZXMubGVuZ3RoIC0gMV0hO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgaXAodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lcy5sZW5ndGggLSAxXSA9IHZhbDtcbiAgfVxuXG4gIGNhcHR1cmUoYXJnczogbnVtYmVyKTogVk1TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICBzY29wZTogdGhpcy5zY29wZSgpLFxuICAgICAgZHluYW1pY1Njb3BlOiB0aGlzLmR5bmFtaWNTY29wZSgpLFxuICAgICAgc3RhY2s6IHRoaXMuZXZhbFN0YWNrLnNuYXBzaG90KGFyZ3MpLFxuICAgICAgYnA6IHRoaXMuYnBcbiAgICB9O1xuICB9XG5cbiAgcmVzZXJ2ZUxvY2FscyhzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgeyBldmFsU3RhY2s6IHN0YWNrLCBicCB9ID0gdGhpcztcblxuICAgIHN0YWNrLnB1c2goYnApO1xuICAgIHRoaXMuYnAgPSBzdGFjay5wb3M7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8c2l6ZTsgaSsrKSB7XG4gICAgICBzdGFjay5wdXNoKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHJlbGVhc2VMb2NhbHMoKSB7XG4gICAgbGV0IHsgZXZhbFN0YWNrOiBzdGFjaywgYnAgfSA9IHRoaXM7XG4gICAgdGhpcy5icCA9IHN0YWNrLnJlc3RvcmUoYnApO1xuICB9XG5cbiAgc2V0TG9jYWwocG9zaXRpb246IG51bWJlciwgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHRoaXMuZXZhbFN0YWNrLnNldCh0aGlzLmJwICsgcG9zaXRpb24sIHZhbHVlKTtcbiAgfVxuXG4gIGdldExvY2FsPFQ+KHBvc2l0aW9uOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5ldmFsU3RhY2suZ2V0KHRoaXMuYnAgKyBwb3NpdGlvbikgYXMgVDtcbiAgfVxuXG4gIGdvdG8oaXA6IG51bWJlcikge1xuICAgIHRoaXMuaXAgPSBpcDtcbiAgfVxuXG4gIGJlZ2luQ2FjaGVHcm91cCgpIHtcbiAgICB0aGlzLmNhY2hlR3JvdXBzLnB1c2godGhpcy51cGRhdGluZygpLnRhaWwoKSk7XG4gIH1cblxuICBjb21taXRDYWNoZUdyb3VwKCkge1xuICAgIC8vICAgICAgICBKdW1wSWZOb3RNb2RpZmllZChFTkQpXG4gICAgLy8gICAgICAgIChoZWFkKVxuICAgIC8vICAgICAgICAoLi4uLilcbiAgICAvLyAgICAgICAgKHRhaWwpXG4gICAgLy8gICAgICAgIERpZE1vZGlmeVxuICAgIC8vIEVORDogICBOb29wXG5cbiAgICBsZXQgRU5EID0gbmV3IExhYmVsT3Bjb2RlKFwiRU5EXCIpO1xuXG4gICAgbGV0IG9wY29kZXMgPSB0aGlzLnVwZGF0aW5nKCk7XG4gICAgbGV0IG1hcmtlciA9IHRoaXMuY2FjaGVHcm91cHMucG9wKCk7XG4gICAgbGV0IGhlYWQgPSBtYXJrZXIgPyBvcGNvZGVzLm5leHROb2RlKG1hcmtlcikgOiBvcGNvZGVzLmhlYWQoKTtcbiAgICBsZXQgdGFpbCA9IG9wY29kZXMudGFpbCgpO1xuICAgIGxldCB0YWcgPSBjb21iaW5lU2xpY2UobmV3IExpc3RTbGljZShoZWFkLCB0YWlsKSk7XG5cbiAgICBsZXQgZ3VhcmQgPSBuZXcgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUodGFnLCBFTkQpO1xuXG4gICAgb3Bjb2Rlcy5pbnNlcnRCZWZvcmUoZ3VhcmQsIGhlYWQpO1xuICAgIG9wY29kZXMuYXBwZW5kKG5ldyBEaWRNb2RpZnlPcGNvZGUoZ3VhcmQpKTtcbiAgICBvcGNvZGVzLmFwcGVuZChFTkQpO1xuICB9XG5cbiAgZW50ZXIoYXJnczogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKGFyZ3MpO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuXG4gICAgbGV0IHRyeU9wY29kZSA9IG5ldyBUcnlPcGNvZGUoc3RhcnQsIGVuZCwgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nKTtcblxuICAgIGxldCBpcCA9IHRoaXMuaXA7XG4gICAgdGhpcy5pcCA9IGVuZCArIDQ7XG4gICAgdGhpcy5mcmFtZXMucHVzaChpcCk7XG5cbiAgICB0aGlzLmRpZEVudGVyKHRyeU9wY29kZSk7XG4gIH1cblxuICBpdGVyYXRlKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBtZW1vOiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIHZhbHVlOiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpOiBUcnlPcGNvZGUge1xuICAgIGxldCBzdGFjayA9IHRoaXMuZXZhbFN0YWNrO1xuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgIHN0YWNrLnB1c2gobWVtbyk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoMik7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLnN0YWNrKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG5cbiAgICBsZXQgaXAgPSB0aGlzLmlwO1xuICAgIHRoaXMuaXAgPSBlbmQgKyA0O1xuICAgIHRoaXMuZnJhbWVzLnB1c2goaXApO1xuXG4gICAgcmV0dXJuIG5ldyBUcnlPcGNvZGUoc3RhcnQsIGVuZCwgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nKTtcbiAgfVxuXG4gIGVudGVySXRlbShrZXk6IHN0cmluZywgb3Bjb2RlOiBUcnlPcGNvZGUpIHtcbiAgICB0aGlzLmxpc3RCbG9jaygpLm1hcFtrZXldID0gb3Bjb2RlO1xuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlKTtcbiAgfVxuXG4gIGVudGVyTGlzdChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PEJsb2NrT3Bjb2RlPigpO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKDEpO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hCbG9ja0xpc3QodXBkYXRpbmcpO1xuICAgIGxldCBhcnRpZmFjdHMgPSB0aGlzLmV2YWxTdGFjay50b3A8UmVmZXJlbmNlSXRlcmF0b3I+KCkuYXJ0aWZhY3RzO1xuXG4gICAgbGV0IG9wY29kZSA9IG5ldyBMaXN0QmxvY2tPcGNvZGUoc3RhcnQsIGVuZCwgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nLCBhcnRpZmFjdHMpO1xuXG4gICAgdGhpcy5saXN0QmxvY2tTdGFjay5wdXNoKG9wY29kZSk7XG5cbiAgICB0aGlzLmRpZEVudGVyKG9wY29kZSk7XG4gIH1cblxuICBwcml2YXRlIGRpZEVudGVyKG9wY29kZTogQmxvY2tPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaChvcGNvZGUuY2hpbGRyZW4pO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmZyYW1lcy5wb3AoKTtcblxuICAgIGlmICh0aGlzLmZyYW1lcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3RhY2soKS5wb3BCbG9jaygpO1xuICAgICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpO1xuXG4gICAgICBsZXQgcGFyZW50ID0gdGhpcy51cGRhdGluZygpLnRhaWwoKSBhcyBCbG9ja09wY29kZTtcblxuICAgICAgcGFyZW50LmRpZEluaXRpYWxpemVDaGlsZHJlbigpO1xuICAgIH1cbiAgfVxuXG4gIGV4aXRMaXN0KCkge1xuICAgIGlmICh0aGlzLmZyYW1lcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3RhY2soKS5wb3BCbG9jaygpO1xuICAgICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpO1xuXG4gICAgICBsZXQgcGFyZW50ID0gdGhpcy51cGRhdGluZygpLnRhaWwoKSBhcyBCbG9ja09wY29kZTtcblxuICAgICAgcGFyZW50LmRpZEluaXRpYWxpemVDaGlsZHJlbigpO1xuICAgIH1cblxuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucG9wKCk7XG4gIH1cblxuICB1cGRhdGVXaXRoKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nKCkuYXBwZW5kKG9wY29kZSk7XG4gIH1cblxuICBsaXN0QmxvY2soKTogTGlzdEJsb2NrT3Bjb2RlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMubGlzdEJsb2NrU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIGEgbGlzdCBibG9jaycpO1xuICB9XG5cbiAgdXBkYXRpbmcoKTogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4ge1xuICAgIHJldHVybiBleHBlY3QodGhpcy51cGRhdGluZ09wY29kZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCB1cGRhdGluZyBvcGNvZGUgb24gdGhlIHVwZGF0aW5nIG9wY29kZSBzdGFjaycpO1xuICB9XG5cbiAgc3RhY2soKTogRWxlbWVudFN0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U3RhY2s7XG4gIH1cblxuICBzY29wZSgpOiBTY29wZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLnNjb3BlU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIHNjb3BlIG9uIHRoZSBzY29wZSBzdGFjaycpO1xuICB9XG5cbiAgZHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBkeW5hbWljIHNjb3BlIG9uIHRoZSBkeW5hbWljIHNjb3BlIHN0YWNrJyk7XG4gIH1cblxuICBwdXNoRnJhbWUoYmxvY2s6IE9wU2xpY2UpIHtcbiAgICB0aGlzLmZyYW1lcy5wdXNoKGJsb2NrLnN0YXJ0KTtcbiAgfVxuXG4gIHB1c2hFdmFsRnJhbWUoc3RhcnQ6IG51bWJlcikge1xuICAgIHRoaXMuZnJhbWVzLnB1c2goc3RhcnQpO1xuICB9XG5cbiAgcHVzaENoaWxkU2NvcGUoKSB7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2godGhpcy5zY29wZSgpLmNoaWxkKCkpO1xuICB9XG5cbiAgcHVzaENhbGxlclNjb3BlKGNoaWxkU2NvcGUgPSBmYWxzZSkge1xuICAgIGxldCBjYWxsZXJTY29wZSA9IGV4cGVjdCh0aGlzLnNjb3BlKCkuZ2V0Q2FsbGVyU2NvcGUoKSwgJ3B1c2hDYWxsZXJTY29wZSBpcyBjYWxsZWQgd2hlbiBhIGNhbGxlciBzY29wZSBpcyBwcmVzZW50Jyk7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goY2hpbGRTY29wZSA/IGNhbGxlclNjb3BlLmNoaWxkKCkgOiBjYWxsZXJTY29wZSk7XG4gIH1cblxuICBwdXNoRHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZSB7XG4gICAgbGV0IGNoaWxkID0gdGhpcy5keW5hbWljU2NvcGUoKS5jaGlsZCgpO1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucHVzaChjaGlsZCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHVzaFJvb3RTY29wZShzaXplOiBudW1iZXIsIGJpbmRDYWxsZXI6IGJvb2xlYW4pOiBTY29wZSB7XG4gICAgbGV0IHNjb3BlID0gU2NvcGUuc2l6ZWQoc2l6ZSk7XG4gICAgaWYgKGJpbmRDYWxsZXIpIHNjb3BlLmJpbmRDYWxsZXJTY29wZSh0aGlzLnNjb3BlKCkpO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICBwb3BTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucG9wKCk7XG4gIH1cblxuICBwb3BEeW5hbWljU2NvcGUoKSB7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKSB7XG4gICAgdGhpcy5zdGFjaygpLm5ld0Rlc3Ryb3lhYmxlKGQpO1xuICB9XG5cbiAgLy8vIFNDT1BFIEhFTFBFUlNcblxuICBnZXRTZWxmKCk6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTZWxmKCk7XG4gIH1cblxuICByZWZlcmVuY2VGb3JTeW1ib2woc3ltYm9sOiBudW1iZXIpOiBQYXRoUmVmZXJlbmNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNjb3BlKCkuZ2V0U3ltYm9sKHN5bWJvbCk7XG4gIH1cblxuICAvLy8gRVhFQ1VUSU9OXG5cbiAgcmVzdW1lKHN0YXJ0OiBudW1iZXIsIHN0YWNrOiBFdmFsdWF0aW9uU3RhY2ssIGJwOiBudW1iZXIpOiBSZW5kZXJSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoc3RhcnQsIHZtID0+IHtcbiAgICAgIHZtLmV2YWxTdGFjayA9IHN0YWNrO1xuICAgICAgdm0uYnAgPSBicDtcbiAgICB9KTtcbiAgfVxuXG4gIGV4ZWN1dGUoc3RhcnQ6IG51bWJlciwgaW5pdGlhbGl6ZT86ICh2bTogVk0pID0+IHZvaWQpOiBSZW5kZXJSZXN1bHQge1xuICAgIHRoaXMucHJlcGFyZShzdGFydCwgaW5pdGlhbGl6ZSk7XG4gICAgbGV0IHJlc3VsdDogSXRlcmF0b3JSZXN1bHQ8UmVuZGVyUmVzdWx0PjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm5leHQoKTtcbiAgICAgIGlmIChyZXN1bHQuZG9uZSkgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZSBhcyBSZW5kZXJSZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmUoc3RhcnQ6IG51bWJlciwgaW5pdGlhbGl6ZT86ICh2bTogVk0pID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgeyBlbGVtZW50U3RhY2ssIGZyYW1lcywgdXBkYXRpbmdPcGNvZGVTdGFjayB9ID0gdGhpcztcblxuICAgIGVsZW1lbnRTdGFjay5wdXNoU2ltcGxlQmxvY2soKTtcblxuICAgIHVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaChuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKSk7XG5cbiAgICBmcmFtZXMucHVzaChzdGFydCk7XG5cbiAgICBpZiAoaW5pdGlhbGl6ZSkgaW5pdGlhbGl6ZSh0aGlzKTtcbiAgfVxuXG4gIG5leHQoKTogSXRlcmF0b3JSZXN1bHQ8UmVuZGVyUmVzdWx0PiB7XG4gICAgbGV0IHsgZW52LCB1cGRhdGluZ09wY29kZVN0YWNrLCBlbGVtZW50U3RhY2sgfSA9IHRoaXM7XG4gICAgbGV0IG9wY29kZTogT3B0aW9uPE9wY29kZT47XG5cbiAgICBpZiAob3Bjb2RlID0gdGhpcy5uZXh0U3RhdGVtZW50KGVudikpIHtcbiAgICAgIEFQUEVORF9PUENPREVTLmV2YWx1YXRlKHRoaXMsIG9wY29kZSwgb3Bjb2RlLnR5cGUpO1xuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBudWxsIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbmU6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3IFJlbmRlclJlc3VsdChcbiAgICAgICAgZW52LFxuICAgICAgICBleHBlY3QodXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKSwgJ3RoZXJlIHNob3VsZCBiZSBhIGZpbmFsIHVwZGF0aW5nIG9wY29kZSBzdGFjaycpLFxuICAgICAgICBlbGVtZW50U3RhY2sucG9wQmxvY2soKVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICByZXR1cm4oKTogdm9pZCB7XG4gICAgdGhpcy5mcmFtZXMucG9wKCk7XG4gIH1cblxuICBwcml2YXRlIG5leHRTdGF0ZW1lbnQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxPcGNvZGU+IHtcbiAgICBpZiAodGhpcy5mcmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgeyBpcCB9ID0gdGhpcztcbiAgICBsZXQgcHJvZ3JhbSA9IGVudi5wcm9ncmFtO1xuICAgIHRoaXMuaXAgKz0gNDtcbiAgICByZXR1cm4gcHJvZ3JhbS5vcGNvZGUoaXApO1xuICB9XG5cbiAgZXZhbHVhdGVPcGNvZGUob3Bjb2RlOiBPcGNvZGUpIHtcbiAgICBBUFBFTkRfT1BDT0RFUy5ldmFsdWF0ZSh0aGlzLCBvcGNvZGUsIG9wY29kZS50eXBlKTtcbiAgfVxuXG4gIGludm9rZShjb21waWxlZDogT3BTbGljZSkge1xuICAgIHRoaXMucHVzaEZyYW1lKGNvbXBpbGVkKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB5b3UgaGF2ZSBvcGNvZGVzIHRoYXQgcHVzaCBhbmQgcG9wIGEgc2NvcGUgYXJvdW5kIHRoaXMgb3Bjb2RlXG4gIC8vIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgc2NvcGUuXG4gIGludm9rZUJsb2NrKGJsb2NrOiBUZW1wbGF0ZSkge1xuICAgIGxldCBjb21waWxlZCA9IGJsb2NrLmNvbXBpbGVTdGF0aWModGhpcy5lbnYpO1xuICAgIHRoaXMuaW52b2tlKGNvbXBpbGVkKTtcbiAgfVxuXG4gIGJpbmREeW5hbWljU2NvcGUobmFtZXM6IENvbnN0YW50U3RyaW5nW10pIHtcbiAgICBsZXQgc2NvcGUgPSB0aGlzLmR5bmFtaWNTY29wZSgpO1xuXG4gICAgZm9yKGxldCBpPW5hbWVzLmxlbmd0aCAtIDE7IGk+PTA7IGktLSkge1xuICAgICAgbGV0IG5hbWUgPSB0aGlzLmNvbnN0YW50cy5nZXRTdHJpbmcobmFtZXNbaV0pO1xuICAgICAgc2NvcGUuc2V0KG5hbWUsIHRoaXMuZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCkpO1xuICAgIH1cbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBUSxBQUFFLEFBQU0sQUFBWSxBQUFDOztBQUN0QyxBQUFPLEFBQUUsQUFBSyxBQUFxQyxBQUFNLEFBQWdCLEFBQUM7O0FBRTFFLEFBQU8sQUFBdUIsQUFBSyxBQUFFLEFBQVUsQUFBRSxBQUFTLEFBQWtCLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFDMUcsQUFBTyxBQUE0RCxBQUFZLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUU1RyxBQUFPLEFBQUUsQUFBVyxBQUFFLEFBQXVCLEFBQUUsQUFBZSxBQUFFLEFBQU0sQUFBd0IsQUFBQzs7QUFDL0YsQUFBTyxBQUFXLEFBQWUsQUFBRSxBQUFTLEFBQWUsQUFBTSxBQUFVLEFBQUM7O0FBQzVFLEFBQU8sQUFBWSxBQUFNLEFBQWlCLEFBQUMsQUFFM0MsQUFBTyxBQUNMLEFBQWMsQUFFZixBQUFNLEFBQVksQUFBQyxBQWdCcEIsQUFBTTs7Ozs7OztBQVNKLGdCQUFvQixBQUFlLE9BQVMsQUFBVSxJQUFTLEFBQVU7QUFBckQsYUFBSyxRQUFMLEFBQUssQUFBVTtBQUFTLGFBQUUsS0FBRixBQUFFLEFBQVE7QUFBUyxhQUFFLEtBQUYsQUFBRSxBQUFRO0FBQ3ZFLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDcEI7QUFBQztBQVZELEFBQU0sV0FBQyxBQUFLO0FBQ1YsQUFBTSxlQUFDLElBQUksQUFBSSxLQUFDLEFBQUUsSUFBRSxBQUFDLEdBQUUsQ0FBQyxBQUFDLEFBQUMsQUFBQyxBQUM3QjtBQUFDO0FBRUQsQUFBTSxXQUFDLEFBQU8sUUFBQyxBQUF1QjtBQUNwQyxBQUFNLGVBQUMsSUFBSSxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUssQUFBRSxTQUFFLEFBQUMsR0FBRSxBQUFRLFNBQUMsQUFBTSxTQUFHLEFBQUMs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QyxHQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUM7QUFDdEMsZ0JBQUksQUFBSSxPQUFHLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUssTUFBQyxBQUFDLEFBQUMsQUFBQyxBQUFDO0FBQzlDLEFBQUssa0JBQUMsQUFBRyxJQUFDLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQyxBQUFDLEFBQ3BFO0FBQUMsQUFDSDtBQUFDLEFBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWdpc3RlciB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0IHsgU2NvcGUsIER5bmFtaWNTY29wZSwgRW52aXJvbm1lbnQsIE9wY29kZSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVsZW1lbnRTdGFjayB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgT3B0aW9uLCBEZXN0cm95YWJsZSwgU3RhY2ssIExpbmtlZExpc3QsIExpc3RTbGljZSwgT3BhcXVlLCBhc3NlcnQsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlSXRlcmF0b3IsIFBhdGhSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsIGNvbWJpbmVTbGljZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBDb21waWxlZER5bmFtaWNQcm9ncmFtIH0gZnJvbSAnLi4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCB7IExhYmVsT3Bjb2RlLCBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSwgRGlkTW9kaWZ5T3Bjb2RlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy92bSc7XG5pbXBvcnQgeyBWTVN0YXRlLCBMaXN0QmxvY2tPcGNvZGUsIFRyeU9wY29kZSwgQmxvY2tPcGNvZGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5pbXBvcnQgUmVuZGVyUmVzdWx0IGZyb20gJy4vcmVuZGVyLXJlc3VsdCc7XG5cbmltcG9ydCB7XG4gIEFQUEVORF9PUENPREVTLFxuICBVcGRhdGluZ09wY29kZVxufSBmcm9tICcuLi9vcGNvZGVzJztcblxuaW1wb3J0IHtcbiAgQ29uc3RhbnRzLFxuICBDb25zdGFudFN0cmluZ1xufSBmcm9tICcuLi9lbnZpcm9ubWVudC9jb25zdGFudHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1ZNIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgZHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZTtcbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT47XG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQ2FwdHVyZWRTdGFjayA9IE9wYXF1ZVtdO1xuXG5leHBvcnQgY2xhc3MgRXZhbHVhdGlvblN0YWNrIHtcbiAgc3RhdGljIGVtcHR5KCk6IEV2YWx1YXRpb25TdGFjayB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKFtdLCAwLCAtMSk7XG4gIH1cblxuICBzdGF0aWMgcmVzdG9yZShzbmFwc2hvdDogQ2FwdHVyZWRTdGFjayk6IEV2YWx1YXRpb25TdGFjayB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHNuYXBzaG90LnNsaWNlKCksIDAsIHNuYXBzaG90Lmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGFjazogT3BhcXVlW10sIHB1YmxpYyBmcDogbnVtYmVyLCBwdWJsaWMgc3A6IG51bWJlcikge1xuICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zcCA9PT0gLTE7XG4gIH1cblxuICBwdXNoKHZhbHVlOiBPcGFxdWUpOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrWysrdGhpcy5zcF0gPSB2YWx1ZTtcbiAgfVxuXG4gIGR1cChwb3NpdGlvbiA9IHRoaXMuc3ApOiB2b2lkIHtcbiAgICB0aGlzLnB1c2godGhpcy5zdGFja1twb3NpdGlvbl0pO1xuICB9XG5cbiAgcG9wPFQ+KG4gPSAxKTogVCB7XG4gICAgbGV0IHRvcCA9IHRoaXMuc3RhY2tbdGhpcy5zcF0gYXMgVDtcbiAgICB0aGlzLnNwIC09IG47XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuXG4gIHBlZWs8VD4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zcF0gYXMgVDtcbiAgfVxuXG4gIGZyb21CYXNlPFQ+KG9mZnNldDogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5mcCAtIG9mZnNldF0gYXMgVDtcbiAgfVxuXG4gIGZyb21Ub3A8VD4ob2Zmc2V0OiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnNwIC0gb2Zmc2V0XSBhcyBUO1xuICB9XG5cbiAgY2FwdHVyZShpdGVtczogbnVtYmVyKTogQ2FwdHVyZWRTdGFjayB7XG4gICAgbGV0IGVuZCA9IHRoaXMuc3AgKyAxO1xuICAgIGxldCBzdGFydCA9IGVuZCAtIGl0ZW1zO1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZSh0aGlzLmZwLCB0aGlzLnNwICsgMSk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSXRlcmF0b3JSZXN1bHQ8VD4gPSB7XG4gIGRvbmU6IGZhbHNlO1xuICB2YWx1ZTogbnVsbDtcbn0gfCB7XG4gIGRvbmU6IHRydWU7XG4gIHZhbHVlOiBUO1xufTtcblxubGV0IGkgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWTSBpbXBsZW1lbnRzIFB1YmxpY1ZNIHtcbiAgcHJpdmF0ZSBkeW5hbWljU2NvcGVTdGFjayA9IG5ldyBTdGFjazxEeW5hbWljU2NvcGU+KCk7XG4gIHByaXZhdGUgc2NvcGVTdGFjayA9IG5ldyBTdGFjazxTY29wZT4oKTtcbiAgcHVibGljIHVwZGF0aW5nT3Bjb2RlU3RhY2sgPSBuZXcgU3RhY2s8TGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4+KCk7XG4gIHB1YmxpYyBjYWNoZUdyb3VwcyA9IG5ldyBTdGFjazxPcHRpb248VXBkYXRpbmdPcGNvZGU+PigpO1xuICBwdWJsaWMgbGlzdEJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8TGlzdEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG5cbiAgcHVibGljIHN0YWNrID0gRXZhbHVhdGlvblN0YWNrLmVtcHR5KCk7XG5cbiAgLyoqIFJlZ2lzdGVycyAqKi9cblxuICBwcml2YXRlIHBjID0gLTE7XG4gIHByaXZhdGUgcmEgPSAtMTtcblxuICBwcml2YXRlIGdldCBmcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLmZwO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgZnAoZnA6IG51bWJlcikge1xuICAgIHRoaXMuc3RhY2suZnAgPSBmcDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc3A7XG4gIH1cblxuICBwcml2YXRlIHNldCBzcChzcDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdGFjay5zcCA9IHNwO1xuICB9XG5cbiAgcHVibGljIHMwOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgczE6IGFueSA9IG51bGw7XG4gIHB1YmxpYyB0MDogYW55ID0gbnVsbDtcbiAgcHVibGljIHQxOiBhbnkgPSBudWxsO1xuXG4gIC8vIEZldGNoIGEgdmFsdWUgZnJvbSBhIHJlZ2lzdGVyIG9udG8gdGhlIHN0YWNrXG4gIGZldGNoKHJlZ2lzdGVyOiBSZWdpc3Rlcikge1xuICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzW1JlZ2lzdGVyW3JlZ2lzdGVyXV0pO1xuICB9XG5cbiAgLy8gTG9hZCBhIHZhbHVlIGZyb20gdGhlIHN0YWNrIGludG8gYSByZWdpc3RlclxuICBsb2FkKHJlZ2lzdGVyOiBSZWdpc3Rlcikge1xuICAgIHRoaXNbUmVnaXN0ZXJbcmVnaXN0ZXJdXSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gIH1cblxuICAvLyBGZXRjaCBhIHZhbHVlIGZyb20gYSByZWdpc3RlclxuICBmZXRjaFZhbHVlPFQ+KHJlZ2lzdGVyOiBSZWdpc3Rlcik6IFQge1xuICAgIHJldHVybiB0aGlzW1JlZ2lzdGVyW3JlZ2lzdGVyXV07XG4gIH1cblxuICAvLyBMb2FkIGEgdmFsdWUgaW50byBhIHJlZ2lzdGVyXG4gIGxvYWRWYWx1ZTxUPihyZWdpc3RlcjogUmVnaXN0ZXIsIHZhbHVlOiBUKSB7XG4gICAgdGhpc1tSZWdpc3RlcltyZWdpc3Rlcl1dID0gdmFsdWU7XG4gIH1cblxuICAvLyBTdGFydCBhIG5ldyBmcmFtZSBhbmQgc2F2ZSAkcmEgYW5kICRmcCBvbiB0aGUgc3RhY2tcbiAgcHVzaEZyYW1lKCkge1xuICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLnJhKTtcbiAgICB0aGlzLnN0YWNrLnB1c2godGhpcy5mcCk7XG4gICAgdGhpcy5mcCA9IHRoaXMuc3AgLSAxO1xuICAgIC8vIHRoaXMuZnAgPSB0aGlzLnNwICsgMTtcbiAgfVxuXG4gIC8vIFJlc3RvcmUgJHJhLCAkc3AgYW5kICRmcFxuICBwb3BGcmFtZSgpIHtcbiAgICB0aGlzLnNwID0gdGhpcy5mcCAtIDE7XG4gICAgdGhpcy5yYSA9IHRoaXMuc3RhY2suZnJvbUJhc2U8bnVtYmVyPigwKTtcbiAgICB0aGlzLmZwID0gdGhpcy5zdGFjay5mcm9tQmFzZTxudW1iZXI+KC0xKTtcbiAgfVxuXG4gIC8vIEp1bXAgdG8gYW4gYWRkcmVzcyBpbiBgcHJvZ3JhbWBcbiAgZ290byhwYzogbnVtYmVyKSB7XG4gICAgdGhpcy5wYyA9IHBjO1xuICB9XG5cbiAgLy8gU2F2ZSAkcGMgaW50byAkcmEsIHRoZW4ganVtcCB0byBhIG5ldyBhZGRyZXNzIGluIGBwcm9ncmFtYCAoamFsIGluIE1JUFMpXG4gIGNhbGwocGM6IG51bWJlcikge1xuICAgIHRoaXMucmEgPSB0aGlzLnBjO1xuICAgIHRoaXMucGMgPSBwYztcbiAgfVxuXG4gIC8vIFB1dCBhIHNwZWNpZmljIGBwcm9ncmFtYCBhZGRyZXNzIGluICRyYVxuICByZXR1cm5UbyhyYTogbnVtYmVyKSB7XG4gICAgdGhpcy5yYSA9IHJhO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRvIHRoZSBgcHJvZ3JhbWAgYWRkcmVzcyBzdG9yZWQgaW4gJHJhXG4gIHJldHVybigpIHtcbiAgICBpZiAodGhpcy5wYyA9PT0gKHRoaXMucmEgKyA0KSkge1xuICAgICAgdGhyb3cgXCJaT01HXCI7XG4gICAgfVxuXG4gICAgdGhpcy5wYyA9IHRoaXMucmE7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhbChcbiAgICBlbnY6IEVudmlyb25tZW50LFxuICAgIHNlbGY6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgICBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjayxcbiAgICBwcm9ncmFtOiBDb21waWxlZER5bmFtaWNQcm9ncmFtXG4gICkge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnJvb3Qoc2VsZiwgcHJvZ3JhbS5zeW1ib2xUYWJsZS5zeW1ib2xzLmxlbmd0aCk7XG4gICAgbGV0IHZtID0gbmV3IFZNKGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgZWxlbWVudFN0YWNrKTtcbiAgICB2bS5wYyA9IHByb2dyYW0uc3RhcnQ7XG4gICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTtcbiAgICByZXR1cm4gdm07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzY29wZTogU2NvcGUsXG4gICAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICAgcHJpdmF0ZSBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjayxcbiAgKSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZWxlbWVudFN0YWNrID0gZWxlbWVudFN0YWNrO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIGNhcHR1cmUoYXJnczogbnVtYmVyKTogVk1TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICBzY29wZTogdGhpcy5zY29wZSgpLFxuICAgICAgZHluYW1pY1Njb3BlOiB0aGlzLmR5bmFtaWNTY29wZSgpLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2suY2FwdHVyZShhcmdzKVxuICAgIH07XG4gIH1cblxuICBiZWdpbkNhY2hlR3JvdXAoKSB7XG4gICAgdGhpcy5jYWNoZUdyb3Vwcy5wdXNoKHRoaXMudXBkYXRpbmcoKS50YWlsKCkpO1xuICB9XG5cbiAgY29tbWl0Q2FjaGVHcm91cCgpIHtcbiAgICAvLyAgICAgICAgSnVtcElmTm90TW9kaWZpZWQoRU5EKVxuICAgIC8vICAgICAgICAoaGVhZClcbiAgICAvLyAgICAgICAgKC4uLi4pXG4gICAgLy8gICAgICAgICh0YWlsKVxuICAgIC8vICAgICAgICBEaWRNb2RpZnlcbiAgICAvLyBFTkQ6ICAgTm9vcFxuXG4gICAgbGV0IEVORCA9IG5ldyBMYWJlbE9wY29kZShcIkVORFwiKTtcblxuICAgIGxldCBvcGNvZGVzID0gdGhpcy51cGRhdGluZygpO1xuICAgIGxldCBtYXJrZXIgPSB0aGlzLmNhY2hlR3JvdXBzLnBvcCgpO1xuICAgIGxldCBoZWFkID0gbWFya2VyID8gb3Bjb2Rlcy5uZXh0Tm9kZShtYXJrZXIpIDogb3Bjb2Rlcy5oZWFkKCk7XG4gICAgbGV0IHRhaWwgPSBvcGNvZGVzLnRhaWwoKTtcbiAgICBsZXQgdGFnID0gY29tYmluZVNsaWNlKG5ldyBMaXN0U2xpY2UoaGVhZCwgdGFpbCkpO1xuXG4gICAgbGV0IGd1YXJkID0gbmV3IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKHRhZywgRU5EKTtcblxuICAgIG9wY29kZXMuaW5zZXJ0QmVmb3JlKGd1YXJkLCBoZWFkKTtcbiAgICBvcGNvZGVzLmFwcGVuZChuZXcgRGlkTW9kaWZ5T3Bjb2RlKGd1YXJkKSk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQoRU5EKTtcbiAgfVxuXG4gIGVudGVyKGFyZ3M6IG51bWJlcikge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKGFyZ3MpO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5lbGVtZW50cygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuXG4gICAgbGV0IHRyeU9wY29kZSA9IG5ldyBUcnlPcGNvZGUodGhpcy5wYywgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nKTtcblxuICAgIHRoaXMuZGlkRW50ZXIodHJ5T3Bjb2RlKTtcbiAgfVxuXG4gIGl0ZXJhdGUobWVtbzogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB2YWx1ZTogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTogVHJ5T3Bjb2RlIHtcbiAgICBsZXQgc3RhY2sgPSB0aGlzLnN0YWNrO1xuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgIHN0YWNrLnB1c2gobWVtbyk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoMik7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLmVsZW1lbnRzKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG5cbiAgICAvLyBsZXQgaXAgPSB0aGlzLmlwO1xuICAgIC8vIHRoaXMuaXAgPSBlbmQgKyA0O1xuICAgIC8vIHRoaXMuZnJhbWVzLnB1c2goaXApO1xuXG4gICAgcmV0dXJuIG5ldyBUcnlPcGNvZGUodGhpcy5wYywgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nKTtcbiAgfVxuXG4gIGVudGVySXRlbShrZXk6IHN0cmluZywgb3Bjb2RlOiBUcnlPcGNvZGUpIHtcbiAgICB0aGlzLmxpc3RCbG9jaygpLm1hcFtrZXldID0gb3Bjb2RlO1xuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlKTtcbiAgfVxuXG4gIGVudGVyTGlzdChzdGFydDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8QmxvY2tPcGNvZGU+KCk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoMCk7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLmVsZW1lbnRzKCkucHVzaEJsb2NrTGlzdCh1cGRhdGluZyk7XG4gICAgbGV0IGFydGlmYWN0cyA9IHRoaXMuc3RhY2sucGVlazxSZWZlcmVuY2VJdGVyYXRvcj4oKS5hcnRpZmFjdHM7XG5cbiAgICBsZXQgb3Bjb2RlID0gbmV3IExpc3RCbG9ja09wY29kZShzdGFydCwgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nLCBhcnRpZmFjdHMpO1xuXG4gICAgdGhpcy5saXN0QmxvY2tTdGFjay5wdXNoKG9wY29kZSk7XG5cbiAgICB0aGlzLmRpZEVudGVyKG9wY29kZSk7XG4gIH1cblxuICBwcml2YXRlIGRpZEVudGVyKG9wY29kZTogQmxvY2tPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaChvcGNvZGUuY2hpbGRyZW4pO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmVsZW1lbnRzKCkucG9wQmxvY2soKTtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCk7XG5cbiAgICBsZXQgcGFyZW50ID0gdGhpcy51cGRhdGluZygpLnRhaWwoKSBhcyBCbG9ja09wY29kZTtcblxuICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGV4aXRMaXN0KCkge1xuICAgIHRoaXMuZXhpdCgpO1xuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucG9wKCk7XG4gIH1cblxuICB1cGRhdGVXaXRoKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nKCkuYXBwZW5kKG9wY29kZSk7XG4gIH1cblxuICBsaXN0QmxvY2soKTogTGlzdEJsb2NrT3Bjb2RlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMubGlzdEJsb2NrU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIGEgbGlzdCBibG9jaycpO1xuICB9XG5cbiAgdXBkYXRpbmcoKTogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4ge1xuICAgIHJldHVybiBleHBlY3QodGhpcy51cGRhdGluZ09wY29kZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCB1cGRhdGluZyBvcGNvZGUgb24gdGhlIHVwZGF0aW5nIG9wY29kZSBzdGFjaycpO1xuICB9XG5cbiAgZWxlbWVudHMoKTogRWxlbWVudFN0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U3RhY2s7XG4gIH1cblxuICBzY29wZSgpOiBTY29wZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLnNjb3BlU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIHNjb3BlIG9uIHRoZSBzY29wZSBzdGFjaycpO1xuICB9XG5cbiAgZHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBkeW5hbWljIHNjb3BlIG9uIHRoZSBkeW5hbWljIHNjb3BlIHN0YWNrJyk7XG4gIH1cblxuICBwdXNoQ2hpbGRTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaCh0aGlzLnNjb3BlKCkuY2hpbGQoKSk7XG4gIH1cblxuICBwdXNoQ2FsbGVyU2NvcGUoY2hpbGRTY29wZSA9IGZhbHNlKSB7XG4gICAgbGV0IGNhbGxlclNjb3BlID0gZXhwZWN0KHRoaXMuc2NvcGUoKS5nZXRDYWxsZXJTY29wZSgpLCAncHVzaENhbGxlclNjb3BlIGlzIGNhbGxlZCB3aGVuIGEgY2FsbGVyIHNjb3BlIGlzIHByZXNlbnQnKTtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChjaGlsZFNjb3BlID8gY2FsbGVyU2NvcGUuY2hpbGQoKSA6IGNhbGxlclNjb3BlKTtcbiAgfVxuXG4gIHB1c2hEeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlIHtcbiAgICBsZXQgY2hpbGQgPSB0aGlzLmR5bmFtaWNTY29wZSgpLmNoaWxkKCk7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGNoaWxkKTtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICBwdXNoUm9vdFNjb3BlKHNpemU6IG51bWJlciwgYmluZENhbGxlcjogYm9vbGVhbik6IFNjb3BlIHtcbiAgICBsZXQgc2NvcGUgPSBTY29wZS5zaXplZChzaXplKTtcbiAgICBpZiAoYmluZENhbGxlcikgc2NvcGUuYmluZENhbGxlclNjb3BlKHRoaXMuc2NvcGUoKSk7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goc2NvcGUpO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIHBvcFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIHBvcER5bmFtaWNTY29wZSgpIHtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmVsZW1lbnRzKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICAvLy8gU0NPUEUgSEVMUEVSU1xuXG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFNlbGYoKTtcbiAgfVxuXG4gIHJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2w6IG51bWJlcik6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIC8vLyBFWEVDVVRJT05cblxuICBleGVjdXRlKHN0YXJ0OiBudW1iZXIsIGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTogUmVuZGVyUmVzdWx0IHtcbiAgICB0aGlzLnBjID0gc3RhcnQ7XG5cbiAgICBpZiAoaW5pdGlhbGl6ZSkgaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGxldCByZXN1bHQ6IEl0ZXJhdG9yUmVzdWx0PFJlbmRlclJlc3VsdD47XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5uZXh0KCk7XG4gICAgICBpZiAocmVzdWx0LmRvbmUpIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQudmFsdWUgYXMgUmVuZGVyUmVzdWx0O1xuICB9XG5cbiAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxSZW5kZXJSZXN1bHQ+IHtcbiAgICBsZXQgeyBlbnYsIHVwZGF0aW5nT3Bjb2RlU3RhY2ssIGVsZW1lbnRTdGFjayB9ID0gdGhpcztcbiAgICBsZXQgb3Bjb2RlOiBPcHRpb248T3Bjb2RlPjtcblxuICAgIGlmIChpKysgPiAxMDAwMDApIHtcbiAgICAgIHRocm93IFwiem9tZ1wiO1xuICAgIH1cblxuICAgIGlmIChvcGNvZGUgPSB0aGlzLm5leHRTdGF0ZW1lbnQoZW52KSkge1xuICAgICAgQVBQRU5EX09QQ09ERVMuZXZhbHVhdGUodGhpcywgb3Bjb2RlLCBvcGNvZGUudHlwZSk7XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG51bGwgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXcgUmVuZGVyUmVzdWx0KFxuICAgICAgICBlbnYsXG4gICAgICAgIGV4cGVjdCh1cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpLCAndGhlcmUgc2hvdWxkIGJlIGEgZmluYWwgdXBkYXRpbmcgb3Bjb2RlIHN0YWNrJyksXG4gICAgICAgIGVsZW1lbnRTdGFjay5wb3BCbG9jaygpXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dFN0YXRlbWVudChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPE9wY29kZT4ge1xuICAgIGxldCB7IHBjIH0gPSB0aGlzO1xuXG4gICAgaWYgKHBjID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHByb2dyYW0gPSBlbnYucHJvZ3JhbTtcbiAgICB0aGlzLnBjICs9IDQ7XG4gICAgcmV0dXJuIHByb2dyYW0ub3Bjb2RlKHBjKTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogT3Bjb2RlKSB7XG4gICAgQVBQRU5EX09QQ09ERVMuZXZhbHVhdGUodGhpcywgb3Bjb2RlLCBvcGNvZGUudHlwZSk7XG4gIH1cblxuICBiaW5kRHluYW1pY1Njb3BlKG5hbWVzOiBDb25zdGFudFN0cmluZ1tdKSB7XG4gICAgbGV0IHNjb3BlID0gdGhpcy5keW5hbWljU2NvcGUoKTtcblxuICAgIGZvcihsZXQgaT1uYW1lcy5sZW5ndGggLSAxOyBpPj0wOyBpLS0pIHtcbiAgICAgIGxldCBuYW1lID0gdGhpcy5jb25zdGFudHMuZ2V0U3RyaW5nKG5hbWVzW2ldKTtcbiAgICAgIHNjb3BlLnNldChuYW1lLCB0aGlzLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCkpO1xuICAgIH1cbiAgfVxufVxuIl19

@@ -64,10 +64,9 @@ 'use strict';

class BlockOpcode extends _opcodes.UpdatingOpcode {
constructor(start, end, state, bounds, children) {
constructor(start, state, bounds, children) {
super();
this.start = start;
this.end = end;
this.type = "block";
this.next = null;
this.prev = null;
let { env, scope, dynamicScope, stack, bp } = state;
let { env, scope, dynamicScope, stack } = state;
this.children = children;

@@ -78,3 +77,2 @@ this.env = env;

this.stack = stack;
this.bp = bp;
this.bounds = bounds;

@@ -113,4 +111,4 @@ }

class TryOpcode extends BlockOpcode {
constructor(start, end, state, bounds, children) {
super(start, end, state, bounds, children);
constructor(start, state, bounds, children) {
super(start, state, bounds, children);
this.type = "try";

@@ -126,8 +124,15 @@ this.tag = this._tag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);

handleException() {
let { env, scope, start, dynamicScope, stack, bp } = this;
let elementStack = _builder.ElementStack.resume(this.env, this.bounds, this.bounds.reset(env));
let { env, bounds, children, scope, dynamicScope, start, stack, prev, next } = this;
children.clear();
let elementStack = _builder.ElementStack.resume(env, bounds, bounds.reset(env));
let vm = new _append2.default(env, scope, dynamicScope, elementStack);
let result = vm.resume(start, stack.snapshot(), bp);
this.children = result.opcodes();
this.didInitializeChildren();
let updating = new _util.LinkedList();
vm.execute(start, vm => {
vm.stack = _append.EvaluationStack.restore(stack);
vm.updatingOpcodeStack.push(updating);
vm.updateWith(this);
vm.updatingOpcodeStack.push(children);
});
this.prev = prev;
this.next = next;
}

@@ -165,7 +170,9 @@ toJSON() {

let tryOpcode = null;
let { start, end } = opcode;
let { start } = opcode;
vm.execute(start, vm => {
map[key] = tryOpcode = vm.iterate(start, end, memo, item, vm.updating());
map[key] = tryOpcode = vm.iterate(memo, item);
vm.updatingOpcodeStack.push(new _util.LinkedList());
vm.updateWith(tryOpcode);
vm.updatingOpcodeStack.push(tryOpcode.children);
});
tryOpcode.didInitializeChildren();
updating.insertBefore(tryOpcode, reference);

@@ -201,4 +208,4 @@ this.didInsert = true;

class ListBlockOpcode extends BlockOpcode {
constructor(start, end, state, bounds, children, artifacts) {
super(start, end, state, bounds, children);
constructor(start, state, bounds, children, artifacts) {
super(start, state, bounds, children);
this.type = "list-block";

@@ -275,2 +282,2 @@ this.map = (0, _util.dict)();

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxBQUFPLEFBQXFCLEFBQUssQUFBRSxBQUFJLEFBQUksQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUN6RSxBQUFPLEFBQUUsQUFBWSxBQUE2QixBQUFNLEFBQVksQUFBQzs7QUFDckUsQUFBTyxBQUFrQixBQUFLLEFBQW9CLEFBQUksQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQ3RGLEFBQU8sQUFHTCxBQUFvQixBQUdwQixBQUFPLEFBQ1AsQUFBTyxBQUVQLEFBQVksQUFFWixBQUFZLEFBQ1osQUFBWSxBQUNaLEFBQU8sQUFDUixBQUFNLEFBQW9CLEFBQUM7O0FBQzVCLEFBQU8sQUFBYyxBQUFjLEFBQWlCLEFBQU0sQUFBWSxBQUFDOztBQUt2RSxBQUFPLEFBQXVCLEFBQU0sQUFBVSxBQUFDLEFBRS9DLEFBQU0sQUFBQyxBQUFPOzs7Ozs7O0FBUVosZ0JBQVksQUFBZ0IsS0FBRSxFQUFFLEFBQWdCLG1CQUFHLEFBQUssQUFBRTtBQUZsRCxhQUFVLGFBQTJCLEFBQUksQUFBSyxBQUFtQixBQUFDO0FBR3hFLEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBRyxBQUFDO0FBQ2YsQUFBSSxhQUFDLEFBQVMsWUFBRyxBQUFHLElBQUMsQUFBUyxBQUFDO0FBQy9CLEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBRyxJQUFDLEFBQU0sQUFBRSxBQUFDO0FBQ3hCLEFBQUksYUFBQyxBQUFnQixtQkFBRyxBQUFnQixBQUFDLEFBQzNDO0FBQUM7QUFFRCxBQUFPLFlBQUMsQUFBc0IsU0FBRSxBQUF5QjtBQUN2RCxZQUFJLEVBQUUsQUFBVSxBQUFFLGVBQUcsQUFBSSxBQUFDO0FBRTFCLEFBQUksYUFBQyxBQUFHLElBQUMsQUFBTyxTQUFFLEFBQU8sQUFBQyxBQUFDO0FBRTNCLGVBQU8sQUFBSSxNQUFFLEFBQUM7QUFDWixBQUFFLEFBQUMsZ0JBQUMsQUFBVSxXQUFDLEFBQU8sQUFBRSxBQUFDLFdBQUMsQUFBSyxBQUFDO0FBRWhDLGdCQUFJLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQWEsQUFBRSxBQUFDO0FBRXhDLEFBQUUsQUFBQyxnQkFBQyxBQUFNLFdBQUssQUFBSSxBQUFDLE1BQUMsQUFBQztBQUNwQixBQUFJLHFCQUFDLEFBQVUsV0FBQyxBQUFHLEFBQUUsQUFBQztBQUN0QixBQUFRLEFBQUMsQUFDWDtBQUFDO0FBRUQsQUFBTSxtQkFBQyxBQUFRLFNBQUMsQUFBSSxBQUFDLEFBQUMsQUFDeEI7QUFBQyxBQUNIO0FBQUM7QUFFRCxRQUFZLEFBQUs7QUFDZixBQUFNLGVBQUMsQUFBTSxrQkFBQyxBQUFJLEtBQUMsQUFBVSxXQUFDLEFBQU8sU0FBRSxBQUF1QixBQUFDLEFBQUMsQUFDbEU7QUFBQztBQUVELEFBQUksU0FBQyxBQUFrQjtBQUNyQixBQUFJLGFBQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFFLEFBQUMsQUFBQyxBQUN0QjtBQUFDO0FBRUQsQUFBRyxRQUFDLEFBQWtCLEtBQUUsQUFBaUM7QUFDdkQsQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsSUFBSSxBQUFlLGdCQUFDLEFBQUksTUFBRSxBQUFHLEtBQUUsQUFBTyxBQUFDLEFBQUMsQUFBQyxBQUNoRTtBQUFDO0FBRUQsQUFBSztBQUNILEFBQUksYUFBQyxBQUFLLE1BQUMsQUFBZSxBQUFFLEFBQUM7QUFDN0IsQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFHLEFBQUUsQUFBQyxBQUN4QjtBQUFDO0FBRUQsQUFBYyxtQkFBQyxBQUFzQjtBQUNuQyxBQUFNLGVBQUMsQUFBUSxTQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3hCO0FBQUMsQUFDRixBQWNELEFBQU07OztNQUE0QixBQUFRLEFBQWM7QUFhdEQsZ0JBQW1CLEFBQWEsT0FBUyxBQUFXLEtBQUUsQUFBYyxPQUFFLEFBQXlCLFFBQUUsQUFBb0M7QUFDbkksQUFBSyxBQUFFLEFBQUM7QUFEUyxhQUFLLFFBQUwsQUFBSyxBQUFRO0FBQVMsYUFBRyxNQUFILEFBQUcsQUFBUTtBQVo3QyxhQUFJLE9BQUcsQUFBTyxBQUFDO0FBQ2YsYUFBSSxPQUFHLEFBQUksQUFBQztBQUNaLGFBQUksT0FBRyxBQUFJLEFBQUM7QUFZakIsWUFBSSxFQUFFLEFBQUcsS0FBRSxBQUFLLE9BQUUsQUFBWSxjQUFFLEFBQUssT0FBRSxBQUFFLEFBQUUsT0FBRyxBQUFLLEFBQUM7QUFDcEQsQUFBSSxhQUFDLEFBQVEsV0FBRyxBQUFRLEFBQUM7QUFDekIsQUFBSSxhQUFDLEFBQUcsTUFBRyxBQUFHLEFBQUM7QUFDZixBQUFJLGFBQUMsQUFBSyxRQUFHLEFBQUssQUFBQztBQUNuQixBQUFJLGFBQUMsQUFBWSxlQUFHLEFBQVksQUFBQztBQUNqQyxBQUFJLGFBQUMsQUFBSyxRQUFHLEFBQUssQUFBQztBQUNuQixBQUFJLGFBQUMsQUFBRSxLQUFHLEFBQUUsQUFBQztBQUNiLEFBQUksYUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQ3ZCO0FBQUM7QUFJRCxBQUFhO0FBQ1gsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBYSxBQUFFLEFBQUMsQUFDckM7QUFBQztBQUVELEFBQVM7QUFDUCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNqQztBQUFDO0FBRUQsQUFBUTtBQUNOLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQVEsQUFBRSxBQUFDLEFBQ2hDO0FBQUM7QUFFRCxBQUFRLGFBQUMsQUFBYztBQUNyQixBQUFFLFdBQUMsQUFBRyxJQUFDLEFBQUksS0FBQyxBQUFRLFVBQUUsQUFBSSxBQUFDLEFBQUMsQUFDOUI7QUFBQztBQUVELEFBQU87QUFDTCxBQUFJLGFBQUMsQUFBTSxPQUFDLEFBQU8sQUFBRSxBQUFDLEFBQ3hCO0FBQUM7QUFFRCxBQUFVO0FBQ1IsQUFBSSxhQUFDLEFBQUcsSUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ25DO0FBQUM7QUFFRCxBQUFNO0FBQ0osWUFBSSxBQUFPLFVBQUcsQUFBSSxBQUFVLEFBQUM7QUFFN0IsQUFBTyxnQkFBQyxBQUFNLEFBQUMsQUFBRyxhQUFHLEFBQUksS0FBQyxBQUFLLEtBQUUsQUFBQztBQUVsQyxBQUFNO0FBQ0osQUFBSSxrQkFBRSxBQUFJLEtBQUMsQUFBSztBQUNoQixBQUFJLGtCQUFFLEFBQUksS0FBQyxBQUFJO0FBQ2YsQUFBTztBQUNQLEFBQVEsc0JBQUUsQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFPLEFBQUUsVUFBQyxBQUFHLElBQUMsQUFBRSxNQUFJLEFBQUUsR0FBQyxBQUFNLEFBQUUsQUFBQyxBQUN6RCxBQUFDLEFBQ0o7QUFOUztBQU1SLEFBQ0YsQUFFRCxBQUFNOzs7TUFBaUIsa0JBQVEsQUFBVztBQU94QyxnQkFBWSxBQUFhLE9BQUUsQUFBVyxLQUFFLEFBQWMsT0FBRSxBQUF3QixRQUFFLEFBQW9DO0FBQ3BILEFBQUssY0FBQyxBQUFLLE9BQUUsQUFBRyxLQUFFLEFBQUssT0FBRSxBQUFNLFFBQUUsQUFBUSxBQUFDLEFBQUM7QUFQdEMsYUFBSSxPQUFHLEFBQUssQUFBQztBQVFsQixBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQUksS0FBQyxBQUFJLE9BQUcsQUFBWSx3QkFBQyxBQUFNLEFBQUMsQUFBWSxBQUFDLEFBQUMsQUFDM0Q7QUFBQztBQUVELEFBQXFCO0FBQ25CLEFBQUksYUFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU0sT0FBQyxBQUFZLDZCQUFDLEFBQUksS0FBQyxBQUFRLEFBQUMsQUFBQyxBQUFDLEFBQ3REO0FBQUM7QUFFRCxBQUFRLGFBQUMsQUFBYztBQUNyQixBQUFFLFdBQUMsQUFBRyxJQUFDLEFBQUksS0FBQyxBQUFRLFVBQUUsQUFBSSxBQUFDLEFBQUMsQUFDOUI7QUFBQztBQUVELEFBQWU7QUFDYixZQUFJLEVBQUUsQUFBRyxLQUFFLEFBQUssT0FBRSxBQUFLLE9BQUUsQUFBWSxjQUFFLEFBQUssT0FBRSxBQUFFLEFBQUUsT0FBRyxBQUFJLEFBQUM7QUFFMUQsWUFBSSxBQUFZLGVBQUcsQUFBWSxzQkFBQyxBQUFNLE9BQ3BDLEFBQUksS0FBQyxBQUFHLEtBQ1IsQUFBSSxLQUFDLEFBQU0sUUFDWCxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFDdkIsQUFBQztBQUVGLFlBQUksQUFBRSxLQUFHLEFBQUksQUFBRSxxQkFBQyxBQUFHLEtBQUUsQUFBSyxPQUFFLEFBQVksY0FBRSxBQUFZLEFBQUMsQUFBQztBQUN4RCxZQUFJLEFBQU0sU0FBRyxBQUFFLEdBQUMsQUFBTSxPQUFDLEFBQUssT0FBRSxBQUFLLE1BQUMsQUFBUSxBQUFFLFlBQUUsQUFBRSxBQUFDLEFBQUM7QUFFcEQsQUFBSSxhQUFDLEFBQVEsV0FBRyxBQUFNLE9BQUMsQUFBTyxBQUFFLEFBQUM7QUFDakMsQUFBSSxhQUFDLEFBQXFCLEFBQUUsQUFBQyxBQUMvQjtBQUFDO0FBRUQsQUFBTTtBQUNKLFlBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFNLEFBQUUsQUFBQztBQUUxQixZQUFJLEFBQU8sVUFBRyxBQUFJLEtBQUMsQUFBUyxBQUFDLEFBQUM7QUFDOUIsQUFBRSxBQUFDLFlBQUMsQ0FBQyxBQUFPLEFBQUMsU0FBQyxBQUFDO0FBQ2IsQUFBTyxzQkFBRyxBQUFJLEtBQUMsQUFBUyxBQUFDLGFBQUcsQUFBRSxBQUFDLEFBQ2pDO0FBQUM7QUFFRCxBQUFNLGVBQUMsQUFBSyxNQUFDLEFBQU0sQUFBRSxBQUFDLEFBQ3hCO0FBQUMsQUFDRjs7O0FBRUQ7QUFPRSxnQkFBb0IsQUFBdUIsUUFBVSxBQUFzQjtBQUF2RCxhQUFNLFNBQU4sQUFBTSxBQUFpQjtBQUFVLGFBQU0sU0FBTixBQUFNLEFBQWdCO0FBSG5FLGFBQVMsWUFBRyxBQUFLLEFBQUM7QUFDbEIsYUFBUyxZQUFHLEFBQUssQUFBQztBQUd4QixBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQU0sT0FBQyxBQUFHLEFBQUM7QUFDdEIsQUFBSSxhQUFDLEFBQVEsV0FBRyxBQUFNLE9BQUMsQUFBVSxBQUFDLEFBQUMsQUFDckM7QUFBQztBQUVELEFBQU0sV0FBQyxBQUFXLEtBQUUsQUFBMkIsTUFBRSxBQUEyQixNQUFFLEFBQWM7QUFDMUYsWUFBSSxFQUFFLEFBQUcsS0FBRSxBQUFNLFFBQUUsQUFBUSxBQUFFLGFBQUcsQUFBSSxBQUFDO0FBQ3JDLFlBQUksQUFBVyxjQUF3QixBQUFJLEFBQUM7QUFDNUMsWUFBSSxBQUFTLFlBQXdCLEFBQUksQUFBQztBQUUxQyxBQUFFLEFBQUMsWUFBQyxBQUFNLEFBQUMsUUFBQyxBQUFDO0FBQ1gsQUFBUyx3QkFBRyxBQUFHLElBQUMsQUFBTSxBQUFDLEFBQUM7QUFDeEIsQUFBVywwQkFBRyxBQUFTLFVBQUMsQUFBUSxBQUFDLFVBQUMsQUFBUyxBQUFFLEFBQUMsQUFDaEQ7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sQUFBVywwQkFBRyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQzVCO0FBQUM7QUFFRCxZQUFJLEFBQUUsS0FBRyxBQUFNLE9BQUMsQUFBYyxlQUFDLEFBQVcsQUFBQyxBQUFDO0FBQzVDLFlBQUksQUFBUyxZQUFzQixBQUFJLEFBQUM7QUFFeEMsWUFBSSxFQUFFLEFBQUssT0FBRSxBQUFHLEFBQUUsUUFBRyxBQUFNLEFBQUM7QUFFNUIsQUFBRSxXQUFDLEFBQU8sUUFBQyxBQUFLLE9BQUUsQUFBRTtBQUNsQixBQUFHLGdCQUFDLEFBQUcsQUFBQyxPQUFHLEFBQVMsWUFBRyxBQUFFLEdBQUMsQUFBTyxRQUFDLEFBQUssT0FBRSxBQUFHLEtBQUUsQUFBSSxNQUFFLEFBQUksTUFBRSxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUMsQUFBQyxBQUMzRTtBQUFDLEFBQUMsQUFBQztBQUVILEFBQVUsa0JBQUMsQUFBcUIsQUFBRSxBQUFDO0FBRW5DLEFBQVEsaUJBQUMsQUFBWSxhQUFDLEFBQVUsV0FBRSxBQUFTLEFBQUMsQUFBQztBQUU3QyxBQUFJLGFBQUMsQUFBUyxZQUFHLEFBQUksQUFBQyxBQUN4QjtBQUFDO0FBRUQsQUFBTSxXQUFDLEFBQVksTUFBRSxBQUE0QixPQUFFLEFBQTRCLE9BQy9FLENBQUM7QUFFRCxBQUFJLFNBQUMsQUFBVyxLQUFFLEFBQTRCLE9BQUUsQUFBNEIsT0FBRSxBQUFjO0FBQzFGLFlBQUksRUFBRSxBQUFHLEtBQUUsQUFBUSxBQUFFLGFBQUcsQUFBSSxBQUFDO0FBRTdCLFlBQUksQUFBSyxRQUFHLEFBQUcsSUFBQyxBQUFHLEFBQUMsQUFBQztBQUNyQixZQUFJLEFBQVMsWUFBRyxBQUFHLElBQUMsQUFBTSxBQUFDLFdBQUksQUFBSSxBQUFDO0FBRXBDLEFBQUUsQUFBQyxZQUFDLEFBQU0sQUFBQyxRQUFDLEFBQUM7QUFDWCxBQUFVLDhCQUFDLEFBQUssT0FBRSxBQUFTLFVBQUMsQUFBUyxBQUFFLEFBQUMsQUFBQyxBQUMzQztBQUFDLEFBQUMsQUFBSSxlQUFDLEFBQUM7QUFDTixBQUFVLDhCQUFDLEFBQUssT0FBRSxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDakM7QUFBQztBQUVELEFBQVEsaUJBQUMsQUFBTSxPQUFDLEFBQUssQUFBQyxBQUFDO0FBQ3ZCLEFBQVEsaUJBQUMsQUFBWSxhQUFDLEFBQUssT0FBRSxBQUFTLEFBQUMsQUFBQyxBQUMxQztBQUFDO0FBRUQsQUFBTSxXQUFDLEFBQVc7QUFDaEIsWUFBSSxFQUFFLEFBQUcsQUFBRSxRQUFHLEFBQUksQUFBQztBQUNuQixZQUFJLEFBQU0sU0FBRyxBQUFHLElBQUMsQUFBRyxBQUFDLEFBQUM7QUFDdEIsQUFBTSxlQUFDLEFBQVUsQUFBRSxBQUFDO0FBQ3BCLEFBQUssMkJBQUMsQUFBTSxBQUFDLEFBQUM7QUFDZCxBQUFJLGFBQUMsQUFBUSxTQUFDLEFBQU0sT0FBQyxBQUFNLEFBQUMsQUFBQztBQUM3QixlQUFPLEFBQUcsSUFBQyxBQUFHLEFBQUMsQUFBQztBQUVoQixBQUFJLGFBQUMsQUFBUyxZQUFHLEFBQUksQUFBQyxBQUN4QjtBQUFDO0FBRUQsQUFBSTtBQUNGLEFBQUksYUFBQyxBQUFNLE9BQUMsQUFBcUIsc0JBQUMsQUFBSSxLQUFDLEFBQVMsYUFBSSxBQUFJLEtBQUMsQUFBUyxBQUFDLEFBQUMsQUFDdEU7QUFBQyxBQUNGLEFBRUQsQUFBTTs7TUFBdUIsd0JBQVEsQUFBVztBQVE5QyxnQkFBWSxBQUFhLE9BQUUsQUFBVyxLQUFFLEFBQWMsT0FBRSxBQUFlLFFBQUUsQUFBb0MsVUFBRSxBQUE2QjtBQUMxSSxBQUFLLGNBQUMsQUFBSyxPQUFFLEFBQUcsS0FBRSxBQUFLLE9BQUUsQUFBTSxRQUFFLEFBQVEsQUFBQyxBQUFDO0FBUnRDLGFBQUksT0FBRyxBQUFZLEFBQUM7QUFDcEIsYUFBRyxNQUFHLEFBQUksQUFBZSxBQUFDO0FBR3pCLGFBQVksQUFBYSxBQUFPLEFBQUM7QUFLdkMsQUFBSSxhQUFDLEFBQVMsWUFBRyxBQUFTLEFBQUM7QUFDM0IsWUFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQUksT0FBRyxBQUFZLHdCQUFDLEFBQU0sQUFBQyxBQUFZLEFBQUMsQUFBQztBQUN6RCxBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQU8sd0JBQUMsQ0FBQyxBQUFTLFVBQUMsQUFBRyxLQUFFLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDNUM7QUFBQztBQUVELEFBQXFCLDBCQUFDLEFBQWEsZ0JBQUcsQUFBSTtBQUN4QyxBQUFJLGFBQUMsQUFBWSxlQUFHLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBRyxJQUFDLEFBQUssQUFBRSxBQUFDO0FBRS9DLEFBQUUsQUFBQyxZQUFDLEFBQWEsQUFBQyxlQUFDLEFBQUM7QUFDbEIsQUFBSSxpQkFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU0sT0FBQyxBQUFZLDZCQUFDLEFBQUksS0FBQyxBQUFRLEFBQUMsQUFBQyxBQUFDLEFBQ3REO0FBQUMsQUFDSDtBQUFDO0FBRUQsQUFBUSxhQUFDLEFBQWM7QUFDckIsWUFBSSxFQUFFLEFBQVMsV0FBRSxBQUFZLEFBQUUsaUJBQUcsQUFBSSxBQUFDO0FBRXZDLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBUyxVQUFDLEFBQUcsSUFBQyxBQUFRLFNBQUMsQUFBWSxBQUFDLEFBQUMsZUFBQyxBQUFDO0FBQzFDLGdCQUFJLEVBQUUsQUFBTSxBQUFFLFdBQUcsQUFBSSxBQUFDO0FBQ3RCLGdCQUFJLEVBQUUsQUFBRyxBQUFFLFFBQUcsQUFBRSxBQUFDO0FBRWpCLGdCQUFJLEFBQU0sU0FBRyxBQUFHLElBQUMsQUFBYSxjQUFDLEFBQUUsQUFBQyxBQUFDO0FBQ25DLEFBQUcsZ0JBQUMsQUFBVyxZQUFDLEFBQU0sT0FBQyxBQUFhLEFBQUUsaUJBQUUsQUFBTSxRQUFFLEFBQU0sa0JBQUMsQUFBTSxPQUFDLEFBQVEsQUFBRSxZQUFFLEFBQW9DLEFBQUMsQUFBQyxBQUFDO0FBRWpILGdCQUFJLEFBQU0sU0FBRyxJQUFJLEFBQXdCLHlCQUFDLEFBQUksTUFBRSxBQUFNLEFBQUMsQUFBQztBQUN4RCxnQkFBSSxBQUFZLGVBQUcsQUFBSSxBQUFvQixvQ0FBQyxFQUFFLEFBQU0sUUFBRSxBQUFTLEFBQUUsQUFBQyxBQUFDO0FBRW5FLEFBQVkseUJBQUMsQUFBSSxBQUFFLEFBQUM7QUFFcEIsQUFBSSxpQkFBQyxBQUFhLEFBQUUsZ0JBQUMsQUFBVyxZQUFDLEFBQU0sQUFBQyxBQUFDLEFBQzNDO0FBQUM7QUFFRCxBQUFtQztBQUNuQyxBQUFLLGNBQUMsQUFBUSxTQUFDLEFBQUUsQUFBQyxBQUFDLEFBQ3JCO0FBQUM7QUFFRCxBQUFjLG1CQUFDLEFBQWdDO0FBQzdDLFlBQUksRUFBRSxBQUFHLEtBQUUsQUFBSyxPQUFFLEFBQVksQUFBRSxpQkFBRyxBQUFJLEFBQUM7QUFFeEMsWUFBSSxBQUFZLGVBQUcsQUFBWSxzQkFBQyxBQUFnQixpQkFDOUMsQUFBSSxLQUFDLEFBQUcsS0FDUixBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQWEsQUFBRSxpQkFDM0IsQUFBVyxBQUNaLEFBQUM7QUFFRixBQUFNLGVBQUMsQUFBSSxBQUFFLHFCQUFDLEFBQUcsS0FBRSxBQUFLLE9BQUUsQUFBWSxjQUFFLEFBQVksQUFBQyxBQUFDLEFBQ3hEO0FBQUM7QUFFRCxBQUFNO0FBQ0osWUFBSSxBQUFJLE9BQUcsQUFBSyxNQUFDLEFBQU0sQUFBRSxBQUFDO0FBQzFCLFlBQUksQUFBRyxNQUFHLEFBQUksS0FBQyxBQUFHLEFBQUM7QUFFbkIsWUFBSSxBQUFLLGVBQVUsQUFBSSxLQUFDLEFBQUcsQUFBQyxLQUFDLEFBQUcsSUFBQyxBQUFHO0FBQ2xDLEFBQU0sQUFBQyxzQkFBRyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUcsQUFBQyxTQUFLLEFBQUcsSUFBQyxBQUFHLEFBQUMsS0FBQyxBQUFLLEtBQUUsQUFBQyxBQUNyRDtBQUFDLEFBQUMsU0FGVSxBQUFNLEVBRWYsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDO0FBRWQsWUFBSSxBQUFPLFVBQUcsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDO0FBQzlCLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBTyxBQUFDLFNBQUMsQUFBQztBQUNiLEFBQU8sc0JBQUcsQUFBSSxLQUFDLEFBQVMsQUFBQyxhQUFHLEFBQUUsQUFBQyxBQUNqQztBQUFDO0FBRUQsQUFBTyxnQkFBQyxBQUFLLEFBQUMsQUFBRyxhQUFJLEFBQUssS0FBRyxBQUFDO0FBRTlCLEFBQU0sZUFBQyxBQUFJLEFBQUMsQUFDZDtBQUFDLEFBQ0Y7OztBQUVEO0FBR0UsZ0JBQW9CLEFBQWMsSUFBVSxBQUFrQixLQUFVLEFBQTBDO0FBQTlGLGFBQUUsS0FBRixBQUFFLEFBQVk7QUFBVSxhQUFHLE1BQUgsQUFBRyxBQUFlO0FBQVUsYUFBZ0IsbUJBQWhCLEFBQWdCLEFBQTBCO0FBQ2hILEFBQUksYUFBQyxBQUFFLEtBQUcsQUFBRSxBQUFDO0FBQ2IsQUFBSSxhQUFDLEFBQUcsTUFBRyxBQUFHLEFBQUM7QUFDZixBQUFJLGFBQUMsQUFBTyxVQUFHLEFBQUcsSUFBQyxBQUFJLEFBQUUsQUFBQyxBQUM1QjtBQUFDO0FBRUQsQUFBSSxTQUFDLEFBQWtCO0FBQ3JCLEFBQUksYUFBQyxBQUFPLFVBQUcsQUFBRSxBQUFDLEFBQ3BCO0FBQUM7QUFFRCxBQUFhO0FBQ1gsWUFBSSxFQUFFLEFBQU8sU0FBRSxBQUFHLEFBQUUsUUFBRyxBQUFJLEFBQUM7QUFDNUIsQUFBRSxBQUFDLFlBQUMsQUFBTyxBQUFDLFNBQUMsQUFBSSxLQUFDLEFBQU8sVUFBRyxBQUFHLElBQUMsQUFBUSxTQUFDLEFBQU8sQUFBQyxBQUFDO0FBQ2xELEFBQU0sZUFBQyxBQUFPLEFBQUMsQUFDakI7QUFBQztBQUVELEFBQWU7QUFDYixBQUFFLEFBQUMsWUFBQyxBQUFJLEtBQUMsQUFBZ0IsQUFBQyxrQkFBQyxBQUFDO0FBQzFCLEFBQUksaUJBQUMsQUFBZ0IsaUJBQUMsQUFBZSxBQUFFLEFBQUMsQUFDMUM7QUFBQyxBQUNIO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjb3BlLCBEeW5hbWljU2NvcGUsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRGVzdHJveWFibGVCb3VuZHMsIGNsZWFyLCBtb3ZlIGFzIG1vdmVCb3VuZHMgfSBmcm9tICcuLi9ib3VuZHMnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrLCBUcmFja2VyLCBVcGRhdGFibGVUcmFja2VyIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPcHRpb24sIE9wYXF1ZSwgU3RhY2ssIExpbmtlZExpc3QsIERpY3QsIGRpY3QsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgUGF0aFJlZmVyZW5jZSxcbiAgSXRlcmF0aW9uQXJ0aWZhY3RzLFxuICBJdGVyYXRvclN5bmNocm9uaXplcixcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZSxcblxuICAvLyBUYWdzXG4gIGNvbWJpbmUsXG4gIFJldmlzaW9uLFxuICBVcGRhdGFibGVUYWcsXG4gIFRhZ1dyYXBwZXIsXG4gIGNvbWJpbmVTbGljZSxcbiAgQ09OU1RBTlRfVEFHLFxuICBJTklUSUFMXG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSwgVXBkYXRpbmdPcFNlcSB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQvY29uc3RhbnRzJztcbmltcG9ydCB7IERPTUNoYW5nZXMgfSBmcm9tICcuLi9kb20vaGVscGVyJztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuLi9kb20vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCBWTSwgeyBFdmFsdWF0aW9uU3RhY2sgfSBmcm9tICcuL2FwcGVuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwZGF0aW5nVk0ge1xuICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudDtcbiAgcHVibGljIGRvbTogRE9NQ2hhbmdlcztcbiAgcHVibGljIGFsd2F5c1JldmFsaWRhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25zdGFudHM6IENvbnN0YW50cztcblxuICBwcml2YXRlIGZyYW1lU3RhY2s6IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4gPSBuZXcgU3RhY2s8VXBkYXRpbmdWTUZyYW1lPigpO1xuXG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIHsgYWx3YXlzUmV2YWxpZGF0ZSA9IGZhbHNlIH0pIHtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLmNvbnN0YW50cyA9IGVudi5jb25zdGFudHM7XG4gICAgdGhpcy5kb20gPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5hbHdheXNSZXZhbGlkYXRlID0gYWx3YXlzUmV2YWxpZGF0ZTtcbiAgfVxuXG4gIGV4ZWN1dGUob3Bjb2RlczogVXBkYXRpbmdPcFNlcSwgaGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlcikge1xuICAgIGxldCB7IGZyYW1lU3RhY2sgfSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyeShvcGNvZGVzLCBoYW5kbGVyKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoZnJhbWVTdGFjay5pc0VtcHR5KCkpIGJyZWFrO1xuXG4gICAgICBsZXQgb3Bjb2RlID0gdGhpcy5mcmFtZS5uZXh0U3RhdGVtZW50KCk7XG5cbiAgICAgIGlmIChvcGNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGZyYW1lKCkge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5mcmFtZVN0YWNrLmN1cnJlbnQsICdidWc6IGV4cGVjdGVkIGEgZnJhbWUnKTtcbiAgfVxuXG4gIGdvdG8ob3A6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy5mcmFtZS5nb3RvKG9wKTtcbiAgfVxuXG4gIHRyeShvcHM6IFVwZGF0aW5nT3BTZXEsIGhhbmRsZXI6IE9wdGlvbjxFeGNlcHRpb25IYW5kbGVyPikge1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKG5ldyBVcGRhdGluZ1ZNRnJhbWUodGhpcywgb3BzLCBoYW5kbGVyKSk7XG4gIH1cblxuICB0aHJvdygpIHtcbiAgICB0aGlzLmZyYW1lLmhhbmRsZUV4Y2VwdGlvbigpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICBvcGNvZGUuZXZhbHVhdGUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGNlcHRpb25IYW5kbGVyIHtcbiAgaGFuZGxlRXhjZXB0aW9uKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVk1TdGF0ZSB7XG4gIGVudjogRW52aXJvbm1lbnQ7XG4gIHNjb3BlOiBTY29wZTtcbiAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGU7XG4gIHN0YWNrOiBFdmFsdWF0aW9uU3RhY2s7XG4gIGJwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja09wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIGltcGxlbWVudHMgRGVzdHJveWFibGVCb3VuZHMge1xuICBwdWJsaWMgdHlwZSA9IFwiYmxvY2tcIjtcbiAgcHVibGljIG5leHQgPSBudWxsO1xuICBwdWJsaWMgcHJldiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG5cbiAgcHJvdGVjdGVkIGVudjogRW52aXJvbm1lbnQ7XG4gIHByb3RlY3RlZCBzY29wZTogU2NvcGU7XG4gIHByb3RlY3RlZCBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgcHJvdGVjdGVkIHN0YWNrOiBFdmFsdWF0aW9uU3RhY2s7XG4gIHByb3RlY3RlZCBicDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhcnQ6IG51bWJlciwgcHVibGljIGVuZDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcywgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIHN0YWNrLCBicCB9ID0gc3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZSA9IGR5bmFtaWNTY29wZTtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2s7XG4gICAgdGhpcy5icCA9IGJwO1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG5cbiAgYWJzdHJhY3QgZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk6IHZvaWQ7XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICB9XG5cbiAgZmlyc3ROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB2bS50cnkodGhpcy5jaGlsZHJlbiwgbnVsbCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuYm91bmRzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGRpZERlc3Ryb3koKSB7XG4gICAgdGhpcy5lbnYuZGlkRGVzdHJveSh0aGlzLmJvdW5kcyk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBkZXRhaWxzID0gZGljdDxzdHJpbmc+KCk7XG5cbiAgICBkZXRhaWxzW1wiZ3VpZFwiXSA9IGAke3RoaXMuX2d1aWR9YDtcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5tYXAob3AgPT4gb3AudG9KU09OKCkpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJ5T3Bjb2RlIGV4dGVuZHMgQmxvY2tPcGNvZGUgaW1wbGVtZW50cyBFeGNlcHRpb25IYW5kbGVyIHtcbiAgcHVibGljIHR5cGUgPSBcInRyeVwiO1xuXG4gIHByaXZhdGUgX3RhZzogVGFnV3JhcHBlcjxVcGRhdGFibGVUYWc+O1xuXG4gIHByb3RlY3RlZCBib3VuZHM6IFVwZGF0YWJsZVRyYWNrZXI7XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFVwZGF0YWJsZVRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHN1cGVyKHN0YXJ0LCBlbmQsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLnRhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUoQ09OU1RBTlRfVEFHKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICB0aGlzLl90YWcuaW5uZXIudXBkYXRlKGNvbWJpbmVTbGljZSh0aGlzLmNoaWxkcmVuKSk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHZtLnRyeSh0aGlzLmNoaWxkcmVuLCB0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUV4Y2VwdGlvbigpIHtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBzdGFydCwgZHluYW1pY1Njb3BlLCBzdGFjaywgYnAgfSA9IHRoaXM7XG5cbiAgICBsZXQgZWxlbWVudFN0YWNrID0gRWxlbWVudFN0YWNrLnJlc3VtZShcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMsXG4gICAgICB0aGlzLmJvdW5kcy5yZXNldChlbnYpXG4gICAgKTtcblxuICAgIGxldCB2bSA9IG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gICAgbGV0IHJlc3VsdCA9IHZtLnJlc3VtZShzdGFydCwgc3RhY2suc25hcHNob3QoKSwgYnApO1xuXG4gICAgdGhpcy5jaGlsZHJlbiA9IHJlc3VsdC5vcGNvZGVzKCk7XG4gICAgdGhpcy5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIHRvSlNPTigpIDogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IGpzb24gPSBzdXBlci50b0pTT04oKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIudG9KU09OKCk7XG4gIH1cbn1cblxuY2xhc3MgTGlzdFJldmFsaWRhdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZSB7XG4gIHByaXZhdGUgbWFwOiBEaWN0PEJsb2NrT3Bjb2RlPjtcbiAgcHJpdmF0ZSB1cGRhdGluZzogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG5cbiAgcHJpdmF0ZSBkaWRJbnNlcnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkaWREZWxldGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wY29kZTogTGlzdEJsb2NrT3Bjb2RlLCBwcml2YXRlIG1hcmtlcjogU2ltcGxlLkNvbW1lbnQpIHtcbiAgICB0aGlzLm1hcCA9IG9wY29kZS5tYXA7XG4gICAgdGhpcy51cGRhdGluZyA9IG9wY29kZVsnY2hpbGRyZW4nXTtcbiAgfVxuXG4gIGluc2VydChrZXk6IHN0cmluZywgaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBtZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCBvcGNvZGUsIHVwZGF0aW5nIH0gPSB0aGlzO1xuICAgIGxldCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGw7XG4gICAgbGV0IHJlZmVyZW5jZTogT3B0aW9uPEJsb2NrT3Bjb2RlPiA9IG51bGw7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXTtcbiAgICAgIG5leHRTaWJsaW5nID0gcmVmZXJlbmNlWydib3VuZHMnXS5maXJzdE5vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dFNpYmxpbmcgPSB0aGlzLm1hcmtlcjtcbiAgICB9XG5cbiAgICBsZXQgdm0gPSBvcGNvZGUudm1Gb3JJbnNlcnRpb24obmV4dFNpYmxpbmcpO1xuICAgIGxldCB0cnlPcGNvZGU6IE9wdGlvbjxUcnlPcGNvZGU+ID0gbnVsbDtcblxuICAgIGxldCB7IHN0YXJ0LCBlbmQgfSA9IG9wY29kZTtcblxuICAgIHZtLmV4ZWN1dGUoc3RhcnQsIHZtID0+IHtcbiAgICAgIG1hcFtrZXldID0gdHJ5T3Bjb2RlID0gdm0uaXRlcmF0ZShzdGFydCwgZW5kLCBtZW1vLCBpdGVtLCB2bS51cGRhdGluZygpKTtcbiAgICB9KTtcblxuICAgIHRyeU9wY29kZSEuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG5cbiAgICB1cGRhdGluZy5pbnNlcnRCZWZvcmUodHJ5T3Bjb2RlISwgcmVmZXJlbmNlKTtcblxuICAgIHRoaXMuZGlkSW5zZXJ0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldGFpbihfa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4pIHtcbiAgfVxuXG4gIG1vdmUoa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCB1cGRhdGluZyB9ID0gdGhpcztcblxuICAgIGxldCBlbnRyeSA9IG1hcFtrZXldO1xuICAgIGxldCByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXSB8fCBudWxsO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgcmVmZXJlbmNlLmZpcnN0Tm9kZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgdGhpcy5tYXJrZXIpO1xuICAgIH1cblxuICAgIHVwZGF0aW5nLnJlbW92ZShlbnRyeSk7XG4gICAgdXBkYXRpbmcuaW5zZXJ0QmVmb3JlKGVudHJ5LCByZWZlcmVuY2UpO1xuICB9XG5cbiAgZGVsZXRlKGtleTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwIH0gPSB0aGlzO1xuICAgIGxldCBvcGNvZGUgPSBtYXBba2V5XTtcbiAgICBvcGNvZGUuZGlkRGVzdHJveSgpO1xuICAgIGNsZWFyKG9wY29kZSk7XG4gICAgdGhpcy51cGRhdGluZy5yZW1vdmUob3Bjb2RlKTtcbiAgICBkZWxldGUgbWFwW2tleV07XG5cbiAgICB0aGlzLmRpZERlbGV0ZSA9IHRydWU7XG4gIH1cblxuICBkb25lKCkge1xuICAgIHRoaXMub3Bjb2RlLmRpZEluaXRpYWxpemVDaGlsZHJlbih0aGlzLmRpZEluc2VydCB8fCB0aGlzLmRpZERlbGV0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCbG9ja09wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImxpc3QtYmxvY2tcIjtcbiAgcHVibGljIG1hcCA9IGRpY3Q8QmxvY2tPcGNvZGU+KCk7XG4gIHB1YmxpYyBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBwcml2YXRlIGxhc3RJdGVyYXRlZDogUmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBjb25zdHJ1Y3RvcihzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgc3RhdGU6IFZNU3RhdGUsIGJvdW5kczogVHJhY2tlciwgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+LCBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHN1cGVyKHN0YXJ0LCBlbmQsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgICBsZXQgX3RhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUoQ09OU1RBTlRfVEFHKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW2FydGlmYWN0cy50YWcsIF90YWddKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbihsaXN0RGlkQ2hhbmdlID0gdHJ1ZSkge1xuICAgIHRoaXMubGFzdEl0ZXJhdGVkID0gdGhpcy5hcnRpZmFjdHMudGFnLnZhbHVlKCk7XG5cbiAgICBpZiAobGlzdERpZENoYW5nZSkge1xuICAgICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgYXJ0aWZhY3RzLCBsYXN0SXRlcmF0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWFydGlmYWN0cy50YWcudmFsaWRhdGUobGFzdEl0ZXJhdGVkKSkge1xuICAgICAgbGV0IHsgYm91bmRzIH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgbGV0IG1hcmtlciA9IGRvbS5jcmVhdGVDb21tZW50KCcnKTtcbiAgICAgIGRvbS5pbnNlcnRBZnRlcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBtYXJrZXIsIGV4cGVjdChib3VuZHMubGFzdE5vZGUoKSwgXCJjYW4ndCBpbnNlcnQgYWZ0ZXIgYW4gZW1wdHkgYm91bmRzXCIpKTtcblxuICAgICAgbGV0IHRhcmdldCA9IG5ldyBMaXN0UmV2YWxpZGF0aW9uRGVsZWdhdGUodGhpcywgbWFya2VyKTtcbiAgICAgIGxldCBzeW5jaHJvbml6ZXIgPSBuZXcgSXRlcmF0b3JTeW5jaHJvbml6ZXIoeyB0YXJnZXQsIGFydGlmYWN0cyB9KTtcblxuICAgICAgc3luY2hyb25pemVyLnN5bmMoKTtcblxuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50KCkucmVtb3ZlQ2hpbGQobWFya2VyKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gbm93LXVwZGF0ZWQgdXBkYXRpbmcgb3Bjb2Rlc1xuICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgfVxuXG4gIHZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KTogVk0ge1xuICAgIGxldCB7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIGxldCBlbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2suZm9ySW5pdGlhbFJlbmRlcihcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpLFxuICAgICAgbmV4dFNpYmxpbmdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG4gICAgbGV0IG1hcCA9IHRoaXMubWFwO1xuXG4gICAgbGV0IGlubmVyID0gT2JqZWN0LmtleXMobWFwKS5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfTogJHttYXBba2V5XS5fZ3VpZH1gO1xuICAgIH0pLmpvaW4oXCIsIFwiKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICBkZXRhaWxzW1wibWFwXCJdID0gYHske2lubmVyfX1gO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuY2xhc3MgVXBkYXRpbmdWTUZyYW1lIHtcbiAgcHJpdmF0ZSBjdXJyZW50OiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdm06IFVwZGF0aW5nVk0sIHByaXZhdGUgb3BzOiBVcGRhdGluZ09wU2VxLCBwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IE9wdGlvbjxFeGNlcHRpb25IYW5kbGVyPikge1xuICAgIHRoaXMudm0gPSB2bTtcbiAgICB0aGlzLm9wcyA9IG9wcztcbiAgICB0aGlzLmN1cnJlbnQgPSBvcHMuaGVhZCgpO1xuICB9XG5cbiAgZ290byhvcDogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLmN1cnJlbnQgPSBvcDtcbiAgfVxuXG4gIG5leHRTdGF0ZW1lbnQoKTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgbGV0IHsgY3VycmVudCwgb3BzIH0gPSB0aGlzO1xuICAgIGlmIChjdXJyZW50KSB0aGlzLmN1cnJlbnQgPSBvcHMubmV4dE5vZGUoY3VycmVudCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuZXhjZXB0aW9uSGFuZGxlcikge1xuICAgICAgdGhpcy5leGNlcHRpb25IYW5kbGVyLmhhbmRsZUV4Y2VwdGlvbigpO1xuICAgIH1cbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxBQUFPLEFBQXFCLEFBQUssQUFBRSxBQUFJLEFBQUksQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUN6RSxBQUFPLEFBQUUsQUFBWSxBQUE2QixBQUFNLEFBQVksQUFBQzs7QUFDckUsQUFBTyxBQUFrQixBQUFLLEFBQUUsQUFBVSxBQUFRLEFBQUksQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQ3RGLEFBQU8sQUFHTCxBQUFvQixBQUdwQixBQUFPLEFBQ1AsQUFBTyxBQUVQLEFBQVksQUFFWixBQUFZLEFBQ1osQUFBWSxBQUNaLEFBQU8sQUFDUixBQUFNLEFBQW9CLEFBQUM7O0FBQzVCLEFBQU8sQUFBYyxBQUFjLEFBQWlCLEFBQU0sQUFBWSxBQUFDOztBQUt2RSxBQUFPLEFBQUUsQUFBRSxBQUFpQixBQUFlLEFBQUUsQUFBTSxBQUFVLEFBQUMsQUFFOUQsQUFBTSxBQUFDLEFBQU87Ozs7Ozs7QUFRWixnQkFBWSxBQUFnQixLQUFFLEVBQUUsQUFBZ0IsbUJBQUcsQUFBSyxBQUFFO0FBRmxELGFBQVUsYUFBMkIsQUFBSSxBQUFLLEFBQW1CLEFBQUM7QUFHeEUsQUFBSSxhQUFDLEFBQUcsTUFBRyxBQUFHLEFBQUM7QUFDZixBQUFJLGFBQUMsQUFBUyxZQUFHLEFBQUcsSUFBQyxBQUFTLEFBQUM7QUFDL0IsQUFBSSxhQUFDLEFBQUcsTUFBRyxBQUFHLElBQUMsQUFBTSxBQUFFLEFBQUM7QUFDeEIsQUFBSSxhQUFDLEFBQWdCLG1CQUFHLEFBQWdCLEFBQUMsQUFDM0M7QUFBQztBQUVELEFBQU8sWUFBQyxBQUFzQixTQUFFLEFBQXlCO0FBQ3ZELFlBQUksRUFBRSxBQUFVLEFBQUUsZUFBRyxBQUFJLEFBQUM7QUFFMUIsQUFBSSxhQUFDLEFBQUcsSUFBQyxBQUFPLFNBQUUsQUFBTyxBQUFDLEFBQUM7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QUcsQUFBRSxBQUFDO0FBQ2IsQUFBSSxhQUFDLEFBQUcsTUFBRyxBQUFHLEFBQUM7QUFDZixBQUFJLGFBQUMsQUFBTyxVQUFHLEFBQUcsSUFBQyxBQUFJLEFBQUUsQUFBQyxBQUM1QjtBQUFDO0FBRUQsQUFBSSxTQUFDLEFBQWtCO0FBQ3JCLEFBQUksYUFBQyxBQUFPLFVBQUcsQUFBRSxBQUFDLEFBQ3BCO0FBQUM7QUFFRCxBQUFhO0FBQ1gsWUFBSSxFQUFFLEFBQU8sU0FBRSxBQUFHLEFBQUUsUUFBRyxBQUFJLEFBQUM7QUFDNUIsQUFBRSxBQUFDLFlBQUMsQUFBTyxBQUFDLFNBQUMsQUFBSSxLQUFDLEFBQU8sVUFBRyxBQUFHLElBQUMsQUFBUSxTQUFDLEFBQU8sQUFBQyxBQUFDO0FBQ2xELEFBQU0sZUFBQyxBQUFPLEFBQUMsQUFDakI7QUFBQztBQUVELEFBQWU7QUFDYixBQUFFLEFBQUMsWUFBQyxBQUFJLEtBQUMsQUFBZ0IsQUFBQyxrQkFBQyxBQUFDO0FBQzFCLEFBQUksaUJBQUMsQUFBZ0IsaUJBQUMsQUFBZSxBQUFFLEFBQUMsQUFDMUM7QUFBQyxBQUNIO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjb3BlLCBEeW5hbWljU2NvcGUsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRGVzdHJveWFibGVCb3VuZHMsIGNsZWFyLCBtb3ZlIGFzIG1vdmVCb3VuZHMgfSBmcm9tICcuLi9ib3VuZHMnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrLCBUcmFja2VyLCBVcGRhdGFibGVUcmFja2VyIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPcHRpb24sIE9wYXF1ZSwgU3RhY2ssIExpbmtlZExpc3QsIERpY3QsIGRpY3QsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgUGF0aFJlZmVyZW5jZSxcbiAgSXRlcmF0aW9uQXJ0aWZhY3RzLFxuICBJdGVyYXRvclN5bmNocm9uaXplcixcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZSxcblxuICAvLyBUYWdzXG4gIGNvbWJpbmUsXG4gIFJldmlzaW9uLFxuICBVcGRhdGFibGVUYWcsXG4gIFRhZ1dyYXBwZXIsXG4gIGNvbWJpbmVTbGljZSxcbiAgQ09OU1RBTlRfVEFHLFxuICBJTklUSUFMXG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSwgVXBkYXRpbmdPcFNlcSB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQvY29uc3RhbnRzJztcbmltcG9ydCB7IERPTUNoYW5nZXMgfSBmcm9tICcuLi9kb20vaGVscGVyJztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuLi9kb20vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCBWTSwgeyBDYXB0dXJlZFN0YWNrLCBFdmFsdWF0aW9uU3RhY2sgfSBmcm9tICcuL2FwcGVuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwZGF0aW5nVk0ge1xuICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudDtcbiAgcHVibGljIGRvbTogRE9NQ2hhbmdlcztcbiAgcHVibGljIGFsd2F5c1JldmFsaWRhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25zdGFudHM6IENvbnN0YW50cztcblxuICBwcml2YXRlIGZyYW1lU3RhY2s6IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4gPSBuZXcgU3RhY2s8VXBkYXRpbmdWTUZyYW1lPigpO1xuXG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIHsgYWx3YXlzUmV2YWxpZGF0ZSA9IGZhbHNlIH0pIHtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLmNvbnN0YW50cyA9IGVudi5jb25zdGFudHM7XG4gICAgdGhpcy5kb20gPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5hbHdheXNSZXZhbGlkYXRlID0gYWx3YXlzUmV2YWxpZGF0ZTtcbiAgfVxuXG4gIGV4ZWN1dGUob3Bjb2RlczogVXBkYXRpbmdPcFNlcSwgaGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlcikge1xuICAgIGxldCB7IGZyYW1lU3RhY2sgfSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyeShvcGNvZGVzLCBoYW5kbGVyKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoZnJhbWVTdGFjay5pc0VtcHR5KCkpIGJyZWFrO1xuXG4gICAgICBsZXQgb3Bjb2RlID0gdGhpcy5mcmFtZS5uZXh0U3RhdGVtZW50KCk7XG5cbiAgICAgIGlmIChvcGNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGZyYW1lKCkge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5mcmFtZVN0YWNrLmN1cnJlbnQsICdidWc6IGV4cGVjdGVkIGEgZnJhbWUnKTtcbiAgfVxuXG4gIGdvdG8ob3A6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy5mcmFtZS5nb3RvKG9wKTtcbiAgfVxuXG4gIHRyeShvcHM6IFVwZGF0aW5nT3BTZXEsIGhhbmRsZXI6IE9wdGlvbjxFeGNlcHRpb25IYW5kbGVyPikge1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKG5ldyBVcGRhdGluZ1ZNRnJhbWUodGhpcywgb3BzLCBoYW5kbGVyKSk7XG4gIH1cblxuICB0aHJvdygpIHtcbiAgICB0aGlzLmZyYW1lLmhhbmRsZUV4Y2VwdGlvbigpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICBvcGNvZGUuZXZhbHVhdGUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGNlcHRpb25IYW5kbGVyIHtcbiAgaGFuZGxlRXhjZXB0aW9uKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVk1TdGF0ZSB7XG4gIGVudjogRW52aXJvbm1lbnQ7XG4gIHNjb3BlOiBTY29wZTtcbiAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGU7XG4gIHN0YWNrOiBDYXB0dXJlZFN0YWNrO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSBpbXBsZW1lbnRzIERlc3Ryb3lhYmxlQm91bmRzIHtcbiAgcHVibGljIHR5cGUgPSBcImJsb2NrXCI7XG4gIHB1YmxpYyBuZXh0ID0gbnVsbDtcbiAgcHVibGljIHByZXYgPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+O1xuXG4gIHByb3RlY3RlZCBlbnY6IEVudmlyb25tZW50O1xuICBwcm90ZWN0ZWQgc2NvcGU6IFNjb3BlO1xuICBwcm90ZWN0ZWQgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGU7XG4gIHByb3RlY3RlZCBzdGFjazogQ2FwdHVyZWRTdGFjaztcbiAgcHJvdGVjdGVkIGJvdW5kczogRGVzdHJveWFibGVCb3VuZHM7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHN0YXJ0OiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IERlc3Ryb3lhYmxlQm91bmRzLCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4pIHtcbiAgICBzdXBlcigpO1xuICAgIGxldCB7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgc3RhY2sgfSA9IHN0YXRlO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5keW5hbWljU2NvcGUgPSBkeW5hbWljU2NvcGU7XG4gICAgdGhpcy5zdGFjayA9IHN0YWNrO1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG5cbiAgYWJzdHJhY3QgZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk6IHZvaWQ7XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICB9XG5cbiAgZmlyc3ROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB2bS50cnkodGhpcy5jaGlsZHJlbiwgbnVsbCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuYm91bmRzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGRpZERlc3Ryb3koKSB7XG4gICAgdGhpcy5lbnYuZGlkRGVzdHJveSh0aGlzLmJvdW5kcyk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBkZXRhaWxzID0gZGljdDxzdHJpbmc+KCk7XG5cbiAgICBkZXRhaWxzW1wiZ3VpZFwiXSA9IGAke3RoaXMuX2d1aWR9YDtcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5tYXAob3AgPT4gb3AudG9KU09OKCkpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJ5T3Bjb2RlIGV4dGVuZHMgQmxvY2tPcGNvZGUgaW1wbGVtZW50cyBFeGNlcHRpb25IYW5kbGVyIHtcbiAgcHVibGljIHR5cGUgPSBcInRyeVwiO1xuXG4gIHByaXZhdGUgX3RhZzogVGFnV3JhcHBlcjxVcGRhdGFibGVUYWc+O1xuXG4gIHByb3RlY3RlZCBib3VuZHM6IFVwZGF0YWJsZVRyYWNrZXI7XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IG51bWJlciwgc3RhdGU6IFZNU3RhdGUsIGJvdW5kczogVXBkYXRhYmxlVHJhY2tlciwgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KSB7XG4gICAgc3VwZXIoc3RhcnQsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLnRhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUoQ09OU1RBTlRfVEFHKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICB0aGlzLl90YWcuaW5uZXIudXBkYXRlKGNvbWJpbmVTbGljZSh0aGlzLmNoaWxkcmVuKSk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHZtLnRyeSh0aGlzLmNoaWxkcmVuLCB0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUV4Y2VwdGlvbigpIHtcbiAgICBsZXQgeyBlbnYsIGJvdW5kcywgY2hpbGRyZW4sIHNjb3BlLCBkeW5hbWljU2NvcGUsIHN0YXJ0LCBzdGFjaywgcHJldiwgbmV4dCB9ID0gdGhpcztcblxuICAgIGNoaWxkcmVuLmNsZWFyKCk7XG5cbiAgICBsZXQgZWxlbWVudFN0YWNrID0gRWxlbWVudFN0YWNrLnJlc3VtZShcbiAgICAgIGVudixcbiAgICAgIGJvdW5kcyxcbiAgICAgIGJvdW5kcy5yZXNldChlbnYpXG4gICAgKTtcblxuICAgIGxldCB2bSA9IG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG5cbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKTtcblxuICAgIHZtLmV4ZWN1dGUoc3RhcnQsIHZtID0+IHtcbiAgICAgIHZtLnN0YWNrID0gRXZhbHVhdGlvblN0YWNrLnJlc3RvcmUoc3RhY2spO1xuICAgICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKHVwZGF0aW5nKTtcbiAgICAgIHZtLnVwZGF0ZVdpdGgodGhpcyk7XG4gICAgICB2bS51cGRhdGluZ09wY29kZVN0YWNrLnB1c2goY2hpbGRyZW4pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcmV2ID0gcHJldjtcbiAgICB0aGlzLm5leHQgPSBuZXh0O1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQganNvbiA9IHN1cGVyLnRvSlNPTigpO1xuXG4gICAgbGV0IGRldGFpbHMgPSBqc29uW1wiZGV0YWlsc1wiXTtcbiAgICBpZiAoIWRldGFpbHMpIHtcbiAgICAgIGRldGFpbHMgPSBqc29uW1wiZGV0YWlsc1wiXSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgfVxufVxuXG5jbGFzcyBMaXN0UmV2YWxpZGF0aW9uRGVsZWdhdGUgaW1wbGVtZW50cyBJdGVyYXRvclN5bmNocm9uaXplckRlbGVnYXRlIHtcbiAgcHJpdmF0ZSBtYXA6IERpY3Q8QmxvY2tPcGNvZGU+O1xuICBwcml2YXRlIHVwZGF0aW5nOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPjtcblxuICBwcml2YXRlIGRpZEluc2VydCA9IGZhbHNlO1xuICBwcml2YXRlIGRpZERlbGV0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3Bjb2RlOiBMaXN0QmxvY2tPcGNvZGUsIHByaXZhdGUgbWFya2VyOiBTaW1wbGUuQ29tbWVudCkge1xuICAgIHRoaXMubWFwID0gb3Bjb2RlLm1hcDtcbiAgICB0aGlzLnVwZGF0aW5nID0gb3Bjb2RlWydjaGlsZHJlbiddO1xuICB9XG5cbiAgaW5zZXJ0KGtleTogc3RyaW5nLCBpdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIG1lbW86IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgYmVmb3JlOiBzdHJpbmcpIHtcbiAgICBsZXQgeyBtYXAsIG9wY29kZSwgdXBkYXRpbmcgfSA9IHRoaXM7XG4gICAgbGV0IG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+ID0gbnVsbDtcbiAgICBsZXQgcmVmZXJlbmNlOiBPcHRpb248QmxvY2tPcGNvZGU+ID0gbnVsbDtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIHJlZmVyZW5jZSA9IG1hcFtiZWZvcmVdO1xuICAgICAgbmV4dFNpYmxpbmcgPSByZWZlcmVuY2VbJ2JvdW5kcyddLmZpcnN0Tm9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0U2libGluZyA9IHRoaXMubWFya2VyO1xuICAgIH1cblxuICAgIGxldCB2bSA9IG9wY29kZS52bUZvckluc2VydGlvbihuZXh0U2libGluZyk7XG4gICAgbGV0IHRyeU9wY29kZTogT3B0aW9uPFRyeU9wY29kZT4gPSBudWxsO1xuXG4gICAgbGV0IHsgc3RhcnQgfSA9IG9wY29kZTtcblxuICAgIHZtLmV4ZWN1dGUoc3RhcnQsIHZtID0+IHtcbiAgICAgIG1hcFtrZXldID0gdHJ5T3Bjb2RlID0gdm0uaXRlcmF0ZShtZW1vLCBpdGVtKTtcbiAgICAgIHZtLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaChuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKSk7XG4gICAgICB2bS51cGRhdGVXaXRoKHRyeU9wY29kZSk7XG4gICAgICB2bS51cGRhdGluZ09wY29kZVN0YWNrLnB1c2godHJ5T3Bjb2RlLmNoaWxkcmVuKTtcbiAgICB9KTtcblxuICAgIHVwZGF0aW5nLmluc2VydEJlZm9yZSh0cnlPcGNvZGUhLCByZWZlcmVuY2UpO1xuXG4gICAgdGhpcy5kaWRJbnNlcnQgPSB0cnVlO1xuICB9XG5cbiAgcmV0YWluKF9rZXk6IHN0cmluZywgX2l0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgX21lbW86IFBhdGhSZWZlcmVuY2U8T3BhcXVlPikge1xuICB9XG5cbiAgbW92ZShrZXk6IHN0cmluZywgX2l0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgX21lbW86IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgYmVmb3JlOiBzdHJpbmcpIHtcbiAgICBsZXQgeyBtYXAsIHVwZGF0aW5nIH0gPSB0aGlzO1xuXG4gICAgbGV0IGVudHJ5ID0gbWFwW2tleV07XG4gICAgbGV0IHJlZmVyZW5jZSA9IG1hcFtiZWZvcmVdIHx8IG51bGw7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBtb3ZlQm91bmRzKGVudHJ5LCByZWZlcmVuY2UuZmlyc3ROb2RlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb3ZlQm91bmRzKGVudHJ5LCB0aGlzLm1hcmtlcik7XG4gICAgfVxuXG4gICAgdXBkYXRpbmcucmVtb3ZlKGVudHJ5KTtcbiAgICB1cGRhdGluZy5pbnNlcnRCZWZvcmUoZW50cnksIHJlZmVyZW5jZSk7XG4gIH1cblxuICBkZWxldGUoa2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgeyBtYXAgfSA9IHRoaXM7XG4gICAgbGV0IG9wY29kZSA9IG1hcFtrZXldO1xuICAgIG9wY29kZS5kaWREZXN0cm95KCk7XG4gICAgY2xlYXIob3Bjb2RlKTtcbiAgICB0aGlzLnVwZGF0aW5nLnJlbW92ZShvcGNvZGUpO1xuICAgIGRlbGV0ZSBtYXBba2V5XTtcblxuICAgIHRoaXMuZGlkRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGRvbmUoKSB7XG4gICAgdGhpcy5vcGNvZGUuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKHRoaXMuZGlkSW5zZXJ0IHx8IHRoaXMuZGlkRGVsZXRlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEJsb2NrT3Bjb2RlIGV4dGVuZHMgQmxvY2tPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwibGlzdC1ibG9ja1wiO1xuICBwdWJsaWMgbWFwID0gZGljdDxCbG9ja09wY29kZT4oKTtcbiAgcHVibGljIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzO1xuXG4gIHByaXZhdGUgbGFzdEl0ZXJhdGVkOiBSZXZpc2lvbiA9IElOSVRJQUw7XG4gIHByaXZhdGUgX3RhZzogVGFnV3JhcHBlcjxVcGRhdGFibGVUYWc+O1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPiwgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHMpIHtcbiAgICBzdXBlcihzdGFydCwgc3RhdGUsIGJvdW5kcywgY2hpbGRyZW4pO1xuICAgIHRoaXMuYXJ0aWZhY3RzID0gYXJ0aWZhY3RzO1xuICAgIGxldCBfdGFnID0gdGhpcy5fdGFnID0gVXBkYXRhYmxlVGFnLmNyZWF0ZShDT05TVEFOVF9UQUcpO1xuICAgIHRoaXMudGFnID0gY29tYmluZShbYXJ0aWZhY3RzLnRhZywgX3RhZ10pO1xuICB9XG5cbiAgZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKGxpc3REaWRDaGFuZ2UgPSB0cnVlKSB7XG4gICAgdGhpcy5sYXN0SXRlcmF0ZWQgPSB0aGlzLmFydGlmYWN0cy50YWcudmFsdWUoKTtcblxuICAgIGlmIChsaXN0RGlkQ2hhbmdlKSB7XG4gICAgICB0aGlzLl90YWcuaW5uZXIudXBkYXRlKGNvbWJpbmVTbGljZSh0aGlzLmNoaWxkcmVuKSk7XG4gICAgfVxuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBhcnRpZmFjdHMsIGxhc3RJdGVyYXRlZCB9ID0gdGhpcztcblxuICAgIGlmICghYXJ0aWZhY3RzLnRhZy52YWxpZGF0ZShsYXN0SXRlcmF0ZWQpKSB7XG4gICAgICBsZXQgeyBib3VuZHMgfSA9IHRoaXM7XG4gICAgICBsZXQgeyBkb20gfSA9IHZtO1xuXG4gICAgICBsZXQgbWFya2VyID0gZG9tLmNyZWF0ZUNvbW1lbnQoJycpO1xuICAgICAgZG9tLmluc2VydEFmdGVyKGJvdW5kcy5wYXJlbnRFbGVtZW50KCksIG1hcmtlciwgZXhwZWN0KGJvdW5kcy5sYXN0Tm9kZSgpLCBcImNhbid0IGluc2VydCBhZnRlciBhbiBlbXB0eSBib3VuZHNcIikpO1xuXG4gICAgICBsZXQgdGFyZ2V0ID0gbmV3IExpc3RSZXZhbGlkYXRpb25EZWxlZ2F0ZSh0aGlzLCBtYXJrZXIpO1xuICAgICAgbGV0IHN5bmNocm9uaXplciA9IG5ldyBJdGVyYXRvclN5bmNocm9uaXplcih7IHRhcmdldCwgYXJ0aWZhY3RzIH0pO1xuXG4gICAgICBzeW5jaHJvbml6ZXIuc3luYygpO1xuXG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQoKS5yZW1vdmVDaGlsZChtYXJrZXIpO1xuICAgIH1cblxuICAgIC8vIFJ1biBub3ctdXBkYXRlZCB1cGRhdGluZyBvcGNvZGVzXG4gICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICB9XG5cbiAgdm1Gb3JJbnNlcnRpb24obmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pOiBWTSB7XG4gICAgbGV0IHsgZW52LCBzY29wZSwgZHluYW1pY1Njb3BlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5mb3JJbml0aWFsUmVuZGVyKFxuICAgICAgdGhpcy5lbnYsXG4gICAgICB0aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCksXG4gICAgICBuZXh0U2libGluZ1xuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IFZNKGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgZWxlbWVudFN0YWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIDogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IGpzb24gPSBzdXBlci50b0pTT04oKTtcbiAgICBsZXQgbWFwID0gdGhpcy5tYXA7XG5cbiAgICBsZXQgaW5uZXIgPSBPYmplY3Qua2V5cyhtYXApLm1hcChrZXkgPT4ge1xuICAgICAgcmV0dXJuIGAke0pTT04uc3RyaW5naWZ5KGtleSl9OiAke21hcFtrZXldLl9ndWlkfWA7XG4gICAgfSkuam9pbihcIiwgXCIpO1xuXG4gICAgbGV0IGRldGFpbHMgPSBqc29uW1wiZGV0YWlsc1wiXTtcbiAgICBpZiAoIWRldGFpbHMpIHtcbiAgICAgIGRldGFpbHMgPSBqc29uW1wiZGV0YWlsc1wiXSA9IHt9O1xuICAgIH1cblxuICAgIGRldGFpbHNbXCJtYXBcIl0gPSBgeyR7aW5uZXJ9fWA7XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxufVxuXG5jbGFzcyBVcGRhdGluZ1ZNRnJhbWUge1xuICBwcml2YXRlIGN1cnJlbnQ6IE9wdGlvbjxVcGRhdGluZ09wY29kZT47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2bTogVXBkYXRpbmdWTSwgcHJpdmF0ZSBvcHM6IFVwZGF0aW5nT3BTZXEsIHByaXZhdGUgZXhjZXB0aW9uSGFuZGxlcjogT3B0aW9uPEV4Y2VwdGlvbkhhbmRsZXI+KSB7XG4gICAgdGhpcy52bSA9IHZtO1xuICAgIHRoaXMub3BzID0gb3BzO1xuICAgIHRoaXMuY3VycmVudCA9IG9wcy5oZWFkKCk7XG4gIH1cblxuICBnb3RvKG9wOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMuY3VycmVudCA9IG9wO1xuICB9XG5cbiAgbmV4dFN0YXRlbWVudCgpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+IHtcbiAgICBsZXQgeyBjdXJyZW50LCBvcHMgfSA9IHRoaXM7XG4gICAgaWYgKGN1cnJlbnQpIHRoaXMuY3VycmVudCA9IG9wcy5uZXh0Tm9kZShjdXJyZW50KTtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIGhhbmRsZUV4Y2VwdGlvbigpIHtcbiAgICBpZiAodGhpcy5leGNlcHRpb25IYW5kbGVyKSB7XG4gICAgICB0aGlzLmV4Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXhjZXB0aW9uKCk7XG4gICAgfVxuICB9XG59XG4iXX0=

@@ -6,3 +6,3 @@ 'use strict';

});
exports.ConcreteBounds = exports.ElementStack = exports.Simple = exports.insertHTMLBefore = exports.isWhitespace = exports.DOMTreeConstruction = exports.IDOMChanges = exports.DOMChanges = exports.isComponentDefinition = exports.ComponentDefinition = exports.PartialDefinition = exports.Environment = exports.Scope = exports.isSafeString = exports.RenderResult = exports.UpdatingVM = exports.compileStatement = exports.CompilableTemplate = exports.ClientSide = exports.compileExpression = exports.compileList = exports.InlineMacros = exports.BlockMacros = exports.getDynamicVar = exports.resetDebuggerCallback = exports.setDebuggerCallback = exports.normalizeTextValue = exports.debugSlice = exports.readDOMAttr = exports.defaultPropertyManagers = exports.defaultAttributeManagers = exports.defaultManagers = exports.INPUT_VALUE_PROPERTY_MANAGER = exports.PropertyManager = exports.AttributeManager = exports.IAttributeManager = exports.CompiledDynamicTemplate = exports.CompiledStaticTemplate = exports.compileLayout = exports.OpcodeBuilderDSL = exports.ConditionalReference = exports.PrimitiveReference = exports.UNDEFINED_REFERENCE = exports.NULL_REFERENCE = exports.templateFactory = undefined;
exports.ConcreteBounds = exports.ElementStack = exports.Simple = exports.insertHTMLBefore = exports.isWhitespace = exports.DOMTreeConstruction = exports.IDOMChanges = exports.DOMChanges = exports.isComponentDefinition = exports.ComponentDefinition = exports.PartialDefinition = exports.Environment = exports.Scope = exports.isSafeString = exports.RenderResult = exports.UpdatingVM = exports.compileStatement = exports.CompilableTemplate = exports.ClientSide = exports.compileExpression = exports.compileList = exports.InlineMacros = exports.BlockMacros = exports.getDynamicVar = exports.resetDebuggerCallback = exports.setDebuggerCallback = exports.normalizeTextValue = exports.debugSlice = exports.Register = exports.readDOMAttr = exports.defaultPropertyManagers = exports.defaultAttributeManagers = exports.defaultManagers = exports.INPUT_VALUE_PROPERTY_MANAGER = exports.PropertyManager = exports.AttributeManager = exports.IAttributeManager = exports.CompiledDynamicTemplate = exports.CompiledStaticTemplate = exports.compileLayout = exports.OpcodeBuilderDSL = exports.ConditionalReference = exports.PrimitiveReference = exports.UNDEFINED_REFERENCE = exports.NULL_REFERENCE = exports.templateFactory = undefined;

@@ -131,2 +131,8 @@ var _template = require('./lib/template');

Object.defineProperty(exports, 'Register', {
enumerable: true,
get: function () {
return _opcodes.Register;
}
});
Object.defineProperty(exports, 'debugSlice', {

@@ -345,2 +351,2 @@ enumerable: true,

exports.Simple = Simple;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7NkNBRVMsQUFBTyxBQUFJLEFBQWUsQUFBNkIsQUFBTSxBQUFnQixBQUFDLEFBRXZGLEFBQU87Ozs7Ozs7Ozt1QkFBRSxBQUFjOzs7Ozs7dUJBQUUsQUFBbUI7Ozs7Ozt1QkFBRSxBQUFrQjs7Ozs7O3VCQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRWpILEFBQU87Ozs7Ozs7Ozs0Q0FDSixBQUFPLEFBQUksQUFBZ0IsQUFDN0IsQUFBTSxBQUFnQyxBQUFDLEFBRXhDLEFBQU87Ozs7Ozs7OztxQkFFTCxBQUFhLEFBQ2QsQUFBTSxBQUFnQixBQUFDLEFBT3hCLEFBQU87Ozs7Ozs7OzttQkFDTCxBQUFzQjs7Ozs7O21CQUN0QixBQUF1QixBQUd4QixBQUFNLEFBQXVCLEFBQUMsQUFFL0IsQUFBTzs7Ozs7Ozs7OzhCQUNMLEFBQWdCLEFBQUksQUFBaUI7Ozs7Ozs4QkFDckMsQUFBZ0I7Ozs7Ozs4QkFDaEIsQUFBZTs7Ozs7OzhCQUNmLEFBQTRCOzs7Ozs7OEJBQzVCLEFBQWU7Ozs7Ozs4QkFDZixBQUF3Qjs7Ozs7OzhCQUN4QixBQUF1Qjs7Ozs7OzhCQUN2QixBQUFXLEFBQ1osQUFBTSxBQUE4QixBQUFDLEFBRXRDLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFVLEFBQ1gsQUFBTSxBQUFlLEFBQUMsQUFFdkIsQUFBTzs7Ozs7Ozs7O29CQUNMLEFBQWtCLEFBQ25CLEFBQU0sQUFBZ0MsQUFBQyxBQUV4QyxBQUFPOzs7Ozs7Ozs7cUJBQ0wsQUFBbUI7Ozs7OztxQkFDbkIsQUFBcUIsQUFFdEIsQUFBTSxBQUFpQyxBQUFDLEFBRXpDLEFBQU87Ozs7Ozs7OztrREFDTCxBQUFPLEFBQUksQUFBYSxBQUN6QixBQUFNLEFBQStCLEFBQUMsQUFFdkMsQUFBTzs7Ozs7Ozs7O3NCQUNMLEFBQU0sQUFBSSxBQUFXOzs7Ozs7c0JBQ3JCLEFBQU8sQUFBSSxBQUFZOzs7Ozs7c0JBR3ZCLEFBQVc7Ozs7OztzQkFDWCxBQUFJLEFBQUksQUFBaUIsQUFDMUIsQUFBTSxBQUF3QixBQUFDLEFBRWhDLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFVOzs7Ozs7b0JBQ1YsQUFBa0I7Ozs7OztvQkFLbEIsQUFBZ0IsQUFDakIsQUFBTSxBQUFlLEFBQUMsQUFFdkIsQUFBTzs7Ozs7Ozs7O2VBQWtCLEFBQVU7Ozs7OztlQUFFLEFBQVksQUFBa0IsQUFBTSxBQUFVLEFBQUMsQUFXcEYsQUFBTzs7Ozs7Ozs7O21CQUFjLEFBQVksQUFBRSxBQUFNLEFBQWMsQUFBQyxBQUV4RCxBQUFPOzs7Ozs7Ozs7d0JBQ0wsQUFBSzs7Ozs7O2dEQUNMLEFBQU8sQUFBSSxBQUFXLEFBR3ZCLEFBQU0sQUFBbUIsQUFBQyxBQUUzQixBQUFPOzs7Ozs7Ozs7b0JBQ0wsQUFBaUIsQUFDbEIsQUFBTSxBQUFlLEFBQUMsQUFFdkIsQUFBTzs7Ozs7Ozs7O3VCQUlMLEFBQW1COzs7Ozs7dUJBSW5CLEFBQXFCLEFBQ3RCLEFBQU0sQUFBNEIsQUFBQyxBQU1wQyxBQUFPOzs7Ozs7Ozs7MkNBQUUsQUFBTyxBQUFJLEFBQVU7Ozs7OzttQkFBRSxBQUFVLEFBQUksQUFBVzs7Ozs7O21CQUFFLEFBQW1COzs7Ozs7bUJBQUUsQUFBWTs7Ozs7O21CQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFrQixBQUFDOzs7Ozs7Ozs7cUJBR2hJLEFBQVksQUFBcUIsQUFBTSxBQUFlLEFBQUMsQUFDaEUsQUFBTzs7Ozs7Ozs7O21CQUFxQixBQUFjLEFBQUUsQUFBTSxBQUFjLEFBQUM7Ozs7QUF0SGpFLEFBQU8sQUFBaUIsQUFBQyxBQUV6QixBQUFPOztBQWlIUCxBQUFROztJQUFLLEFBQU0sQUFBTSxBQUFzQixBQUFDLEFBQ2hELEFBQU87Ozs7OztRQUFFLEFBQU0sQUFBRSxBQUFDLEFBQ2xCLEFBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4vbGliL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUnO1xuXG5leHBvcnQgeyBOVUxMX1JFRkVSRU5DRSwgVU5ERUZJTkVEX1JFRkVSRU5DRSwgUHJpbWl0aXZlUmVmZXJlbmNlLCBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4vbGliL3JlZmVyZW5jZXMnO1xuXG5leHBvcnQge1xuICAgZGVmYXVsdCBhcyBPcGNvZGVCdWlsZGVyRFNMXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBpbGFibGVMYXlvdXQsXG4gIGNvbXBpbGVMYXlvdXRcbn0gZnJvbSAnLi9saWIvY29tcGlsZXInO1xuXG5leHBvcnQge1xuICBDb21wb25lbnRCdWlsZGVyLFxuICBDb21wb25lbnRBcmdzXG59IGZyb20gJy4vbGliL29wY29kZS1idWlsZGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZSxcbiAgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsXG4gIENvbXBpbGVkRHluYW1pY0Jsb2NrLFxuICBDb21waWxlZER5bmFtaWNQcm9ncmFtXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2Jsb2Nrcyc7XG5cbmV4cG9ydCB7XG4gIEF0dHJpYnV0ZU1hbmFnZXIgYXMgSUF0dHJpYnV0ZU1hbmFnZXIsXG4gIEF0dHJpYnV0ZU1hbmFnZXIsXG4gIFByb3BlcnR5TWFuYWdlcixcbiAgSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUixcbiAgZGVmYXVsdE1hbmFnZXJzLFxuICBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnMsXG4gIGRlZmF1bHRQcm9wZXJ0eU1hbmFnZXJzLFxuICByZWFkRE9NQXR0clxufSBmcm9tICcuL2xpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcblxuZXhwb3J0IHtcbiAgZGVidWdTbGljZVxufSBmcm9tICcuL2xpYi9vcGNvZGVzJztcblxuZXhwb3J0IHtcbiAgbm9ybWFsaXplVGV4dFZhbHVlXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvY29udGVudCc7XG5cbmV4cG9ydCB7XG4gIHNldERlYnVnZ2VyQ2FsbGJhY2ssXG4gIHJlc2V0RGVidWdnZXJDYWxsYmFjayxcbiAgRGVidWdDYWxsYmFja1xufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2RlYnVnZ2VyJztcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBnZXREeW5hbWljVmFyXG59IGZyb20gJy4vbGliL2hlbHBlcnMvZ2V0LWR5bmFtaWMtdmFyJztcblxuZXhwb3J0IHtcbiAgQmxvY2tzIGFzIEJsb2NrTWFjcm9zLFxuICBJbmxpbmVzIGFzIElubGluZU1hY3JvcyxcbiAgQmxvY2tNYWNybyxcbiAgTWlzc2luZ0Jsb2NrTWFjcm8sXG4gIGNvbXBpbGVMaXN0LFxuICBleHByIGFzIGNvbXBpbGVFeHByZXNzaW9uXG59IGZyb20gJy4vbGliL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQge1xuICBDbGllbnRTaWRlLFxuICBDb21waWxhYmxlVGVtcGxhdGUsXG4gIFNjYW5uZWRCbG9jayxcbiAgU2Nhbm5lZFByb2dyYW0sXG4gIEJsb2NrLFxuICBQcm9ncmFtLFxuICBjb21waWxlU3RhdGVtZW50XG59IGZyb20gJy4vbGliL3NjYW5uZXInO1xuXG5leHBvcnQgeyBQdWJsaWNWTSBhcyBWTSwgVXBkYXRpbmdWTSwgUmVuZGVyUmVzdWx0LCBJdGVyYXRvclJlc3VsdCB9IGZyb20gJy4vbGliL3ZtJztcblxuZXhwb3J0IHtcbiAgSUFyZ3VtZW50cyBhcyBBcmd1bWVudHMsXG4gIElDYXB0dXJlZEFyZ3VtZW50cyBhcyBDYXB0dXJlZEFyZ3VtZW50cyxcbiAgSVBvc2l0aW9uYWxBcmd1bWVudHMgYXMgUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyBhcyBDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHMsXG4gIElOYW1lZEFyZ3VtZW50cyBhcyBOYW1lZEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkTmFtZWRBcmd1bWVudHMgYXMgQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyxcbn0gZnJvbSAnLi9saWIvdm0vYXJndW1lbnRzJztcblxuZXhwb3J0IHsgU2FmZVN0cmluZywgaXNTYWZlU3RyaW5nIH0gZnJvbSAnLi9saWIvdXBzZXJ0JztcblxuZXhwb3J0IHtcbiAgU2NvcGUsXG4gIGRlZmF1bHQgYXMgRW52aXJvbm1lbnQsXG4gIEhlbHBlcixcbiAgRHluYW1pY1Njb3BlLFxufSBmcm9tICcuL2xpYi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCB7XG4gIFBhcnRpYWxEZWZpbml0aW9uXG59IGZyb20gJy4vbGliL3BhcnRpYWwnO1xuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudENsYXNzLFxuICBDb21wb25lbnRNYW5hZ2VyLFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRMYXlvdXRCdWlsZGVyLFxuICBDb21wb25lbnRBdHRyc0J1aWxkZXIsXG4gIFByZXBhcmVkQXJndW1lbnRzLFxuICBpc0NvbXBvbmVudERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvY29tcG9uZW50L2ludGVyZmFjZXMnO1xuXG5leHBvcnQge1xuICBNb2RpZmllck1hbmFnZXJcbn0gZnJvbSAnLi9saWIvbW9kaWZpZXIvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgRE9NQ2hhbmdlcywgRE9NQ2hhbmdlcyBhcyBJRE9NQ2hhbmdlcywgRE9NVHJlZUNvbnN0cnVjdGlvbiwgaXNXaGl0ZXNwYWNlLCBpbnNlcnRIVE1MQmVmb3JlIH0gZnJvbSAnLi9saWIvZG9tL2hlbHBlcic7XG5pbXBvcnQgICogYXMgU2ltcGxlIGZyb20gJy4vbGliL2RvbS9pbnRlcmZhY2VzJztcbmV4cG9ydCB7IFNpbXBsZSB9O1xuZXhwb3J0IHsgRWxlbWVudFN0YWNrLCBFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4vbGliL2J1aWxkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMsIENvbmNyZXRlQm91bmRzIH0gZnJvbSAnLi9saWIvYm91bmRzJztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7NkNBRVMsQUFBTyxBQUFJLEFBQWUsQUFBNkIsQUFBTSxBQUFnQixBQUFDLEFBRXZGLEFBQU87Ozs7Ozs7Ozt1QkFBRSxBQUFjOzs7Ozs7dUJBQUUsQUFBbUI7Ozs7Ozt1QkFBRSxBQUFrQjs7Ozs7O3VCQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRWpILEFBQU87Ozs7Ozs7Ozs0Q0FDSixBQUFPLEFBQUksQUFBZ0IsQUFDN0IsQUFBTSxBQUFnQyxBQUFDLEFBRXhDLEFBQU87Ozs7Ozs7OztxQkFFTCxBQUFhLEFBQ2QsQUFBTSxBQUFnQixBQUFDLEFBT3hCLEFBQU87Ozs7Ozs7OzttQkFDTCxBQUFzQjs7Ozs7O21CQUN0QixBQUF1QixBQUd4QixBQUFNLEFBQXVCLEFBQUMsQUFFL0IsQUFBTzs7Ozs7Ozs7OzhCQUNMLEFBQWdCLEFBQUksQUFBaUI7Ozs7Ozs4QkFDckMsQUFBZ0I7Ozs7Ozs4QkFDaEIsQUFBZTs7Ozs7OzhCQUNmLEFBQTRCOzs7Ozs7OEJBQzVCLEFBQWU7Ozs7Ozs4QkFDZixBQUF3Qjs7Ozs7OzhCQUN4QixBQUF1Qjs7Ozs7OzhCQUN2QixBQUFXLEFBQ1osQUFBTSxBQUE4QixBQUFDLEFBRXRDLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFROzs7Ozs7b0JBQ1IsQUFBVSxBQUNYLEFBQU0sQUFBZSxBQUFDLEFBRXZCLEFBQU87Ozs7Ozs7OztvQkFDTCxBQUFrQixBQUNuQixBQUFNLEFBQWdDLEFBQUMsQUFFeEMsQUFBTzs7Ozs7Ozs7O3FCQUNMLEFBQW1COzs7Ozs7cUJBQ25CLEFBQXFCLEFBRXRCLEFBQU0sQUFBaUMsQUFBQyxBQUV6QyxBQUFPOzs7Ozs7Ozs7a0RBQ0wsQUFBTyxBQUFJLEFBQWEsQUFDekIsQUFBTSxBQUErQixBQUFDLEFBRXZDLEFBQU87Ozs7Ozs7OztzQkFDTCxBQUFNLEFBQUksQUFBVzs7Ozs7O3NCQUNyQixBQUFPLEFBQUksQUFBWTs7Ozs7O3NCQUd2QixBQUFXOzs7Ozs7c0JBQ1gsQUFBSSxBQUFJLEFBQWlCLEFBQzFCLEFBQU0sQUFBd0IsQUFBQyxBQUVoQyxBQUFPOzs7Ozs7Ozs7b0JBQ0wsQUFBVTs7Ozs7O29CQUNWLEFBQWtCOzs7Ozs7b0JBS2xCLEFBQWdCLEFBQ2pCLEFBQU0sQUFBZSxBQUFDLEFBRXZCLEFBQU87Ozs7Ozs7OztlQUFrQixBQUFVOzs7Ozs7ZUFBRSxBQUFZLEFBQWtCLEFBQU0sQUFBVSxBQUFDLEFBV3BGLEFBQU87Ozs7Ozs7OzttQkFBYyxBQUFZLEFBQUUsQUFBTSxBQUFjLEFBQUMsQUFFeEQsQUFBTzs7Ozs7Ozs7O3dCQUNMLEFBQUs7Ozs7OztnREFDTCxBQUFPLEFBQUksQUFBVyxBQUd2QixBQUFNLEFBQW1CLEFBQUMsQUFFM0IsQUFBTzs7Ozs7Ozs7O29CQUNMLEFBQWlCLEFBQ2xCLEFBQU0sQUFBZSxBQUFDLEFBRXZCLEFBQU87Ozs7Ozs7Ozt1QkFJTCxBQUFtQjs7Ozs7O3VCQUluQixBQUFxQixBQUN0QixBQUFNLEFBQTRCLEFBQUMsQUFNcEMsQUFBTzs7Ozs7Ozs7OzJDQUFFLEFBQU8sQUFBSSxBQUFVOzs7Ozs7bUJBQUUsQUFBVSxBQUFJLEFBQVc7Ozs7OzttQkFBRSxBQUFtQjs7Ozs7O21CQUFFLEFBQVk7Ozs7OzttQkFBRSxBQUFnQixBQUFFLEFBQU0sQUFBa0IsQUFBQzs7Ozs7Ozs7O3FCQUdoSSxBQUFZLEFBQXFCLEFBQU0sQUFBZSxBQUFDLEFBQ2hFLEFBQU87Ozs7Ozs7OzttQkFBcUIsQUFBYyxBQUFFLEFBQU0sQUFBYyxBQUFDOzs7O0FBdkhqRSxBQUFPLEFBQWlCLEFBQUMsQUFFekIsQUFBTzs7QUFrSFAsQUFBUTs7SUFBSyxBQUFNLEFBQU0sQUFBc0IsQUFBQyxBQUNoRCxBQUFPOzs7Ozs7UUFBRSxBQUFNLEFBQUUsQUFBQyxBQUNsQixBQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuL2xpYi9ib290c3RyYXAnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRlbXBsYXRlRmFjdG9yeSwgVGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZSB9IGZyb20gJy4vbGliL3RlbXBsYXRlJztcblxuZXhwb3J0IHsgTlVMTF9SRUZFUkVOQ0UsIFVOREVGSU5FRF9SRUZFUkVOQ0UsIFByaW1pdGl2ZVJlZmVyZW5jZSwgQ29uZGl0aW9uYWxSZWZlcmVuY2UgfSBmcm9tICcuL2xpYi9yZWZlcmVuY2VzJztcblxuZXhwb3J0IHtcbiAgIGRlZmF1bHQgYXMgT3Bjb2RlQnVpbGRlckRTTFxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5leHBvcnQge1xuICBDb21waWxhYmxlTGF5b3V0LFxuICBjb21waWxlTGF5b3V0XG59IGZyb20gJy4vbGliL2NvbXBpbGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcG9uZW50QnVpbGRlcixcbiAgQ29tcG9uZW50QXJnc1xufSBmcm9tICcuL2xpYi9vcGNvZGUtYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBpbGVkU3RhdGljVGVtcGxhdGUsXG4gIENvbXBpbGVkRHluYW1pY1RlbXBsYXRlLFxuICBDb21waWxlZER5bmFtaWNCbG9jayxcbiAgQ29tcGlsZWREeW5hbWljUHJvZ3JhbVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9ibG9ja3MnO1xuXG5leHBvcnQge1xuICBBdHRyaWJ1dGVNYW5hZ2VyIGFzIElBdHRyaWJ1dGVNYW5hZ2VyLFxuICBBdHRyaWJ1dGVNYW5hZ2VyLFxuICBQcm9wZXJ0eU1hbmFnZXIsXG4gIElOUFVUX1ZBTFVFX1BST1BFUlRZX01BTkFHRVIsXG4gIGRlZmF1bHRNYW5hZ2VycyxcbiAgZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzLFxuICBkZWZhdWx0UHJvcGVydHlNYW5hZ2VycyxcbiAgcmVhZERPTUF0dHJcbn0gZnJvbSAnLi9saWIvZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycyc7XG5cbmV4cG9ydCB7XG4gIFJlZ2lzdGVyLFxuICBkZWJ1Z1NsaWNlXG59IGZyb20gJy4vbGliL29wY29kZXMnO1xuXG5leHBvcnQge1xuICBub3JtYWxpemVUZXh0VmFsdWVcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcblxuZXhwb3J0IHtcbiAgc2V0RGVidWdnZXJDYWxsYmFjayxcbiAgcmVzZXREZWJ1Z2dlckNhbGxiYWNrLFxuICBEZWJ1Z0NhbGxiYWNrXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvZGVidWdnZXInO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGdldER5bmFtaWNWYXJcbn0gZnJvbSAnLi9saWIvaGVscGVycy9nZXQtZHluYW1pYy12YXInO1xuXG5leHBvcnQge1xuICBCbG9ja3MgYXMgQmxvY2tNYWNyb3MsXG4gIElubGluZXMgYXMgSW5saW5lTWFjcm9zLFxuICBCbG9ja01hY3JvLFxuICBNaXNzaW5nQmxvY2tNYWNybyxcbiAgY29tcGlsZUxpc3QsXG4gIGV4cHIgYXMgY29tcGlsZUV4cHJlc3Npb25cbn0gZnJvbSAnLi9saWIvc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCB7XG4gIENsaWVudFNpZGUsXG4gIENvbXBpbGFibGVUZW1wbGF0ZSxcbiAgU2Nhbm5lZEJsb2NrLFxuICBTY2FubmVkUHJvZ3JhbSxcbiAgQmxvY2ssXG4gIFByb2dyYW0sXG4gIGNvbXBpbGVTdGF0ZW1lbnRcbn0gZnJvbSAnLi9saWIvc2Nhbm5lcic7XG5cbmV4cG9ydCB7IFB1YmxpY1ZNIGFzIFZNLCBVcGRhdGluZ1ZNLCBSZW5kZXJSZXN1bHQsIEl0ZXJhdG9yUmVzdWx0IH0gZnJvbSAnLi9saWIvdm0nO1xuXG5leHBvcnQge1xuICBJQXJndW1lbnRzIGFzIEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkQXJndW1lbnRzIGFzIENhcHR1cmVkQXJndW1lbnRzLFxuICBJUG9zaXRpb25hbEFyZ3VtZW50cyBhcyBQb3NpdGlvbmFsQXJndW1lbnRzLFxuICBJQ2FwdHVyZWRQb3NpdGlvbmFsQXJndW1lbnRzIGFzIENhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgSU5hbWVkQXJndW1lbnRzIGFzIE5hbWVkQXJndW1lbnRzLFxuICBJQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyBhcyBDYXB0dXJlZE5hbWVkQXJndW1lbnRzLFxufSBmcm9tICcuL2xpYi92bS9hcmd1bWVudHMnO1xuXG5leHBvcnQgeyBTYWZlU3RyaW5nLCBpc1NhZmVTdHJpbmcgfSBmcm9tICcuL2xpYi91cHNlcnQnO1xuXG5leHBvcnQge1xuICBTY29wZSxcbiAgZGVmYXVsdCBhcyBFbnZpcm9ubWVudCxcbiAgSGVscGVyLFxuICBEeW5hbWljU2NvcGUsXG59IGZyb20gJy4vbGliL2Vudmlyb25tZW50JztcblxuZXhwb3J0IHtcbiAgUGFydGlhbERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvcGFydGlhbCc7XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50Q2xhc3MsXG4gIENvbXBvbmVudE1hbmFnZXIsXG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIENvbXBvbmVudExheW91dEJ1aWxkZXIsXG4gIENvbXBvbmVudEF0dHJzQnVpbGRlcixcbiAgUHJlcGFyZWRBcmd1bWVudHMsXG4gIGlzQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7XG4gIE1vZGlmaWVyTWFuYWdlclxufSBmcm9tICcuL2xpYi9tb2RpZmllci9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBET01DaGFuZ2VzLCBET01DaGFuZ2VzIGFzIElET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uLCBpc1doaXRlc3BhY2UsIGluc2VydEhUTUxCZWZvcmUgfSBmcm9tICcuL2xpYi9kb20vaGVscGVyJztcbmltcG9ydCAgKiBhcyBTaW1wbGUgZnJvbSAnLi9saWIvZG9tL2ludGVyZmFjZXMnO1xuZXhwb3J0IHsgU2ltcGxlIH07XG5leHBvcnQgeyBFbGVtZW50U3RhY2ssIEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi9saWIvYnVpbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcywgQ29uY3JldGVCb3VuZHMgfSBmcm9tICcuL2xpYi9ib3VuZHMnO1xuIl19

@@ -108,2 +108,3 @@ "use strict";

this.defaultOperations = new _dom.SimpleElementOperations(env);
this.pushSimpleBlock();
this.elementStack.push(this.element);

@@ -388,5 +389,6 @@ this.nextSiblingStack.push(this.nextSibling);

var nextSibling = (0, _bounds2.clear)(this);
this.destroyables = null;
this.first = null;
this.last = null;
this.destroyables = null;
this.nesting = 0;
return nextSibling;

@@ -448,2 +450,2 @@ };

}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQWUsQUFBNkIsQUFBSyxBQUFFLEFBQU0sQUFBVSxBQUFDOztBQUlwRSxBQUFPLEFBQXVCLEFBQUssQUFBOEIsQUFBTSxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFRdkcsQUFBTyxBQUNMLEFBQXVCLEFBQ3hCLEFBQU0sQUFBd0IsQUFBQyxBQVloQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3QkFDRTttQkFBb0IsQUFBVTs4QkFBVjs7YUFBSSxPQUFKLEFBQUksQUFBTSxBQUFJLEFBQUM7OztvQkFFbkMsQUFBUyxpQ0FDUCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUNuQixBQUFDLEFBQ0YsQUFFRDs7Ozs7O3VCQUNFO2tCQUFvQixBQUFVOzhCQUFWOzthQUFJLE9BQUosQUFBSSxBQUFNLEFBQUksQUFBQzs7O21CQUVuQyxBQUFRLCtCQUNOLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQ25CLEFBQUMsQUFDRjs7OztBQVVELEFBQU07OzhDQUdKO3NCQUFZLEFBQWM7OEJBQ3hCLEFBQUk7O2FBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQyxBQUN2QixBQUFDOzs7dUJBRUQsQUFBYSx5Q0FDWCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFhLEFBQUUsQUFBQyxBQUNyQyxBQUFDOzs7dUJBRUQsQUFBUyxpQ0FDUCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNqQyxBQUFDOzs7dUJBRUQsQUFBUSwrQkFDTixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFRLEFBQUUsQUFBQyxBQUNoQyxBQUFDOzs7dUJBRUQsQUFBTSx5QkFBQyxBQUFjLFFBQ25CLEFBQUk7YUFBQyxBQUFNLFNBQUcsQUFBTSxB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QkFBQyxBQUFvQixRQUM3QixBQUFDLEFBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQm91bmRzLCB7IEN1cnNvciwgRGVzdHJveWFibGVCb3VuZHMsIGNsZWFyIH0gZnJvbSAnLi9ib3VuZHMnO1xuXG5pbXBvcnQgeyBET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uIH0gZnJvbSAnLi9kb20vaGVscGVyJztcblxuaW1wb3J0IHsgT3B0aW9uLCBEZXN0cm95YWJsZSwgU3RhY2ssIExpbmtlZExpc3QsIExpbmtlZExpc3ROb2RlLCBhc3NlcnQsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQgeyBWTSB9IGZyb20gJy4vdm0nO1xuXG5pbXBvcnQgeyBWZXJzaW9uZWRSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5pbXBvcnQge1xuICBTaW1wbGVFbGVtZW50T3BlcmF0aW9uc1xufSBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvZG9tJztcblxuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4vZG9tL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpcnN0Tm9kZSB7XG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhc3ROb2RlIHtcbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuY2xhc3MgRmlyc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGU6IE5vZGUpIHsgfVxuXG4gIGZpcnN0Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG59XG5cbmNsYXNzIExhc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGU6IE5vZGUpIHsgfVxuXG4gIGxhc3ROb2RlKCk6IE5vZGUge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIGFkZFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbik6IHZvaWQ7XG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKTogdm9pZDtcbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFnbWVudCBpbXBsZW1lbnRzIEJvdW5kcyB7XG4gIHByaXZhdGUgYm91bmRzOiBCb3VuZHM7XG5cbiAgY29uc3RydWN0b3IoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCk7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLmxhc3ROb2RlKCk7XG4gIH1cblxuICB1cGRhdGUoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudFN0YWNrIGltcGxlbWVudHMgQ3Vyc29yIHtcbiAgcHVibGljIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+O1xuICBwdWJsaWMgZG9tOiBET01UcmVlQ29uc3RydWN0aW9uO1xuICBwdWJsaWMgdXBkYXRlT3BlcmF0aW9uczogRE9NQ2hhbmdlcztcbiAgcHVibGljIGNvbnN0cnVjdGluZzogT3B0aW9uPFNpbXBsZS5FbGVtZW50PiA9IG51bGw7XG4gIHB1YmxpYyBvcGVyYXRpb25zOiBPcHRpb248RWxlbWVudE9wZXJhdGlvbnM+ID0gbnVsbDtcbiAgcHVibGljIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50O1xuICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudDtcblxuICBwcml2YXRlIGVsZW1lbnRTdGFjayA9IG5ldyBTdGFjazxTaW1wbGUuRWxlbWVudD4oKTtcbiAgcHJpdmF0ZSBuZXh0U2libGluZ1N0YWNrID0gbmV3IFN0YWNrPE9wdGlvbjxTaW1wbGUuTm9kZT4+KCk7XG4gIHByaXZhdGUgYmxvY2tTdGFjayA9IG5ldyBTdGFjazxUcmFja2VyPigpO1xuXG4gIHByaXZhdGUgZGVmYXVsdE9wZXJhdGlvbnM6IEVsZW1lbnRPcGVyYXRpb25zO1xuXG4gIHN0YXRpYyBmb3JJbml0aWFsUmVuZGVyKGVudjogRW52aXJvbm1lbnQsIHBhcmVudE5vZGU6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPikge1xuICAgIHJldHVybiBuZXcgRWxlbWVudFN0YWNrKGVudiwgcGFyZW50Tm9kZSwgbmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgc3RhdGljIHJlc3VtZShlbnY6IEVudmlyb25tZW50LCB0cmFja2VyOiBUcmFja2VyLCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPikge1xuICAgIGxldCBwYXJlbnROb2RlID0gdHJhY2tlci5wYXJlbnRFbGVtZW50KCk7XG5cbiAgICBsZXQgc3RhY2sgPSBuZXcgRWxlbWVudFN0YWNrKGVudiwgcGFyZW50Tm9kZSwgbmV4dFNpYmxpbmcpO1xuICAgIHN0YWNrLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBwYXJlbnROb2RlOiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLmRvbSA9IGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVPcGVyYXRpb25zID0gZW52LmdldERPTSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nO1xuXG4gICAgdGhpcy5kZWZhdWx0T3BlcmF0aW9ucyA9IG5ldyBTaW1wbGVFbGVtZW50T3BlcmF0aW9ucyhlbnYpO1xuXG4gICAgdGhpcy5lbGVtZW50U3RhY2sucHVzaCh0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMubmV4dFNpYmxpbmdTdGFjay5wdXNoKHRoaXMubmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgZXhwZWN0Q29uc3RydWN0aW5nKG1ldGhvZDogc3RyaW5nKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5jb25zdHJ1Y3RpbmcsIGAke21ldGhvZH0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG4gIH1cblxuICBleHBlY3RPcGVyYXRpb25zKG1ldGhvZDogc3RyaW5nKTogRWxlbWVudE9wZXJhdGlvbnMge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5vcGVyYXRpb25zLCBgJHttZXRob2R9IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuICB9XG5cbiAgYmxvY2soKTogVHJhY2tlciB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmJsb2NrU3RhY2suY3VycmVudCwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgYmxvY2sgdHJhY2tlclwiKTtcbiAgfVxuXG4gIHBvcEVsZW1lbnQoKSB7XG4gICAgbGV0IHsgZWxlbWVudFN0YWNrLCBuZXh0U2libGluZ1N0YWNrIH0gID0gdGhpcztcblxuICAgIGxldCB0b3BFbGVtZW50ID0gZWxlbWVudFN0YWNrLnBvcCgpO1xuICAgIG5leHRTaWJsaW5nU3RhY2sucG9wKCk7XG4gICAgLy8gTE9HR0VSLmRlYnVnKGAtPiBlbGVtZW50IHN0YWNrICR7dGhpcy5lbGVtZW50U3RhY2sudG9BcnJheSgpLm1hcChlID0+IGUudGFnTmFtZSkuam9pbignLCAnKX1gKTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGV4cGVjdChlbGVtZW50U3RhY2suY3VycmVudCwgXCJjYW4ndCBwb3AgcGFzdCB0aGUgbGFzdCBlbGVtZW50XCIpO1xuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZ1N0YWNrLmN1cnJlbnQ7XG5cbiAgICByZXR1cm4gdG9wRWxlbWVudDtcbiAgfVxuXG4gIHB1c2hTaW1wbGVCbG9jaygpOiBUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBTaW1wbGVCbG9ja1RyYWNrZXIodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwdXNoVXBkYXRhYmxlQmxvY2soKTogVXBkYXRhYmxlVHJhY2tlciB7XG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgVXBkYXRhYmxlQmxvY2tUcmFja2VyKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQmxvY2tUcmFja2VyKHRyYWNrZXI6IFRyYWNrZXIsIGlzUmVtb3RlID0gZmFsc2UpIHtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuYmxvY2tTdGFjay5jdXJyZW50O1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQubmV3RGVzdHJveWFibGUodHJhY2tlcik7XG5cbiAgICAgIGlmICghaXNSZW1vdGUpIHtcbiAgICAgICAgY3VycmVudC5uZXdCb3VuZHModHJhY2tlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ibG9ja1N0YWNrLnB1c2godHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwdXNoQmxvY2tMaXN0KGxpc3Q6IExpbmtlZExpc3Q8TGlua2VkTGlzdE5vZGUgJiBCb3VuZHMgJiBEZXN0cm95YWJsZT4pOiBUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBCbG9ja0xpc3RUcmFja2VyKHRoaXMuZWxlbWVudCwgbGlzdCk7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmJsb2NrU3RhY2suY3VycmVudDtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjdXJyZW50Lm5ld0Rlc3Ryb3lhYmxlKHRyYWNrZXIpO1xuICAgICAgY3VycmVudC5uZXdCb3VuZHModHJhY2tlcik7XG4gICAgfVxuXG4gICAgdGhpcy5ibG9ja1N0YWNrLnB1c2godHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwb3BCbG9jaygpOiBUcmFja2VyIHtcbiAgICB0aGlzLmJsb2NrKCkuZmluYWxpemUodGhpcyk7XG5cbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tTdGFjay5wb3AoKSwgXCJFeHBlY3RlZCBwb3BCbG9jayB0byByZXR1cm4gYSBibG9ja1wiKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KHRhZzogc3RyaW5nLCBvcGVyYXRpb25zID0gdGhpcy5kZWZhdWx0T3BlcmF0aW9ucyk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQodGFnLCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RpbmcgPSBlbGVtZW50O1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICBsZXQgcGFyZW50ICA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgZWxlbWVudCA9IGV4cGVjdCh0aGlzLmNvbnN0cnVjdGluZywgYGZsdXNoRWxlbWVudCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuXG4gICAgdGhpcy5kb20uaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxlbWVudCwgdGhpcy5uZXh0U2libGluZyk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdGluZyA9IG51bGw7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCk7XG4gICAgdGhpcy5ibG9jaygpLm9wZW5FbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgcHVzaFJlbW90ZUVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+ID0gbnVsbCkge1xuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xuXG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgUmVtb3RlQmxvY2tUcmFja2VyKGVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyLCB0cnVlKTtcbiAgfVxuXG4gIHBvcFJlbW90ZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5wb3BCbG9jaygpO1xuICAgIHRoaXMucG9wRWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgIC8vIExPR0dFUi5kZWJ1ZyhgLT4gZWxlbWVudCBzdGFjayAke3RoaXMuZWxlbWVudFN0YWNrLnRvQXJyYXkoKS5tYXAoZSA9PiBlLnRhZ05hbWUpLmpvaW4oJywgJyl9YCk7XG5cbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmc7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2gobmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmJsb2NrKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJsb2NrKCkubmV3Qm91bmRzKGJvdW5kcyk7XG4gIH1cblxuICBhcHBlbmRUZXh0KHN0cmluZzogc3RyaW5nKTogU2ltcGxlLlRleHQge1xuICAgIGxldCB7IGRvbSB9ID0gdGhpcztcbiAgICBsZXQgdGV4dCA9IGRvbS5jcmVhdGVUZXh0Tm9kZShzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCB0ZXh0LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrKCkubmV3Tm9kZSh0ZXh0KTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGFwcGVuZENvbW1lbnQoc3RyaW5nOiBzdHJpbmcpOiBTaW1wbGUuQ29tbWVudCB7XG4gICAgbGV0IHsgZG9tIH0gPSB0aGlzO1xuICAgIGxldCBjb21tZW50ID0gZG9tLmNyZWF0ZUNvbW1lbnQoc3RyaW5nKTtcbiAgICBkb20uaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgY29tbWVudCwgdGhpcy5uZXh0U2libGluZyk7XG4gICAgdGhpcy5ibG9jaygpLm5ld05vZGUoY29tbWVudCk7XG4gICAgcmV0dXJuIGNvbW1lbnQ7XG4gIH1cblxuICBzZXRTdGF0aWNBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXRTdGF0aWNBdHRyaWJ1dGUnKS5hZGRTdGF0aWNBdHRyaWJ1dGUodGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldFN0YXRpY0F0dHJpYnV0ZScpLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRTdGF0aWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXRTdGF0aWNBdHRyaWJ1dGVOUycpLmFkZFN0YXRpY0F0dHJpYnV0ZU5TKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXRTdGF0aWNBdHRyaWJ1dGVOUycpLCBuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldER5bmFtaWNBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXREeW5hbWljQXR0cmlidXRlJykuYWRkRHluYW1pY0F0dHJpYnV0ZSh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0RHluYW1pY0F0dHJpYnV0ZScpLCBuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgc2V0RHluYW1pY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldER5bmFtaWNBdHRyaWJ1dGVOUycpLmFkZER5bmFtaWNBdHRyaWJ1dGVOUyh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0RHluYW1pY0F0dHJpYnV0ZU5TJyksIG5hbWVzcGFjZSwgbmFtZSwgcmVmZXJlbmNlLCBpc1RydXN0aW5nKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICB0aGlzLmJsb2NrKCkuY2xvc2VFbGVtZW50KCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja2VyIGV4dGVuZHMgRGVzdHJveWFibGVCb3VuZHMge1xuICBvcGVuRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCk6IHZvaWQ7XG4gIGNsb3NlRWxlbWVudCgpOiB2b2lkO1xuICBuZXdOb2RlKG5vZGU6IFNpbXBsZS5Ob2RlKTogdm9pZDtcbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKTogdm9pZDtcbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpOiB2b2lkO1xuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUJsb2NrVHJhY2tlciBpbXBsZW1lbnRzIFRyYWNrZXIge1xuICBwcm90ZWN0ZWQgZmlyc3Q6IE9wdGlvbjxGaXJzdE5vZGU+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGxhc3Q6IE9wdGlvbjxMYXN0Tm9kZT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgZGVzdHJveWFibGVzOiBPcHRpb248RGVzdHJveWFibGVbXT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgbmVzdGluZyA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFNpbXBsZS5FbGVtZW50KXt9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBsZXQgeyBkZXN0cm95YWJsZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVzdHJveWFibGVzICYmIGRlc3Ryb3lhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxkZXN0cm95YWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVzdHJveWFibGVzW2ldLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5maXJzdCAmJiB0aGlzLmZpcnN0LmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMubGFzdCAmJiB0aGlzLmxhc3QubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICB0aGlzLm5ld05vZGUoZWxlbWVudCk7XG4gICAgdGhpcy5uZXN0aW5nKys7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5uZXN0aW5nLS07XG4gIH1cblxuICBuZXdOb2RlKG5vZGU6IE5vZGUpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBuZXcgRmlyc3Qobm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gbmV3IExhc3Qobm9kZSk7XG4gIH1cblxuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gYm91bmRzO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IHRoaXMuZGVzdHJveWFibGVzIHx8IFtdO1xuICAgIHRoaXMuZGVzdHJveWFibGVzLnB1c2goZCk7XG4gIH1cblxuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKSB7XG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICBzdGFjay5hcHBlbmRDb21tZW50KCcnKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUmVtb3RlQmxvY2tUcmFja2VyIGV4dGVuZHMgU2ltcGxlQmxvY2tUcmFja2VyIHtcbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG5cbiAgICBjbGVhcih0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRyYWNrZXIgZXh0ZW5kcyBUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgZXh0ZW5kcyBTaW1wbGVCbG9ja1RyYWNrZXIgaW1wbGVtZW50cyBVcGRhdGFibGVUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIGxldCB7IGRlc3Ryb3lhYmxlcyB9ID0gdGhpcztcblxuICAgIGlmIChkZXN0cm95YWJsZXMgJiYgZGVzdHJveWFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPGRlc3Ryb3lhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbnYuZGlkRGVzdHJveShkZXN0cm95YWJsZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXh0U2libGluZyA9IGNsZWFyKHRoaXMpO1xuXG4gICAgdGhpcy5kZXN0cm95YWJsZXMgPSBudWxsO1xuICAgIHRoaXMuZmlyc3QgPSBudWxsO1xuICAgIHRoaXMubGFzdCA9IG51bGw7XG5cbiAgICByZXR1cm4gbmV4dFNpYmxpbmc7XG4gIH1cbn1cblxuY2xhc3MgQmxvY2tMaXN0VHJhY2tlciBpbXBsZW1lbnRzIFRyYWNrZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU2ltcGxlLkVsZW1lbnQsIHByaXZhdGUgYm91bmRMaXN0OiBMaW5rZWRMaXN0PExpbmtlZExpc3ROb2RlICYgQm91bmRzICYgRGVzdHJveWFibGU+KSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5ib3VuZExpc3QgPSBib3VuZExpc3Q7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuYm91bmRMaXN0LmZvckVhY2hOb2RlKG5vZGUgPT4gbm9kZS5kZXN0cm95KCkpO1xuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IGhlYWQgPSB0aGlzLmJvdW5kTGlzdC5oZWFkKCk7XG4gICAgcmV0dXJuIGhlYWQgJiYgaGVhZC5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIGxldCB0YWlsID0gdGhpcy5ib3VuZExpc3QudGFpbCgpO1xuICAgIHJldHVybiB0YWlsICYmIHRhaWwubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KF9lbGVtZW50OiBFbGVtZW50KSB7XG4gICAgYXNzZXJ0KGZhbHNlLCAnQ2Fubm90IG9wZW5FbGVtZW50IGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QnKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3QgY2xvc2VFbGVtZW50IGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QnKTtcbiAgfVxuXG4gIG5ld05vZGUoX25vZGU6IE5vZGUpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3QgY3JlYXRlIGEgbmV3IG5vZGUgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgbmV3Qm91bmRzKF9ib3VuZHM6IEJvdW5kcykge1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoX2Q6IERlc3Ryb3lhYmxlKSB7XG4gIH1cblxuICBmaW5hbGl6ZShfc3RhY2s6IEVsZW1lbnRTdGFjaykge1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQWUsQUFBNkIsQUFBSyxBQUFFLEFBQU0sQUFBVSxBQUFDOztBQUlwRSxBQUFPLEFBQXVCLEFBQUssQUFBOEIsQUFBTSxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFRdkcsQUFBTyxBQUNMLEFBQXVCLEFBQ3hCLEFBQU0sQUFBd0IsQUFBQyxBQVloQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3QkFDRTttQkFBb0IsQUFBVTs4QkFBVjs7YUFBSSxPQUFKLEFBQUksQUFBTSxBQUFJLEFBQUM7OztvQkFFbkMsQUFBUyxpQ0FDUCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUNuQixBQUFDLEFBQ0YsQUFFRDs7Ozs7O3VCQUNFO2tCQUFvQixBQUFVOzhCQUFWOzthQUFJLE9BQUosQUFBSSxBQUFNLEFBQUksQUFBQzs7O21CQUVuQyxBQUFRLCtCQUNOLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQ25CLEFBQUMsQUFDRjs7OztBQVVELEFBQU07OzhDQUdKO3NCQUFZLEFBQWM7OEJBQ3hCLEFBQUk7O2FBQUMsQUFBTSxTQUFHLEFBQU0sQUFBQyxBQUN2QixBQUFDOzs7dUJBRUQsQUFBYSx5Q0FDWCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFhLEFBQUUsQUFBQyxBQUNyQyxBQUFDOzs7dUJBRUQsQUFBUyxpQ0FDUCxBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNqQyxBQUFDOzs7dUJBRUQsQUFBUSwrQkFDTixBQUFNO2VBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFRLEFBQUUsQUFBQyxBQUNoQyxBQUFDOzs7dUJBRUQsQUFBTSx5QkFBQyxBQUFjLFFBQ25CLEFBQUk7YUFBQyxBQUFNLFNBQUcsQUFBTSxB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QkFBQyxBQUFlLFNBQ3pCLEFBQUM7OytCQUVELEFBQWMseUNBQUMsQUFBZSxJQUM5QixBQUFDOzsrQkFFRCxBQUFRLDZCQUFDLEFBQW9CLFFBQzdCLEFBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCb3VuZHMsIHsgQ3Vyc29yLCBEZXN0cm95YWJsZUJvdW5kcywgY2xlYXIgfSBmcm9tICcuL2JvdW5kcyc7XG5cbmltcG9ydCB7IERPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuL2RvbS9oZWxwZXInO1xuXG5pbXBvcnQgeyBPcHRpb24sIERlc3Ryb3lhYmxlLCBTdGFjaywgTGlua2VkTGlzdCwgTGlua2VkTGlzdE5vZGUsIGFzc2VydCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7IFZNIH0gZnJvbSAnLi92bSc7XG5cbmltcG9ydCB7IFZlcnNpb25lZFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmltcG9ydCB7XG4gIFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zXG59IGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9kb20nO1xuXG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi9kb20vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyc3ROb2RlIHtcbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFzdE5vZGUge1xuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+O1xufVxuXG5jbGFzcyBGaXJzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbm9kZTogTm9kZSkgeyB9XG5cbiAgZmlyc3ROb2RlKCk6IE5vZGUge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cbn1cblxuY2xhc3MgTGFzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbm9kZTogTm9kZSkgeyB9XG5cbiAgbGFzdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKTogdm9pZDtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYWdtZW50IGltcGxlbWVudHMgQm91bmRzIHtcbiAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kcztcblxuICBjb25zdHJ1Y3Rvcihib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIHVwZGF0ZShib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50U3RhY2sgaW1wbGVtZW50cyBDdXJzb3Ige1xuICBwdWJsaWMgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG4gIHB1YmxpYyBkb206IERPTVRyZWVDb25zdHJ1Y3Rpb247XG4gIHB1YmxpYyB1cGRhdGVPcGVyYXRpb25zOiBET01DaGFuZ2VzO1xuICBwdWJsaWMgY29uc3RydWN0aW5nOiBPcHRpb248U2ltcGxlLkVsZW1lbnQ+ID0gbnVsbDtcbiAgcHVibGljIG9wZXJhdGlvbnM6IE9wdGlvbjxFbGVtZW50T3BlcmF0aW9ucz4gPSBudWxsO1xuICBwdWJsaWMgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQ7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuXG4gIHByaXZhdGUgZWxlbWVudFN0YWNrID0gbmV3IFN0YWNrPFNpbXBsZS5FbGVtZW50PigpO1xuICBwcml2YXRlIG5leHRTaWJsaW5nU3RhY2sgPSBuZXcgU3RhY2s8T3B0aW9uPFNpbXBsZS5Ob2RlPj4oKTtcbiAgcHJpdmF0ZSBibG9ja1N0YWNrID0gbmV3IFN0YWNrPFRyYWNrZXI+KCk7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0T3BlcmF0aW9uczogRWxlbWVudE9wZXJhdGlvbnM7XG5cbiAgc3RhdGljIGZvckluaXRpYWxSZW5kZXIoZW52OiBFbnZpcm9ubWVudCwgcGFyZW50Tm9kZTogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgcmV0dXJuIG5ldyBFbGVtZW50U3RhY2soZW52LCBwYXJlbnROb2RlLCBuZXh0U2libGluZyk7XG4gIH1cblxuICBzdGF0aWMgcmVzdW1lKGVudjogRW52aXJvbm1lbnQsIHRyYWNrZXI6IFRyYWNrZXIsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSB0cmFja2VyLnBhcmVudEVsZW1lbnQoKTtcblxuICAgIGxldCBzdGFjayA9IG5ldyBFbGVtZW50U3RhY2soZW52LCBwYXJlbnROb2RlLCBuZXh0U2libGluZyk7XG4gICAgc3RhY2sucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcblxuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIHBhcmVudE5vZGU6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPikge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuZG9tID0gZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZU9wZXJhdGlvbnMgPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5lbGVtZW50ID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmc7XG5cbiAgICB0aGlzLmRlZmF1bHRPcGVyYXRpb25zID0gbmV3IFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zKGVudik7XG5cbiAgICB0aGlzLnB1c2hTaW1wbGVCbG9jaygpO1xuICAgIHRoaXMuZWxlbWVudFN0YWNrLnB1c2godGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLm5leHRTaWJsaW5nU3RhY2sucHVzaCh0aGlzLm5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIGV4cGVjdENvbnN0cnVjdGluZyhtZXRob2Q6IHN0cmluZyk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuY29uc3RydWN0aW5nLCBgJHttZXRob2R9IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuICB9XG5cbiAgZXhwZWN0T3BlcmF0aW9ucyhtZXRob2Q6IHN0cmluZyk6IEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMub3BlcmF0aW9ucywgYCR7bWV0aG9kfSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hpbGUgY29uc3RydWN0aW5nIGFuIGVsZW1lbnRgKTtcbiAgfVxuXG4gIGJsb2NrKCk6IFRyYWNrZXIge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQsIFwiRXhwZWN0ZWQgYSBjdXJyZW50IGJsb2NrIHRyYWNrZXJcIik7XG4gIH1cblxuICBwb3BFbGVtZW50KCkge1xuICAgIGxldCB7IGVsZW1lbnRTdGFjaywgbmV4dFNpYmxpbmdTdGFjayB9ICA9IHRoaXM7XG5cbiAgICBsZXQgdG9wRWxlbWVudCA9IGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICBuZXh0U2libGluZ1N0YWNrLnBvcCgpO1xuICAgIC8vIExPR0dFUi5kZWJ1ZyhgLT4gZWxlbWVudCBzdGFjayAke3RoaXMuZWxlbWVudFN0YWNrLnRvQXJyYXkoKS5tYXAoZSA9PiBlLnRhZ05hbWUpLmpvaW4oJywgJyl9YCk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBleHBlY3QoZWxlbWVudFN0YWNrLmN1cnJlbnQsIFwiY2FuJ3QgcG9wIHBhc3QgdGhlIGxhc3QgZWxlbWVudFwiKTtcbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmdTdGFjay5jdXJyZW50O1xuXG4gICAgcmV0dXJuIHRvcEVsZW1lbnQ7XG4gIH1cblxuICBwdXNoU2ltcGxlQmxvY2soKTogVHJhY2tlciB7XG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgU2ltcGxlQmxvY2tUcmFja2VyKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcHVzaFVwZGF0YWJsZUJsb2NrKCk6IFVwZGF0YWJsZVRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IFVwZGF0YWJsZUJsb2NrVHJhY2tlcih0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEJsb2NrVHJhY2tlcih0cmFja2VyOiBUcmFja2VyLCBpc1JlbW90ZSA9IGZhbHNlKSB7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmJsb2NrU3RhY2suY3VycmVudDtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjdXJyZW50Lm5ld0Rlc3Ryb3lhYmxlKHRyYWNrZXIpO1xuXG4gICAgICBpZiAoIWlzUmVtb3RlKSB7XG4gICAgICAgIGN1cnJlbnQubmV3Qm91bmRzKHRyYWNrZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYmxvY2tTdGFjay5wdXNoKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcHVzaEJsb2NrTGlzdChsaXN0OiBMaW5rZWRMaXN0PExpbmtlZExpc3ROb2RlICYgQm91bmRzICYgRGVzdHJveWFibGU+KTogVHJhY2tlciB7XG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgQmxvY2tMaXN0VHJhY2tlcih0aGlzLmVsZW1lbnQsIGxpc3QpO1xuICAgIGxldCBjdXJyZW50ID0gdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQ7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY3VycmVudC5uZXdEZXN0cm95YWJsZSh0cmFja2VyKTtcbiAgICAgIGN1cnJlbnQubmV3Qm91bmRzKHRyYWNrZXIpO1xuICAgIH1cblxuICAgIHRoaXMuYmxvY2tTdGFjay5wdXNoKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcG9wQmxvY2soKTogVHJhY2tlciB7XG4gICAgdGhpcy5ibG9jaygpLmZpbmFsaXplKHRoaXMpO1xuXG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmJsb2NrU3RhY2sucG9wKCksIFwiRXhwZWN0ZWQgcG9wQmxvY2sgdG8gcmV0dXJuIGEgYmxvY2tcIik7XG4gIH1cblxuICBvcGVuRWxlbWVudCh0YWc6IHN0cmluZywgb3BlcmF0aW9ucyA9IHRoaXMuZGVmYXVsdE9wZXJhdGlvbnMpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KHRhZywgdGhpcy5lbGVtZW50KTtcblxuICAgIHRoaXMuY29uc3RydWN0aW5nID0gZWxlbWVudDtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBmbHVzaEVsZW1lbnQoKSB7XG4gICAgbGV0IHBhcmVudCAgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IGVsZW1lbnQgPSBleHBlY3QodGhpcy5jb25zdHJ1Y3RpbmcsIGBmbHVzaEVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gY29uc3RydWN0aW5nIGFuIGVsZW1lbnRgKTtcblxuICAgIHRoaXMuZG9tLmluc2VydEJlZm9yZShwYXJlbnQsIGVsZW1lbnQsIHRoaXMubmV4dFNpYmxpbmcpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RpbmcgPSBudWxsO1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnB1c2hFbGVtZW50KGVsZW1lbnQpO1xuICAgIHRoaXMuYmxvY2soKS5vcGVuRWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHB1c2hSZW1vdGVFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGwpIHtcbiAgICB0aGlzLnB1c2hFbGVtZW50KGVsZW1lbnQsIG5leHRTaWJsaW5nKTtcblxuICAgIGxldCB0cmFja2VyID0gbmV3IFJlbW90ZUJsb2NrVHJhY2tlcihlbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlciwgdHJ1ZSk7XG4gIH1cblxuICBwb3BSZW1vdGVFbGVtZW50KCkge1xuICAgIHRoaXMucG9wQmxvY2soKTtcbiAgICB0aGlzLnBvcEVsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+ID0gbnVsbCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5lbGVtZW50U3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAvLyBMT0dHRVIuZGVidWcoYC0+IGVsZW1lbnQgc3RhY2sgJHt0aGlzLmVsZW1lbnRTdGFjay50b0FycmF5KCkubWFwKGUgPT4gZS50YWdOYW1lKS5qb2luKCcsICcpfWApO1xuXG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nO1xuICAgIHRoaXMubmV4dFNpYmxpbmdTdGFjay5wdXNoKG5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKSB7XG4gICAgdGhpcy5ibG9jaygpLm5ld0Rlc3Ryb3lhYmxlKGQpO1xuICB9XG5cbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ibG9jaygpLm5ld0JvdW5kcyhib3VuZHMpO1xuICB9XG5cbiAgYXBwZW5kVGV4dChzdHJpbmc6IHN0cmluZyk6IFNpbXBsZS5UZXh0IHtcbiAgICBsZXQgeyBkb20gfSA9IHRoaXM7XG4gICAgbGV0IHRleHQgPSBkb20uY3JlYXRlVGV4dE5vZGUoc3RyaW5nKTtcbiAgICBkb20uaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgdGV4dCwgdGhpcy5uZXh0U2libGluZyk7XG4gICAgdGhpcy5ibG9jaygpLm5ld05vZGUodGV4dCk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBhcHBlbmRDb21tZW50KHN0cmluZzogc3RyaW5nKTogU2ltcGxlLkNvbW1lbnQge1xuICAgIGxldCB7IGRvbSB9ID0gdGhpcztcbiAgICBsZXQgY29tbWVudCA9IGRvbS5jcmVhdGVDb21tZW50KHN0cmluZyk7XG4gICAgZG9tLmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGNvbW1lbnQsIHRoaXMubmV4dFNpYmxpbmcpO1xuICAgIHRoaXMuYmxvY2soKS5uZXdOb2RlKGNvbW1lbnQpO1xuICAgIHJldHVybiBjb21tZW50O1xuICB9XG5cbiAgc2V0U3RhdGljQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0U3RhdGljQXR0cmlidXRlJykuYWRkU3RhdGljQXR0cmlidXRlKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXRTdGF0aWNBdHRyaWJ1dGUnKSwgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0U3RhdGljQXR0cmlidXRlTlMobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0U3RhdGljQXR0cmlidXRlTlMnKS5hZGRTdGF0aWNBdHRyaWJ1dGVOUyh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0U3RhdGljQXR0cmlidXRlTlMnKSwgbmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBzZXREeW5hbWljQXR0cmlidXRlKG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0RHluYW1pY0F0dHJpYnV0ZScpLmFkZER5bmFtaWNBdHRyaWJ1dGUodGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldER5bmFtaWNBdHRyaWJ1dGUnKSwgbmFtZSwgcmVmZXJlbmNlLCBpc1RydXN0aW5nKTtcbiAgfVxuXG4gIHNldER5bmFtaWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXREeW5hbWljQXR0cmlidXRlTlMnKS5hZGREeW5hbWljQXR0cmlidXRlTlModGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldER5bmFtaWNBdHRyaWJ1dGVOUycpLCBuYW1lc3BhY2UsIG5hbWUsIHJlZmVyZW5jZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5ibG9jaygpLmNsb3NlRWxlbWVudCgpO1xuICAgIHRoaXMucG9wRWxlbWVudCgpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tlciBleHRlbmRzIERlc3Ryb3lhYmxlQm91bmRzIHtcbiAgb3BlbkVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQpOiB2b2lkO1xuICBjbG9zZUVsZW1lbnQoKTogdm9pZDtcbiAgbmV3Tm9kZShub2RlOiBTaW1wbGUuTm9kZSk6IHZvaWQ7XG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcyk6IHZvaWQ7XG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKTogdm9pZDtcbiAgZmluYWxpemUoc3RhY2s6IEVsZW1lbnRTdGFjayk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVCbG9ja1RyYWNrZXIgaW1wbGVtZW50cyBUcmFja2VyIHtcbiAgcHJvdGVjdGVkIGZpcnN0OiBPcHRpb248Rmlyc3ROb2RlPiA9IG51bGw7XG4gIHByb3RlY3RlZCBsYXN0OiBPcHRpb248TGFzdE5vZGU+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGRlc3Ryb3lhYmxlczogT3B0aW9uPERlc3Ryb3lhYmxlW10+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIG5lc3RpbmcgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTaW1wbGUuRWxlbWVudCl7fVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgbGV0IHsgZGVzdHJveWFibGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlc3Ryb3lhYmxlcyAmJiBkZXN0cm95YWJsZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpPTA7IGk8ZGVzdHJveWFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlc3Ryb3lhYmxlc1tpXS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyc3QgJiYgdGhpcy5maXJzdC5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmxhc3QgJiYgdGhpcy5sYXN0Lmxhc3ROb2RlKCk7XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgdGhpcy5uZXdOb2RlKGVsZW1lbnQpO1xuICAgIHRoaXMubmVzdGluZysrO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIHRoaXMubmVzdGluZy0tO1xuICB9XG5cbiAgbmV3Tm9kZShub2RlOiBOb2RlKSB7XG4gICAgaWYgKHRoaXMubmVzdGluZyAhPT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICB0aGlzLmZpcnN0ID0gbmV3IEZpcnN0KG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMubGFzdCA9IG5ldyBMYXN0KG5vZGUpO1xuICB9XG5cbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKSB7XG4gICAgaWYgKHRoaXMubmVzdGluZyAhPT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICB0aGlzLmZpcnN0ID0gYm91bmRzO1xuICAgIH1cblxuICAgIHRoaXMubGFzdCA9IGJvdW5kcztcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKSB7XG4gICAgdGhpcy5kZXN0cm95YWJsZXMgPSB0aGlzLmRlc3Ryb3lhYmxlcyB8fCBbXTtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcy5wdXNoKGQpO1xuICB9XG5cbiAgZmluYWxpemUoc3RhY2s6IEVsZW1lbnRTdGFjaykge1xuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgc3RhY2suYXBwZW5kQ29tbWVudCgnJyk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJlbW90ZUJsb2NrVHJhY2tlciBleHRlbmRzIFNpbXBsZUJsb2NrVHJhY2tlciB7XG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuXG4gICAgY2xlYXIodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUcmFja2VyIGV4dGVuZHMgVHJhY2tlciB7XG4gIHJlc2V0KGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248U2ltcGxlLk5vZGU+O1xufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRhYmxlQmxvY2tUcmFja2VyIGV4dGVuZHMgU2ltcGxlQmxvY2tUcmFja2VyIGltcGxlbWVudHMgVXBkYXRhYmxlVHJhY2tlciB7XG4gIHJlc2V0KGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgeyBkZXN0cm95YWJsZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVzdHJveWFibGVzICYmIGRlc3Ryb3lhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxkZXN0cm95YWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW52LmRpZERlc3Ryb3koZGVzdHJveWFibGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV4dFNpYmxpbmcgPSBjbGVhcih0aGlzKTtcblxuICAgIHRoaXMuZmlyc3QgPSBudWxsO1xuICAgIHRoaXMubGFzdCA9IG51bGw7XG4gICAgdGhpcy5kZXN0cm95YWJsZXMgPSBudWxsO1xuICAgIHRoaXMubmVzdGluZyA9IDA7XG5cbiAgICByZXR1cm4gbmV4dFNpYmxpbmc7XG4gIH1cbn1cblxuY2xhc3MgQmxvY2tMaXN0VHJhY2tlciBpbXBsZW1lbnRzIFRyYWNrZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU2ltcGxlLkVsZW1lbnQsIHByaXZhdGUgYm91bmRMaXN0OiBMaW5rZWRMaXN0PExpbmtlZExpc3ROb2RlICYgQm91bmRzICYgRGVzdHJveWFibGU+KSB7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5ib3VuZExpc3QgPSBib3VuZExpc3Q7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuYm91bmRMaXN0LmZvckVhY2hOb2RlKG5vZGUgPT4gbm9kZS5kZXN0cm95KCkpO1xuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IGhlYWQgPSB0aGlzLmJvdW5kTGlzdC5oZWFkKCk7XG4gICAgcmV0dXJuIGhlYWQgJiYgaGVhZC5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIGxldCB0YWlsID0gdGhpcy5ib3VuZExpc3QudGFpbCgpO1xuICAgIHJldHVybiB0YWlsICYmIHRhaWwubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KF9lbGVtZW50OiBFbGVtZW50KSB7XG4gICAgYXNzZXJ0KGZhbHNlLCAnQ2Fubm90IG9wZW5FbGVtZW50IGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QnKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3QgY2xvc2VFbGVtZW50IGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QnKTtcbiAgfVxuXG4gIG5ld05vZGUoX25vZGU6IE5vZGUpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3QgY3JlYXRlIGEgbmV3IG5vZGUgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgbmV3Qm91bmRzKF9ib3VuZHM6IEJvdW5kcykge1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoX2Q6IERlc3Ryb3lhYmxlKSB7XG4gIH1cblxuICBmaW5hbGl6ZShfc3RhY2s6IEVsZW1lbnRTdGFjaykge1xuICB9XG59XG4iXX0=

@@ -52,3 +52,3 @@ "use strict";

var definition = vm.constants.getOther(_definition);
var stack = vm.evalStack;
var stack = vm.stack;
stack.push(definition);

@@ -58,3 +58,3 @@ stack.push(definition.manager);

_opcodes.APPEND_OPCODES.add(56 /* PushDynamicComponentManager */, function (vm) {
var stack = vm.evalStack;
var stack = vm.stack;
var reference = stack.pop();

@@ -69,26 +69,24 @@ var cache = (0, _reference.isConst)(reference) ? undefined : new _reference.ReferenceCache(reference);

});
_opcodes.APPEND_OPCODES.add(57 /* SetComponentState */, function (vm, _ref2) {
var local = _ref2.op1;
var stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(57 /* InitializeComponentState */, function (vm) {
var stack = vm.stack;
var manager = stack.pop();
var definition = stack.pop();
vm.setLocal(local, { definition: definition, manager: manager, component: null });
stack.push({ definition: definition, manager: manager, component: null });
});
_opcodes.APPEND_OPCODES.add(58 /* PushArgs */, function (vm, _ref3) {
var positional = _ref3.op1,
synthetic = _ref3.op2;
_opcodes.APPEND_OPCODES.add(58 /* PushArgs */, function (vm, _ref2) {
var positional = _ref2.op1,
synthetic = _ref2.op2;
var stack = vm.evalStack;
var stack = vm.stack;
_arguments2.default.setup(stack, positional, !!synthetic);
stack.push(_arguments2.default);
});
_opcodes.APPEND_OPCODES.add(59 /* PrepareArgs */, function (vm, _ref4) {
var _state = _ref4.op1;
_opcodes.APPEND_OPCODES.add(59 /* PrepareArgs */, function (vm, _ref3) {
var _state = _ref3.op1;
var stack = vm.evalStack;
var stack = vm.stack;
var _vm$getLocal = vm.getLocal(_state),
definition = _vm$getLocal.definition,
manager = _vm$getLocal.manager;
var _vm$fetchValue = vm.fetchValue(_state),
definition = _vm$fetchValue.definition,
manager = _vm$fetchValue.manager;

@@ -116,13 +114,13 @@ var args = stack.pop();

});
_opcodes.APPEND_OPCODES.add(60 /* CreateComponent */, function (vm, _ref5) {
var _vm$getLocal2;
_opcodes.APPEND_OPCODES.add(60 /* CreateComponent */, function (vm, _ref4) {
var _vm$fetchValue2;
var flags = _ref5.op1,
_state = _ref5.op2;
var flags = _ref4.op1,
_state = _ref4.op2;
var definition = void 0,
manager = void 0;
var args = vm.evalStack.pop();
var args = vm.stack.pop();
var dynamicScope = vm.dynamicScope();
var state = (_vm$getLocal2 = vm.getLocal(_state), definition = _vm$getLocal2.definition, manager = _vm$getLocal2.manager, _vm$getLocal2);
var state = (_vm$fetchValue2 = vm.fetchValue(_state), definition = _vm$fetchValue2.definition, manager = _vm$fetchValue2.manager, _vm$fetchValue2);
var hasDefaultBlock = flags & 0b01;

@@ -133,8 +131,8 @@ var component = manager.create(vm.env, definition, args, dynamicScope, vm.getSelf(), !!hasDefaultBlock);

});
_opcodes.APPEND_OPCODES.add(61 /* RegisterComponentDestructor */, function (vm, _ref6) {
var _state = _ref6.op1;
_opcodes.APPEND_OPCODES.add(61 /* RegisterComponentDestructor */, function (vm, _ref5) {
var _state = _ref5.op1;
var _vm$getLocal3 = vm.getLocal(_state),
manager = _vm$getLocal3.manager,
component = _vm$getLocal3.component;
var _vm$fetchValue3 = vm.fetchValue(_state),
manager = _vm$fetchValue3.manager,
component = _vm$fetchValue3.component;

@@ -146,41 +144,41 @@ var destructor = manager.getDestructor(component);

vm.beginCacheGroup();
vm.stack().pushSimpleBlock();
vm.elements().pushSimpleBlock();
});
_opcodes.APPEND_OPCODES.add(62 /* PushComponentOperations */, function (vm) {
vm.evalStack.push(new _dom.ComponentElementOperations(vm.env));
vm.stack.push(new _dom.ComponentElementOperations(vm.env));
});
_opcodes.APPEND_OPCODES.add(67 /* DidCreateElement */, function (vm, _ref7) {
var _state = _ref7.op1;
_opcodes.APPEND_OPCODES.add(67 /* DidCreateElement */, function (vm, _ref6) {
var _state = _ref6.op1;
var _vm$getLocal4 = vm.getLocal(_state),
manager = _vm$getLocal4.manager,
component = _vm$getLocal4.component;
var _vm$fetchValue4 = vm.fetchValue(_state),
manager = _vm$fetchValue4.manager,
component = _vm$fetchValue4.component;
var action = 'DidCreateElementOpcode#evaluate';
manager.didCreateElement(component, vm.stack().expectConstructing(action), vm.stack().expectOperations(action));
manager.didCreateElement(component, vm.elements().expectConstructing(action), vm.elements().expectOperations(action));
});
_opcodes.APPEND_OPCODES.add(63 /* GetComponentSelf */, function (vm, _ref8) {
var _state = _ref8.op1;
_opcodes.APPEND_OPCODES.add(63 /* GetComponentSelf */, function (vm, _ref7) {
var _state = _ref7.op1;
var state = vm.getLocal(_state);
vm.evalStack.push(state.manager.getSelf(state.component));
var state = vm.fetchValue(_state);
vm.stack.push(state.manager.getSelf(state.component));
});
_opcodes.APPEND_OPCODES.add(64 /* GetComponentLayout */, function (vm, _ref9) {
var _state = _ref9.op1;
_opcodes.APPEND_OPCODES.add(64 /* GetComponentLayout */, function (vm, _ref8) {
var _state = _ref8.op1;
var _vm$getLocal5 = vm.getLocal(_state),
manager = _vm$getLocal5.manager,
definition = _vm$getLocal5.definition,
component = _vm$getLocal5.component;
var _vm$fetchValue5 = vm.fetchValue(_state),
manager = _vm$fetchValue5.manager,
definition = _vm$fetchValue5.definition,
component = _vm$fetchValue5.component;
vm.evalStack.push(manager.layoutFor(definition, component, vm.env));
vm.stack.push(manager.layoutFor(definition, component, vm.env));
});
_opcodes.APPEND_OPCODES.add(69 /* DidRenderLayout */, function (vm, _ref10) {
var _state = _ref10.op1;
_opcodes.APPEND_OPCODES.add(68 /* DidRenderLayout */, function (vm, _ref9) {
var _state = _ref9.op1;
var _vm$getLocal6 = vm.getLocal(_state),
manager = _vm$getLocal6.manager,
component = _vm$getLocal6.component;
var _vm$fetchValue6 = vm.fetchValue(_state),
manager = _vm$fetchValue6.manager,
component = _vm$fetchValue6.component;
var bounds = vm.stack().popBlock();
var bounds = vm.elements().popBlock();
manager.didRenderLayout(component, bounds);

@@ -260,2 +258,2 @@ vm.env.didCreate(component, manager);

}(_opcodes.UpdatingOpcode);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUMzRCxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBTSxBQUFDOztBQUU5QixBQUFPLEFBQStCLEFBQU0sQUFBb0IsQUFBQyxBQUlqRSxBQUFPLEFBQUUsQUFBYyxBQUFZLEFBQU0sQUFBZSxBQUFDOzs7O0FBQ3pELEFBQU8sQUFBRSxBQUEwQixBQUFFLEFBQU0sQUFBTyxBQUFDOztBQUVuRCxBQUFPLEFBQ0wsQUFBWSxBQUNaLEFBQWMsQUFHZCxBQUFPLEFBQ1AsQUFBTyxBQUNSLEFBQU0sQUFBb0IsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQXVCLDRCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBVyxBQUFFLG1CQUFsQixBQUFHLEFBQ3BEOztRQUFJLEFBQVUsYUFBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBOEIsQUFBVyxBQUFDLEFBQUMsQUFDakY7UUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsQUFBQyxBQUV6QixBQUFLO1VBQUMsQUFBSSxLQUFDLEFBQVUsQUFBQyxBQUFDLEFBQ3ZCLEFBQUs7VUFBQyxBQUFJLEtBQUMsQUFBVSxXQUFDLEFBQU8sQUFBQyxBQUFDLEFBQ2pDLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQThCLG1DQUFFLEFBQUUsY0FDbkQ7UUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsQUFBQyxBQUN6QjtRQUFJLEFBQVMsWUFBRyxBQUFLLE1BQUMsQUFBRyxBQUF1RCxBQUFDLEFBQ2pGO1FBQUksQUFBSyxRQUFHLEFBQU8sd0JBQUMsQUFBUyxBQUFDLGFBQUcsQUFBUyxZ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b0NBRUQsQUFBTSwyQkFDSixBQUFNOztrQkFDRSxBQUFJLEtBQUMsQUFBSyxBQUNoQixBQUFJO2tCQUFFLEFBQUksS0FBQyxBQUFJLEFBQ2YsQUFBSTtrQkFBRSxDQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSSxLQUhyQixBQUdzQixBQUFJLEFBQUMsQUFBQyxBQUNsQyxBQUFDLEFBQ0osQUFBQyxBQUNGO0FBTEssQUFBSTs7OztBQTdCaUMsQUFBYyxBQW9DekQsQUFBTTtJQUE2QjtxQ0FJakM7O21DQUNVLEFBQW9DLFNBQ3BDLEFBQW9CLFdBQ3BCLEFBQWM7OztzREFFdEIsQUFBSyxBQUFFLEFBQUMsc0JBSkE7O2VBQU8sVUFBUCxBQUFPLEFBQTZCLEFBQ3BDO2VBQVMsWUFBVCxBQUFTLEFBQVcsQUFDcEI7ZUFBTSxTQU5ULEFBTUcsQUFBTSxBQUFRO2VBTmIsT0FBRyxBQUFtQixBQUFDLEFBQzNCO2VBQUcsQUFBUSxBQUFZLEFBQUMsQUFRL0I7ZUFBQzs7O29DQUVELEFBQVEsNkJBQUMsQUFBYyxJQUNyQixBQUFJO1lBQUUsQUFBTztZQUFFLEFBQVM7WUFBRSxBQUFNLEFBQUUsU0FBRyxBQUFJLEFBQUMsS0FFMUMsQUFBTzs7Z0JBQUMsQUFBZSxnQkFBQyxBQUFTLFdBQUUsQUFBTSxBQUFDLEFBQUMsQUFFM0MsQUFBRTtXQUFDLEFBQUcsSUFBQyxBQUFTLFVBQUMsQUFBUyxXQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3ZDLEFBQUMsQUFDRjs7OztBQW5CMEMsQUFBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgQVJHUywgeyBBcmd1bWVudHMsIElBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHluYW1pY1Njb3BlIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IEJvdW5kcyBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgQ09OU1RBTlRfVEFHLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSxcbiAgVGFnLFxuICBjb21iaW5lLFxuICBpc0NvbnN0XG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50TWFuYWdlciwgKHZtLCB7IG9wMTogX2RlZmluaXRpb24gfSkgPT4ge1xuICBsZXQgZGVmaW5pdGlvbiA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcjxDb21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4+KF9kZWZpbml0aW9uKTtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IHJlZmVyZW5jZSA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPj4+KCk7XG4gIGxldCBjYWNoZSA9IGlzQ29uc3QocmVmZXJlbmNlKSA/IHVuZGVmaW5lZCA6IG5ldyBSZWZlcmVuY2VDYWNoZTxDb21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4+KHJlZmVyZW5jZSk7XG4gIGxldCBkZWZpbml0aW9uID0gY2FjaGUgPyBjYWNoZS5wZWVrKCkgOiByZWZlcmVuY2UudmFsdWUoKTtcblxuICBzdGFjay5wdXNoKGRlZmluaXRpb24pO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24ubWFuYWdlcik7XG5cbiAgaWYgKGNhY2hlKSB7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5pbnRlcmZhY2UgSW5pdGlhbENvbXBvbmVudFN0YXRlPFQ+IHtcbiAgZGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbjxUPjtcbiAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxUPjtcbiAgY29tcG9uZW50OiBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFN0YXRlPFQ+IHtcbiAgZGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbjxUPjtcbiAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxUPjtcbiAgY29tcG9uZW50OiBUO1xufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0Q29tcG9uZW50U3RhdGUsICh2bSwgeyBvcDE6IGxvY2FsIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuXG4gIGxldCBtYW5hZ2VyID0gc3RhY2sucG9wKCk7XG4gIGxldCBkZWZpbml0aW9uID0gc3RhY2sucG9wKCk7XG5cbiAgdm0uc2V0TG9jYWwobG9jYWwsIHsgZGVmaW5pdGlvbiwgbWFuYWdlciwgY29tcG9uZW50OiBudWxsIH0pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQXJncywgKHZtLCB7IG9wMTogcG9zaXRpb25hbCwgb3AyOiBzeW50aGV0aWMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIEFSR1Muc2V0dXAoc3RhY2ssIHBvc2l0aW9uYWwsICEhc3ludGhldGljKTtcbiAgc3RhY2sucHVzaChBUkdTKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHJlcGFyZUFyZ3MsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IHsgZGVmaW5pdGlvbiwgbWFuYWdlciB9ID0gdm0uZ2V0TG9jYWw8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcblxuICBsZXQgcHJlcGFyZWRBcmdzID0gbWFuYWdlci5wcmVwYXJlQXJncyhkZWZpbml0aW9uLCBhcmdzKTtcblxuICBpZiAocHJlcGFyZWRBcmdzKSB7XG4gICAgYXJncy5jbGVhcigpO1xuXG4gICAgbGV0IHsgcG9zaXRpb25hbCwgbmFtZWQgfSA9IHByZXBhcmVkQXJncztcblxuICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGk9MDsgaTxwb3NpdGlvbmFsQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChwb3NpdGlvbmFsW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZXMgPSBPYmplY3Qua2V5cyhuYW1lZCk7XG4gICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bmFtZWRDb3VudDsgaSsrKSB7XG4gICAgICBzdGFjay5wdXNoKG5hbWVkW25hbWVzW2ldXSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaChuYW1lcyk7XG4gICAgYXJncy5zZXR1cChzdGFjaywgcG9zaXRpb25hbENvdW50LCB0cnVlKTtcbiAgfVxuXG4gIHN0YWNrLnB1c2goYXJncyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNyZWF0ZUNvbXBvbmVudCwgKHZtLCB7IG9wMTogZmxhZ3MsIG9wMjogX3N0YXRlIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24sIG1hbmFnZXI7XG4gIGxldCBhcmdzID0gdm0uZXZhbFN0YWNrLnBvcDxJQXJndW1lbnRzPigpO1xuICBsZXQgZHluYW1pY1Njb3BlID0gdm0uZHluYW1pY1Njb3BlKCk7XG4gIGxldCBzdGF0ZSA9IHsgZGVmaW5pdGlvbiwgbWFuYWdlciB9ID0gdm0uZ2V0TG9jYWw8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGhhc0RlZmF1bHRCbG9jayA9IGZsYWdzICYgMGIwMTtcblxuICBsZXQgY29tcG9uZW50ID0gbWFuYWdlci5jcmVhdGUodm0uZW52LCBkZWZpbml0aW9uLCBhcmdzLCBkeW5hbWljU2NvcGUsIHZtLmdldFNlbGYoKSwgISFoYXNEZWZhdWx0QmxvY2spO1xuICAoc3RhdGUgYXMgQ29tcG9uZW50U3RhdGU8dHlwZW9mIGNvbXBvbmVudD4pLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcblxuICB2bS51cGRhdGVXaXRoKG5ldyBVcGRhdGVDb21wb25lbnRPcGNvZGUoYXJncy50YWcsIGRlZmluaXRpb24ubmFtZSwgY29tcG9uZW50LCBtYW5hZ2VyLCBkeW5hbWljU2NvcGUpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUmVnaXN0ZXJDb21wb25lbnREZXN0cnVjdG9yLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQgfSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IoY29tcG9uZW50KTtcbiAgaWYgKGRlc3RydWN0b3IpIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB7XG4gIHZtLmJlZ2luQ2FjaGVHcm91cCgpO1xuICB2bS5zdGFjaygpLnB1c2hTaW1wbGVCbG9jaygpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50T3BlcmF0aW9ucywgdm0gPT4ge1xuICB2bS5ldmFsU3RhY2sucHVzaChuZXcgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnModm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZENyZWF0ZUVsZW1lbnQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGNvbXBvbmVudCB9ID0gdm0uZ2V0TG9jYWw8Q29tcG9uZW50U3RhdGU8T3BhcXVlPj4oX3N0YXRlKTtcblxuICBsZXQgYWN0aW9uID0gJ0RpZENyZWF0ZUVsZW1lbnRPcGNvZGUjZXZhbHVhdGUnO1xuICBtYW5hZ2VyLmRpZENyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCB2bS5zdGFjaygpLmV4cGVjdENvbnN0cnVjdGluZyhhY3Rpb24pLCB2bS5zdGFjaygpLmV4cGVjdE9wZXJhdGlvbnMoYWN0aW9uKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldENvbXBvbmVudFNlbGYsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCBzdGF0ZSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKHN0YXRlLm1hbmFnZXIuZ2V0U2VsZihzdGF0ZS5jb21wb25lbnQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0Q29tcG9uZW50TGF5b3V0LCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgeyBtYW5hZ2VyLCBkZWZpbml0aW9uLCBjb21wb25lbnQgfSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKG1hbmFnZXIubGF5b3V0Rm9yKGRlZmluaXRpb24sIGNvbXBvbmVudCwgdm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZFJlbmRlckxheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICBsZXQgYm91bmRzID0gdm0uc3RhY2soKS5wb3BCbG9jaygpO1xuXG4gIG1hbmFnZXIuZGlkUmVuZGVyTGF5b3V0KGNvbXBvbmVudCwgYm91bmRzKTtcblxuICB2bS5lbnYuZGlkQ3JlYXRlKGNvbXBvbmVudCwgbWFuYWdlcik7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgRGlkVXBkYXRlTGF5b3V0T3Bjb2RlKG1hbmFnZXIsIGNvbXBvbmVudCwgYm91bmRzKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbW1pdENvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB2bS5jb21taXRDYWNoZUdyb3VwKCkpO1xuXG5leHBvcnQgY2xhc3MgVXBkYXRlQ29tcG9uZW50T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwidXBkYXRlLWNvbXBvbmVudFwiO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhZzogVGFnLFxuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPENvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGxldCBjb21wb25lbnRUYWcgPSBtYW5hZ2VyLmdldFRhZyhjb21wb25lbnQpO1xuXG4gICAgaWYgKGNvbXBvbmVudFRhZykge1xuICAgICAgdGhpcy50YWcgPSBjb21iaW5lKFt0YWcsIGNvbXBvbmVudFRhZ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICB9XG4gIH1cblxuICBldmFsdWF0ZShfdm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBjb21wb25lbnQsIG1hbmFnZXIsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIudXBkYXRlKGNvbXBvbmVudCwgZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLm5hbWUpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZFVwZGF0ZUxheW91dE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImRpZC11cGRhdGUtbGF5b3V0XCI7XG4gIHB1YmxpYyB0YWc6IFRhZyA9IENPTlNUQU5UX1RBRztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBwcml2YXRlIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgIHByaXZhdGUgYm91bmRzOiBCb3VuZHNcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50LCBib3VuZHMgfSA9IHRoaXM7XG5cbiAgICBtYW5hZ2VyLmRpZFVwZGF0ZUxheW91dChjb21wb25lbnQsIGJvdW5kcyk7XG5cbiAgICB2bS5lbnYuZGlkVXBkYXRlKGNvbXBvbmVudCwgbWFuYWdlcik7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBYyxBQUFrQixBQUFjLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQy9FLEFBQU8sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFNLEFBQUM7O0FBRTlCLEFBQU8sQUFBK0IsQUFBTSxBQUFvQixBQUFDOzs7O0FBSWpFLEFBQU8sQUFBRSxBQUEwQixBQUFFLEFBQU0sQUFBTyxBQUFDOztBQUVuRCxBQUFPLEFBQ0wsQUFBWSxBQUNaLEFBQWMsQUFHZCxBQUFPLEFBQ1AsQUFBTyxBQUNSLEFBQU0sQUFBb0IsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQXVCLDRCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBVyxBQUFFLG1CQUFsQixBQUFHLEFBQ3BEOztRQUFJLEFBQVUsYUFBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBOEIsQUFBVyxBQUFDLEFBQUMsQUFDakY7UUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssQUFBQyxBQUVyQixBQUFLO1VBQUMsQUFBSSxLQUFDLEFBQVUsQUFBQyxBQUFDLEFBQ3ZCLEFBQUs7VUFBQyxBQUFJLEtBQUMsQUFBVSxXQUFDLEFBQU8sQUFBQyxBQUFDLEFBQ2pDLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQThCLG1DQUFFLEFBQUUsY0FDbkQ7UUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssQUFBQyxBQUNyQjtRQUFJLEFBQVMsWUFBRyxBQUFLLE1BQUMsQUFBRyxBQUF1RCxBQUFDLEFBQ2pGO1FBQUksQUFBSyxRQUFHLEFBQU8sd0JBQUMsQUFBUyxBQUFDLGFBQUcsQUFBUyxZQUFHLEFBQUksQUFBYyw4QkFBOEIsQUFBUyxBQUFD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QUNmLEFBQUk7a0JBQUUsQ0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksS0FIckIsQUFHc0IsQUFBSSxBQUFDLEFBQUMsQUFDbEMsQUFBQyxBQUNKLEFBQUMsQUFDRjtBQUxLLEFBQUk7Ozs7QUE3QmlDLEFBQWMsQUFvQ3pELEFBQU07SUFBNkI7cUNBSWpDOzttQ0FDVSxBQUFvQyxTQUNwQyxBQUFvQixXQUNwQixBQUFjOzs7c0RBRXRCLEFBQUssQUFBRSxBQUFDLHNCQUpBOztlQUFPLFVBQVAsQUFBTyxBQUE2QixBQUNwQztlQUFTLFlBQVQsQUFBUyxBQUFXLEFBQ3BCO2VBQU0sU0FOVCxBQU1HLEFBQU0sQUFBUTtlQU5iLE9BQUcsQUFBbUIsQUFBQyxBQUMzQjtlQUFHLEFBQVEsQUFBWSxBQUFDLEFBUS9CO2VBQUM7OztvQ0FFRCxBQUFRLDZCQUFDLEFBQWMsSUFDckIsQUFBSTtZQUFFLEFBQU87WUFBRSxBQUFTO1lBQUUsQUFBTSxBQUFFLFNBQUcsQUFBSSxBQUFDLEtBRTFDLEFBQU87O2dCQUFDLEFBQWUsZ0JBQUMsQUFBUyxXQUFFLEFBQU0sQUFBQyxBQUFDLEFBRTNDLEFBQUU7V0FBQyxBQUFHLElBQUMsQUFBUyxVQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN2QyxBQUFDLEFBQ0Y7Ozs7QUFuQjBDLEFBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AsIE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgQVJHUywgeyBBcmd1bWVudHMsIElBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHluYW1pY1Njb3BlIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IEJvdW5kcyBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENPTlNUQU5UX1RBRyxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsXG4gIFRhZyxcbiAgY29tYmluZSxcbiAgaXNDb25zdFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE1hbmFnZXIsICh2bSwgeyBvcDE6IF9kZWZpbml0aW9uIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24gPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihfZGVmaW5pdGlvbik7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgcmVmZXJlbmNlID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+Pj4oKTtcbiAgbGV0IGNhY2hlID0gaXNDb25zdChyZWZlcmVuY2UpID8gdW5kZWZpbmVkIDogbmV3IFJlZmVyZW5jZUNhY2hlPENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPj4ocmVmZXJlbmNlKTtcbiAgbGV0IGRlZmluaXRpb24gPSBjYWNoZSA/IGNhY2hlLnBlZWsoKSA6IHJlZmVyZW5jZS52YWx1ZSgpO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcblxuICBpZiAoY2FjaGUpIHtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbmludGVyZmFjZSBJbml0aWFsQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IFQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Jbml0aWFsaXplQ29tcG9uZW50U3RhdGUsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG5cbiAgbGV0IG1hbmFnZXIgPSBzdGFjay5wb3AoKTtcbiAgbGV0IGRlZmluaXRpb24gPSBzdGFjay5wb3AoKTtcblxuICBzdGFjay5wdXNoKHsgZGVmaW5pdGlvbiwgbWFuYWdlciwgY29tcG9uZW50OiBudWxsIH0pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQXJncywgKHZtLCB7IG9wMTogcG9zaXRpb25hbCwgb3AyOiBzeW50aGV0aWMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgQVJHUy5zZXR1cChzdGFjaywgcG9zaXRpb25hbCwgISFzeW50aGV0aWMpO1xuICBzdGFjay5wdXNoKEFSR1MpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QcmVwYXJlQXJncywgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmZldGNoVmFsdWU8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcblxuICBsZXQgcHJlcGFyZWRBcmdzID0gbWFuYWdlci5wcmVwYXJlQXJncyhkZWZpbml0aW9uLCBhcmdzKTtcblxuICBpZiAocHJlcGFyZWRBcmdzKSB7XG4gICAgYXJncy5jbGVhcigpO1xuXG4gICAgbGV0IHsgcG9zaXRpb25hbCwgbmFtZWQgfSA9IHByZXBhcmVkQXJncztcblxuICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGk9MDsgaTxwb3NpdGlvbmFsQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChwb3NpdGlvbmFsW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZXMgPSBPYmplY3Qua2V5cyhuYW1lZCk7XG4gICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bmFtZWRDb3VudDsgaSsrKSB7XG4gICAgICBzdGFjay5wdXNoKG5hbWVkW25hbWVzW2ldXSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaChuYW1lcyk7XG4gICAgYXJncy5zZXR1cChzdGFjaywgcG9zaXRpb25hbENvdW50LCB0cnVlKTtcbiAgfVxuXG4gIHN0YWNrLnB1c2goYXJncyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNyZWF0ZUNvbXBvbmVudCwgKHZtLCB7IG9wMTogZmxhZ3MsIG9wMjogX3N0YXRlIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24sIG1hbmFnZXI7XG4gIGxldCBhcmdzID0gdm0uc3RhY2sucG9wPElBcmd1bWVudHM+KCk7XG4gIGxldCBkeW5hbWljU2NvcGUgPSB2bS5keW5hbWljU2NvcGUoKTtcbiAgbGV0IHN0YXRlID0geyBkZWZpbml0aW9uLCBtYW5hZ2VyIH0gPSB2bS5mZXRjaFZhbHVlPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBoYXNEZWZhdWx0QmxvY2sgPSBmbGFncyAmIDBiMDE7XG5cbiAgbGV0IGNvbXBvbmVudCA9IG1hbmFnZXIuY3JlYXRlKHZtLmVudiwgZGVmaW5pdGlvbiwgYXJncywgZHluYW1pY1Njb3BlLCB2bS5nZXRTZWxmKCksICEhaGFzRGVmYXVsdEJsb2NrKTtcbiAgKHN0YXRlIGFzIENvbXBvbmVudFN0YXRlPHR5cGVvZiBjb21wb25lbnQ+KS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlQ29tcG9uZW50T3Bjb2RlKGFyZ3MudGFnLCBkZWZpbml0aW9uLm5hbWUsIGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvciwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IoY29tcG9uZW50KTtcbiAgaWYgKGRlc3RydWN0b3IpIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB7XG4gIHZtLmJlZ2luQ2FjaGVHcm91cCgpO1xuICB2bS5lbGVtZW50cygpLnB1c2hTaW1wbGVCbG9jaygpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50T3BlcmF0aW9ucywgdm0gPT4ge1xuICB2bS5zdGFjay5wdXNoKG5ldyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyh2bS5lbnYpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRGlkQ3JlYXRlRWxlbWVudCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGFjdGlvbiA9ICdEaWRDcmVhdGVFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgbWFuYWdlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdm0uZWxlbWVudHMoKS5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0uZWxlbWVudHMoKS5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRTZWxmLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhdGUgPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLnN0YWNrLnB1c2goc3RhdGUubWFuYWdlci5nZXRTZWxmKHN0YXRlLmNvbXBvbmVudCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRMYXlvdXQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGRlZmluaXRpb24sIGNvbXBvbmVudCB9ID0gdm0uZmV0Y2hWYWx1ZTxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5zdGFjay5wdXNoKG1hbmFnZXIubGF5b3V0Rm9yKGRlZmluaXRpb24sIGNvbXBvbmVudCwgdm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZFJlbmRlckxheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBib3VuZHMgPSB2bS5lbGVtZW50cygpLnBvcEJsb2NrKCk7XG5cbiAgbWFuYWdlci5kaWRSZW5kZXJMYXlvdXQoY29tcG9uZW50LCBib3VuZHMpO1xuXG4gIHZtLmVudi5kaWRDcmVhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcblxuICB2bS51cGRhdGVXaXRoKG5ldyBEaWRVcGRhdGVMYXlvdXRPcGNvZGUobWFuYWdlciwgY29tcG9uZW50LCBib3VuZHMpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWl0Q29tcG9uZW50VHJhbnNhY3Rpb24sIHZtID0+IHZtLmNvbW1pdENhY2hlR3JvdXAoKSk7XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDb21wb25lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtY29tcG9uZW50XCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFnOiBUYWcsXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBwcml2YXRlIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBwcml2YXRlIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgbGV0IGNvbXBvbmVudFRhZyA9IG1hbmFnZXIuZ2V0VGFnKGNvbXBvbmVudCk7XG5cbiAgICBpZiAoY29tcG9uZW50VGFnKSB7XG4gICAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW3RhZywgY29tcG9uZW50VGFnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKF92bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlIH0gPSB0aGlzO1xuXG4gICAgbWFuYWdlci51cGRhdGUoY29tcG9uZW50LCBkeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMubmFtZSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlkVXBkYXRlTGF5b3V0T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLXVwZGF0ZS1sYXlvdXRcIjtcbiAgcHVibGljIHRhZzogVGFnID0gQ09OU1RBTlRfVEFHO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kc1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQsIGJvdW5kcyB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIuZGlkVXBkYXRlTGF5b3V0KGNvbXBvbmVudCwgYm91bmRzKTtcblxuICAgIHZtLmVudi5kaWRVcGRhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcbiAgfVxufVxuIl19

@@ -59,3 +59,3 @@ "use strict";

_opcodes.APPEND_OPCODES.add(26 /* DynamicContent */, function (vm, _ref) {
_opcodes.APPEND_OPCODES.add(25 /* DynamicContent */, function (vm, _ref) {
var append = _ref.op1;

@@ -108,3 +108,3 @@

AppendDynamicOpcode.prototype.evaluate = function evaluate(vm) {
var reference = vm.evalStack.pop();
var reference = vm.stack.pop();
var normalized = this.normalize(reference);

@@ -119,3 +119,3 @@ var value = void 0,

}
var stack = vm.stack();
var stack = vm.elements();
var upsert = this.insert(vm.env.getAppendOperations(), stack, value);

@@ -145,10 +145,10 @@ var bounds = new _builder.Fragment(upsert.bounds);

if (this.deopted) {
vm.pushEvalFrame(this.start);
vm.goto(this.start);
} else {
var value = vm.evalStack.pop();
var value = vm.stack.pop();
if ((0, _interfaces.isComponentDefinition)(value)) {
this.deopt(vm.env);
vm.pushEvalFrame(this.start);
vm.goto(this.start);
} else {
vm.evalStack.push(value);
vm.stack.push(value);
_AppendDynamicOpcode.prototype.evaluate.call(this, vm);

@@ -545,2 +545,2 @@ }

}(GuardedUpdateOpcode);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFlLEFBS2IsQUFBWSxBQUNaLEFBQU0sQUFDTixBQUFRLEFBRVIsQUFBYyxBQUNkLEFBQWMsQUFDZixBQUFNLEFBQWMsQUFBQzs7QUFDdEIsQUFBTyxBQUFFLEFBQXFCLEFBQUUsQUFBTSxBQUE0QixBQUFDOztBQUVuRSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUczRCxBQUFPLEFBQXFDLEFBQWMsQUFBRSxBQUFZLEFBQWMsQUFBVSxBQUFFLEFBQU8sQUFBRSxBQUFHLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUUzSSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQUssQUFBRSxBQUFNLEFBQWMsQUFBQzs7QUFDN0MsQUFBTyxBQUFFLEFBQVEsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFDekMsQUFBTyxBQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRXhELEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRW5ELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWlCLHNCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBTSxBQUFFLGNBQWIsQUFBRyxBQUM5Qzs7UUFBSSxBQUFNLFNBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFRLFNBQUMsQUFBTSxBQUFtQyxBQUFDLEFBQzdFLEFBQU07V0FBQyxBQUFRLFNBQUMsQUFBRSxBQUFDLEFBQUMsQUFDdEIsQUFBQyxBQUFDLEFBQUM7O0FBRUgsaUJBQWlCLEFBQWEsT0FDNUIsQUFBTTtXQUFDLEFBQUssVUFBSyxBQUFJLFFBQUksQUFBSyxVQUFLLEFBQVMsYUFBSSxPQUFPLEFBQUssTUFBQyxBQUFVLEFBQUMsZ0JBQUssQUFBVSxBQUFDLEFBQzFG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QUFBQyxBQUM1QyxBQUFDOzs7MENBRVMsQUFBVSxpQ0FBQyxBQUFPLEtBQUUsQUFBNEIsV0FBRSxBQUF3QyxPQUFFLEFBQWdCLFFBQUUsQUFBYyxRQUNwSSxBQUFNO2VBQUMsSUFBSSxBQUEyQiw0QkFBQyxBQUFTLFdBQUUsQUFBSyxPQUFFLEFBQU0sUUFBRSxBQUFNLEFBQUMsQUFBQyxBQUMzRSxBQUFDLEFBQ0YsQUFFRDs7OztFQWxCaUQsQUFBc0M7O0lBa0JyRDsyQ0FBbEM7Ozs7O3lGQUNFOztnQkFBSSxPQUFHLEFBQWlCLEFBQUMsQUFLM0I7ZUFBQzs7OzBDQUhXLEFBQU0seUJBQUMsQUFBd0IsS0FBRSxBQUFjLFFBQUUsQUFBd0IsT0FDakYsQUFBTTtlQUFDLEFBQWMsNEJBQUMsQUFBRyxLQUFFLEFBQU0sUUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QyxBQUFDLEFBQ0Y7Ozs7RUFOeUMsQUFBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXBzZXJ0LCB7XG4gIEluc2VydGlvbixcbiAgQ2F1dGlvdXNJbnNlcnRpb24sXG4gIFRydXN0aW5nSW5zZXJ0aW9uLFxuXG4gIGlzU2FmZVN0cmluZyxcbiAgaXNOb2RlLFxuICBpc1N0cmluZyxcblxuICBjYXV0aW91c0luc2VydCxcbiAgdHJ1c3RpbmdJbnNlcnRcbn0gZnJvbSAnLi4vLi4vdXBzZXJ0JztcbmltcG9ydCB7IGlzQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuLi8uLi9kb20vaGVscGVyJztcbmltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFRyeU9wY29kZSB9IGZyb20gJy4uLy4uL3ZtL3VwZGF0ZSc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsIFJlZmVyZW5jZUNhY2hlLCBVcGRhdGFibGVUYWcsIFRhZ1dyYXBwZXIsIGlzTW9kaWZpZWQsIGlzQ29uc3QsIG1hcCB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcHRpb24sIE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQ3Vyc29yLCBjbGVhciB9IGZyb20gJy4uLy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EeW5hbWljQ29udGVudCwgKHZtLCB7IG9wMTogYXBwZW5kIH0pID0+IHtcbiAgbGV0IG9wY29kZSA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcihhcHBlbmQpIGFzIEFwcGVuZER5bmFtaWNPcGNvZGU8SW5zZXJ0aW9uPjtcbiAgb3Bjb2RlLmV2YWx1YXRlKHZtKTtcbn0pO1xuXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlWyd0b1N0cmluZyddICE9PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBzdHJpbmcge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSh2YWx1ZTogT3BhcXVlKTogVHJ1c3RpbmdJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS50b0hUTUwoKTtcbiAgfVxuICBpZiAoaXNOb2RlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWU6IE9wYXF1ZSk6IENhdXRpb3VzSW5zZXJ0aW9uIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkgfHwgaXNOb2RlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IHR5cGUgQXBwZW5kRHluYW1pY09wY29kZUNvbnN0cnVjdG9yID0gIHR5cGVvZiBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSB8IHR5cGVvZiBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcGVuZER5bmFtaWNPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VD47XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFQpOiBVcHNlcnQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCByZWZlcmVuY2UgPSB2bS5ldmFsU3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcbiAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplKHJlZmVyZW5jZSk7XG5cbiAgICBsZXQgdmFsdWUsIGNhY2hlO1xuXG4gICAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgICAgdmFsdWUgPSBub3JtYWxpemVkLnZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5vcm1hbGl6ZWQpO1xuICAgICAgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YWNrID0gdm0uc3RhY2soKTtcbiAgICBsZXQgdXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgc3RhY2ssIHZhbHVlKTtcbiAgICBsZXQgYm91bmRzID0gbmV3IEZyYWdtZW50KHVwc2VydC5ib3VuZHMpO1xuXG4gICAgc3RhY2submV3Qm91bmRzKGJvdW5kcyk7XG5cbiAgICBpZiAoY2FjaGUgLyogaS5lLiAhaXNDb25zdChyZWZlcmVuY2UpICovKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKHRoaXMudXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBBcHBlbmREeW5hbWljT3Bjb2RlPFQ+IHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IEFwcGVuZE9wY29kZTogdHlwZW9mIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIHwgdHlwZW9mIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuICBwcml2YXRlIHN0YXJ0ID0gLTE7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBkZW9wdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0ID09PSAtMTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5zdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB2YWx1ZSA9IHZtLmV2YWxTdGFjay5wb3AoKTtcblxuICAgICAgaWYoaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmRlb3B0KHZtLmVudik7XG4gICAgICAgIHZtLnB1c2hFdmFsRnJhbWUodGhpcy5zdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bS5ldmFsU3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVvcHQoX2VudjogRW52aXJvbm1lbnQpOiBudW1iZXIgeyAvLyBQdWJsaWMgYmVjYXVzZSBpdCdzIHVzZWQgaW4gdGhlIGxhenkgZGVvcHRcbiAgICAvLyBBdCBjb21waWxlIHRpbWUsIHdlIGRldGVybWluZWQgdGhhdCB0aGlzIGFwcGVuZCBjYWxsc2l0ZSBtaWdodCByZWZlclxuICAgIC8vIHRvIGEgbG9jYWwgdmFyaWFibGUvcHJvcGVydHkgbG9va3VwIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIGF0IHJ1bnRpbWUuXG4gICAgLy9cbiAgICAvLyBXZSBjb3VsZCBoYXZlIGVhZ2VybHkgY29tcGlsZWQgdGhpcyBjYWxsc2l0ZSBpbnRvIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgIHt7I2lmIChpcy1jb21wb25lbnQtZGVmaW5pdGlvbiBmb28pfX1cbiAgICAvLyAgICAge3tjb21wb25lbnQgZm9vfX1cbiAgICAvLyAgIHt7ZWxzZX19XG4gICAgLy8gICAgIHt7Zm9vfX1cbiAgICAvLyAgIHt7L2lmfX1cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIGluIHByYWN0aWNlLCB0aGVyZSBtaWdodCBiZSBhIGxhcmdlIGFtb3V0IG9mIHRoZXNlIGNhbGxzaXRlc1xuICAgIC8vIGFuZCBtb3N0IG9mIHRoZW0gd291bGQgcmVzb2x2ZSB0byBhIHNpbXBsZSB2YWx1ZSBsb29rdXAuIFRoZXJlZm9yZSwgd2VcbiAgICAvLyB0cmllZCB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWVkIHRoYXQgdGhlIGNhbGxzaXRlIHdpbGwgcmVzb2x2ZSB0b1xuICAgIC8vIGFwcGVuZGluZyBhIHNpbXBsZSB2YWx1ZS5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIHdlIGhhdmUgcmVhY2hlZCBoZXJlIGJlY2F1c2UgYXQgcnVudGltZSwgdGhlIGd1YXJkIGNvbmRpdGlvbmFsXG4gICAgLy8gaGF2ZSBkZXRlY3RlZCB0aGF0IHRoaXMgY2FsbHNpdGUgaXMgaW5kZWVkIHJlZmVycmluZyB0byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gb2JqZWN0LiBTaW5jZSB0aGlzIGlzIGxpa2VseSBnb2luZyB0byBiZSB0cnVlIGZvciBvdGhlclxuICAgIC8vIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjYWxsc2l0ZSwgaXQgaXMgbm93IGFwcHJvcGlhdGUgdG8gZGVvcHQgaW50byB0aGVcbiAgICAvLyBleHBhbmRlZCB2ZXJzaW9uIHRoYXQgaGFuZGxlcyBib3RoIGNhc2VzLiBUaGUgY29tcGlsYXRpb24gd291bGQgbG9va1xuICAgIC8vIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgICAgUHV0VmFsdWUoZXhwcmVzc2lvbilcbiAgICAvLyAgICAgICAgICAgICAgIFRlc3QoaXMtY29tcG9uZW50LWRlZmluaXRpb24pXG4gICAgLy8gICAgICAgICAgICAgICBFbnRlcihCRUdJTiwgRU5EKVxuICAgIC8vICAgQkVHSU46ICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgSnVtcFVubGVzcyhWQUxVRSlcbiAgICAvLyAgICAgICAgICAgICAgIFB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uT3Bjb2RlXG4gICAgLy8gICAgICAgICAgICAgICBPcGVuQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBDbG9zZUNvbXBvbmVudFxuICAgIC8vICAgICAgICAgICAgICAgSnVtcChFTkQpXG4gICAgLy8gICBWQUxVRTogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBPcHRpbWl6ZWRBcHBlbmRcbiAgICAvLyAgIEVORDogICAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIEV4aXRcbiAgICAvL1xuICAgIC8vIEtlZXAgaW4gbWluZCB0aGF0IGV2ZW4gaWYgd2UgKmRvbid0KiByZWFjaCBoZXJlIGF0IGluaXRpYWwgcmVuZGVyIHRpbWUsXG4gICAgLy8gaXQgaXMgc3RpbGwgcG9zc2libGUgKGFsdGhvdWdoIHF1aXRlIHJhcmUpIHRoYXQgdGhlIHNpbXBsZSB2YWx1ZSB3ZVxuICAgIC8vIGVuY291bnRlciBkdXJpbmcgaW5pdGlhbCByZW5kZXIgY291bGQgbGF0ZXIgY2hhbmdlIGludG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdCBhdCB1cGRhdGUgdGltZS4gVGhhdCBpcyBoYW5kbGVkIGJ5IHRoZSBcImxhenkgZGVvcHRcIlxuICAgIC8vIGNvZGUgb24gdGhlIHVwZGF0ZSBzaWRlIChzY3JvbGwgZG93biBmb3IgdGhlIG5leHQgYmlnIGJsb2NrIG9mIGNvbW1lbnQpLlxuXG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG59XG5cbmNsYXNzIElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSBleHRlbmRzIENvbmRpdGlvbmFsUmVmZXJlbmNlIHtcbiAgc3RhdGljIGNyZWF0ZShpbm5lcjogUmVmZXJlbmNlPE9wYXF1ZT4pOiBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlKGlubmVyKTtcbiAgfVxuXG4gIHRvQm9vbCh2YWx1ZTogT3BhcXVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LFxuICAgIHByb3RlY3RlZCBib3VuZHM6IEZyYWdtZW50LFxuICAgIHByb3RlY3RlZCB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY2FjaGUucmV2YWxpZGF0ZSgpO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICBsZXQgeyBib3VuZHMsIHVwc2VydCB9ID0gdGhpcztcbiAgICAgIGxldCB7IGRvbSB9ID0gdm07XG5cbiAgICAgIGlmKCF0aGlzLnVwc2VydC51cGRhdGUoZG9tLCB2YWx1ZSkpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IG5ldyBDdXJzb3IoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgY2xlYXIoYm91bmRzKSk7XG4gICAgICAgIHVwc2VydCA9IHRoaXMudXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgY3Vyc29yLCB2YWx1ZSBhcyBUKTtcbiAgICAgIH1cblxuICAgICAgYm91bmRzLnVwZGF0ZSh1cHNlcnQuYm91bmRzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQsXG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsczogeyBsYXN0VmFsdWU6IEpTT04uc3RyaW5naWZ5KGNhY2hlLnBlZWsoKSkgfVxuICAgIH07XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgR3VhcmRlZFVwZGF0ZU9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIFVwZGF0ZU9wY29kZTxUPiB7XG4gIHByaXZhdGUgX3RhZzogVGFnV3JhcHBlcjxVcGRhdGFibGVUYWc+O1xuICBwcml2YXRlIGRlb3B0ZWQ6IE9wdGlvbjxUcnlPcGNvZGU+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LFxuICAgIGJvdW5kczogRnJhZ21lbnQsXG4gICAgdXBzZXJ0OiBVcHNlcnRcbiAgKSB7XG4gICAgc3VwZXIoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgICB0aGlzLnRhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUodGhpcy50YWcpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBpZiAodGhpcy5kZW9wdGVkKSB7XG4gICAgICB2bS5ldmFsdWF0ZU9wY29kZSh0aGlzLmRlb3B0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNDb21wb25lbnREZWZpbml0aW9uKHRoaXMucmVmZXJlbmNlLnZhbHVlKCkpKSB7XG4gICAgICAgIHRoaXMubGF6eURlb3B0KHZtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxhenlEZW9wdChfdm06IFVwZGF0aW5nVk0pIHtcbiAgICAvLyBEdXJpZ24gaW5pdGlhbCByZW5kZXIsIHdlIGtub3cgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGNvbnRhaW4gYVxuICAgIC8vIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzbyB3ZSBvcHRpbWlzdGljYWxseSBhc3N1bWVkIHRoYXQgdGhpcyBhcHBlbmRcbiAgICAvLyBpcyBqdXN0IGEgbm9ybWFsIGFwcGVuZC4gSG93ZXZlciwgYXQgdXBkYXRlIHRpbWUsIHdlIGRpc2NvdmVyZWQgdGhhdFxuICAgIC8vIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGludG8gY29udGFpbmluZyBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzb1xuICAgIC8vIHdlIG5lZWQgdG8gZG8gYSBcImxhenkgZGVvcHRcIiwgc2ltdWxhdGluZyB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaWZcbiAgICAvLyB3ZSBoYWQgZGVjaWRlZCB0byBwZXJmb3JtIHRoZSBkZW9wdCBpbiB0aGUgZmlyc3QgcGxhY2UgZHVyaW5nIGluaXRpYWxcbiAgICAvLyByZW5kZXIuXG4gICAgLy9cbiAgICAvLyBNb3JlIGNvbmNyZXRlbHksIHdlIHdvdWxkIGhhdmUgZXhwYW5kZWQgdGhlIGN1cmx5IGludG8gYSBpZi9lbHNlLCBhbmRcbiAgICAvLyBiYXNlZCBvbiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIGNvbXBvbmVudCBkZWZpbml0aW9uIG9yIG5vdCwgd2Ugd291bGRcbiAgICAvLyBoYXZlIGVudGVyZWQgZWl0aGVyIHRoZSBkeW5hbWljIGNvbXBvbmVudCBicmFuY2ggb3IgdGhlIHNpbXBsZSB2YWx1ZVxuICAgIC8vIGJyYW5jaC5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHdlIHJlbmRlcmVkIGEgc2ltcGxlIHZhbHVlIGR1cmluZyBpbml0aWFsIHJlbmRlciAoYW5kIGFsbCB0aGVcbiAgICAvLyB1cGRhdGVzIHVwIHVudGlsIHRoaXMgcG9pbnQpLCB3ZSBuZWVkIHRvIHByZXRlbmQgdGhhdCB0aGUgcmVzdWx0IGlzXG4gICAgLy8gcHJvZHVjZWQgYnkgdGhlIFwiVkFMVUVcIiBicmFuY2ggb2YgdGhlIGRlb3B0ZWQgYXBwZW5kIG9wY29kZTpcbiAgICAvL1xuICAgIC8vICAgVHJ5KEJFR0lOLCBFTkQpXG4gICAgLy8gICAgIEFzc2VydChJc0NvbXBvbmVudERlZmluaXRpb24sIGV4cGVjdGVkPWZhbHNlKVxuICAgIC8vICAgICBPcHRpbWl6ZWRVcGRhdGVcbiAgICAvL1xuICAgIC8vIEluIHRoaXMgY2FzZSwgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBmcm9tIGJlaW5nIGEgc2ltcGxlXG4gICAgLy8gdmFsdWUgaW50byBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaXMgdGhhdFxuICAgIC8vIHRoZSBhc3NlcnQgd291bGQgdGhyb3csIGNhdXNpbmcgdGhlIFRyeSBvcGNvZGUgdG8gdGVhcmRvd24gdGhlIGJvdW5kc1xuICAgIC8vIGFuZCByZXJ1biB0aGUgb3JpZ2luYWwgYXBwZW5kIG9wY29kZS5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHRoZSBUcnkgb3Bjb2RlIHdvdWxkIGhhdmUgbnVrZWQgdGhlIHVwZGF0aW5nIG9wY29kZXMgYW55d2F5LCB3ZVxuICAgIC8vIHdvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgc2ltdWxhdGluZyB0aG9zZS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMgdG9cbiAgICAvLyBleGVjdXRlIHRoZSBUcnkgb3Bjb2RlIGFuZCBpbW1lZGlhdGVseSB0aHJvdy5cblxuICAgIHJldHVybiBudWxsIGFzIGFueTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgZGVvcHRlZCB9ID0gdGhpcztcblxuICAgIGlmIChkZW9wdGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBndWlkLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZW9wdGVkOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogW2Rlb3B0ZWQudG9KU09OKCldXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3VwZXIudG9KU09OKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgX3JlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxDYXV0aW91c0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3VhcmRlZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZEFwcGVuZE9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ2d1YXJkZWQtY2F1dGlvdXMtYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgQXBwZW5kT3Bjb2RlID0gT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGU7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxDYXV0aW91c0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmREeW5hbWljT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLXRydXN0aW5nLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCBfcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLXRydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC10cnVzdGluZy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUcnVzdGluZ0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAndHJ1c3RpbmctdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFlLEFBS2IsQUFBWSxBQUNaLEFBQU0sQUFDTixBQUFRLEFBRVIsQUFBYyxBQUNkLEFBQWMsQUFDZixBQUFNLEFBQWMsQUFBQzs7QUFDdEIsQUFBTyxBQUFFLEFBQXFCLEFBQUUsQUFBTSxBQUE0QixBQUFDOztBQUVuRSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUczRCxBQUFPLEFBQXFDLEFBQWMsQUFBRSxBQUFZLEFBQWMsQUFBVSxBQUFFLEFBQU8sQUFBRSxBQUFHLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUUzSSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQUssQUFBRSxBQUFNLEFBQWMsQUFBQzs7QUFDN0MsQUFBTyxBQUFFLEFBQVEsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFDekMsQUFBTyxBQUFFLEFBQW9CLEFBQUUsQUFBTSxBQUFrQixBQUFDLEFBRXhELEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRW5ELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWlCLHNCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBTSxBQUFFLGNBQWIsQUFBRyxBQUM5Qzs7UUFBSSxBQUFNLFNBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFRLFNBQUMsQUFBTSxBQUFtQyxBQUFDLEFBQzdFLEFBQU07V0FBQyxBQUFRLFNBQUMsQUFBRSxBQUFDLEFBQUMsQUFDdEIsQUFBQyxBQUFDLEFBQUM7O0FBRUgsaUJBQWlCLEFBQWEsT0FDNUIsQUFBTTtXQUFDLEFBQUssVUFBSyxBQUFJLFFBQUksQUFBSyxVQUFLLEFBQVMsYUFBSSxPQUFPLEFBQUssTUFBQyxBQUFVLEFBQUMsZ0JBQUssQUFBVSxBQUFDLEFBQzFG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QUFBQyxBQUM1QyxBQUFDOzs7MENBRVMsQUFBVSxpQ0FBQyxBQUFPLEtBQUUsQUFBNEIsV0FBRSxBQUF3QyxPQUFFLEFBQWdCLFFBQUUsQUFBYyxRQUNwSSxBQUFNO2VBQUMsSUFBSSxBQUEyQiw0QkFBQyxBQUFTLFdBQUUsQUFBSyxPQUFFLEFBQU0sUUFBRSxBQUFNLEFBQUMsQUFBQyxBQUMzRSxBQUFDLEFBQ0YsQUFFRDs7OztFQWxCaUQsQUFBc0M7O0lBa0JyRDsyQ0FBbEM7Ozs7O3lGQUNFOztnQkFBSSxPQUFHLEFBQWlCLEFBQUMsQUFLM0I7ZUFBQzs7OzBDQUhXLEFBQU0seUJBQUMsQUFBd0IsS0FBRSxBQUFjLFFBQUUsQUFBd0IsT0FDakYsQUFBTTtlQUFDLEFBQWMsNEJBQUMsQUFBRyxLQUFFLEFBQU0sUUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QyxBQUFDLEFBQ0Y7Ozs7RUFOeUMsQUFBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXBzZXJ0LCB7XG4gIEluc2VydGlvbixcbiAgQ2F1dGlvdXNJbnNlcnRpb24sXG4gIFRydXN0aW5nSW5zZXJ0aW9uLFxuXG4gIGlzU2FmZVN0cmluZyxcbiAgaXNOb2RlLFxuICBpc1N0cmluZyxcblxuICBjYXV0aW91c0luc2VydCxcbiAgdHJ1c3RpbmdJbnNlcnRcbn0gZnJvbSAnLi4vLi4vdXBzZXJ0JztcbmltcG9ydCB7IGlzQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuLi8uLi9kb20vaGVscGVyJztcbmltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFRyeU9wY29kZSB9IGZyb20gJy4uLy4uL3ZtL3VwZGF0ZSc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsIFJlZmVyZW5jZUNhY2hlLCBVcGRhdGFibGVUYWcsIFRhZ1dyYXBwZXIsIGlzTW9kaWZpZWQsIGlzQ29uc3QsIG1hcCB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcHRpb24sIE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQ3Vyc29yLCBjbGVhciB9IGZyb20gJy4uLy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EeW5hbWljQ29udGVudCwgKHZtLCB7IG9wMTogYXBwZW5kIH0pID0+IHtcbiAgbGV0IG9wY29kZSA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcihhcHBlbmQpIGFzIEFwcGVuZER5bmFtaWNPcGNvZGU8SW5zZXJ0aW9uPjtcbiAgb3Bjb2RlLmV2YWx1YXRlKHZtKTtcbn0pO1xuXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlWyd0b1N0cmluZyddICE9PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGV4dFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBzdHJpbmcge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSh2YWx1ZTogT3BhcXVlKTogVHJ1c3RpbmdJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS50b0hUTUwoKTtcbiAgfVxuICBpZiAoaXNOb2RlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWU6IE9wYXF1ZSk6IENhdXRpb3VzSW5zZXJ0aW9uIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkgfHwgaXNOb2RlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IHR5cGUgQXBwZW5kRHluYW1pY09wY29kZUNvbnN0cnVjdG9yID0gIHR5cGVvZiBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSB8IHR5cGVvZiBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcGVuZER5bmFtaWNPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VD47XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFQpOiBVcHNlcnQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVXaXRoKHZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlO1xuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICAgIGxldCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemUocmVmZXJlbmNlKTtcblxuICAgIGxldCB2YWx1ZSwgY2FjaGU7XG5cbiAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICB2YWx1ZSA9IG5vcm1hbGl6ZWQudmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUobm9ybWFsaXplZCk7XG4gICAgICB2YWx1ZSA9IGNhY2hlLnBlZWsoKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhY2sgPSB2bS5lbGVtZW50cygpO1xuICAgIGxldCB1cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBzdGFjaywgdmFsdWUpO1xuICAgIGxldCBib3VuZHMgPSBuZXcgRnJhZ21lbnQodXBzZXJ0LmJvdW5kcyk7XG5cbiAgICBzdGFjay5uZXdCb3VuZHMoYm91bmRzKTtcblxuICAgIGlmIChjYWNoZSAvKiBpLmUuICFpc0NvbnN0KHJlZmVyZW5jZSkgKi8pIHtcbiAgICAgIHZtLnVwZGF0ZVdpdGgodGhpcy51cGRhdGVXaXRoKHZtLCByZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VhcmRlZEFwcGVuZE9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgQXBwZW5kT3Bjb2RlOiB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG4gIHByaXZhdGUgc3RhcnQgPSAtMTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IGRlb3B0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQgPT09IC0xO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgaWYgKHRoaXMuZGVvcHRlZCkge1xuICAgICAgdm0uZ290byh0aGlzLnN0YXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbHVlID0gdm0uc3RhY2sucG9wKCk7XG5cbiAgICAgIGlmKGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kZW9wdCh2bS5lbnYpO1xuICAgICAgICB2bS5nb3RvKHRoaXMuc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVvcHQoX2VudjogRW52aXJvbm1lbnQpOiBudW1iZXIgeyAvLyBQdWJsaWMgYmVjYXVzZSBpdCdzIHVzZWQgaW4gdGhlIGxhenkgZGVvcHRcbiAgICAvLyBBdCBjb21waWxlIHRpbWUsIHdlIGRldGVybWluZWQgdGhhdCB0aGlzIGFwcGVuZCBjYWxsc2l0ZSBtaWdodCByZWZlclxuICAgIC8vIHRvIGEgbG9jYWwgdmFyaWFibGUvcHJvcGVydHkgbG9va3VwIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIGF0IHJ1bnRpbWUuXG4gICAgLy9cbiAgICAvLyBXZSBjb3VsZCBoYXZlIGVhZ2VybHkgY29tcGlsZWQgdGhpcyBjYWxsc2l0ZSBpbnRvIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgIHt7I2lmIChpcy1jb21wb25lbnQtZGVmaW5pdGlvbiBmb28pfX1cbiAgICAvLyAgICAge3tjb21wb25lbnQgZm9vfX1cbiAgICAvLyAgIHt7ZWxzZX19XG4gICAgLy8gICAgIHt7Zm9vfX1cbiAgICAvLyAgIHt7L2lmfX1cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIGluIHByYWN0aWNlLCB0aGVyZSBtaWdodCBiZSBhIGxhcmdlIGFtb3V0IG9mIHRoZXNlIGNhbGxzaXRlc1xuICAgIC8vIGFuZCBtb3N0IG9mIHRoZW0gd291bGQgcmVzb2x2ZSB0byBhIHNpbXBsZSB2YWx1ZSBsb29rdXAuIFRoZXJlZm9yZSwgd2VcbiAgICAvLyB0cmllZCB0byBiZSBvcHRpbWlzdGljIGFuZCBhc3N1bWVkIHRoYXQgdGhlIGNhbGxzaXRlIHdpbGwgcmVzb2x2ZSB0b1xuICAgIC8vIGFwcGVuZGluZyBhIHNpbXBsZSB2YWx1ZS5cbiAgICAvL1xuICAgIC8vIEhvd2V2ZXIsIHdlIGhhdmUgcmVhY2hlZCBoZXJlIGJlY2F1c2UgYXQgcnVudGltZSwgdGhlIGd1YXJkIGNvbmRpdGlvbmFsXG4gICAgLy8gaGF2ZSBkZXRlY3RlZCB0aGF0IHRoaXMgY2FsbHNpdGUgaXMgaW5kZWVkIHJlZmVycmluZyB0byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gb2JqZWN0LiBTaW5jZSB0aGlzIGlzIGxpa2VseSBnb2luZyB0byBiZSB0cnVlIGZvciBvdGhlclxuICAgIC8vIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjYWxsc2l0ZSwgaXQgaXMgbm93IGFwcHJvcGlhdGUgdG8gZGVvcHQgaW50byB0aGVcbiAgICAvLyBleHBhbmRlZCB2ZXJzaW9uIHRoYXQgaGFuZGxlcyBib3RoIGNhc2VzLiBUaGUgY29tcGlsYXRpb24gd291bGQgbG9va1xuICAgIC8vIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgICAgUHV0VmFsdWUoZXhwcmVzc2lvbilcbiAgICAvLyAgICAgICAgICAgICAgIFRlc3QoaXMtY29tcG9uZW50LWRlZmluaXRpb24pXG4gICAgLy8gICAgICAgICAgICAgICBFbnRlcihCRUdJTiwgRU5EKVxuICAgIC8vICAgQkVHSU46ICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgSnVtcFVubGVzcyhWQUxVRSlcbiAgICAvLyAgICAgICAgICAgICAgIFB1dER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uT3Bjb2RlXG4gICAgLy8gICAgICAgICAgICAgICBPcGVuQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBDbG9zZUNvbXBvbmVudFxuICAgIC8vICAgICAgICAgICAgICAgSnVtcChFTkQpXG4gICAgLy8gICBWQUxVRTogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBPcHRpbWl6ZWRBcHBlbmRcbiAgICAvLyAgIEVORDogICAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIEV4aXRcbiAgICAvL1xuICAgIC8vIEtlZXAgaW4gbWluZCB0aGF0IGV2ZW4gaWYgd2UgKmRvbid0KiByZWFjaCBoZXJlIGF0IGluaXRpYWwgcmVuZGVyIHRpbWUsXG4gICAgLy8gaXQgaXMgc3RpbGwgcG9zc2libGUgKGFsdGhvdWdoIHF1aXRlIHJhcmUpIHRoYXQgdGhlIHNpbXBsZSB2YWx1ZSB3ZVxuICAgIC8vIGVuY291bnRlciBkdXJpbmcgaW5pdGlhbCByZW5kZXIgY291bGQgbGF0ZXIgY2hhbmdlIGludG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdCBhdCB1cGRhdGUgdGltZS4gVGhhdCBpcyBoYW5kbGVkIGJ5IHRoZSBcImxhenkgZGVvcHRcIlxuICAgIC8vIGNvZGUgb24gdGhlIHVwZGF0ZSBzaWRlIChzY3JvbGwgZG93biBmb3IgdGhlIG5leHQgYmlnIGJsb2NrIG9mIGNvbW1lbnQpLlxuXG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG59XG5cbmNsYXNzIElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSBleHRlbmRzIENvbmRpdGlvbmFsUmVmZXJlbmNlIHtcbiAgc3RhdGljIGNyZWF0ZShpbm5lcjogUmVmZXJlbmNlPE9wYXF1ZT4pOiBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlKGlubmVyKTtcbiAgfVxuXG4gIHRvQm9vbCh2YWx1ZTogT3BhcXVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LFxuICAgIHByb3RlY3RlZCBib3VuZHM6IEZyYWdtZW50LFxuICAgIHByb3RlY3RlZCB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY2FjaGUucmV2YWxpZGF0ZSgpO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICBsZXQgeyBib3VuZHMsIHVwc2VydCB9ID0gdGhpcztcbiAgICAgIGxldCB7IGRvbSB9ID0gdm07XG5cbiAgICAgIGlmKCF0aGlzLnVwc2VydC51cGRhdGUoZG9tLCB2YWx1ZSkpIHtcbiAgICAgICAgbGV0IGN1cnNvciA9IG5ldyBDdXJzb3IoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgY2xlYXIoYm91bmRzKSk7XG4gICAgICAgIHVwc2VydCA9IHRoaXMudXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgY3Vyc29yLCB2YWx1ZSBhcyBUKTtcbiAgICAgIH1cblxuICAgICAgYm91bmRzLnVwZGF0ZSh1cHNlcnQuYm91bmRzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQsXG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsczogeyBsYXN0VmFsdWU6IEpTT04uc3RyaW5naWZ5KGNhY2hlLnBlZWsoKSkgfVxuICAgIH07XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgR3VhcmRlZFVwZGF0ZU9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIFVwZGF0ZU9wY29kZTxUPiB7XG4gIHByaXZhdGUgX3RhZzogVGFnV3JhcHBlcjxVcGRhdGFibGVUYWc+O1xuICBwcml2YXRlIGRlb3B0ZWQ6IE9wdGlvbjxUcnlPcGNvZGU+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFQ+LFxuICAgIGJvdW5kczogRnJhZ21lbnQsXG4gICAgdXBzZXJ0OiBVcHNlcnRcbiAgKSB7XG4gICAgc3VwZXIoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgICB0aGlzLnRhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUodGhpcy50YWcpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBpZiAodGhpcy5kZW9wdGVkKSB7XG4gICAgICB2bS5ldmFsdWF0ZU9wY29kZSh0aGlzLmRlb3B0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNDb21wb25lbnREZWZpbml0aW9uKHRoaXMucmVmZXJlbmNlLnZhbHVlKCkpKSB7XG4gICAgICAgIHRoaXMubGF6eURlb3B0KHZtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxhenlEZW9wdChfdm06IFVwZGF0aW5nVk0pIHtcbiAgICAvLyBEdXJpZ24gaW5pdGlhbCByZW5kZXIsIHdlIGtub3cgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGNvbnRhaW4gYVxuICAgIC8vIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzbyB3ZSBvcHRpbWlzdGljYWxseSBhc3N1bWVkIHRoYXQgdGhpcyBhcHBlbmRcbiAgICAvLyBpcyBqdXN0IGEgbm9ybWFsIGFwcGVuZC4gSG93ZXZlciwgYXQgdXBkYXRlIHRpbWUsIHdlIGRpc2NvdmVyZWQgdGhhdFxuICAgIC8vIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGludG8gY29udGFpbmluZyBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCBzb1xuICAgIC8vIHdlIG5lZWQgdG8gZG8gYSBcImxhenkgZGVvcHRcIiwgc2ltdWxhdGluZyB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaWZcbiAgICAvLyB3ZSBoYWQgZGVjaWRlZCB0byBwZXJmb3JtIHRoZSBkZW9wdCBpbiB0aGUgZmlyc3QgcGxhY2UgZHVyaW5nIGluaXRpYWxcbiAgICAvLyByZW5kZXIuXG4gICAgLy9cbiAgICAvLyBNb3JlIGNvbmNyZXRlbHksIHdlIHdvdWxkIGhhdmUgZXhwYW5kZWQgdGhlIGN1cmx5IGludG8gYSBpZi9lbHNlLCBhbmRcbiAgICAvLyBiYXNlZCBvbiB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIGNvbXBvbmVudCBkZWZpbml0aW9uIG9yIG5vdCwgd2Ugd291bGRcbiAgICAvLyBoYXZlIGVudGVyZWQgZWl0aGVyIHRoZSBkeW5hbWljIGNvbXBvbmVudCBicmFuY2ggb3IgdGhlIHNpbXBsZSB2YWx1ZVxuICAgIC8vIGJyYW5jaC5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHdlIHJlbmRlcmVkIGEgc2ltcGxlIHZhbHVlIGR1cmluZyBpbml0aWFsIHJlbmRlciAoYW5kIGFsbCB0aGVcbiAgICAvLyB1cGRhdGVzIHVwIHVudGlsIHRoaXMgcG9pbnQpLCB3ZSBuZWVkIHRvIHByZXRlbmQgdGhhdCB0aGUgcmVzdWx0IGlzXG4gICAgLy8gcHJvZHVjZWQgYnkgdGhlIFwiVkFMVUVcIiBicmFuY2ggb2YgdGhlIGRlb3B0ZWQgYXBwZW5kIG9wY29kZTpcbiAgICAvL1xuICAgIC8vICAgVHJ5KEJFR0lOLCBFTkQpXG4gICAgLy8gICAgIEFzc2VydChJc0NvbXBvbmVudERlZmluaXRpb24sIGV4cGVjdGVkPWZhbHNlKVxuICAgIC8vICAgICBPcHRpbWl6ZWRVcGRhdGVcbiAgICAvL1xuICAgIC8vIEluIHRoaXMgY2FzZSwgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBmcm9tIGJlaW5nIGEgc2ltcGxlXG4gICAgLy8gdmFsdWUgaW50byBhIGNvbXBvbmVudCBkZWZpbml0aW9uLCB3aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQgaXMgdGhhdFxuICAgIC8vIHRoZSBhc3NlcnQgd291bGQgdGhyb3csIGNhdXNpbmcgdGhlIFRyeSBvcGNvZGUgdG8gdGVhcmRvd24gdGhlIGJvdW5kc1xuICAgIC8vIGFuZCByZXJ1biB0aGUgb3JpZ2luYWwgYXBwZW5kIG9wY29kZS5cbiAgICAvL1xuICAgIC8vIFNpbmNlIHRoZSBUcnkgb3Bjb2RlIHdvdWxkIGhhdmUgbnVrZWQgdGhlIHVwZGF0aW5nIG9wY29kZXMgYW55d2F5LCB3ZVxuICAgIC8vIHdvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgc2ltdWxhdGluZyB0aG9zZS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMgdG9cbiAgICAvLyBleGVjdXRlIHRoZSBUcnkgb3Bjb2RlIGFuZCBpbW1lZGlhdGVseSB0aHJvdy5cblxuICAgIHJldHVybiBudWxsIGFzIGFueTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgZGVvcHRlZCB9ID0gdGhpcztcblxuICAgIGlmIChkZW9wdGVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBndWlkLFxuICAgICAgICB0eXBlLFxuICAgICAgICBkZW9wdGVkOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogW2Rlb3B0ZWQudG9KU09OKCldXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3VwZXIudG9KU09OKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgX3JlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxDYXV0aW91c0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3VhcmRlZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZEFwcGVuZE9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ2d1YXJkZWQtY2F1dGlvdXMtYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgQXBwZW5kT3Bjb2RlID0gT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGU7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxDYXV0aW91c0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmREeW5hbWljT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLXRydXN0aW5nLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCBfcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLXRydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC10cnVzdGluZy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUcnVzdGluZ0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlKHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAndHJ1c3RpbmctdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==

@@ -81,3 +81,3 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(72 /* Debugger */, function (vm, _ref) {
_opcodes.APPEND_OPCODES.add(71 /* Debugger */, function (vm, _ref) {
var _symbols = _ref.op1,

@@ -84,0 +84,0 @@ _evalInfo = _ref.op2;

@@ -44,32 +44,32 @@ "use strict";

_opcodes.APPEND_OPCODES.add(24 /* Text */, function (vm, _ref) {
_opcodes.APPEND_OPCODES.add(23 /* Text */, function (vm, _ref) {
var text = _ref.op1;
vm.stack().appendText(vm.constants.getString(text));
vm.elements().appendText(vm.constants.getString(text));
});
_opcodes.APPEND_OPCODES.add(25 /* Comment */, function (vm, _ref2) {
_opcodes.APPEND_OPCODES.add(24 /* Comment */, function (vm, _ref2) {
var text = _ref2.op1;
vm.stack().appendComment(vm.constants.getString(text));
vm.elements().appendComment(vm.constants.getString(text));
});
_opcodes.APPEND_OPCODES.add(27 /* OpenElement */, function (vm, _ref3) {
_opcodes.APPEND_OPCODES.add(26 /* OpenElement */, function (vm, _ref3) {
var tag = _ref3.op1;
vm.stack().openElement(vm.constants.getString(tag));
vm.elements().openElement(vm.constants.getString(tag));
});
_opcodes.APPEND_OPCODES.add(28 /* OpenElementWithOperations */, function (vm, _ref4) {
_opcodes.APPEND_OPCODES.add(27 /* OpenElementWithOperations */, function (vm, _ref4) {
var tag = _ref4.op1;
var tagName = vm.constants.getString(tag);
var operations = vm.evalStack.pop();
vm.stack().openElement(tagName, operations);
var operations = vm.stack.pop();
vm.elements().openElement(tagName, operations);
});
_opcodes.APPEND_OPCODES.add(29 /* OpenDynamicElement */, function (vm) {
var operations = vm.evalStack.pop();
var tagName = vm.evalStack.pop().value();
vm.stack().openElement(tagName, operations);
_opcodes.APPEND_OPCODES.add(28 /* OpenDynamicElement */, function (vm) {
var operations = vm.stack.pop();
var tagName = vm.stack.pop().value();
vm.elements().openElement(tagName, operations);
});
_opcodes.APPEND_OPCODES.add(36 /* PushRemoteElement */, function (vm) {
var elementRef = vm.evalStack.pop();
var nextSiblingRef = vm.evalStack.pop();
_opcodes.APPEND_OPCODES.add(35 /* PushRemoteElement */, function (vm) {
var elementRef = vm.stack.pop();
var nextSiblingRef = vm.stack.pop();
var element = void 0;

@@ -91,6 +91,6 @@ var nextSibling = void 0;

}
vm.stack().pushRemoteElement(element, nextSibling);
vm.elements().pushRemoteElement(element, nextSibling);
});
_opcodes.APPEND_OPCODES.add(37 /* PopRemoteElement */, function (vm) {
return vm.stack().popRemoteElement();
_opcodes.APPEND_OPCODES.add(36 /* PopRemoteElement */, function (vm) {
return vm.elements().popRemoteElement();
});

@@ -326,4 +326,4 @@

}();
_opcodes.APPEND_OPCODES.add(33 /* FlushElement */, function (vm) {
var stack = vm.stack();
_opcodes.APPEND_OPCODES.add(32 /* FlushElement */, function (vm) {
var stack = vm.elements();
var action = 'FlushElementOpcode#evaluate';

@@ -333,6 +333,6 @@ stack.expectOperations(action).flush(stack.expectConstructing(action), vm);

});
_opcodes.APPEND_OPCODES.add(34 /* CloseElement */, function (vm) {
return vm.stack().closeElement();
_opcodes.APPEND_OPCODES.add(33 /* CloseElement */, function (vm) {
return vm.elements().closeElement();
});
_opcodes.APPEND_OPCODES.add(30 /* StaticAttr */, function (vm, _ref5) {
_opcodes.APPEND_OPCODES.add(29 /* StaticAttr */, function (vm, _ref5) {
var _name = _ref5.op1,

@@ -346,18 +346,18 @@ _value = _ref5.op2,

var namespace = vm.constants.getString(_namespace);
vm.stack().setStaticAttributeNS(namespace, name, value);
vm.elements().setStaticAttributeNS(namespace, name, value);
} else {
vm.stack().setStaticAttribute(name, value);
vm.elements().setStaticAttribute(name, value);
}
});
_opcodes.APPEND_OPCODES.add(35 /* Modifier */, function (vm, _ref6) {
_opcodes.APPEND_OPCODES.add(34 /* Modifier */, function (vm, _ref6) {
var _manager = _ref6.op1;
var manager = vm.constants.getOther(_manager);
var stack = vm.evalStack;
var stack = vm.stack;
var args = stack.pop();
var tag = args.tag;
var _vm$stack = vm.stack(),
element = _vm$stack.constructing,
updateOperations = _vm$stack.updateOperations;
var _vm$elements = vm.elements(),
element = _vm$elements.constructing,
updateOperations = _vm$elements.updateOperations;

@@ -498,3 +498,3 @@ var dynamicScope = vm.dynamicScope();

}
_opcodes.APPEND_OPCODES.add(32 /* DynamicAttrNS */, function (vm, _ref7) {
_opcodes.APPEND_OPCODES.add(31 /* DynamicAttrNS */, function (vm, _ref7) {
var _name = _ref7.op1,

@@ -506,6 +506,6 @@ _namespace = _ref7.op2,

var namespace = vm.constants.getString(_namespace);
var reference = vm.evalStack.pop();
vm.stack().setDynamicAttributeNS(namespace, name, reference, !!trusting);
var reference = vm.stack.pop();
vm.elements().setDynamicAttributeNS(namespace, name, reference, !!trusting);
});
_opcodes.APPEND_OPCODES.add(31 /* DynamicAttr */, function (vm, _ref8) {
_opcodes.APPEND_OPCODES.add(30 /* DynamicAttr */, function (vm, _ref8) {
var _name = _ref8.op1,

@@ -515,4 +515,4 @@ trusting = _ref8.op2;

var name = vm.constants.getString(_name);
var reference = vm.evalStack.pop();
vm.stack().setDynamicAttribute(name, reference, !!trusting);
var reference = vm.stack.pop();
vm.elements().setDynamicAttribute(name, reference, !!trusting);
});

@@ -551,2 +551,2 @@ var PatchElementOpcode = exports.PatchElementOpcode = function (_UpdatingOpcode2) {

}(_opcodes.UpdatingOpcode);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQU0zRCxBQUFPLEFBQStCLEFBQU0sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQzVFLEFBQU8sQUFDTCxBQUFlLEFBR2YsQUFBYyxBQUlkLEFBQWEsQUFDYixBQUFPLEFBQUksQUFBZ0IsQUFDM0IsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQzs7QUFFNUIsQUFBTyxBQUFFLEFBQWMsQUFBRSxBQUFrQixBQUFFLEFBQU0sQUFBa0IsQUFBQzs7QUFHdEUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQU0sQUFBQyxBQUM5QixBQUFPLEFBQUUsQUFBYyxBQUFZLEFBQU0sQUFBZSxBQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQU8sWUFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUksQUFBRSxZQUFYLEFBQUcsQUFDcEMsQUFBRTs7T0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFVLFdBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQyxBQUN0RCxBQUFDLEFBQUMsQUFBQzs7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFJLEFBQUUsYUFBWCxBQUFHLEFBQ3ZDLEFBQUU7O09BQUMsQUFBSyxBQUFFLFFBQUMsQUFBYSxjQUFDLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDekQsQUFBQyxBQUFDLEFBQUM7O0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUcsQUFBRSxZQUFW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Z0NBQVksQUFBMkI7OztzREFDckMsQUFBSyxBQUFFLEFBQUMsc0JBTEg7O2VBQUksT0FBRyxBQUFlLEFBQUMsQUFNNUIsQUFBSTtlQUFDLEFBQUcsTUFBRyxBQUFTLFVBQUMsQUFBRyxBQUFDLEFBQ3pCLEFBQUk7ZUFBQyxBQUFTLFlBQUcsQUFBUyxBQUFDLEFBQzdCO2VBQUM7OztpQ0FFRCxBQUFRLDZCQUFDLEFBQWMsSUFDckIsQUFBSTthQUFDLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBRSxHQUFDLEFBQUcsQUFBQyxBQUFDLEFBQy9CLEFBQUM7OztpQ0FFRCxBQUFNLDJCQUNKLEFBQUk7WUFBRSxBQUFLO1lBQUUsQUFBSSxPQUFnQixBQUFJLEFBQUM7WUFBbkIsQUFBUyxBQUFFLGlCQUU5QixBQUFNOzs7a0JBQ0UsQUFBSyxBQUNYLEFBQUk7a0JBQ0osQUFBTztxQkFBRSxBQUFTLFVBSGIsQUFHYyxBQUFNLEFBQUUsQUFDNUIsQUFBQyxBQUNKLEFBQUMsQUFDRjtBQUxLLEFBQUk7Ozs7QUFuQjhCLEFBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgVk0sIFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4uLy4uL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZJWF9SRUlGSUNBVElPTiB9IGZyb20gJy4uLy4uL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRklYTUUsIE9wdGlvbiwgT3BhcXVlLCBEaWN0LCB1bndyYXAsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgQ2FjaGVkUmVmZXJlbmNlLFxuICBSZWZlcmVuY2UsXG4gIFZlcnNpb25lZFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFRhZyxcbiAgUmV2aXNpb24sXG4gIFBhdGhSZWZlcmVuY2UsXG4gIGNvbWJpbmVUYWdnZWQsXG4gIGlzQ29uc3QgYXMgaXNDb25zdFJlZmVyZW5jZSxcbiAgaXNNb2RpZmllZFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgTW9kaWZpZXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vbW9kaWZpZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOVUxMX1JFRkVSRU5DRSwgUHJpbWl0aXZlUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycyc7XG5pbXBvcnQgeyBFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQXNzZXJ0IH0gZnJvbSAnLi92bSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgYXMgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlRleHQsICh2bSwgeyBvcDE6IHRleHQgfSkgPT4ge1xuICB2bS5zdGFjaygpLmFwcGVuZFRleHQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0ZXh0KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbW1lbnQsICh2bSwgeyBvcDE6IHRleHQgfSkgPT4ge1xuICB2bS5zdGFjaygpLmFwcGVuZENvbW1lbnQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0ZXh0KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk9wZW5FbGVtZW50LCAodm0sIHsgb3AxOiB0YWcgfSkgPT4ge1xuICB2bS5zdGFjaygpLm9wZW5FbGVtZW50KHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGFnKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnMsICh2bSwgeyBvcDE6IHRhZyB9KSA9PiB7XG4gIGxldCB0YWdOYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyh0YWcpO1xuICBsZXQgb3BlcmF0aW9ucyA9IHZtLmV2YWxTdGFjay5wb3A8RWxlbWVudE9wZXJhdGlvbnM+KCk7XG4gIHZtLnN0YWNrKCkub3BlbkVsZW1lbnQodGFnTmFtZSwgb3BlcmF0aW9ucyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk9wZW5EeW5hbWljRWxlbWVudCwgdm0gPT4ge1xuICBsZXQgb3BlcmF0aW9ucyA9IHZtLmV2YWxTdGFjay5wb3A8RWxlbWVudE9wZXJhdGlvbnM+KCk7XG4gIGxldCB0YWdOYW1lID0gdm0uZXZhbFN0YWNrLnBvcDxSZWZlcmVuY2U8c3RyaW5nPj4oKS52YWx1ZSgpO1xuICB2bS5zdGFjaygpLm9wZW5FbGVtZW50KHRhZ05hbWUsIG9wZXJhdGlvbnMpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoUmVtb3RlRWxlbWVudCwgdm0gPT4ge1xuICBsZXQgZWxlbWVudFJlZiA9IHZtLmV2YWxTdGFjay5wb3A8UmVmZXJlbmNlPFNpbXBsZS5FbGVtZW50Pj4oKTtcbiAgbGV0IG5leHRTaWJsaW5nUmVmID0gdm0uZXZhbFN0YWNrLnBvcDxSZWZlcmVuY2U8T3B0aW9uPFNpbXBsZS5Ob2RlPj4+KCk7XG5cbiAgbGV0IGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50O1xuICBsZXQgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG5cbiAgaWYgKGlzQ29uc3RSZWZlcmVuY2UoZWxlbWVudFJlZikpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudFJlZi52YWx1ZSgpO1xuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShlbGVtZW50UmVmKTtcbiAgICBlbGVtZW50ID0gY2FjaGUucGVlaygpO1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG5cbiAgaWYgKGlzQ29uc3RSZWZlcmVuY2UobmV4dFNpYmxpbmdSZWYpKSB7XG4gICAgbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZ1JlZi52YWx1ZSgpO1xuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShuZXh0U2libGluZ1JlZik7XG4gICAgbmV4dFNpYmxpbmcgPSBjYWNoZS5wZWVrKCk7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cblxuICB2bS5zdGFjaygpLnB1c2hSZW1vdGVFbGVtZW50KGVsZW1lbnQsIG5leHRTaWJsaW5nKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wUmVtb3RlRWxlbWVudCwgdm0gPT4gdm0uc3RhY2soKS5wb3BSZW1vdGVFbGVtZW50KCkpO1xuXG5jbGFzcyBDbGFzc0xpc3Qge1xuICBwcml2YXRlIGxpc3Q6IE9wdGlvbjxSZWZlcmVuY2U8c3RyaW5nPltdPiA9IG51bGw7XG4gIHByaXZhdGUgaXNDb25zdCA9IHRydWU7XG5cbiAgYXBwZW5kKHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBsaXN0LCBpc0NvbnN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKGxpc3QgPT09IG51bGwpIGxpc3QgPSB0aGlzLmxpc3QgPSBbXTtcblxuICAgIGxpc3QucHVzaChyZWZlcmVuY2UpO1xuICAgIHRoaXMuaXNDb25zdCA9IGlzQ29uc3QgJiYgaXNDb25zdFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICB9XG5cbiAgdG9SZWZlcmVuY2UoKTogUmVmZXJlbmNlPE9wdGlvbjxzdHJpbmc+PiB7XG4gICAgbGV0IHsgbGlzdCwgaXNDb25zdCB9ID0gdGhpcztcblxuICAgIGlmICghbGlzdCkgcmV0dXJuIE5VTExfUkVGRVJFTkNFO1xuXG4gICAgaWYgKGlzQ29uc3QpIHJldHVybiBQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHRvQ2xhc3NOYW1lKGxpc3QpKTtcblxuICAgIHJldHVybiBuZXcgQ2xhc3NMaXN0UmVmZXJlbmNlKGxpc3QpO1xuICB9XG5cbn1cblxuY2xhc3MgQ2xhc3NMaXN0UmVmZXJlbmNlIGV4dGVuZHMgQ2FjaGVkUmVmZXJlbmNlPE9wdGlvbjxzdHJpbmc+PiB7XG4gIHB1YmxpYyB0YWc6IFRhZztcbiAgcHJpdmF0ZSBsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdID0gW107XG5cbiAgY29uc3RydWN0b3IobGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lVGFnZ2VkKGxpc3QpO1xuICAgIHRoaXMubGlzdCA9IGxpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZSgpOiBPcHRpb248c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRvQ2xhc3NOYW1lKHRoaXMubGlzdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9DbGFzc05hbWUobGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSk6IE9wdGlvbjxzdHJpbmc+IHtcbiAgbGV0IHJldDogT3BhcXVlW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdmFsdWU6IEZJWE1FPE9wYXF1ZSwgJ3VzZSBPcGFxdWUgYW5kIG5vcm1hbGl6ZSc+ID0gbGlzdFtpXS52YWx1ZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0LnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIChyZXQubGVuZ3RoID09PSAwKSA/IG51bGwgOiByZXQuam9pbignICcpO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgb3Bjb2RlczogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlW10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBjbGFzc0xpc3Q6IE9wdGlvbjxDbGFzc0xpc3Q+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhyZWZlcmVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBTaW1wbGUuTmFtZXNwYWNlLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZywgbmFtZXNwYWNlKTtcbiAgICBsZXQgbnNBdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UsIG5hbWVzcGFjZSk7XG5cbiAgICB0aGlzLmFkZEF0dHJpYnV0ZShuc0F0dHJpYnV0ZSk7XG4gIH1cblxuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKSB7XG4gICAgbGV0IHsgZW52IH0gPSB2bTtcbiAgICBsZXQgeyBvcGNvZGVzLCBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgb3Bjb2RlcyAmJiBpIDwgb3Bjb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGVzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NMaXN0KSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IGVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgJ2NsYXNzJywgZmFsc2UpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsICdjbGFzcycsIGNsYXNzTGlzdC50b1JlZmVyZW5jZSgpKTtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzTGlzdCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFkZENsYXNzKHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgPSBuZXcgQ2xhc3NMaXN0KCk7XG4gICAgfVxuXG4gICAgY2xhc3NMaXN0LmFwcGVuZChyZWZlcmVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKHRoaXMuZW52KTtcblxuICAgIGlmIChvcGNvZGUpIHtcbiAgICAgIGxldCB7IG9wY29kZXMgfSA9IHRoaXM7XG5cbiAgICAgIGlmICghb3Bjb2Rlcykge1xuICAgICAgICBvcGNvZGVzID0gdGhpcy5vcGNvZGVzID0gW107XG4gICAgICB9XG5cbiAgICAgIG9wY29kZXMucHVzaChvcGNvZGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgYXR0cmlidXRlTmFtZXM6IE9wdGlvbjxzdHJpbmdbXT4gPSBudWxsO1xuICBwcml2YXRlIGF0dHJpYnV0ZXM6IE9wdGlvbjxBdHRyaWJ1dGVbXT4gPSBudWxsO1xuICBwcml2YXRlIGNsYXNzTGlzdDogT3B0aW9uPENsYXNzTGlzdD4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbmV3IFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuZXcgU3RhdGljQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MocmVmZXJlbmNlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBTaW1wbGUuTmFtZXNwYWNlLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICAgICAgbGV0IG5zQXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlLCBuYW1lc3BhY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuc0F0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSkge1xuICAgIGxldCB7IGVudiB9ID0gdGhpcztcbiAgICBsZXQgeyBhdHRyaWJ1dGVzLCBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgYXR0cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZXNbaV0uZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSBlbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsICdjbGFzcycsIGZhbHNlKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCAnY2xhc3MnLCBjbGFzc0xpc3QudG9SZWZlcmVuY2UoKSk7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQWRkQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hdHRyaWJ1dGVOYW1lcyB8fCB0aGlzLmF0dHJpYnV0ZU5hbWVzLmluZGV4T2YobmFtZSkgPT09IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDbGFzcyhyZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGlmICghY2xhc3NMaXN0KSB7XG4gICAgICBjbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCA9IG5ldyBDbGFzc0xpc3QoKTtcbiAgICB9XG5cbiAgICBjbGFzc0xpc3QuYXBwZW5kKHJlZmVyZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogQXR0cmlidXRlKSB7XG4gICAgbGV0IHsgYXR0cmlidXRlTmFtZXMsIGF0dHJpYnV0ZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgICBhdHRyaWJ1dGVOYW1lcyA9IHRoaXMuYXR0cmlidXRlTmFtZXMgPSBbXTtcbiAgICAgIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lcy5wdXNoKG5hbWUpO1xuICAgIHVud3JhcChhdHRyaWJ1dGVzKS5wdXNoKGF0dHJpYnV0ZSk7XG4gIH1cbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkZsdXNoRWxlbWVudCwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaygpO1xuXG4gIGxldCBhY3Rpb24gPSAnRmx1c2hFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgc3RhY2suZXhwZWN0T3BlcmF0aW9ucyhhY3Rpb24pLmZsdXNoKHN0YWNrLmV4cGVjdENvbnN0cnVjdGluZyhhY3Rpb24pLCB2bSk7XG4gIHN0YWNrLmZsdXNoRWxlbWVudCgpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5DbG9zZUVsZW1lbnQsIHZtID0+IHZtLnN0YWNrKCkuY2xvc2VFbGVtZW50KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU3RhdGljQXR0ciwgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogX3ZhbHVlLCBvcDM6IF9uYW1lc3BhY2UgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgdmFsdWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF92YWx1ZSk7XG5cbiAgaWYgKF9uYW1lc3BhY2UpIHtcbiAgICBsZXQgbmFtZXNwYWNlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZXNwYWNlKTtcbiAgICB2bS5zdGFjaygpLnNldFN0YXRpY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHZtLnN0YWNrKCkuc2V0U3RhdGljQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Nb2RpZmllciwgKHZtLCB7IG9wMTogX21hbmFnZXIgfSkgPT4ge1xuICBsZXQgbWFuYWdlciA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcjxNb2RpZmllck1hbmFnZXI8T3BhcXVlPj4oX21hbmFnZXIpO1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcbiAgbGV0IHRhZyA9IGFyZ3MudGFnO1xuICBsZXQgeyBjb25zdHJ1Y3Rpbmc6IGVsZW1lbnQsIHVwZGF0ZU9wZXJhdGlvbnMgfSA9IHZtLnN0YWNrKCk7XG4gIGxldCBkeW5hbWljU2NvcGUgPSB2bS5keW5hbWljU2NvcGUoKTtcbiAgbGV0IG1vZGlmaWVyID0gbWFuYWdlci5jcmVhdGUoZWxlbWVudCBhcyBGSVhfUkVJRklDQVRJT048RWxlbWVudD4sIGFyZ3MsIGR5bmFtaWNTY29wZSwgdXBkYXRlT3BlcmF0aW9ucyk7XG5cbiAgYXJncy5jbGVhcigpO1xuXG4gIHZtLmVudi5zY2hlZHVsZUluc3RhbGxNb2RpZmllcihtb2RpZmllciwgbWFuYWdlcik7XG4gIGxldCBkZXN0cnVjdG9yID0gbWFuYWdlci5nZXREZXN0cnVjdG9yKG1vZGlmaWVyKTtcblxuICBpZiAoZGVzdHJ1Y3Rvcikge1xuICAgIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xuICB9XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlTW9kaWZpZXJPcGNvZGUoXG4gICAgdGFnLFxuICAgIG1hbmFnZXIsXG4gICAgbW9kaWZpZXJcbiAgKSk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1vZGlmaWVyT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwidXBkYXRlLW1vZGlmaWVyXCI7XG4gIHByaXZhdGUgbGFzdFVwZGF0ZWQ6IFJldmlzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0YWc6IFRhZyxcbiAgICBwcml2YXRlIG1hbmFnZXI6IE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+LFxuICAgIHByaXZhdGUgbW9kaWZpZXI6IE9wYXF1ZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGFzdFVwZGF0ZWQgPSB0YWcudmFsdWUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgbWFuYWdlciwgbW9kaWZpZXIsIHRhZywgbGFzdFVwZGF0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoIXRhZy52YWxpZGF0ZShsYXN0VXBkYXRlZCkpIHtcbiAgICAgIHZtLmVudi5zY2hlZHVsZVVwZGF0ZU1vZGlmaWVyKG1vZGlmaWVyLCBtYW5hZ2VyKTtcbiAgICAgIHRoaXMubGFzdFVwZGF0ZWQgPSB0YWcudmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGVcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmbHVzaChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPjtcbn1cblxuZXhwb3J0IGNsYXNzIFN0YXRpY0F0dHJpYnV0ZSBpbXBsZW1lbnRzIEF0dHJpYnV0ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHZhbHVlOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBuYW1lc3BhY2U/OiBzdHJpbmdcbiAgKSB7fVxuXG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+IHtcbiAgICBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljQXR0cmlidXRlIGltcGxlbWVudHMgQXR0cmlidXRlICB7XG4gIHByaXZhdGUgY2FjaGU6IE9wdGlvbjxSZWZlcmVuY2VDYWNoZTxPcGFxdWU+PiA9IG51bGw7XG5cbiAgcHVibGljIHRhZzogVGFnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBhdHRyaWJ1dGVNYW5hZ2VyOiBBdHRyaWJ1dGVNYW5hZ2VyLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIHByaXZhdGUgbmFtZXNwYWNlPzogU2ltcGxlLk5hbWVzcGFjZVxuICApIHtcbiAgICB0aGlzLnRhZyA9IHJlZmVyZW5jZS50YWc7XG4gIH1cblxuICBwYXRjaChlbnY6IEVudmlyb25tZW50KSB7XG4gICAgbGV0IHsgZWxlbWVudCwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgdmFsdWUgPSBleHBlY3QoY2FjaGUsICdtdXN0IHBhdGNoIGFmdGVyIGZsdXNoJykucmV2YWxpZGF0ZSgpO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZU1hbmFnZXIudXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCBhcyBGSVhNRTxFbGVtZW50LCAnbmVlZHMgdG8gYmUgcmVpZmllZCBwcm9wZXJseSc+LCB2YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+IHtcbiAgICBsZXQgeyByZWZlcmVuY2UsIGVsZW1lbnQgfSA9IHRoaXM7XG5cbiAgICBpZiAoaXNDb25zdFJlZmVyZW5jZShyZWZlcmVuY2UpKSB7XG4gICAgICBsZXQgdmFsdWUgPSByZWZlcmVuY2UudmFsdWUoKTtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjYWNoZSA9IHRoaXMuY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcbiAgICAgIGxldCB2YWx1ZSA9IGNhY2hlLnBlZWsoKTtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgcmV0dXJuIG5ldyBQYXRjaEVsZW1lbnRPcGNvZGUodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IERpY3Q8T3B0aW9uPHN0cmluZz4+IHtcbiAgICBsZXQgeyBlbGVtZW50LCBuYW1lc3BhY2UsIG5hbWUsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGZvcm1hdHRlZEVsZW1lbnQgPSBmb3JtYXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIGxldCBsYXN0VmFsdWUgPSBleHBlY3QoY2FjaGUsICdtdXN0IHNlcmlhbGl6ZSBhZnRlciBmbHVzaCcpLnBlZWsoKSBhcyBzdHJpbmc7XG5cbiAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50OiBmb3JtYXR0ZWRFbGVtZW50LFxuICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsYXN0VmFsdWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnQ6IGZvcm1hdHRlZEVsZW1lbnQsXG4gICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlID09PSB1bmRlZmluZWQgPyBudWxsIDogbmFtZXNwYWNlLFxuICAgICAgbmFtZSxcbiAgICAgIGxhc3RWYWx1ZVxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0RWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShgPCR7ZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCl9IC8+YCk7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EeW5hbWljQXR0ck5TLCAodm0sIHsgb3AxOiBfbmFtZSwgb3AyOiBfbmFtZXNwYWNlLCBvcDM6IHRydXN0aW5nIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IG5hbWVzcGFjZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWVzcGFjZSk7XG4gIGxldCByZWZlcmVuY2UgPSB2bS5ldmFsU3RhY2sucG9wPFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+PigpO1xuICB2bS5zdGFjaygpLnNldER5bmFtaWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHJlZmVyZW5jZSwgISF0cnVzdGluZyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNBdHRyLCAodm0sIHsgb3AxOiBfbmFtZSwgb3AyOiB0cnVzdGluZyB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCByZWZlcmVuY2UgPSB2bS5ldmFsU3RhY2sucG9wPFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+PigpO1xuICB2bS5zdGFjaygpLnNldER5bmFtaWNBdHRyaWJ1dGUobmFtZSwgcmVmZXJlbmNlLCAhIXRydXN0aW5nKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgUGF0Y2hFbGVtZW50T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicGF0Y2gtZWxlbWVudFwiO1xuXG4gIHByaXZhdGUgb3BlcmF0aW9uOiBEeW5hbWljQXR0cmlidXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wZXJhdGlvbjogRHluYW1pY0F0dHJpYnV0ZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBvcGVyYXRpb24udGFnO1xuICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB0aGlzLm9wZXJhdGlvbi5wYXRjaCh2bS5lbnYpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkLCB0eXBlLCBvcGVyYXRpb24gfSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsczogb3BlcmF0aW9uLnRvSlNPTigpXG4gICAgfTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQWMsQUFBYyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQU0zRCxBQUFPLEFBQStCLEFBQU0sQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQzVFLEFBQU8sQUFDTCxBQUFlLEFBR2YsQUFBYyxBQUlkLEFBQWEsQUFDYixBQUFPLEFBQUksQUFBZ0IsQUFDM0IsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQzs7QUFFNUIsQUFBTyxBQUFFLEFBQWMsQUFBRSxBQUFrQixBQUFFLEFBQU0sQUFBa0IsQUFBQzs7QUFHdEUsQUFBTyxBQUFFLEFBQU0sQUFBRSxBQUFNLEFBQU0sQUFBQyxBQUM5QixBQUFPLEFBQUUsQUFBYyxBQUFZLEFBQU0sQUFBZSxBQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQU8sWUFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUksQUFBRSxZQUFYLEFBQUcsQUFDcEMsQUFBRTs7T0FBQyxBQUFRLEFBQUUsV0FBQyxBQUFVLFdBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQyxBQUN6RCxBQUFDLEFBQUMsQUFBQzs7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFJLEFBQUUsYUFBWCxBQUFHLEFBQ3ZDLEFBQUU7O09BQUMsQUFBUSxBQUFFLFdBQUMsQUFBYSxjQUFDLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDNUQsQUFBQyxBQUFDLEFBQUM7O0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUcsQUFBRSxZQUFW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Z0NBQVksQUFBMkI7OztzREFDckMsQUFBSyxBQUFFLEFBQUMsc0JBTEg7O2VBQUksT0FBRyxBQUFlLEFBQUMsQUFNNUIsQUFBSTtlQUFDLEFBQUcsTUFBRyxBQUFTLFVBQUMsQUFBRyxBQUFDLEFBQ3pCLEFBQUk7ZUFBQyxBQUFTLFlBQUcsQUFBUyxBQUFDLEFBQzdCO2VBQUM7OztpQ0FFRCxBQUFRLDZCQUFDLEFBQWMsSUFDckIsQUFBSTthQUFDLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBRSxHQUFDLEFBQUcsQUFBQyxBQUFDLEFBQy9CLEFBQUM7OztpQ0FFRCxBQUFNLDJCQUNKLEFBQUk7WUFBRSxBQUFLO1lBQUUsQUFBSSxPQUFnQixBQUFJLEFBQUM7WUFBbkIsQUFBUyxBQUFFLGlCQUU5QixBQUFNOzs7a0JBQ0UsQUFBSyxBQUNYLEFBQUk7a0JBQ0osQUFBTztxQkFBRSxBQUFTLFVBSGIsQUFHYyxBQUFNLEFBQUUsQUFDNUIsQUFBQyxBQUNKLEFBQUMsQUFDRjtBQUxLLEFBQUk7Ozs7QUFuQjhCLEFBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgVk0sIFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4uLy4uL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZJWF9SRUlGSUNBVElPTiB9IGZyb20gJy4uLy4uL2RvbS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRklYTUUsIE9wdGlvbiwgT3BhcXVlLCBEaWN0LCB1bndyYXAsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgQ2FjaGVkUmVmZXJlbmNlLFxuICBSZWZlcmVuY2UsXG4gIFZlcnNpb25lZFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFRhZyxcbiAgUmV2aXNpb24sXG4gIFBhdGhSZWZlcmVuY2UsXG4gIGNvbWJpbmVUYWdnZWQsXG4gIGlzQ29uc3QgYXMgaXNDb25zdFJlZmVyZW5jZSxcbiAgaXNNb2RpZmllZFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgTW9kaWZpZXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vbW9kaWZpZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOVUxMX1JFRkVSRU5DRSwgUHJpbWl0aXZlUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycyc7XG5pbXBvcnQgeyBFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4uLy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgQXNzZXJ0IH0gZnJvbSAnLi92bSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgYXMgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlRleHQsICh2bSwgeyBvcDE6IHRleHQgfSkgPT4ge1xuICB2bS5lbGVtZW50cygpLmFwcGVuZFRleHQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0ZXh0KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbW1lbnQsICh2bSwgeyBvcDE6IHRleHQgfSkgPT4ge1xuICB2bS5lbGVtZW50cygpLmFwcGVuZENvbW1lbnQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0ZXh0KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk9wZW5FbGVtZW50LCAodm0sIHsgb3AxOiB0YWcgfSkgPT4ge1xuICB2bS5lbGVtZW50cygpLm9wZW5FbGVtZW50KHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGFnKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnMsICh2bSwgeyBvcDE6IHRhZyB9KSA9PiB7XG4gIGxldCB0YWdOYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyh0YWcpO1xuICBsZXQgb3BlcmF0aW9ucyA9IHZtLnN0YWNrLnBvcDxFbGVtZW50T3BlcmF0aW9ucz4oKTtcbiAgdm0uZWxlbWVudHMoKS5vcGVuRWxlbWVudCh0YWdOYW1lLCBvcGVyYXRpb25zKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkR5bmFtaWNFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBvcGVyYXRpb25zID0gdm0uc3RhY2sucG9wPEVsZW1lbnRPcGVyYXRpb25zPigpO1xuICBsZXQgdGFnTmFtZSA9IHZtLnN0YWNrLnBvcDxSZWZlcmVuY2U8c3RyaW5nPj4oKS52YWx1ZSgpO1xuICB2bS5lbGVtZW50cygpLm9wZW5FbGVtZW50KHRhZ05hbWUsIG9wZXJhdGlvbnMpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoUmVtb3RlRWxlbWVudCwgdm0gPT4ge1xuICBsZXQgZWxlbWVudFJlZiA9IHZtLnN0YWNrLnBvcDxSZWZlcmVuY2U8U2ltcGxlLkVsZW1lbnQ+PigpO1xuICBsZXQgbmV4dFNpYmxpbmdSZWYgPSB2bS5zdGFjay5wb3A8UmVmZXJlbmNlPE9wdGlvbjxTaW1wbGUuTm9kZT4+PigpO1xuXG4gIGxldCBlbGVtZW50OiBTaW1wbGUuRWxlbWVudDtcbiAgbGV0IG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+O1xuXG4gIGlmIChpc0NvbnN0UmVmZXJlbmNlKGVsZW1lbnRSZWYpKSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnRSZWYudmFsdWUoKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUoZWxlbWVudFJlZik7XG4gICAgZWxlbWVudCA9IGNhY2hlLnBlZWsoKTtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxuXG4gIGlmIChpc0NvbnN0UmVmZXJlbmNlKG5leHRTaWJsaW5nUmVmKSkge1xuICAgIG5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmdSZWYudmFsdWUoKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUobmV4dFNpYmxpbmdSZWYpO1xuICAgIG5leHRTaWJsaW5nID0gY2FjaGUucGVlaygpO1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG5cbiAgdm0uZWxlbWVudHMoKS5wdXNoUmVtb3RlRWxlbWVudChlbGVtZW50LCBuZXh0U2libGluZyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcFJlbW90ZUVsZW1lbnQsIHZtID0+IHZtLmVsZW1lbnRzKCkucG9wUmVtb3RlRWxlbWVudCgpKTtcblxuY2xhc3MgQ2xhc3NMaXN0IHtcbiAgcHJpdmF0ZSBsaXN0OiBPcHRpb248UmVmZXJlbmNlPHN0cmluZz5bXT4gPSBudWxsO1xuICBwcml2YXRlIGlzQ29uc3QgPSB0cnVlO1xuXG4gIGFwcGVuZChyZWZlcmVuY2U6IFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgbGlzdCwgaXNDb25zdCB9ID0gdGhpcztcblxuICAgIGlmIChsaXN0ID09PSBudWxsKSBsaXN0ID0gdGhpcy5saXN0ID0gW107XG5cbiAgICBsaXN0LnB1c2gocmVmZXJlbmNlKTtcbiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0ICYmIGlzQ29uc3RSZWZlcmVuY2UocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHRvUmVmZXJlbmNlKCk6IFJlZmVyZW5jZTxPcHRpb248c3RyaW5nPj4ge1xuICAgIGxldCB7IGxpc3QsIGlzQ29uc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWxpc3QpIHJldHVybiBOVUxMX1JFRkVSRU5DRTtcblxuICAgIGlmIChpc0NvbnN0KSByZXR1cm4gUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh0b0NsYXNzTmFtZShsaXN0KSk7XG5cbiAgICByZXR1cm4gbmV3IENsYXNzTGlzdFJlZmVyZW5jZShsaXN0KTtcbiAgfVxuXG59XG5cbmNsYXNzIENsYXNzTGlzdFJlZmVyZW5jZSBleHRlbmRzIENhY2hlZFJlZmVyZW5jZTxPcHRpb248c3RyaW5nPj4ge1xuICBwdWJsaWMgdGFnOiBUYWc7XG4gIHByaXZhdGUgbGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY29tYmluZVRhZ2dlZChsaXN0KTtcbiAgICB0aGlzLmxpc3QgPSBsaXN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogT3B0aW9uPHN0cmluZz4ge1xuICAgIHJldHVybiB0b0NsYXNzTmFtZSh0aGlzLmxpc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ2xhc3NOYW1lKGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10pOiBPcHRpb248c3RyaW5nPiB7XG4gIGxldCByZXQ6IE9wYXF1ZVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHZhbHVlOiBGSVhNRTxPcGFxdWUsICd1c2UgT3BhcXVlIGFuZCBub3JtYWxpemUnPiA9IGxpc3RbaV0udmFsdWUoKTtcbiAgICBpZiAodmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHJldC5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiAocmV0Lmxlbmd0aCA9PT0gMCkgPyBudWxsIDogcmV0LmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zIGltcGxlbWVudHMgRWxlbWVudE9wZXJhdGlvbnMge1xuICBwcml2YXRlIG9wY29kZXM6IE9wdGlvbjxVcGRhdGluZ09wY29kZVtdPiA9IG51bGw7XG4gIHByaXZhdGUgY2xhc3NMaXN0OiBPcHRpb248Q2xhc3NMaXN0PiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MocmVmZXJlbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZyk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogU2ltcGxlLk5hbWVzcGFjZSwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcsIG5hbWVzcGFjZSk7XG4gICAgbGV0IG5zQXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlLCBuYW1lc3BhY2UpO1xuXG4gICAgdGhpcy5hZGRBdHRyaWJ1dGUobnNBdHRyaWJ1dGUpO1xuICB9XG5cbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSkge1xuICAgIGxldCB7IGVudiB9ID0gdm07XG4gICAgbGV0IHsgb3Bjb2RlcywgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IG9wY29kZXMgJiYgaSA8IG9wY29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2Rlc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSBlbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsICdjbGFzcycsIGZhbHNlKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCAnY2xhc3MnLCBjbGFzc0xpc3QudG9SZWZlcmVuY2UoKSk7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlcyA9IG51bGw7XG4gICAgdGhpcy5jbGFzc0xpc3QgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDbGFzcyhyZWZlcmVuY2U6IFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjbGFzc0xpc3QpIHtcbiAgICAgIGNsYXNzTGlzdCA9IHRoaXMuY2xhc3NMaXN0ID0gbmV3IENsYXNzTGlzdCgpO1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hcHBlbmQocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlKSB7XG4gICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaCh0aGlzLmVudik7XG5cbiAgICBpZiAob3Bjb2RlKSB7XG4gICAgICBsZXQgeyBvcGNvZGVzIH0gPSB0aGlzO1xuXG4gICAgICBpZiAoIW9wY29kZXMpIHtcbiAgICAgICAgb3Bjb2RlcyA9IHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBvcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEVsZW1lbnRPcGVyYXRpb25zIGltcGxlbWVudHMgRWxlbWVudE9wZXJhdGlvbnMge1xuICBwcml2YXRlIGF0dHJpYnV0ZU5hbWVzOiBPcHRpb248c3RyaW5nW10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBhdHRyaWJ1dGVzOiBPcHRpb248QXR0cmlidXRlW10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBjbGFzc0xpc3Q6IE9wdGlvbjxDbGFzc0xpc3Q+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5ldyBTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbmV3IFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKHJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZyk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogU2ltcGxlLk5hbWVzcGFjZSwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZywgbmFtZXNwYWNlKTtcbiAgICAgIGxldCBuc0F0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSwgbmFtZXNwYWNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbnNBdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pIHtcbiAgICBsZXQgeyBlbnYgfSA9IHRoaXM7XG4gICAgbGV0IHsgYXR0cmlidXRlcywgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGF0dHJpYnV0ZXMgJiYgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGVzW2ldLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgJ2NsYXNzJywgY2xhc3NMaXN0LnRvUmVmZXJlbmNlKCkpO1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEFkZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYXR0cmlidXRlTmFtZXMgfHwgdGhpcy5hdHRyaWJ1dGVOYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MocmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgPSBuZXcgQ2xhc3NMaXN0KCk7XG4gICAgfVxuXG4gICAgY2xhc3NMaXN0LmFwcGVuZChyZWZlcmVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSkge1xuICAgIGxldCB7IGF0dHJpYnV0ZU5hbWVzLCBhdHRyaWJ1dGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFhdHRyaWJ1dGVOYW1lcykge1xuICAgICAgYXR0cmlidXRlTmFtZXMgPSB0aGlzLmF0dHJpYnV0ZU5hbWVzID0gW107XG4gICAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgfVxuXG4gICAgYXR0cmlidXRlTmFtZXMucHVzaChuYW1lKTtcbiAgICB1bndyYXAoYXR0cmlidXRlcykucHVzaChhdHRyaWJ1dGUpO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5GbHVzaEVsZW1lbnQsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZWxlbWVudHMoKTtcblxuICBsZXQgYWN0aW9uID0gJ0ZsdXNoRWxlbWVudE9wY29kZSNldmFsdWF0ZSc7XG4gIHN0YWNrLmV4cGVjdE9wZXJhdGlvbnMoYWN0aW9uKS5mbHVzaChzdGFjay5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0pO1xuICBzdGFjay5mbHVzaEVsZW1lbnQoKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ2xvc2VFbGVtZW50LCB2bSA9PiB2bS5lbGVtZW50cygpLmNsb3NlRWxlbWVudCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlN0YXRpY0F0dHIsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IF92YWx1ZSwgb3AzOiBfbmFtZXNwYWNlIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IHZhbHVlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfdmFsdWUpO1xuXG4gIGlmIChfbmFtZXNwYWNlKSB7XG4gICAgbGV0IG5hbWVzcGFjZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWVzcGFjZSk7XG4gICAgdm0uZWxlbWVudHMoKS5zZXRTdGF0aWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2bS5lbGVtZW50cygpLnNldFN0YXRpY0F0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuTW9kaWZpZXIsICh2bSwgeyBvcDE6IF9tYW5hZ2VyIH0pID0+IHtcbiAgbGV0IG1hbmFnZXIgPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8TW9kaWZpZXJNYW5hZ2VyPE9wYXF1ZT4+KF9tYW5hZ2VyKTtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcbiAgbGV0IHRhZyA9IGFyZ3MudGFnO1xuICBsZXQgeyBjb25zdHJ1Y3Rpbmc6IGVsZW1lbnQsIHVwZGF0ZU9wZXJhdGlvbnMgfSA9IHZtLmVsZW1lbnRzKCk7XG4gIGxldCBkeW5hbWljU2NvcGUgPSB2bS5keW5hbWljU2NvcGUoKTtcbiAgbGV0IG1vZGlmaWVyID0gbWFuYWdlci5jcmVhdGUoZWxlbWVudCBhcyBGSVhfUkVJRklDQVRJT048RWxlbWVudD4sIGFyZ3MsIGR5bmFtaWNTY29wZSwgdXBkYXRlT3BlcmF0aW9ucyk7XG5cbiAgYXJncy5jbGVhcigpO1xuXG4gIHZtLmVudi5zY2hlZHVsZUluc3RhbGxNb2RpZmllcihtb2RpZmllciwgbWFuYWdlcik7XG4gIGxldCBkZXN0cnVjdG9yID0gbWFuYWdlci5nZXREZXN0cnVjdG9yKG1vZGlmaWVyKTtcblxuICBpZiAoZGVzdHJ1Y3Rvcikge1xuICAgIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xuICB9XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlTW9kaWZpZXJPcGNvZGUoXG4gICAgdGFnLFxuICAgIG1hbmFnZXIsXG4gICAgbW9kaWZpZXJcbiAgKSk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1vZGlmaWVyT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwidXBkYXRlLW1vZGlmaWVyXCI7XG4gIHByaXZhdGUgbGFzdFVwZGF0ZWQ6IFJldmlzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0YWc6IFRhZyxcbiAgICBwcml2YXRlIG1hbmFnZXI6IE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+LFxuICAgIHByaXZhdGUgbW9kaWZpZXI6IE9wYXF1ZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGFzdFVwZGF0ZWQgPSB0YWcudmFsdWUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgbWFuYWdlciwgbW9kaWZpZXIsIHRhZywgbGFzdFVwZGF0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoIXRhZy52YWxpZGF0ZShsYXN0VXBkYXRlZCkpIHtcbiAgICAgIHZtLmVudi5zY2hlZHVsZVVwZGF0ZU1vZGlmaWVyKG1vZGlmaWVyLCBtYW5hZ2VyKTtcbiAgICAgIHRoaXMubGFzdFVwZGF0ZWQgPSB0YWcudmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGVcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmbHVzaChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPjtcbn1cblxuZXhwb3J0IGNsYXNzIFN0YXRpY0F0dHJpYnV0ZSBpbXBsZW1lbnRzIEF0dHJpYnV0ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHZhbHVlOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBuYW1lc3BhY2U/OiBzdHJpbmdcbiAgKSB7fVxuXG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+IHtcbiAgICBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljQXR0cmlidXRlIGltcGxlbWVudHMgQXR0cmlidXRlICB7XG4gIHByaXZhdGUgY2FjaGU6IE9wdGlvbjxSZWZlcmVuY2VDYWNoZTxPcGFxdWU+PiA9IG51bGw7XG5cbiAgcHVibGljIHRhZzogVGFnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsXG4gICAgcHJpdmF0ZSBhdHRyaWJ1dGVNYW5hZ2VyOiBBdHRyaWJ1dGVNYW5hZ2VyLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIHByaXZhdGUgbmFtZXNwYWNlPzogU2ltcGxlLk5hbWVzcGFjZVxuICApIHtcbiAgICB0aGlzLnRhZyA9IHJlZmVyZW5jZS50YWc7XG4gIH1cblxuICBwYXRjaChlbnY6IEVudmlyb25tZW50KSB7XG4gICAgbGV0IHsgZWxlbWVudCwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgdmFsdWUgPSBleHBlY3QoY2FjaGUsICdtdXN0IHBhdGNoIGFmdGVyIGZsdXNoJykucmV2YWxpZGF0ZSgpO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQodmFsdWUpKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZU1hbmFnZXIudXBkYXRlQXR0cmlidXRlKGVudiwgZWxlbWVudCBhcyBGSVhNRTxFbGVtZW50LCAnbmVlZHMgdG8gYmUgcmVpZmllZCBwcm9wZXJseSc+LCB2YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+IHtcbiAgICBsZXQgeyByZWZlcmVuY2UsIGVsZW1lbnQgfSA9IHRoaXM7XG5cbiAgICBpZiAoaXNDb25zdFJlZmVyZW5jZShyZWZlcmVuY2UpKSB7XG4gICAgICBsZXQgdmFsdWUgPSByZWZlcmVuY2UudmFsdWUoKTtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjYWNoZSA9IHRoaXMuY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcbiAgICAgIGxldCB2YWx1ZSA9IGNhY2hlLnBlZWsoKTtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci5zZXRBdHRyaWJ1dGUoZW52LCBlbGVtZW50LCB2YWx1ZSwgdGhpcy5uYW1lc3BhY2UpO1xuICAgICAgcmV0dXJuIG5ldyBQYXRjaEVsZW1lbnRPcGNvZGUodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IERpY3Q8T3B0aW9uPHN0cmluZz4+IHtcbiAgICBsZXQgeyBlbGVtZW50LCBuYW1lc3BhY2UsIG5hbWUsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGZvcm1hdHRlZEVsZW1lbnQgPSBmb3JtYXRFbGVtZW50KGVsZW1lbnQpO1xuICAgIGxldCBsYXN0VmFsdWUgPSBleHBlY3QoY2FjaGUsICdtdXN0IHNlcmlhbGl6ZSBhZnRlciBmbHVzaCcpLnBlZWsoKSBhcyBzdHJpbmc7XG5cbiAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbGVtZW50OiBmb3JtYXR0ZWRFbGVtZW50LFxuICAgICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsYXN0VmFsdWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnQ6IGZvcm1hdHRlZEVsZW1lbnQsXG4gICAgICB0eXBlOiAnYXR0cmlidXRlJyxcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlID09PSB1bmRlZmluZWQgPyBudWxsIDogbmFtZXNwYWNlLFxuICAgICAgbmFtZSxcbiAgICAgIGxhc3RWYWx1ZVxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0RWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShgPCR7ZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCl9IC8+YCk7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EeW5hbWljQXR0ck5TLCAodm0sIHsgb3AxOiBfbmFtZSwgb3AyOiBfbmFtZXNwYWNlLCBvcDM6IHRydXN0aW5nIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IG5hbWVzcGFjZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWVzcGFjZSk7XG4gIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIHZtLmVsZW1lbnRzKCkuc2V0RHluYW1pY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgcmVmZXJlbmNlLCAhIXRydXN0aW5nKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0F0dHIsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IHRydXN0aW5nIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgdm0uZWxlbWVudHMoKS5zZXREeW5hbWljQXR0cmlidXRlKG5hbWUsIHJlZmVyZW5jZSwgISF0cnVzdGluZyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFBhdGNoRWxlbWVudE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInBhdGNoLWVsZW1lbnRcIjtcblxuICBwcml2YXRlIG9wZXJhdGlvbjogRHluYW1pY0F0dHJpYnV0ZTtcblxuICBjb25zdHJ1Y3RvcihvcGVyYXRpb246IER5bmFtaWNBdHRyaWJ1dGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gb3BlcmF0aW9uLnRhZztcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdGhpcy5vcGVyYXRpb24ucGF0Y2godm0uZW52KTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZCwgdHlwZSwgb3BlcmF0aW9uIH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGRldGFpbHM6IG9wZXJhdGlvbi50b0pTT04oKVxuICAgIH07XG4gIH1cbn1cbiJdfQ==

@@ -12,3 +12,3 @@ 'use strict';

var stack = vm.evalStack;
var stack = vm.stack;
var helper = vm.constants.getFunction(_helper);

@@ -18,3 +18,3 @@ var args = stack.pop();

args.clear();
vm.evalStack.push(value);
vm.stack.push(value);
});

@@ -25,17 +25,17 @@ _opcodes.APPEND_OPCODES.add(2 /* Function */, function (vm, _ref2) {

var func = vm.constants.getFunction(_function);
vm.evalStack.push(func(vm));
vm.stack.push(func(vm));
});
_opcodes.APPEND_OPCODES.add(4 /* GetVariable */, function (vm, _ref3) {
_opcodes.APPEND_OPCODES.add(5 /* GetVariable */, function (vm, _ref3) {
var symbol = _ref3.op1;
var expr = vm.referenceForSymbol(symbol);
vm.evalStack.push(expr);
vm.stack.push(expr);
});
_opcodes.APPEND_OPCODES.add(3 /* SetVariable */, function (vm, _ref4) {
_opcodes.APPEND_OPCODES.add(4 /* SetVariable */, function (vm, _ref4) {
var symbol = _ref4.op1;
var expr = vm.evalStack.pop();
var expr = vm.stack.pop();
vm.scope().bindSymbol(symbol, expr);
});
_opcodes.APPEND_OPCODES.add(71 /* ResolveMaybeLocal */, function (vm, _ref5) {
_opcodes.APPEND_OPCODES.add(70 /* ResolveMaybeLocal */, function (vm, _ref5) {
var _name = _ref5.op1;

@@ -49,5 +49,5 @@

}
vm.evalStack.push(ref);
vm.stack.push(ref);
});
_opcodes.APPEND_OPCODES.add(20 /* RootScope */, function (vm, _ref6) {
_opcodes.APPEND_OPCODES.add(19 /* RootScope */, function (vm, _ref6) {
var symbols = _ref6.op1,

@@ -58,49 +58,42 @@ bindCallerScope = _ref6.op2;

});
_opcodes.APPEND_OPCODES.add(5 /* GetProperty */, function (vm, _ref7) {
_opcodes.APPEND_OPCODES.add(6 /* GetProperty */, function (vm, _ref7) {
var _key = _ref7.op1;
var key = vm.constants.getString(_key);
var expr = vm.evalStack.pop();
vm.evalStack.push(expr.get(key));
var expr = vm.stack.pop();
vm.stack.push(expr.get(key));
});
_opcodes.APPEND_OPCODES.add(6 /* PushBlock */, function (vm, _ref8) {
_opcodes.APPEND_OPCODES.add(7 /* PushBlock */, function (vm, _ref8) {
var _block = _ref8.op1;
var block = _block ? vm.constants.getBlock(_block) : null;
vm.evalStack.push(block);
vm.stack.push(block);
});
_opcodes.APPEND_OPCODES.add(7 /* PushBlocks */, function (vm, _ref9) {
var defaultBlock = _ref9.op1,
inverseBlock = _ref9.op2;
_opcodes.APPEND_OPCODES.add(8 /* GetBlock */, function (vm, _ref9) {
var _block = _ref9.op1;
if (defaultBlock) vm.evalStack.push(vm.constants.getBlock(defaultBlock));
if (inverseBlock) vm.evalStack.push(vm.constants.getBlock(inverseBlock));
vm.stack.push(vm.scope().getBlock(_block));
});
_opcodes.APPEND_OPCODES.add(8 /* GetBlock */, function (vm, _ref10) {
_opcodes.APPEND_OPCODES.add(9 /* HasBlock */, function (vm, _ref10) {
var _block = _ref10.op1;
vm.evalStack.push(vm.scope().getBlock(_block));
var hasBlock = !!vm.scope().getBlock(_block);
vm.stack.push(hasBlock ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
});
_opcodes.APPEND_OPCODES.add(9 /* HasBlock */, function (vm, _ref11) {
_opcodes.APPEND_OPCODES.add(10 /* HasBlockParams */, function (vm, _ref11) {
var _block = _ref11.op1;
var hasBlock = !!vm.scope().getBlock(_block);
vm.evalStack.push(hasBlock ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
});
_opcodes.APPEND_OPCODES.add(10 /* HasBlockParams */, function (vm, _ref12) {
var _block = _ref12.op1;
var block = vm.scope().getBlock(_block);
var hasBlockParams = block && block.symbolTable.parameters.length;
vm.evalStack.push(hasBlockParams ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
vm.stack.push(hasBlockParams ? _references.TRUE_REFERENCE : _references.FALSE_REFERENCE);
});
_opcodes.APPEND_OPCODES.add(11 /* Concat */, function (vm, _ref13) {
var count = _ref13.op1;
_opcodes.APPEND_OPCODES.add(11 /* Concat */, function (vm, _ref12) {
var count = _ref12.op1;
var out = [];
for (var i = count; i > 0; i--) {
out.push(vm.evalStack.pop());
out.push(vm.stack.pop());
}
vm.evalStack.push(new _concat.ConcatReference(out.reverse()));
vm.stack.push(new _concat.ConcatReference(out.reverse()));
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7O0FBQ25ELEFBQU8sQUFBRSxBQUFlLEFBQUUsQUFBTSxBQUF1QixBQUFDOztBQUV4RCxBQUFPLEFBQUUsQUFBYyxBQUFFLEFBQWUsQUFBRSxBQUFNLEFBQWtCLEFBQUM7O0FBUW5FLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQVMsY0FBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQU8sQUFBRSxlQUFkLEFBQUcsQUFDdEM7O1FBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLEFBQUMsQUFDekI7UUFBSSxBQUFNLFNBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFXLFlBQVMsQUFBTyxBQUFDLEFBQUMsQUFDdkQ7UUFBSSxBQUFJLE9BQUcsQUFBSyxNQUFDLEFBQUcsQUFBYSxBQUFDLEFBQ2xDO1FBQUksQUFBSyxRQUFHLEFBQU0sT0FBQyxBQUFFLElBQUUsQUFBSSxBQUFDLEFBQUMsQUFFN0IsQUFBSTtTQUFDLEFBQUssQUFBRSxBQUFDLEFBRWIsQUFBRTtPQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDM0IsQUFBQyxBQUFDLEFBQUM7O0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsRUFBVyxnQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQVMsQUFBRSxrQkFBaEIsQUFBRyxBQUN4Qzs7UUFBSSxBQUFJLE9BQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFXLFlBQTZCLEFBQVMsQUFBQyxBQUFDLEFBQzNFLEFBQUU7T0FBQyxBQUFTLFVBQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFFLEFBQUMsQUFBQyxBQUFDLEFBQzlCLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQWMs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Yyx3QkFBQyxBQUFHLElBQUMsR0FBUyxjQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBSyxBQUFFLGVBQVosQUFBRyxBQUN0Qzs7UUFBSSxBQUFHLE1BQXFDLEFBQUUsQUFBQyxBQUUvQyxBQUFHLEFBQUM7U0FBQyxJQUFJLEFBQUMsSUFBQyxBQUFLLE9BQUUsQUFBQyxJQUFDLEFBQUMsR0FBRSxBQUFDLEFBQUUsS0FBRSxBQUFDLEFBQzNCLEFBQUc7WUFBQyxBQUFJLEtBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFHLEFBQWtDLEFBQUMsQUFBQyxBQUMvRCxBQUFDO0FBRUQsQUFBRTtPQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFlLDRCQUFDLEFBQUcsSUFBQyxBQUFPLEFBQUUsQUFBQyxBQUFDLEFBQUMsQUFDeEQsQUFBQyxBQUFDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbmNhdFJlZmVyZW5jZSB9IGZyb20gJy4uL2V4cHJlc3Npb25zL2NvbmNhdCc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBUUlVFX1JFRkVSRU5DRSwgRkFMU0VfUkVGRVJFTkNFIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tIFwiLi4vLi4vdm1cIjtcbmltcG9ydCB7IEFyZ3VtZW50cyB9IGZyb20gXCIuLi8uLi92bS9hcmd1bWVudHNcIjtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gKHZtOiBQdWJsaWNWTSkgPT4gVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPjtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkhlbHBlciwgKHZtLCB7IG9wMTogX2hlbHBlciB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGhlbHBlciA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbjxIZWxwZXI+KF9oZWxwZXIpO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG4gIGxldCB2YWx1ZSA9IGhlbHBlcih2bSwgYXJncyk7XG5cbiAgYXJncy5jbGVhcigpO1xuXG4gIHZtLmV2YWxTdGFjay5wdXNoKHZhbHVlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRnVuY3Rpb24sICh2bSwgeyBvcDE6IF9mdW5jdGlvbiB9KSA9PiB7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uPEZ1bmN0aW9uRXhwcmVzc2lvbjxPcGFxdWU+PihfZnVuY3Rpb24pO1xuICB2bS5ldmFsU3RhY2sucHVzaChmdW5jKHZtKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldFZhcmlhYmxlLCAodm0sIHsgb3AxOiBzeW1ib2wgfSkgPT4ge1xuICBsZXQgZXhwciA9IHZtLnJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2wpO1xuICB2bS5ldmFsU3RhY2sucHVzaChleHByKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0VmFyaWFibGUsICh2bSwgeyBvcDE6IHN5bWJvbCB9KSA9PiB7XG4gIGxldCBleHByID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLnNjb3BlKCkuYmluZFN5bWJvbChzeW1ib2wsIGV4cHIpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgKHZtLCB7IG9wMTogX25hbWUgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbG9jYWxzID0gdm0uc2NvcGUoKS5nZXRQYXJ0aWFsTWFwKCkhO1xuXG4gIGxldCByZWYgPSBsb2NhbHNbbmFtZV07XG4gIGlmIChyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHZtLmdldFNlbGYoKS5nZXQobmFtZSk7XG4gIH1cblxuICB2bS5ldmFsU3RhY2sucHVzaChyZWYpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Sb290U2NvcGUsICh2bSwgeyBvcDE6IHN5bWJvbHMsIG9wMjogYmluZENhbGxlclNjb3BlIH0pID0+IHtcbiAgdm0ucHVzaFJvb3RTY29wZShzeW1ib2xzLCAhIWJpbmRDYWxsZXJTY29wZSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldFByb3BlcnR5LCAodm0sIHsgb3AxOiBfa2V5IH0pID0+IHtcbiAgbGV0IGtleSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX2tleSk7XG4gIGxldCBleHByID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGV4cHIuZ2V0KGtleSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IF9ibG9jayA/IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spIDogbnVsbDtcbiAgdm0uZXZhbFN0YWNrLnB1c2goYmxvY2spO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2tzLCAodm0sIHsgb3AxOiBkZWZhdWx0QmxvY2ssIG9wMjogaW52ZXJzZUJsb2NrIH0pID0+IHtcbiAgaWYgKGRlZmF1bHRCbG9jaykgdm0uZXZhbFN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldEJsb2NrKGRlZmF1bHRCbG9jaykpO1xuICBpZiAoaW52ZXJzZUJsb2NrKSB2bS5ldmFsU3RhY2sucHVzaCh2bS5jb25zdGFudHMuZ2V0QmxvY2soaW52ZXJzZUJsb2NrKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldEJsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICB2bS5ldmFsU3RhY2sucHVzaCh2bS5zY29wZSgpLmdldEJsb2NrKF9ibG9jaykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IYXNCbG9jaywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGhhc0Jsb2NrID0gISF2bS5zY29wZSgpLmdldEJsb2NrKF9ibG9jayk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGhhc0Jsb2NrID8gVFJVRV9SRUZFUkVOQ0UgOiBGQUxTRV9SRUZFUkVOQ0UpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IYXNCbG9ja1BhcmFtcywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spO1xuICBsZXQgaGFzQmxvY2tQYXJhbXMgPSBibG9jayAmJiBibG9jay5zeW1ib2xUYWJsZS5wYXJhbWV0ZXJzLmxlbmd0aDtcbiAgdm0uZXZhbFN0YWNrLnB1c2goaGFzQmxvY2tQYXJhbXMgPyBUUlVFX1JFRkVSRU5DRSA6IEZBTFNFX1JFRkVSRU5DRSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbmNhdCwgKHZtLCB7IG9wMTogY291bnQgfSkgPT4ge1xuICBsZXQgb3V0OiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSA9IFtdO1xuXG4gIGZvciAobGV0IGk9Y291bnQ7IGk+MDsgaS0tKSB7XG4gICAgb3V0LnB1c2godm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCkpO1xuICB9XG5cbiAgdm0uZXZhbFN0YWNrLnB1c2gobmV3IENvbmNhdFJlZmVyZW5jZShvdXQucmV2ZXJzZSgpKSk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLEFBQU8sQUFBRSxBQUFjLEFBQU0sQUFBTSxBQUFlLEFBQUM7O0FBQ25ELEFBQU8sQUFBRSxBQUFlLEFBQUUsQUFBTSxBQUF1QixBQUFDOztBQUV4RCxBQUFPLEFBQUUsQUFBYyxBQUFFLEFBQWUsQUFBRSxBQUFNLEFBQWtCLEFBQUM7O0FBUW5FLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQVMsY0FBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQU8sQUFBRSxlQUFkLEFBQUcsQUFDdEM7O1FBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUMsQUFDckI7UUFBSSxBQUFNLFNBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFXLFlBQVMsQUFBTyxBQUFDLEFBQUMsQUFDdkQ7UUFBSSxBQUFJLE9BQUcsQUFBSyxNQUFDLEFBQUcsQUFBYSxBQUFDLEFBQ2xDO1FBQUksQUFBSyxRQUFHLEFBQU0sT0FBQyxBQUFFLElBQUUsQUFBSSxBQUFDLEFBQUMsQUFFN0IsQUFBSTtTQUFDLEFBQUssQUFBRSxBQUFDLEFBRWIsQUFBRTtPQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDdkIsQUFBQyxBQUFDLEFBQUM7O0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsRUFBVyxnQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQVMsQUFBRSxrQkFBaEIsQUFBRyxBQUN4Qzs7UUFBSSxBQUFJLE9BQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFXLFlBQTZCLEFBQVMsQUFBQyxBQUFDLEFBQzNFLEFBQUU7T0FBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFFLEFBQUMsQUFBQyxBQUFDLEFBQzFCLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEVBQWMs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QUFDLEFBQUMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29uY2F0UmVmZXJlbmNlIH0gZnJvbSAnLi4vZXhwcmVzc2lvbnMvY29uY2F0JztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IFRSVUVfUkVGRVJFTkNFLCBGQUxTRV9SRUZFUkVOQ0UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gXCIuLi8uLi92bVwiO1xuaW1wb3J0IHsgQXJndW1lbnRzIH0gZnJvbSBcIi4uLy4uL3ZtL2FyZ3VtZW50c1wiO1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb248VD4gPSAodm06IFB1YmxpY1ZNKSA9PiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPFQ+O1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGVscGVyLCAodm0sIHsgb3AxOiBfaGVscGVyIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBoZWxwZXIgPSB2bS5jb25zdGFudHMuZ2V0RnVuY3Rpb248SGVscGVyPihfaGVscGVyKTtcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdmFsdWUgPSBoZWxwZXIodm0sIGFyZ3MpO1xuXG4gIGFyZ3MuY2xlYXIoKTtcblxuICB2bS5zdGFjay5wdXNoKHZhbHVlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRnVuY3Rpb24sICh2bSwgeyBvcDE6IF9mdW5jdGlvbiB9KSA9PiB7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uPEZ1bmN0aW9uRXhwcmVzc2lvbjxPcGFxdWU+PihfZnVuY3Rpb24pO1xuICB2bS5zdGFjay5wdXNoKGZ1bmModm0pKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0VmFyaWFibGUsICh2bSwgeyBvcDE6IHN5bWJvbCB9KSA9PiB7XG4gIGxldCBleHByID0gdm0ucmVmZXJlbmNlRm9yU3ltYm9sKHN5bWJvbCk7XG4gIHZtLnN0YWNrLnB1c2goZXhwcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlNldFZhcmlhYmxlLCAodm0sIHsgb3AxOiBzeW1ib2wgfSkgPT4ge1xuICBsZXQgZXhwciA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLnNjb3BlKCkuYmluZFN5bWJvbChzeW1ib2wsIGV4cHIpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgKHZtLCB7IG9wMTogX25hbWUgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbG9jYWxzID0gdm0uc2NvcGUoKS5nZXRQYXJ0aWFsTWFwKCkhO1xuXG4gIGxldCByZWYgPSBsb2NhbHNbbmFtZV07XG4gIGlmIChyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHZtLmdldFNlbGYoKS5nZXQobmFtZSk7XG4gIH1cblxuICB2bS5zdGFjay5wdXNoKHJlZik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJvb3RTY29wZSwgKHZtLCB7IG9wMTogc3ltYm9scywgb3AyOiBiaW5kQ2FsbGVyU2NvcGUgfSkgPT4ge1xuICB2bS5wdXNoUm9vdFNjb3BlKHN5bWJvbHMsICEhYmluZENhbGxlclNjb3BlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UHJvcGVydHksICh2bSwgeyBvcDE6IF9rZXkgfSkgPT4ge1xuICBsZXQga2V5ID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfa2V5KTtcbiAgbGV0IGV4cHIgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICB2bS5zdGFjay5wdXNoKGV4cHIuZ2V0KGtleSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IF9ibG9jayA/IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spIDogbnVsbDtcbiAgdm0uc3RhY2sucHVzaChibG9jayk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldEJsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICB2bS5zdGFjay5wdXNoKHZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkhhc0Jsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICBsZXQgaGFzQmxvY2sgPSAhIXZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgdm0uc3RhY2sucHVzaChoYXNCbG9jayA/IFRSVUVfUkVGRVJFTkNFIDogRkFMU0VfUkVGRVJFTkNFKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGFzQmxvY2tQYXJhbXMsICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IHZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgbGV0IGhhc0Jsb2NrUGFyYW1zID0gYmxvY2sgJiYgYmxvY2suc3ltYm9sVGFibGUucGFyYW1ldGVycy5sZW5ndGg7XG4gIHZtLnN0YWNrLnB1c2goaGFzQmxvY2tQYXJhbXMgPyBUUlVFX1JFRkVSRU5DRSA6IEZBTFNFX1JFRkVSRU5DRSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbmNhdCwgKHZtLCB7IG9wMTogY291bnQgfSkgPT4ge1xuICBsZXQgb3V0OiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSA9IFtdO1xuXG4gIGZvciAobGV0IGk9Y291bnQ7IGk+MDsgaS0tKSB7XG4gICAgb3V0LnB1c2godm0uc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKSk7XG4gIH1cblxuICB2bS5zdGFjay5wdXNoKG5ldyBDb25jYXRSZWZlcmVuY2Uob3V0LnJldmVyc2UoKSkpO1xufSk7XG4iXX0=

@@ -28,4 +28,4 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(52 /* PutIterator */, function (vm) {
var stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(53 /* PutIterator */, function (vm) {
var stack = vm.stack;
var listRef = stack.pop();

@@ -38,20 +38,17 @@ var key = stack.pop();

});
_opcodes.APPEND_OPCODES.add(50 /* EnterList */, function (vm, _ref) {
var start = _ref.op2,
end = _ref.op3;
_opcodes.APPEND_OPCODES.add(51 /* EnterList */, function (vm, _ref) {
var start = _ref.op1;
vm.enterList(start, end);
vm.enterList(start);
});
_opcodes.APPEND_OPCODES.add(51 /* ExitList */, function (vm) {
_opcodes.APPEND_OPCODES.add(52 /* ExitList */, function (vm) {
return vm.exitList();
});
_opcodes.APPEND_OPCODES.add(53 /* Iterate */, function (vm, _ref2) {
var breaks = _ref2.op1,
start = _ref2.op2,
end = _ref2.op3;
_opcodes.APPEND_OPCODES.add(54 /* Iterate */, function (vm, _ref2) {
var breaks = _ref2.op1;
var stack = vm.evalStack;
var item = stack.top().next();
var stack = vm.stack;
var item = stack.peek().next();
if (item) {
var tryOpcode = vm.iterate(start, end, item.memo, item.value);
var tryOpcode = vm.iterate(item.memo, item.value);
vm.enterItem(item.key, tryOpcode);

@@ -62,2 +59,2 @@ } else {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLEFBQU8sQUFBa0IsQUFBaUIsQUFBOEMsQUFBTSxBQUFvQixBQUFDOztBQUNuSCxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDLEFBRW5EOzs7Ozs7Ozs0Q0FJRTt1Q0FBWSxBQUE2Qjs4QkFDdkMsQUFBSTs7YUFBQyxBQUFHLE1BQUcsQUFBUyxVQUFDLEFBQUcsQUFBQyxBQUN6QixBQUFJO2FBQUMsQUFBUyxZQUFHLEFBQVMsQUFBQyxBQUM3QixBQUFDOzs7d0NBRUQsQUFBSyx5QkFDSCxBQUFNO2VBQUMsQ0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQU8sQUFBRSxBQUFDLEFBQ25DLEFBQUMsQUFDRjs7Ozs7O0FBRUQsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxBQUFFLGNBQ25DO1FBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLEFBQUMsQUFDekI7UUFBSSxBQUFPLFVBQUcsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQyxBQUMxRDtRQUFJLEFBQUcsTUFBRyxBQUFLLE1BQUMsQUFBRyxBQUFrQyxBQUFDLEFBQ3REO1FBQUksQUFBUSxXQUFHLEFBQUUsR0FBQyxBQUFHLElBQUMsQUFBVyxZQUFDLEFBQU8sU0FBRSxBQUFHLElBQUMsQUFBSyxBQUFFLEFBQUMsQUFBQyxBQUN4RDtRQUFJLEFBQVEsV0FBRyxBQUFJLEFBQWlCLGlDQUFDLEFBQVEsQUFBQyxBQUFDLEFBRS9DLEFBQUs7VUFBQyxBQUFJLEtBQUMsQUFBUSxBQUFDLEFBQUMsQUFDckIsQUFBSztVQUFDLEFBQUksS0FBQyxJQUFJLEFBQXlCLDBCQUFDLEFBQVEsU0FBQyxBQUFTLEFBQUMsQUFBQyxBQUFDLEFBQ2hFLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVksaUJBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFLLGFBQVYsQUFBRztRQUFjLEFBQUcsQUFBRSxXQUFWLEFBQUcsQUFDckQsQUFBRTs7T0FBQyxBQUFTLFVBQUMsQUFBSyxPQUFFLEFBQUcsQUFBQyxBQUFDLEFBQzNCLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVcsOEJBQUUsQUFBRTtXQUFJLEFBQUUsR0FBQyxBQUFRLEFBQUUsQUFBQyxBQUFDOztBQUVyRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFNLGVBQVgsQUFBRztRQUFlLEFBQUssY0FBVixBQUFHO1FBQWMsQUFBRyxBQUFFLFlBQVYsQUFBRyxBQUNoRTs7UUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsQUFBQyxBQUN6QjtRQUFJLEFBQUksT0FBRyxBQUFLLE1BQUMsQUFBRyxBQUFxQixNQUFDLEFBQUksQUFBRSxBQUFDLEFBRWpELEFBQUUsQUFBQztRQUFDLEFBQUksQUFBQyxNQUFDLEFBQUMsQUFDVDtZQUFJLEFBQVMsWUFBRyxBQUFFLEdBQUMsQUFBTyxRQUFDLEFBQUssT0FBRSxBQUFHLEtBQUUsQUFBSSxLQUFDLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDOUQsQUFBRTtXQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQVMsQUFBQyxBQUFDLEFBQ3BDLEFBQUMsQUFBQyxBQUFJO1dBQUMsQUFBQyxBQUNOLEFBQUU7V0FBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEIsQUFBQyxBQUNIO0FBQUMsQUFBQyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBUYWcsIFJlZmVyZW5jZSwgUmVmZXJlbmNlSXRlcmF0b3IsIEl0ZXJhdGlvbkFydGlmYWN0cywgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuY2xhc3MgSXRlcmFibGVQcmVzZW5jZVJlZmVyZW5jZSBpbXBsZW1lbnRzIFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHB1YmxpYyB0YWc6IFRhZztcbiAgcHJpdmF0ZSBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBjb25zdHJ1Y3RvcihhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHRoaXMudGFnID0gYXJ0aWZhY3RzLnRhZztcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgfVxuXG4gIHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hcnRpZmFjdHMuaXNFbXB0eSgpO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXRJdGVyYXRvciwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBsaXN0UmVmID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcbiAgbGV0IGtleSA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIGxldCBpdGVyYWJsZSA9IHZtLmVudi5pdGVyYWJsZUZvcihsaXN0UmVmLCBrZXkudmFsdWUoKSk7XG4gIGxldCBpdGVyYXRvciA9IG5ldyBSZWZlcmVuY2VJdGVyYXRvcihpdGVyYWJsZSk7XG5cbiAgc3RhY2sucHVzaChpdGVyYXRvcik7XG4gIHN0YWNrLnB1c2gobmV3IEl0ZXJhYmxlUHJlc2VuY2VSZWZlcmVuY2UoaXRlcmF0b3IuYXJ0aWZhY3RzKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkVudGVyTGlzdCwgKHZtLCB7IG9wMjogc3RhcnQsIG9wMzogZW5kIH0pID0+IHtcbiAgdm0uZW50ZXJMaXN0KHN0YXJ0LCBlbmQpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FeGl0TGlzdCwgdm0gPT4gdm0uZXhpdExpc3QoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JdGVyYXRlLCAodm0sIHsgb3AxOiBicmVha3MsIG9wMjogc3RhcnQsIG9wMzogZW5kIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgaXRlbSA9IHN0YWNrLnRvcDxSZWZlcmVuY2VJdGVyYXRvcj4oKS5uZXh0KCk7XG5cbiAgaWYgKGl0ZW0pIHtcbiAgICBsZXQgdHJ5T3Bjb2RlID0gdm0uaXRlcmF0ZShzdGFydCwgZW5kLCBpdGVtLm1lbW8sIGl0ZW0udmFsdWUpO1xuICAgIHZtLmVudGVySXRlbShpdGVtLmtleSwgdHJ5T3Bjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2bS5nb3RvKGJyZWFrcyk7XG4gIH1cbn0pO1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLEFBQU8sQUFBa0IsQUFBaUIsQUFBOEMsQUFBTSxBQUFvQixBQUFDOztBQUNuSCxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDLEFBRW5EOzs7Ozs7Ozs0Q0FJRTt1Q0FBWSxBQUE2Qjs4QkFDdkMsQUFBSTs7YUFBQyxBQUFHLE1BQUcsQUFBUyxVQUFDLEFBQUcsQUFBQyxBQUN6QixBQUFJO2FBQUMsQUFBUyxZQUFHLEFBQVMsQUFBQyxBQUM3QixBQUFDOzs7d0NBRUQsQUFBSyx5QkFDSCxBQUFNO2VBQUMsQ0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQU8sQUFBRSxBQUFDLEFBQ25DLEFBQUMsQUFDRjs7Ozs7O0FBRUQsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxBQUFFLGNBQ25DO1FBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUMsQUFDckI7UUFBSSxBQUFPLFVBQUcsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQyxBQUMxRDtRQUFJLEFBQUcsTUFBRyxBQUFLLE1BQUMsQUFBRyxBQUFrQyxBQUFDLEFBQ3REO1FBQUksQUFBUSxXQUFHLEFBQUUsR0FBQyxBQUFHLElBQUMsQUFBVyxZQUFDLEFBQU8sU0FBRSxBQUFHLElBQUMsQUFBSyxBQUFFLEFBQUMsQUFBQyxBQUN4RDtRQUFJLEFBQVEsV0FBRyxBQUFJLEFBQWlCLGlDQUFDLEFBQVEsQUFBQyxBQUFDLEFBRS9DLEFBQUs7VUFBQyxBQUFJLEtBQUMsQUFBUSxBQUFDLEFBQUMsQUFDckIsQUFBSztVQUFDLEFBQUksS0FBQyxJQUFJLEFBQXlCLDBCQUFDLEFBQVEsU0FBQyxBQUFTLEFBQUMsQUFBQyxBQUFDLEFBQ2hFLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVksaUJBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFLLEFBQUUsYUFBWixBQUFHLEFBQ3pDLEFBQUU7O09BQUMsQUFBUyxVQUFDLEFBQUssQUFBQyxBQUFDLEFBQ3RCLEFBQUMsQUFBQyxBQUFDOztBQUVILEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQVcsOEJBQUUsQUFBRTtXQUFJLEFBQUUsR0FBQyxBQUFRLEFBQUUsQUFBQyxBQUFDOztBQUVyRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFNLEFBQUUsZUFBYixBQUFHLEFBQ3ZDOztRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBSyxBQUFDLEFBQ3JCO1FBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFJLEFBQXFCLE9BQUMsQUFBSSxBQUFFLEFBQUMsQUFFbEQsQUFBRSxBQUFDO1FBQUMsQUFBSSxBQUFDLE1BQUMsQUFBQyxBQUNUO1lBQUksQUFBUyxZQUFHLEFBQUUsR0FBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDbEQsQUFBRTtXQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQVMsQUFBQyxBQUFDLEFBQ3BDLEFBQUMsQUFBQyxBQUFJO1dBQUMsQUFBQyxBQUNOLEFBQUU7V0FBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEIsQUFBQyxBQUNIO0FBQUMsQUFBQyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBUYWcsIFJlZmVyZW5jZSwgUmVmZXJlbmNlSXRlcmF0b3IsIEl0ZXJhdGlvbkFydGlmYWN0cywgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuY2xhc3MgSXRlcmFibGVQcmVzZW5jZVJlZmVyZW5jZSBpbXBsZW1lbnRzIFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHB1YmxpYyB0YWc6IFRhZztcbiAgcHJpdmF0ZSBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBjb25zdHJ1Y3RvcihhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHRoaXMudGFnID0gYXJ0aWZhY3RzLnRhZztcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgfVxuXG4gIHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hcnRpZmFjdHMuaXNFbXB0eSgpO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXRJdGVyYXRvciwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGxpc3RSZWYgPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICBsZXQga2V5ID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgbGV0IGl0ZXJhYmxlID0gdm0uZW52Lml0ZXJhYmxlRm9yKGxpc3RSZWYsIGtleS52YWx1ZSgpKTtcbiAgbGV0IGl0ZXJhdG9yID0gbmV3IFJlZmVyZW5jZUl0ZXJhdG9yKGl0ZXJhYmxlKTtcblxuICBzdGFjay5wdXNoKGl0ZXJhdG9yKTtcbiAgc3RhY2sucHVzaChuZXcgSXRlcmFibGVQcmVzZW5jZVJlZmVyZW5jZShpdGVyYXRvci5hcnRpZmFjdHMpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXJMaXN0LCAodm0sIHsgb3AxOiBzdGFydCB9KSA9PiB7XG4gIHZtLmVudGVyTGlzdChzdGFydCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXRMaXN0LCB2bSA9PiB2bS5leGl0TGlzdCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkl0ZXJhdGUsICh2bSwgeyBvcDE6IGJyZWFrcyB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgaXRlbSA9IHN0YWNrLnBlZWs8UmVmZXJlbmNlSXRlcmF0b3I+KCkubmV4dCgpO1xuXG4gIGlmIChpdGVtKSB7XG4gICAgbGV0IHRyeU9wY29kZSA9IHZtLml0ZXJhdGUoaXRlbS5tZW1vLCBpdGVtLnZhbHVlKTtcbiAgICB2bS5lbnRlckl0ZW0oaXRlbS5rZXksIHRyeU9wY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uZ290byhicmVha3MpO1xuICB9XG59KTtcbiJdfQ==

@@ -5,7 +5,7 @@ 'use strict';

_opcodes.APPEND_OPCODES.add(70 /* GetPartialTemplate */, function (vm) {
var stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(69 /* GetPartialTemplate */, function (vm) {
var stack = vm.stack;
var definition = stack.pop();
stack.push(definition.value().template.asPartial());
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDOztBQUduRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFxQiwwQkFBRSxBQUFFLGNBQzFDO1FBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLEFBQUMsQUFDekI7UUFBSSxBQUFVLGFBQUcsQUFBSyxNQUFDLEFBQUcsQUFBMkQsQUFBQyxBQUN0RixBQUFLO1VBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFRLFNBQUMsQUFBUyxBQUFFLEFBQUMsQUFBQyxBQUN0RCxBQUFDLEFBQUMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3BhcnRpYWwnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UGFydGlhbFRlbXBsYXRlLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGRlZmluaXRpb24gPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxQYXJ0aWFsRGVmaW5pdGlvbjxUZW1wbGF0ZU1ldGE+Pj4oKTtcbiAgc3RhY2sucHVzaChkZWZpbml0aW9uLnZhbHVlKCkudGVtcGxhdGUuYXNQYXJ0aWFsKCkpO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxBQUFPLEFBQUUsQUFBYyxBQUFNLEFBQU0sQUFBZSxBQUFDOztBQUduRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFxQiwwQkFBRSxBQUFFLGNBQzFDO1FBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUMsQUFDckI7UUFBSSxBQUFVLGFBQUcsQUFBSyxNQUFDLEFBQUcsQUFBMkQsQUFBQyxBQUN0RixBQUFLO1VBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFRLFNBQUMsQUFBUyxBQUFFLEFBQUMsQUFBQyxBQUN0RCxBQUFDLEFBQUMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3BhcnRpYWwnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UGFydGlhbFRlbXBsYXRlLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgZGVmaW5pdGlvbiA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPFBhcnRpYWxEZWZpbml0aW9uPFRlbXBsYXRlTWV0YT4+PigpO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24udmFsdWUoKS50ZW1wbGF0ZS5hc1BhcnRpYWwoKSk7XG59KTtcbiJdfQ==

@@ -42,41 +42,28 @@ "use strict";

_opcodes.APPEND_OPCODES.add(18 /* ReserveLocals */, function (vm, _ref) {
var amount = _ref.op1;
vm.reserveLocals(amount);
});
_opcodes.APPEND_OPCODES.add(19 /* ReleaseLocals */, function (vm) {
return vm.releaseLocals();
});
_opcodes.APPEND_OPCODES.add(14 /* SetLocal */, function (vm, _ref2) {
var position = _ref2.op1;
vm.setLocal(position, vm.evalStack.pop());
});
_opcodes.APPEND_OPCODES.add(15 /* GetLocal */, function (vm, _ref3) {
var position = _ref3.op1;
vm.evalStack.push(vm.getLocal(position));
});
_opcodes.APPEND_OPCODES.add(21 /* ChildScope */, function (vm) {
_opcodes.APPEND_OPCODES.add(20 /* ChildScope */, function (vm) {
return vm.pushChildScope();
});
_opcodes.APPEND_OPCODES.add(22 /* PopScope */, function (vm) {
_opcodes.APPEND_OPCODES.add(21 /* PopScope */, function (vm) {
return vm.popScope();
});
_opcodes.APPEND_OPCODES.add(39 /* PushDynamicScope */, function (vm) {
_opcodes.APPEND_OPCODES.add(38 /* PushDynamicScope */, function (vm) {
return vm.pushDynamicScope();
});
_opcodes.APPEND_OPCODES.add(40 /* PopDynamicScope */, function (vm) {
_opcodes.APPEND_OPCODES.add(39 /* PopDynamicScope */, function (vm) {
return vm.popDynamicScope();
});
_opcodes.APPEND_OPCODES.add(12 /* Constant */, function (vm, _ref4) {
var other = _ref4.op1;
_opcodes.APPEND_OPCODES.add(12 /* Immediate */, function (vm, _ref) {
var number = _ref.op1;
vm.evalStack.push(vm.constants.getOther(other));
vm.stack.push(number);
});
_opcodes.APPEND_OPCODES.add(13 /* Primitive */, function (vm, _ref5) {
var primitive = _ref5.op1;
_opcodes.APPEND_OPCODES.add(13 /* Constant */, function (vm, _ref2) {
var other = _ref2.op1;
var stack = vm.evalStack;
vm.stack.push(vm.constants.getOther(other));
});
_opcodes.APPEND_OPCODES.add(14 /* PrimitiveReference */, function (vm, _ref3) {
var primitive = _ref3.op1;
var stack = vm.stack;
var flag = (primitive & 3 << 30) >>> 30;

@@ -109,10 +96,23 @@ var value = primitive & ~(3 << 30);

});
_opcodes.APPEND_OPCODES.add(16 /* Dup */, function (vm) {
return vm.evalStack.dup();
_opcodes.APPEND_OPCODES.add(15 /* Dup */, function (vm, _ref4) {
var register = _ref4.op1,
offset = _ref4.op2;
var position = vm.fetchValue(register) - offset;
vm.stack.dup(position);
});
_opcodes.APPEND_OPCODES.add(17 /* Pop */, function (vm) {
return vm.evalStack.pop();
_opcodes.APPEND_OPCODES.add(16 /* Pop */, function (vm, _ref5) {
var count = _ref5.op1;
return vm.stack.pop(count);
});
_opcodes.APPEND_OPCODES.add(38 /* BindDynamicScope */, function (vm, _ref6) {
var _names = _ref6.op1;
_opcodes.APPEND_OPCODES.add(17 /* Load */, function (vm, _ref6) {
var register = _ref6.op1;
return vm.load(register);
});
_opcodes.APPEND_OPCODES.add(18 /* Fetch */, function (vm, _ref7) {
var register = _ref7.op1;
return vm.fetch(register);
});
_opcodes.APPEND_OPCODES.add(37 /* BindDynamicScope */, function (vm, _ref8) {
var _names = _ref8.op1;

@@ -122,37 +122,42 @@ var names = vm.constants.getArray(_names);

});
_opcodes.APPEND_OPCODES.add(47 /* Enter */, function (vm, _ref7) {
var args = _ref7.op1,
start = _ref7.op2,
end = _ref7.op3;
return vm.enter(args, start, end);
_opcodes.APPEND_OPCODES.add(46 /* PushFrame */, function (vm) {
return vm.pushFrame();
});
_opcodes.APPEND_OPCODES.add(48 /* Exit */, function (vm) {
_opcodes.APPEND_OPCODES.add(47 /* PopFrame */, function (vm) {
return vm.popFrame();
});
_opcodes.APPEND_OPCODES.add(48 /* Enter */, function (vm, _ref9) {
var args = _ref9.op1;
return vm.enter(args);
});
_opcodes.APPEND_OPCODES.add(49 /* Exit */, function (vm) {
return vm.exit();
});
_opcodes.APPEND_OPCODES.add(41 /* CompileDynamicBlock */, function (vm) {
var stack = vm.evalStack;
_opcodes.APPEND_OPCODES.add(40 /* CompileDynamicBlock */, function (vm) {
var stack = vm.stack;
var block = stack.pop();
stack.push(block ? block.compileDynamic(vm.env) : null);
});
_opcodes.APPEND_OPCODES.add(42 /* InvokeStatic */, function (vm, _ref8) {
var _block = _ref8.op1;
_opcodes.APPEND_OPCODES.add(41 /* InvokeStatic */, function (vm, _ref10) {
var _block = _ref10.op1;
var block = vm.constants.getBlock(_block);
vm.invokeBlock(block);
var compiled = block.compileStatic(vm.env);
vm.call(compiled.start);
});
_opcodes.APPEND_OPCODES.add(43 /* InvokeDynamic */, function (vm, _ref9) {
var _invoker = _ref9.op1;
_opcodes.APPEND_OPCODES.add(42 /* InvokeDynamic */, function (vm, _ref11) {
var _invoker = _ref11.op1;
var invoker = vm.constants.getOther(_invoker);
var block = vm.evalStack.pop();
var block = vm.stack.pop();
invoker.invoke(vm, block);
});
_opcodes.APPEND_OPCODES.add(44 /* Jump */, function (vm, _ref10) {
var target = _ref10.op1;
_opcodes.APPEND_OPCODES.add(43 /* Jump */, function (vm, _ref12) {
var target = _ref12.op1;
return vm.goto(target);
});
_opcodes.APPEND_OPCODES.add(45 /* JumpIf */, function (vm, _ref11) {
var target = _ref11.op1;
_opcodes.APPEND_OPCODES.add(44 /* JumpIf */, function (vm, _ref13) {
var target = _ref13.op1;
var reference = vm.evalStack.pop();
var reference = vm.stack.pop();
if ((0, _reference.isConst)(reference)) {

@@ -170,6 +175,6 @@ if (reference.value()) {

});
_opcodes.APPEND_OPCODES.add(46 /* JumpUnless */, function (vm, _ref12) {
var target = _ref12.op1;
_opcodes.APPEND_OPCODES.add(45 /* JumpUnless */, function (vm, _ref14) {
var target = _ref14.op1;
var reference = vm.evalStack.pop();
var reference = vm.stack.pop();
if ((0, _reference.isConst)(reference)) {

@@ -187,3 +192,3 @@ if (!reference.value()) {

});
_opcodes.APPEND_OPCODES.add(23 /* Return */, function (vm) {
_opcodes.APPEND_OPCODES.add(22 /* Return */, function (vm) {
return vm.return();

@@ -200,6 +205,6 @@ });

};
_opcodes.APPEND_OPCODES.add(49 /* Test */, function (vm, _ref13) {
var _func = _ref13.op1;
_opcodes.APPEND_OPCODES.add(50 /* Test */, function (vm, _ref15) {
var _func = _ref15.op1;
var stack = vm.evalStack;
var stack = vm.stack;
var operand = stack.pop();

@@ -340,2 +345,2 @@ var func = vm.constants.getFunction(_func);

}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsQUFBTyxBQUFjLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFHM0QsQUFBTyxBQUFhLEFBQWMsQUFBMEIsQUFBTSxBQUFvQixBQUFDOztBQUN2RixBQUFPLEFBQWtCLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQyxBQUMvRCxBQUFPLEFBQUUsQUFBWSxBQUFFLEFBQWMsQUFBaUIsQUFBTyxBQUFFLEFBQVUsQUFBRSxBQUFNLEFBQW9CLEFBQUMsQUFFdEcsQUFBTyxBQUFFLEFBQWMsQUFBWSxBQUFNLEFBQWUsQUFBQzs7QUFNekQsQUFBTyxBQUNMLEFBQWMsQUFDZCxBQUFtQixBQUNuQixBQUFjLEFBQ2QsQUFBZSxBQUNmLEFBQWtCLEFBQ25CLEFBQU0sQUFBa0IsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUxQixBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFnQixxQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQU0sQUFBRSxjQUFiLEFBQUcsQUFDN0MsQUFBRTs7T0FBQyxBQUFhLGNBQUMsQUFBTSxBQUFDLEFBQUMsQUFDM0IsQUFBQyxBQUFDLEFBQUM7O0FBRUgsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBZ0IsbUNBQUUsQUFBRTtXQUFJLEFBQUUsR0FBQyxBQUFhLEFBQUUsQUFBQyxBQUFDOztBQUUvRCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFXLGdCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBUSxBQUFFLGlCQUFmLEFBQUcsQUFDeEMsQUFBRTs7T0FBQyxBQUFRLFNBQUMsQUFBUSxVQUFFLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBRyxBQUFFLEFBQUMsQUFBQyxBQUM1QyxBQUFDLEFBQUMsQUFBQzs7QUFFSCxBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFXLGdCQUFFLFVBQUMsQUFBRSxBQUFF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LEFBQUksS0FBQyxBQUFLLEFBQUcsQUFBQyxBQUN6QyxRQUFDOzs7MEJBRUQsQUFBTSwyQkFDSixBQUFNOztrQkFDRSxBQUFJLEtBQUMsQUFBSyxBQUNoQixBQUFJO2tCQUFFLEFBQUksS0FBQyxBQUFJLEFBQ2YsQUFBSTtrQkFBRSxDQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBSSxLQUhyQixBQUdzQixBQUFPLEFBQUUsQUFBQyxBQUFDLEFBQ3ZDLEFBQUMsQUFDSixBQUFDLEFBQ0Y7QUFMSyxBQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuLi9ibG9ja3MnO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFVwZGF0aW5nVk0sIFZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgU3ltYm9sVGFibGUgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgQ29uc3RSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUsIGluaXRpYWxpemVHdWlkIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBDT05TVEFOVF9UQUcsIFJlZmVyZW5jZUNhY2hlLCBSZXZpc2lvbiwgVGFnLCBpc0NvbnN0LCBpc01vZGlmaWVkIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgYXMgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuaW1wb3J0IHtcbiAgQmxvY2tcbn0gZnJvbSAnLi4vLi4vc2Nhbm5lcic7XG5cbmltcG9ydCB7XG4gIE5VTExfUkVGRVJFTkNFLFxuICBVTkRFRklORURfUkVGRVJFTkNFLFxuICBUUlVFX1JFRkVSRU5DRSxcbiAgRkFMU0VfUkVGRVJFTkNFLFxuICBQcmltaXRpdmVSZWZlcmVuY2Vcbn0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXNlcnZlTG9jYWxzLCAodm0sIHsgb3AxOiBhbW91bnQgfSkgPT4ge1xuICB2bS5yZXNlcnZlTG9jYWxzKGFtb3VudCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlbGVhc2VMb2NhbHMsIHZtID0+IHZtLnJlbGVhc2VMb2NhbHMoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5TZXRMb2NhbCwgKHZtLCB7IG9wMTogcG9zaXRpb24gfSkgPT4ge1xuICB2bS5zZXRMb2NhbChwb3NpdGlvbiwgdm0uZXZhbFN0YWNrLnBvcCgpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0TG9jYWwsICh2bSwgeyBvcDE6IHBvc2l0aW9uIH0pID0+IHtcbiAgdm0uZXZhbFN0YWNrLnB1c2godm0uZ2V0TG9jYWwocG9zaXRpb24pKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ2hpbGRTY29wZSwgdm0gPT4gdm0ucHVzaENoaWxkU2NvcGUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3BTY29wZSwgdm0gPT4gdm0ucG9wU2NvcGUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoRHluYW1pY1Njb3BlLCB2bSA9PiB2bS5wdXNoRHluYW1pY1Njb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wRHluYW1pY1Njb3BlLCB2bSA9PiB2bS5wb3BEeW5hbWljU2NvcGUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db25zdGFudCwgKHZtLCB7IG9wMTogb3RoZXIgfSkgPT4ge1xuICB2bS5ldmFsU3RhY2sucHVzaCh2bS5jb25zdGFudHMuZ2V0T3RoZXIob3RoZXIpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHJpbWl0aXZlLCAodm0sIHsgb3AxOiBwcmltaXRpdmUgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBmbGFnID0gKHByaW1pdGl2ZSAmICgzIDw8IDMwKSkgPj4+IDMwO1xuICBsZXQgdmFsdWUgPSBwcmltaXRpdmUgJiB+KDMgPDwgMzApO1xuXG4gIHN3aXRjaCAoZmxhZykge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhY2sucHVzaChQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodmFsdWUpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgMDogc3RhY2sucHVzaChGQUxTRV9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAxOiBzdGFjay5wdXNoKFRSVUVfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogc3RhY2sucHVzaChOVUxMX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IHN0YWNrLnB1c2goVU5ERUZJTkVEX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHVwLCB2bSA9PiB2bS5ldmFsU3RhY2suZHVwKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wLCB2bSA9PiB2bS5ldmFsU3RhY2sucG9wKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQmluZER5bmFtaWNTY29wZSwgKHZtLCB7IG9wMTogX25hbWVzIH0pID0+IHtcbiAgbGV0IG5hbWVzID0gdm0uY29uc3RhbnRzLmdldEFycmF5KF9uYW1lcyk7XG4gIHZtLmJpbmREeW5hbWljU2NvcGUobmFtZXMpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FbnRlciwgKHZtLCB7IG9wMTogYXJncywgb3AyOiBzdGFydCwgb3AzOiBlbmQgfSkgPT4gdm0uZW50ZXIoYXJncywgc3RhcnQsIGVuZCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRXhpdCwgKHZtKSA9PiB2bS5leGl0KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tcGlsZUR5bmFtaWNCbG9jaywgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBibG9jayA9IHN0YWNrLnBvcDxCbG9jaz4oKTtcbiAgc3RhY2sucHVzaChibG9jayA/IGJsb2NrLmNvbXBpbGVEeW5hbWljKHZtLmVudikgOiBudWxsKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSW52b2tlU3RhdGljLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICBsZXQgYmxvY2sgPSB2bS5jb25zdGFudHMuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgdm0uaW52b2tlQmxvY2soYmxvY2spO1xufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0ludm9rZXI8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiB7XG4gIGludm9rZSh2bTogVk0sIGJsb2NrOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+KTogdm9pZDtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkludm9rZUR5bmFtaWMsICh2bSwgeyBvcDE6IF9pbnZva2VyIH0pID0+IHtcbiAgbGV0IGludm9rZXIgPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8RHluYW1pY0ludm9rZXI8U3ltYm9sVGFibGU+PihfaW52b2tlcik7XG4gIGxldCBibG9jayA9IHZtLmV2YWxTdGFjay5wb3A8T3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFN5bWJvbFRhYmxlPj4+KCk7XG4gIGludm9rZXIuaW52b2tlKHZtLCBibG9jayk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkp1bXAsICh2bSwgeyBvcDE6IHRhcmdldCB9KSA9PiB2bS5nb3RvKHRhcmdldCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcElmLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4ge1xuICBsZXQgcmVmZXJlbmNlID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG5cbiAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgIGlmIChyZWZlcmVuY2UudmFsdWUoKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcblxuICAgIGlmIChjYWNoZS5wZWVrKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wVW5sZXNzLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4ge1xuICBsZXQgcmVmZXJlbmNlID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG5cbiAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgIGlmICghcmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoIWNhY2hlLnBlZWsoKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cblxuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJldHVybiwgdm0gPT4gdm0ucmV0dXJuKCkpO1xuXG5leHBvcnQgdHlwZSBUZXN0RnVuY3Rpb24gPSAocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgZW52OiBFbnZpcm9ubWVudCkgPT4gUmVmZXJlbmNlPGJvb2xlYW4+O1xuXG5leHBvcnQgY29uc3QgQ29uc3RUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBfZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiBuZXcgQ29uc3RSZWZlcmVuY2UoISFyZWYudmFsdWUoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgU2ltcGxlVGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgX2VudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gcmVmIGFzIFJlZmVyZW5jZTxib29sZWFuPjtcbn07XG5cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudFRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZW52LnRvQ29uZGl0aW9uYWxSZWZlcmVuY2UocmVmKTtcbn07XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5UZXN0LCAodm0sIHsgb3AxOiBfZnVuYyB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IG9wZXJhbmQgPSBzdGFjay5wb3AoKTtcbiAgbGV0IGZ1bmMgPSB2bS5jb25zdGFudHMuZ2V0RnVuY3Rpb24oX2Z1bmMpO1xuICBzdGFjay5wdXNoKGZ1bmMob3BlcmFuZCwgdm0uZW52KSk7XG59KTtcblxuZXhwb3J0IGNsYXNzIEFzc2VydCBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImFzc2VydFwiO1xuXG4gIHByaXZhdGUgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT47XG5cbiAgY29uc3RydWN0b3IoY2FjaGU6IFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY2FjaGUudGFnO1xuICAgIHRoaXMuY2FjaGUgPSBjYWNoZTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBpZiAoaXNNb2RpZmllZChjYWNoZS5yZXZhbGlkYXRlKCkpKSB7XG4gICAgICB2bS50aHJvdygpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyB0eXBlLCBfZ3VpZCwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZXhwZWN0ZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgZXhwZWN0ZWQgPSBTdHJpbmcoY2FjaGUucGVlaygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgYXJnczogW10sXG4gICAgICBkZXRhaWxzOiB7IGV4cGVjdGVkIH1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImp1bXAtaWYtbm90LW1vZGlmaWVkXCI7XG5cbiAgcHJpdmF0ZSBsYXN0UmV2aXNpb246IFJldmlzaW9uO1xuXG4gIGNvbnN0cnVjdG9yKHRhZzogVGFnLCBwcml2YXRlIHRhcmdldDogTGFiZWxPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gdGFnO1xuICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGFnLnZhbHVlKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IHRhZywgdGFyZ2V0LCBsYXN0UmV2aXNpb24gfSA9IHRoaXM7XG5cbiAgICBpZiAoIXZtLmFsd2F5c1JldmFsaWRhdGUgJiYgdGFnLnZhbGlkYXRlKGxhc3RSZXZpc2lvbikpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH1cblxuICBkaWRNb2RpZnkoKSB7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0aGlzLnRhZy52YWx1ZSgpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMudGFyZ2V0Lmluc3BlY3QoKSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlkTW9kaWZ5T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLW1vZGlmeVwiO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFyZ2V0OiBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBDT05TVEFOVF9UQUc7XG4gIH1cblxuICBldmFsdWF0ZSgpIHtcbiAgICB0aGlzLnRhcmdldC5kaWRNb2RpZnkoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFiZWxPcGNvZGUgaW1wbGVtZW50cyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0YWc6IFRhZyA9IENPTlNUQU5UX1RBRztcbiAgcHVibGljIHR5cGUgPSBcImxhYmVsXCI7XG4gIHB1YmxpYyBsYWJlbDogT3B0aW9uPHN0cmluZz4gPSBudWxsO1xuICBwdWJsaWMgX2d1aWQ6IG51bWJlcjtcblxuICBwcmV2OiBhbnkgPSBudWxsO1xuICBuZXh0OiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcpIHtcbiAgICBpbml0aWFsaXplR3VpZCh0aGlzKTtcbiAgICBpZiAobGFiZWwpIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgfVxuXG4gIGV2YWx1YXRlKCkge31cblxuICBpbnNwZWN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubGFiZWx9IFske3RoaXMuX2d1aWR9XWA7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy5pbnNwZWN0KCkpXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsQUFBTyxBQUFjLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFHM0QsQUFBTyxBQUFhLEFBQWMsQUFBMEIsQUFBTSxBQUFvQixBQUFDOztBQUN2RixBQUFPLEFBQWtCLEFBQWMsQUFBRSxBQUFNLEFBQWUsQUFBQyxBQUMvRCxBQUFPLEFBQUUsQUFBWSxBQUFFLEFBQWMsQUFBaUIsQUFBTyxBQUFFLEFBQVUsQUFBRSxBQUFNLEFBQW9CLEFBQUMsQUFFdEcsQUFBTyxBQUFFLEFBQWMsQUFBWSxBQUFNLEFBQWUsQUFBQzs7QUFNekQsQUFBTyxBQUNMLEFBQWMsQUFDZCxBQUFtQixBQUNuQixBQUFjLEFBQ2QsQUFBZSxBQUNmLEFBQWtCLEFBQ25CLEFBQU0sQUFBa0IsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUxQixBQUFjLHdCQUFDLEFBQUcsSUFBQyxHQUFhLGdDQUFFLEFBQUU7V0FBSSxBQUFFLEdBQUMsQUFBYyxBQUFFLEFBQUMsQUFBQzs7QUFFN0QsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBVyw4QkFBRSxBQUFFO1dBQUksQUFBRSxHQUFDLEFBQVEsQUFBRSxBQUFDLEFBQUM7O0FBRXJELEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQW1CLHNDQUFFLEFBQUU7V0FBSSxBQUFFLEdBQUMsQUFBZ0IsQUFBRSxBQUFDLEFBQUM7O0FBRXJFLEFBQWMsd0JBQUMsQUFBRyxJQUFDLEdBQWtCLHFDQUFFLEFBQUU7V0FBSSxBQUFFLEdBQUMsQUFBZSxBQUFFLEFBQUMsQUFBQzs7QUFFbkUsQUFBYyx3QkFBQyxBQUFHLElBQUMsR0FBWSxpQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQU0sQUFBRSxjQUFiLEFBQUcsQUFDekMsQUFBRTs7T0FBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUFDLEFB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QVEsQUFBSSxBQUFDLEFBR2YsQUFBYztrQ0FBQyxBQUFJLEFBQUMsQUFBQyxBQUNyQixBQUFFLEFBQUM7WUFBQyxBQUFLLEFBQUMsT0FBQyxBQUFJLEtBQUMsQUFBSyxRQUFHLEFBQUssQUFBQyxBQUNoQyxBQUFDOzs7MEJBRUQsQUFBUSwrQkFBSSxBQUFDOzswQkFFYixBQUFPLDZCQUNMLEFBQU0sQUFBQztlQUFHLEFBQUksS0FBQyxBQUFLLGVBQUssQUFBSSxLQUFDLEFBQUssQUFBRyxBQUFDLEFBQ3pDLFFBQUM7OzswQkFFRCxBQUFNLDJCQUNKLEFBQU07O2tCQUNFLEFBQUksS0FBQyxBQUFLLEFBQ2hCLEFBQUk7a0JBQUUsQUFBSSxLQUFDLEFBQUksQUFDZixBQUFJO2tCQUFFLENBQUMsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEtBSHJCLEFBR3NCLEFBQU8sQUFBRSxBQUFDLEFBQUMsQUFDdkMsQUFBQyxBQUNKLEFBQUMsQUFDRjtBQUxLLEFBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21waWxlZER5bmFtaWNUZW1wbGF0ZSB9IGZyb20gJy4uL2Jsb2Nrcyc7XG5pbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgVXBkYXRpbmdWTSwgVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBTeW1ib2xUYWJsZSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBDb25zdFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcHRpb24sIE9wYXF1ZSwgaW5pdGlhbGl6ZUd1aWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IENPTlNUQU5UX1RBRywgUmVmZXJlbmNlQ2FjaGUsIFJldmlzaW9uLCBUYWcsIGlzQ29uc3QsIGlzTW9kaWZpZWQgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5pbXBvcnQge1xuICBCbG9ja1xufSBmcm9tICcuLi8uLi9zY2FubmVyJztcblxuaW1wb3J0IHtcbiAgTlVMTF9SRUZFUkVOQ0UsXG4gIFVOREVGSU5FRF9SRUZFUkVOQ0UsXG4gIFRSVUVfUkVGRVJFTkNFLFxuICBGQUxTRV9SRUZFUkVOQ0UsXG4gIFByaW1pdGl2ZVJlZmVyZW5jZVxufSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNoaWxkU2NvcGUsIHZtID0+IHZtLnB1c2hDaGlsZFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wU2NvcGUsIHZtID0+IHZtLnBvcFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucHVzaER5bmFtaWNTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucG9wRHluYW1pY1Njb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSW1tZWRpYXRlLCAodm0sIHsgb3AxOiBudW1iZXIgfSkgPT4ge1xuICB2bS5zdGFjay5wdXNoKG51bWJlcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbnN0YW50LCAodm0sIHsgb3AxOiBvdGhlciB9KSA9PiB7XG4gIHZtLnN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldE90aGVyKG90aGVyKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlByaW1pdGl2ZVJlZmVyZW5jZSwgKHZtLCB7IG9wMTogcHJpbWl0aXZlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBmbGFnID0gKHByaW1pdGl2ZSAmICgzIDw8IDMwKSkgPj4+IDMwO1xuICBsZXQgdmFsdWUgPSBwcmltaXRpdmUgJiB+KDMgPDwgMzApO1xuXG4gIHN3aXRjaCAoZmxhZykge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhY2sucHVzaChQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodmFsdWUpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgMDogc3RhY2sucHVzaChGQUxTRV9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAxOiBzdGFjay5wdXNoKFRSVUVfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogc3RhY2sucHVzaChOVUxMX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IHN0YWNrLnB1c2goVU5ERUZJTkVEX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHVwLCAodm0sIHsgb3AxOiByZWdpc3Rlciwgb3AyOiBvZmZzZXQgfSkgPT4ge1xuICBsZXQgcG9zaXRpb24gPSB2bS5mZXRjaFZhbHVlPG51bWJlcj4ocmVnaXN0ZXIpIC0gb2Zmc2V0O1xuICB2bS5zdGFjay5kdXAocG9zaXRpb24pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3AsICh2bSwgeyBvcDE6IGNvdW50IH0pID0+IHZtLnN0YWNrLnBvcChjb3VudCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuTG9hZCwgKHZtLCB7IG9wMTogcmVnaXN0ZXIgfSkgPT4gdm0ubG9hZChyZWdpc3RlcikpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRmV0Y2gsICh2bSwgeyBvcDE6IHJlZ2lzdGVyIH0pID0+IHZtLmZldGNoKHJlZ2lzdGVyKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CaW5kRHluYW1pY1Njb3BlLCAodm0sIHsgb3AxOiBfbmFtZXMgfSkgPT4ge1xuICBsZXQgbmFtZXMgPSB2bS5jb25zdGFudHMuZ2V0QXJyYXkoX25hbWVzKTtcbiAgdm0uYmluZER5bmFtaWNTY29wZShuYW1lcyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hGcmFtZSwgdm0gPT4gdm0ucHVzaEZyYW1lKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wRnJhbWUsIHZtID0+IHZtLnBvcEZyYW1lKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXIsICh2bSwgeyBvcDE6IGFyZ3MgfSkgPT4gdm0uZW50ZXIoYXJncykpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRXhpdCwgKHZtKSA9PiB2bS5leGl0KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tcGlsZUR5bmFtaWNCbG9jaywgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGJsb2NrID0gc3RhY2sucG9wPEJsb2NrPigpO1xuICBzdGFjay5wdXNoKGJsb2NrID8gYmxvY2suY29tcGlsZUR5bmFtaWModm0uZW52KSA6IG51bGwpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JbnZva2VTdGF0aWMsICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spO1xuICBsZXQgY29tcGlsZWQgPSBibG9jay5jb21waWxlU3RhdGljKHZtLmVudik7XG4gIHZtLmNhbGwoY29tcGlsZWQuc3RhcnQpO1xufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0ludm9rZXI8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiB7XG4gIGludm9rZSh2bTogVk0sIGJsb2NrOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+KTogdm9pZDtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkludm9rZUR5bmFtaWMsICh2bSwgeyBvcDE6IF9pbnZva2VyIH0pID0+IHtcbiAgbGV0IGludm9rZXIgPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8RHluYW1pY0ludm9rZXI8U3ltYm9sVGFibGU+PihfaW52b2tlcik7XG4gIGxldCBibG9jayA9IHZtLnN0YWNrLnBvcDxPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8U3ltYm9sVGFibGU+Pj4oKTtcbiAgaW52b2tlci5pbnZva2Uodm0sIGJsb2NrKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcCwgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHZtLmdvdG8odGFyZ2V0KSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wSWYsICh2bSwgeyBvcDE6IHRhcmdldCB9KSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAocmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoY2FjaGUucGVlaygpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcFVubGVzcywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG5cbiAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgIGlmICghcmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoIWNhY2hlLnBlZWsoKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cblxuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJldHVybiwgdm0gPT4gdm0ucmV0dXJuKCkpO1xuXG5leHBvcnQgdHlwZSBUZXN0RnVuY3Rpb24gPSAocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgZW52OiBFbnZpcm9ubWVudCkgPT4gUmVmZXJlbmNlPGJvb2xlYW4+O1xuXG5leHBvcnQgY29uc3QgQ29uc3RUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBfZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiBuZXcgQ29uc3RSZWZlcmVuY2UoISFyZWYudmFsdWUoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgU2ltcGxlVGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgX2VudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gcmVmIGFzIFJlZmVyZW5jZTxib29sZWFuPjtcbn07XG5cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudFRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZW52LnRvQ29uZGl0aW9uYWxSZWZlcmVuY2UocmVmKTtcbn07XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5UZXN0LCAodm0sIHsgb3AxOiBfZnVuYyB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgb3BlcmFuZCA9IHN0YWNrLnBvcCgpO1xuICBsZXQgZnVuYyA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbihfZnVuYyk7XG4gIHN0YWNrLnB1c2goZnVuYyhvcGVyYW5kLCB2bS5lbnYpKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgQXNzZXJ0IGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiYXNzZXJ0XCI7XG5cbiAgcHJpdmF0ZSBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8T3BhcXVlPjtcblxuICBjb25zdHJ1Y3RvcihjYWNoZTogUmVmZXJlbmNlQ2FjaGU8T3BhcXVlPikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjYWNoZS50YWc7XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBjYWNoZSB9ID0gdGhpcztcblxuICAgIGlmIChpc01vZGlmaWVkKGNhY2hlLnJldmFsaWRhdGUoKSkpIHtcbiAgICAgIHZtLnRocm93KCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IHR5cGUsIF9ndWlkLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCBleHBlY3RlZDtcblxuICAgIHRyeSB7XG4gICAgICBleHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNhY2hlLnBlZWsoKSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBleHBlY3RlZCA9IFN0cmluZyhjYWNoZS5wZWVrKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiBfZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBhcmdzOiBbXSxcbiAgICAgIGRldGFpbHM6IHsgZXhwZWN0ZWQgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwianVtcC1pZi1ub3QtbW9kaWZpZWRcIjtcblxuICBwcml2YXRlIGxhc3RSZXZpc2lvbjogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IodGFnOiBUYWcsIHByaXZhdGUgdGFyZ2V0OiBMYWJlbE9wY29kZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSB0YWc7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0YWcudmFsdWUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgdGFnLCB0YXJnZXQsIGxhc3RSZXZpc2lvbiB9ID0gdGhpcztcblxuICAgIGlmICghdm0uYWx3YXlzUmV2YWxpZGF0ZSAmJiB0YWcudmFsaWRhdGUobGFzdFJldmlzaW9uKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGRpZE1vZGlmeSgpIHtcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IHRoaXMudGFnLnZhbHVlKCk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy50YXJnZXQuaW5zcGVjdCgpKV1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaWRNb2RpZnlPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJkaWQtbW9kaWZ5XCI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YXJnZXQ6IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IENPTlNUQU5UX1RBRztcbiAgfVxuXG4gIGV2YWx1YXRlKCkge1xuICAgIHRoaXMudGFyZ2V0LmRpZE1vZGlmeSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYWJlbE9wY29kZSBpbXBsZW1lbnRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHRhZzogVGFnID0gQ09OU1RBTlRfVEFHO1xuICBwdWJsaWMgdHlwZSA9IFwibGFiZWxcIjtcbiAgcHVibGljIGxhYmVsOiBPcHRpb248c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBfZ3VpZDogbnVtYmVyO1xuXG4gIHByZXY6IGFueSA9IG51bGw7XG4gIG5leHQ6IGFueSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IobGFiZWw6IHN0cmluZykge1xuICAgIGluaXRpYWxpemVHdWlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICB9XG5cbiAgZXZhbHVhdGUoKSB7fVxuXG4gIGluc3BlY3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH0gWyR7dGhpcy5fZ3VpZH1dYDtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLmluc3BlY3QoKSldXG4gICAgfTtcbiAgfVxufVxuIl19

@@ -128,10 +128,10 @@ "use strict";

b.startLabels();
// let state = b.local();
// b.setLocal(state);
if (dynamicTag) {
b.fetch(_opcodes.Register.s1);
(0, _functions.expr)(dynamicTag, b);
b.dup();
b.load(_opcodes.Register.s1);
b.test('simple');
b.jumpUnless('BODY');
b.dup();
b.fetch(_opcodes.Register.s1);
b.pushComponentOperations();

@@ -144,3 +144,3 @@ b.openDynamicElement();

if (dynamicTag || staticTag) {
// b.didCreateElement(state);
b.didCreateElement(_opcodes.Register.s0);
var attrs = this.attrs['buffer'];

@@ -155,9 +155,6 @@ for (var i = 0; i < attrs.length; i++) {

if (dynamicTag) {
b.dup();
b.fetch(_opcodes.Register.s1);
b.test('simple');
b.jumpUnless('ELSE');
b.jumpUnless('END');
b.closeElement();
b.jump('END');
b.label('ELSE');
b.pop();
} else if (staticTag) {

@@ -167,3 +164,6 @@ b.closeElement();

b.label('END');
// b.didRenderLayout(state);
b.didRenderLayout(_opcodes.Register.s0);
if (dynamicTag) {
b.load(_opcodes.Register.s1);
}
b.stopLabels();

@@ -282,30 +282,32 @@ var start = b.start;

ComponentBuilder.prototype.dynamic = function dynamic(definitionArgs, getDefinition, args) {
var _this = this;
var params = args[0],
hash = args[1],
block = args[2],
inverse = args[3];
var builder = this.builder;
this.builder.unit(function (b) {
var params = args[0],
hash = args[1],
block = args[2],
inverse = args[3];
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
var meta = _this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
b.compileArgs(definitionArgs[0], definitionArgs[1], true);
b.helper(helper);
b.dup();
b.test('simple');
b.closure(2, function (b) {
b.jumpUnless('ELSE');
b.pushDynamicComponentManager();
b.invokeComponent(null, params, hash, block, inverse);
b.jump('END');
b.label('ELSE');
b.pop();
});
});
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
var meta = this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
builder.compileArgs(definitionArgs[0], definitionArgs[1], true);
builder.helper(helper);
builder.dup();
builder.test('simple');
builder.enter(2);
builder.jumpUnless('ELSE');
builder.pushDynamicComponentManager();
builder.invokeComponent(null, params, hash, block, inverse);
builder.label('ELSE');
builder.exit();
builder.return();
builder.label('END');
builder.popFrame();
builder.stopLabels();
};

@@ -318,2 +320,2 @@

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxBQUFPLEFBQTBCLEFBQXVCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUVwRixBQUFPLEFBQUUsQUFBRyxBQUFnQixBQUFNLEFBQXNCLEFBQUM7O0FBR3pELEFBQU8sQUFBRSxBQUFVLEFBQUUsQUFBTSxBQUFXLEFBQUM7O0FBRXZDLEFBQU8sQUFBRSxBQUFXLEFBQUUsQUFBVSxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFXLEFBQUM7O0FBUXRFLEFBQU8sQUFBRSxBQUFJLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUUxQyxBQUFPLEFBQWdCLEFBQU0sQUFBNEIsQUFBQyxBQWMxRCxBQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VCQUF3QixBQUE0QixZQUFFLEFBQWdCLEtBQzFFO1FBQUksQUFBTyxVQUFHLElBQUksQUFBc0IsdUJBQUMsQUFBRyxBQUFDLEFBQUMsQUFFOUMsQUFBVTtlQUFDLEFBQU8sUUFBQyxBQUFPLEFBQUMsQUFBQyxBQUU1QixBQUFNO1dBQUMsQUFBTyxRQUFDLEFBQU8sQUFBRSxBQUFDLEFBQzNCLEFBQUMsQUFRRDs7O3lDQUdFO29DQUFtQixBQUFnQjs4QkFBaEI7O2FBQUcsTUFBSCxBQUFHLEFBQWEsQUFBRyxBQUFDOzs7cUNBRXZDLEFBQVUsaUNBQUMsQUFBOEIsUUFDdkMsQUFBSTthQUFDLEFBQUssUUFBRyxJQUFJLEFBQWMsZUFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQU0sQUFBQyxBQUFDLEFBQ3BELEFBQUM7OztxQ0FFRCxBQUFVLGlDQUFDLEFBQThCLFFBQ3ZDLEFBQUk7YUFBQyxBQUFLLFFBQUcsSUFBSSxBQUFnQixpQkFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQU0sQUFBQyxBQUFDLEFBQ3RELEFBQUM7OztxQ0FFRCxBQUFPLDZCQUNMLEFBQU07ZUFBQyxB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VSxXQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ3JCLEFBQUM7a0JBQUMsQUFBMkIsQUFBRSxBQUFDLEFBQ2hDLEFBQUM7a0JBQUMsQUFBZSxnQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQUksTUFBRSxBQUFLLE9BQUUsQUFBTyxBQUFDLEFBQUMsQUFDdEQsQUFBQztrQkFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDZCxBQUFDO2tCQUFDLEFBQUssTUFBQyxBQUFNLEFBQUMsQUFBQyxBQUNoQixBQUFDO2tCQUFDLEFBQUcsQUFBRSxBQUFDLEFBQ1YsQUFBQyxBQUFDLEFBQUMsQUFDTDtBQUFDLEFBQUMsQUFBQyxBQUNMO0FBQUMsQUFDRjs7OztBQUVELEFBQU07aUJBQWtCLEFBQWdCLEtBQUUsQUFBcUIsTUFDN0QsQUFBTTtXQUFDLEFBQUksQUFBZ0Isc0JBQUMsQUFBRyxLQUFFLEFBQUksQUFBQyxBQUFDLEFBQ3pDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIENvbXBpbGF0aW9uTWV0YSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljUHJvZ3JhbSwgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBNYXliZSwgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBPcHMsIFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlJztcbmltcG9ydCB7IGRlYnVnU2xpY2UgfSBmcm9tICcuL29wY29kZXMnO1xuXG5pbXBvcnQgeyBBVFRSU19CTE9DSywgQ2xpZW50U2lkZSwgY29tcGlsZVN0YXRlbWVudCB9IGZyb20gJy4vc2Nhbm5lcic7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudEFyZ3MsXG4gIENvbXBvbmVudEJ1aWxkZXIgYXMgSUNvbXBvbmVudEJ1aWxkZXIsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uXG59IGZyb20gJy4vb3Bjb2RlLWJ1aWxkZXInO1xuXG5pbXBvcnQgeyBleHByIH0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0vYXBwZW5kJztcbmltcG9ydCB7IElBcmd1bWVudHMgfSBmcm9tICcuL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb21waWxlZC9vcGNvZGVzL2V4cHJlc3Npb25zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsYWJsZUxheW91dCB7XG4gIGNvbXBpbGUoYnVpbGRlcjogQ29tcG9uZW50LkNvbXBvbmVudExheW91dEJ1aWxkZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUxheW91dChjb21waWxhYmxlOiBDb21waWxhYmxlTGF5b3V0LCBlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gIGxldCBidWlsZGVyID0gbmV3IENvbXBvbmVudExheW91dEJ1aWxkZXIoZW52KTtcblxuICBjb21waWxhYmxlLmNvbXBpbGUoYnVpbGRlcik7XG5cbiAgcmV0dXJuIGJ1aWxkZXIuY29tcGlsZSgpO1xufVxuXG5pbnRlcmZhY2UgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgdGFnOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlcjtcbiAgYXR0cnM6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXI7XG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbTtcbn1cblxuY2xhc3MgQ29tcG9uZW50TGF5b3V0QnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBpbm5lcjogSW5uZXJMYXlvdXRCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50KSB7fVxuXG4gIHdyYXBMYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBXcmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGZyb21MYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBVbndyYXBwZWRCdWlsZGVyKHRoaXMuZW52LCBsYXlvdXQpO1xuICB9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5jb21waWxlKCk7XG4gIH1cblxuICBnZXQgdGFnKCk6IENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci50YWc7XG4gIH1cblxuICBnZXQgYXR0cnMoKTogQ29tcG9uZW50LkNvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuYXR0cnM7XG4gIH1cbn1cblxuY2xhc3MgV3JhcHBlZEJ1aWxkZXIgaW1wbGVtZW50cyBJbm5lckxheW91dEJ1aWxkZXIge1xuICBwdWJsaWMgdGFnID0gbmV3IENvbXBvbmVudFRhZ0J1aWxkZXIoKTtcbiAgcHVibGljIGF0dHJzID0gbmV3IENvbXBvbmVudEF0dHJzQnVpbGRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50LCBwcml2YXRlIGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge31cblxuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICAgIC8vPT09PT09PT1EWU5BTUlDXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhCT0RZKVxuICAgIC8vICAgICAgICBPcGVuRHluYW1pY1ByaW1pdGl2ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgRGlkQ3JlYXRlRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5hdHRyIHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgRmx1c2hFbGVtZW50XG4gICAgLy8gQk9EWTogIE5vb3BcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhFTkQpXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vIEVORDogICBOb29wXG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG4gICAgLy9cbiAgICAvLz09PT09PT09U1RBVElDXG4gICAgLy8gICAgICAgIE9wZW5QcmltaXRpdmVFbGVtZW50T3Bjb2RlXG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5ib2R5IHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgQ2xvc2VFbGVtZW50XG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG5cbiAgICBsZXQgeyBlbnYsIGxheW91dCB9ID0gdGhpcztcbiAgICBsZXQgbWV0YSA9IHsgdGVtcGxhdGVNZXRhOiBsYXlvdXQubWV0YSwgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMsIGFzUGFydGlhbDogZmFsc2UgfTtcblxuICAgIGxldCBkeW5hbWljVGFnID0gdGhpcy50YWcuZ2V0RHluYW1pYygpO1xuICAgIGxldCBzdGF0aWNUYWcgPSB0aGlzLnRhZy5nZXRTdGF0aWMoKTtcblxuICAgIGxldCBiID0gYnVpbGRlcihlbnYsIG1ldGEpO1xuICAgIGIuc3RhcnRMYWJlbHMoKTtcblxuICAgIC8vIGxldCBzdGF0ZSA9IGIubG9jYWwoKTtcbiAgICAvLyBiLnNldExvY2FsKHN0YXRlKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBleHByKGR5bmFtaWNUYWcsIGIpO1xuXG4gICAgICBiLmR1cCgpO1xuICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcblxuICAgICAgYi5qdW1wVW5sZXNzKCdCT0RZJyk7XG5cbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5EeW5hbWljRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGljVGFnKSB7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnMoc3RhdGljVGFnKTtcbiAgICB9XG5cbiAgICBpZiAoZHluYW1pY1RhZyB8fCBzdGF0aWNUYWcpIHtcbiAgICAgIC8vIGIuZGlkQ3JlYXRlRWxlbWVudChzdGF0ZSk7XG5cbiAgICAgIGxldCBhdHRycyA9IHRoaXMuYXR0cnNbJ2J1ZmZlciddO1xuXG4gICAgICBmb3IgKGxldCBpPTA7IGk8YXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcGlsZVN0YXRlbWVudChhdHRyc1tpXSwgYik7XG4gICAgICB9XG5cbiAgICAgIGIuZmx1c2hFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnQk9EWScpO1xuICAgIGIuaW52b2tlU3RhdGljKGxheW91dC5hc0Jsb2NrKCkpO1xuXG4gICAgaWYgKGR5bmFtaWNUYWcpIHtcbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgYi5qdW1wVW5sZXNzKCdFTFNFJyk7XG4gICAgICBiLmNsb3NlRWxlbWVudCgpO1xuICAgICAgYi5qdW1wKCdFTkQnKTtcbiAgICAgIGIubGFiZWwoJ0VMU0UnKTtcbiAgICAgIGIucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzdGF0aWNUYWcpIHtcbiAgICAgIGIuY2xvc2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnRU5EJyk7XG5cbiAgICAvLyBiLmRpZFJlbmRlckxheW91dChzdGF0ZSk7XG5cbiAgICBiLnN0b3BMYWJlbHMoKTtcblxuICAgIGxldCBzdGFydCA9IGIuc3RhcnQ7XG4gICAgbGV0IGVuZCA9IGIuZmluYWxpemUoKTtcblxuICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhcnQsIGVuZCwge1xuICAgICAgbWV0YSxcbiAgICAgIGhhc0V2YWw6IGxheW91dC5oYXNFdmFsLFxuICAgICAgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMuY29uY2F0KFtBVFRSU19CTE9DS10pXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgVW53cmFwcGVkQnVpbGRlciBpbXBsZW1lbnRzIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCVUc6IENhbm5vdCBjYWxsIGB0YWdgIG9uIGFuIFVud3JhcHBlZEJ1aWxkZXInKTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgcmV0dXJuIGxheW91dC5hc0xheW91dCh0aGlzLmF0dHJzWydidWZmZXInXSkuY29tcGlsZUR5bmFtaWMoZW52KTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRUYWdCdWlsZGVyIGltcGxlbWVudHMgQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICBwdWJsaWMgaXNEeW5hbWljOiBPcHRpb248Ym9vbGVhbj4gPSBudWxsO1xuICBwdWJsaWMgaXNTdGF0aWM6IE9wdGlvbjxib29sZWFuPiA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWNUYWdOYW1lOiBPcHRpb248c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBkeW5hbWljVGFnTmFtZTogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbj4gPSBudWxsO1xuXG4gIGdldER5bmFtaWMoKTogTWF5YmU8V2lyZUZvcm1hdC5FeHByZXNzaW9uPiB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljVGFnTmFtZTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0aWMoKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0aWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRpY1RhZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljKHRhZ05hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNTdGF0aWMgPSB0cnVlO1xuICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IHRhZ05hbWU7XG4gIH1cblxuICBkeW5hbWljKHRhZ05hbWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gICAgdGhpcy5pc0R5bmFtaWMgPSB0cnVlO1xuICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBbT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uLCBDbGllbnRTaWRlLk9wcy5GdW5jdGlvbkV4cHJlc3Npb24sIHRhZ05hbWVdO1xuICB9XG59XG5cbmNsYXNzIENvbXBvbmVudEF0dHJzQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG5cbiAgc3RhdGljKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbnVsbF0pO1xuICB9XG5cbiAgZHluYW1pYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgW09wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiwgQ2xpZW50U2lkZS5PcHMuRnVuY3Rpb25FeHByZXNzaW9uLCB2YWx1ZV0sIG51bGxdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QnVpbGRlciBpbXBsZW1lbnRzIElDb21wb25lbnRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBlbnY6IEVudmlyb25tZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVpbGRlcjogT3Bjb2RlQnVpbGRlckRTTCkge1xuICAgIHRoaXMuZW52ID0gYnVpbGRlci5lbnY7XG4gIH1cblxuICBzdGF0aWMoZGVmaW5pdGlvbjogQ29tcG9uZW50LkNvbXBvbmVudERlZmluaXRpb248T3BhcXVlPiwgYXJnczogQ29tcG9uZW50QXJncykge1xuICAgIGxldCBbcGFyYW1zLCBoYXNoLCBfZGVmYXVsdCwgaW52ZXJzZV0gPSBhcmdzO1xuICAgIGxldCB7IGJ1aWxkZXIgfSA9IHRoaXM7XG5cbiAgICBidWlsZGVyLnB1c2hDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb24pO1xuICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2UpO1xuICB9XG5cbiAgZHluYW1pYyhkZWZpbml0aW9uQXJnczogQ29tcG9uZW50QXJncywgZ2V0RGVmaW5pdGlvbjogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIGFyZ3M6IENvbXBvbmVudEFyZ3MpIHtcbiAgICB0aGlzLmJ1aWxkZXIudW5pdChiID0+IHtcbiAgICAgIGxldCBbcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZV0gPSBhcmdzO1xuXG4gICAgICBpZiAoIWRlZmluaXRpb25BcmdzIHx8IGRlZmluaXRpb25BcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEeW5hbWljIHN5bnRheCB3aXRob3V0IGFuIGFyZ3VtZW50XCIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWV0YSA9IHRoaXMuYnVpbGRlci5tZXRhLnRlbXBsYXRlTWV0YTtcblxuICAgICAgZnVuY3Rpb24gaGVscGVyKHZtOiBQdWJsaWNWTSwgYXJnczogSUFyZ3VtZW50cykge1xuICAgICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbih2bSwgYXJncywgbWV0YSk7XG4gICAgICB9XG5cbiAgICAgIGIuY29tcGlsZUFyZ3MoZGVmaW5pdGlvbkFyZ3NbMF0sIGRlZmluaXRpb25BcmdzWzFdLCB0cnVlKTtcbiAgICAgIGIuaGVscGVyKGhlbHBlcik7XG5cbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuXG4gICAgICBiLmNsb3N1cmUoMiwgYiA9PiB7XG4gICAgICAgIGIuanVtcFVubGVzcygnRUxTRScpO1xuICAgICAgICBiLnB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlcigpO1xuICAgICAgICBiLmludm9rZUNvbXBvbmVudChudWxsLCBwYXJhbXMsIGhhc2gsIGJsb2NrLCBpbnZlcnNlKTtcbiAgICAgICAgYi5qdW1wKCdFTkQnKTtcbiAgICAgICAgYi5sYWJlbCgnRUxTRScpO1xuICAgICAgICBiLnBvcCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkZXIoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhKSB7XG4gIHJldHVybiBuZXcgT3Bjb2RlQnVpbGRlckRTTChlbnYsIG1ldGEpO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxBQUFPLEFBQTBCLEFBQXVCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUVwRixBQUFPLEFBQUUsQUFBRyxBQUFnQixBQUFNLEFBQXNCLEFBQUM7O0FBR3pELEFBQU8sQUFBRSxBQUFRLEFBQUUsQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUVqRCxBQUFPLEFBQUUsQUFBVyxBQUFFLEFBQVUsQUFBRSxBQUFnQixBQUFFLEFBQU0sQUFBVyxBQUFDOztBQVF0RSxBQUFPLEFBQUUsQUFBSSxBQUFFLEFBQU0sQUFBb0IsQUFBQzs7QUFFMUMsQUFBTyxBQUFnQixBQUFNLEFBQTRCLEFBQUMsQUFjMUQsQUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1QkFBd0IsQUFBNEIsWUFBRSxBQUFnQixLQUMxRTtRQUFJLEFBQU8sVUFBRyxJQUFJLEFBQXNCLHVCQUFDLEFBQUcsQUFBQyxBQUFDLEFBRTlDLEFBQVU7ZUFBQyxBQUFPLFFBQUMsQUFBTyxBQUFDLEFBQUMsQUFFNUIsQUFBTTtXQUFDLEFBQU8sUUFBQyxBQUFPLEFBQUUsQUFBQyxBQUMzQixBQUFDLEFBUUQ7Ozt5Q0FHRTtvQ0FBbUIsQUFBZ0I7OEJBQWhCOzthQUFHLE1BQUgsQUFBRyxBQUFhLEFBQUcsQUFBQzs7O3FDQUV2QyxBQUFVLGlDQUFDLEFBQThCLFFBQ3ZDLEFBQUk7YUFBQyxBQUFLLFFBQUcsSUFBSSxBQUFjLGVBQUMsQUFBSSxLQUFDLEFBQUcsS0FBRSxBQUFNLEFBQUMsQUFBQyxBQUNwRCxBQUFDOzs7cUNBRUQsQUFBVSxpQ0FBQyxBQUE4QixRQUN2QyxBQUFJO2FBQUMsQUFBSyxRQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxLQUFDLEFBQUcsS0FBRSxBQUFNLEFBQUMsQUFBQyxBQUN0RCxBQUFDOzs7cUNBRUQsQUFBTyw2QkFDTCxB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LEFBRXBCLEFBQU87Z0JBQUMsQUFBUSxTQUFDLEFBQUssQUFBQyxBQUFDLEFBRXhCLEFBQU87Z0JBQUMsQUFBVyxZQUFDLEFBQWMsZUFBQyxBQUFDLEFBQUMsSUFBRSxBQUFjLGVBQUMsQUFBQyxBQUFDLElBQUUsQUFBSSxBQUFDLEFBQUMsQUFDaEUsQUFBTztnQkFBQyxBQUFNLE9BQUMsQUFBTSxBQUFDLEFBQUMsQUFFdkIsQUFBTztnQkFBQyxBQUFHLEFBQUUsQUFBQyxBQUNkLEFBQU87Z0JBQUMsQUFBSSxLQUFDLEFBQVEsQUFBQyxBQUFDLEFBRXZCLEFBQU87Z0JBQUMsQUFBSyxNQUFDLEFBQUMsQUFBQyxBQUFDLEFBRWpCLEFBQU87Z0JBQUMsQUFBVSxXQUFDLEFBQU0sQUFBQyxBQUFDLEFBRTNCLEFBQU87Z0JBQUMsQUFBMkIsQUFBRSxBQUFDLEFBQ3RDLEFBQU87Z0JBQUMsQUFBZSxnQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQUksTUFBRSxBQUFLLE9BQUUsQUFBTyxBQUFDLEFBQUMsQUFFNUQsQUFBTztnQkFBQyxBQUFLLE1BQUMsQUFBTSxBQUFDLEFBQUMsQUFDdEIsQUFBTztnQkFBQyxBQUFJLEFBQUUsQUFBQyxBQUNmLEFBQU87Z0JBQUMsQUFBTSxBQUFFLEFBQUMsQUFFakIsQUFBTztnQkFBQyxBQUFLLE1BQUMsQUFBSyxBQUFDLEFBQUMsQUFDckIsQUFBTztnQkFBQyxBQUFRLEFBQUUsQUFBQyxBQUVuQixBQUFPO2dCQUFDLEFBQVUsQUFBRSxBQUFDLEFBQ3ZCLEFBQUMsQUFDRjs7OztBQUVELEFBQU07aUJBQWtCLEFBQWdCLEtBQUUsQUFBcUIsTUFDN0QsQUFBTTtXQUFDLEFBQUksQUFBZ0Isc0JBQUMsQUFBRyxLQUFFLEFBQUksQUFBQyxBQUFDLEFBQ3pDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIENvbXBpbGF0aW9uTWV0YSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljUHJvZ3JhbSwgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBNYXliZSwgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBPcHMsIFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlJztcbmltcG9ydCB7IFJlZ2lzdGVyLCBkZWJ1Z1NsaWNlIH0gZnJvbSAnLi9vcGNvZGVzJztcblxuaW1wb3J0IHsgQVRUUlNfQkxPQ0ssIENsaWVudFNpZGUsIGNvbXBpbGVTdGF0ZW1lbnQgfSBmcm9tICcuL3NjYW5uZXInO1xuXG5pbXBvcnQge1xuICBDb21wb25lbnRBcmdzLFxuICBDb21wb25lbnRCdWlsZGVyIGFzIElDb21wb25lbnRCdWlsZGVyLFxuICBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL29wY29kZS1idWlsZGVyJztcblxuaW1wb3J0IHsgZXhwciB9IGZyb20gJy4vc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmltcG9ydCBPcGNvZGVCdWlsZGVyRFNMIGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuaW1wb3J0ICogYXMgQ29tcG9uZW50IGZyb20gJy4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tICcuL3ZtL2FwcGVuZCc7XG5pbXBvcnQgeyBJQXJndW1lbnRzIH0gZnJvbSAnLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4vY29tcGlsZWQvb3Bjb2Rlcy9leHByZXNzaW9uc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGFibGVMYXlvdXQge1xuICBjb21waWxlKGJ1aWxkZXI6IENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVMYXlvdXQoY29tcGlsYWJsZTogQ29tcGlsYWJsZUxheW91dCwgZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICBsZXQgYnVpbGRlciA9IG5ldyBDb21wb25lbnRMYXlvdXRCdWlsZGVyKGVudik7XG5cbiAgY29tcGlsYWJsZS5jb21waWxlKGJ1aWxkZXIpO1xuXG4gIHJldHVybiBidWlsZGVyLmNvbXBpbGUoKTtcbn1cblxuaW50ZXJmYWNlIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHRhZzogQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXI7XG4gIGF0dHJzOiBDb21wb25lbnQuQ29tcG9uZW50QXR0cnNCdWlsZGVyO1xuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW07XG59XG5cbmNsYXNzIENvbXBvbmVudExheW91dEJ1aWxkZXIgaW1wbGVtZW50cyBDb21wb25lbnQuQ29tcG9uZW50TGF5b3V0QnVpbGRlciB7XG4gIHByaXZhdGUgaW5uZXI6IElubmVyTGF5b3V0QnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCkge31cblxuICB3cmFwTGF5b3V0KGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgV3JhcHBlZEJ1aWxkZXIodGhpcy5lbnYsIGxheW91dCk7XG4gIH1cblxuICBmcm9tTGF5b3V0KGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge1xuICAgIHRoaXMuaW5uZXIgPSBuZXcgVW53cmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuY29tcGlsZSgpO1xuICB9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIudGFnO1xuICB9XG5cbiAgZ2V0IGF0dHJzKCk6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmlubmVyLmF0dHJzO1xuICB9XG59XG5cbmNsYXNzIFdyYXBwZWRCdWlsZGVyIGltcGxlbWVudHMgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgcHVibGljIHRhZyA9IG5ldyBDb21wb25lbnRUYWdCdWlsZGVyKCk7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICAvLz09PT09PT09RFlOQU1JQ1xuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoQk9EWSlcbiAgICAvLyAgICAgICAgT3BlbkR5bmFtaWNQcmltaXRpdmVFbGVtZW50XG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vIEJPRFk6ICBOb29wXG4gICAgLy8gICAgICAgIC4uLmJvZHkgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBQdXRWYWx1ZShUYWdFeHByKVxuICAgIC8vICAgICAgICBUZXN0XG4gICAgLy8gICAgICAgIEp1bXBVbmxlc3MoRU5EKVxuICAgIC8vICAgICAgICBDbG9zZUVsZW1lbnRcbiAgICAvLyBFTkQ6ICAgTm9vcFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy89PT09PT09PVNUQVRJQ1xuICAgIC8vICAgICAgICBPcGVuUHJpbWl0aXZlRWxlbWVudE9wY29kZVxuICAgIC8vICAgICAgICBEaWRDcmVhdGVFbGVtZW50XG4gICAgLy8gICAgICAgIC4uLmF0dHIgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBGbHVzaEVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vICAgICAgICBEaWRSZW5kZXJMYXlvdXRcbiAgICAvLyAgICAgICAgRXhpdFxuXG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgbGV0IG1ldGEgPSB7IHRlbXBsYXRlTWV0YTogbGF5b3V0Lm1ldGEsIHN5bWJvbHM6IGxheW91dC5zeW1ib2xzLCBhc1BhcnRpYWw6IGZhbHNlIH07XG5cbiAgICBsZXQgZHluYW1pY1RhZyA9IHRoaXMudGFnLmdldER5bmFtaWMoKTtcbiAgICBsZXQgc3RhdGljVGFnID0gdGhpcy50YWcuZ2V0U3RhdGljKCk7XG5cbiAgICBsZXQgYiA9IGJ1aWxkZXIoZW52LCBtZXRhKTtcblxuICAgIGIuc3RhcnRMYWJlbHMoKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBiLmZldGNoKFJlZ2lzdGVyLnMxKTtcblxuICAgICAgZXhwcihkeW5hbWljVGFnLCBiKTtcblxuICAgICAgYi5kdXAoKTtcbiAgICAgIGIubG9hZChSZWdpc3Rlci5zMSk7XG5cbiAgICAgIGIudGVzdCgnc2ltcGxlJyk7XG5cbiAgICAgIGIuanVtcFVubGVzcygnQk9EWScpO1xuXG4gICAgICBiLmZldGNoKFJlZ2lzdGVyLnMxKTtcbiAgICAgIGIucHVzaENvbXBvbmVudE9wZXJhdGlvbnMoKTtcbiAgICAgIGIub3BlbkR5bmFtaWNFbGVtZW50KCk7XG4gICAgfSBlbHNlIGlmIChzdGF0aWNUYWcpIHtcbiAgICAgIGIucHVzaENvbXBvbmVudE9wZXJhdGlvbnMoKTtcbiAgICAgIGIub3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucyhzdGF0aWNUYWcpO1xuICAgIH1cblxuICAgIGlmIChkeW5hbWljVGFnIHx8IHN0YXRpY1RhZykge1xuICAgICAgYi5kaWRDcmVhdGVFbGVtZW50KFJlZ2lzdGVyLnMwKTtcblxuICAgICAgbGV0IGF0dHJzID0gdGhpcy5hdHRyc1snYnVmZmVyJ107XG5cbiAgICAgIGZvciAobGV0IGk9MDsgaTxhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb21waWxlU3RhdGVtZW50KGF0dHJzW2ldLCBiKTtcbiAgICAgIH1cblxuICAgICAgYi5mbHVzaEVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBiLmxhYmVsKCdCT0RZJyk7XG4gICAgYi5pbnZva2VTdGF0aWMobGF5b3V0LmFzQmxvY2soKSk7XG5cbiAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgYi5mZXRjaChSZWdpc3Rlci5zMSk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgYi5qdW1wVW5sZXNzKCdFTkQnKTtcbiAgICAgIGIuY2xvc2VFbGVtZW50KCk7XG4gICAgfSBlbHNlIGlmIChzdGF0aWNUYWcpIHtcbiAgICAgIGIuY2xvc2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnRU5EJyk7XG5cbiAgICBiLmRpZFJlbmRlckxheW91dChSZWdpc3Rlci5zMCk7XG5cbiAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgYi5sb2FkKFJlZ2lzdGVyLnMxKTtcbiAgICB9XG5cbiAgICBiLnN0b3BMYWJlbHMoKTtcblxuICAgIGxldCBzdGFydCA9IGIuc3RhcnQ7XG4gICAgbGV0IGVuZCA9IGIuZmluYWxpemUoKTtcblxuICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhcnQsIGVuZCwge1xuICAgICAgbWV0YSxcbiAgICAgIGhhc0V2YWw6IGxheW91dC5oYXNFdmFsLFxuICAgICAgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMuY29uY2F0KFtBVFRSU19CTE9DS10pXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgVW53cmFwcGVkQnVpbGRlciBpbXBsZW1lbnRzIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCVUc6IENhbm5vdCBjYWxsIGB0YWdgIG9uIGFuIFVud3JhcHBlZEJ1aWxkZXInKTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgcmV0dXJuIGxheW91dC5hc0xheW91dCh0aGlzLmF0dHJzWydidWZmZXInXSkuY29tcGlsZUR5bmFtaWMoZW52KTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRUYWdCdWlsZGVyIGltcGxlbWVudHMgQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICBwdWJsaWMgaXNEeW5hbWljOiBPcHRpb248Ym9vbGVhbj4gPSBudWxsO1xuICBwdWJsaWMgaXNTdGF0aWM6IE9wdGlvbjxib29sZWFuPiA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWNUYWdOYW1lOiBPcHRpb248c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBkeW5hbWljVGFnTmFtZTogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbj4gPSBudWxsO1xuXG4gIGdldER5bmFtaWMoKTogTWF5YmU8V2lyZUZvcm1hdC5FeHByZXNzaW9uPiB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljVGFnTmFtZTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0aWMoKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0aWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRpY1RhZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljKHRhZ05hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNTdGF0aWMgPSB0cnVlO1xuICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IHRhZ05hbWU7XG4gIH1cblxuICBkeW5hbWljKHRhZ05hbWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gICAgdGhpcy5pc0R5bmFtaWMgPSB0cnVlO1xuICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBbT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uLCBDbGllbnRTaWRlLk9wcy5GdW5jdGlvbkV4cHJlc3Npb24sIHRhZ05hbWVdO1xuICB9XG59XG5cbmNsYXNzIENvbXBvbmVudEF0dHJzQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG5cbiAgc3RhdGljKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbnVsbF0pO1xuICB9XG5cbiAgZHluYW1pYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgW09wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiwgQ2xpZW50U2lkZS5PcHMuRnVuY3Rpb25FeHByZXNzaW9uLCB2YWx1ZV0sIG51bGxdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QnVpbGRlciBpbXBsZW1lbnRzIElDb21wb25lbnRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBlbnY6IEVudmlyb25tZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVpbGRlcjogT3Bjb2RlQnVpbGRlckRTTCkge1xuICAgIHRoaXMuZW52ID0gYnVpbGRlci5lbnY7XG4gIH1cblxuICBzdGF0aWMoZGVmaW5pdGlvbjogQ29tcG9uZW50LkNvbXBvbmVudERlZmluaXRpb248T3BhcXVlPiwgYXJnczogQ29tcG9uZW50QXJncykge1xuICAgIGxldCBbcGFyYW1zLCBoYXNoLCBfZGVmYXVsdCwgaW52ZXJzZV0gPSBhcmdzO1xuICAgIGxldCB7IGJ1aWxkZXIgfSA9IHRoaXM7XG5cbiAgICBidWlsZGVyLnB1c2hDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb24pO1xuICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2UpO1xuICB9XG5cbiAgZHluYW1pYyhkZWZpbml0aW9uQXJnczogQ29tcG9uZW50QXJncywgZ2V0RGVmaW5pdGlvbjogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIGFyZ3M6IENvbXBvbmVudEFyZ3MpIHtcbiAgICBsZXQgW3BhcmFtcywgaGFzaCwgYmxvY2ssIGludmVyc2VdID0gYXJncztcbiAgICBsZXQgeyBidWlsZGVyIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uQXJncyB8fCBkZWZpbml0aW9uQXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkR5bmFtaWMgc3ludGF4IHdpdGhvdXQgYW4gYXJndW1lbnRcIik7XG4gICAgfVxuXG4gICAgbGV0IG1ldGEgPSB0aGlzLmJ1aWxkZXIubWV0YS50ZW1wbGF0ZU1ldGE7XG5cbiAgICBmdW5jdGlvbiBoZWxwZXIodm06IFB1YmxpY1ZNLCBhcmdzOiBJQXJndW1lbnRzKSB7XG4gICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbih2bSwgYXJncywgbWV0YSk7XG4gICAgfVxuXG4gICAgYnVpbGRlci5zdGFydExhYmVscygpO1xuXG4gICAgYnVpbGRlci5wdXNoRnJhbWUoKTtcblxuICAgIGJ1aWxkZXIucmV0dXJuVG8oJ0VORCcpO1xuXG4gICAgYnVpbGRlci5jb21waWxlQXJncyhkZWZpbml0aW9uQXJnc1swXSwgZGVmaW5pdGlvbkFyZ3NbMV0sIHRydWUpO1xuICAgIGJ1aWxkZXIuaGVscGVyKGhlbHBlcik7XG5cbiAgICBidWlsZGVyLmR1cCgpO1xuICAgIGJ1aWxkZXIudGVzdCgnc2ltcGxlJyk7XG5cbiAgICBidWlsZGVyLmVudGVyKDIpO1xuXG4gICAgYnVpbGRlci5qdW1wVW5sZXNzKCdFTFNFJyk7XG5cbiAgICBidWlsZGVyLnB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlcigpO1xuICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgYmxvY2ssIGludmVyc2UpO1xuXG4gICAgYnVpbGRlci5sYWJlbCgnRUxTRScpO1xuICAgIGJ1aWxkZXIuZXhpdCgpO1xuICAgIGJ1aWxkZXIucmV0dXJuKCk7XG5cbiAgICBidWlsZGVyLmxhYmVsKCdFTkQnKTtcbiAgICBidWlsZGVyLnBvcEZyYW1lKCk7XG5cbiAgICBidWlsZGVyLnN0b3BMYWJlbHMoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRlcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEpIHtcbiAgcmV0dXJuIG5ldyBPcGNvZGVCdWlsZGVyRFNMKGVudiwgbWV0YSk7XG59XG4iXX0=

@@ -108,5 +108,6 @@ "use strict";

prelude.push([Ops.ClientSideStatement, ClientSide.Ops.OpenComponentElement, tag]);
prelude.push([Ops.ClientSideStatement, ClientSide.Ops.DidCreateElement]);
var attrsSymbol = symbolTable.symbols.length + 1;
symbolTable.symbols.push(ATTRS_BLOCK);
var statements = prelude.concat([[Ops.Yield, attrsSymbol, _util.EMPTY_ARRAY]]).concat(head).concat(body);
var statements = prelude.concat([[Ops.Yield, attrsSymbol, _util.EMPTY_ARRAY]]).concat(head).concat(body).concat([[Ops.ClientSideStatement, ClientSide.Ops.DidRenderLayout]]);
return new CompilableTemplate(statements, symbolTable);

@@ -183,9 +184,11 @@ }

Ops[Ops["OpenComponentElement"] = 0] = "OpenComponentElement";
Ops[Ops["OptimizedAppend"] = 1] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 2] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 3] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 4] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 5] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 6] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 7] = "FunctionExpression";
Ops[Ops["DidCreateElement"] = 1] = "DidCreateElement";
Ops[Ops["DidRenderLayout"] = 2] = "DidRenderLayout";
Ops[Ops["OptimizedAppend"] = 3] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 4] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 5] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 6] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 7] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 8] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 9] = "FunctionExpression";
})(Ops = ClientSide.Ops || (ClientSide.Ops = {}));

@@ -265,2 +268,2 @@ function is(variant) {

}(RawBlock);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLEFBQU8sQUFBRSxBQUF1QixBQUFFLEFBQXNCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUNwRixBQUFPLEFBQUUsQUFBTyxBQUFFLEFBQU0sQUFBWSxBQUFDOztBQUdyQyxBQUFPLEFBQVUsQUFBVyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUNwRCxBQUFPOztJQUFLLEFBQVUsQUFBTSxBQUFzQixBQUFDOztBQUVuRCxBQUFPLEFBQUUsQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUd2QyxBQUFPLEFBQ0wsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQyxBQUk1QixBQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBQTJCLEFBQStCLFdBQUUsQUFBc0IsU0FDdEYsQUFBVTswQkFBQyxBQUFPLFFBQUMsQUFBUyxXQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3pDLEFBQUM7QUFPRCxBQUFNO2tFQUlKO2dDQUFtQixBQUFrQyxZQUFTLEFBQWM7OEJBQXpEOzthQUFVLGFBQVYsQUFBVSxBQUF3QixBQUFTO2FBQVcsY0FBWCxBQUFXLEFBQUcsQUFIcEU7YUFBYyxpQkFBbUMsQUFBSSxBQUFDLEFBQ3REO2FBQWUsa0JBQXVDLEFBQUksQUFBQyxBQUVZLEFBQUM7OztpQ0FFaEYsQUFBYSx1Q0FBQyxBQUFnQixLQUM1QixBQUFJO1lBQUUsQUFBYyxBQUFFLGlCQUFHLEFBQUksQUFBQyxLQUU5QixBQUFFLEFBQUM7O1lBQUMsQ0FBQyxBQUFjLEFBQUMsZ0JBQUMsQUFBQyxBQUNwQjtnQkFBSSxBQUFPLFdBQUcsQUFBaUIsa0JBQUMsQUFBSSxLQUFDLEFBQVUsWUFBRSxBQUFJLEtBQUMsQUFBVyxZQUFDLEFBQUksTUFBRSxBQUFHLEFBQUMsQUFBQyxBQUU3RTtnQkFBSSxBQUFLLFFBQUcsQUFBTyxTQUFD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QUFrQixtQkFBQyxBQUFVLFlBQUUsRUFBRSxBQUFPLFNBQUUsQUFBSSxLQUFDLEFBQU8sU0FBRSxBQUFPLFNBQUUsQUFBSSxLQUFDLEFBQU8sU0FBRSxBQUFJLE1BQUUsQUFBSSxLQUFDLEFBQUksQUFBRSxBQUFDLEFBQUMsQUFDL0csQUFBQyxBQUNGOzs7O0VBVCtCLEFBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsIENvbXBpbGVkU3RhdGljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgT3Bjb2RlQnVpbGRlciBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBPcHRpb24sIEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgQmxvY2tTeW1ib2xUYWJsZSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVidWdTbGljZSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtcbiAgU1RBVEVNRU5UU1xufSBmcm9tICcuL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRTdGF0ZW1lbnQgPSBXaXJlRm9ybWF0LlN0YXRlbWVudCB8IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGUgfCBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXJndW1lbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudDogV2lyZUZvcm1hdC5TdGF0ZW1lbnQsIGJ1aWxkZXI6IE9wY29kZUJ1aWxkZXIpIHtcbiAgU1RBVEVNRU5UUy5jb21waWxlKHN0YXRlbWVudCwgYnVpbGRlcik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lZFRlbXBsYXRlPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb21waWxlU3RhdGljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZFN0YXRpY1RlbXBsYXRlO1xuICBjb21waWxlRHluYW1pYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBDb21waWxhYmxlVGVtcGxhdGU8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiBpbXBsZW1lbnRzIFNjYW5uZWRUZW1wbGF0ZTxTPiB7XG4gIHByaXZhdGUgY29tcGlsZWRTdGF0aWM6IE9wdGlvbjxDb21waWxlZFN0YXRpY1RlbXBsYXRlPiA9IG51bGw7XG4gIHByaXZhdGUgY29tcGlsZWREeW5hbWljOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHVibGljIHN5bWJvbFRhYmxlOiBTKSB7fVxuXG4gIGNvbXBpbGVTdGF0aWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkU3RhdGljVGVtcGxhdGUge1xuICAgIGxldCB7IGNvbXBpbGVkU3RhdGljIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjb21waWxlZFN0YXRpYykge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBjb21waWxlU3RhdGVtZW50cyh0aGlzLnN0YXRlbWVudHMsIHRoaXMuc3ltYm9sVGFibGUubWV0YSwgZW52KTtcblxuICAgICAgbGV0IHN0YXJ0ID0gYnVpbGRlci5zdGFydDtcbiAgICAgIGxldCBlbmQgPSBidWlsZGVyLmZpbmFsaXplKCk7XG5cbiAgICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgICAgY29tcGlsZWRTdGF0aWMgPSB0aGlzLmNvbXBpbGVkU3RhdGljID0gbmV3IENvbXBpbGVkU3RhdGljVGVtcGxhdGUoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkU3RhdGljO1xuICB9XG5cbiAgY29tcGlsZUR5bmFtaWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+IHtcbiAgICBsZXQgeyBjb21waWxlZER5bmFtaWMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNvbXBpbGVkRHluYW1pYykge1xuICAgICAgbGV0IHN0YXRpY0Jsb2NrID0gdGhpcy5jb21waWxlU3RhdGljKGVudik7XG4gICAgICBjb21waWxlZER5bmFtaWMgPSBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhdGljQmxvY2suc3RhcnQsIHN0YXRpY0Jsb2NrLmVuZCwgdGhpcy5zeW1ib2xUYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkRHluYW1pYztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4geyBHbGltbWVyRGVidWc6ICc8dGVtcGxhdGU+JyB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0gQ29tcGlsYWJsZVRlbXBsYXRlPFN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIFByb2dyYW0gPSBDb21waWxhYmxlVGVtcGxhdGU8UHJvZ3JhbVN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIEJsb2NrID0gQ29tcGlsYWJsZVRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5leHBvcnQgdHlwZSBTY2FubmVkUHJvZ3JhbSA9IFNjYW5uZWRUZW1wbGF0ZTxQcm9ncmFtU3ltYm9sVGFibGU+O1xuZXhwb3J0IHR5cGUgU2Nhbm5lZEJsb2NrID0gU2Nhbm5lZFRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5mdW5jdGlvbiBjb21waWxlU3RhdGVtZW50cyhzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgbGV0IGIgPSBidWlsZGVyKGVudiwgbWV0YSk7XG4gIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgY29tcGlsZVN0YXRlbWVudChzdGF0ZW1lbnQsIGIpO1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG5cbmV4cG9ydCBjb25zdCBBVFRSU19CTE9DSyA9ICcmYXR0cnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGF5b3V0KHByZWx1ZGU6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGhlYWQ6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGJvZHk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgbGV0IFssIHRhZ10gPSBwcmVsdWRlLnBvcCgpIGFzIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5PcGVuRWxlbWVudDtcbiAgcHJlbHVkZS5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHRhZ10pO1xuXG4gIGxldCBhdHRyc1N5bWJvbCA9IHN5bWJvbFRhYmxlLnN5bWJvbHMubGVuZ3RoICsgMTtcbiAgc3ltYm9sVGFibGUuc3ltYm9scy5wdXNoKEFUVFJTX0JMT0NLKTtcblxuICBsZXQgc3RhdGVtZW50cyA9IHByZWx1ZGVcbiAgICAuY29uY2F0KFtbT3BzLllpZWxkLCBhdHRyc1N5bWJvbCwgRU1QVFlfQVJSQVldXSlcbiAgICAuY29uY2F0KGhlYWQpXG4gICAgLmNvbmNhdChib2R5KTtcblxuICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCBzeW1ib2xUYWJsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJsb2NrOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLCBwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIHNjYW5FbnRyeVBvaW50KG1ldGE6IENvbXBpbGF0aW9uTWV0YSk6IFByb2dyYW0ge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd1Byb2dyYW0oZW52LCBtZXRhLCBzdGF0ZW1lbnRzLCBibG9jay5zeW1ib2xzLCBibG9jay5oYXNFdmFsKS5zY2FuKCk7XG4gIH1cblxuICBzY2FuQmxvY2sobWV0YTogQ29tcGlsYXRpb25NZXRhKTogQmxvY2sge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKGVudiwgbWV0YSwgc3RhdGVtZW50cywgRU1QVFlfQVJSQVkpLnNjYW4oKTtcbiAgfVxuXG4gIHNjYW5MYXlvdXQobWV0YTogQ29tcGlsYXRpb25NZXRhLCBhdHRyczogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdKTogUHJvZ3JhbSB7XG4gICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgbGV0IHsgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG5cbiAgICBpZiAoIWJsb2NrLnByZWx1ZGUgfHwgIWJsb2NrLmhlYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBsYXlvdXQgbXVzdCBoYXZlIGEgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICB9XG5cbiAgICBsZXQgc3ltYm9sVGFibGUgPSB7IG1ldGEsIGhhc0V2YWwsIHN5bWJvbHMgfTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBwcmVsdWRlIH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBibG9jay5wcmVsdWRlLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG4gICAgbGV0IHsgc3RhdGVtZW50czogaGVhZCB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogWy4uLmF0dHJzLCAuLi5ibG9jay5oZWFkXSwgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuICAgIGxldCB7IHN0YXRlbWVudHM6IGJvZHkgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IGJsb2NrLnN0YXRlbWVudHMsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcblxuICAgIHJldHVybiBsYXlvdXQocHJlbHVkZSwgaGVhZCwgYm9keSwgc3ltYm9sVGFibGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FuQmxvY2soYmxvY2s6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpOiBCbG9jayB7XG4gIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2soZW52LCBtZXRhLCBibG9jay5zdGF0ZW1lbnRzLCBFTVBUWV9BUlJBWSkuc2NhbigpO1xufVxuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2xpZW50U2lkZSB7XG4gIGV4cG9ydCBlbnVtIE9wcyB7XG4gICAgT3BlbkNvbXBvbmVudEVsZW1lbnQsXG4gICAgT3B0aW1pemVkQXBwZW5kLFxuICAgIFVub3B0aW1pemVkQXBwZW5kLFxuICAgIFN0YXRpY1BhcnRpYWwsXG4gICAgRHluYW1pY1BhcnRpYWwsXG4gICAgTmVzdGVkQmxvY2ssXG4gICAgU2Nhbm5lZEJsb2NrLFxuXG4gICAgRnVuY3Rpb25FeHByZXNzaW9uXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXM8VCBleHRlbmRzIGFueVtdPih2YXJpYW50OiBPcHMpOiAodmFsdWU6IGFueVtdKSA9PiB2YWx1ZSBpcyBUIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWU6IGFueVtdKTogdmFsdWUgaXMgVCB7XG4gICAgICByZXR1cm4gdmFsdWVbMF0gPT09IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uIHx8IHZhbHVlWzBdID09PSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlU3RhdGVtZW50ICYmIHZhbHVlWzFdID09PSB2YXJpYW50O1xuICAgIH07XG4gIH1cblxuICBpbXBvcnQgQ2xpZW50U2lkZVN0YXRlbWVudCA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQ7XG4gIGltcG9ydCBDbGllbnRTaWRlRXhwcmVzc2lvbiA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uO1xuXG4gIGV4cG9ydCB0eXBlIE9wZW5Db21wb25lbnRFbGVtZW50ICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHN0cmluZ107XG4gIGV4cG9ydCB0eXBlIE9wdGltaXplZEFwcGVuZCAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBVbm9wdGltaXplZEFwcGVuZCAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlVub3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBTdGF0aWNQYXJ0aWFsICAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlN0YXRpY1BhcnRpYWwsIHN0cmluZywgV2lyZUZvcm1hdC5Db3JlLkV2YWxJbmZvXTtcbiAgZXhwb3J0IHR5cGUgRHluYW1pY1BhcnRpYWwgICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5EeW5hbWljUGFydGlhbCwgV2lyZUZvcm1hdC5FeHByZXNzaW9uLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuXG4gIGV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbiAgICA9IFtDbGllbnRTaWRlRXhwcmVzc2lvbiwgT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8T3BhcXVlPl07XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8VD4gPSAoVk06IFB1YmxpY1ZNLCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpID0+IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8VD47XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZVN0YXRlbWVudCA9XG4gICAgfCBPcGVuQ29tcG9uZW50RWxlbWVudFxuICAgIHwgT3B0aW1pemVkQXBwZW5kXG4gICAgfCBVbm9wdGltaXplZEFwcGVuZFxuICAgIHwgU3RhdGljUGFydGlhbFxuICAgIHwgRHluYW1pY1BhcnRpYWxcbiAgICA7XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZUV4cHJlc3Npb24gPVxuICAgIHwgRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgO1xufVxuXG5jb25zdCB7IE9wcyB9ID0gV2lyZUZvcm1hdDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJhd0Jsb2NrPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZW52OiBFbnZpcm9ubWVudCwgcHJvdGVjdGVkIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgcHJpdmF0ZSBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdKSB7fVxuXG4gIHNjYW5TdGF0ZW1lbnRzKCk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10ge1xuICAgIGxldCBidWZmZXI6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10gPSBbXTtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc3RhdGVtZW50cztcbiAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgYnVmZmVyLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgY2hpbGQoYmxvY2s6IE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz4pOiBPcHRpb248UmF3SW5saW5lQmxvY2s+IHtcbiAgICBpZiAoIWJsb2NrKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKHRoaXMuZW52LCB0aGlzLm1ldGEsIGJsb2NrLnN0YXRlbWVudHMsIGJsb2NrLnBhcmFtZXRlcnMpO1xuICB9XG5cbiAgYWJzdHJhY3Qgc2NhbigpOiBDb21waWxhYmxlVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBSYXdJbmxpbmVCbG9jayBleHRlbmRzIFJhd0Jsb2NrPEJsb2NrU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBwcml2YXRlIHBhcmFtZXRlcnM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoZW52LCBtZXRhLCBzdGF0ZW1lbnRzKTtcbiAgfVxuXG4gIHNjYW4oKTogQmxvY2sge1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zY2FuU3RhdGVtZW50cygpO1xuICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzLCBtZXRhOiB0aGlzLm1ldGEgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhd1Byb2dyYW0gZXh0ZW5kcyBSYXdCbG9jazxQcm9ncmFtU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBwcml2YXRlIHN5bWJvbHM6IHN0cmluZ1tdLCBwcml2YXRlIGhhc0V2YWw6IGJvb2xlYW4pIHtcbiAgICBzdXBlcihlbnYsIG1ldGEsIHN0YXRlbWVudHMpO1xuICB9XG5cbiAgc2NhbigpOiBQcm9ncmFtIHtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc2NhblN0YXRlbWVudHMoKTtcbiAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IHN5bWJvbHM6IHRoaXMuc3ltYm9scywgaGFzRXZhbDogdGhpcy5oYXNFdmFsLCBtZXRhOiB0aGlzLm1ldGEgfSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLEFBQU8sQUFBRSxBQUF1QixBQUFFLEFBQXNCLEFBQUUsQUFBTSxBQUFtQixBQUFDOztBQUNwRixBQUFPLEFBQUUsQUFBTyxBQUFFLEFBQU0sQUFBWSxBQUFDOztBQUdyQyxBQUFPLEFBQVUsQUFBVyxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUNwRCxBQUFPOztJQUFLLEFBQVUsQUFBTSxBQUFzQixBQUFDOztBQUVuRCxBQUFPLEFBQUUsQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUd2QyxBQUFPLEFBQ0wsQUFBVSxBQUNYLEFBQU0sQUFBb0IsQUFBQyxBQUk1QixBQUFNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBQTJCLEFBQStCLFdBQUUsQUFBc0IsU0FDdEYsQUFBVTswQkFBQyxBQUFPLFFBQUMsQUFBUyxXQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3pDLEFBQUM7QUFPRCxBQUFNO2tFQUlKO2dDQUFtQixBQUFrQyxZQUFTLEFBQWM7OEJBQXpEOzthQUFVLGFBQVYsQUFBVSxBQUF3QixBQUFTO2FBQVcsY0FBWCxBQUFXLEFBQUcsQUFIcEU7YUFBYyxpQkFBbUMsQUFBSSxBQUFDLEFBQ3REO2FBQWUsa0JBQXVDLEFBQUksQUFBQyxBQUVZLEFBQUM7OztpQ0FFaEYsQUFBYSx1Q0FBQyxBQUFnQixLQUM1QixBQUFJO1lBQUUsQUFBYyxBQUFFLGlCQUFHLEFBQUksQUFBQyxLQUU5QixBQUFFLEFBQUM7O1lBQUMsQ0FBQyxBQUFjLEFBQUMsZ0JBQUMsQUFBQyxBQUNwQjtnQkFBSSxBQUFPLFdBQUcsQUFBaUIsa0JBQUMsQUFBSSxLQUFDLEFBQVUsWUFBRSxBQUFJLEtBQUMsQUFBVyxZQUFDLEFBQUksTUFBRSxBQUFHLEFBQUMsQUFBQyxBQUU3RTtnQkFBSSxBQUFLLFFBQUcsQUFBTyxTQUFD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QUFBZ0I7OztzREFDMUksQUFBSyxzQkFBQyxBQUFHLEtBQUUsQUFBSSxNQUFFLEFBQVUsQUFBQyxBQUFDLEFBRGtFOztlQUFPLFVBQVAsQUFBTyxBQUFVLEFBQVU7ZUFBTyxVQUFQLEFBQU8sQUFBUyxBQUU1STtlQUFDOzs7eUJBRUQsQUFBSSx1QkFDRjtZQUFJLEFBQVUsYUFBRyxBQUFJLEtBQUMsQUFBYyxBQUFFLEFBQUMsQUFDdkMsQUFBTTtlQUFDLElBQUksQUFBa0IsbUJBQUMsQUFBVSxZQUFFLEVBQUUsQUFBTyxTQUFFLEFBQUksS0FBQyxBQUFPLFNBQUUsQUFBTyxTQUFFLEFBQUksS0FBQyxBQUFPLFNBQUUsQUFBSSxNQUFFLEFBQUksS0FBQyxBQUFJLEFBQUUsQUFBQyxBQUFDLEFBQy9HLEFBQUMsQUFDRjs7OztFQVQrQixBQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlLCBDb21waWxlZFN0YXRpY1RlbXBsYXRlIH0gZnJvbSAnLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgYnVpbGRlciB9IGZyb20gJy4vY29tcGlsZXInO1xuaW1wb3J0IE9wY29kZUJ1aWxkZXIgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgT3B0aW9uLCBFTVBUWV9BUlJBWSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0ICogYXMgV2lyZUZvcm1hdCBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBPcGFxdWUsIFN5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUsIEJsb2NrU3ltYm9sVGFibGUgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRlYnVnU2xpY2UgfSBmcm9tICcuL29wY29kZXMnO1xuaW1wb3J0IHsgQ29tcGlsYXRpb25NZXRhIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7XG4gIFNUQVRFTUVOVFNcbn0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkU3RhdGVtZW50ID0gV2lyZUZvcm1hdC5TdGF0ZW1lbnQgfCBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlIHwgV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkFyZ3VtZW50O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZVN0YXRlbWVudChzdGF0ZW1lbnQ6IFdpcmVGb3JtYXQuU3RhdGVtZW50LCBidWlsZGVyOiBPcGNvZGVCdWlsZGVyKSB7XG4gIFNUQVRFTUVOVFMuY29tcGlsZShzdGF0ZW1lbnQsIGJ1aWxkZXIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5uZWRUZW1wbGF0ZTxTIGV4dGVuZHMgU3ltYm9sVGFibGU+IHtcbiAgY29tcGlsZVN0YXRpYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZTtcbiAgY29tcGlsZUR5bmFtaWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGlsYWJsZVRlbXBsYXRlPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4gaW1wbGVtZW50cyBTY2FubmVkVGVtcGxhdGU8Uz4ge1xuICBwcml2YXRlIGNvbXBpbGVkU3RhdGljOiBPcHRpb248Q29tcGlsZWRTdGF0aWNUZW1wbGF0ZT4gPSBudWxsO1xuICBwcml2YXRlIGNvbXBpbGVkRHluYW1pYzogT3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+PiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHB1YmxpYyBzeW1ib2xUYWJsZTogUykge31cblxuICBjb21waWxlU3RhdGljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZFN0YXRpY1RlbXBsYXRlIHtcbiAgICBsZXQgeyBjb21waWxlZFN0YXRpYyB9ID0gdGhpcztcblxuICAgIGlmICghY29tcGlsZWRTdGF0aWMpIHtcbiAgICAgIGxldCBidWlsZGVyID0gY29tcGlsZVN0YXRlbWVudHModGhpcy5zdGF0ZW1lbnRzLCB0aGlzLnN5bWJvbFRhYmxlLm1ldGEsIGVudik7XG5cbiAgICAgIGxldCBzdGFydCA9IGJ1aWxkZXIuc3RhcnQ7XG4gICAgICBsZXQgZW5kID0gYnVpbGRlci5maW5hbGl6ZSgpO1xuXG4gICAgICBkZWJ1Z1NsaWNlKGVudiwgc3RhcnQsIGVuZCk7XG5cbiAgICAgIGNvbXBpbGVkU3RhdGljID0gdGhpcy5jb21waWxlZFN0YXRpYyA9IG5ldyBDb21waWxlZFN0YXRpY1RlbXBsYXRlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZFN0YXRpYztcbiAgfVxuXG4gIGNvbXBpbGVEeW5hbWljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTPiB7XG4gICAgbGV0IHsgY29tcGlsZWREeW5hbWljIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjb21waWxlZER5bmFtaWMpIHtcbiAgICAgIGxldCBzdGF0aWNCbG9jayA9IHRoaXMuY29tcGlsZVN0YXRpYyhlbnYpO1xuICAgICAgY29tcGlsZWREeW5hbWljID0gbmV3IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlKHN0YXRpY0Jsb2NrLnN0YXJ0LCBzdGF0aWNCbG9jay5lbmQsIHRoaXMuc3ltYm9sVGFibGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZER5bmFtaWM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHsgR2xpbW1lckRlYnVnOiAnPHRlbXBsYXRlPicgfTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZSA9IENvbXBpbGFibGVUZW1wbGF0ZTxTeW1ib2xUYWJsZT47XG5leHBvcnQgdHlwZSBQcm9ncmFtID0gQ29tcGlsYWJsZVRlbXBsYXRlPFByb2dyYW1TeW1ib2xUYWJsZT47XG5leHBvcnQgdHlwZSBCbG9jayA9IENvbXBpbGFibGVUZW1wbGF0ZTxCbG9ja1N5bWJvbFRhYmxlPjtcblxuZXhwb3J0IHR5cGUgU2Nhbm5lZFByb2dyYW0gPSBTY2FubmVkVGVtcGxhdGU8UHJvZ3JhbVN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIFNjYW5uZWRCbG9jayA9IFNjYW5uZWRUZW1wbGF0ZTxCbG9ja1N5bWJvbFRhYmxlPjtcblxuZnVuY3Rpb24gY29tcGlsZVN0YXRlbWVudHMoc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBlbnY6IEVudmlyb25tZW50KSB7XG4gIGxldCBiID0gYnVpbGRlcihlbnYsIG1ldGEpO1xuXG4gIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgY29tcGlsZVN0YXRlbWVudChzdGF0ZW1lbnQsIGIpO1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG5cbmV4cG9ydCBjb25zdCBBVFRSU19CTE9DSyA9ICcmYXR0cnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGF5b3V0KHByZWx1ZGU6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGhlYWQ6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGJvZHk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgbGV0IFssIHRhZ10gPSBwcmVsdWRlLnBvcCgpIGFzIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5PcGVuRWxlbWVudDtcbiAgcHJlbHVkZS5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHRhZ10pO1xuICBwcmVsdWRlLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5EaWRDcmVhdGVFbGVtZW50XSk7XG5cbiAgbGV0IGF0dHJzU3ltYm9sID0gc3ltYm9sVGFibGUuc3ltYm9scy5sZW5ndGggKyAxO1xuICBzeW1ib2xUYWJsZS5zeW1ib2xzLnB1c2goQVRUUlNfQkxPQ0spO1xuXG4gIGxldCBzdGF0ZW1lbnRzID0gcHJlbHVkZVxuICAgIC5jb25jYXQoW1tPcHMuWWllbGQsIGF0dHJzU3ltYm9sLCBFTVBUWV9BUlJBWV1dKVxuICAgIC5jb25jYXQoaGVhZClcbiAgICAuY29uY2F0KGJvZHkpXG4gICAgLmNvbmNhdChbW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5EaWRSZW5kZXJMYXlvdXRdXSk7XG5cbiAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgc3ltYm9sVGFibGUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2FubmVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBibG9jazogV2lyZUZvcm1hdC5TZXJpYWxpemVkVGVtcGxhdGVCbG9jaywgcHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBzY2FuRW50cnlQb2ludChtZXRhOiBDb21waWxhdGlvbk1ldGEpOiBQcm9ncmFtIHtcbiAgICBsZXQgeyBibG9jaywgZW52IH0gPSB0aGlzO1xuXG4gICAgbGV0IHN0YXRlbWVudHM7XG4gICAgaWYgKGJsb2NrLnByZWx1ZGUgJiYgYmxvY2suaGVhZCkge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnByZWx1ZGUuY29uY2F0KGJsb2NrLmhlYWQpLmNvbmNhdChibG9jay5zdGF0ZW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnN0YXRlbWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSYXdQcm9ncmFtKGVudiwgbWV0YSwgc3RhdGVtZW50cywgYmxvY2suc3ltYm9scywgYmxvY2suaGFzRXZhbCkuc2NhbigpO1xuICB9XG5cbiAgc2NhbkJsb2NrKG1ldGE6IENvbXBpbGF0aW9uTWV0YSk6IEJsb2NrIHtcbiAgICBsZXQgeyBibG9jaywgZW52IH0gPSB0aGlzO1xuXG4gICAgbGV0IHN0YXRlbWVudHM7XG4gICAgaWYgKGJsb2NrLnByZWx1ZGUgJiYgYmxvY2suaGVhZCkge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnByZWx1ZGUuY29uY2F0KGJsb2NrLmhlYWQpLmNvbmNhdChibG9jay5zdGF0ZW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnN0YXRlbWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSYXdJbmxpbmVCbG9jayhlbnYsIG1ldGEsIHN0YXRlbWVudHMsIEVNUFRZX0FSUkFZKS5zY2FuKCk7XG4gIH1cblxuICBzY2FuTGF5b3V0KG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgYXR0cnM6IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSk6IFByb2dyYW0ge1xuICAgIGxldCB7IGJsb2NrIH0gPSB0aGlzO1xuICAgIGxldCB7IHN5bWJvbHMsIGhhc0V2YWwgfSA9IGJsb2NrO1xuXG4gICAgaWYgKCFibG9jay5wcmVsdWRlIHx8ICFibG9jay5oZWFkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgbGF5b3V0IG11c3QgaGF2ZSBhIHRvcC1sZXZlbCBlbGVtZW50YCk7XG4gICAgfVxuXG4gICAgbGV0IHN5bWJvbFRhYmxlID0geyBtZXRhLCBoYXNFdmFsLCBzeW1ib2xzIH07XG4gICAgbGV0IHsgc3RhdGVtZW50czogcHJlbHVkZSB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogYmxvY2sucHJlbHVkZSwgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuICAgIGxldCB7IHN0YXRlbWVudHM6IGhlYWQgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IFsuLi5hdHRycywgLi4uYmxvY2suaGVhZF0sIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBib2R5IH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBibG9jay5zdGF0ZW1lbnRzLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG5cbiAgICByZXR1cm4gbGF5b3V0KHByZWx1ZGUsIGhlYWQsIGJvZHksIHN5bWJvbFRhYmxlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbkJsb2NrKGJsb2NrOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaywgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBlbnY6IEVudmlyb25tZW50KTogQmxvY2sge1xuICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKGVudiwgbWV0YSwgYmxvY2suc3RhdGVtZW50cywgRU1QVFlfQVJSQVkpLnNjYW4oKTtcbn1cblxuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5leHBvcnQgbmFtZXNwYWNlIENsaWVudFNpZGUge1xuICBleHBvcnQgZW51bSBPcHMge1xuICAgIE9wZW5Db21wb25lbnRFbGVtZW50LFxuICAgIERpZENyZWF0ZUVsZW1lbnQsXG4gICAgRGlkUmVuZGVyTGF5b3V0LFxuICAgIE9wdGltaXplZEFwcGVuZCxcbiAgICBVbm9wdGltaXplZEFwcGVuZCxcbiAgICBTdGF0aWNQYXJ0aWFsLFxuICAgIER5bmFtaWNQYXJ0aWFsLFxuICAgIE5lc3RlZEJsb2NrLFxuICAgIFNjYW5uZWRCbG9jayxcblxuICAgIEZ1bmN0aW9uRXhwcmVzc2lvblxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzPFQgZXh0ZW5kcyBhbnlbXT4odmFyaWFudDogT3BzKTogKHZhbHVlOiBhbnlbXSkgPT4gdmFsdWUgaXMgVCB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlOiBhbnlbXSk6IHZhbHVlIGlzIFQge1xuICAgICAgcmV0dXJuIHZhbHVlWzBdID09PSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiB8fCB2YWx1ZVswXSA9PT0gV2lyZUZvcm1hdC5PcHMuQ2xpZW50U2lkZVN0YXRlbWVudCAmJiB2YWx1ZVsxXSA9PT0gdmFyaWFudDtcbiAgICB9O1xuICB9XG5cbiAgaW1wb3J0IENsaWVudFNpZGVTdGF0ZW1lbnQgPSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlU3RhdGVtZW50O1xuICBpbXBvcnQgQ2xpZW50U2lkZUV4cHJlc3Npb24gPSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlRXhwcmVzc2lvbjtcblxuICBleHBvcnQgdHlwZSBPcGVuQ29tcG9uZW50RWxlbWVudCAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLk9wZW5Db21wb25lbnRFbGVtZW50LCBzdHJpbmddO1xuICBleHBvcnQgdHlwZSBEaWRDcmVhdGVFbGVtZW50ICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLkRpZENyZWF0ZUVsZW1lbnRdO1xuICBleHBvcnQgdHlwZSBEaWRSZW5kZXJMYXlvdXQgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLkRpZFJlbmRlckxheW91dF07XG4gIGV4cG9ydCB0eXBlIE9wdGltaXplZEFwcGVuZCAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBVbm9wdGltaXplZEFwcGVuZCAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlVub3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBTdGF0aWNQYXJ0aWFsICAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlN0YXRpY1BhcnRpYWwsIHN0cmluZywgV2lyZUZvcm1hdC5Db3JlLkV2YWxJbmZvXTtcbiAgZXhwb3J0IHR5cGUgRHluYW1pY1BhcnRpYWwgICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5EeW5hbWljUGFydGlhbCwgV2lyZUZvcm1hdC5FeHByZXNzaW9uLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuXG4gIGV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbiAgICA9IFtDbGllbnRTaWRlRXhwcmVzc2lvbiwgT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8T3BhcXVlPl07XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8VD4gPSAoVk06IFB1YmxpY1ZNLCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpID0+IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8VD47XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZVN0YXRlbWVudCA9XG4gICAgfCBPcGVuQ29tcG9uZW50RWxlbWVudFxuICAgIHwgRGlkQ3JlYXRlRWxlbWVudFxuICAgIHwgRGlkUmVuZGVyTGF5b3V0XG4gICAgfCBPcHRpbWl6ZWRBcHBlbmRcbiAgICB8IFVub3B0aW1pemVkQXBwZW5kXG4gICAgfCBTdGF0aWNQYXJ0aWFsXG4gICAgfCBEeW5hbWljUGFydGlhbFxuICAgIDtcblxuICBleHBvcnQgdHlwZSBDbGllbnRTaWRlRXhwcmVzc2lvbiA9XG4gICAgfCBGdW5jdGlvbkV4cHJlc3Npb25cbiAgICA7XG59XG5cbmNvbnN0IHsgT3BzIH0gPSBXaXJlRm9ybWF0O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmF3QmxvY2s8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbnY6IEVudmlyb25tZW50LCBwcm90ZWN0ZWQgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBwcml2YXRlIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10pIHt9XG5cbiAgc2NhblN0YXRlbWVudHMoKTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSB7XG4gICAgbGV0IGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zdGF0ZW1lbnRzO1xuICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICBidWZmZXIucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBjaGlsZChibG9jazogT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPik6IE9wdGlvbjxSYXdJbmxpbmVCbG9jaz4ge1xuICAgIGlmICghYmxvY2spIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2sodGhpcy5lbnYsIHRoaXMubWV0YSwgYmxvY2suc3RhdGVtZW50cywgYmxvY2sucGFyYW1ldGVycyk7XG4gIH1cblxuICBhYnN0cmFjdCBzY2FuKCk6IENvbXBpbGFibGVUZW1wbGF0ZTxTPjtcbn1cblxuZXhwb3J0IGNsYXNzIFJhd0lubGluZUJsb2NrIGV4dGVuZHMgUmF3QmxvY2s8QmxvY2tTeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHByaXZhdGUgcGFyYW1ldGVyczogbnVtYmVyW10pIHtcbiAgICBzdXBlcihlbnYsIG1ldGEsIHN0YXRlbWVudHMpO1xuICB9XG5cbiAgc2NhbigpOiBCbG9jayB7XG4gICAgbGV0IHN0YXRlbWVudHMgPSB0aGlzLnNjYW5TdGF0ZW1lbnRzKCk7XG4gICAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgeyBwYXJhbWV0ZXJzOiB0aGlzLnBhcmFtZXRlcnMsIG1ldGE6IHRoaXMubWV0YSB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmF3UHJvZ3JhbSBleHRlbmRzIFJhd0Jsb2NrPFByb2dyYW1TeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHByaXZhdGUgc3ltYm9sczogc3RyaW5nW10sIHByaXZhdGUgaGFzRXZhbDogYm9vbGVhbikge1xuICAgIHN1cGVyKGVudiwgbWV0YSwgc3RhdGVtZW50cyk7XG4gIH1cblxuICBzY2FuKCk6IFByb2dyYW0ge1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zY2FuU3RhdGVtZW50cygpO1xuICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgc3ltYm9sczogdGhpcy5zeW1ib2xzLCBoYXNFdmFsOiB0aGlzLmhhc0V2YWwsIG1ldGE6IHRoaXMubWV0YSB9KTtcbiAgfVxufVxuIl19

@@ -8,2 +8,4 @@ "use strict";

var _opcodes = require("../opcodes");
var _environment = require("../environment");

@@ -23,4 +25,2 @@

var _opcodes = require("../opcodes");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -45,63 +45,66 @@

var EvaluationStack = exports.EvaluationStack = function () {
function EvaluationStack() {
var stack = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
function EvaluationStack(stack, fp, sp) {
_classCallCheck(this, EvaluationStack);
this.stack = stack;
this.fp = fp;
this.sp = sp;
Object.seal(this);
}
EvaluationStack.prototype.snapshot = function snapshot() {
var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return new EvaluationStack(this.stack.slice(-args));
EvaluationStack.empty = function empty() {
return new this([], 0, -1);
};
EvaluationStack.prototype.restore = function restore(bp) {
this.stack.length = bp;
return this.pop();
EvaluationStack.restore = function restore(snapshot) {
return new this(snapshot.slice(), 0, snapshot.length - 1);
};
EvaluationStack.prototype.set = function set(pos, value) {
this.stack[pos] = value;
EvaluationStack.prototype.isEmpty = function isEmpty() {
return this.sp === -1;
};
EvaluationStack.prototype.get = function get(pos) {
return this.stack[pos];
};
EvaluationStack.prototype.push = function push(value) {
this.stack.push(value);
this.stack[++this.sp] = value;
};
EvaluationStack.prototype.dup = function dup() {
this.push(this.fromTop(0));
var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.sp;
this.push(this.stack[position]);
};
EvaluationStack.prototype.pop = function pop() {
return this.stack.pop();
var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
var top = this.stack[this.sp];
this.sp -= n;
return top;
};
EvaluationStack.prototype.top = function top() {
return this.stack[this.stack.length - 1];
EvaluationStack.prototype.peek = function peek() {
return this.stack[this.sp];
};
EvaluationStack.prototype.fromTop = function fromTop(pos) {
return this.stack[this.stack.length - 1 - pos];
EvaluationStack.prototype.fromBase = function fromBase(offset) {
return this.stack[this.fp - offset];
};
EvaluationStack.prototype.slice = function slice(count) {
return this.stack.slice(this.stack.length - count);
EvaluationStack.prototype.fromTop = function fromTop(offset) {
return this.stack[this.sp - offset];
};
_createClass(EvaluationStack, [{
key: 'pos',
get: function () {
return this.stack.length;
}
}]);
EvaluationStack.prototype.capture = function capture(items) {
var end = this.sp + 1;
var start = end - items;
return this.stack.slice(start, end);
};
EvaluationStack.prototype.toArray = function toArray() {
return this.stack.slice(this.fp, this.sp + 1);
};
return EvaluationStack;
}();
var i = 0;

@@ -116,8 +119,13 @@ var VM = function () {

this.scopeStack = new _util.Stack();
this.bp = 0;
this.updatingOpcodeStack = new _util.Stack();
this.cacheGroups = new _util.Stack();
this.listBlockStack = new _util.Stack();
this.frames = [];
this.evalStack = new EvaluationStack();
this.stack = EvaluationStack.empty();
/** Registers **/
this.pc = -1;
this.ra = -1;
this.s0 = null;
this.s1 = null;
this.t0 = null;
this.t1 = null;
this.env = env;

@@ -130,49 +138,87 @@ this.constants = env.constants;

VM.initial = function initial(env, self, dynamicScope, elementStack, program) {
var scope = _environment.Scope.root(self, program.symbolTable.symbols.length);
var vm = new VM(env, scope, dynamicScope, elementStack);
vm.prepare(program.start);
return vm;
// Fetch a value from a register onto the stack
VM.prototype.fetch = function fetch(register) {
this.stack.push(this[_opcodes.Register[register]]);
};
// Load a value from the stack into a register
VM.prototype.capture = function capture(args) {
return {
env: this.env,
scope: this.scope(),
dynamicScope: this.dynamicScope(),
stack: this.evalStack.snapshot(args),
bp: this.bp
};
VM.prototype.load = function load(register) {
this[_opcodes.Register[register]] = this.stack.pop();
};
// Fetch a value from a register
VM.prototype.reserveLocals = function reserveLocals(size) {
var stack = this.evalStack,
bp = this.bp;
stack.push(bp);
this.bp = stack.pos;
for (var i = 0; i < size; i++) {
stack.push(null);
}
VM.prototype.fetchValue = function fetchValue(register) {
return this[_opcodes.Register[register]];
};
// Load a value into a register
VM.prototype.releaseLocals = function releaseLocals() {
var stack = this.evalStack,
bp = this.bp;
this.bp = stack.restore(bp);
VM.prototype.loadValue = function loadValue(register, value) {
this[_opcodes.Register[register]] = value;
};
// Start a new frame and save $ra and $fp on the stack
VM.prototype.setLocal = function setLocal(position, value) {
this.evalStack.set(this.bp + position, value);
VM.prototype.pushFrame = function pushFrame() {
this.stack.push(this.ra);
this.stack.push(this.fp);
this.fp = this.sp - 1;
// this.fp = this.sp + 1;
};
// Restore $ra, $sp and $fp
VM.prototype.getLocal = function getLocal(position) {
return this.evalStack.get(this.bp + position);
VM.prototype.popFrame = function popFrame() {
this.sp = this.fp - 1;
this.ra = this.stack.fromBase(0);
this.fp = this.stack.fromBase(-1);
};
// Jump to an address in `program`
VM.prototype.goto = function goto(ip) {
this.ip = ip;
VM.prototype.goto = function goto(pc) {
this.pc = pc;
};
// Save $pc into $ra, then jump to a new address in `program` (jal in MIPS)
VM.prototype.call = function call(pc) {
this.ra = this.pc;
this.pc = pc;
};
// Put a specific `program` address in $ra
VM.prototype.returnTo = function returnTo(ra) {
this.ra = ra;
};
// Return to the `program` address stored in $ra
VM.prototype.return = function _return() {
if (this.pc === this.ra + 4) {
throw "ZOMG";
}
this.pc = this.ra;
};
VM.initial = function initial(env, self, dynamicScope, elementStack, program) {
var scope = _environment.Scope.root(self, program.symbolTable.symbols.length);
var vm = new VM(env, scope, dynamicScope, elementStack);
vm.pc = program.start;
vm.updatingOpcodeStack.push(new _util.LinkedList());
return vm;
};
VM.prototype.capture = function capture(args) {
return {
env: this.env,
scope: this.scope(),
dynamicScope: this.dynamicScope(),
stack: this.stack.capture(args)
};
};
VM.prototype.beginCacheGroup = function beginCacheGroup() {

@@ -201,25 +247,22 @@ this.cacheGroups.push(this.updating().tail());

VM.prototype.enter = function enter(args, start, end) {
VM.prototype.enter = function enter(args) {
var updating = new _util.LinkedList();
var state = this.capture(args);
var tracker = this.stack().pushUpdatableBlock();
var tryOpcode = new _update.TryOpcode(start, end, state, tracker, updating);
var ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
var tracker = this.elements().pushUpdatableBlock();
var tryOpcode = new _update.TryOpcode(this.pc, state, tracker, updating);
this.didEnter(tryOpcode);
};
VM.prototype.iterate = function iterate(start, end, memo, value) {
var updating = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new _util.LinkedList();
VM.prototype.iterate = function iterate(memo, value) {
var updating = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new _util.LinkedList();
var stack = this.evalStack;
var stack = this.stack;
stack.push(value);
stack.push(memo);
var state = this.capture(2);
var tracker = this.stack().pushUpdatableBlock();
var ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
return new _update.TryOpcode(start, end, state, tracker, updating);
var tracker = this.elements().pushUpdatableBlock();
// let ip = this.ip;
// this.ip = end + 4;
// this.frames.push(ip);
return new _update.TryOpcode(this.pc, state, tracker, updating);
};

@@ -232,8 +275,8 @@

VM.prototype.enterList = function enterList(start, end) {
VM.prototype.enterList = function enterList(start) {
var updating = new _util.LinkedList();
var state = this.capture(1);
var tracker = this.stack().pushBlockList(updating);
var artifacts = this.evalStack.top().artifacts;
var opcode = new _update.ListBlockOpcode(start, end, state, tracker, updating, artifacts);
var state = this.capture(0);
var tracker = this.elements().pushBlockList(updating);
var artifacts = this.stack.peek().artifacts;
var opcode = new _update.ListBlockOpcode(start, state, tracker, updating, artifacts);
this.listBlockStack.push(opcode);

@@ -249,18 +292,10 @@ this.didEnter(opcode);

VM.prototype.exit = function exit() {
this.frames.pop();
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
var parent = this.updating().tail();
parent.didInitializeChildren();
}
this.elements().popBlock();
this.updatingOpcodeStack.pop();
var parent = this.updating().tail();
parent.didInitializeChildren();
};
VM.prototype.exitList = function exitList() {
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
var parent = this.updating().tail();
parent.didInitializeChildren();
}
this.exit();
this.listBlockStack.pop();

@@ -281,3 +316,3 @@ };

VM.prototype.stack = function stack() {
VM.prototype.elements = function elements() {
return this.elementStack;

@@ -294,10 +329,2 @@ };

VM.prototype.pushFrame = function pushFrame(block) {
this.frames.push(block.start);
};
VM.prototype.pushEvalFrame = function pushEvalFrame(start) {
this.frames.push(start);
};
VM.prototype.pushChildScope = function pushChildScope() {

@@ -336,3 +363,3 @@ this.scopeStack.push(this.scope().child());

VM.prototype.newDestroyable = function newDestroyable(d) {
this.stack().newDestroyable(d);
this.elements().newDestroyable(d);
};

@@ -352,11 +379,5 @@ /// SCOPE HELPERS

VM.prototype.resume = function resume(start, stack, bp) {
return this.execute(start, function (vm) {
vm.evalStack = stack;
vm.bp = bp;
});
};
VM.prototype.execute = function execute(start, initialize) {
this.prepare(start, initialize);
this.pc = start;
if (initialize) initialize(this);
var result = void 0;

@@ -370,13 +391,2 @@ while (true) {

VM.prototype.prepare = function prepare(start, initialize) {
var elementStack = this.elementStack,
frames = this.frames,
updatingOpcodeStack = this.updatingOpcodeStack;
elementStack.pushSimpleBlock();
updatingOpcodeStack.push(new _util.LinkedList());
frames.push(start);
if (initialize) initialize(this);
};
VM.prototype.next = function next() {

@@ -388,2 +398,5 @@ var env = this.env,

var opcode = void 0;
if (i++ > 100000) {
throw "zomg";
}
if (opcode = this.nextStatement(env)) {

@@ -399,15 +412,11 @@ _opcodes.APPEND_OPCODES.evaluate(this, opcode, opcode.type);

VM.prototype.return = function _return() {
this.frames.pop();
};
VM.prototype.nextStatement = function nextStatement(env) {
var pc = this.pc;
VM.prototype.nextStatement = function nextStatement(env) {
if (this.frames.length === 0) {
if (pc === -1) {
return null;
}
var ip = this.ip;
var program = env.program;
this.ip += 4;
return program.opcode(ip);
this.pc += 4;
return program.opcode(pc);
};

@@ -419,19 +428,7 @@

VM.prototype.invoke = function invoke(compiled) {
this.pushFrame(compiled);
};
// Make sure you have opcodes that push and pop a scope around this opcode
// if you need to change the scope.
VM.prototype.invokeBlock = function invokeBlock(block) {
var compiled = block.compileStatic(this.env);
this.invoke(compiled);
};
VM.prototype.bindDynamicScope = function bindDynamicScope(names) {
var scope = this.dynamicScope();
for (var i = names.length - 1; i >= 0; i--) {
var name = this.constants.getString(names[i]);
scope.set(name, this.evalStack.pop());
for (var _i = names.length - 1; _i >= 0; _i--) {
var name = this.constants.getString(names[_i]);
scope.set(name, this.stack.pop());
}

@@ -441,9 +438,17 @@ };

_createClass(VM, [{
key: 'ip',
key: 'fp',
get: function () {
return this.frames[this.frames.length - 1];
return this.stack.fp;
},
set: function (val) {
this.frames[this.frames.length - 1] = val;
set: function (fp) {
this.stack.fp = fp;
}
}, {
key: 'sp',
get: function () {
return this.stack.sp;
},
set: function (sp) {
this.stack.sp = sp;
}
}]);

@@ -455,2 +460,2 @@

exports.default = VM;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBSyxBQUFxQyxBQUFNLEFBQWdCLEFBQUM7O0FBRTFFLEFBQU8sQUFBdUIsQUFBSyxBQUFFLEFBQVUsQUFBRSxBQUFTLEFBQVUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDOztBQUNsRyxBQUFPLEFBQTRELEFBQVksQUFBRSxBQUFNLEFBQW9CLEFBQUM7O0FBRzVHLEFBQU8sQUFBRSxBQUFXLEFBQUUsQUFBdUIsQUFBRSxBQUFlLEFBQUUsQUFBTSxBQUF3QixBQUFDOztBQUMvRixBQUFPLEFBQVcsQUFBZSxBQUFFLEFBQVMsQUFBZSxBQUFNLEFBQVUsQUFBQzs7QUFDNUUsQUFBTyxBQUFZLEFBQU0sQUFBaUIsQUFBQzs7OztBQUUzQyxBQUFPLEFBQ0wsQUFBYyxBQUVmLEFBQU0sQUFBWSxBQUFDLEFBY3BCLEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzREQUNKOztZQUFvQiw0RUFBa0IsQUFBRTs7OEJBQXBCOzthQUFLLFFBQUwsQUFBSyxBQUFlLEFBQ3RDLEFBQU07ZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDcEIsQUFBQyxBQUVELEFBQUksQUFBRzs7OzhCQUlQLEFBQVE7WUFBQyxBQUFJLDJFQUFHLEFBQUMsQUFDZixBQUFNOztlQUFDLElBQUksQUFBZSxnQkFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUssTUFBQyxDQUFDLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDdEQsQUFBQzs7OzhCQUVELEFBQU8sMkJBQUMsQUFBVSxJQUNoQixBQUFJO2FBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFFLEFBQUMsQUFDdkIsQUFBTTtlQUFDLEFBQUksS0FBQyxBQUFHLEFBQVUsQUFBQyxBQUM1QixBQUFDOzs7OEJBRUQsQUFBRyxtQkFBQyxBQUFXLEtBQUUsQUFBYSxPQUM1QixB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QUMxRSxBQUFtQzs7OztpQkFDbkMsQUFBVyxtQ0FBQyxBQUFlLE9BQ3pCO1lBQUksQUFBUSxXQUFHLEFBQUssTUFBQyxBQUFhLGNBQUMsQUFBSSxLQUFDLEFBQUcsQUFBQyxBQUFDLEFBQzdDLEFBQUk7YUFBQyxBQUFNLE9BQUMsQUFBUSxBQUFDLEFBQUMsQUFDeEIsQUFBQzs7O2lCQUVELEFBQWdCLDZDQUFDLEFBQXVCLE9BQ3RDO1lBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFZLEFBQUUsQUFBQyxBQUVoQyxBQUFHO2FBQUMsSUFBSSxBQUFDLElBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFDLEdBQUUsQUFBQyxLQUFFLEFBQUMsR0FBRSxBQUFDLEFBQUUsS0FBRSxBQUFDLEFBQ3RDO2dCQUFJLEFBQUksT0FBRyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBQyxBQUFDLEFBQUMsQUFBQyxBQUM5QyxBQUFLO2tCQUFDLEFBQUcsSUFBQyxBQUFJLE1BQUUsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFHLEFBQWtDLEFBQUMsQUFBQyxBQUN4RSxBQUFDLEFBQ0g7QUFBQyxBQUNGOzs7Ozt5QkE5VEcsQUFBTTttQkFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBTSxTQUFHLEFBQUMsQUFBRSxBQUFDLEFBQzlDLEFBQUMsQUFFRCxBQUFZLEFBQUU7O3VCQUFDLEFBQVcsS0FDeEIsQUFBSTtpQkFBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFNLFNBQUcsQUFBQyxBQUFDLEtBQUcsQUFBRyxBQUFDLEFBQzVDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCwgT3Bjb2RlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPcHRpb24sIERlc3Ryb3lhYmxlLCBTdGFjaywgTGlua2VkTGlzdCwgTGlzdFNsaWNlLCBPcGFxdWUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlSXRlcmF0b3IsIFBhdGhSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsIGNvbWJpbmVTbGljZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBDb21waWxlZER5bmFtaWNQcm9ncmFtLCBPcFNsaWNlIH0gZnJvbSAnLi4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vc2Nhbm5lcic7XG5pbXBvcnQgeyBMYWJlbE9wY29kZSwgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUsIERpZE1vZGlmeU9wY29kZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvdm0nO1xuaW1wb3J0IHsgVk1TdGF0ZSwgTGlzdEJsb2NrT3Bjb2RlLCBUcnlPcGNvZGUsIEJsb2NrT3Bjb2RlIH0gZnJvbSAnLi91cGRhdGUnO1xuaW1wb3J0IFJlbmRlclJlc3VsdCBmcm9tICcuL3JlbmRlci1yZXN1bHQnO1xuXG5pbXBvcnQge1xuICBBUFBFTkRfT1BDT0RFUyxcbiAgVXBkYXRpbmdPcGNvZGVcbn0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7XG4gIENvbnN0YW50cyxcbiAgQ29uc3RhbnRTdHJpbmdcbn0gZnJvbSAnLi4vZW52aXJvbm1lbnQvY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNWTSB7XG4gIGVudjogRW52aXJvbm1lbnQ7XG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGU7XG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmFsdWF0aW9uU3RhY2sge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YWNrOiBPcGFxdWVbXSA9IFtdKSB7XG4gICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gIH1cblxuICBnZXQgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLmxlbmd0aDtcbiAgfVxuXG4gIHNuYXBzaG90KGFyZ3MgPSAwKTogRXZhbHVhdGlvblN0YWNrIHtcbiAgICByZXR1cm4gbmV3IEV2YWx1YXRpb25TdGFjayh0aGlzLnN0YWNrLnNsaWNlKC1hcmdzKSk7XG4gIH1cblxuICByZXN0b3JlKGJwOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMuc3RhY2subGVuZ3RoID0gYnA7XG4gICAgcmV0dXJuIHRoaXMucG9wPG51bWJlcj4oKTtcbiAgfVxuXG4gIHNldChwb3M6IG51bWJlciwgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHRoaXMuc3RhY2tbcG9zXSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0KHBvczogbnVtYmVyKTogT3BhcXVlIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1twb3NdO1xuICB9XG5cbiAgcHVzaCh2YWx1ZTogT3BhcXVlKTogdm9pZCB7XG4gICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIGR1cCgpOiB2b2lkIHtcbiAgICB0aGlzLnB1c2godGhpcy5mcm9tVG9wKDApKTtcbiAgfVxuXG4gIHBvcDxUPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKSBhcyBUO1xuICB9XG5cbiAgdG9wPFQ+KCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV0gYXMgVDtcbiAgfVxuXG4gIGZyb21Ub3A8VD4ocG9zOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDEgLSBwb3NdIGFzIFQ7XG4gIH1cblxuICBzbGljZTxUIGV4dGVuZHMgT3BhcXVlW10+KGNvdW50OiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZSh0aGlzLnN0YWNrLmxlbmd0aCAtIGNvdW50KSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEl0ZXJhdG9yUmVzdWx0PFQ+ID0ge1xuICBkb25lOiBmYWxzZTtcbiAgdmFsdWU6IG51bGw7XG59IHwge1xuICBkb25lOiB0cnVlO1xuICB2YWx1ZTogVDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZNIGltcGxlbWVudHMgUHVibGljVk0ge1xuICBwcml2YXRlIGR5bmFtaWNTY29wZVN0YWNrID0gbmV3IFN0YWNrPER5bmFtaWNTY29wZT4oKTtcbiAgcHJpdmF0ZSBzY29wZVN0YWNrID0gbmV3IFN0YWNrPFNjb3BlPigpO1xuICBwcml2YXRlIGJwID0gMDtcbiAgcHVibGljIHVwZGF0aW5nT3Bjb2RlU3RhY2sgPSBuZXcgU3RhY2s8TGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4+KCk7XG4gIHB1YmxpYyBjYWNoZUdyb3VwcyA9IG5ldyBTdGFjazxPcHRpb248VXBkYXRpbmdPcGNvZGU+PigpO1xuICBwdWJsaWMgbGlzdEJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8TGlzdEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgZnJhbWVzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG4gIHB1YmxpYyBldmFsU3RhY2sgPSBuZXcgRXZhbHVhdGlvblN0YWNrKCk7XG5cbiAgc3RhdGljIGluaXRpYWwoXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzZWxmOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICAgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2ssXG4gICAgcHJvZ3JhbTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbVxuICApIHtcbiAgICBsZXQgc2NvcGUgPSBTY29wZS5yb290KHNlbGYsIHByb2dyYW0uc3ltYm9sVGFibGUuc3ltYm9scy5sZW5ndGgpO1xuICAgIGxldCB2bSA9IG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gICAgdm0ucHJlcGFyZShwcm9ncmFtLnN0YXJ0KTtcbiAgICByZXR1cm4gdm07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzY29wZTogU2NvcGUsXG4gICAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICAgcHJpdmF0ZSBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjayxcbiAgKSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZWxlbWVudFN0YWNrID0gZWxlbWVudFN0YWNrO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVzLmxlbmd0aCAtIDFdITtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGlwKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5mcmFtZXNbdGhpcy5mcmFtZXMubGVuZ3RoIC0gMV0gPSB2YWw7XG4gIH1cblxuICBjYXB0dXJlKGFyZ3M6IG51bWJlcik6IFZNU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUoKSxcbiAgICAgIGR5bmFtaWNTY29wZTogdGhpcy5keW5hbWljU2NvcGUoKSxcbiAgICAgIHN0YWNrOiB0aGlzLmV2YWxTdGFjay5zbmFwc2hvdChhcmdzKSxcbiAgICAgIGJwOiB0aGlzLmJwXG4gICAgfTtcbiAgfVxuXG4gIHJlc2VydmVMb2NhbHMoc2l6ZTogbnVtYmVyKSB7XG4gICAgbGV0IHsgZXZhbFN0YWNrOiBzdGFjaywgYnAgfSA9IHRoaXM7XG5cbiAgICBzdGFjay5wdXNoKGJwKTtcbiAgICB0aGlzLmJwID0gc3RhY2sucG9zO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPHNpemU7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChudWxsKTtcbiAgICB9XG4gIH1cblxuICByZWxlYXNlTG9jYWxzKCkge1xuICAgIGxldCB7IGV2YWxTdGFjazogc3RhY2ssIGJwIH0gPSB0aGlzO1xuICAgIHRoaXMuYnAgPSBzdGFjay5yZXN0b3JlKGJwKTtcbiAgfVxuXG4gIHNldExvY2FsKHBvc2l0aW9uOiBudW1iZXIsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICB0aGlzLmV2YWxTdGFjay5zZXQodGhpcy5icCArIHBvc2l0aW9uLCB2YWx1ZSk7XG4gIH1cblxuICBnZXRMb2NhbDxUPihwb3NpdGlvbjogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuZXZhbFN0YWNrLmdldCh0aGlzLmJwICsgcG9zaXRpb24pIGFzIFQ7XG4gIH1cblxuICBnb3RvKGlwOiBudW1iZXIpIHtcbiAgICB0aGlzLmlwID0gaXA7XG4gIH1cblxuICBiZWdpbkNhY2hlR3JvdXAoKSB7XG4gICAgdGhpcy5jYWNoZUdyb3Vwcy5wdXNoKHRoaXMudXBkYXRpbmcoKS50YWlsKCkpO1xuICB9XG5cbiAgY29tbWl0Q2FjaGVHcm91cCgpIHtcbiAgICAvLyAgICAgICAgSnVtcElmTm90TW9kaWZpZWQoRU5EKVxuICAgIC8vICAgICAgICAoaGVhZClcbiAgICAvLyAgICAgICAgKC4uLi4pXG4gICAgLy8gICAgICAgICh0YWlsKVxuICAgIC8vICAgICAgICBEaWRNb2RpZnlcbiAgICAvLyBFTkQ6ICAgTm9vcFxuXG4gICAgbGV0IEVORCA9IG5ldyBMYWJlbE9wY29kZShcIkVORFwiKTtcblxuICAgIGxldCBvcGNvZGVzID0gdGhpcy51cGRhdGluZygpO1xuICAgIGxldCBtYXJrZXIgPSB0aGlzLmNhY2hlR3JvdXBzLnBvcCgpO1xuICAgIGxldCBoZWFkID0gbWFya2VyID8gb3Bjb2Rlcy5uZXh0Tm9kZShtYXJrZXIpIDogb3Bjb2Rlcy5oZWFkKCk7XG4gICAgbGV0IHRhaWwgPSBvcGNvZGVzLnRhaWwoKTtcbiAgICBsZXQgdGFnID0gY29tYmluZVNsaWNlKG5ldyBMaXN0U2xpY2UoaGVhZCwgdGFpbCkpO1xuXG4gICAgbGV0IGd1YXJkID0gbmV3IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKHRhZywgRU5EKTtcblxuICAgIG9wY29kZXMuaW5zZXJ0QmVmb3JlKGd1YXJkLCBoZWFkKTtcbiAgICBvcGNvZGVzLmFwcGVuZChuZXcgRGlkTW9kaWZ5T3Bjb2RlKGd1YXJkKSk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQoRU5EKTtcbiAgfVxuXG4gIGVudGVyKGFyZ3M6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZShhcmdzKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuc3RhY2soKS5wdXNoVXBkYXRhYmxlQmxvY2soKTtcblxuICAgIGxldCB0cnlPcGNvZGUgPSBuZXcgVHJ5T3Bjb2RlKHN0YXJ0LCBlbmQsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG5cbiAgICBsZXQgaXAgPSB0aGlzLmlwO1xuICAgIHRoaXMuaXAgPSBlbmQgKyA0O1xuICAgIHRoaXMuZnJhbWVzLnB1c2goaXApO1xuXG4gICAgdGhpcy5kaWRFbnRlcih0cnlPcGNvZGUpO1xuICB9XG5cbiAgaXRlcmF0ZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgbWVtbzogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB2YWx1ZTogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTogVHJ5T3Bjb2RlIHtcbiAgICBsZXQgc3RhY2sgPSB0aGlzLmV2YWxTdGFjaztcbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcbiAgICBzdGFjay5wdXNoKG1lbW8pO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKDIpO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuXG4gICAgbGV0IGlwID0gdGhpcy5pcDtcbiAgICB0aGlzLmlwID0gZW5kICsgNDtcbiAgICB0aGlzLmZyYW1lcy5wdXNoKGlwKTtcblxuICAgIHJldHVybiBuZXcgVHJ5T3Bjb2RlKHN0YXJ0LCBlbmQsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG4gIH1cblxuICBlbnRlckl0ZW0oa2V5OiBzdHJpbmcsIG9wY29kZTogVHJ5T3Bjb2RlKSB7XG4gICAgdGhpcy5saXN0QmxvY2soKS5tYXBba2V5XSA9IG9wY29kZTtcbiAgICB0aGlzLmRpZEVudGVyKG9wY29kZSk7XG4gIH1cblxuICBlbnRlckxpc3Qoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxCbG9ja09wY29kZT4oKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgxKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuc3RhY2soKS5wdXNoQmxvY2tMaXN0KHVwZGF0aW5nKTtcbiAgICBsZXQgYXJ0aWZhY3RzID0gdGhpcy5ldmFsU3RhY2sudG9wPFJlZmVyZW5jZUl0ZXJhdG9yPigpLmFydGlmYWN0cztcblxuICAgIGxldCBvcGNvZGUgPSBuZXcgTGlzdEJsb2NrT3Bjb2RlKHN0YXJ0LCBlbmQsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZywgYXJ0aWZhY3RzKTtcblxuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucHVzaChvcGNvZGUpO1xuXG4gICAgdGhpcy5kaWRFbnRlcihvcGNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaWRFbnRlcihvcGNvZGU6IEJsb2NrT3Bjb2RlKSB7XG4gICAgdGhpcy51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnB1c2gob3Bjb2RlLmNoaWxkcmVuKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5mcmFtZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy5mcmFtZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrKCkucG9wQmxvY2soKTtcbiAgICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKTtcblxuICAgICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmcoKS50YWlsKCkgYXMgQmxvY2tPcGNvZGU7XG5cbiAgICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICB9XG4gIH1cblxuICBleGl0TGlzdCgpIHtcbiAgICBpZiAodGhpcy5mcmFtZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrKCkucG9wQmxvY2soKTtcbiAgICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKTtcblxuICAgICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmcoKS50YWlsKCkgYXMgQmxvY2tPcGNvZGU7XG5cbiAgICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnBvcCgpO1xuICB9XG5cbiAgdXBkYXRlV2l0aChvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy51cGRhdGluZygpLmFwcGVuZChvcGNvZGUpO1xuICB9XG5cbiAgbGlzdEJsb2NrKCk6IExpc3RCbG9ja09wY29kZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBhIGxpc3QgYmxvY2snKTtcbiAgfVxuXG4gIHVwZGF0aW5nKCk6IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+IHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgdXBkYXRpbmcgb3Bjb2RlIG9uIHRoZSB1cGRhdGluZyBvcGNvZGUgc3RhY2snKTtcbiAgfVxuXG4gIHN0YWNrKCk6IEVsZW1lbnRTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFN0YWNrO1xuICB9XG5cbiAgc2NvcGUoKTogU2NvcGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5zY29wZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBzY29wZSBvbiB0aGUgc2NvcGUgc3RhY2snKTtcbiAgfVxuXG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5keW5hbWljU2NvcGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgZHluYW1pYyBzY29wZSBvbiB0aGUgZHluYW1pYyBzY29wZSBzdGFjaycpO1xuICB9XG5cbiAgcHVzaEZyYW1lKGJsb2NrOiBPcFNsaWNlKSB7XG4gICAgdGhpcy5mcmFtZXMucHVzaChibG9jay5zdGFydCk7XG4gIH1cblxuICBwdXNoRXZhbEZyYW1lKHN0YXJ0OiBudW1iZXIpIHtcbiAgICB0aGlzLmZyYW1lcy5wdXNoKHN0YXJ0KTtcbiAgfVxuXG4gIHB1c2hDaGlsZFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHRoaXMuc2NvcGUoKS5jaGlsZCgpKTtcbiAgfVxuXG4gIHB1c2hDYWxsZXJTY29wZShjaGlsZFNjb3BlID0gZmFsc2UpIHtcbiAgICBsZXQgY2FsbGVyU2NvcGUgPSBleHBlY3QodGhpcy5zY29wZSgpLmdldENhbGxlclNjb3BlKCksICdwdXNoQ2FsbGVyU2NvcGUgaXMgY2FsbGVkIHdoZW4gYSBjYWxsZXIgc2NvcGUgaXMgcHJlc2VudCcpO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKGNoaWxkU2NvcGUgPyBjYWxsZXJTY29wZS5jaGlsZCgpIDogY2FsbGVyU2NvcGUpO1xuICB9XG5cbiAgcHVzaER5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZHluYW1pY1Njb3BlKCkuY2hpbGQoKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHB1c2hSb290U2NvcGUoc2l6ZTogbnVtYmVyLCBiaW5kQ2FsbGVyOiBib29sZWFuKTogU2NvcGUge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnNpemVkKHNpemUpO1xuICAgIGlmIChiaW5kQ2FsbGVyKSBzY29wZS5iaW5kQ2FsbGVyU2NvcGUodGhpcy5zY29wZSgpKTtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChzY29wZSk7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgcG9wU2NvcGUoKSB7XG4gICAgdGhpcy5zY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgcG9wRHluYW1pY1Njb3BlKCkge1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucG9wKCk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuc3RhY2soKS5uZXdEZXN0cm95YWJsZShkKTtcbiAgfVxuXG4gIC8vLyBTQ09QRSBIRUxQRVJTXG5cbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNjb3BlKCkuZ2V0U2VsZigpO1xuICB9XG5cbiAgcmVmZXJlbmNlRm9yU3ltYm9sKHN5bWJvbDogbnVtYmVyKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFN5bWJvbChzeW1ib2wpO1xuICB9XG5cbiAgLy8vIEVYRUNVVElPTlxuXG4gIHJlc3VtZShzdGFydDogbnVtYmVyLCBzdGFjazogRXZhbHVhdGlvblN0YWNrLCBicDogbnVtYmVyKTogUmVuZGVyUmVzdWx0IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICB2bS5ldmFsU3RhY2sgPSBzdGFjaztcbiAgICAgIHZtLmJwID0gYnA7XG4gICAgfSk7XG4gIH1cblxuICBleGVjdXRlKHN0YXJ0OiBudW1iZXIsIGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTogUmVuZGVyUmVzdWx0IHtcbiAgICB0aGlzLnByZXBhcmUoc3RhcnQsIGluaXRpYWxpemUpO1xuICAgIGxldCByZXN1bHQ6IEl0ZXJhdG9yUmVzdWx0PFJlbmRlclJlc3VsdD47XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5uZXh0KCk7XG4gICAgICBpZiAocmVzdWx0LmRvbmUpIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQudmFsdWUgYXMgUmVuZGVyUmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlKHN0YXJ0OiBudW1iZXIsIGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IHsgZWxlbWVudFN0YWNrLCBmcmFtZXMsIHVwZGF0aW5nT3Bjb2RlU3RhY2sgfSA9IHRoaXM7XG5cbiAgICBlbGVtZW50U3RhY2sucHVzaFNpbXBsZUJsb2NrKCk7XG5cbiAgICB1cGRhdGluZ09wY29kZVN0YWNrLnB1c2gobmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpO1xuXG4gICAgZnJhbWVzLnB1c2goc3RhcnQpO1xuXG4gICAgaWYgKGluaXRpYWxpemUpIGluaXRpYWxpemUodGhpcyk7XG4gIH1cblxuICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PFJlbmRlclJlc3VsdD4ge1xuICAgIGxldCB7IGVudiwgdXBkYXRpbmdPcGNvZGVTdGFjaywgZWxlbWVudFN0YWNrIH0gPSB0aGlzO1xuICAgIGxldCBvcGNvZGU6IE9wdGlvbjxPcGNvZGU+O1xuXG4gICAgaWYgKG9wY29kZSA9IHRoaXMubmV4dFN0YXRlbWVudChlbnYpKSB7XG4gICAgICBBUFBFTkRfT1BDT0RFUy5ldmFsdWF0ZSh0aGlzLCBvcGNvZGUsIG9wY29kZS50eXBlKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogbnVsbCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkb25lOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ldyBSZW5kZXJSZXN1bHQoXG4gICAgICAgIGVudixcbiAgICAgICAgZXhwZWN0KHVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCksICd0aGVyZSBzaG91bGQgYmUgYSBmaW5hbCB1cGRhdGluZyBvcGNvZGUgc3RhY2snKSxcbiAgICAgICAgZWxlbWVudFN0YWNrLnBvcEJsb2NrKClcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVzLnBvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0U3RhdGVtZW50KGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248T3Bjb2RlPiB7XG4gICAgaWYgKHRoaXMuZnJhbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHsgaXAgfSA9IHRoaXM7XG4gICAgbGV0IHByb2dyYW0gPSBlbnYucHJvZ3JhbTtcbiAgICB0aGlzLmlwICs9IDQ7XG4gICAgcmV0dXJuIHByb2dyYW0ub3Bjb2RlKGlwKTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogT3Bjb2RlKSB7XG4gICAgQVBQRU5EX09QQ09ERVMuZXZhbHVhdGUodGhpcywgb3Bjb2RlLCBvcGNvZGUudHlwZSk7XG4gIH1cblxuICBpbnZva2UoY29tcGlsZWQ6IE9wU2xpY2UpIHtcbiAgICB0aGlzLnB1c2hGcmFtZShjb21waWxlZCk7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgeW91IGhhdmUgb3Bjb2RlcyB0aGF0IHB1c2ggYW5kIHBvcCBhIHNjb3BlIGFyb3VuZCB0aGlzIG9wY29kZVxuICAvLyBpZiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIHNjb3BlLlxuICBpbnZva2VCbG9jayhibG9jazogVGVtcGxhdGUpIHtcbiAgICBsZXQgY29tcGlsZWQgPSBibG9jay5jb21waWxlU3RhdGljKHRoaXMuZW52KTtcbiAgICB0aGlzLmludm9rZShjb21waWxlZCk7XG4gIH1cblxuICBiaW5kRHluYW1pY1Njb3BlKG5hbWVzOiBDb25zdGFudFN0cmluZ1tdKSB7XG4gICAgbGV0IHNjb3BlID0gdGhpcy5keW5hbWljU2NvcGUoKTtcblxuICAgIGZvcihsZXQgaT1uYW1lcy5sZW5ndGggLSAxOyBpPj0wOyBpLS0pIHtcbiAgICAgIGxldCBuYW1lID0gdGhpcy5jb25zdGFudHMuZ2V0U3RyaW5nKG5hbWVzW2ldKTtcbiAgICAgIHNjb3BlLnNldChuYW1lLCB0aGlzLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBUSxBQUFFLEFBQU0sQUFBWSxBQUFDOztBQUN0QyxBQUFPLEFBQUUsQUFBSyxBQUFxQyxBQUFNLEFBQWdCLEFBQUM7O0FBRTFFLEFBQU8sQUFBdUIsQUFBSyxBQUFFLEFBQVUsQUFBRSxBQUFTLEFBQWtCLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFDMUcsQUFBTyxBQUE0RCxBQUFZLEFBQUUsQUFBTSxBQUFvQixBQUFDOztBQUU1RyxBQUFPLEFBQUUsQUFBVyxBQUFFLEFBQXVCLEFBQUUsQUFBZSxBQUFFLEFBQU0sQUFBd0IsQUFBQzs7QUFDL0YsQUFBTyxBQUFXLEFBQWUsQUFBRSxBQUFTLEFBQWUsQUFBTSxBQUFVLEFBQUM7O0FBQzVFLEFBQU8sQUFBWSxBQUFNLEFBQWlCLEFBQUMsQUFFM0MsQUFBTyxBQUNMLEFBQWMsQUFFZixBQUFNLEFBQVksQUFBQyxBQWdCcEIsQUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0REFTSjs2QkFBb0IsQUFBZSxPQUFTLEFBQVUsSUFBUyxBQUFVOzhCQUFyRDs7YUFBSyxRQUFMLEFBQUssQUFBVSxBQUFTO2FBQUUsS0FBRixBQUFFLEFBQVEsQUFBUzthQUFFLEtBQUYsQUFBRSxBQUFRLEFBQ3ZFLEFBQU07ZUFBQyxBQUFJLEtBVGIsQUFBTSxBQVNRLEFBQUksQUFBQyxBQUFDLEFBQ3BCLEFBQUM7OztvQkFWTSxBQUFLLHlCQUNWLEFBQU07ZUFBQyxJQUFJLEFBQUksS0FBQyxBQUFFLElBQUUsQUFBQyxHQUFFLENBQUMsQUFBQyxBQUFDLEFBQUMsQUFDN0IsQUFBQyxBQUVELEFBQU07OztvQkFBQyxBQUFPLDJCQUFDLEFBQXVCLFVBQ3BDLEFBQU07ZUFBQyxJQUFJLEFBQUksS0FBQyxBQUFRLFNBQUMsQUFBSyxBQUFFLFNBQUUsQUFBQyxHQUFF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QUksT0FBRyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBQyxBQUFDLEFBQUMsQUFBQyxBQUM5QyxBQUFLO2tCQUFDLEFBQUcsSUFBQyxBQUFJLE1BQUUsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFHLEFBQWtDLEFBQUMsQUFBQyxBQUNwRSxBQUFDLEFBQ0g7QUFBQyxBQUNGOzs7Ozt5QkFuVkcsQUFBTTttQkFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUUsQUFBQyxBQUN2QixBQUFDLEFBRUQsQUFBWSxBQUFFOzt1QkFBQyxBQUFVLElBQ3ZCLEFBQUk7aUJBQUMsQUFBSyxNQUFDLEFBQUUsS0FBRyxBQUFFLEFBQUMsQUFDckIsQUFBQyxBQUVELEFBQVksQUFBRTs7Ozt5QkFDWixBQUFNO21CQUFDLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBRSxBQUFDLEFBQ3ZCLEFBQUMsQUFFRCxBQUFZLEFBQUU7O3VCQUFDLEFBQVUsSUFDdkIsQUFBSTtpQkFBQyxBQUFLLE1BQUMsQUFBRSxLQUFHLEFBQUUsQUFBQyxBQUNyQixBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVnaXN0ZXIgfSBmcm9tICcuLi9vcGNvZGVzJztcbmltcG9ydCB7IFNjb3BlLCBEeW5hbWljU2NvcGUsIEVudmlyb25tZW50LCBPcGNvZGUgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBFbGVtZW50U3RhY2sgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IE9wdGlvbiwgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaXN0U2xpY2UsIE9wYXF1ZSwgYXNzZXJ0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFJlZmVyZW5jZUl0ZXJhdG9yLCBQYXRoUmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlLCBjb21iaW5lU2xpY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB9IGZyb20gJy4uL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBMYWJlbE9wY29kZSwgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUsIERpZE1vZGlmeU9wY29kZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvdm0nO1xuaW1wb3J0IHsgVk1TdGF0ZSwgTGlzdEJsb2NrT3Bjb2RlLCBUcnlPcGNvZGUsIEJsb2NrT3Bjb2RlIH0gZnJvbSAnLi91cGRhdGUnO1xuaW1wb3J0IFJlbmRlclJlc3VsdCBmcm9tICcuL3JlbmRlci1yZXN1bHQnO1xuXG5pbXBvcnQge1xuICBBUFBFTkRfT1BDT0RFUyxcbiAgVXBkYXRpbmdPcGNvZGVcbn0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7XG4gIENvbnN0YW50cyxcbiAgQ29uc3RhbnRTdHJpbmdcbn0gZnJvbSAnLi4vZW52aXJvbm1lbnQvY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNWTSB7XG4gIGVudjogRW52aXJvbm1lbnQ7XG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGU7XG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIENhcHR1cmVkU3RhY2sgPSBPcGFxdWVbXTtcblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRpb25TdGFjayB7XG4gIHN0YXRpYyBlbXB0eSgpOiBFdmFsdWF0aW9uU3RhY2sge1xuICAgIHJldHVybiBuZXcgdGhpcyhbXSwgMCwgLTEpO1xuICB9XG5cbiAgc3RhdGljIHJlc3RvcmUoc25hcHNob3Q6IENhcHR1cmVkU3RhY2spOiBFdmFsdWF0aW9uU3RhY2sge1xuICAgIHJldHVybiBuZXcgdGhpcyhzbmFwc2hvdC5zbGljZSgpLCAwLCBzbmFwc2hvdC5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RhY2s6IE9wYXF1ZVtdLCBwdWJsaWMgZnA6IG51bWJlciwgcHVibGljIHNwOiBudW1iZXIpIHtcbiAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3AgPT09IC0xO1xuICB9XG5cbiAgcHVzaCh2YWx1ZTogT3BhcXVlKTogdm9pZCB7XG4gICAgdGhpcy5zdGFja1srK3RoaXMuc3BdID0gdmFsdWU7XG4gIH1cblxuICBkdXAocG9zaXRpb24gPSB0aGlzLnNwKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKHRoaXMuc3RhY2tbcG9zaXRpb25dKTtcbiAgfVxuXG4gIHBvcDxUPihuID0gMSk6IFQge1xuICAgIGxldCB0b3AgPSB0aGlzLnN0YWNrW3RoaXMuc3BdIGFzIFQ7XG4gICAgdGhpcy5zcCAtPSBuO1xuICAgIHJldHVybiB0b3A7XG4gIH1cblxuICBwZWVrPFQ+KCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuc3BdIGFzIFQ7XG4gIH1cblxuICBmcm9tQmFzZTxUPihvZmZzZXQ6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuZnAgLSBvZmZzZXRdIGFzIFQ7XG4gIH1cblxuICBmcm9tVG9wPFQ+KG9mZnNldDogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zcCAtIG9mZnNldF0gYXMgVDtcbiAgfVxuXG4gIGNhcHR1cmUoaXRlbXM6IG51bWJlcik6IENhcHR1cmVkU3RhY2sge1xuICAgIGxldCBlbmQgPSB0aGlzLnNwICsgMTtcbiAgICBsZXQgc3RhcnQgPSBlbmQgLSBpdGVtcztcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc2xpY2UodGhpcy5mcCwgdGhpcy5zcCArIDEpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEl0ZXJhdG9yUmVzdWx0PFQ+ID0ge1xuICBkb25lOiBmYWxzZTtcbiAgdmFsdWU6IG51bGw7XG59IHwge1xuICBkb25lOiB0cnVlO1xuICB2YWx1ZTogVDtcbn07XG5cbmxldCBpID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVk0gaW1wbGVtZW50cyBQdWJsaWNWTSB7XG4gIHByaXZhdGUgZHluYW1pY1Njb3BlU3RhY2sgPSBuZXcgU3RhY2s8RHluYW1pY1Njb3BlPigpO1xuICBwcml2YXRlIHNjb3BlU3RhY2sgPSBuZXcgU3RhY2s8U2NvcGU+KCk7XG4gIHB1YmxpYyB1cGRhdGluZ09wY29kZVN0YWNrID0gbmV3IFN0YWNrPExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+PigpO1xuICBwdWJsaWMgY2FjaGVHcm91cHMgPSBuZXcgU3RhY2s8T3B0aW9uPFVwZGF0aW5nT3Bjb2RlPj4oKTtcbiAgcHVibGljIGxpc3RCbG9ja1N0YWNrID0gbmV3IFN0YWNrPExpc3RCbG9ja09wY29kZT4oKTtcbiAgcHVibGljIGNvbnN0YW50czogQ29uc3RhbnRzO1xuXG4gIHB1YmxpYyBzdGFjayA9IEV2YWx1YXRpb25TdGFjay5lbXB0eSgpO1xuXG4gIC8qKiBSZWdpc3RlcnMgKiovXG5cbiAgcHJpdmF0ZSBwYyA9IC0xO1xuICBwcml2YXRlIHJhID0gLTE7XG5cbiAgcHJpdmF0ZSBnZXQgZnAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5mcDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGZwKGZwOiBudW1iZXIpIHtcbiAgICB0aGlzLnN0YWNrLmZwID0gZnA7XG4gIH1cblxuICBwcml2YXRlIGdldCBzcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNwO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgc3Aoc3A6IG51bWJlcikge1xuICAgIHRoaXMuc3RhY2suc3AgPSBzcDtcbiAgfVxuXG4gIHB1YmxpYyBzMDogYW55ID0gbnVsbDtcbiAgcHVibGljIHMxOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgdDA6IGFueSA9IG51bGw7XG4gIHB1YmxpYyB0MTogYW55ID0gbnVsbDtcblxuICAvLyBGZXRjaCBhIHZhbHVlIGZyb20gYSByZWdpc3RlciBvbnRvIHRoZSBzdGFja1xuICBmZXRjaChyZWdpc3RlcjogUmVnaXN0ZXIpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godGhpc1tSZWdpc3RlcltyZWdpc3Rlcl1dKTtcbiAgfVxuXG4gIC8vIExvYWQgYSB2YWx1ZSBmcm9tIHRoZSBzdGFjayBpbnRvIGEgcmVnaXN0ZXJcbiAgbG9hZChyZWdpc3RlcjogUmVnaXN0ZXIpIHtcbiAgICB0aGlzW1JlZ2lzdGVyW3JlZ2lzdGVyXV0gPSB0aGlzLnN0YWNrLnBvcCgpO1xuICB9XG5cbiAgLy8gRmV0Y2ggYSB2YWx1ZSBmcm9tIGEgcmVnaXN0ZXJcbiAgZmV0Y2hWYWx1ZTxUPihyZWdpc3RlcjogUmVnaXN0ZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpc1tSZWdpc3RlcltyZWdpc3Rlcl1dO1xuICB9XG5cbiAgLy8gTG9hZCBhIHZhbHVlIGludG8gYSByZWdpc3RlclxuICBsb2FkVmFsdWU8VD4ocmVnaXN0ZXI6IFJlZ2lzdGVyLCB2YWx1ZTogVCkge1xuICAgIHRoaXNbUmVnaXN0ZXJbcmVnaXN0ZXJdXSA9IHZhbHVlO1xuICB9XG5cbiAgLy8gU3RhcnQgYSBuZXcgZnJhbWUgYW5kIHNhdmUgJHJhIGFuZCAkZnAgb24gdGhlIHN0YWNrXG4gIHB1c2hGcmFtZSgpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godGhpcy5yYSk7XG4gICAgdGhpcy5zdGFjay5wdXNoKHRoaXMuZnApO1xuICAgIHRoaXMuZnAgPSB0aGlzLnNwIC0gMTtcbiAgICAvLyB0aGlzLmZwID0gdGhpcy5zcCArIDE7XG4gIH1cblxuICAvLyBSZXN0b3JlICRyYSwgJHNwIGFuZCAkZnBcbiAgcG9wRnJhbWUoKSB7XG4gICAgdGhpcy5zcCA9IHRoaXMuZnAgLSAxO1xuICAgIHRoaXMucmEgPSB0aGlzLnN0YWNrLmZyb21CYXNlPG51bWJlcj4oMCk7XG4gICAgdGhpcy5mcCA9IHRoaXMuc3RhY2suZnJvbUJhc2U8bnVtYmVyPigtMSk7XG4gIH1cblxuICAvLyBKdW1wIHRvIGFuIGFkZHJlc3MgaW4gYHByb2dyYW1gXG4gIGdvdG8ocGM6IG51bWJlcikge1xuICAgIHRoaXMucGMgPSBwYztcbiAgfVxuXG4gIC8vIFNhdmUgJHBjIGludG8gJHJhLCB0aGVuIGp1bXAgdG8gYSBuZXcgYWRkcmVzcyBpbiBgcHJvZ3JhbWAgKGphbCBpbiBNSVBTKVxuICBjYWxsKHBjOiBudW1iZXIpIHtcbiAgICB0aGlzLnJhID0gdGhpcy5wYztcbiAgICB0aGlzLnBjID0gcGM7XG4gIH1cblxuICAvLyBQdXQgYSBzcGVjaWZpYyBgcHJvZ3JhbWAgYWRkcmVzcyBpbiAkcmFcbiAgcmV0dXJuVG8ocmE6IG51bWJlcikge1xuICAgIHRoaXMucmEgPSByYTtcbiAgfVxuXG4gIC8vIFJldHVybiB0byB0aGUgYHByb2dyYW1gIGFkZHJlc3Mgc3RvcmVkIGluICRyYVxuICByZXR1cm4oKSB7XG4gICAgaWYgKHRoaXMucGMgPT09ICh0aGlzLnJhICsgNCkpIHtcbiAgICAgIHRocm93IFwiWk9NR1wiO1xuICAgIH1cblxuICAgIHRoaXMucGMgPSB0aGlzLnJhO1xuICB9XG5cbiAgc3RhdGljIGluaXRpYWwoXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzZWxmOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICAgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2ssXG4gICAgcHJvZ3JhbTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbVxuICApIHtcbiAgICBsZXQgc2NvcGUgPSBTY29wZS5yb290KHNlbGYsIHByb2dyYW0uc3ltYm9sVGFibGUuc3ltYm9scy5sZW5ndGgpO1xuICAgIGxldCB2bSA9IG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gICAgdm0ucGMgPSBwcm9ncmFtLnN0YXJ0O1xuICAgIHZtLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaChuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKSk7XG4gICAgcmV0dXJuIHZtO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVudjogRW52aXJvbm1lbnQsXG4gICAgc2NvcGU6IFNjb3BlLFxuICAgIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICAgIHByaXZhdGUgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2ssXG4gICkge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuY29uc3RhbnRzID0gZW52LmNvbnN0YW50cztcbiAgICB0aGlzLmVsZW1lbnRTdGFjayA9IGVsZW1lbnRTdGFjaztcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChzY29wZSk7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGR5bmFtaWNTY29wZSk7XG4gIH1cblxuICBjYXB0dXJlKGFyZ3M6IG51bWJlcik6IFZNU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUoKSxcbiAgICAgIGR5bmFtaWNTY29wZTogdGhpcy5keW5hbWljU2NvcGUoKSxcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLmNhcHR1cmUoYXJncylcbiAgICB9O1xuICB9XG5cbiAgYmVnaW5DYWNoZUdyb3VwKCkge1xuICAgIHRoaXMuY2FjaGVHcm91cHMucHVzaCh0aGlzLnVwZGF0aW5nKCkudGFpbCgpKTtcbiAgfVxuXG4gIGNvbW1pdENhY2hlR3JvdXAoKSB7XG4gICAgLy8gICAgICAgIEp1bXBJZk5vdE1vZGlmaWVkKEVORClcbiAgICAvLyAgICAgICAgKGhlYWQpXG4gICAgLy8gICAgICAgICguLi4uKVxuICAgIC8vICAgICAgICAodGFpbClcbiAgICAvLyAgICAgICAgRGlkTW9kaWZ5XG4gICAgLy8gRU5EOiAgIE5vb3BcblxuICAgIGxldCBFTkQgPSBuZXcgTGFiZWxPcGNvZGUoXCJFTkRcIik7XG5cbiAgICBsZXQgb3Bjb2RlcyA9IHRoaXMudXBkYXRpbmcoKTtcbiAgICBsZXQgbWFya2VyID0gdGhpcy5jYWNoZUdyb3Vwcy5wb3AoKTtcbiAgICBsZXQgaGVhZCA9IG1hcmtlciA/IG9wY29kZXMubmV4dE5vZGUobWFya2VyKSA6IG9wY29kZXMuaGVhZCgpO1xuICAgIGxldCB0YWlsID0gb3Bjb2Rlcy50YWlsKCk7XG4gICAgbGV0IHRhZyA9IGNvbWJpbmVTbGljZShuZXcgTGlzdFNsaWNlKGhlYWQsIHRhaWwpKTtcblxuICAgIGxldCBndWFyZCA9IG5ldyBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSh0YWcsIEVORCk7XG5cbiAgICBvcGNvZGVzLmluc2VydEJlZm9yZShndWFyZCwgaGVhZCk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQobmV3IERpZE1vZGlmeU9wY29kZShndWFyZCkpO1xuICAgIG9wY29kZXMuYXBwZW5kKEVORCk7XG4gIH1cblxuICBlbnRlcihhcmdzOiBudW1iZXIpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZShhcmdzKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuZWxlbWVudHMoKS5wdXNoVXBkYXRhYmxlQmxvY2soKTtcblxuICAgIGxldCB0cnlPcGNvZGUgPSBuZXcgVHJ5T3Bjb2RlKHRoaXMucGMsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG5cbiAgICB0aGlzLmRpZEVudGVyKHRyeU9wY29kZSk7XG4gIH1cblxuICBpdGVyYXRlKG1lbW86IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgdmFsdWU6IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKSk6IFRyeU9wY29kZSB7XG4gICAgbGV0IHN0YWNrID0gdGhpcy5zdGFjaztcbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcbiAgICBzdGFjay5wdXNoKG1lbW8pO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKDIpO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5lbGVtZW50cygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuXG4gICAgLy8gbGV0IGlwID0gdGhpcy5pcDtcbiAgICAvLyB0aGlzLmlwID0gZW5kICsgNDtcbiAgICAvLyB0aGlzLmZyYW1lcy5wdXNoKGlwKTtcblxuICAgIHJldHVybiBuZXcgVHJ5T3Bjb2RlKHRoaXMucGMsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG4gIH1cblxuICBlbnRlckl0ZW0oa2V5OiBzdHJpbmcsIG9wY29kZTogVHJ5T3Bjb2RlKSB7XG4gICAgdGhpcy5saXN0QmxvY2soKS5tYXBba2V5XSA9IG9wY29kZTtcbiAgICB0aGlzLmRpZEVudGVyKG9wY29kZSk7XG4gIH1cblxuICBlbnRlckxpc3Qoc3RhcnQ6IG51bWJlcikge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PEJsb2NrT3Bjb2RlPigpO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKDApO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5lbGVtZW50cygpLnB1c2hCbG9ja0xpc3QodXBkYXRpbmcpO1xuICAgIGxldCBhcnRpZmFjdHMgPSB0aGlzLnN0YWNrLnBlZWs8UmVmZXJlbmNlSXRlcmF0b3I+KCkuYXJ0aWZhY3RzO1xuXG4gICAgbGV0IG9wY29kZSA9IG5ldyBMaXN0QmxvY2tPcGNvZGUoc3RhcnQsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZywgYXJ0aWZhY3RzKTtcblxuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucHVzaChvcGNvZGUpO1xuXG4gICAgdGhpcy5kaWRFbnRlcihvcGNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaWRFbnRlcihvcGNvZGU6IEJsb2NrT3Bjb2RlKSB7XG4gICAgdGhpcy51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnB1c2gob3Bjb2RlLmNoaWxkcmVuKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5lbGVtZW50cygpLnBvcEJsb2NrKCk7XG4gICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpO1xuXG4gICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmcoKS50YWlsKCkgYXMgQmxvY2tPcGNvZGU7XG5cbiAgICBwYXJlbnQuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gIH1cblxuICBleGl0TGlzdCgpIHtcbiAgICB0aGlzLmV4aXQoKTtcbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnBvcCgpO1xuICB9XG5cbiAgdXBkYXRlV2l0aChvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy51cGRhdGluZygpLmFwcGVuZChvcGNvZGUpO1xuICB9XG5cbiAgbGlzdEJsb2NrKCk6IExpc3RCbG9ja09wY29kZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBhIGxpc3QgYmxvY2snKTtcbiAgfVxuXG4gIHVwZGF0aW5nKCk6IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+IHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgdXBkYXRpbmcgb3Bjb2RlIG9uIHRoZSB1cGRhdGluZyBvcGNvZGUgc3RhY2snKTtcbiAgfVxuXG4gIGVsZW1lbnRzKCk6IEVsZW1lbnRTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFN0YWNrO1xuICB9XG5cbiAgc2NvcGUoKTogU2NvcGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5zY29wZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBzY29wZSBvbiB0aGUgc2NvcGUgc3RhY2snKTtcbiAgfVxuXG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5keW5hbWljU2NvcGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgZHluYW1pYyBzY29wZSBvbiB0aGUgZHluYW1pYyBzY29wZSBzdGFjaycpO1xuICB9XG5cbiAgcHVzaENoaWxkU2NvcGUoKSB7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2godGhpcy5zY29wZSgpLmNoaWxkKCkpO1xuICB9XG5cbiAgcHVzaENhbGxlclNjb3BlKGNoaWxkU2NvcGUgPSBmYWxzZSkge1xuICAgIGxldCBjYWxsZXJTY29wZSA9IGV4cGVjdCh0aGlzLnNjb3BlKCkuZ2V0Q2FsbGVyU2NvcGUoKSwgJ3B1c2hDYWxsZXJTY29wZSBpcyBjYWxsZWQgd2hlbiBhIGNhbGxlciBzY29wZSBpcyBwcmVzZW50Jyk7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goY2hpbGRTY29wZSA/IGNhbGxlclNjb3BlLmNoaWxkKCkgOiBjYWxsZXJTY29wZSk7XG4gIH1cblxuICBwdXNoRHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZSB7XG4gICAgbGV0IGNoaWxkID0gdGhpcy5keW5hbWljU2NvcGUoKS5jaGlsZCgpO1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucHVzaChjaGlsZCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHVzaFJvb3RTY29wZShzaXplOiBudW1iZXIsIGJpbmRDYWxsZXI6IGJvb2xlYW4pOiBTY29wZSB7XG4gICAgbGV0IHNjb3BlID0gU2NvcGUuc2l6ZWQoc2l6ZSk7XG4gICAgaWYgKGJpbmRDYWxsZXIpIHNjb3BlLmJpbmRDYWxsZXJTY29wZSh0aGlzLnNjb3BlKCkpO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICBwb3BTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucG9wKCk7XG4gIH1cblxuICBwb3BEeW5hbWljU2NvcGUoKSB7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKSB7XG4gICAgdGhpcy5lbGVtZW50cygpLm5ld0Rlc3Ryb3lhYmxlKGQpO1xuICB9XG5cbiAgLy8vIFNDT1BFIEhFTFBFUlNcblxuICBnZXRTZWxmKCk6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTZWxmKCk7XG4gIH1cblxuICByZWZlcmVuY2VGb3JTeW1ib2woc3ltYm9sOiBudW1iZXIpOiBQYXRoUmVmZXJlbmNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNjb3BlKCkuZ2V0U3ltYm9sKHN5bWJvbCk7XG4gIH1cblxuICAvLy8gRVhFQ1VUSU9OXG5cbiAgZXhlY3V0ZShzdGFydDogbnVtYmVyLCBpbml0aWFsaXplPzogKHZtOiBWTSkgPT4gdm9pZCk6IFJlbmRlclJlc3VsdCB7XG4gICAgdGhpcy5wYyA9IHN0YXJ0O1xuXG4gICAgaWYgKGluaXRpYWxpemUpIGluaXRpYWxpemUodGhpcyk7XG5cbiAgICBsZXQgcmVzdWx0OiBJdGVyYXRvclJlc3VsdDxSZW5kZXJSZXN1bHQ+O1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubmV4dCgpO1xuICAgICAgaWYgKHJlc3VsdC5kb25lKSBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlIGFzIFJlbmRlclJlc3VsdDtcbiAgfVxuXG4gIG5leHQoKTogSXRlcmF0b3JSZXN1bHQ8UmVuZGVyUmVzdWx0PiB7XG4gICAgbGV0IHsgZW52LCB1cGRhdGluZ09wY29kZVN0YWNrLCBlbGVtZW50U3RhY2sgfSA9IHRoaXM7XG4gICAgbGV0IG9wY29kZTogT3B0aW9uPE9wY29kZT47XG5cbiAgICBpZiAoaSsrID4gMTAwMDAwKSB7XG4gICAgICB0aHJvdyBcInpvbWdcIjtcbiAgICB9XG5cbiAgICBpZiAob3Bjb2RlID0gdGhpcy5uZXh0U3RhdGVtZW50KGVudikpIHtcbiAgICAgIEFQUEVORF9PUENPREVTLmV2YWx1YXRlKHRoaXMsIG9wY29kZSwgb3Bjb2RlLnR5cGUpO1xuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBudWxsIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbmU6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3IFJlbmRlclJlc3VsdChcbiAgICAgICAgZW52LFxuICAgICAgICBleHBlY3QodXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKSwgJ3RoZXJlIHNob3VsZCBiZSBhIGZpbmFsIHVwZGF0aW5nIG9wY29kZSBzdGFjaycpLFxuICAgICAgICBlbGVtZW50U3RhY2sucG9wQmxvY2soKVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5leHRTdGF0ZW1lbnQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxPcGNvZGU+IHtcbiAgICBsZXQgeyBwYyB9ID0gdGhpcztcblxuICAgIGlmIChwYyA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBwcm9ncmFtID0gZW52LnByb2dyYW07XG4gICAgdGhpcy5wYyArPSA0O1xuICAgIHJldHVybiBwcm9ncmFtLm9wY29kZShwYyk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IE9wY29kZSkge1xuICAgIEFQUEVORF9PUENPREVTLmV2YWx1YXRlKHRoaXMsIG9wY29kZSwgb3Bjb2RlLnR5cGUpO1xuICB9XG5cbiAgYmluZER5bmFtaWNTY29wZShuYW1lczogQ29uc3RhbnRTdHJpbmdbXSkge1xuICAgIGxldCBzY29wZSA9IHRoaXMuZHluYW1pY1Njb3BlKCk7XG5cbiAgICBmb3IobGV0IGk9bmFtZXMubGVuZ3RoIC0gMTsgaT49MDsgaS0tKSB7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuY29uc3RhbnRzLmdldFN0cmluZyhuYW1lc1tpXSk7XG4gICAgICBzY29wZS5zZXQobmFtZSwgdGhpcy5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==

@@ -120,3 +120,3 @@ "use strict";

function BlockOpcode(start, end, state, bounds, children) {
function BlockOpcode(start, state, bounds, children) {
_classCallCheck(this, BlockOpcode);

@@ -127,3 +127,2 @@

_this.start = start;
_this.end = end;
_this.type = "block";

@@ -135,4 +134,3 @@ _this.next = null;

dynamicScope = state.dynamicScope,
stack = state.stack,
bp = state.bp;
stack = state.stack;

@@ -144,3 +142,2 @@ _this.children = children;

_this.stack = stack;
_this.bp = bp;
_this.bounds = bounds;

@@ -192,6 +189,6 @@ return _this;

function TryOpcode(start, end, state, bounds, children) {
function TryOpcode(start, state, bounds, children) {
_classCallCheck(this, TryOpcode);
var _this2 = _possibleConstructorReturn(this, _BlockOpcode.call(this, start, end, state, bounds, children));
var _this2 = _possibleConstructorReturn(this, _BlockOpcode.call(this, start, state, bounds, children));

@@ -212,14 +209,26 @@ _this2.type = "try";

TryOpcode.prototype.handleException = function handleException() {
var _this3 = this;
var env = this.env,
bounds = this.bounds,
children = this.children,
scope = this.scope,
dynamicScope = this.dynamicScope,
start = this.start,
dynamicScope = this.dynamicScope,
stack = this.stack,
bp = this.bp;
prev = this.prev,
next = this.next;
var elementStack = _builder.ElementStack.resume(this.env, this.bounds, this.bounds.reset(env));
children.clear();
var elementStack = _builder.ElementStack.resume(env, bounds, bounds.reset(env));
var vm = new _append2.default(env, scope, dynamicScope, elementStack);
var result = vm.resume(start, stack.snapshot(), bp);
this.children = result.opcodes();
this.didInitializeChildren();
var updating = new _util.LinkedList();
vm.execute(start, function (vm) {
vm.stack = _append.EvaluationStack.restore(stack);
vm.updatingOpcodeStack.push(updating);
vm.updateWith(_this3);
vm.updatingOpcodeStack.push(children);
});
this.prev = prev;
this.next = next;
};

@@ -266,9 +275,10 @@

var tryOpcode = null;
var start = opcode.start,
end = opcode.end;
var start = opcode.start;
vm.execute(start, function (vm) {
map[key] = tryOpcode = vm.iterate(start, end, memo, item, vm.updating());
map[key] = tryOpcode = vm.iterate(memo, item);
vm.updatingOpcodeStack.push(new _util.LinkedList());
vm.updateWith(tryOpcode);
vm.updatingOpcodeStack.push(tryOpcode.children);
});
tryOpcode.didInitializeChildren();
updating.insertBefore(tryOpcode, reference);

@@ -316,14 +326,14 @@ this.didInsert = true;

function ListBlockOpcode(start, end, state, bounds, children, artifacts) {
function ListBlockOpcode(start, state, bounds, children, artifacts) {
_classCallCheck(this, ListBlockOpcode);
var _this3 = _possibleConstructorReturn(this, _BlockOpcode2.call(this, start, end, state, bounds, children));
var _this4 = _possibleConstructorReturn(this, _BlockOpcode2.call(this, start, state, bounds, children));
_this3.type = "list-block";
_this3.map = (0, _util.dict)();
_this3.lastIterated = _reference.INITIAL;
_this3.artifacts = artifacts;
var _tag = _this3._tag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);
_this3.tag = (0, _reference.combine)([artifacts.tag, _tag]);
return _this3;
_this4.type = "list-block";
_this4.map = (0, _util.dict)();
_this4.lastIterated = _reference.INITIAL;
_this4.artifacts = artifacts;
var _tag = _this4._tag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);
_this4.tag = (0, _reference.combine)([artifacts.tag, _tag]);
return _this4;
}

@@ -417,2 +427,2 @@

}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxBQUFPLEFBQXFCLEFBQUssQUFBRSxBQUFJLEFBQUksQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUN6RSxBQUFPLEFBQUUsQUFBWSxBQUE2QixBQUFNLEFBQVksQUFBQzs7QUFDckUsQUFBTyxBQUFrQixBQUFLLEFBQW9CLEFBQUksQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQ3RGLEFBQU8sQUFHTCxBQUFvQixBQUdwQixBQUFPLEFBQ1AsQUFBTyxBQUVQLEFBQVksQUFFWixBQUFZLEFBQ1osQUFBWSxBQUNaLEFBQU8sQUFDUixBQUFNLEFBQW9CLEFBQUM7O0FBQzVCLEFBQU8sQUFBYyxBQUFjLEFBQWlCLEFBQU0sQUFBWSxBQUFDOztBQUt2RSxBQUFPLEFBQXVCLEFBQU0sQUFBVSxBQUFDLEFBRS9DLEFBQU0sQUFBQyxBQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBUVo7d0JBQVksQUFBZ0IsQUFBRTs7WUFBRSxBQUFnQix5REFBRyxBQUFLLEFBQUU7OzhCQUZsRDs7YUFBVSxhQUEyQixBQUFJLEFBQUssQUFBbUIsQUFBQyxBQUd4RSxBQUFJO2FBQUMsQUFBRyxNQUFHLEFBQUcsQUFBQyxBQUNmLEFBQUk7YUFBQyxBQUFTLFlBQUcsQUFBRyxJQUFDLEFBQVMsQUFBQyxBQUMvQixBQUFJO2FBQUMsQUFBRyxNQUFHLEFBQUcsSUFBQyxBQUFNLEFBQUUsQUFBQyxBQUN4QixBQUFJO2FBQUMsQUFBZ0IsbUJBQUcsQUFBZ0IsQUFBQyxBQUMzQyxBQUFDOzs7eUJBRUQsQUFBTywyQkFBQyxBQUFzQixTQUFFLEFBQXlCLFNBQ3ZELEFBQUk7WUFBRSxBQUFVLEFBQUUsYUFBRyxBQUFJLEFBQUMsS0FFMUIsQUFBSTs7YUFBQyxBQUFHLElBQUMsQUFBTyxTQUFF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S0FBRyxBQUFFLEFBQUMsQUFDYixBQUFJO2FBQUMsQUFBRyxNQUFHLEFBQUcsQUFBQyxBQUNmLEFBQUk7YUFBQyxBQUFPLFVBQUcsQUFBRyxJQUFDLEFBQUksQUFBRSxBQUFDLEFBQzVCLEFBQUM7Ozs4QkFFRCxBQUFJLHFCQUFDLEFBQWtCLElBQ3JCLEFBQUk7YUFBQyxBQUFPLFVBQUcsQUFBRSxBQUFDLEFBQ3BCLEFBQUM7Ozs4QkFFRCxBQUFhLHlDQUNYLEFBQUk7WUFBRSxBQUFPO1lBQUUsQUFBRyxBQUFFLE1BQUcsQUFBSSxBQUFDLEtBQzVCLEFBQUUsQUFBQzs7WUFBQyxBQUFPLEFBQUMsU0FBQyxBQUFJLEtBQUMsQUFBTyxVQUFHLEFBQUcsSUFBQyxBQUFRLFNBQUMsQUFBTyxBQUFDLEFBQUMsQUFDbEQsQUFBTTtlQUFDLEFBQU8sQUFBQyxBQUNqQixBQUFDOzs7OEJBRUQsQUFBZSw2Q0FDYixBQUFFLEFBQUM7WUFBQyxBQUFJLEtBQUMsQUFBZ0IsQUFBQyxrQkFBQyxBQUFDLEFBQzFCLEFBQUk7aUJBQUMsQUFBZ0IsaUJBQUMsQUFBZSxBQUFFLEFBQUMsQUFDMUMsQUFBQyxBQUNIO0FBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjb3BlLCBEeW5hbWljU2NvcGUsIEVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRGVzdHJveWFibGVCb3VuZHMsIGNsZWFyLCBtb3ZlIGFzIG1vdmVCb3VuZHMgfSBmcm9tICcuLi9ib3VuZHMnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrLCBUcmFja2VyLCBVcGRhdGFibGVUcmFja2VyIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPcHRpb24sIE9wYXF1ZSwgU3RhY2ssIExpbmtlZExpc3QsIERpY3QsIGRpY3QsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgUGF0aFJlZmVyZW5jZSxcbiAgSXRlcmF0aW9uQXJ0aWZhY3RzLFxuICBJdGVyYXRvclN5bmNocm9uaXplcixcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZSxcblxuICAvLyBUYWdzXG4gIGNvbWJpbmUsXG4gIFJldmlzaW9uLFxuICBVcGRhdGFibGVUYWcsXG4gIFRhZ1dyYXBwZXIsXG4gIGNvbWJpbmVTbGljZSxcbiAgQ09OU1RBTlRfVEFHLFxuICBJTklUSUFMXG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSwgVXBkYXRpbmdPcFNlcSB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQvY29uc3RhbnRzJztcbmltcG9ydCB7IERPTUNoYW5nZXMgfSBmcm9tICcuLi9kb20vaGVscGVyJztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuLi9kb20vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCBWTSwgeyBFdmFsdWF0aW9uU3RhY2sgfSBmcm9tICcuL2FwcGVuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwZGF0aW5nVk0ge1xuICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudDtcbiAgcHVibGljIGRvbTogRE9NQ2hhbmdlcztcbiAgcHVibGljIGFsd2F5c1JldmFsaWRhdGU6IGJvb2xlYW47XG4gIHB1YmxpYyBjb25zdGFudHM6IENvbnN0YW50cztcblxuICBwcml2YXRlIGZyYW1lU3RhY2s6IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4gPSBuZXcgU3RhY2s8VXBkYXRpbmdWTUZyYW1lPigpO1xuXG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIHsgYWx3YXlzUmV2YWxpZGF0ZSA9IGZhbHNlIH0pIHtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLmNvbnN0YW50cyA9IGVudi5jb25zdGFudHM7XG4gICAgdGhpcy5kb20gPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5hbHdheXNSZXZhbGlkYXRlID0gYWx3YXlzUmV2YWxpZGF0ZTtcbiAgfVxuXG4gIGV4ZWN1dGUob3Bjb2RlczogVXBkYXRpbmdPcFNlcSwgaGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlcikge1xuICAgIGxldCB7IGZyYW1lU3RhY2sgfSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyeShvcGNvZGVzLCBoYW5kbGVyKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoZnJhbWVTdGFjay5pc0VtcHR5KCkpIGJyZWFrO1xuXG4gICAgICBsZXQgb3Bjb2RlID0gdGhpcy5mcmFtZS5uZXh0U3RhdGVtZW50KCk7XG5cbiAgICAgIGlmIChvcGNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGZyYW1lKCkge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5mcmFtZVN0YWNrLmN1cnJlbnQsICdidWc6IGV4cGVjdGVkIGEgZnJhbWUnKTtcbiAgfVxuXG4gIGdvdG8ob3A6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy5mcmFtZS5nb3RvKG9wKTtcbiAgfVxuXG4gIHRyeShvcHM6IFVwZGF0aW5nT3BTZXEsIGhhbmRsZXI6IE9wdGlvbjxFeGNlcHRpb25IYW5kbGVyPikge1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKG5ldyBVcGRhdGluZ1ZNRnJhbWUodGhpcywgb3BzLCBoYW5kbGVyKSk7XG4gIH1cblxuICB0aHJvdygpIHtcbiAgICB0aGlzLmZyYW1lLmhhbmRsZUV4Y2VwdGlvbigpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICBvcGNvZGUuZXZhbHVhdGUodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGNlcHRpb25IYW5kbGVyIHtcbiAgaGFuZGxlRXhjZXB0aW9uKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVk1TdGF0ZSB7XG4gIGVudjogRW52aXJvbm1lbnQ7XG4gIHNjb3BlOiBTY29wZTtcbiAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGU7XG4gIHN0YWNrOiBFdmFsdWF0aW9uU3RhY2s7XG4gIGJwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja09wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIGltcGxlbWVudHMgRGVzdHJveWFibGVCb3VuZHMge1xuICBwdWJsaWMgdHlwZSA9IFwiYmxvY2tcIjtcbiAgcHVibGljIG5leHQgPSBudWxsO1xuICBwdWJsaWMgcHJldiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG5cbiAgcHJvdGVjdGVkIGVudjogRW52aXJvbm1lbnQ7XG4gIHByb3RlY3RlZCBzY29wZTogU2NvcGU7XG4gIHByb3RlY3RlZCBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgcHJvdGVjdGVkIHN0YWNrOiBFdmFsdWF0aW9uU3RhY2s7XG4gIHByb3RlY3RlZCBicDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhcnQ6IG51bWJlciwgcHVibGljIGVuZDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcywgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIHN0YWNrLCBicCB9ID0gc3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZSA9IGR5bmFtaWNTY29wZTtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2s7XG4gICAgdGhpcy5icCA9IGJwO1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG5cbiAgYWJzdHJhY3QgZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk6IHZvaWQ7XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICB9XG5cbiAgZmlyc3ROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB2bS50cnkodGhpcy5jaGlsZHJlbiwgbnVsbCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuYm91bmRzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGRpZERlc3Ryb3koKSB7XG4gICAgdGhpcy5lbnYuZGlkRGVzdHJveSh0aGlzLmJvdW5kcyk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBkZXRhaWxzID0gZGljdDxzdHJpbmc+KCk7XG5cbiAgICBkZXRhaWxzW1wiZ3VpZFwiXSA9IGAke3RoaXMuX2d1aWR9YDtcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5tYXAob3AgPT4gb3AudG9KU09OKCkpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJ5T3Bjb2RlIGV4dGVuZHMgQmxvY2tPcGNvZGUgaW1wbGVtZW50cyBFeGNlcHRpb25IYW5kbGVyIHtcbiAgcHVibGljIHR5cGUgPSBcInRyeVwiO1xuXG4gIHByaXZhdGUgX3RhZzogVGFnV3JhcHBlcjxVcGRhdGFibGVUYWc+O1xuXG4gIHByb3RlY3RlZCBib3VuZHM6IFVwZGF0YWJsZVRyYWNrZXI7XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFVwZGF0YWJsZVRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHN1cGVyKHN0YXJ0LCBlbmQsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLnRhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUoQ09OU1RBTlRfVEFHKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICB0aGlzLl90YWcuaW5uZXIudXBkYXRlKGNvbWJpbmVTbGljZSh0aGlzLmNoaWxkcmVuKSk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHZtLnRyeSh0aGlzLmNoaWxkcmVuLCB0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUV4Y2VwdGlvbigpIHtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBzdGFydCwgZHluYW1pY1Njb3BlLCBzdGFjaywgYnAgfSA9IHRoaXM7XG5cbiAgICBsZXQgZWxlbWVudFN0YWNrID0gRWxlbWVudFN0YWNrLnJlc3VtZShcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMsXG4gICAgICB0aGlzLmJvdW5kcy5yZXNldChlbnYpXG4gICAgKTtcblxuICAgIGxldCB2bSA9IG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gICAgbGV0IHJlc3VsdCA9IHZtLnJlc3VtZShzdGFydCwgc3RhY2suc25hcHNob3QoKSwgYnApO1xuXG4gICAgdGhpcy5jaGlsZHJlbiA9IHJlc3VsdC5vcGNvZGVzKCk7XG4gICAgdGhpcy5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIHRvSlNPTigpIDogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IGpzb24gPSBzdXBlci50b0pTT04oKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIudG9KU09OKCk7XG4gIH1cbn1cblxuY2xhc3MgTGlzdFJldmFsaWRhdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZSB7XG4gIHByaXZhdGUgbWFwOiBEaWN0PEJsb2NrT3Bjb2RlPjtcbiAgcHJpdmF0ZSB1cGRhdGluZzogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG5cbiAgcHJpdmF0ZSBkaWRJbnNlcnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkaWREZWxldGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wY29kZTogTGlzdEJsb2NrT3Bjb2RlLCBwcml2YXRlIG1hcmtlcjogU2ltcGxlLkNvbW1lbnQpIHtcbiAgICB0aGlzLm1hcCA9IG9wY29kZS5tYXA7XG4gICAgdGhpcy51cGRhdGluZyA9IG9wY29kZVsnY2hpbGRyZW4nXTtcbiAgfVxuXG4gIGluc2VydChrZXk6IHN0cmluZywgaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBtZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCBvcGNvZGUsIHVwZGF0aW5nIH0gPSB0aGlzO1xuICAgIGxldCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGw7XG4gICAgbGV0IHJlZmVyZW5jZTogT3B0aW9uPEJsb2NrT3Bjb2RlPiA9IG51bGw7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXTtcbiAgICAgIG5leHRTaWJsaW5nID0gcmVmZXJlbmNlWydib3VuZHMnXS5maXJzdE5vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dFNpYmxpbmcgPSB0aGlzLm1hcmtlcjtcbiAgICB9XG5cbiAgICBsZXQgdm0gPSBvcGNvZGUudm1Gb3JJbnNlcnRpb24obmV4dFNpYmxpbmcpO1xuICAgIGxldCB0cnlPcGNvZGU6IE9wdGlvbjxUcnlPcGNvZGU+ID0gbnVsbDtcblxuICAgIGxldCB7IHN0YXJ0LCBlbmQgfSA9IG9wY29kZTtcblxuICAgIHZtLmV4ZWN1dGUoc3RhcnQsIHZtID0+IHtcbiAgICAgIG1hcFtrZXldID0gdHJ5T3Bjb2RlID0gdm0uaXRlcmF0ZShzdGFydCwgZW5kLCBtZW1vLCBpdGVtLCB2bS51cGRhdGluZygpKTtcbiAgICB9KTtcblxuICAgIHRyeU9wY29kZSEuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG5cbiAgICB1cGRhdGluZy5pbnNlcnRCZWZvcmUodHJ5T3Bjb2RlISwgcmVmZXJlbmNlKTtcblxuICAgIHRoaXMuZGlkSW5zZXJ0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldGFpbihfa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4pIHtcbiAgfVxuXG4gIG1vdmUoa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCB1cGRhdGluZyB9ID0gdGhpcztcblxuICAgIGxldCBlbnRyeSA9IG1hcFtrZXldO1xuICAgIGxldCByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXSB8fCBudWxsO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgcmVmZXJlbmNlLmZpcnN0Tm9kZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgdGhpcy5tYXJrZXIpO1xuICAgIH1cblxuICAgIHVwZGF0aW5nLnJlbW92ZShlbnRyeSk7XG4gICAgdXBkYXRpbmcuaW5zZXJ0QmVmb3JlKGVudHJ5LCByZWZlcmVuY2UpO1xuICB9XG5cbiAgZGVsZXRlKGtleTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwIH0gPSB0aGlzO1xuICAgIGxldCBvcGNvZGUgPSBtYXBba2V5XTtcbiAgICBvcGNvZGUuZGlkRGVzdHJveSgpO1xuICAgIGNsZWFyKG9wY29kZSk7XG4gICAgdGhpcy51cGRhdGluZy5yZW1vdmUob3Bjb2RlKTtcbiAgICBkZWxldGUgbWFwW2tleV07XG5cbiAgICB0aGlzLmRpZERlbGV0ZSA9IHRydWU7XG4gIH1cblxuICBkb25lKCkge1xuICAgIHRoaXMub3Bjb2RlLmRpZEluaXRpYWxpemVDaGlsZHJlbih0aGlzLmRpZEluc2VydCB8fCB0aGlzLmRpZERlbGV0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCbG9ja09wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImxpc3QtYmxvY2tcIjtcbiAgcHVibGljIG1hcCA9IGRpY3Q8QmxvY2tPcGNvZGU+KCk7XG4gIHB1YmxpYyBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBwcml2YXRlIGxhc3RJdGVyYXRlZDogUmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBjb25zdHJ1Y3RvcihzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgc3RhdGU6IFZNU3RhdGUsIGJvdW5kczogVHJhY2tlciwgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+LCBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHN1cGVyKHN0YXJ0LCBlbmQsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgICBsZXQgX3RhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUoQ09OU1RBTlRfVEFHKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW2FydGlmYWN0cy50YWcsIF90YWddKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbihsaXN0RGlkQ2hhbmdlID0gdHJ1ZSkge1xuICAgIHRoaXMubGFzdEl0ZXJhdGVkID0gdGhpcy5hcnRpZmFjdHMudGFnLnZhbHVlKCk7XG5cbiAgICBpZiAobGlzdERpZENoYW5nZSkge1xuICAgICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgYXJ0aWZhY3RzLCBsYXN0SXRlcmF0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWFydGlmYWN0cy50YWcudmFsaWRhdGUobGFzdEl0ZXJhdGVkKSkge1xuICAgICAgbGV0IHsgYm91bmRzIH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgbGV0IG1hcmtlciA9IGRvbS5jcmVhdGVDb21tZW50KCcnKTtcbiAgICAgIGRvbS5pbnNlcnRBZnRlcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBtYXJrZXIsIGV4cGVjdChib3VuZHMubGFzdE5vZGUoKSwgXCJjYW4ndCBpbnNlcnQgYWZ0ZXIgYW4gZW1wdHkgYm91bmRzXCIpKTtcblxuICAgICAgbGV0IHRhcmdldCA9IG5ldyBMaXN0UmV2YWxpZGF0aW9uRGVsZWdhdGUodGhpcywgbWFya2VyKTtcbiAgICAgIGxldCBzeW5jaHJvbml6ZXIgPSBuZXcgSXRlcmF0b3JTeW5jaHJvbml6ZXIoeyB0YXJnZXQsIGFydGlmYWN0cyB9KTtcblxuICAgICAgc3luY2hyb25pemVyLnN5bmMoKTtcblxuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50KCkucmVtb3ZlQ2hpbGQobWFya2VyKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gbm93LXVwZGF0ZWQgdXBkYXRpbmcgb3Bjb2Rlc1xuICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgfVxuXG4gIHZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KTogVk0ge1xuICAgIGxldCB7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIGxldCBlbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2suZm9ySW5pdGlhbFJlbmRlcihcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpLFxuICAgICAgbmV4dFNpYmxpbmdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG4gICAgbGV0IG1hcCA9IHRoaXMubWFwO1xuXG4gICAgbGV0IGlubmVyID0gT2JqZWN0LmtleXMobWFwKS5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfTogJHttYXBba2V5XS5fZ3VpZH1gO1xuICAgIH0pLmpvaW4oXCIsIFwiKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICBkZXRhaWxzW1wibWFwXCJdID0gYHske2lubmVyfX1gO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuY2xhc3MgVXBkYXRpbmdWTUZyYW1lIHtcbiAgcHJpdmF0ZSBjdXJyZW50OiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdm06IFVwZGF0aW5nVk0sIHByaXZhdGUgb3BzOiBVcGRhdGluZ09wU2VxLCBwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IE9wdGlvbjxFeGNlcHRpb25IYW5kbGVyPikge1xuICAgIHRoaXMudm0gPSB2bTtcbiAgICB0aGlzLm9wcyA9IG9wcztcbiAgICB0aGlzLmN1cnJlbnQgPSBvcHMuaGVhZCgpO1xuICB9XG5cbiAgZ290byhvcDogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLmN1cnJlbnQgPSBvcDtcbiAgfVxuXG4gIG5leHRTdGF0ZW1lbnQoKTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgbGV0IHsgY3VycmVudCwgb3BzIH0gPSB0aGlzO1xuICAgIGlmIChjdXJyZW50KSB0aGlzLmN1cnJlbnQgPSBvcHMubmV4dE5vZGUoY3VycmVudCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuZXhjZXB0aW9uSGFuZGxlcikge1xuICAgICAgdGhpcy5leGNlcHRpb25IYW5kbGVyLmhhbmRsZUV4Y2VwdGlvbigpO1xuICAgIH1cbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxBQUFPLEFBQXFCLEFBQUssQUFBRSxBQUFJLEFBQUksQUFBVSxBQUFFLEFBQU0sQUFBVyxBQUFDOztBQUN6RSxBQUFPLEFBQUUsQUFBWSxBQUE2QixBQUFNLEFBQVksQUFBQzs7QUFDckUsQUFBTyxBQUFrQixBQUFLLEFBQUUsQUFBVSxBQUFRLEFBQUksQUFBRSxBQUFNLEFBQUUsQUFBTSxBQUFlLEFBQUM7O0FBQ3RGLEFBQU8sQUFHTCxBQUFvQixBQUdwQixBQUFPLEFBQ1AsQUFBTyxBQUVQLEFBQVksQUFFWixBQUFZLEFBQ1osQUFBWSxBQUNaLEFBQU8sQUFDUixBQUFNLEFBQW9CLEFBQUM7O0FBQzVCLEFBQU8sQUFBYyxBQUFjLEFBQWlCLEFBQU0sQUFBWSxBQUFDOztBQUt2RSxBQUFPLEFBQUUsQUFBRSxBQUFpQixBQUFlLEFBQUUsQUFBTSxBQUFVLEFBQUMsQUFFOUQsQUFBTSxBQUFDLEFBQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2QkFRWjt3QkFBWSxBQUFnQixBQUFFOztZQUFFLEFBQWdCLHlEQUFHLEFBQUssQUFBRTs7OEJBRmxEOzthQUFVLGFBQTJCLEFBQUksQUFBSyxBQUFtQixBQUFDLEFBR3hFLEFBQUk7YUFBQyxBQUFHLE1BQUcsQUFBRyxBQUFDLEFBQ2YsQUFBSTthQUFDLEFBQVMsWUFBRyxBQUFHLElBQUMsQUFBUyxBQUFDLEFBQy9CLEFBQUk7YUFBQyxBQUFHLE1BQUcsQUFBRyxJQUFDLEFBQU0sQUFBRSxBQUFDLEFBQ3hCLEFBQUk7YUFBQyxBQUFnQixtQkFBRyxBQUFnQixBQUFDLEFBQzNDLEFBQUM7Ozt5QkFFRCxBQUFPLDJCQUFDLEFBQXNCLFNBQUUsQUFBeUIsU0FDdkQsQUFBSTtZQUFFLEFBQVUsQUFBRSxhQUFHLEFBQUksQUFBQyxLQUUxQixB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QUMsQUFBRyxlQUFJLEFBQUssQUFBRyxBQUFDLFFBRTlCLEFBQU07ZUFBQyxBQUFJLEFBQUMsQUFDZCxBQUFDLEFBQ0YsQUFFRDs7OztFQTVFcUMsQUFBVzs7a0NBK0U5Qzs2QkFBb0IsQUFBYyxJQUFVLEFBQWtCLEtBQVUsQUFBMEM7OEJBQTlGOzthQUFFLEtBQUYsQUFBRSxBQUFZLEFBQVU7YUFBRyxNQUFILEFBQUcsQUFBZSxBQUFVO2FBQWdCLG1CQUFoQixBQUFnQixBQUEwQixBQUNoSCxBQUFJO2FBQUMsQUFBRSxLQUFHLEFBQUUsQUFBQyxBQUNiLEFBQUk7YUFBQyxBQUFHLE1BQUcsQUFBRyxBQUFDLEFBQ2YsQUFBSTthQUFDLEFBQU8sVUFBRyxBQUFHLElBQUMsQUFBSSxBQUFFLEFBQUMsQUFDNUIsQUFBQzs7OzhCQUVELEFBQUkscUJBQUMsQUFBa0IsSUFDckIsQUFBSTthQUFDLEFBQU8sVUFBRyxBQUFFLEFBQUMsQUFDcEIsQUFBQzs7OzhCQUVELEFBQWEseUNBQ1gsQUFBSTtZQUFFLEFBQU87WUFBRSxBQUFHLEFBQUUsTUFBRyxBQUFJLEFBQUMsS0FDNUIsQUFBRSxBQUFDOztZQUFDLEFBQU8sQUFBQyxTQUFDLEFBQUksS0FBQyxBQUFPLFVBQUcsQUFBRyxJQUFDLEFBQVEsU0FBQyxBQUFPLEFBQUMsQUFBQyxBQUNsRCxBQUFNO2VBQUMsQUFBTyxBQUFDLEFBQ2pCLEFBQUM7Ozs4QkFFRCxBQUFlLDZDQUNiLEFBQUUsQUFBQztZQUFDLEFBQUksS0FBQyxBQUFnQixBQUFDLGtCQUFDLEFBQUMsQUFDMUIsQUFBSTtpQkFBQyxBQUFnQixpQkFBQyxBQUFlLEFBQUUsQUFBQyxBQUMxQyxBQUFDLEFBQ0g7QUFBQyxBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NvcGUsIER5bmFtaWNTY29wZSwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBEZXN0cm95YWJsZUJvdW5kcywgY2xlYXIsIG1vdmUgYXMgbW92ZUJvdW5kcyB9IGZyb20gJy4uL2JvdW5kcyc7XG5pbXBvcnQgeyBFbGVtZW50U3RhY2ssIFRyYWNrZXIsIFVwZGF0YWJsZVRyYWNrZXIgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlLCBTdGFjaywgTGlua2VkTGlzdCwgRGljdCwgZGljdCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBQYXRoUmVmZXJlbmNlLFxuICBJdGVyYXRpb25BcnRpZmFjdHMsXG4gIEl0ZXJhdG9yU3luY2hyb25pemVyLFxuICBJdGVyYXRvclN5bmNocm9uaXplckRlbGVnYXRlLFxuXG4gIC8vIFRhZ3NcbiAgY29tYmluZSxcbiAgUmV2aXNpb24sXG4gIFVwZGF0YWJsZVRhZyxcbiAgVGFnV3JhcHBlcixcbiAgY29tYmluZVNsaWNlLFxuICBDT05TVEFOVF9UQUcsXG4gIElOSVRJQUxcbn0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlLCBVcGRhdGluZ09wU2VxIH0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9lbnZpcm9ubWVudC9jb25zdGFudHMnO1xuaW1wb3J0IHsgRE9NQ2hhbmdlcyB9IGZyb20gJy4uL2RvbS9oZWxwZXInO1xuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4uL2RvbS9pbnRlcmZhY2VzJztcblxuaW1wb3J0IFZNLCB7IENhcHR1cmVkU3RhY2ssIEV2YWx1YXRpb25TdGFjayB9IGZyb20gJy4vYXBwZW5kJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBkYXRpbmdWTSB7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuICBwdWJsaWMgZG9tOiBET01DaGFuZ2VzO1xuICBwdWJsaWMgYWx3YXlzUmV2YWxpZGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGNvbnN0YW50czogQ29uc3RhbnRzO1xuXG4gIHByaXZhdGUgZnJhbWVTdGFjazogU3RhY2s8VXBkYXRpbmdWTUZyYW1lPiA9IG5ldyBTdGFjazxVcGRhdGluZ1ZNRnJhbWU+KCk7XG5cbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgeyBhbHdheXNSZXZhbGlkYXRlID0gZmFsc2UgfSkge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuY29uc3RhbnRzID0gZW52LmNvbnN0YW50cztcbiAgICB0aGlzLmRvbSA9IGVudi5nZXRET00oKTtcbiAgICB0aGlzLmFsd2F5c1JldmFsaWRhdGUgPSBhbHdheXNSZXZhbGlkYXRlO1xuICB9XG5cbiAgZXhlY3V0ZShvcGNvZGVzOiBVcGRhdGluZ09wU2VxLCBoYW5kbGVyOiBFeGNlcHRpb25IYW5kbGVyKSB7XG4gICAgbGV0IHsgZnJhbWVTdGFjayB9ID0gdGhpcztcblxuICAgIHRoaXMudHJ5KG9wY29kZXMsIGhhbmRsZXIpO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChmcmFtZVN0YWNrLmlzRW1wdHkoKSkgYnJlYWs7XG5cbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLmZyYW1lLm5leHRTdGF0ZW1lbnQoKTtcblxuICAgICAgaWYgKG9wY29kZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvcGNvZGUuZXZhbHVhdGUodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZnJhbWUoKSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmZyYW1lU3RhY2suY3VycmVudCwgJ2J1ZzogZXhwZWN0ZWQgYSBmcmFtZScpO1xuICB9XG5cbiAgZ290byhvcDogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLmZyYW1lLmdvdG8ob3ApO1xuICB9XG5cbiAgdHJ5KG9wczogVXBkYXRpbmdPcFNlcSwgaGFuZGxlcjogT3B0aW9uPEV4Y2VwdGlvbkhhbmRsZXI+KSB7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2gobmV3IFVwZGF0aW5nVk1GcmFtZSh0aGlzLCBvcHMsIGhhbmRsZXIpKTtcbiAgfVxuXG4gIHRocm93KCkge1xuICAgIHRoaXMuZnJhbWUuaGFuZGxlRXhjZXB0aW9uKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgZXZhbHVhdGVPcGNvZGUob3Bjb2RlOiBVcGRhdGluZ09wY29kZSkge1xuICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2VwdGlvbkhhbmRsZXIge1xuICBoYW5kbGVFeGNlcHRpb24oKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWTVN0YXRlIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgc2NvcGU6IFNjb3BlO1xuICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgc3RhY2s6IENhcHR1cmVkU3RhY2s7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja09wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIGltcGxlbWVudHMgRGVzdHJveWFibGVCb3VuZHMge1xuICBwdWJsaWMgdHlwZSA9IFwiYmxvY2tcIjtcbiAgcHVibGljIG5leHQgPSBudWxsO1xuICBwdWJsaWMgcHJldiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG5cbiAgcHJvdGVjdGVkIGVudjogRW52aXJvbm1lbnQ7XG4gIHByb3RlY3RlZCBzY29wZTogU2NvcGU7XG4gIHByb3RlY3RlZCBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZTtcbiAgcHJvdGVjdGVkIHN0YWNrOiBDYXB0dXJlZFN0YWNrO1xuICBwcm90ZWN0ZWQgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhcnQ6IG51bWJlciwgc3RhdGU6IFZNU3RhdGUsIGJvdW5kczogRGVzdHJveWFibGVCb3VuZHMsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHN1cGVyKCk7XG4gICAgbGV0IHsgZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBzdGFjayB9ID0gc3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZSA9IGR5bmFtaWNTY29wZTtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2s7XG4gICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7XG4gIH1cblxuICBhYnN0cmFjdCBkaWRJbml0aWFsaXplQ2hpbGRyZW4oKTogdm9pZDtcblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCk7XG4gIH1cblxuICBmaXJzdE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLmxhc3ROb2RlKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHZtLnRyeSh0aGlzLmNoaWxkcmVuLCBudWxsKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ib3VuZHMuZGVzdHJveSgpO1xuICB9XG5cbiAgZGlkRGVzdHJveSgpIHtcbiAgICB0aGlzLmVudi5kaWREZXN0cm95KHRoaXMuYm91bmRzKTtcbiAgfVxuXG4gIHRvSlNPTigpIDogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IGRldGFpbHMgPSBkaWN0PHN0cmluZz4oKTtcblxuICAgIGRldGFpbHNbXCJndWlkXCJdID0gYCR7dGhpcy5fZ3VpZH1gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBkZXRhaWxzLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4udG9BcnJheSgpLm1hcChvcCA9PiBvcC50b0pTT04oKSlcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcnlPcGNvZGUgZXh0ZW5kcyBCbG9ja09wY29kZSBpbXBsZW1lbnRzIEV4Y2VwdGlvbkhhbmRsZXIge1xuICBwdWJsaWMgdHlwZSA9IFwidHJ5XCI7XG5cbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG5cbiAgcHJvdGVjdGVkIGJvdW5kczogVXBkYXRhYmxlVHJhY2tlcjtcblxuICBjb25zdHJ1Y3RvcihzdGFydDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyLCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4pIHtcbiAgICBzdXBlcihzdGFydCwgc3RhdGUsIGJvdW5kcywgY2hpbGRyZW4pO1xuICAgIHRoaXMudGFnID0gdGhpcy5fdGFnID0gVXBkYXRhYmxlVGFnLmNyZWF0ZShDT05TVEFOVF9UQUcpO1xuICB9XG5cbiAgZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCkge1xuICAgIHRoaXMuX3RhZy5pbm5lci51cGRhdGUoY29tYmluZVNsaWNlKHRoaXMuY2hpbGRyZW4pKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdm0udHJ5KHRoaXMuY2hpbGRyZW4sIHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlRXhjZXB0aW9uKCkge1xuICAgIGxldCB7IGVudiwgYm91bmRzLCBjaGlsZHJlbiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgc3RhcnQsIHN0YWNrLCBwcmV2LCBuZXh0IH0gPSB0aGlzO1xuXG4gICAgY2hpbGRyZW4uY2xlYXIoKTtcblxuICAgIGxldCBlbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2sucmVzdW1lKFxuICAgICAgZW52LFxuICAgICAgYm91bmRzLFxuICAgICAgYm91bmRzLnJlc2V0KGVudilcbiAgICApO1xuXG4gICAgbGV0IHZtID0gbmV3IFZNKGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgZWxlbWVudFN0YWNrKTtcblxuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgdm0uZXhlY3V0ZShzdGFydCwgdm0gPT4ge1xuICAgICAgdm0uc3RhY2sgPSBFdmFsdWF0aW9uU3RhY2sucmVzdG9yZShzdGFjayk7XG4gICAgICB2bS51cGRhdGluZ09wY29kZVN0YWNrLnB1c2godXBkYXRpbmcpO1xuICAgICAgdm0udXBkYXRlV2l0aCh0aGlzKTtcbiAgICAgIHZtLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaChjaGlsZHJlbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgIHRoaXMubmV4dCA9IG5leHQ7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG5cbiAgICBsZXQgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdO1xuICAgIGlmICghZGV0YWlscykge1xuICAgICAgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICB9XG59XG5cbmNsYXNzIExpc3RSZXZhbGlkYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUge1xuICBwcml2YXRlIG1hcDogRGljdDxCbG9ja09wY29kZT47XG4gIHByaXZhdGUgdXBkYXRpbmc6IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+O1xuXG4gIHByaXZhdGUgZGlkSW5zZXJ0ID0gZmFsc2U7XG4gIHByaXZhdGUgZGlkRGVsZXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcGNvZGU6IExpc3RCbG9ja09wY29kZSwgcHJpdmF0ZSBtYXJrZXI6IFNpbXBsZS5Db21tZW50KSB7XG4gICAgdGhpcy5tYXAgPSBvcGNvZGUubWFwO1xuICAgIHRoaXMudXBkYXRpbmcgPSBvcGNvZGVbJ2NoaWxkcmVuJ107XG4gIH1cblxuICBpbnNlcnQoa2V5OiBzdHJpbmcsIGl0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBiZWZvcmU6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCwgb3Bjb2RlLCB1cGRhdGluZyB9ID0gdGhpcztcbiAgICBsZXQgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsO1xuICAgIGxldCByZWZlcmVuY2U6IE9wdGlvbjxCbG9ja09wY29kZT4gPSBudWxsO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgcmVmZXJlbmNlID0gbWFwW2JlZm9yZV07XG4gICAgICBuZXh0U2libGluZyA9IHJlZmVyZW5jZVsnYm91bmRzJ10uZmlyc3ROb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRTaWJsaW5nID0gdGhpcy5tYXJrZXI7XG4gICAgfVxuXG4gICAgbGV0IHZtID0gb3Bjb2RlLnZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nKTtcbiAgICBsZXQgdHJ5T3Bjb2RlOiBPcHRpb248VHJ5T3Bjb2RlPiA9IG51bGw7XG5cbiAgICBsZXQgeyBzdGFydCB9ID0gb3Bjb2RlO1xuXG4gICAgdm0uZXhlY3V0ZShzdGFydCwgdm0gPT4ge1xuICAgICAgbWFwW2tleV0gPSB0cnlPcGNvZGUgPSB2bS5pdGVyYXRlKG1lbW8sIGl0ZW0pO1xuICAgICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTtcbiAgICAgIHZtLnVwZGF0ZVdpdGgodHJ5T3Bjb2RlKTtcbiAgICAgIHZtLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaCh0cnlPcGNvZGUuY2hpbGRyZW4pO1xuICAgIH0pO1xuXG4gICAgdXBkYXRpbmcuaW5zZXJ0QmVmb3JlKHRyeU9wY29kZSEsIHJlZmVyZW5jZSk7XG5cbiAgICB0aGlzLmRpZEluc2VydCA9IHRydWU7XG4gIH1cblxuICByZXRhaW4oX2tleTogc3RyaW5nLCBfaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBfbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+KSB7XG4gIH1cblxuICBtb3ZlKGtleTogc3RyaW5nLCBfaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBfbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBiZWZvcmU6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCwgdXBkYXRpbmcgfSA9IHRoaXM7XG5cbiAgICBsZXQgZW50cnkgPSBtYXBba2V5XTtcbiAgICBsZXQgcmVmZXJlbmNlID0gbWFwW2JlZm9yZV0gfHwgbnVsbDtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIG1vdmVCb3VuZHMoZW50cnksIHJlZmVyZW5jZS5maXJzdE5vZGUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vdmVCb3VuZHMoZW50cnksIHRoaXMubWFya2VyKTtcbiAgICB9XG5cbiAgICB1cGRhdGluZy5yZW1vdmUoZW50cnkpO1xuICAgIHVwZGF0aW5nLmluc2VydEJlZm9yZShlbnRyeSwgcmVmZXJlbmNlKTtcbiAgfVxuXG4gIGRlbGV0ZShrZXk6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCB9ID0gdGhpcztcbiAgICBsZXQgb3Bjb2RlID0gbWFwW2tleV07XG4gICAgb3Bjb2RlLmRpZERlc3Ryb3koKTtcbiAgICBjbGVhcihvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmcucmVtb3ZlKG9wY29kZSk7XG4gICAgZGVsZXRlIG1hcFtrZXldO1xuXG4gICAgdGhpcy5kaWREZWxldGUgPSB0cnVlO1xuICB9XG5cbiAgZG9uZSgpIHtcbiAgICB0aGlzLm9wY29kZS5kaWRJbml0aWFsaXplQ2hpbGRyZW4odGhpcy5kaWRJbnNlcnQgfHwgdGhpcy5kaWREZWxldGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QmxvY2tPcGNvZGUgZXh0ZW5kcyBCbG9ja09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJsaXN0LWJsb2NrXCI7XG4gIHB1YmxpYyBtYXAgPSBkaWN0PEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHM7XG5cbiAgcHJpdmF0ZSBsYXN0SXRlcmF0ZWQ6IFJldmlzaW9uID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IG51bWJlciwgc3RhdGU6IFZNU3RhdGUsIGJvdW5kczogVHJhY2tlciwgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+LCBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHN1cGVyKHN0YXJ0LCBzdGF0ZSwgYm91bmRzLCBjaGlsZHJlbik7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgbGV0IF90YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKENPTlNUQU5UX1RBRyk7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lKFthcnRpZmFjdHMudGFnLCBfdGFnXSk7XG4gIH1cblxuICBkaWRJbml0aWFsaXplQ2hpbGRyZW4obGlzdERpZENoYW5nZSA9IHRydWUpIHtcbiAgICB0aGlzLmxhc3RJdGVyYXRlZCA9IHRoaXMuYXJ0aWZhY3RzLnRhZy52YWx1ZSgpO1xuXG4gICAgaWYgKGxpc3REaWRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX3RhZy5pbm5lci51cGRhdGUoY29tYmluZVNsaWNlKHRoaXMuY2hpbGRyZW4pKTtcbiAgICB9XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGFydGlmYWN0cywgbGFzdEl0ZXJhdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFhcnRpZmFjdHMudGFnLnZhbGlkYXRlKGxhc3RJdGVyYXRlZCkpIHtcbiAgICAgIGxldCB7IGJvdW5kcyB9ID0gdGhpcztcbiAgICAgIGxldCB7IGRvbSB9ID0gdm07XG5cbiAgICAgIGxldCBtYXJrZXIgPSBkb20uY3JlYXRlQ29tbWVudCgnJyk7XG4gICAgICBkb20uaW5zZXJ0QWZ0ZXIoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgbWFya2VyLCBleHBlY3QoYm91bmRzLmxhc3ROb2RlKCksIFwiY2FuJ3QgaW5zZXJ0IGFmdGVyIGFuIGVtcHR5IGJvdW5kc1wiKSk7XG5cbiAgICAgIGxldCB0YXJnZXQgPSBuZXcgTGlzdFJldmFsaWRhdGlvbkRlbGVnYXRlKHRoaXMsIG1hcmtlcik7XG4gICAgICBsZXQgc3luY2hyb25pemVyID0gbmV3IEl0ZXJhdG9yU3luY2hyb25pemVyKHsgdGFyZ2V0LCBhcnRpZmFjdHMgfSk7XG5cbiAgICAgIHN5bmNocm9uaXplci5zeW5jKCk7XG5cbiAgICAgIHRoaXMucGFyZW50RWxlbWVudCgpLnJlbW92ZUNoaWxkKG1hcmtlcik7XG4gICAgfVxuXG4gICAgLy8gUnVuIG5vdy11cGRhdGVkIHVwZGF0aW5nIG9wY29kZXNcbiAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gIH1cblxuICB2bUZvckluc2VydGlvbihuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPik6IFZNIHtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZWxlbWVudFN0YWNrID0gRWxlbWVudFN0YWNrLmZvckluaXRpYWxSZW5kZXIoXG4gICAgICB0aGlzLmVudixcbiAgICAgIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKSxcbiAgICAgIG5leHRTaWJsaW5nXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQganNvbiA9IHN1cGVyLnRvSlNPTigpO1xuICAgIGxldCBtYXAgPSB0aGlzLm1hcDtcblxuICAgIGxldCBpbm5lciA9IE9iamVjdC5rZXlzKG1hcCkubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06ICR7bWFwW2tleV0uX2d1aWR9YDtcbiAgICB9KS5qb2luKFwiLCBcIik7XG5cbiAgICBsZXQgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdO1xuICAgIGlmICghZGV0YWlscykge1xuICAgICAgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdID0ge307XG4gICAgfVxuXG4gICAgZGV0YWlsc1tcIm1hcFwiXSA9IGB7JHtpbm5lcn19YDtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG59XG5cbmNsYXNzIFVwZGF0aW5nVk1GcmFtZSB7XG4gIHByaXZhdGUgY3VycmVudDogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZtOiBVcGRhdGluZ1ZNLCBwcml2YXRlIG9wczogVXBkYXRpbmdPcFNlcSwgcHJpdmF0ZSBleGNlcHRpb25IYW5kbGVyOiBPcHRpb248RXhjZXB0aW9uSGFuZGxlcj4pIHtcbiAgICB0aGlzLnZtID0gdm07XG4gICAgdGhpcy5vcHMgPSBvcHM7XG4gICAgdGhpcy5jdXJyZW50ID0gb3BzLmhlYWQoKTtcbiAgfVxuXG4gIGdvdG8ob3A6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy5jdXJyZW50ID0gb3A7XG4gIH1cblxuICBuZXh0U3RhdGVtZW50KCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IGN1cnJlbnQsIG9wcyB9ID0gdGhpcztcbiAgICBpZiAoY3VycmVudCkgdGhpcy5jdXJyZW50ID0gb3BzLm5leHROb2RlKGN1cnJlbnQpO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgaGFuZGxlRXhjZXB0aW9uKCkge1xuICAgIGlmICh0aGlzLmV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==

@@ -8,3 +8,3 @@ import './lib/bootstrap';

export { AttributeManager as IAttributeManager, AttributeManager, PropertyManager, INPUT_VALUE_PROPERTY_MANAGER, defaultManagers, defaultAttributeManagers, defaultPropertyManagers, readDOMAttr } from './lib/dom/attribute-managers';
export { debugSlice } from './lib/opcodes';
export { Register, debugSlice } from './lib/opcodes';
export { normalizeTextValue } from './lib/compiled/opcodes/content';

@@ -25,2 +25,2 @@ export { setDebuggerCallback, resetDebuggerCallback } from './lib/compiled/opcodes/debugger';

export { ConcreteBounds } from './lib/bounds';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxPQUFPLElBQUksZUFBZSxFQUE2QixNQUFNLGdCQUFnQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqSCxPQUFPLEVBQ0osT0FBTyxJQUFJLGdCQUFnQixFQUM3QixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDLE9BQU8sRUFFTCxhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQU94QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUd4QixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFDTCxnQkFBZ0IsSUFBSSxpQkFBaUIsRUFDckMsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZiw0QkFBNEIsRUFDNUIsZUFBZSxFQUNmLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsV0FBVyxFQUNaLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUNMLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFFdEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsT0FBTyxJQUFJLGFBQWEsRUFDekIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsTUFBTSxJQUFJLFdBQVcsRUFDckIsT0FBTyxJQUFJLFlBQVksRUFHdkIsV0FBVyxFQUNYLElBQUksSUFBSSxpQkFBaUIsRUFDMUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGtCQUFrQixFQUtsQixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFrQixVQUFVLEVBQUUsWUFBWSxFQUFrQixNQUFNLFVBQVUsQ0FBQztBQVdwRixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXhELE9BQU8sRUFDTCxLQUFLLEVBQ0wsT0FBTyxJQUFJLFdBQVcsR0FHdkIsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFJTCxtQkFBbUIsRUFJbkIscUJBQXFCLEVBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFNcEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxVQUFVLEVBQUUsVUFBVSxJQUFJLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6SSxPQUFRLEtBQUssTUFBTSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNsQixPQUFPLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi9saWIvYm9vdHN0cmFwJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB0ZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlRmFjdG9yeSwgVGVtcGxhdGUgfSBmcm9tICcuL2xpYi90ZW1wbGF0ZSc7XG5cbmV4cG9ydCB7IE5VTExfUkVGRVJFTkNFLCBVTkRFRklORURfUkVGRVJFTkNFLCBQcmltaXRpdmVSZWZlcmVuY2UsIENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi9saWIvcmVmZXJlbmNlcyc7XG5cbmV4cG9ydCB7XG4gICBkZWZhdWx0IGFzIE9wY29kZUJ1aWxkZXJEU0xcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9idWlsZGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcGlsYWJsZUxheW91dCxcbiAgY29tcGlsZUxheW91dFxufSBmcm9tICcuL2xpYi9jb21waWxlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudEJ1aWxkZXIsXG4gIENvbXBvbmVudEFyZ3Ncbn0gZnJvbSAnLi9saWIvb3Bjb2RlLWJ1aWxkZXInO1xuXG5leHBvcnQge1xuICBDb21waWxlZFN0YXRpY1RlbXBsYXRlLFxuICBDb21waWxlZER5bmFtaWNUZW1wbGF0ZSxcbiAgQ29tcGlsZWREeW5hbWljQmxvY2ssXG4gIENvbXBpbGVkRHluYW1pY1Byb2dyYW1cbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvYmxvY2tzJztcblxuZXhwb3J0IHtcbiAgQXR0cmlidXRlTWFuYWdlciBhcyBJQXR0cmlidXRlTWFuYWdlcixcbiAgQXR0cmlidXRlTWFuYWdlcixcbiAgUHJvcGVydHlNYW5hZ2VyLFxuICBJTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSLFxuICBkZWZhdWx0TWFuYWdlcnMsXG4gIGRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2VycyxcbiAgZGVmYXVsdFByb3BlcnR5TWFuYWdlcnMsXG4gIHJlYWRET01BdHRyXG59IGZyb20gJy4vbGliL2RvbS9hdHRyaWJ1dGUtbWFuYWdlcnMnO1xuXG5leHBvcnQge1xuICBkZWJ1Z1NsaWNlXG59IGZyb20gJy4vbGliL29wY29kZXMnO1xuXG5leHBvcnQge1xuICBub3JtYWxpemVUZXh0VmFsdWVcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcblxuZXhwb3J0IHtcbiAgc2V0RGVidWdnZXJDYWxsYmFjayxcbiAgcmVzZXREZWJ1Z2dlckNhbGxiYWNrLFxuICBEZWJ1Z0NhbGxiYWNrXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvZGVidWdnZXInO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGdldER5bmFtaWNWYXJcbn0gZnJvbSAnLi9saWIvaGVscGVycy9nZXQtZHluYW1pYy12YXInO1xuXG5leHBvcnQge1xuICBCbG9ja3MgYXMgQmxvY2tNYWNyb3MsXG4gIElubGluZXMgYXMgSW5saW5lTWFjcm9zLFxuICBCbG9ja01hY3JvLFxuICBNaXNzaW5nQmxvY2tNYWNybyxcbiAgY29tcGlsZUxpc3QsXG4gIGV4cHIgYXMgY29tcGlsZUV4cHJlc3Npb25cbn0gZnJvbSAnLi9saWIvc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCB7XG4gIENsaWVudFNpZGUsXG4gIENvbXBpbGFibGVUZW1wbGF0ZSxcbiAgU2Nhbm5lZEJsb2NrLFxuICBTY2FubmVkUHJvZ3JhbSxcbiAgQmxvY2ssXG4gIFByb2dyYW0sXG4gIGNvbXBpbGVTdGF0ZW1lbnRcbn0gZnJvbSAnLi9saWIvc2Nhbm5lcic7XG5cbmV4cG9ydCB7IFB1YmxpY1ZNIGFzIFZNLCBVcGRhdGluZ1ZNLCBSZW5kZXJSZXN1bHQsIEl0ZXJhdG9yUmVzdWx0IH0gZnJvbSAnLi9saWIvdm0nO1xuXG5leHBvcnQge1xuICBJQXJndW1lbnRzIGFzIEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkQXJndW1lbnRzIGFzIENhcHR1cmVkQXJndW1lbnRzLFxuICBJUG9zaXRpb25hbEFyZ3VtZW50cyBhcyBQb3NpdGlvbmFsQXJndW1lbnRzLFxuICBJQ2FwdHVyZWRQb3NpdGlvbmFsQXJndW1lbnRzIGFzIENhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgSU5hbWVkQXJndW1lbnRzIGFzIE5hbWVkQXJndW1lbnRzLFxuICBJQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyBhcyBDYXB0dXJlZE5hbWVkQXJndW1lbnRzLFxufSBmcm9tICcuL2xpYi92bS9hcmd1bWVudHMnO1xuXG5leHBvcnQgeyBTYWZlU3RyaW5nLCBpc1NhZmVTdHJpbmcgfSBmcm9tICcuL2xpYi91cHNlcnQnO1xuXG5leHBvcnQge1xuICBTY29wZSxcbiAgZGVmYXVsdCBhcyBFbnZpcm9ubWVudCxcbiAgSGVscGVyLFxuICBEeW5hbWljU2NvcGUsXG59IGZyb20gJy4vbGliL2Vudmlyb25tZW50JztcblxuZXhwb3J0IHtcbiAgUGFydGlhbERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvcGFydGlhbCc7XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50Q2xhc3MsXG4gIENvbXBvbmVudE1hbmFnZXIsXG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIENvbXBvbmVudExheW91dEJ1aWxkZXIsXG4gIENvbXBvbmVudEF0dHJzQnVpbGRlcixcbiAgUHJlcGFyZWRBcmd1bWVudHMsXG4gIGlzQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7XG4gIE1vZGlmaWVyTWFuYWdlclxufSBmcm9tICcuL2xpYi9tb2RpZmllci9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBET01DaGFuZ2VzLCBET01DaGFuZ2VzIGFzIElET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uLCBpc1doaXRlc3BhY2UsIGluc2VydEhUTUxCZWZvcmUgfSBmcm9tICcuL2xpYi9kb20vaGVscGVyJztcbmltcG9ydCAgKiBhcyBTaW1wbGUgZnJvbSAnLi9saWIvZG9tL2ludGVyZmFjZXMnO1xuZXhwb3J0IHsgU2ltcGxlIH07XG5leHBvcnQgeyBFbGVtZW50U3RhY2ssIEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi9saWIvYnVpbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcywgQ29uY3JldGVCb3VuZHMgfSBmcm9tICcuL2xpYi9ib3VuZHMnO1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxPQUFPLElBQUksZUFBZSxFQUE2QixNQUFNLGdCQUFnQixDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqSCxPQUFPLEVBQ0osT0FBTyxJQUFJLGdCQUFnQixFQUM3QixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDLE9BQU8sRUFFTCxhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQU94QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUd4QixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFDTCxnQkFBZ0IsSUFBSSxpQkFBaUIsRUFDckMsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZiw0QkFBNEIsRUFDNUIsZUFBZSxFQUNmLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsV0FBVyxFQUNaLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIscUJBQXFCLEVBRXRCLE1BQU0saUNBQWlDLENBQUM7QUFFekMsT0FBTyxFQUNMLE9BQU8sSUFBSSxhQUFhLEVBQ3pCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsT0FBTyxFQUNMLE1BQU0sSUFBSSxXQUFXLEVBQ3JCLE9BQU8sSUFBSSxZQUFZLEVBR3ZCLFdBQVcsRUFDWCxJQUFJLElBQUksaUJBQWlCLEVBQzFCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUNMLFVBQVUsRUFDVixrQkFBa0IsRUFLbEIsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBa0IsVUFBVSxFQUFFLFlBQVksRUFBa0IsTUFBTSxVQUFVLENBQUM7QUFXcEYsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsS0FBSyxFQUNMLE9BQU8sSUFBSSxXQUFXLEdBR3ZCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUNMLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBSUwsbUJBQW1CLEVBSW5CLHFCQUFxQixFQUN0QixNQUFNLDRCQUE0QixDQUFDO0FBTXBDLE9BQU8sRUFBRSxPQUFPLElBQUksVUFBVSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekksT0FBUSxLQUFLLE1BQU0sTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbEIsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFxQixjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4vbGliL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUnO1xuXG5leHBvcnQgeyBOVUxMX1JFRkVSRU5DRSwgVU5ERUZJTkVEX1JFRkVSRU5DRSwgUHJpbWl0aXZlUmVmZXJlbmNlLCBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4vbGliL3JlZmVyZW5jZXMnO1xuXG5leHBvcnQge1xuICAgZGVmYXVsdCBhcyBPcGNvZGVCdWlsZGVyRFNMXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBpbGFibGVMYXlvdXQsXG4gIGNvbXBpbGVMYXlvdXRcbn0gZnJvbSAnLi9saWIvY29tcGlsZXInO1xuXG5leHBvcnQge1xuICBDb21wb25lbnRCdWlsZGVyLFxuICBDb21wb25lbnRBcmdzXG59IGZyb20gJy4vbGliL29wY29kZS1idWlsZGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZSxcbiAgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsXG4gIENvbXBpbGVkRHluYW1pY0Jsb2NrLFxuICBDb21waWxlZER5bmFtaWNQcm9ncmFtXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2Jsb2Nrcyc7XG5cbmV4cG9ydCB7XG4gIEF0dHJpYnV0ZU1hbmFnZXIgYXMgSUF0dHJpYnV0ZU1hbmFnZXIsXG4gIEF0dHJpYnV0ZU1hbmFnZXIsXG4gIFByb3BlcnR5TWFuYWdlcixcbiAgSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUixcbiAgZGVmYXVsdE1hbmFnZXJzLFxuICBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnMsXG4gIGRlZmF1bHRQcm9wZXJ0eU1hbmFnZXJzLFxuICByZWFkRE9NQXR0clxufSBmcm9tICcuL2xpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcblxuZXhwb3J0IHtcbiAgUmVnaXN0ZXIsXG4gIGRlYnVnU2xpY2Vcbn0gZnJvbSAnLi9saWIvb3Bjb2Rlcyc7XG5cbmV4cG9ydCB7XG4gIG5vcm1hbGl6ZVRleHRWYWx1ZVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2NvbnRlbnQnO1xuXG5leHBvcnQge1xuICBzZXREZWJ1Z2dlckNhbGxiYWNrLFxuICByZXNldERlYnVnZ2VyQ2FsbGJhY2ssXG4gIERlYnVnQ2FsbGJhY2tcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9kZWJ1Z2dlcic7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgZ2V0RHluYW1pY1ZhclxufSBmcm9tICcuL2xpYi9oZWxwZXJzL2dldC1keW5hbWljLXZhcic7XG5cbmV4cG9ydCB7XG4gIEJsb2NrcyBhcyBCbG9ja01hY3JvcyxcbiAgSW5saW5lcyBhcyBJbmxpbmVNYWNyb3MsXG4gIEJsb2NrTWFjcm8sXG4gIE1pc3NpbmdCbG9ja01hY3JvLFxuICBjb21waWxlTGlzdCxcbiAgZXhwciBhcyBjb21waWxlRXhwcmVzc2lvblxufSBmcm9tICcuL2xpYi9zeW50YXgvZnVuY3Rpb25zJztcblxuZXhwb3J0IHtcbiAgQ2xpZW50U2lkZSxcbiAgQ29tcGlsYWJsZVRlbXBsYXRlLFxuICBTY2FubmVkQmxvY2ssXG4gIFNjYW5uZWRQcm9ncmFtLFxuICBCbG9jayxcbiAgUHJvZ3JhbSxcbiAgY29tcGlsZVN0YXRlbWVudFxufSBmcm9tICcuL2xpYi9zY2FubmVyJztcblxuZXhwb3J0IHsgUHVibGljVk0gYXMgVk0sIFVwZGF0aW5nVk0sIFJlbmRlclJlc3VsdCwgSXRlcmF0b3JSZXN1bHQgfSBmcm9tICcuL2xpYi92bSc7XG5cbmV4cG9ydCB7XG4gIElBcmd1bWVudHMgYXMgQXJndW1lbnRzLFxuICBJQ2FwdHVyZWRBcmd1bWVudHMgYXMgQ2FwdHVyZWRBcmd1bWVudHMsXG4gIElQb3NpdGlvbmFsQXJndW1lbnRzIGFzIFBvc2l0aW9uYWxBcmd1bWVudHMsXG4gIElDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHMgYXMgQ2FwdHVyZWRQb3NpdGlvbmFsQXJndW1lbnRzLFxuICBJTmFtZWRBcmd1bWVudHMgYXMgTmFtZWRBcmd1bWVudHMsXG4gIElDYXB0dXJlZE5hbWVkQXJndW1lbnRzIGFzIENhcHR1cmVkTmFtZWRBcmd1bWVudHMsXG59IGZyb20gJy4vbGliL3ZtL2FyZ3VtZW50cyc7XG5cbmV4cG9ydCB7IFNhZmVTdHJpbmcsIGlzU2FmZVN0cmluZyB9IGZyb20gJy4vbGliL3Vwc2VydCc7XG5cbmV4cG9ydCB7XG4gIFNjb3BlLFxuICBkZWZhdWx0IGFzIEVudmlyb25tZW50LFxuICBIZWxwZXIsXG4gIER5bmFtaWNTY29wZSxcbn0gZnJvbSAnLi9saWIvZW52aXJvbm1lbnQnO1xuXG5leHBvcnQge1xuICBQYXJ0aWFsRGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9wYXJ0aWFsJztcblxuZXhwb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRDbGFzcyxcbiAgQ29tcG9uZW50TWFuYWdlcixcbiAgQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgQ29tcG9uZW50TGF5b3V0QnVpbGRlcixcbiAgQ29tcG9uZW50QXR0cnNCdWlsZGVyLFxuICBQcmVwYXJlZEFyZ3VtZW50cyxcbiAgaXNDb21wb25lbnREZWZpbml0aW9uXG59IGZyb20gJy4vbGliL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHtcbiAgTW9kaWZpZXJNYW5hZ2VyXG59IGZyb20gJy4vbGliL21vZGlmaWVyL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIERPTUNoYW5nZXMsIERPTUNoYW5nZXMgYXMgSURPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24sIGlzV2hpdGVzcGFjZSwgaW5zZXJ0SFRNTEJlZm9yZSB9IGZyb20gJy4vbGliL2RvbS9oZWxwZXInO1xuaW1wb3J0ICAqIGFzIFNpbXBsZSBmcm9tICcuL2xpYi9kb20vaW50ZXJmYWNlcyc7XG5leHBvcnQgeyBTaW1wbGUgfTtcbmV4cG9ydCB7IEVsZW1lbnRTdGFjaywgRWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2xpYi9idWlsZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm91bmRzLCBDb25jcmV0ZUJvdW5kcyB9IGZyb20gJy4vbGliL2JvdW5kcyc7XG4iXX0=

@@ -50,2 +50,3 @@ import { clear } from './bounds';

this.defaultOperations = new SimpleElementOperations(env);
this.pushSimpleBlock();
this.elementStack.push(this.element);

@@ -257,5 +258,6 @@ this.nextSiblingStack.push(this.nextSibling);

let nextSibling = clear(this);
this.destroyables = null;
this.first = null;
this.last = null;
this.destroyables = null;
this.nesting = 0;
return nextSibling;

@@ -301,2 +303,2 @@ }

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBZSxFQUE2QixLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJcEUsT0FBTyxFQUF1QixLQUFLLEVBQThCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRdkcsT0FBTyxFQUNMLHVCQUF1QixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBWWhDO0lBQ0UsWUFBb0IsSUFBVTtRQUFWLFNBQUksR0FBSixJQUFJLENBQU07SUFBSSxDQUFDO0lBRW5DLFNBQVM7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFFRDtJQUNFLFlBQW9CLElBQVU7UUFBVixTQUFJLEdBQUosSUFBSSxDQUFNO0lBQUksQ0FBQztJQUVuQyxRQUFRO1FBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBVUQsTUFBTTtJQUdKLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQsTUFBTTtJQTRCSixZQUFZLEdBQWdCLEVBQUUsVUFBMEIsRUFBRSxXQUFnQztRQXhCbkYsaUJB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Q0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFpQjtRQUMzQixNQUFNLENBQUMsS0FBSyxFQUFFLGlEQUFpRCxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLENBQUMsS0FBSyxFQUFFLGtEQUFrRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFXO1FBQ2pCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsdURBQXVELENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWU7SUFDekIsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFlO0lBQzlCLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBb0I7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJvdW5kcywgeyBDdXJzb3IsIERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciB9IGZyb20gJy4vYm91bmRzJztcblxuaW1wb3J0IHsgRE9NQ2hhbmdlcywgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4vZG9tL2hlbHBlcic7XG5cbmltcG9ydCB7IE9wdGlvbiwgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaW5rZWRMaXN0Tm9kZSwgYXNzZXJ0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50JztcblxuaW1wb3J0IHsgVk0gfSBmcm9tICcuL3ZtJztcblxuaW1wb3J0IHsgVmVyc2lvbmVkUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcblxuaW1wb3J0IHtcbiAgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnNcbn0gZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2RvbSc7XG5cbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2RvbS9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBGaXJzdE5vZGUge1xuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXN0Tm9kZSB7XG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmNsYXNzIEZpcnN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBmaXJzdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5jbGFzcyBMYXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBsYXN0Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE9wZXJhdGlvbnMge1xuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbik6IHZvaWQ7XG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhZ21lbnQgaW1wbGVtZW50cyBCb3VuZHMge1xuICBwcml2YXRlIGJvdW5kczogQm91bmRzO1xuXG4gIGNvbnN0cnVjdG9yKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgdXBkYXRlKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTdGFjayBpbXBsZW1lbnRzIEN1cnNvciB7XG4gIHB1YmxpYyBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbiAgcHVibGljIGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbjtcbiAgcHVibGljIHVwZGF0ZU9wZXJhdGlvbnM6IERPTUNoYW5nZXM7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rpbmc6IE9wdGlvbjxTaW1wbGUuRWxlbWVudD4gPSBudWxsO1xuICBwdWJsaWMgb3BlcmF0aW9uczogT3B0aW9uPEVsZW1lbnRPcGVyYXRpb25zPiA9IG51bGw7XG4gIHB1YmxpYyBlbGVtZW50OiBTaW1wbGUuRWxlbWVudDtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG5cbiAgcHJpdmF0ZSBlbGVtZW50U3RhY2sgPSBuZXcgU3RhY2s8U2ltcGxlLkVsZW1lbnQ+KCk7XG4gIHByaXZhdGUgbmV4dFNpYmxpbmdTdGFjayA9IG5ldyBTdGFjazxPcHRpb248U2ltcGxlLk5vZGU+PigpO1xuICBwcml2YXRlIGJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8VHJhY2tlcj4oKTtcblxuICBwcml2YXRlIGRlZmF1bHRPcGVyYXRpb25zOiBFbGVtZW50T3BlcmF0aW9ucztcblxuICBzdGF0aWMgZm9ySW5pdGlhbFJlbmRlcihlbnY6IEVudmlyb25tZW50LCBwYXJlbnROb2RlOiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICByZXR1cm4gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyByZXN1bWUoZW52OiBFbnZpcm9ubWVudCwgdHJhY2tlcjogVHJhY2tlciwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRyYWNrZXIucGFyZW50RWxlbWVudCgpO1xuXG4gICAgbGV0IHN0YWNrID0gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgICBzdGFjay5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgcGFyZW50Tm9kZTogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5kb20gPSBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0aW9ucyA9IGVudi5nZXRET00oKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBwYXJlbnROb2RlO1xuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZztcblxuICAgIHRoaXMuZGVmYXVsdE9wZXJhdGlvbnMgPSBuZXcgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnMoZW52KTtcblxuICAgIHRoaXMuZWxlbWVudFN0YWNrLnB1c2godGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLm5leHRTaWJsaW5nU3RhY2sucHVzaCh0aGlzLm5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIGV4cGVjdENvbnN0cnVjdGluZyhtZXRob2Q6IHN0cmluZyk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuY29uc3RydWN0aW5nLCBgJHttZXRob2R9IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuICB9XG5cbiAgZXhwZWN0T3BlcmF0aW9ucyhtZXRob2Q6IHN0cmluZyk6IEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMub3BlcmF0aW9ucywgYCR7bWV0aG9kfSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hpbGUgY29uc3RydWN0aW5nIGFuIGVsZW1lbnRgKTtcbiAgfVxuXG4gIGJsb2NrKCk6IFRyYWNrZXIge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQsIFwiRXhwZWN0ZWQgYSBjdXJyZW50IGJsb2NrIHRyYWNrZXJcIik7XG4gIH1cblxuICBwb3BFbGVtZW50KCkge1xuICAgIGxldCB7IGVsZW1lbnRTdGFjaywgbmV4dFNpYmxpbmdTdGFjayB9ICA9IHRoaXM7XG5cbiAgICBsZXQgdG9wRWxlbWVudCA9IGVsZW1lbnRTdGFjay5wb3AoKTtcbiAgICBuZXh0U2libGluZ1N0YWNrLnBvcCgpO1xuICAgIC8vIExPR0dFUi5kZWJ1ZyhgLT4gZWxlbWVudCBzdGFjayAke3RoaXMuZWxlbWVudFN0YWNrLnRvQXJyYXkoKS5tYXAoZSA9PiBlLnRhZ05hbWUpLmpvaW4oJywgJyl9YCk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBleHBlY3QoZWxlbWVudFN0YWNrLmN1cnJlbnQsIFwiY2FuJ3QgcG9wIHBhc3QgdGhlIGxhc3QgZWxlbWVudFwiKTtcbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmdTdGFjay5jdXJyZW50O1xuXG4gICAgcmV0dXJuIHRvcEVsZW1lbnQ7XG4gIH1cblxuICBwdXNoU2ltcGxlQmxvY2soKTogVHJhY2tlciB7XG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgU2ltcGxlQmxvY2tUcmFja2VyKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcHVzaFVwZGF0YWJsZUJsb2NrKCk6IFVwZGF0YWJsZVRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IFVwZGF0YWJsZUJsb2NrVHJhY2tlcih0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEJsb2NrVHJhY2tlcih0cmFja2VyOiBUcmFja2VyLCBpc1JlbW90ZSA9IGZhbHNlKSB7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmJsb2NrU3RhY2suY3VycmVudDtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjdXJyZW50Lm5ld0Rlc3Ryb3lhYmxlKHRyYWNrZXIpO1xuXG4gICAgICBpZiAoIWlzUmVtb3RlKSB7XG4gICAgICAgIGN1cnJlbnQubmV3Qm91bmRzKHRyYWNrZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYmxvY2tTdGFjay5wdXNoKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcHVzaEJsb2NrTGlzdChsaXN0OiBMaW5rZWRMaXN0PExpbmtlZExpc3ROb2RlICYgQm91bmRzICYgRGVzdHJveWFibGU+KTogVHJhY2tlciB7XG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgQmxvY2tMaXN0VHJhY2tlcih0aGlzLmVsZW1lbnQsIGxpc3QpO1xuICAgIGxldCBjdXJyZW50ID0gdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQ7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY3VycmVudC5uZXdEZXN0cm95YWJsZSh0cmFja2VyKTtcbiAgICAgIGN1cnJlbnQubmV3Qm91bmRzKHRyYWNrZXIpO1xuICAgIH1cblxuICAgIHRoaXMuYmxvY2tTdGFjay5wdXNoKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcG9wQmxvY2soKTogVHJhY2tlciB7XG4gICAgdGhpcy5ibG9jaygpLmZpbmFsaXplKHRoaXMpO1xuXG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmJsb2NrU3RhY2sucG9wKCksIFwiRXhwZWN0ZWQgcG9wQmxvY2sgdG8gcmV0dXJuIGEgYmxvY2tcIik7XG4gIH1cblxuICBvcGVuRWxlbWVudCh0YWc6IHN0cmluZywgb3BlcmF0aW9ucyA9IHRoaXMuZGVmYXVsdE9wZXJhdGlvbnMpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KHRhZywgdGhpcy5lbGVtZW50KTtcblxuICAgIHRoaXMuY29uc3RydWN0aW5nID0gZWxlbWVudDtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBmbHVzaEVsZW1lbnQoKSB7XG4gICAgbGV0IHBhcmVudCAgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IGVsZW1lbnQgPSBleHBlY3QodGhpcy5jb25zdHJ1Y3RpbmcsIGBmbHVzaEVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gY29uc3RydWN0aW5nIGFuIGVsZW1lbnRgKTtcblxuICAgIHRoaXMuZG9tLmluc2VydEJlZm9yZShwYXJlbnQsIGVsZW1lbnQsIHRoaXMubmV4dFNpYmxpbmcpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RpbmcgPSBudWxsO1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IG51bGw7XG5cbiAgICB0aGlzLnB1c2hFbGVtZW50KGVsZW1lbnQpO1xuICAgIHRoaXMuYmxvY2soKS5vcGVuRWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHB1c2hSZW1vdGVFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGwpIHtcbiAgICB0aGlzLnB1c2hFbGVtZW50KGVsZW1lbnQsIG5leHRTaWJsaW5nKTtcblxuICAgIGxldCB0cmFja2VyID0gbmV3IFJlbW90ZUJsb2NrVHJhY2tlcihlbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlciwgdHJ1ZSk7XG4gIH1cblxuICBwb3BSZW1vdGVFbGVtZW50KCkge1xuICAgIHRoaXMucG9wQmxvY2soKTtcbiAgICB0aGlzLnBvcEVsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+ID0gbnVsbCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5lbGVtZW50U3RhY2sucHVzaChlbGVtZW50KTtcbiAgICAvLyBMT0dHRVIuZGVidWcoYC0+IGVsZW1lbnQgc3RhY2sgJHt0aGlzLmVsZW1lbnRTdGFjay50b0FycmF5KCkubWFwKGUgPT4gZS50YWdOYW1lKS5qb2luKCcsICcpfWApO1xuXG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nO1xuICAgIHRoaXMubmV4dFNpYmxpbmdTdGFjay5wdXNoKG5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKSB7XG4gICAgdGhpcy5ibG9jaygpLm5ld0Rlc3Ryb3lhYmxlKGQpO1xuICB9XG5cbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ibG9jaygpLm5ld0JvdW5kcyhib3VuZHMpO1xuICB9XG5cbiAgYXBwZW5kVGV4dChzdHJpbmc6IHN0cmluZyk6IFNpbXBsZS5UZXh0IHtcbiAgICBsZXQgeyBkb20gfSA9IHRoaXM7XG4gICAgbGV0IHRleHQgPSBkb20uY3JlYXRlVGV4dE5vZGUoc3RyaW5nKTtcbiAgICBkb20uaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgdGV4dCwgdGhpcy5uZXh0U2libGluZyk7XG4gICAgdGhpcy5ibG9jaygpLm5ld05vZGUodGV4dCk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBhcHBlbmRDb21tZW50KHN0cmluZzogc3RyaW5nKTogU2ltcGxlLkNvbW1lbnQge1xuICAgIGxldCB7IGRvbSB9ID0gdGhpcztcbiAgICBsZXQgY29tbWVudCA9IGRvbS5jcmVhdGVDb21tZW50KHN0cmluZyk7XG4gICAgZG9tLmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIGNvbW1lbnQsIHRoaXMubmV4dFNpYmxpbmcpO1xuICAgIHRoaXMuYmxvY2soKS5uZXdOb2RlKGNvbW1lbnQpO1xuICAgIHJldHVybiBjb21tZW50O1xuICB9XG5cbiAgc2V0U3RhdGljQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0U3RhdGljQXR0cmlidXRlJykuYWRkU3RhdGljQXR0cmlidXRlKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXRTdGF0aWNBdHRyaWJ1dGUnKSwgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0U3RhdGljQXR0cmlidXRlTlMobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0U3RhdGljQXR0cmlidXRlTlMnKS5hZGRTdGF0aWNBdHRyaWJ1dGVOUyh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0U3RhdGljQXR0cmlidXRlTlMnKSwgbmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBzZXREeW5hbWljQXR0cmlidXRlKG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0RHluYW1pY0F0dHJpYnV0ZScpLmFkZER5bmFtaWNBdHRyaWJ1dGUodGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldER5bmFtaWNBdHRyaWJ1dGUnKSwgbmFtZSwgcmVmZXJlbmNlLCBpc1RydXN0aW5nKTtcbiAgfVxuXG4gIHNldER5bmFtaWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXREeW5hbWljQXR0cmlidXRlTlMnKS5hZGREeW5hbWljQXR0cmlidXRlTlModGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldER5bmFtaWNBdHRyaWJ1dGVOUycpLCBuYW1lc3BhY2UsIG5hbWUsIHJlZmVyZW5jZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5ibG9jaygpLmNsb3NlRWxlbWVudCgpO1xuICAgIHRoaXMucG9wRWxlbWVudCgpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tlciBleHRlbmRzIERlc3Ryb3lhYmxlQm91bmRzIHtcbiAgb3BlbkVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQpOiB2b2lkO1xuICBjbG9zZUVsZW1lbnQoKTogdm9pZDtcbiAgbmV3Tm9kZShub2RlOiBTaW1wbGUuTm9kZSk6IHZvaWQ7XG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcyk6IHZvaWQ7XG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKTogdm9pZDtcbiAgZmluYWxpemUoc3RhY2s6IEVsZW1lbnRTdGFjayk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVCbG9ja1RyYWNrZXIgaW1wbGVtZW50cyBUcmFja2VyIHtcbiAgcHJvdGVjdGVkIGZpcnN0OiBPcHRpb248Rmlyc3ROb2RlPiA9IG51bGw7XG4gIHByb3RlY3RlZCBsYXN0OiBPcHRpb248TGFzdE5vZGU+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGRlc3Ryb3lhYmxlczogT3B0aW9uPERlc3Ryb3lhYmxlW10+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIG5lc3RpbmcgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTaW1wbGUuRWxlbWVudCl7fVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgbGV0IHsgZGVzdHJveWFibGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlc3Ryb3lhYmxlcyAmJiBkZXN0cm95YWJsZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpPTA7IGk8ZGVzdHJveWFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlc3Ryb3lhYmxlc1tpXS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyc3QgJiYgdGhpcy5maXJzdC5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmxhc3QgJiYgdGhpcy5sYXN0Lmxhc3ROb2RlKCk7XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgdGhpcy5uZXdOb2RlKGVsZW1lbnQpO1xuICAgIHRoaXMubmVzdGluZysrO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIHRoaXMubmVzdGluZy0tO1xuICB9XG5cbiAgbmV3Tm9kZShub2RlOiBOb2RlKSB7XG4gICAgaWYgKHRoaXMubmVzdGluZyAhPT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICB0aGlzLmZpcnN0ID0gbmV3IEZpcnN0KG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMubGFzdCA9IG5ldyBMYXN0KG5vZGUpO1xuICB9XG5cbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKSB7XG4gICAgaWYgKHRoaXMubmVzdGluZyAhPT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICB0aGlzLmZpcnN0ID0gYm91bmRzO1xuICAgIH1cblxuICAgIHRoaXMubGFzdCA9IGJvdW5kcztcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKSB7XG4gICAgdGhpcy5kZXN0cm95YWJsZXMgPSB0aGlzLmRlc3Ryb3lhYmxlcyB8fCBbXTtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcy5wdXNoKGQpO1xuICB9XG5cbiAgZmluYWxpemUoc3RhY2s6IEVsZW1lbnRTdGFjaykge1xuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgc3RhY2suYXBwZW5kQ29tbWVudCgnJyk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJlbW90ZUJsb2NrVHJhY2tlciBleHRlbmRzIFNpbXBsZUJsb2NrVHJhY2tlciB7XG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuXG4gICAgY2xlYXIodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGFibGVUcmFja2VyIGV4dGVuZHMgVHJhY2tlciB7XG4gIHJlc2V0KGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248U2ltcGxlLk5vZGU+O1xufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRhYmxlQmxvY2tUcmFja2VyIGV4dGVuZHMgU2ltcGxlQmxvY2tUcmFja2VyIGltcGxlbWVudHMgVXBkYXRhYmxlVHJhY2tlciB7XG4gIHJlc2V0KGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgeyBkZXN0cm95YWJsZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVzdHJveWFibGVzICYmIGRlc3Ryb3lhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxkZXN0cm95YWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW52LmRpZERlc3Ryb3koZGVzdHJveWFibGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV4dFNpYmxpbmcgPSBjbGVhcih0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveWFibGVzID0gbnVsbDtcbiAgICB0aGlzLmZpcnN0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3QgPSBudWxsO1xuXG4gICAgcmV0dXJuIG5leHRTaWJsaW5nO1xuICB9XG59XG5cbmNsYXNzIEJsb2NrTGlzdFRyYWNrZXIgaW1wbGVtZW50cyBUcmFja2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFNpbXBsZS5FbGVtZW50LCBwcml2YXRlIGJvdW5kTGlzdDogTGlua2VkTGlzdDxMaW5rZWRMaXN0Tm9kZSAmIEJvdW5kcyAmIERlc3Ryb3lhYmxlPikge1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMuYm91bmRMaXN0ID0gYm91bmRMaXN0O1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmJvdW5kTGlzdC5mb3JFYWNoTm9kZShub2RlID0+IG5vZGUuZGVzdHJveSgpKTtcbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIGxldCBoZWFkID0gdGhpcy5ib3VuZExpc3QuaGVhZCgpO1xuICAgIHJldHVybiBoZWFkICYmIGhlYWQuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgdGFpbCA9IHRoaXMuYm91bmRMaXN0LnRhaWwoKTtcbiAgICByZXR1cm4gdGFpbCAmJiB0YWlsLmxhc3ROb2RlKCk7XG4gIH1cblxuICBvcGVuRWxlbWVudChfZWxlbWVudDogRWxlbWVudCkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBvcGVuRWxlbWVudCBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCAnQ2Fubm90IGNsb3NlRWxlbWVudCBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBuZXdOb2RlKF9ub2RlOiBOb2RlKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCAnQ2Fubm90IGNyZWF0ZSBhIG5ldyBub2RlIGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QnKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhfYm91bmRzOiBCb3VuZHMpIHtcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKF9kOiBEZXN0cm95YWJsZSkge1xuICB9XG5cbiAgZmluYWxpemUoX3N0YWNrOiBFbGVtZW50U3RhY2spIHtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBZSxFQUE2QixLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJcEUsT0FBTyxFQUF1QixLQUFLLEVBQThCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRdkcsT0FBTyxFQUNMLHVCQUF1QixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBWWhDO0lBQ0UsWUFBb0IsSUFBVTtRQUFWLFNBQUksR0FBSixJQUFJLENBQU07SUFBSSxDQUFDO0lBRW5DLFNBQVM7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFFRDtJQUNFLFlBQW9CLElBQVU7UUFBVixTQUFJLEdBQUosSUFBSSxDQUFNO0lBQUksQ0FBQztJQUVuQyxRQUFRO1FBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBVUQsTUFBTTtJQUdKLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQsTUFBTTtJQTRCSixZQUFZLEdBQWdCLEVBQUUsVUFBMEIsRUFBRSxXQUFnQztRQXhCbkYsaUJB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SSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWlCO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsaURBQWlELENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sQ0FBQyxLQUFLLEVBQUUsa0RBQWtELENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVc7UUFDakIsTUFBTSxDQUFDLEtBQUssRUFBRSx1REFBdUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBZTtJQUN6QixDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQWU7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFvQjtJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQm91bmRzLCB7IEN1cnNvciwgRGVzdHJveWFibGVCb3VuZHMsIGNsZWFyIH0gZnJvbSAnLi9ib3VuZHMnO1xuXG5pbXBvcnQgeyBET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uIH0gZnJvbSAnLi9kb20vaGVscGVyJztcblxuaW1wb3J0IHsgT3B0aW9uLCBEZXN0cm95YWJsZSwgU3RhY2ssIExpbmtlZExpc3QsIExpbmtlZExpc3ROb2RlLCBhc3NlcnQsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQgeyBWTSB9IGZyb20gJy4vdm0nO1xuXG5pbXBvcnQgeyBWZXJzaW9uZWRSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5pbXBvcnQge1xuICBTaW1wbGVFbGVtZW50T3BlcmF0aW9uc1xufSBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvZG9tJztcblxuaW1wb3J0ICogYXMgU2ltcGxlIGZyb20gJy4vZG9tL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpcnN0Tm9kZSB7XG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhc3ROb2RlIHtcbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuY2xhc3MgRmlyc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGU6IE5vZGUpIHsgfVxuXG4gIGZpcnN0Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG59XG5cbmNsYXNzIExhc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGU6IE5vZGUpIHsgfVxuXG4gIGxhc3ROb2RlKCk6IE5vZGUge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIGFkZFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbik6IHZvaWQ7XG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKTogdm9pZDtcbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBGcmFnbWVudCBpbXBsZW1lbnRzIEJvdW5kcyB7XG4gIHByaXZhdGUgYm91bmRzOiBCb3VuZHM7XG5cbiAgY29uc3RydWN0b3IoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCk7XG4gIH1cblxuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLmxhc3ROb2RlKCk7XG4gIH1cblxuICB1cGRhdGUoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudFN0YWNrIGltcGxlbWVudHMgQ3Vyc29yIHtcbiAgcHVibGljIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+O1xuICBwdWJsaWMgZG9tOiBET01UcmVlQ29uc3RydWN0aW9uO1xuICBwdWJsaWMgdXBkYXRlT3BlcmF0aW9uczogRE9NQ2hhbmdlcztcbiAgcHVibGljIGNvbnN0cnVjdGluZzogT3B0aW9uPFNpbXBsZS5FbGVtZW50PiA9IG51bGw7XG4gIHB1YmxpYyBvcGVyYXRpb25zOiBPcHRpb248RWxlbWVudE9wZXJhdGlvbnM+ID0gbnVsbDtcbiAgcHVibGljIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50O1xuICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudDtcblxuICBwcml2YXRlIGVsZW1lbnRTdGFjayA9IG5ldyBTdGFjazxTaW1wbGUuRWxlbWVudD4oKTtcbiAgcHJpdmF0ZSBuZXh0U2libGluZ1N0YWNrID0gbmV3IFN0YWNrPE9wdGlvbjxTaW1wbGUuTm9kZT4+KCk7XG4gIHByaXZhdGUgYmxvY2tTdGFjayA9IG5ldyBTdGFjazxUcmFja2VyPigpO1xuXG4gIHByaXZhdGUgZGVmYXVsdE9wZXJhdGlvbnM6IEVsZW1lbnRPcGVyYXRpb25zO1xuXG4gIHN0YXRpYyBmb3JJbml0aWFsUmVuZGVyKGVudjogRW52aXJvbm1lbnQsIHBhcmVudE5vZGU6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPikge1xuICAgIHJldHVybiBuZXcgRWxlbWVudFN0YWNrKGVudiwgcGFyZW50Tm9kZSwgbmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgc3RhdGljIHJlc3VtZShlbnY6IEVudmlyb25tZW50LCB0cmFja2VyOiBUcmFja2VyLCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPikge1xuICAgIGxldCBwYXJlbnROb2RlID0gdHJhY2tlci5wYXJlbnRFbGVtZW50KCk7XG5cbiAgICBsZXQgc3RhY2sgPSBuZXcgRWxlbWVudFN0YWNrKGVudiwgcGFyZW50Tm9kZSwgbmV4dFNpYmxpbmcpO1xuICAgIHN0YWNrLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBwYXJlbnROb2RlOiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLmRvbSA9IGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVPcGVyYXRpb25zID0gZW52LmdldERPTSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nO1xuXG4gICAgdGhpcy5kZWZhdWx0T3BlcmF0aW9ucyA9IG5ldyBTaW1wbGVFbGVtZW50T3BlcmF0aW9ucyhlbnYpO1xuXG4gICAgdGhpcy5wdXNoU2ltcGxlQmxvY2soKTtcbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2godGhpcy5uZXh0U2libGluZyk7XG4gIH1cblxuICBleHBlY3RDb25zdHJ1Y3RpbmcobWV0aG9kOiBzdHJpbmcpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmNvbnN0cnVjdGluZywgYCR7bWV0aG9kfSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hpbGUgY29uc3RydWN0aW5nIGFuIGVsZW1lbnRgKTtcbiAgfVxuXG4gIGV4cGVjdE9wZXJhdGlvbnMobWV0aG9kOiBzdHJpbmcpOiBFbGVtZW50T3BlcmF0aW9ucyB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLm9wZXJhdGlvbnMsIGAke21ldGhvZH0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG4gIH1cblxuICBibG9jaygpOiBUcmFja2VyIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tTdGFjay5jdXJyZW50LCBcIkV4cGVjdGVkIGEgY3VycmVudCBibG9jayB0cmFja2VyXCIpO1xuICB9XG5cbiAgcG9wRWxlbWVudCgpIHtcbiAgICBsZXQgeyBlbGVtZW50U3RhY2ssIG5leHRTaWJsaW5nU3RhY2sgfSAgPSB0aGlzO1xuXG4gICAgbGV0IHRvcEVsZW1lbnQgPSBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgbmV4dFNpYmxpbmdTdGFjay5wb3AoKTtcbiAgICAvLyBMT0dHRVIuZGVidWcoYC0+IGVsZW1lbnQgc3RhY2sgJHt0aGlzLmVsZW1lbnRTdGFjay50b0FycmF5KCkubWFwKGUgPT4gZS50YWdOYW1lKS5qb2luKCcsICcpfWApO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gZXhwZWN0KGVsZW1lbnRTdGFjay5jdXJyZW50LCBcImNhbid0IHBvcCBwYXN0IHRoZSBsYXN0IGVsZW1lbnRcIik7XG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nU3RhY2suY3VycmVudDtcblxuICAgIHJldHVybiB0b3BFbGVtZW50O1xuICB9XG5cbiAgcHVzaFNpbXBsZUJsb2NrKCk6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IFNpbXBsZUJsb2NrVHJhY2tlcih0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hVcGRhdGFibGVCbG9jaygpOiBVcGRhdGFibGVUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBVcGRhdGFibGVCbG9ja1RyYWNrZXIodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwcml2YXRlIHB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcjogVHJhY2tlciwgaXNSZW1vdGUgPSBmYWxzZSkge1xuICAgIGxldCBjdXJyZW50ID0gdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQ7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY3VycmVudC5uZXdEZXN0cm95YWJsZSh0cmFja2VyKTtcblxuICAgICAgaWYgKCFpc1JlbW90ZSkge1xuICAgICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hCbG9ja0xpc3QobGlzdDogTGlua2VkTGlzdDxMaW5rZWRMaXN0Tm9kZSAmIEJvdW5kcyAmIERlc3Ryb3lhYmxlPik6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IEJsb2NrTGlzdFRyYWNrZXIodGhpcy5lbGVtZW50LCBsaXN0KTtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuYmxvY2tTdGFjay5jdXJyZW50O1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQubmV3RGVzdHJveWFibGUodHJhY2tlcik7XG4gICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHBvcEJsb2NrKCk6IFRyYWNrZXIge1xuICAgIHRoaXMuYmxvY2soKS5maW5hbGl6ZSh0aGlzKTtcblxuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja1N0YWNrLnBvcCgpLCBcIkV4cGVjdGVkIHBvcEJsb2NrIHRvIHJldHVybiBhIGJsb2NrXCIpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQodGFnOiBzdHJpbmcsIG9wZXJhdGlvbnMgPSB0aGlzLmRlZmF1bHRPcGVyYXRpb25zKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIGxldCBlbGVtZW50ID0gdGhpcy5kb20uY3JlYXRlRWxlbWVudCh0YWcsIHRoaXMuZWxlbWVudCk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdGluZyA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gb3BlcmF0aW9ucztcblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIGxldCBwYXJlbnQgID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBlbGVtZW50ID0gZXhwZWN0KHRoaXMuY29uc3RydWN0aW5nLCBgZmx1c2hFbGVtZW50IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG5cbiAgICB0aGlzLmRvbS5pbnNlcnRCZWZvcmUocGFyZW50LCBlbGVtZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcblxuICAgIHRoaXMuY29uc3RydWN0aW5nID0gbnVsbDtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy5wdXNoRWxlbWVudChlbGVtZW50KTtcbiAgICB0aGlzLmJsb2NrKCkub3BlbkVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBwdXNoUmVtb3RlRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsKSB7XG4gICAgdGhpcy5wdXNoRWxlbWVudChlbGVtZW50LCBuZXh0U2libGluZyk7XG5cbiAgICBsZXQgdHJhY2tlciA9IG5ldyBSZW1vdGVCbG9ja1RyYWNrZXIoZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIsIHRydWUpO1xuICB9XG5cbiAgcG9wUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLnBvcEJsb2NrKCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGwpIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuZWxlbWVudFN0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgLy8gTE9HR0VSLmRlYnVnKGAtPiBlbGVtZW50IHN0YWNrICR7dGhpcy5lbGVtZW50U3RhY2sudG9BcnJheSgpLm1hcChlID0+IGUudGFnTmFtZSkuam9pbignLCAnKX1gKTtcblxuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZztcbiAgICB0aGlzLm5leHRTaWJsaW5nU3RhY2sucHVzaChuZXh0U2libGluZyk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuYmxvY2soKS5uZXdEZXN0cm95YWJsZShkKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYmxvY2soKS5uZXdCb3VuZHMoYm91bmRzKTtcbiAgfVxuXG4gIGFwcGVuZFRleHQoc3RyaW5nOiBzdHJpbmcpOiBTaW1wbGUuVGV4dCB7XG4gICAgbGV0IHsgZG9tIH0gPSB0aGlzO1xuICAgIGxldCB0ZXh0ID0gZG9tLmNyZWF0ZVRleHROb2RlKHN0cmluZyk7XG4gICAgZG9tLmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIHRleHQsIHRoaXMubmV4dFNpYmxpbmcpO1xuICAgIHRoaXMuYmxvY2soKS5uZXdOb2RlKHRleHQpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgYXBwZW5kQ29tbWVudChzdHJpbmc6IHN0cmluZyk6IFNpbXBsZS5Db21tZW50IHtcbiAgICBsZXQgeyBkb20gfSA9IHRoaXM7XG4gICAgbGV0IGNvbW1lbnQgPSBkb20uY3JlYXRlQ29tbWVudChzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCBjb21tZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrKCkubmV3Tm9kZShjb21tZW50KTtcbiAgICByZXR1cm4gY29tbWVudDtcbiAgfVxuXG4gIHNldFN0YXRpY0F0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldFN0YXRpY0F0dHJpYnV0ZScpLmFkZFN0YXRpY0F0dHJpYnV0ZSh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0U3RhdGljQXR0cmlidXRlJyksIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldFN0YXRpY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldFN0YXRpY0F0dHJpYnV0ZU5TJykuYWRkU3RhdGljQXR0cmlidXRlTlModGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldFN0YXRpY0F0dHJpYnV0ZU5TJyksIG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldER5bmFtaWNBdHRyaWJ1dGUnKS5hZGREeW5hbWljQXR0cmlidXRlKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXREeW5hbWljQXR0cmlidXRlJyksIG5hbWUsIHJlZmVyZW5jZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBzZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0RHluYW1pY0F0dHJpYnV0ZU5TJykuYWRkRHluYW1pY0F0dHJpYnV0ZU5TKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXREeW5hbWljQXR0cmlidXRlTlMnKSwgbmFtZXNwYWNlLCBuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIHRoaXMuYmxvY2soKS5jbG9zZUVsZW1lbnQoKTtcbiAgICB0aGlzLnBvcEVsZW1lbnQoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXIgZXh0ZW5kcyBEZXN0cm95YWJsZUJvdW5kcyB7XG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogdm9pZDtcbiAgY2xvc2VFbGVtZW50KCk6IHZvaWQ7XG4gIG5ld05vZGUobm9kZTogU2ltcGxlLk5vZGUpOiB2b2lkO1xuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpOiB2b2lkO1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk6IHZvaWQ7XG4gIGZpbmFsaXplKHN0YWNrOiBFbGVtZW50U3RhY2spOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlQmxvY2tUcmFja2VyIGltcGxlbWVudHMgVHJhY2tlciB7XG4gIHByb3RlY3RlZCBmaXJzdDogT3B0aW9uPEZpcnN0Tm9kZT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgbGFzdDogT3B0aW9uPExhc3ROb2RlPiA9IG51bGw7XG4gIHByb3RlY3RlZCBkZXN0cm95YWJsZXM6IE9wdGlvbjxEZXN0cm95YWJsZVtdPiA9IG51bGw7XG4gIHByb3RlY3RlZCBuZXN0aW5nID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU2ltcGxlLkVsZW1lbnQpe31cblxuICBkZXN0cm95KCkge1xuICAgIGxldCB7IGRlc3Ryb3lhYmxlcyB9ID0gdGhpcztcblxuICAgIGlmIChkZXN0cm95YWJsZXMgJiYgZGVzdHJveWFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPGRlc3Ryb3lhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZXN0cm95YWJsZXNbaV0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmZpcnN0ICYmIHRoaXMuZmlyc3QuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5sYXN0ICYmIHRoaXMubGFzdC5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICAgIHRoaXMubmV3Tm9kZShlbGVtZW50KTtcbiAgICB0aGlzLm5lc3RpbmcrKztcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICB0aGlzLm5lc3RpbmctLTtcbiAgfVxuXG4gIG5ld05vZGUobm9kZTogTm9kZSkge1xuICAgIGlmICh0aGlzLm5lc3RpbmcgIT09IDApIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgdGhpcy5maXJzdCA9IG5ldyBGaXJzdChub2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3QgPSBuZXcgTGFzdChub2RlKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcykge1xuICAgIGlmICh0aGlzLm5lc3RpbmcgIT09IDApIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgdGhpcy5maXJzdCA9IGJvdW5kcztcbiAgICB9XG5cbiAgICB0aGlzLmxhc3QgPSBib3VuZHM7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuZGVzdHJveWFibGVzID0gdGhpcy5kZXN0cm95YWJsZXMgfHwgW107XG4gICAgdGhpcy5kZXN0cm95YWJsZXMucHVzaChkKTtcbiAgfVxuXG4gIGZpbmFsaXplKHN0YWNrOiBFbGVtZW50U3RhY2spIHtcbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHN0YWNrLmFwcGVuZENvbW1lbnQoJycpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZW1vdGVCbG9ja1RyYWNrZXIgZXh0ZW5kcyBTaW1wbGVCbG9ja1RyYWNrZXIge1xuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcblxuICAgIGNsZWFyKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRhYmxlVHJhY2tlciBleHRlbmRzIFRyYWNrZXIge1xuICByZXNldChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0YWJsZUJsb2NrVHJhY2tlciBleHRlbmRzIFNpbXBsZUJsb2NrVHJhY2tlciBpbXBsZW1lbnRzIFVwZGF0YWJsZVRyYWNrZXIge1xuICByZXNldChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IHsgZGVzdHJveWFibGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlc3Ryb3lhYmxlcyAmJiBkZXN0cm95YWJsZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpPTA7IGk8ZGVzdHJveWFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudi5kaWREZXN0cm95KGRlc3Ryb3lhYmxlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5leHRTaWJsaW5nID0gY2xlYXIodGhpcyk7XG5cbiAgICB0aGlzLmZpcnN0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3QgPSBudWxsO1xuICAgIHRoaXMuZGVzdHJveWFibGVzID0gbnVsbDtcbiAgICB0aGlzLm5lc3RpbmcgPSAwO1xuXG4gICAgcmV0dXJuIG5leHRTaWJsaW5nO1xuICB9XG59XG5cbmNsYXNzIEJsb2NrTGlzdFRyYWNrZXIgaW1wbGVtZW50cyBUcmFja2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFNpbXBsZS5FbGVtZW50LCBwcml2YXRlIGJvdW5kTGlzdDogTGlua2VkTGlzdDxMaW5rZWRMaXN0Tm9kZSAmIEJvdW5kcyAmIERlc3Ryb3lhYmxlPikge1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMuYm91bmRMaXN0ID0gYm91bmRMaXN0O1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmJvdW5kTGlzdC5mb3JFYWNoTm9kZShub2RlID0+IG5vZGUuZGVzdHJveSgpKTtcbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIGxldCBoZWFkID0gdGhpcy5ib3VuZExpc3QuaGVhZCgpO1xuICAgIHJldHVybiBoZWFkICYmIGhlYWQuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgdGFpbCA9IHRoaXMuYm91bmRMaXN0LnRhaWwoKTtcbiAgICByZXR1cm4gdGFpbCAmJiB0YWlsLmxhc3ROb2RlKCk7XG4gIH1cblxuICBvcGVuRWxlbWVudChfZWxlbWVudDogRWxlbWVudCkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBvcGVuRWxlbWVudCBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCAnQ2Fubm90IGNsb3NlRWxlbWVudCBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBuZXdOb2RlKF9ub2RlOiBOb2RlKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCAnQ2Fubm90IGNyZWF0ZSBhIG5ldyBub2RlIGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QnKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhfYm91bmRzOiBCb3VuZHMpIHtcbiAgfVxuXG4gIG5ld0Rlc3Ryb3lhYmxlKF9kOiBEZXN0cm95YWJsZSkge1xuICB9XG5cbiAgZmluYWxpemUoX3N0YWNrOiBFbGVtZW50U3RhY2spIHtcbiAgfVxufVxuIl19
import * as content from './content';
import * as vm from './vm';
import { Register } from '../../opcodes';
import { Stack, dict, expect, fillNulls, EMPTY_ARRAY } from '@glimmer/util';

@@ -10,5 +11,3 @@ import { ComponentBuilder } from '../../compiler';

this.labels = dict();
this.jumps = [];
this.ranges = [];
this.iters = [];
this.targets = [];
}

@@ -18,21 +17,9 @@ label(name, index) {

}
iter(at, breaks, start, end) {
this.iters.push({ at, breaks, start, end });
target(at, Target, target) {
this.targets.push({ at, Target, target });
}
jump(at, Target, target) {
this.jumps.push({ at, target, Target });
}
range(at, Range, args, start, end) {
this.ranges.push({ at, args, start, end, Range });
}
patch(opcodes) {
for (let { at, target, Target } of this.jumps) {
for (let { at, Target, target } of this.targets) {
opcodes.set(at, Target, this.labels[target]);
}
for (let { at, args, start, end, Range } of this.ranges) {
opcodes.set(at, Range, args, this.labels[start], this.labels[end]);
}
for (let { at, breaks, start, end } of this.iters) {
opcodes.set(at, 53 /* Iterate */, this.labels[breaks], this.labels[start], this.labels[end]);
}
}

@@ -46,7 +33,4 @@ }

this.labelsStack = new Stack();
this.locals = 0;
this._localsSize = 0;
this.constants = env.constants;
this.start = program.next;
this.reserve(18 /* ReserveLocals */);
}

@@ -62,15 +46,2 @@ get pos() {

}
local() {
let locals = this.locals++;
if (this._localsSize < this.locals) {
this._localsSize = this.locals;
}
return locals;
}
releaseLocal() {
this.locals--;
}
get localsSize() {
return this._localsSize;
}
reserve(name) {

@@ -83,5 +54,3 @@ this.push(name, 0, 0, 0);

finalize() {
this.program.set(this.start, 18 /* ReserveLocals */, this.localsSize);
this.push(19 /* ReleaseLocals */);
return this.push(23 /* Return */);
return this.push(22 /* Return */);
}

@@ -110,4 +79,4 @@ // args

}
setComponentState(local) {
this.push(57 /* SetComponentState */, local);
initializeComponentState() {
this.push(57 /* InitializeComponentState */);
}

@@ -143,18 +112,18 @@ prepareArgs(state) {

didRenderLayout(state) {
this.push(69 /* DidRenderLayout */, state);
this.push(68 /* DidRenderLayout */, state);
}
// partial
getPartialTemplate() {
this.push(70 /* GetPartialTemplate */);
this.push(69 /* GetPartialTemplate */);
}
resolveMaybeLocal(name) {
this.push(71 /* ResolveMaybeLocal */, this.string(name));
this.push(70 /* ResolveMaybeLocal */, this.string(name));
}
// debugger
debugger(symbols, evalInfo) {
this.push(72 /* Debugger */, this.constants.other(symbols), this.constants.array(evalInfo));
this.push(71 /* Debugger */, this.constants.other(symbols), this.constants.array(evalInfo));
}
// content
dynamicContent(Opcode) {
this.push(26 /* DynamicContent */, this.other(Opcode));
this.push(25 /* DynamicContent */, this.other(Opcode));
}

@@ -169,18 +138,18 @@ cautiousAppend() {

text(text) {
this.push(24 /* Text */, this.constants.string(text));
this.push(23 /* Text */, this.constants.string(text));
}
openPrimitiveElement(tag) {
this.push(27 /* OpenElement */, this.constants.string(tag));
this.push(26 /* OpenElement */, this.constants.string(tag));
}
openElementWithOperations(tag) {
this.push(28 /* OpenElementWithOperations */, this.constants.string(tag));
this.push(27 /* OpenElementWithOperations */, this.constants.string(tag));
}
openDynamicElement() {
this.push(29 /* OpenDynamicElement */);
this.push(28 /* OpenDynamicElement */);
}
flushElement() {
this.push(33 /* FlushElement */);
this.push(32 /* FlushElement */);
}
closeElement() {
this.push(34 /* CloseElement */);
this.push(33 /* CloseElement */);
}

@@ -191,3 +160,3 @@ staticAttr(_name, _namespace, _value) {

let value = this.constants.string(_value);
this.push(30 /* StaticAttr */, name, value, namespace);
this.push(29 /* StaticAttr */, name, value, namespace);
}

@@ -197,39 +166,39 @@ dynamicAttrNS(_name, _namespace, trusting) {

let namespace = this.constants.string(_namespace);
this.push(32 /* DynamicAttrNS */, name, namespace, trusting | 0);
this.push(31 /* DynamicAttrNS */, name, namespace, trusting | 0);
}
dynamicAttr(_name, trusting) {
let name = this.constants.string(_name);
this.push(31 /* DynamicAttr */, name, trusting | 0);
this.push(30 /* DynamicAttr */, name, trusting | 0);
}
comment(_comment) {
let comment = this.constants.string(_comment);
this.push(25 /* Comment */, comment);
this.push(24 /* Comment */, comment);
}
modifier(_definition) {
this.push(35 /* Modifier */, this.other(_definition));
this.push(34 /* Modifier */, this.other(_definition));
}
// lists
putIterator() {
this.push(52 /* PutIterator */);
this.push(53 /* PutIterator */);
}
enterList(start, end) {
this.reserve(50 /* EnterList */);
this.labels.range(this.pos, 50 /* EnterList */, 0, start, end);
enterList(start) {
this.reserve(51 /* EnterList */);
this.labels.target(this.pos, 51 /* EnterList */, start);
}
exitList() {
this.push(51 /* ExitList */);
this.push(52 /* ExitList */);
}
iterate(breaks, start, end) {
this.reserve(53 /* Iterate */);
this.labels.iter(this.pos, breaks, start, end);
iterate(breaks) {
this.reserve(54 /* Iterate */);
this.labels.target(this.pos, 54 /* Iterate */, breaks);
}
// expressions
setVariable(symbol) {
this.push(3 /* SetVariable */, symbol);
this.push(4 /* SetVariable */, symbol);
}
getVariable(symbol) {
this.push(4 /* GetVariable */, symbol);
this.push(5 /* GetVariable */, symbol);
}
getProperty(key) {
this.push(5 /* GetProperty */, this.string(key));
this.push(6 /* GetProperty */, this.string(key));
}

@@ -251,20 +220,20 @@ getBlock(symbol) {

}
setLocal(pos) {
this.push(14 /* SetLocal */, pos);
load(register) {
this.push(17 /* Load */, register);
}
getLocal(pos) {
this.push(15 /* GetLocal */, pos);
fetch(register) {
this.push(18 /* Fetch */, register);
}
dup() {
return this.push(16 /* Dup */);
dup(register = Register.sp, offset = 0) {
return this.push(15 /* Dup */, register, offset);
}
pop() {
return this.push(17 /* Pop */);
pop(count = 1) {
return this.push(16 /* Pop */, count);
}
// vm
pushRemoteElement() {
this.push(36 /* PushRemoteElement */);
this.push(35 /* PushRemoteElement */);
}
popRemoteElement() {
this.push(37 /* PopRemoteElement */);
this.push(36 /* PopRemoteElement */);
}

@@ -275,18 +244,23 @@ label(name) {

pushRootScope(symbols, bindCallerScope) {
this.push(20 /* RootScope */, symbols, bindCallerScope | 0);
this.push(19 /* RootScope */, symbols, bindCallerScope | 0);
}
pushChildScope() {
this.push(21 /* ChildScope */);
this.push(20 /* ChildScope */);
}
popScope() {
this.push(22 /* PopScope */);
this.push(21 /* PopScope */);
}
returnTo(label) {
this.reserve(12 /* Immediate */);
this.labels.target(this.pos, 12 /* Immediate */, label);
this.load(Register.ra);
}
pushDynamicScope() {
this.push(39 /* PushDynamicScope */);
this.push(38 /* PushDynamicScope */);
}
popDynamicScope() {
this.push(40 /* PopDynamicScope */);
this.push(39 /* PopDynamicScope */);
}
pushImmediate(value) {
this.push(12 /* Constant */, this.other(value));
this.push(13 /* Constant */, this.other(value));
}

@@ -320,3 +294,3 @@ primitive(_primitive) {

}
this.push(13 /* Primitive */, (flag << 30) | primitive);
this.push(14 /* PrimitiveReference */, (flag << 30) | primitive);
}

@@ -327,65 +301,46 @@ helper(func) {

pushBlock(block) {
this.push(6 /* PushBlock */, this.block(block));
this.push(7 /* PushBlock */, this.block(block));
}
pushBlocks(_default, inverse) {
let flag = 0;
let defaultBlock = 0;
let inverseBlock = 0;
if (_default) {
flag |= 0b01;
defaultBlock = this.block(_default);
}
if (inverse) {
flag |= 0b10;
inverseBlock = this.block(inverse);
}
this.push(7 /* PushBlocks */, defaultBlock, inverseBlock, flag);
}
bindDynamicScope(_names) {
this.push(38 /* BindDynamicScope */, this.names(_names));
this.push(37 /* BindDynamicScope */, this.names(_names));
}
enter(args, enter, exit) {
this.reserve(47 /* Enter */);
this.labels.range(this.pos, 47 /* Enter */, args, enter, exit);
enter(args) {
this.push(48 /* Enter */, args);
}
exit() {
this.push(48 /* Exit */);
this.push(49 /* Exit */);
}
return() {
this.push(22 /* Return */);
}
pushFrame() {
this.push(46 /* PushFrame */);
}
popFrame() {
this.push(47 /* PopFrame */);
}
compileDynamicBlock() {
this.push(41 /* CompileDynamicBlock */);
this.push(40 /* CompileDynamicBlock */);
}
invokeDynamic(invoker) {
this.push(43 /* InvokeDynamic */, this.other(invoker));
this.push(42 /* InvokeDynamic */, this.other(invoker));
}
invokeStatic(_block) {
let { parameters } = _block.symbolTable;
let paramSize = parameters.length;
let argSize = arguments.length - 1;
let onStack = false;
let excess = 0;
if (argSize === 1 && typeof arguments[1] === 'number') {
argSize = Math.min(paramSize, arguments[1]);
excess = Math.max(arguments[1] - paramSize, 0);
onStack = true;
}
else {
argSize = Math.min(paramSize, argSize);
}
for (let i = 0; i < excess; i++) {
this.pop();
}
if (argSize) {
invokeStatic(block, callerCount = 0) {
let { parameters } = block.symbolTable;
let calleeCount = parameters.length;
let count = Math.min(callerCount, calleeCount);
this.pushFrame();
if (count) {
this.pushChildScope();
for (let i = argSize - 1; i >= 0; i--) {
if (!onStack) {
arguments[i + 1](this);
}
for (let i = 0; i < count; i++) {
this.dup(Register.fp, callerCount - i);
this.setVariable(parameters[i]);
}
}
let block = this.constants.block(_block);
this.push(42 /* InvokeStatic */, block);
if (argSize) {
let _block = this.constants.block(block);
this.push(41 /* InvokeStatic */, _block);
if (count) {
this.popScope();
}
this.popFrame();
}

@@ -410,15 +365,15 @@ test(testFunc) {

let func = this.constants.function(_func);
this.push(49 /* Test */, func);
this.push(50 /* Test */, func);
}
jump(target) {
this.reserve(44 /* Jump */);
this.labels.jump(this.pos, 44 /* Jump */, target);
this.reserve(43 /* Jump */);
this.labels.target(this.pos, 43 /* Jump */, target);
}
jumpIf(target) {
this.reserve(45 /* JumpIf */);
this.labels.jump(this.pos, 45 /* JumpIf */, target);
this.reserve(44 /* JumpIf */);
this.labels.target(this.pos, 44 /* JumpIf */, target);
}
jumpUnless(target) {
this.reserve(46 /* JumpUnless */);
this.labels.jump(this.pos, 46 /* JumpUnless */, target);
this.reserve(45 /* JumpUnless */);
this.labels.target(this.pos, 45 /* JumpUnless */, target);
}

@@ -484,21 +439,22 @@ string(_string) {

invokeComponent(attrs, params, hash, block, inverse = null) {
let state = this.local();
this.setComponentState(state);
this.initializeComponentState();
this.fetch(Register.s0);
this.dup(Register.sp, 1);
this.load(Register.s0);
this.pushBlock(block);
this.pushBlock(inverse);
this.compileArgs(params, hash, false);
this.prepareArgs(state);
this.prepareArgs(Register.s0);
this.beginComponentTransaction();
this.pushDynamicScope();
this.createComponent(state, true, false);
this.registerComponentDestructor(state);
this.beginComponentTransaction();
this.getComponentSelf(state);
this.getComponentLayout(state);
this.createComponent(Register.s0, true, inverse === null);
this.registerComponentDestructor(Register.s0);
this.getComponentSelf(Register.s0);
this.getComponentLayout(Register.s0);
this.invokeDynamic(new InvokeDynamicLayout(attrs && attrs.scan()));
this.didCreateElement(state);
this.didRenderLayout(state);
this.popFrame();
this.popScope();
this.popDynamicScope();
this.commitComponentTransaction();
this.releaseLocal();
this.load(Register.s0);
}

@@ -510,37 +466,3 @@ template(block) {

}
// TODO
// come back to this
closure(args, callback) {
this.startLabels();
this.enter(args, 'BEGIN', 'END');
this.label('BEGIN');
callback(this, 'BEGIN', 'END');
this.label('END');
this.exit();
this.stopLabels();
}
// TODO
// come back to this
iter(callback) {
this.startLabels();
this.enterList('BEGIN', 'END');
this.label('ITER');
this.iterate('BREAK', 'BEGIN', 'END');
this.label('BEGIN');
callback(this, 'BEGIN', 'END');
this.label('END');
this.exit();
this.jump('ITER');
this.label('BREAK');
this.exitList();
this.stopLabels();
}
// TODO
// come back to this
unit(callback) {
this.startLabels();
callback(this);
this.stopLabels();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLM0IsT0FBTyxFQUFVLEtBQUssRUFBVSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFjNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZW5FO0lBQUE7UUFDRSxXQUFNLEdBQUcsSUFBSSxFQUFVLENBQUM7UUFDeEIsVUFBSyxHQUEyRCxFQUFFLENBQUM7UUFDbkUsV0FBTSxHQUFtRixFQUFFLENBQUM7UUFDNUYsVUFBSyxHQUFpRSxFQUFFLENBQUM7SUErQjNFLENBQUM7SUE3QkMsS0FBSyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLENBQUMsRUFBVSxFQUFFLE1BQWMsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksQ0FBQyxFQUFVLEVBQUUsTUFBb0IsRUFBRSxNQUFjO1FBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENB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ICcuL2NvbnRlbnQnO1xuaW1wb3J0ICogYXMgdm0gZnJvbSAnLi92bSc7XG5cbmltcG9ydCB7IEluc2VydGlvbiB9IGZyb20gJy4uLy4uL3Vwc2VydCc7XG5cbmltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgT3B0aW9uLCBTdGFjaywgT3BhcXVlLCBkaWN0LCBleHBlY3QsIGZpbGxOdWxscywgRU1QVFlfQVJSQVkgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENvbnN0YW50cyxcbiAgQ29uc3RhbnRTdHJpbmcsXG4gIENvbnN0YW50QXJyYXksXG4gIENvbnN0YW50T3RoZXIsXG4gIENvbnN0YW50QmxvY2ssXG4gIENvbnN0YW50RnVuY3Rpb24sXG59IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2RpZmllck1hbmFnZXIgfSBmcm9tICcuLi8uLi9tb2RpZmllci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5pbXBvcnQgRW52aXJvbm1lbnQsIHsgUHJvZ3JhbSB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IFN5bWJvbFRhYmxlLCBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbXBvbmVudEJ1aWxkZXIgYXMgSUNvbXBvbmVudEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9vcGNvZGUtYnVpbGRlcic7XG5pbXBvcnQgeyBDb21wb25lbnRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vY29tcGlsZXInO1xuaW1wb3J0IHsgUmF3SW5saW5lQmxvY2ssIENsaWVudFNpZGUsIEJsb2NrIH0gZnJvbSAnLi4vLi4vc2Nhbm5lcic7XG5pbXBvcnQgeyBJbnZva2VEeW5hbWljTGF5b3V0LCBleHByIH0gZnJvbSAnLi4vLi4vc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmltcG9ydCB7IE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZXNJbnRvPEU+IHtcbiAgY29tcGlsZShidWlsZGVyOiBPcGNvZGVCdWlsZGVyKTogRTtcbn1cblxuZXhwb3J0IHR5cGUgUmVwcmVzZW50czxFPiA9IENvbXBpbGVzSW50bzxFPiB8IEU7XG5cbmV4cG9ydCB0eXBlIExhYmVsID0gc3RyaW5nO1xuXG50eXBlIFRhcmdldE9wY29kZSA9IE9wLkp1bXAgfCBPcC5KdW1wSWYgfCBPcC5KdW1wVW5sZXNzO1xudHlwZSBSYW5nZU9wY29kZSA9IE9wLkVudGVyIHwgT3AuRW50ZXJMaXN0O1xuXG5jbGFzcyBMYWJlbHMge1xuICBsYWJlbHMgPSBkaWN0PG51bWJlcj4oKTtcbiAganVtcHM6IHsgYXQ6IG51bWJlciwgdGFyZ2V0OiBzdHJpbmcsIFRhcmdldDogVGFyZ2V0T3Bjb2RlIH1bXSA9IFtdO1xuICByYW5nZXM6IHsgYXQ6IG51bWJlciwgYXJnczogbnVtYmVyLCBzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZywgUmFuZ2U6IFJhbmdlT3Bjb2RlIH1bXSA9IFtdO1xuICBpdGVyczogeyBhdDogbnVtYmVyLCBicmVha3M6IHN0cmluZywgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcgfVtdID0gW107XG5cbiAgbGFiZWwobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5sYWJlbHNbbmFtZV0gPSBpbmRleDtcbiAgfVxuXG4gIGl0ZXIoYXQ6IG51bWJlciwgYnJlYWtzOiBzdHJpbmcsIHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5pdGVycy5wdXNoKHsgYXQsIGJyZWFrcywgc3RhcnQsIGVuZCB9KTtcbiAgfVxuXG4gIGp1bXAoYXQ6IG51bWJlciwgVGFyZ2V0OiBUYXJnZXRPcGNvZGUsIHRhcmdldDogc3RyaW5nKSB7XG4gICAgdGhpcy5qdW1wcy5wdXNoKHsgYXQsIHRhcmdldCwgVGFyZ2V0IH0pO1xuICB9XG5cbiAgcmFuZ2UoYXQ6IG51bWJlciwgUmFuZ2U6IFJhbmdlT3Bjb2RlLCBhcmdzOiBudW1iZXIsIHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yYW5nZXMucHVzaCh7IGF0LCBhcmdzLCBzdGFydCwgZW5kLCBSYW5nZSB9KTtcbiAgfVxuXG4gIHBhdGNoKG9wY29kZXM6IFByb2dyYW0pOiB2b2lkIHtcbiAgICBmb3IgKGxldCB7IGF0LCB0YXJnZXQsIFRhcmdldCB9IG9mIHRoaXMuanVtcHMpIHtcbiAgICAgIG9wY29kZXMuc2V0KGF0LCBUYXJnZXQsIHRoaXMubGFiZWxzW3RhcmdldF0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IHsgYXQsIGFyZ3MsIHN0YXJ0LCBlbmQsIFJhbmdlIH0gb2YgdGhpcy5yYW5nZXMpIHtcbiAgICAgIG9wY29kZXMuc2V0KGF0LCBSYW5nZSwgYXJncywgdGhpcy5sYWJlbHNbc3RhcnRdLCB0aGlzLmxhYmVsc1tlbmRdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCB7IGF0LCBicmVha3MsIHN0YXJ0LCBlbmQgfSBvZiB0aGlzLml0ZXJzKSB7XG4gICAgICBvcGNvZGVzLnNldChhdCwgT3AuSXRlcmF0ZSwgdGhpcy5sYWJlbHNbYnJlYWtzXSwgdGhpcy5sYWJlbHNbc3RhcnRdLCB0aGlzLmxhYmVsc1tlbmRdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljT3Bjb2RlQnVpbGRlciB7XG4gIHByaXZhdGUgbGFiZWxzU3RhY2sgPSBuZXcgU3RhY2s8TGFiZWxzPigpO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG4gIHB1YmxpYyBzdGFydDogbnVtYmVyO1xuICBwcml2YXRlIGxvY2FscyA9IDA7XG4gIHByaXZhdGUgX2xvY2Fsc1NpemUgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50LCBwdWJsaWMgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBwdWJsaWMgcHJvZ3JhbTogUHJvZ3JhbSkge1xuICAgIHRoaXMuY29uc3RhbnRzID0gZW52LmNvbnN0YW50cztcbiAgICB0aGlzLnN0YXJ0ID0gcHJvZ3JhbS5uZXh0O1xuXG4gICAgdGhpcy5yZXNlcnZlKE9wLlJlc2VydmVMb2NhbHMpO1xuICB9XG5cbiAgYWJzdHJhY3QgY29tcGlsZTxFPihleHByOiBSZXByZXNlbnRzPEU+KTogRTtcblxuICBwcml2YXRlIGdldCBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbS5jdXJyZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbmV4dFBvcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtLm5leHQ7XG4gIH1cblxuICB1cHZhcnM8VCBleHRlbmRzIFtPcGFxdWVdPihjb3VudDogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIGZpbGxOdWxscyhjb3VudCkgYXMgVDtcbiAgfVxuXG4gIGxvY2FsKCk6IG51bWJlciB7XG4gICAgbGV0IGxvY2FscyA9IHRoaXMubG9jYWxzKys7XG4gICAgaWYgKHRoaXMuX2xvY2Fsc1NpemUgPCB0aGlzLmxvY2Fscykge1xuICAgICAgdGhpcy5fbG9jYWxzU2l6ZSA9IHRoaXMubG9jYWxzO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxzO1xuICB9XG5cbiAgcmVsZWFzZUxvY2FsKCkge1xuICAgIHRoaXMubG9jYWxzLS07XG4gIH1cblxuICBnZXQgbG9jYWxzU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxzU2l6ZTtcbiAgfVxuXG4gIHJlc2VydmUobmFtZTogT3ApIHtcbiAgICB0aGlzLnB1c2gobmFtZSwgMCwgMCwgMCk7XG4gIH1cblxuICBwdXNoKG5hbWU6IE9wLCBvcDEgPSAwLCBvcDIgPSAwLCBvcDMgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbS5wdXNoKG5hbWUsIG9wMSwgb3AyLCBvcDMpO1xuICB9XG5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICB0aGlzLnByb2dyYW0uc2V0KHRoaXMuc3RhcnQsIE9wLlJlc2VydmVMb2NhbHMsIHRoaXMubG9jYWxzU2l6ZSk7XG4gICAgdGhpcy5wdXNoKE9wLlJlbGVhc2VMb2NhbHMpO1xuICAgIHJldHVybiB0aGlzLnB1c2goT3AuUmV0dXJuKTtcbiAgfVxuXG4gIC8vIGFyZ3NcblxuICBwdXNoQXJncyhwb3NpdGlvbmFsOiBudW1iZXIsIHN5bnRoZXRpYzogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChPcC5QdXNoQXJncywgcG9zaXRpb25hbCwgKHN5bnRoZXRpYyBhcyBhbnkpfDApO1xuICB9XG5cbiAgLy8gaGVscGVyc1xuXG4gIHByaXZhdGUgZ2V0IGxhYmVscygpOiBMYWJlbHMge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5sYWJlbHNTdGFjay5jdXJyZW50LCAnYnVnOiBub3QgaW4gYSBsYWJlbCBzdGFjaycpO1xuICB9XG5cbiAgc3RhcnRMYWJlbHMoKSB7XG4gICAgdGhpcy5sYWJlbHNTdGFjay5wdXNoKG5ldyBMYWJlbHMoKSk7XG4gIH1cblxuICBzdG9wTGFiZWxzKCkge1xuICAgIGxldCBsYWJlbCA9IGV4cGVjdCh0aGlzLmxhYmVsc1N0YWNrLnBvcCgpLCAndW5iYWxhbmNlZCBwdXNoIGFuZCBwb3AgbGFiZWxzJyk7XG4gICAgbGFiZWwucGF0Y2godGhpcy5wcm9ncmFtKTtcbiAgfVxuXG4gIC8vIGNvbXBvbmVudHNcblxuICBwdXNoQ29tcG9uZW50TWFuYWdlcihkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4pIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaENvbXBvbmVudE1hbmFnZXIsIHRoaXMub3RoZXIoZGVmaW5pdGlvbikpO1xuICB9XG5cbiAgcHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyKCkge1xuICAgIHRoaXMucHVzaChPcC5QdXNoRHluYW1pY0NvbXBvbmVudE1hbmFnZXIpO1xuICB9XG5cbiAgc2V0Q29tcG9uZW50U3RhdGUobG9jYWw6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5TZXRDb21wb25lbnRTdGF0ZSwgbG9jYWwpO1xuICB9XG5cbiAgcHJlcGFyZUFyZ3Moc3RhdGU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5QcmVwYXJlQXJncywgc3RhdGUpO1xuICB9XG5cbiAgY3JlYXRlQ29tcG9uZW50KHN0YXRlOiBudW1iZXIsIGhhc0RlZmF1bHQ6IGJvb2xlYW4sIGhhc0ludmVyc2U6IGJvb2xlYW4pIHtcbiAgICBsZXQgZmxhZyA9ICg8YW55Pmhhc0RlZmF1bHR8MCkgfCAoKDxhbnk+aGFzSW52ZXJzZXwwKSA8PCAxKTtcbiAgICB0aGlzLnB1c2goT3AuQ3JlYXRlQ29tcG9uZW50LCBmbGFnLCBzdGF0ZSk7XG4gIH1cblxuICByZWdpc3RlckNvbXBvbmVudERlc3RydWN0b3Ioc3RhdGU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5SZWdpc3RlckNvbXBvbmVudERlc3RydWN0b3IsIHN0YXRlKTtcbiAgfVxuXG4gIGJlZ2luQ29tcG9uZW50VHJhbnNhY3Rpb24oKSB7XG4gICAgdGhpcy5wdXNoKE9wLkJlZ2luQ29tcG9uZW50VHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgY29tbWl0Q29tcG9uZW50VHJhbnNhY3Rpb24oKSB7XG4gICAgdGhpcy5wdXNoKE9wLkNvbW1pdENvbXBvbmVudFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIHB1c2hDb21wb25lbnRPcGVyYXRpb25zKCkge1xuICAgIHRoaXMucHVzaChPcC5QdXNoQ29tcG9uZW50T3BlcmF0aW9ucyk7XG4gIH1cblxuICBnZXRDb21wb25lbnRTZWxmKHN0YXRlOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0Q29tcG9uZW50U2VsZiwgc3RhdGUpO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50TGF5b3V0KHN0YXRlOiBudW1iZXIgKSB7XG4gICAgdGhpcy5wdXNoKE9wLkdldENvbXBvbmVudExheW91dCwgc3RhdGUpO1xuICB9XG5cbiAgZGlkQ3JlYXRlRWxlbWVudChzdGF0ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLkRpZENyZWF0ZUVsZW1lbnQsIHN0YXRlKTtcbiAgfVxuXG4gIGRpZFJlbmRlckxheW91dChzdGF0ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLkRpZFJlbmRlckxheW91dCwgc3RhdGUpO1xuICB9XG5cbiAgLy8gcGFydGlhbFxuXG4gIGdldFBhcnRpYWxUZW1wbGF0ZSgpIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0UGFydGlhbFRlbXBsYXRlKTtcbiAgfVxuXG4gIHJlc29sdmVNYXliZUxvY2FsKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgdGhpcy5zdHJpbmcobmFtZSkpO1xuICB9XG5cbiAgLy8gZGVidWdnZXJcblxuICBkZWJ1Z2dlcihzeW1ib2xzOiBzdHJpbmdbXSwgZXZhbEluZm86IG51bWJlcltdKSB7XG4gICAgdGhpcy5wdXNoKE9wLkRlYnVnZ2VyLCB0aGlzLmNvbnN0YW50cy5vdGhlcihzeW1ib2xzKSwgdGhpcy5jb25zdGFudHMuYXJyYXkoZXZhbEluZm8pKTtcbiAgfVxuXG4gIC8vIGNvbnRlbnRcblxuICBkeW5hbWljQ29udGVudChPcGNvZGU6IGNvbnRlbnQuQXBwZW5kRHluYW1pY09wY29kZTxJbnNlcnRpb24+KSB7XG4gICAgdGhpcy5wdXNoKE9wLkR5bmFtaWNDb250ZW50LCB0aGlzLm90aGVyKE9wY29kZSkpO1xuICB9XG5cbiAgY2F1dGlvdXNBcHBlbmQoKSB7XG4gICAgdGhpcy5keW5hbWljQ29udGVudChuZXcgY29udGVudC5PcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSgpKTtcbiAgfVxuXG4gIHRydXN0aW5nQXBwZW5kKCkge1xuICAgIHRoaXMuZHluYW1pY0NvbnRlbnQobmV3IGNvbnRlbnQuT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUoKSk7XG4gIH1cblxuICAvLyBkb21cblxuICB0ZXh0KHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChPcC5UZXh0LCB0aGlzLmNvbnN0YW50cy5zdHJpbmcodGV4dCkpO1xuICB9XG5cbiAgb3BlblByaW1pdGl2ZUVsZW1lbnQodGFnOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goT3AuT3BlbkVsZW1lbnQsIHRoaXMuY29uc3RhbnRzLnN0cmluZyh0YWcpKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnModGFnOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goT3AuT3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucywgdGhpcy5jb25zdGFudHMuc3RyaW5nKHRhZykpO1xuICB9XG5cbiAgb3BlbkR5bmFtaWNFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5PcGVuRHluYW1pY0VsZW1lbnQpO1xuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5GbHVzaEVsZW1lbnQpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5DbG9zZUVsZW1lbnQpO1xuICB9XG5cbiAgc3RhdGljQXR0cihfbmFtZTogc3RyaW5nLCBfbmFtZXNwYWNlOiBPcHRpb248c3RyaW5nPiwgX3ZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgbmFtZSA9IHRoaXMuY29uc3RhbnRzLnN0cmluZyhfbmFtZSk7XG4gICAgbGV0IG5hbWVzcGFjZSA9IF9uYW1lc3BhY2UgPyB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWVzcGFjZSkgOiAwO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29uc3RhbnRzLnN0cmluZyhfdmFsdWUpO1xuXG4gICAgdGhpcy5wdXNoKE9wLlN0YXRpY0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgZHluYW1pY0F0dHJOUyhfbmFtZTogc3RyaW5nLCBfbmFtZXNwYWNlOiBzdHJpbmcsIHRydXN0aW5nOiBib29sZWFuKSB7XG4gICAgbGV0IG5hbWUgPSB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWUpO1xuICAgIGxldCBuYW1lc3BhY2UgPSB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWVzcGFjZSk7XG5cbiAgICB0aGlzLnB1c2goT3AuRHluYW1pY0F0dHJOUywgbmFtZSwgbmFtZXNwYWNlLCAodHJ1c3RpbmcgYXMgYW55KXwwKTtcbiAgfVxuXG4gIGR5bmFtaWNBdHRyKF9uYW1lOiBzdHJpbmcsIHRydXN0aW5nOiBib29sZWFuKSB7XG4gICAgbGV0IG5hbWUgPSB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWUpO1xuICAgIHRoaXMucHVzaChPcC5EeW5hbWljQXR0ciwgbmFtZSwgKHRydXN0aW5nIGFzIGFueSl8MCk7XG4gIH1cblxuICBjb21tZW50KF9jb21tZW50OiBzdHJpbmcpIHtcbiAgICBsZXQgY29tbWVudCA9IHRoaXMuY29uc3RhbnRzLnN0cmluZyhfY29tbWVudCk7XG4gICAgdGhpcy5wdXNoKE9wLkNvbW1lbnQsIGNvbW1lbnQpO1xuICB9XG5cbiAgbW9kaWZpZXIoX2RlZmluaXRpb246IE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+KSB7XG4gICAgdGhpcy5wdXNoKE9wLk1vZGlmaWVyLCB0aGlzLm90aGVyKF9kZWZpbml0aW9uKSk7XG4gIH1cblxuICAvLyBsaXN0c1xuXG4gIHB1dEl0ZXJhdG9yKCkge1xuICAgIHRoaXMucHVzaChPcC5QdXRJdGVyYXRvcik7XG4gIH1cblxuICBlbnRlckxpc3Qoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc2VydmUoT3AuRW50ZXJMaXN0KTtcbiAgICB0aGlzLmxhYmVscy5yYW5nZSh0aGlzLnBvcywgT3AuRW50ZXJMaXN0LCAwLCBzdGFydCwgZW5kKTtcbiAgfVxuXG4gIGV4aXRMaXN0KCkge1xuICAgIHRoaXMucHVzaChPcC5FeGl0TGlzdCk7XG4gIH1cblxuICBpdGVyYXRlKGJyZWFrczogc3RyaW5nLCBzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZykge1xuICAgIHRoaXMucmVzZXJ2ZShPcC5JdGVyYXRlKTtcbiAgICB0aGlzLmxhYmVscy5pdGVyKHRoaXMucG9zLCBicmVha3MsIHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLy8gZXhwcmVzc2lvbnNcblxuICBzZXRWYXJpYWJsZShzeW1ib2w6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5TZXRWYXJpYWJsZSwgc3ltYm9sKTtcbiAgfVxuXG4gIGdldFZhcmlhYmxlKHN5bWJvbDogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLkdldFZhcmlhYmxlLCBzeW1ib2wpO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0UHJvcGVydHksIHRoaXMuc3RyaW5nKGtleSkpO1xuICB9XG5cbiAgZ2V0QmxvY2soc3ltYm9sOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0QmxvY2ssIHN5bWJvbCk7XG4gIH1cblxuICBoYXNCbG9jayhzeW1ib2w6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5IYXNCbG9jaywgc3ltYm9sKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKHN5bWJvbDogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLkhhc0Jsb2NrUGFyYW1zLCBzeW1ib2wpO1xuICB9XG5cbiAgY29uY2F0KHNpemU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5Db25jYXQsIHNpemUpO1xuICB9XG5cbiAgZnVuY3Rpb24oZjogQ2xpZW50U2lkZS5GdW5jdGlvbkV4cHJlc3Npb25DYWxsYmFjazxPcGFxdWU+KSB7XG4gICAgdGhpcy5wdXNoKE9wLkZ1bmN0aW9uLCB0aGlzLmZ1bmMoZikpO1xuICB9XG5cbiAgc2V0TG9jYWwocG9zOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuU2V0TG9jYWwsIHBvcyk7XG4gIH1cblxuICBnZXRMb2NhbChwb3M6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5HZXRMb2NhbCwgcG9zKTtcbiAgfVxuXG4gIGR1cCgpIHtcbiAgICByZXR1cm4gdGhpcy5wdXNoKE9wLkR1cCk7XG4gIH1cblxuICBwb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMucHVzaChPcC5Qb3ApO1xuICB9XG5cbiAgLy8gdm1cblxuICBwdXNoUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaFJlbW90ZUVsZW1lbnQpO1xuICB9XG5cbiAgcG9wUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goT3AuUG9wUmVtb3RlRWxlbWVudCk7XG4gIH1cblxuICBsYWJlbChuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxhYmVscy5sYWJlbChuYW1lLCB0aGlzLm5leHRQb3MpO1xuICB9XG5cbiAgcHVzaFJvb3RTY29wZShzeW1ib2xzOiBudW1iZXIsIGJpbmRDYWxsZXJTY29wZTogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChPcC5Sb290U2NvcGUsIHN5bWJvbHMsIDxhbnk+YmluZENhbGxlclNjb3BlfDApO1xuICB9XG5cbiAgcHVzaENoaWxkU2NvcGUoKSB7XG4gICAgdGhpcy5wdXNoKE9wLkNoaWxkU2NvcGUpO1xuICB9XG5cbiAgcG9wU2NvcGUoKSB7XG4gICAgdGhpcy5wdXNoKE9wLlBvcFNjb3BlKTtcbiAgfVxuXG4gIHB1c2hEeW5hbWljU2NvcGUoKSB7XG4gICAgdGhpcy5wdXNoKE9wLlB1c2hEeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgcG9wRHluYW1pY1Njb3BlKCkge1xuICAgIHRoaXMucHVzaChPcC5Qb3BEeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgcHVzaEltbWVkaWF0ZTxUPih2YWx1ZTogVCkge1xuICAgIHRoaXMucHVzaChPcC5Db25zdGFudCwgdGhpcy5vdGhlcih2YWx1ZSkpO1xuICB9XG5cbiAgcHJpbWl0aXZlKF9wcmltaXRpdmU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgfCBib29sZWFuKSB7XG4gICAgbGV0IGZsYWc6IDAgfCAxIHwgMiA9IDA7XG4gICAgbGV0IHByaW1pdGl2ZTogbnVtYmVyO1xuICAgIHN3aXRjaCAodHlwZW9mIF9wcmltaXRpdmUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHByaW1pdGl2ZSA9IF9wcmltaXRpdmUgYXMgbnVtYmVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHByaW1pdGl2ZSA9IHRoaXMuc3RyaW5nKF9wcmltaXRpdmUgYXMgc3RyaW5nKTtcbiAgICAgICAgZmxhZyA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHByaW1pdGl2ZSA9IChfcHJpbWl0aXZlIGFzIGFueSkgfCAwO1xuICAgICAgICBmbGFnID0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBhc3N1bWUgbnVsbFxuICAgICAgICBwcmltaXRpdmUgPSAyO1xuICAgICAgICBmbGFnID0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICBwcmltaXRpdmUgPSAzO1xuICAgICAgICBmbGFnID0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJpbWl0aXZlIHBhc3NlZCB0byBwdXNoUHJpbWl0aXZlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKE9wLlByaW1pdGl2ZSwgKGZsYWcgPDwgMzApIHwgcHJpbWl0aXZlKTtcbiAgfVxuXG4gIGhlbHBlcihmdW5jOiBGdW5jdGlvbikge1xuICAgIHRoaXMucHVzaChPcC5IZWxwZXIsIHRoaXMuZnVuYyhmdW5jKSk7XG4gIH1cblxuICBwdXNoQmxvY2soYmxvY2s6IE9wdGlvbjxCbG9jaz4pIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaEJsb2NrLCB0aGlzLmJsb2NrKGJsb2NrKSk7XG4gIH1cblxuICBwdXNoQmxvY2tzKF9kZWZhdWx0OiBPcHRpb248QmxvY2s+LCBpbnZlcnNlOiBPcHRpb248QmxvY2s+KSB7XG4gICAgbGV0IGZsYWcgPSAwO1xuICAgIGxldCBkZWZhdWx0QmxvY2s6IENvbnN0YW50QmxvY2sgPSAwO1xuICAgIGxldCBpbnZlcnNlQmxvY2s6IENvbnN0YW50QmxvY2sgPSAwO1xuXG4gICAgaWYgKF9kZWZhdWx0KSB7XG4gICAgICBmbGFnIHw9IDBiMDE7XG4gICAgICBkZWZhdWx0QmxvY2sgPSB0aGlzLmJsb2NrKF9kZWZhdWx0KTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZSkge1xuICAgICAgZmxhZyB8PSAwYjEwO1xuICAgICAgaW52ZXJzZUJsb2NrID0gdGhpcy5ibG9jayhpbnZlcnNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2goT3AuUHVzaEJsb2NrcywgZGVmYXVsdEJsb2NrLCBpbnZlcnNlQmxvY2ssIGZsYWcpO1xuICB9XG5cbiAgYmluZER5bmFtaWNTY29wZShfbmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoKE9wLkJpbmREeW5hbWljU2NvcGUsIHRoaXMubmFtZXMoX25hbWVzKSk7XG4gIH1cblxuICBlbnRlcihhcmdzOiBudW1iZXIsIGVudGVyOiBzdHJpbmcsIGV4aXQ6IHN0cmluZykge1xuICAgIHRoaXMucmVzZXJ2ZShPcC5FbnRlcik7XG4gICAgdGhpcy5sYWJlbHMucmFuZ2UodGhpcy5wb3MsIE9wLkVudGVyLCBhcmdzLCBlbnRlciwgZXhpdCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMucHVzaChPcC5FeGl0KTtcbiAgfVxuXG4gIGNvbXBpbGVEeW5hbWljQmxvY2soKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKE9wLkNvbXBpbGVEeW5hbWljQmxvY2spO1xuICB9XG5cbiAgaW52b2tlRHluYW1pYyhpbnZva2VyOiB2bS5EeW5hbWljSW52b2tlcjxTeW1ib2xUYWJsZT4pOiB2b2lkIHtcbiAgICB0aGlzLnB1c2goT3AuSW52b2tlRHluYW1pYywgdGhpcy5vdGhlcihpbnZva2VyKSk7XG4gIH1cblxuICBpbnZva2VTdGF0aWMoX2Jsb2NrOiBCbG9jaywgLi4uYXJnczogKChidWlsZGVyOiBCYXNpY09wY29kZUJ1aWxkZXIpID0+IHZvaWQpW10pOiB2b2lkO1xuICBpbnZva2VTdGF0aWMoX2Jsb2NrOiBCbG9jaywgbnVtQXJnczogbnVtYmVyKTogdm9pZDtcbiAgaW52b2tlU3RhdGljKF9ibG9jazogQmxvY2spOiB2b2lkIHtcbiAgICBsZXQgeyBwYXJhbWV0ZXJzIH0gPSBfYmxvY2suc3ltYm9sVGFibGU7XG4gICAgbGV0IHBhcmFtU2l6ZSA9IHBhcmFtZXRlcnMubGVuZ3RoO1xuICAgIGxldCBhcmdTaXplID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgbGV0IG9uU3RhY2sgPSBmYWxzZTtcbiAgICBsZXQgZXhjZXNzID0gMDtcblxuICAgIGlmIChhcmdTaXplID09PSAxICYmIHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdudW1iZXInKSB7XG4gICAgICBhcmdTaXplID0gTWF0aC5taW4ocGFyYW1TaXplLCBhcmd1bWVudHNbMV0pO1xuICAgICAgZXhjZXNzID0gTWF0aC5tYXgoYXJndW1lbnRzWzFdIC0gcGFyYW1TaXplLCAwKTtcbiAgICAgIG9uU3RhY2sgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdTaXplID0gTWF0aC5taW4ocGFyYW1TaXplLCBhcmdTaXplKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8ZXhjZXNzOyBpKyspIHtcbiAgICAgIHRoaXMucG9wKCk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ1NpemUpIHtcbiAgICAgIHRoaXMucHVzaENoaWxkU2NvcGUoKTtcblxuICAgICAgZm9yIChsZXQgaT1hcmdTaXplLTE7IGk+PTA7IGktLSkge1xuICAgICAgICBpZiAoIW9uU3RhY2spIHtcbiAgICAgICAgICBhcmd1bWVudHNbaSsxXSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhcmlhYmxlKHBhcmFtZXRlcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBibG9jayA9IHRoaXMuY29uc3RhbnRzLmJsb2NrKF9ibG9jayk7XG4gICAgdGhpcy5wdXNoKE9wLkludm9rZVN0YXRpYywgYmxvY2spO1xuXG4gICAgaWYgKGFyZ1NpemUpIHtcbiAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICB9XG4gIH1cblxuICB0ZXN0KHRlc3RGdW5jOiAnY29uc3QnIHwgJ3NpbXBsZScgfCAnZW52aXJvbm1lbnQnIHwgdm0uVGVzdEZ1bmN0aW9uKSB7XG4gICAgbGV0IF9mdW5jOiB2bS5UZXN0RnVuY3Rpb247XG5cbiAgICBpZiAodGVzdEZ1bmMgPT09ICdjb25zdCcpIHtcbiAgICAgIF9mdW5jID0gdm0uQ29uc3RUZXN0O1xuICAgIH0gZWxzZSBpZiAodGVzdEZ1bmMgPT09ICdzaW1wbGUnKSB7XG4gICAgICBfZnVuYyA9IHZtLlNpbXBsZVRlc3Q7XG4gICAgfSBlbHNlIGlmICh0ZXN0RnVuYyA9PT0gJ2Vudmlyb25tZW50Jykge1xuICAgICAgX2Z1bmMgPSB2bS5FbnZpcm9ubWVudFRlc3Q7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGVzdEZ1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIF9mdW5jID0gdGVzdEZ1bmM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5yZWFjaGFibGUnKTtcbiAgICB9XG5cbiAgICBsZXQgZnVuYyA9IHRoaXMuY29uc3RhbnRzLmZ1bmN0aW9uKF9mdW5jKTtcbiAgICB0aGlzLnB1c2goT3AuVGVzdCwgZnVuYyk7XG4gIH1cblxuICBqdW1wKHRhcmdldDogc3RyaW5nKSB7XG4gICAgdGhpcy5yZXNlcnZlKE9wLkp1bXApO1xuICAgIHRoaXMubGFiZWxzLmp1bXAodGhpcy5wb3MsIE9wLkp1bXAsIHRhcmdldCk7XG4gIH1cblxuICBqdW1wSWYodGFyZ2V0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc2VydmUoT3AuSnVtcElmKTtcbiAgICB0aGlzLmxhYmVscy5qdW1wKHRoaXMucG9zLCBPcC5KdW1wSWYsIHRhcmdldCk7XG4gIH1cblxuICBqdW1wVW5sZXNzKHRhcmdldDogc3RyaW5nKSB7XG4gICAgdGhpcy5yZXNlcnZlKE9wLkp1bXBVbmxlc3MpO1xuICAgIHRoaXMubGFiZWxzLmp1bXAodGhpcy5wb3MsIE9wLkp1bXBVbmxlc3MsIHRhcmdldCk7XG4gIH1cblxuICBzdHJpbmcoX3N0cmluZzogc3RyaW5nKTogQ29uc3RhbnRTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX3N0cmluZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmFtZXMoX25hbWVzOiBzdHJpbmdbXSk6IENvbnN0YW50QXJyYXkge1xuICAgIGxldCBuYW1lcyA9IF9uYW1lcy5tYXAobiA9PiB0aGlzLmNvbnN0YW50cy5zdHJpbmcobikpO1xuICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5hcnJheShuYW1lcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ltYm9scyhzeW1ib2xzOiBudW1iZXJbXSk6IENvbnN0YW50QXJyYXkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5hcnJheShzeW1ib2xzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdGhlcih2YWx1ZTogT3BhcXVlKTogQ29uc3RhbnRPdGhlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RhbnRzLm90aGVyKHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBibG9jayhibG9jazogT3B0aW9uPEJsb2NrPik6IENvbnN0YW50QmxvY2sge1xuICAgIHJldHVybiBibG9jayA/IHRoaXMuY29uc3RhbnRzLmJsb2NrKGJsb2NrKSA6IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnVuYyhmdW5jOiBGdW5jdGlvbik6IENvbnN0YW50RnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5mdW5jdGlvbihmdW5jKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbXBpbGFibGVFeHByZXNzaW9uPEU+KGV4cHI6IFJlcHJlc2VudHM8RT4pOiBleHByIGlzIENvbXBpbGVzSW50bzxFPiB7XG4gIHJldHVybiBleHByICYmIHR5cGVvZiBleHByWydjb21waWxlJ10gPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wY29kZUJ1aWxkZXIgZXh0ZW5kcyBCYXNpY09wY29kZUJ1aWxkZXIge1xuICBwdWJsaWMgY29tcG9uZW50OiBJQ29tcG9uZW50QnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHByb2dyYW06IFByb2dyYW0gPSBlbnYucHJvZ3JhbSkge1xuICAgIHN1cGVyKGVudiwgbWV0YSwgcHJvZ3JhbSk7XG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgQ29tcG9uZW50QnVpbGRlcih0aGlzKTtcbiAgfVxuXG4gIGNvbXBpbGVBcmdzKHBhcmFtczogT3B0aW9uPFdpcmVGb3JtYXQuQ29yZS5QYXJhbXM+LCBoYXNoOiBPcHRpb248V2lyZUZvcm1hdC5Db3JlLkhhc2g+LCBzeW50aGV0aWM6IGJvb2xlYW4pIHtcbiAgICBsZXQgcG9zaXRpb25hbCA9IDA7XG5cbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMuZm9yRWFjaChwID0+IGV4cHIocCwgdGhpcykpO1xuICAgICAgcG9zaXRpb25hbCA9IHBhcmFtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgbGV0IG5hbWVzID0gRU1QVFlfQVJSQVk7XG5cbiAgICBpZiAoaGFzaCkge1xuICAgICAgbmFtZXMgPSBoYXNoWzBdO1xuICAgICAgaGFzaFsxXS5mb3JFYWNoKHYgPT4gZXhwcih2LCB0aGlzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoSW1tZWRpYXRlKG5hbWVzKTtcbiAgICB0aGlzLnB1c2hBcmdzKHBvc2l0aW9uYWwsIHN5bnRoZXRpYyk7XG4gIH1cblxuICBjb21waWxlPEU+KGV4cHI6IFJlcHJlc2VudHM8RT4pOiBFIHtcbiAgICBpZiAoaXNDb21waWxhYmxlRXhwcmVzc2lvbihleHByKSkge1xuICAgICAgcmV0dXJuIGV4cHIuY29tcGlsZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuICB9XG5cbiAgZ3VhcmRlZENhdXRpb3VzQXBwZW5kKGV4cHJlc3Npb246IFdpcmVGb3JtYXQuRXhwcmVzc2lvbikge1xuICAgIGV4cHIoZXhwcmVzc2lvbiwgdGhpcyk7XG4gICAgdGhpcy5keW5hbWljQ29udGVudChuZXcgY29udGVudC5HdWFyZGVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUoKSk7XG4gIH1cblxuICBndWFyZGVkVHJ1c3RpbmdBcHBlbmQoZXhwcmVzc2lvbjogV2lyZUZvcm1hdC5FeHByZXNzaW9uKSB7XG4gICAgZXhwcihleHByZXNzaW9uLCB0aGlzKTtcbiAgICB0aGlzLmR5bmFtaWNDb250ZW50KG5ldyBjb250ZW50Lkd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZSgpKTtcbiAgfVxuXG4gIGludm9rZUNvbXBvbmVudChhdHRyczogT3B0aW9uPFJhd0lubGluZUJsb2NrPiwgcGFyYW1zOiBPcHRpb248V2lyZUZvcm1hdC5Db3JlLlBhcmFtcz4sIGhhc2g6IE9wdGlvbjxXaXJlRm9ybWF0LkNvcmUuSGFzaD4sIGJsb2NrOiBPcHRpb248QmxvY2s+LCBpbnZlcnNlOiBPcHRpb248QmxvY2s+ID0gbnVsbCkge1xuICAgIGxldCBzdGF0ZSA9IHRoaXMubG9jYWwoKTtcblxuICAgIHRoaXMuc2V0Q29tcG9uZW50U3RhdGUoc3RhdGUpO1xuXG4gICAgdGhpcy5wdXNoQmxvY2soYmxvY2spO1xuICAgIHRoaXMucHVzaEJsb2NrKGludmVyc2UpO1xuXG4gICAgdGhpcy5jb21waWxlQXJncyhwYXJhbXMsIGhhc2gsIGZhbHNlKTtcbiAgICB0aGlzLnByZXBhcmVBcmdzKHN0YXRlKTtcblxuICAgIHRoaXMucHVzaER5bmFtaWNTY29wZSgpO1xuXG4gICAgdGhpcy5jcmVhdGVDb21wb25lbnQoc3RhdGUsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvcihzdGF0ZSk7XG4gICAgdGhpcy5iZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uKCk7XG5cbiAgICB0aGlzLmdldENvbXBvbmVudFNlbGYoc3RhdGUpO1xuICAgIHRoaXMuZ2V0Q29tcG9uZW50TGF5b3V0KHN0YXRlKTtcbiAgICB0aGlzLmludm9rZUR5bmFtaWMobmV3IEludm9rZUR5bmFtaWNMYXlvdXQoYXR0cnMgJiYgYXR0cnMuc2NhbigpKSk7XG4gICAgdGhpcy5kaWRDcmVhdGVFbGVtZW50KHN0YXRlKTtcblxuICAgIHRoaXMuZGlkUmVuZGVyTGF5b3V0KHN0YXRlKTtcbiAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgdGhpcy5wb3BEeW5hbWljU2NvcGUoKTtcbiAgICB0aGlzLmNvbW1pdENvbXBvbmVudFRyYW5zYWN0aW9uKCk7XG5cbiAgICB0aGlzLnJlbGVhc2VMb2NhbCgpO1xuICB9XG5cbiAgdGVtcGxhdGUoYmxvY2s6IE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz4pOiBPcHRpb248UmF3SW5saW5lQmxvY2s+IHtcbiAgICBpZiAoIWJsb2NrKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKHRoaXMuZW52LCB0aGlzLm1ldGEsIGJsb2NrLnN0YXRlbWVudHMsIGJsb2NrLnBhcmFtZXRlcnMpO1xuICB9XG5cbiAgLy8gVE9ET1xuICAvLyBjb21lIGJhY2sgdG8gdGhpc1xuICBjbG9zdXJlKGFyZ3M6IG51bWJlciwgY2FsbGJhY2s6IEJsb2NrQ2FsbGJhY2spIHtcbiAgICB0aGlzLnN0YXJ0TGFiZWxzKCk7XG4gICAgdGhpcy5lbnRlcihhcmdzLCAnQkVHSU4nLCAnRU5EJyk7XG4gICAgdGhpcy5sYWJlbCgnQkVHSU4nKTtcblxuICAgIGNhbGxiYWNrKHRoaXMsICdCRUdJTicsICdFTkQnKTtcblxuICAgIHRoaXMubGFiZWwoJ0VORCcpO1xuICAgIHRoaXMuZXhpdCgpO1xuICAgIHRoaXMuc3RvcExhYmVscygpO1xuICB9XG5cbiAgLy8gVE9ET1xuICAvLyBjb21lIGJhY2sgdG8gdGhpc1xuICBpdGVyKGNhbGxiYWNrOiBCbG9ja0NhbGxiYWNrKSB7XG4gICAgdGhpcy5zdGFydExhYmVscygpO1xuICAgIHRoaXMuZW50ZXJMaXN0KCdCRUdJTicsICdFTkQnKTtcbiAgICB0aGlzLmxhYmVsKCdJVEVSJyk7XG4gICAgdGhpcy5pdGVyYXRlKCdCUkVBSycsICdCRUdJTicsICdFTkQnKTtcbiAgICB0aGlzLmxhYmVsKCdCRUdJTicpO1xuXG4gICAgY2FsbGJhY2sodGhpcywgJ0JFR0lOJywgJ0VORCcpO1xuXG4gICAgdGhpcy5sYWJlbCgnRU5EJyk7XG4gICAgdGhpcy5leGl0KCk7XG4gICAgdGhpcy5qdW1wKCdJVEVSJyk7XG4gICAgdGhpcy5sYWJlbCgnQlJFQUsnKTtcbiAgICB0aGlzLmV4aXRMaXN0KCk7XG4gICAgdGhpcy5zdG9wTGFiZWxzKCk7XG4gIH1cblxuICAvLyBUT0RPXG4gIC8vIGNvbWUgYmFjayB0byB0aGlzXG4gIHVuaXQoY2FsbGJhY2s6IChidWlsZGVyOiBPcGNvZGVCdWlsZGVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdGFydExhYmVscygpO1xuICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgIHRoaXMuc3RvcExhYmVscygpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEJsb2NrQ2FsbGJhY2sgPSAoZHNsOiBPcGNvZGVCdWlsZGVyLCBCRUdJTjogTGFiZWwsIEVORDogTGFiZWwpID0+IHZvaWQ7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHM0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQVUsS0FBSyxFQUFVLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWM1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjbkU7SUFBQTtRQUNFLFdBQU0sR0FBRyxJQUFJLEVBQVUsQ0FBQztRQUN4QixZQUFPLEdBQTJELEVBQUUsQ0FBQztJQWV2RSxDQUFDO0lBYkMsS0FBSyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVSxFQUFFLE1BQW9CLEVBQUUsTUFBYztRQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWdCO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJ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SSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksbUJBQW1CLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUErQztRQUN0RCxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb250ZW50IGZyb20gJy4vY29udGVudCc7XG5pbXBvcnQgKiBhcyB2bSBmcm9tICcuL3ZtJztcblxuaW1wb3J0IHsgSW5zZXJ0aW9uIH0gZnJvbSAnLi4vLi4vdXBzZXJ0JztcbmltcG9ydCB7IFJlZ2lzdGVyIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IE9wdGlvbiwgU3RhY2ssIE9wYXF1ZSwgZGljdCwgZXhwZWN0LCBmaWxsTnVsbHMsIEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBDb25zdGFudHMsXG4gIENvbnN0YW50U3RyaW5nLFxuICBDb25zdGFudEFycmF5LFxuICBDb25zdGFudE90aGVyLFxuICBDb25zdGFudEJsb2NrLFxuICBDb25zdGFudEZ1bmN0aW9uLFxufSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9jb25zdGFudHMnO1xuaW1wb3J0IHsgTW9kaWZpZXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vbW9kaWZpZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IEVudmlyb25tZW50LCB7IFByb2dyYW0gfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBTeW1ib2xUYWJsZSwgQ29tcGlsYXRpb25NZXRhIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb21wb25lbnRCdWlsZGVyIGFzIElDb21wb25lbnRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vb3Bjb2RlLWJ1aWxkZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50QnVpbGRlciB9IGZyb20gJy4uLy4uL2NvbXBpbGVyJztcbmltcG9ydCB7IFJhd0lubGluZUJsb2NrLCBDbGllbnRTaWRlLCBCbG9jayB9IGZyb20gJy4uLy4uL3NjYW5uZXInO1xuaW1wb3J0IHsgSW52b2tlRHluYW1pY0xheW91dCwgZXhwciB9IGZyb20gJy4uLy4uL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5pbXBvcnQgeyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVzSW50bzxFPiB7XG4gIGNvbXBpbGUoYnVpbGRlcjogT3Bjb2RlQnVpbGRlcik6IEU7XG59XG5cbmV4cG9ydCB0eXBlIFJlcHJlc2VudHM8RT4gPSBDb21waWxlc0ludG88RT4gfCBFO1xuXG5leHBvcnQgdHlwZSBMYWJlbCA9IHN0cmluZztcblxudHlwZSBUYXJnZXRPcGNvZGUgPSBPcC5KdW1wIHwgT3AuSnVtcElmIHwgT3AuSnVtcFVubGVzcyB8IE9wLkVudGVyTGlzdCB8IE9wLkl0ZXJhdGUgfCBPcC5JbW1lZGlhdGU7XG5cbmNsYXNzIExhYmVscyB7XG4gIGxhYmVscyA9IGRpY3Q8bnVtYmVyPigpO1xuICB0YXJnZXRzOiB7IGF0OiBudW1iZXIsIFRhcmdldDogVGFyZ2V0T3Bjb2RlLCB0YXJnZXQ6IHN0cmluZyB9W10gPSBbXTtcblxuICBsYWJlbChuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmxhYmVsc1tuYW1lXSA9IGluZGV4O1xuICB9XG5cbiAgdGFyZ2V0KGF0OiBudW1iZXIsIFRhcmdldDogVGFyZ2V0T3Bjb2RlLCB0YXJnZXQ6IHN0cmluZykge1xuICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgYXQsIFRhcmdldCwgdGFyZ2V0IH0pO1xuICB9XG5cbiAgcGF0Y2gob3Bjb2RlczogUHJvZ3JhbSk6IHZvaWQge1xuICAgIGZvciAobGV0IHsgYXQsIFRhcmdldCwgdGFyZ2V0IH0gb2YgdGhpcy50YXJnZXRzKSB7XG4gICAgICBvcGNvZGVzLnNldChhdCwgVGFyZ2V0LCB0aGlzLmxhYmVsc1t0YXJnZXRdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljT3Bjb2RlQnVpbGRlciB7XG4gIHByaXZhdGUgbGFiZWxzU3RhY2sgPSBuZXcgU3RhY2s8TGFiZWxzPigpO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG4gIHB1YmxpYyBzdGFydDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50LCBwdWJsaWMgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBwdWJsaWMgcHJvZ3JhbTogUHJvZ3JhbSkge1xuICAgIHRoaXMuY29uc3RhbnRzID0gZW52LmNvbnN0YW50cztcbiAgICB0aGlzLnN0YXJ0ID0gcHJvZ3JhbS5uZXh0O1xuICB9XG5cbiAgYWJzdHJhY3QgY29tcGlsZTxFPihleHByOiBSZXByZXNlbnRzPEU+KTogRTtcblxuICBwcml2YXRlIGdldCBwb3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbS5jdXJyZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbmV4dFBvcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtLm5leHQ7XG4gIH1cblxuICB1cHZhcnM8VCBleHRlbmRzIFtPcGFxdWVdPihjb3VudDogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIGZpbGxOdWxscyhjb3VudCkgYXMgVDtcbiAgfVxuXG4gIHJlc2VydmUobmFtZTogT3ApIHtcbiAgICB0aGlzLnB1c2gobmFtZSwgMCwgMCwgMCk7XG4gIH1cblxuICBwdXNoKG5hbWU6IE9wLCBvcDEgPSAwLCBvcDIgPSAwLCBvcDMgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbS5wdXNoKG5hbWUsIG9wMSwgb3AyLCBvcDMpO1xuICB9XG5cbiAgZmluYWxpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wdXNoKE9wLlJldHVybik7XG4gIH1cblxuICAvLyBhcmdzXG5cbiAgcHVzaEFyZ3MocG9zaXRpb25hbDogbnVtYmVyLCBzeW50aGV0aWM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaEFyZ3MsIHBvc2l0aW9uYWwsIChzeW50aGV0aWMgYXMgYW55KXwwKTtcbiAgfVxuXG4gIC8vIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBsYWJlbHMoKTogTGFiZWxzIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMubGFiZWxzU3RhY2suY3VycmVudCwgJ2J1Zzogbm90IGluIGEgbGFiZWwgc3RhY2snKTtcbiAgfVxuXG4gIHN0YXJ0TGFiZWxzKCkge1xuICAgIHRoaXMubGFiZWxzU3RhY2sucHVzaChuZXcgTGFiZWxzKCkpO1xuICB9XG5cbiAgc3RvcExhYmVscygpIHtcbiAgICBsZXQgbGFiZWwgPSBleHBlY3QodGhpcy5sYWJlbHNTdGFjay5wb3AoKSwgJ3VuYmFsYW5jZWQgcHVzaCBhbmQgcG9wIGxhYmVscycpO1xuICAgIGxhYmVsLnBhdGNoKHRoaXMucHJvZ3JhbSk7XG4gIH1cblxuICAvLyBjb21wb25lbnRzXG5cbiAgcHVzaENvbXBvbmVudE1hbmFnZXIoZGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+KSB7XG4gICAgdGhpcy5wdXNoKE9wLlB1c2hDb21wb25lbnRNYW5hZ2VyLCB0aGlzLm90aGVyKGRlZmluaXRpb24pKTtcbiAgfVxuXG4gIHB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlcigpIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyKTtcbiAgfVxuXG4gIGluaXRpYWxpemVDb21wb25lbnRTdGF0ZSgpIHtcbiAgICB0aGlzLnB1c2goT3AuSW5pdGlhbGl6ZUNvbXBvbmVudFN0YXRlKTtcbiAgfVxuXG4gIHByZXBhcmVBcmdzKHN0YXRlOiBSZWdpc3Rlcikge1xuICAgIHRoaXMucHVzaChPcC5QcmVwYXJlQXJncywgc3RhdGUpO1xuICB9XG5cbiAgY3JlYXRlQ29tcG9uZW50KHN0YXRlOiBSZWdpc3RlciwgaGFzRGVmYXVsdDogYm9vbGVhbiwgaGFzSW52ZXJzZTogYm9vbGVhbikge1xuICAgIGxldCBmbGFnID0gKDxhbnk+aGFzRGVmYXVsdHwwKSB8ICgoPGFueT5oYXNJbnZlcnNlfDApIDw8IDEpO1xuICAgIHRoaXMucHVzaChPcC5DcmVhdGVDb21wb25lbnQsIGZsYWcsIHN0YXRlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvcihzdGF0ZTogUmVnaXN0ZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuUmVnaXN0ZXJDb21wb25lbnREZXN0cnVjdG9yLCBzdGF0ZSk7XG4gIH1cblxuICBiZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uKCkge1xuICAgIHRoaXMucHVzaChPcC5CZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIGNvbW1pdENvbXBvbmVudFRyYW5zYWN0aW9uKCkge1xuICAgIHRoaXMucHVzaChPcC5Db21taXRDb21wb25lbnRUcmFuc2FjdGlvbik7XG4gIH1cblxuICBwdXNoQ29tcG9uZW50T3BlcmF0aW9ucygpIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaENvbXBvbmVudE9wZXJhdGlvbnMpO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50U2VsZihzdGF0ZTogUmVnaXN0ZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0Q29tcG9uZW50U2VsZiwgc3RhdGUpO1xuICB9XG5cbiAgZ2V0Q29tcG9uZW50TGF5b3V0KHN0YXRlOiBSZWdpc3RlciApIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0Q29tcG9uZW50TGF5b3V0LCBzdGF0ZSk7XG4gIH1cblxuICBkaWRDcmVhdGVFbGVtZW50KHN0YXRlOiBSZWdpc3Rlcikge1xuICAgIHRoaXMucHVzaChPcC5EaWRDcmVhdGVFbGVtZW50LCBzdGF0ZSk7XG4gIH1cblxuICBkaWRSZW5kZXJMYXlvdXQoc3RhdGU6IFJlZ2lzdGVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLkRpZFJlbmRlckxheW91dCwgc3RhdGUpO1xuICB9XG5cbiAgLy8gcGFydGlhbFxuXG4gIGdldFBhcnRpYWxUZW1wbGF0ZSgpIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0UGFydGlhbFRlbXBsYXRlKTtcbiAgfVxuXG4gIHJlc29sdmVNYXliZUxvY2FsKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgdGhpcy5zdHJpbmcobmFtZSkpO1xuICB9XG5cbiAgLy8gZGVidWdnZXJcblxuICBkZWJ1Z2dlcihzeW1ib2xzOiBzdHJpbmdbXSwgZXZhbEluZm86IG51bWJlcltdKSB7XG4gICAgdGhpcy5wdXNoKE9wLkRlYnVnZ2VyLCB0aGlzLmNvbnN0YW50cy5vdGhlcihzeW1ib2xzKSwgdGhpcy5jb25zdGFudHMuYXJyYXkoZXZhbEluZm8pKTtcbiAgfVxuXG4gIC8vIGNvbnRlbnRcblxuICBkeW5hbWljQ29udGVudChPcGNvZGU6IGNvbnRlbnQuQXBwZW5kRHluYW1pY09wY29kZTxJbnNlcnRpb24+KSB7XG4gICAgdGhpcy5wdXNoKE9wLkR5bmFtaWNDb250ZW50LCB0aGlzLm90aGVyKE9wY29kZSkpO1xuICB9XG5cbiAgY2F1dGlvdXNBcHBlbmQoKSB7XG4gICAgdGhpcy5keW5hbWljQ29udGVudChuZXcgY29udGVudC5PcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSgpKTtcbiAgfVxuXG4gIHRydXN0aW5nQXBwZW5kKCkge1xuICAgIHRoaXMuZHluYW1pY0NvbnRlbnQobmV3IGNvbnRlbnQuT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUoKSk7XG4gIH1cblxuICAvLyBkb21cblxuICB0ZXh0KHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChPcC5UZXh0LCB0aGlzLmNvbnN0YW50cy5zdHJpbmcodGV4dCkpO1xuICB9XG5cbiAgb3BlblByaW1pdGl2ZUVsZW1lbnQodGFnOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goT3AuT3BlbkVsZW1lbnQsIHRoaXMuY29uc3RhbnRzLnN0cmluZyh0YWcpKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnModGFnOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goT3AuT3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucywgdGhpcy5jb25zdGFudHMuc3RyaW5nKHRhZykpO1xuICB9XG5cbiAgb3BlbkR5bmFtaWNFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5PcGVuRHluYW1pY0VsZW1lbnQpO1xuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5GbHVzaEVsZW1lbnQpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5DbG9zZUVsZW1lbnQpO1xuICB9XG5cbiAgc3RhdGljQXR0cihfbmFtZTogc3RyaW5nLCBfbmFtZXNwYWNlOiBPcHRpb248c3RyaW5nPiwgX3ZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgbmFtZSA9IHRoaXMuY29uc3RhbnRzLnN0cmluZyhfbmFtZSk7XG4gICAgbGV0IG5hbWVzcGFjZSA9IF9uYW1lc3BhY2UgPyB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWVzcGFjZSkgOiAwO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29uc3RhbnRzLnN0cmluZyhfdmFsdWUpO1xuXG4gICAgdGhpcy5wdXNoKE9wLlN0YXRpY0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgZHluYW1pY0F0dHJOUyhfbmFtZTogc3RyaW5nLCBfbmFtZXNwYWNlOiBzdHJpbmcsIHRydXN0aW5nOiBib29sZWFuKSB7XG4gICAgbGV0IG5hbWUgPSB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWUpO1xuICAgIGxldCBuYW1lc3BhY2UgPSB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWVzcGFjZSk7XG5cbiAgICB0aGlzLnB1c2goT3AuRHluYW1pY0F0dHJOUywgbmFtZSwgbmFtZXNwYWNlLCAodHJ1c3RpbmcgYXMgYW55KXwwKTtcbiAgfVxuXG4gIGR5bmFtaWNBdHRyKF9uYW1lOiBzdHJpbmcsIHRydXN0aW5nOiBib29sZWFuKSB7XG4gICAgbGV0IG5hbWUgPSB0aGlzLmNvbnN0YW50cy5zdHJpbmcoX25hbWUpO1xuICAgIHRoaXMucHVzaChPcC5EeW5hbWljQXR0ciwgbmFtZSwgKHRydXN0aW5nIGFzIGFueSl8MCk7XG4gIH1cblxuICBjb21tZW50KF9jb21tZW50OiBzdHJpbmcpIHtcbiAgICBsZXQgY29tbWVudCA9IHRoaXMuY29uc3RhbnRzLnN0cmluZyhfY29tbWVudCk7XG4gICAgdGhpcy5wdXNoKE9wLkNvbW1lbnQsIGNvbW1lbnQpO1xuICB9XG5cbiAgbW9kaWZpZXIoX2RlZmluaXRpb246IE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+KSB7XG4gICAgdGhpcy5wdXNoKE9wLk1vZGlmaWVyLCB0aGlzLm90aGVyKF9kZWZpbml0aW9uKSk7XG4gIH1cblxuICAvLyBsaXN0c1xuXG4gIHB1dEl0ZXJhdG9yKCkge1xuICAgIHRoaXMucHVzaChPcC5QdXRJdGVyYXRvcik7XG4gIH1cblxuICBlbnRlckxpc3Qoc3RhcnQ6IHN0cmluZykge1xuICAgIHRoaXMucmVzZXJ2ZShPcC5FbnRlckxpc3QpO1xuICAgIHRoaXMubGFiZWxzLnRhcmdldCh0aGlzLnBvcywgT3AuRW50ZXJMaXN0LCBzdGFydCk7XG4gIH1cblxuICBleGl0TGlzdCgpIHtcbiAgICB0aGlzLnB1c2goT3AuRXhpdExpc3QpO1xuICB9XG5cbiAgaXRlcmF0ZShicmVha3M6IHN0cmluZykge1xuICAgIHRoaXMucmVzZXJ2ZShPcC5JdGVyYXRlKTtcbiAgICB0aGlzLmxhYmVscy50YXJnZXQodGhpcy5wb3MsIE9wLkl0ZXJhdGUsIGJyZWFrcyk7XG4gIH1cblxuICAvLyBleHByZXNzaW9uc1xuXG4gIHNldFZhcmlhYmxlKHN5bWJvbDogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLlNldFZhcmlhYmxlLCBzeW1ib2wpO1xuICB9XG5cbiAgZ2V0VmFyaWFibGUoc3ltYm9sOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuR2V0VmFyaWFibGUsIHN5bWJvbCk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eShrZXk6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChPcC5HZXRQcm9wZXJ0eSwgdGhpcy5zdHJpbmcoa2V5KSk7XG4gIH1cblxuICBnZXRCbG9jayhzeW1ib2w6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5HZXRCbG9jaywgc3ltYm9sKTtcbiAgfVxuXG4gIGhhc0Jsb2NrKHN5bWJvbDogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLkhhc0Jsb2NrLCBzeW1ib2wpO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMoc3ltYm9sOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuSGFzQmxvY2tQYXJhbXMsIHN5bWJvbCk7XG4gIH1cblxuICBjb25jYXQoc2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKE9wLkNvbmNhdCwgc2l6ZSk7XG4gIH1cblxuICBmdW5jdGlvbihmOiBDbGllbnRTaWRlLkZ1bmN0aW9uRXhwcmVzc2lvbkNhbGxiYWNrPE9wYXF1ZT4pIHtcbiAgICB0aGlzLnB1c2goT3AuRnVuY3Rpb24sIHRoaXMuZnVuYyhmKSk7XG4gIH1cblxuICBsb2FkKHJlZ2lzdGVyOiBSZWdpc3Rlcikge1xuICAgIHRoaXMucHVzaChPcC5Mb2FkLCByZWdpc3Rlcik7XG4gIH1cblxuICBmZXRjaChyZWdpc3RlcjogUmVnaXN0ZXIpIHtcbiAgICB0aGlzLnB1c2goT3AuRmV0Y2gsIHJlZ2lzdGVyKTtcbiAgfVxuXG4gIGR1cChyZWdpc3RlciA9IFJlZ2lzdGVyLnNwLCBvZmZzZXQgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMucHVzaChPcC5EdXAsIHJlZ2lzdGVyLCBvZmZzZXQpO1xuICB9XG5cbiAgcG9wKGNvdW50ID0gMSkge1xuICAgIHJldHVybiB0aGlzLnB1c2goT3AuUG9wLCBjb3VudCk7XG4gIH1cblxuICAvLyB2bVxuXG4gIHB1c2hSZW1vdGVFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5QdXNoUmVtb3RlRWxlbWVudCk7XG4gIH1cblxuICBwb3BSZW1vdGVFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChPcC5Qb3BSZW1vdGVFbGVtZW50KTtcbiAgfVxuXG4gIGxhYmVsKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubGFiZWxzLmxhYmVsKG5hbWUsIHRoaXMubmV4dFBvcyk7XG4gIH1cblxuICBwdXNoUm9vdFNjb3BlKHN5bWJvbHM6IG51bWJlciwgYmluZENhbGxlclNjb3BlOiBib29sZWFuKSB7XG4gICAgdGhpcy5wdXNoKE9wLlJvb3RTY29wZSwgc3ltYm9scywgPGFueT5iaW5kQ2FsbGVyU2NvcGV8MCk7XG4gIH1cblxuICBwdXNoQ2hpbGRTY29wZSgpIHtcbiAgICB0aGlzLnB1c2goT3AuQ2hpbGRTY29wZSk7XG4gIH1cblxuICBwb3BTY29wZSgpIHtcbiAgICB0aGlzLnB1c2goT3AuUG9wU2NvcGUpO1xuICB9XG5cbiAgcmV0dXJuVG8obGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMucmVzZXJ2ZShPcC5JbW1lZGlhdGUpO1xuICAgIHRoaXMubGFiZWxzLnRhcmdldCh0aGlzLnBvcywgT3AuSW1tZWRpYXRlLCBsYWJlbCk7XG4gICAgdGhpcy5sb2FkKFJlZ2lzdGVyLnJhKTtcbiAgfVxuXG4gIHB1c2hEeW5hbWljU2NvcGUoKSB7XG4gICAgdGhpcy5wdXNoKE9wLlB1c2hEeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgcG9wRHluYW1pY1Njb3BlKCkge1xuICAgIHRoaXMucHVzaChPcC5Qb3BEeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgcHVzaEltbWVkaWF0ZTxUPih2YWx1ZTogVCkge1xuICAgIHRoaXMucHVzaChPcC5Db25zdGFudCwgdGhpcy5vdGhlcih2YWx1ZSkpO1xuICB9XG5cbiAgcHJpbWl0aXZlKF9wcmltaXRpdmU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgfCBib29sZWFuKSB7XG4gICAgbGV0IGZsYWc6IDAgfCAxIHwgMiA9IDA7XG4gICAgbGV0IHByaW1pdGl2ZTogbnVtYmVyO1xuICAgIHN3aXRjaCAodHlwZW9mIF9wcmltaXRpdmUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHByaW1pdGl2ZSA9IF9wcmltaXRpdmUgYXMgbnVtYmVyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHByaW1pdGl2ZSA9IHRoaXMuc3RyaW5nKF9wcmltaXRpdmUgYXMgc3RyaW5nKTtcbiAgICAgICAgZmxhZyA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHByaW1pdGl2ZSA9IChfcHJpbWl0aXZlIGFzIGFueSkgfCAwO1xuICAgICAgICBmbGFnID0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBhc3N1bWUgbnVsbFxuICAgICAgICBwcmltaXRpdmUgPSAyO1xuICAgICAgICBmbGFnID0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICBwcmltaXRpdmUgPSAzO1xuICAgICAgICBmbGFnID0gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJpbWl0aXZlIHBhc3NlZCB0byBwdXNoUHJpbWl0aXZlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKE9wLlByaW1pdGl2ZVJlZmVyZW5jZSwgKGZsYWcgPDwgMzApIHwgcHJpbWl0aXZlKTtcbiAgfVxuXG4gIGhlbHBlcihmdW5jOiBGdW5jdGlvbikge1xuICAgIHRoaXMucHVzaChPcC5IZWxwZXIsIHRoaXMuZnVuYyhmdW5jKSk7XG4gIH1cblxuICBwdXNoQmxvY2soYmxvY2s6IE9wdGlvbjxCbG9jaz4pIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaEJsb2NrLCB0aGlzLmJsb2NrKGJsb2NrKSk7XG4gIH1cblxuICBiaW5kRHluYW1pY1Njb3BlKF9uYW1lczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2goT3AuQmluZER5bmFtaWNTY29wZSwgdGhpcy5uYW1lcyhfbmFtZXMpKTtcbiAgfVxuXG4gIGVudGVyKGFyZ3M6IG51bWJlcikge1xuICAgIHRoaXMucHVzaChPcC5FbnRlciwgYXJncyk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMucHVzaChPcC5FeGl0KTtcbiAgfVxuXG4gIHJldHVybigpIHtcbiAgICB0aGlzLnB1c2goT3AuUmV0dXJuKTtcbiAgfVxuXG4gIHB1c2hGcmFtZSgpIHtcbiAgICB0aGlzLnB1c2goT3AuUHVzaEZyYW1lKTtcbiAgfVxuXG4gIHBvcEZyYW1lKCkge1xuICAgIHRoaXMucHVzaChPcC5Qb3BGcmFtZSk7XG4gIH1cblxuICBjb21waWxlRHluYW1pY0Jsb2NrKCk6IHZvaWQge1xuICAgIHRoaXMucHVzaChPcC5Db21waWxlRHluYW1pY0Jsb2NrKTtcbiAgfVxuXG4gIGludm9rZUR5bmFtaWMoaW52b2tlcjogdm0uRHluYW1pY0ludm9rZXI8U3ltYm9sVGFibGU+KTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKE9wLkludm9rZUR5bmFtaWMsIHRoaXMub3RoZXIoaW52b2tlcikpO1xuICB9XG5cbiAgaW52b2tlU3RhdGljKGJsb2NrOiBCbG9jaywgY2FsbGVyQ291bnQgPSAwKTogdm9pZCB7XG4gICAgbGV0IHsgcGFyYW1ldGVycyB9ID0gYmxvY2suc3ltYm9sVGFibGU7XG4gICAgbGV0IGNhbGxlZUNvdW50ID0gcGFyYW1ldGVycy5sZW5ndGg7XG4gICAgbGV0IGNvdW50ID0gTWF0aC5taW4oY2FsbGVyQ291bnQsIGNhbGxlZUNvdW50KTtcblxuICAgIHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIHRoaXMucHVzaENoaWxkU2NvcGUoKTtcblxuICAgICAgZm9yIChsZXQgaT0wOyBpPGNvdW50OyBpKyspIHtcbiAgICAgICAgdGhpcy5kdXAoUmVnaXN0ZXIuZnAsIGNhbGxlckNvdW50IC0gaSk7XG4gICAgICAgIHRoaXMuc2V0VmFyaWFibGUocGFyYW1ldGVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IF9ibG9jayA9IHRoaXMuY29uc3RhbnRzLmJsb2NrKGJsb2NrKTtcbiAgICB0aGlzLnB1c2goT3AuSW52b2tlU3RhdGljLCBfYmxvY2spO1xuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuICB9XG5cbiAgdGVzdCh0ZXN0RnVuYzogJ2NvbnN0JyB8ICdzaW1wbGUnIHwgJ2Vudmlyb25tZW50JyB8IHZtLlRlc3RGdW5jdGlvbikge1xuICAgIGxldCBfZnVuYzogdm0uVGVzdEZ1bmN0aW9uO1xuXG4gICAgaWYgKHRlc3RGdW5jID09PSAnY29uc3QnKSB7XG4gICAgICBfZnVuYyA9IHZtLkNvbnN0VGVzdDtcbiAgICB9IGVsc2UgaWYgKHRlc3RGdW5jID09PSAnc2ltcGxlJykge1xuICAgICAgX2Z1bmMgPSB2bS5TaW1wbGVUZXN0O1xuICAgIH0gZWxzZSBpZiAodGVzdEZ1bmMgPT09ICdlbnZpcm9ubWVudCcpIHtcbiAgICAgIF9mdW5jID0gdm0uRW52aXJvbm1lbnRUZXN0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RGdW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBfZnVuYyA9IHRlc3RGdW5jO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VucmVhY2hhYmxlJyk7XG4gICAgfVxuXG4gICAgbGV0IGZ1bmMgPSB0aGlzLmNvbnN0YW50cy5mdW5jdGlvbihfZnVuYyk7XG4gICAgdGhpcy5wdXNoKE9wLlRlc3QsIGZ1bmMpO1xuICB9XG5cbiAganVtcCh0YXJnZXQ6IHN0cmluZykge1xuICAgIHRoaXMucmVzZXJ2ZShPcC5KdW1wKTtcbiAgICB0aGlzLmxhYmVscy50YXJnZXQodGhpcy5wb3MsIE9wLkp1bXAsIHRhcmdldCk7XG4gIH1cblxuICBqdW1wSWYodGFyZ2V0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc2VydmUoT3AuSnVtcElmKTtcbiAgICB0aGlzLmxhYmVscy50YXJnZXQodGhpcy5wb3MsIE9wLkp1bXBJZiwgdGFyZ2V0KTtcbiAgfVxuXG4gIGp1bXBVbmxlc3ModGFyZ2V0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc2VydmUoT3AuSnVtcFVubGVzcyk7XG4gICAgdGhpcy5sYWJlbHMudGFyZ2V0KHRoaXMucG9zLCBPcC5KdW1wVW5sZXNzLCB0YXJnZXQpO1xuICB9XG5cbiAgc3RyaW5nKF9zdHJpbmc6IHN0cmluZyk6IENvbnN0YW50U3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMuc3RyaW5nKF9zdHJpbmcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5hbWVzKF9uYW1lczogc3RyaW5nW10pOiBDb25zdGFudEFycmF5IHtcbiAgICBsZXQgbmFtZXMgPSBfbmFtZXMubWFwKG4gPT4gdGhpcy5jb25zdGFudHMuc3RyaW5nKG4pKTtcbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMuYXJyYXkobmFtZXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bWJvbHMoc3ltYm9sczogbnVtYmVyW10pOiBDb25zdGFudEFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMuYXJyYXkoc3ltYm9scyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3RoZXIodmFsdWU6IE9wYXF1ZSk6IENvbnN0YW50T3RoZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5vdGhlcih2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmxvY2soYmxvY2s6IE9wdGlvbjxCbG9jaz4pOiBDb25zdGFudEJsb2NrIHtcbiAgICByZXR1cm4gYmxvY2sgPyB0aGlzLmNvbnN0YW50cy5ibG9jayhibG9jaykgOiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZ1bmMoZnVuYzogRnVuY3Rpb24pOiBDb25zdGFudEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdGFudHMuZnVuY3Rpb24oZnVuYyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb21waWxhYmxlRXhwcmVzc2lvbjxFPihleHByOiBSZXByZXNlbnRzPEU+KTogZXhwciBpcyBDb21waWxlc0ludG88RT4ge1xuICByZXR1cm4gZXhwciAmJiB0eXBlb2YgZXhwclsnY29tcGlsZSddID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcGNvZGVCdWlsZGVyIGV4dGVuZHMgQmFzaWNPcGNvZGVCdWlsZGVyIHtcbiAgcHVibGljIGNvbXBvbmVudDogSUNvbXBvbmVudEJ1aWxkZXI7XG5cbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBwcm9ncmFtOiBQcm9ncmFtID0gZW52LnByb2dyYW0pIHtcbiAgICBzdXBlcihlbnYsIG1ldGEsIHByb2dyYW0pO1xuICAgIHRoaXMuY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJ1aWxkZXIodGhpcyk7XG4gIH1cblxuICBjb21waWxlQXJncyhwYXJhbXM6IE9wdGlvbjxXaXJlRm9ybWF0LkNvcmUuUGFyYW1zPiwgaGFzaDogT3B0aW9uPFdpcmVGb3JtYXQuQ29yZS5IYXNoPiwgc3ludGhldGljOiBib29sZWFuKSB7XG4gICAgbGV0IHBvc2l0aW9uYWwgPSAwO1xuXG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgcGFyYW1zLmZvckVhY2gocCA9PiBleHByKHAsIHRoaXMpKTtcbiAgICAgIHBvc2l0aW9uYWwgPSBwYXJhbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGxldCBuYW1lcyA9IEVNUFRZX0FSUkFZO1xuXG4gICAgaWYgKGhhc2gpIHtcbiAgICAgIG5hbWVzID0gaGFzaFswXTtcbiAgICAgIGhhc2hbMV0uZm9yRWFjaCh2ID0+IGV4cHIodiwgdGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaEltbWVkaWF0ZShuYW1lcyk7XG4gICAgdGhpcy5wdXNoQXJncyhwb3NpdGlvbmFsLCBzeW50aGV0aWMpO1xuICB9XG5cbiAgY29tcGlsZTxFPihleHByOiBSZXByZXNlbnRzPEU+KTogRSB7XG4gICAgaWYgKGlzQ29tcGlsYWJsZUV4cHJlc3Npb24oZXhwcikpIHtcbiAgICAgIHJldHVybiBleHByLmNvbXBpbGUodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBleHByO1xuICAgIH1cbiAgfVxuXG4gIGd1YXJkZWRDYXV0aW91c0FwcGVuZChleHByZXNzaW9uOiBXaXJlRm9ybWF0LkV4cHJlc3Npb24pIHtcbiAgICBleHByKGV4cHJlc3Npb24sIHRoaXMpO1xuICAgIHRoaXMuZHluYW1pY0NvbnRlbnQobmV3IGNvbnRlbnQuR3VhcmRlZENhdXRpb3VzQXBwZW5kT3Bjb2RlKCkpO1xuICB9XG5cbiAgZ3VhcmRlZFRydXN0aW5nQXBwZW5kKGV4cHJlc3Npb246IFdpcmVGb3JtYXQuRXhwcmVzc2lvbikge1xuICAgIGV4cHIoZXhwcmVzc2lvbiwgdGhpcyk7XG4gICAgdGhpcy5keW5hbWljQ29udGVudChuZXcgY29udGVudC5HdWFyZGVkVHJ1c3RpbmdBcHBlbmRPcGNvZGUoKSk7XG4gIH1cblxuICBpbnZva2VDb21wb25lbnQoYXR0cnM6IE9wdGlvbjxSYXdJbmxpbmVCbG9jaz4sIHBhcmFtczogT3B0aW9uPFdpcmVGb3JtYXQuQ29yZS5QYXJhbXM+LCBoYXNoOiBPcHRpb248V2lyZUZvcm1hdC5Db3JlLkhhc2g+LCBibG9jazogT3B0aW9uPEJsb2NrPiwgaW52ZXJzZTogT3B0aW9uPEJsb2NrPiA9IG51bGwpIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnRTdGF0ZSgpO1xuXG4gICAgdGhpcy5mZXRjaChSZWdpc3Rlci5zMCk7XG4gICAgdGhpcy5kdXAoUmVnaXN0ZXIuc3AsIDEpO1xuICAgIHRoaXMubG9hZChSZWdpc3Rlci5zMCk7XG5cbiAgICB0aGlzLnB1c2hCbG9jayhibG9jayk7XG4gICAgdGhpcy5wdXNoQmxvY2soaW52ZXJzZSk7XG5cbiAgICB0aGlzLmNvbXBpbGVBcmdzKHBhcmFtcywgaGFzaCwgZmFsc2UpO1xuICAgIHRoaXMucHJlcGFyZUFyZ3MoUmVnaXN0ZXIuczApO1xuXG4gICAgdGhpcy5iZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy5wdXNoRHluYW1pY1Njb3BlKCk7XG4gICAgdGhpcy5jcmVhdGVDb21wb25lbnQoUmVnaXN0ZXIuczAsIHRydWUsIGludmVyc2UgPT09IG51bGwpO1xuICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnREZXN0cnVjdG9yKFJlZ2lzdGVyLnMwKTtcblxuICAgIHRoaXMuZ2V0Q29tcG9uZW50U2VsZihSZWdpc3Rlci5zMCk7XG4gICAgdGhpcy5nZXRDb21wb25lbnRMYXlvdXQoUmVnaXN0ZXIuczApO1xuICAgIHRoaXMuaW52b2tlRHluYW1pYyhuZXcgSW52b2tlRHluYW1pY0xheW91dChhdHRycyAmJiBhdHRycy5zY2FuKCkpKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgdGhpcy5wb3BEeW5hbWljU2NvcGUoKTtcbiAgICB0aGlzLmNvbW1pdENvbXBvbmVudFRyYW5zYWN0aW9uKCk7XG5cbiAgICB0aGlzLmxvYWQoUmVnaXN0ZXIuczApO1xuICB9XG5cbiAgdGVtcGxhdGUoYmxvY2s6IE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz4pOiBPcHRpb248UmF3SW5saW5lQmxvY2s+IHtcbiAgICBpZiAoIWJsb2NrKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKHRoaXMuZW52LCB0aGlzLm1ldGEsIGJsb2NrLnN0YXRlbWVudHMsIGJsb2NrLnBhcmFtZXRlcnMpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEJsb2NrQ2FsbGJhY2sgPSAoZHNsOiBPcGNvZGVCdWlsZGVyLCBCRUdJTjogTGFiZWwsIEVORDogTGFiZWwpID0+IHZvaWQ7XG4iXX0=

@@ -1,5 +0,4 @@

import { UpdatingOpcode } from '../../opcodes';
import { APPEND_OPCODES, UpdatingOpcode } from '../../opcodes';
import { Assert } from './vm';
import ARGS from '../../vm/arguments';
import { APPEND_OPCODES } from '../../opcodes';
import { ComponentElementOperations } from './dom';

@@ -9,3 +8,3 @@ import { CONSTANT_TAG, ReferenceCache, combine, isConst } from '@glimmer/reference';

let definition = vm.constants.getOther(_definition);
let stack = vm.evalStack;
let stack = vm.stack;
stack.push(definition);

@@ -15,3 +14,3 @@ stack.push(definition.manager);

APPEND_OPCODES.add(56 /* PushDynamicComponentManager */, vm => {
let stack = vm.evalStack;
let stack = vm.stack;
let reference = stack.pop();

@@ -26,10 +25,10 @@ let cache = isConst(reference) ? undefined : new ReferenceCache(reference);

});
APPEND_OPCODES.add(57 /* SetComponentState */, (vm, { op1: local }) => {
let stack = vm.evalStack;
APPEND_OPCODES.add(57 /* InitializeComponentState */, vm => {
let stack = vm.stack;
let manager = stack.pop();
let definition = stack.pop();
vm.setLocal(local, { definition, manager, component: null });
stack.push({ definition, manager, component: null });
});
APPEND_OPCODES.add(58 /* PushArgs */, (vm, { op1: positional, op2: synthetic }) => {
let stack = vm.evalStack;
let stack = vm.stack;
ARGS.setup(stack, positional, !!synthetic);

@@ -39,4 +38,4 @@ stack.push(ARGS);

APPEND_OPCODES.add(59 /* PrepareArgs */, (vm, { op1: _state }) => {
let stack = vm.evalStack;
let { definition, manager } = vm.getLocal(_state);
let stack = vm.stack;
let { definition, manager } = vm.fetchValue(_state);
let args = stack.pop();

@@ -63,5 +62,5 @@ let preparedArgs = manager.prepareArgs(definition, args);

let definition, manager;
let args = vm.evalStack.pop();
let args = vm.stack.pop();
let dynamicScope = vm.dynamicScope();
let state = { definition, manager } = vm.getLocal(_state);
let state = { definition, manager } = vm.fetchValue(_state);
let hasDefaultBlock = flags & 0b01;

@@ -73,3 +72,3 @@ let component = manager.create(vm.env, definition, args, dynamicScope, vm.getSelf(), !!hasDefaultBlock);

APPEND_OPCODES.add(61 /* RegisterComponentDestructor */, (vm, { op1: _state }) => {
let { manager, component } = vm.getLocal(_state);
let { manager, component } = vm.fetchValue(_state);
let destructor = manager.getDestructor(component);

@@ -81,23 +80,23 @@ if (destructor)

vm.beginCacheGroup();
vm.stack().pushSimpleBlock();
vm.elements().pushSimpleBlock();
});
APPEND_OPCODES.add(62 /* PushComponentOperations */, vm => {
vm.evalStack.push(new ComponentElementOperations(vm.env));
vm.stack.push(new ComponentElementOperations(vm.env));
});
APPEND_OPCODES.add(67 /* DidCreateElement */, (vm, { op1: _state }) => {
let { manager, component } = vm.getLocal(_state);
let { manager, component } = vm.fetchValue(_state);
let action = 'DidCreateElementOpcode#evaluate';
manager.didCreateElement(component, vm.stack().expectConstructing(action), vm.stack().expectOperations(action));
manager.didCreateElement(component, vm.elements().expectConstructing(action), vm.elements().expectOperations(action));
});
APPEND_OPCODES.add(63 /* GetComponentSelf */, (vm, { op1: _state }) => {
let state = vm.getLocal(_state);
vm.evalStack.push(state.manager.getSelf(state.component));
let state = vm.fetchValue(_state);
vm.stack.push(state.manager.getSelf(state.component));
});
APPEND_OPCODES.add(64 /* GetComponentLayout */, (vm, { op1: _state }) => {
let { manager, definition, component } = vm.getLocal(_state);
vm.evalStack.push(manager.layoutFor(definition, component, vm.env));
let { manager, definition, component } = vm.fetchValue(_state);
vm.stack.push(manager.layoutFor(definition, component, vm.env));
});
APPEND_OPCODES.add(69 /* DidRenderLayout */, (vm, { op1: _state }) => {
let { manager, component } = vm.getLocal(_state);
let bounds = vm.stack().popBlock();
APPEND_OPCODES.add(68 /* DidRenderLayout */, (vm, { op1: _state }) => {
let { manager, component } = vm.fetchValue(_state);
let bounds = vm.elements().popBlock();
manager.didRenderLayout(component, bounds);

@@ -151,2 +150,2 @@ vm.env.didCreate(component, manager);

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLElBQStCLE1BQU0sb0JBQW9CLENBQUM7QUFJakUsT0FBTyxFQUFFLGNBQWMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFbkQsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBR2QsT0FBTyxFQUNQLE9BQU8sRUFDUixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLGNBQWMsQ0FBQyxHQUFHLENBQUMsNkJBQXVCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO0lBQ25FLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUE4QixXQUFXLENBQUMsQ0FBQztJQUNqRixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0lBRXpCLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLG9DQUE4QixFQUFFLEVBQUU7SUFDbkQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUN6QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUF1RCxDQUFDO0lBQ2pGLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQThCLFNBQVMsQ0FBQyxDQUFDO0lBQ3hHLElBQUks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LENBQUMsQ0FBQztTQUNsQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSw0QkFBNkIsU0FBUSxjQUFjO0lBSXZELFlBQ1UsT0FBb0MsRUFDcEMsU0FBb0IsRUFDcEIsTUFBYztRQUV0QixLQUFLLEVBQUUsQ0FBQztRQUpBLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQU5qQixTQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFDM0IsUUFBRyxHQUFRLFlBQVksQ0FBQztJQVEvQixDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQWM7UUFDckIsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQXNzZXJ0IH0gZnJvbSAnLi92bSc7XG5pbXBvcnQgeyBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IEFSR1MsIHsgQXJndW1lbnRzLCBJQXJndW1lbnRzIH0gZnJvbSAnLi4vLi4vdm0vYXJndW1lbnRzJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ29tcG9uZW50TWFuYWdlciwgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IER5bmFtaWNTY29wZSB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCBCb3VuZHMgZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENPTlNUQU5UX1RBRyxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsXG4gIFRhZyxcbiAgY29tYmluZSxcbiAgaXNDb25zdFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE1hbmFnZXIsICh2bSwgeyBvcDE6IF9kZWZpbml0aW9uIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24gPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihfZGVmaW5pdGlvbik7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcblxuICBzdGFjay5wdXNoKGRlZmluaXRpb24pO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24ubWFuYWdlcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlciwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCByZWZlcmVuY2UgPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxDb21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4+PigpO1xuICBsZXQgY2FjaGUgPSBpc0NvbnN0KHJlZmVyZW5jZSkgPyB1bmRlZmluZWQgOiBuZXcgUmVmZXJlbmNlQ2FjaGU8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihyZWZlcmVuY2UpO1xuICBsZXQgZGVmaW5pdGlvbiA9IGNhY2hlID8gY2FjaGUucGVlaygpIDogcmVmZXJlbmNlLnZhbHVlKCk7XG5cbiAgc3RhY2sucHVzaChkZWZpbml0aW9uKTtcbiAgc3RhY2sucHVzaChkZWZpbml0aW9uLm1hbmFnZXIpO1xuXG4gIGlmIChjYWNoZSkge1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG59KTtcblxuaW50ZXJmYWNlIEluaXRpYWxDb21wb25lbnRTdGF0ZTxUPiB7XG4gIGRlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb248VD47XG4gIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8VD47XG4gIGNvbXBvbmVudDogbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRTdGF0ZTxUPiB7XG4gIGRlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb248VD47XG4gIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8VD47XG4gIGNvbXBvbmVudDogVDtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlNldENvbXBvbmVudFN0YXRlLCAodm0sIHsgb3AxOiBsb2NhbCB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcblxuICBsZXQgbWFuYWdlciA9IHN0YWNrLnBvcCgpO1xuICBsZXQgZGVmaW5pdGlvbiA9IHN0YWNrLnBvcCgpO1xuXG4gIHZtLnNldExvY2FsKGxvY2FsLCB7IGRlZmluaXRpb24sIG1hbmFnZXIsIGNvbXBvbmVudDogbnVsbCB9KTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaEFyZ3MsICh2bSwgeyBvcDE6IHBvc2l0aW9uYWwsIG9wMjogc3ludGhldGljIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBBUkdTLnNldHVwKHN0YWNrLCBwb3NpdGlvbmFsLCAhIXN5bnRoZXRpYyk7XG4gIHN0YWNrLnB1c2goQVJHUyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlByZXBhcmVBcmdzLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmdldExvY2FsPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG5cbiAgbGV0IHByZXBhcmVkQXJncyA9IG1hbmFnZXIucHJlcGFyZUFyZ3MoZGVmaW5pdGlvbiwgYXJncyk7XG5cbiAgaWYgKHByZXBhcmVkQXJncykge1xuICAgIGFyZ3MuY2xlYXIoKTtcblxuICAgIGxldCB7IHBvc2l0aW9uYWwsIG5hbWVkIH0gPSBwcmVwYXJlZEFyZ3M7XG5cbiAgICBsZXQgcG9zaXRpb25hbENvdW50ID0gcG9zaXRpb25hbC5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8cG9zaXRpb25hbENvdW50OyBpKyspIHtcbiAgICAgIHN0YWNrLnB1c2gocG9zaXRpb25hbFtpXSk7XG4gICAgfVxuXG4gICAgbGV0IG5hbWVzID0gT2JqZWN0LmtleXMobmFtZWQpO1xuICAgIGxldCBuYW1lZENvdW50ID0gbmFtZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPG5hbWVkQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChuYW1lZFtuYW1lc1tpXV0pO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2gobmFtZXMpO1xuICAgIGFyZ3Muc2V0dXAoc3RhY2ssIHBvc2l0aW9uYWxDb3VudCwgdHJ1ZSk7XG4gIH1cblxuICBzdGFjay5wdXNoKGFyZ3MpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5DcmVhdGVDb21wb25lbnQsICh2bSwgeyBvcDE6IGZsYWdzLCBvcDI6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCBkZWZpbml0aW9uLCBtYW5hZ2VyO1xuICBsZXQgYXJncyA9IHZtLmV2YWxTdGFjay5wb3A8SUFyZ3VtZW50cz4oKTtcbiAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLmR5bmFtaWNTY29wZSgpO1xuICBsZXQgc3RhdGUgPSB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmdldExvY2FsPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBoYXNEZWZhdWx0QmxvY2sgPSBmbGFncyAmIDBiMDE7XG5cbiAgbGV0IGNvbXBvbmVudCA9IG1hbmFnZXIuY3JlYXRlKHZtLmVudiwgZGVmaW5pdGlvbiwgYXJncywgZHluYW1pY1Njb3BlLCB2bS5nZXRTZWxmKCksICEhaGFzRGVmYXVsdEJsb2NrKTtcbiAgKHN0YXRlIGFzIENvbXBvbmVudFN0YXRlPHR5cGVvZiBjb21wb25lbnQ+KS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlQ29tcG9uZW50T3Bjb2RlKGFyZ3MudGFnLCBkZWZpbml0aW9uLm5hbWUsIGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvciwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBkZXN0cnVjdG9yID0gbWFuYWdlci5nZXREZXN0cnVjdG9yKGNvbXBvbmVudCk7XG4gIGlmIChkZXN0cnVjdG9yKSB2bS5uZXdEZXN0cm95YWJsZShkZXN0cnVjdG9yKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQmVnaW5Db21wb25lbnRUcmFuc2FjdGlvbiwgdm0gPT4ge1xuICB2bS5iZWdpbkNhY2hlR3JvdXAoKTtcbiAgdm0uc3RhY2soKS5wdXNoU2ltcGxlQmxvY2soKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE9wZXJhdGlvbnMsIHZtID0+IHtcbiAgdm0uZXZhbFN0YWNrLnB1c2gobmV3IENvbXBvbmVudEVsZW1lbnRPcGVyYXRpb25zKHZtLmVudikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EaWRDcmVhdGVFbGVtZW50LCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQgfSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGFjdGlvbiA9ICdEaWRDcmVhdGVFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgbWFuYWdlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdm0uc3RhY2soKS5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0uc3RhY2soKS5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRTZWxmLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhdGUgPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5ldmFsU3RhY2sucHVzaChzdGF0ZS5tYW5hZ2VyLmdldFNlbGYoc3RhdGUuY29tcG9uZW50KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldENvbXBvbmVudExheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgZGVmaW5pdGlvbiwgY29tcG9uZW50IH0gPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5ldmFsU3RhY2sucHVzaChtYW5hZ2VyLmxheW91dEZvcihkZWZpbml0aW9uLCBjb21wb25lbnQsIHZtLmVudikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EaWRSZW5kZXJMYXlvdXQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGNvbXBvbmVudCB9ID0gdm0uZ2V0TG9jYWw8Q29tcG9uZW50U3RhdGU8T3BhcXVlPj4oX3N0YXRlKTtcbiAgbGV0IGJvdW5kcyA9IHZtLnN0YWNrKCkucG9wQmxvY2soKTtcblxuICBtYW5hZ2VyLmRpZFJlbmRlckxheW91dChjb21wb25lbnQsIGJvdW5kcyk7XG5cbiAgdm0uZW52LmRpZENyZWF0ZShjb21wb25lbnQsIG1hbmFnZXIpO1xuXG4gIHZtLnVwZGF0ZVdpdGgobmV3IERpZFVwZGF0ZUxheW91dE9wY29kZShtYW5hZ2VyLCBjb21wb25lbnQsIGJvdW5kcykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db21taXRDb21wb25lbnRUcmFuc2FjdGlvbiwgdm0gPT4gdm0uY29tbWl0Q2FjaGVHcm91cCgpKTtcblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUNvbXBvbmVudE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInVwZGF0ZS1jb21wb25lbnRcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0YWc6IFRhZyxcbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgIHByaXZhdGUgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBsZXQgY29tcG9uZW50VGFnID0gbWFuYWdlci5nZXRUYWcoY29tcG9uZW50KTtcblxuICAgIGlmIChjb21wb25lbnRUYWcpIHtcbiAgICAgIHRoaXMudGFnID0gY29tYmluZShbdGFnLCBjb21wb25lbnRUYWddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgfVxuICB9XG5cbiAgZXZhbHVhdGUoX3ZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgY29tcG9uZW50LCBtYW5hZ2VyLCBkeW5hbWljU2NvcGUgfSA9IHRoaXM7XG5cbiAgICBtYW5hZ2VyLnVwZGF0ZShjb21wb25lbnQsIGR5bmFtaWNTY29wZSk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy5uYW1lKV1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaWRVcGRhdGVMYXlvdXRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJkaWQtdXBkYXRlLWxheW91dFwiO1xuICBwdWJsaWMgdGFnOiBUYWcgPSBDT05TVEFOVF9UQUc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPENvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBwcml2YXRlIGJvdW5kczogQm91bmRzXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IG1hbmFnZXIsIGNvbXBvbmVudCwgYm91bmRzIH0gPSB0aGlzO1xuXG4gICAgbWFuYWdlci5kaWRVcGRhdGVMYXlvdXQoY29tcG9uZW50LCBib3VuZHMpO1xuXG4gICAgdm0uZW52LmRpZFVwZGF0ZShjb21wb25lbnQsIG1hbmFnZXIpO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQWtCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlCLE9BQU8sSUFBK0IsTUFBTSxvQkFBb0IsQ0FBQztBQUlqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFbkQsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBR2QsT0FBTyxFQUNQLE9BQU8sRUFDUixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLGNBQWMsQ0FBQyxHQUFHLENBQUMsNkJBQXVCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO0lBQ25FLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUE4QixXQUFXLENBQUMsQ0FBQztJQUNqRixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBRXJCLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLG9DQUE4QixFQUFFLEVBQUU7SUFDbkQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNyQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUF1RCxDQUFDO0lBQ2pGLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQThCLFNBQVMsQ0FBQyxDQUFDO0lBQ3hHLElBQUksVUFBVSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMs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T0FBb0MsRUFDcEMsU0FBb0IsRUFDcEIsTUFBYztRQUV0QixLQUFLLEVBQUUsQ0FBQztRQUpBLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBQ3BDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQU5qQixTQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFDM0IsUUFBRyxHQUFRLFlBQVksQ0FBQztJQVEvQixDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQWM7UUFDckIsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AsIE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgQVJHUywgeyBBcmd1bWVudHMsIElBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHluYW1pY1Njb3BlIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IEJvdW5kcyBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENPTlNUQU5UX1RBRyxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsXG4gIFRhZyxcbiAgY29tYmluZSxcbiAgaXNDb25zdFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE1hbmFnZXIsICh2bSwgeyBvcDE6IF9kZWZpbml0aW9uIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24gPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihfZGVmaW5pdGlvbik7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgcmVmZXJlbmNlID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+Pj4oKTtcbiAgbGV0IGNhY2hlID0gaXNDb25zdChyZWZlcmVuY2UpID8gdW5kZWZpbmVkIDogbmV3IFJlZmVyZW5jZUNhY2hlPENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPj4ocmVmZXJlbmNlKTtcbiAgbGV0IGRlZmluaXRpb24gPSBjYWNoZSA/IGNhY2hlLnBlZWsoKSA6IHJlZmVyZW5jZS52YWx1ZSgpO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcblxuICBpZiAoY2FjaGUpIHtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbmludGVyZmFjZSBJbml0aWFsQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IFQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Jbml0aWFsaXplQ29tcG9uZW50U3RhdGUsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG5cbiAgbGV0IG1hbmFnZXIgPSBzdGFjay5wb3AoKTtcbiAgbGV0IGRlZmluaXRpb24gPSBzdGFjay5wb3AoKTtcblxuICBzdGFjay5wdXNoKHsgZGVmaW5pdGlvbiwgbWFuYWdlciwgY29tcG9uZW50OiBudWxsIH0pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQXJncywgKHZtLCB7IG9wMTogcG9zaXRpb25hbCwgb3AyOiBzeW50aGV0aWMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgQVJHUy5zZXR1cChzdGFjaywgcG9zaXRpb25hbCwgISFzeW50aGV0aWMpO1xuICBzdGFjay5wdXNoKEFSR1MpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QcmVwYXJlQXJncywgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmZldGNoVmFsdWU8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcblxuICBsZXQgcHJlcGFyZWRBcmdzID0gbWFuYWdlci5wcmVwYXJlQXJncyhkZWZpbml0aW9uLCBhcmdzKTtcblxuICBpZiAocHJlcGFyZWRBcmdzKSB7XG4gICAgYXJncy5jbGVhcigpO1xuXG4gICAgbGV0IHsgcG9zaXRpb25hbCwgbmFtZWQgfSA9IHByZXBhcmVkQXJncztcblxuICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGk9MDsgaTxwb3NpdGlvbmFsQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChwb3NpdGlvbmFsW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZXMgPSBPYmplY3Qua2V5cyhuYW1lZCk7XG4gICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bmFtZWRDb3VudDsgaSsrKSB7XG4gICAgICBzdGFjay5wdXNoKG5hbWVkW25hbWVzW2ldXSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaChuYW1lcyk7XG4gICAgYXJncy5zZXR1cChzdGFjaywgcG9zaXRpb25hbENvdW50LCB0cnVlKTtcbiAgfVxuXG4gIHN0YWNrLnB1c2goYXJncyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNyZWF0ZUNvbXBvbmVudCwgKHZtLCB7IG9wMTogZmxhZ3MsIG9wMjogX3N0YXRlIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24sIG1hbmFnZXI7XG4gIGxldCBhcmdzID0gdm0uc3RhY2sucG9wPElBcmd1bWVudHM+KCk7XG4gIGxldCBkeW5hbWljU2NvcGUgPSB2bS5keW5hbWljU2NvcGUoKTtcbiAgbGV0IHN0YXRlID0geyBkZWZpbml0aW9uLCBtYW5hZ2VyIH0gPSB2bS5mZXRjaFZhbHVlPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBoYXNEZWZhdWx0QmxvY2sgPSBmbGFncyAmIDBiMDE7XG5cbiAgbGV0IGNvbXBvbmVudCA9IG1hbmFnZXIuY3JlYXRlKHZtLmVudiwgZGVmaW5pdGlvbiwgYXJncywgZHluYW1pY1Njb3BlLCB2bS5nZXRTZWxmKCksICEhaGFzRGVmYXVsdEJsb2NrKTtcbiAgKHN0YXRlIGFzIENvbXBvbmVudFN0YXRlPHR5cGVvZiBjb21wb25lbnQ+KS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlQ29tcG9uZW50T3Bjb2RlKGFyZ3MudGFnLCBkZWZpbml0aW9uLm5hbWUsIGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvciwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IoY29tcG9uZW50KTtcbiAgaWYgKGRlc3RydWN0b3IpIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB7XG4gIHZtLmJlZ2luQ2FjaGVHcm91cCgpO1xuICB2bS5lbGVtZW50cygpLnB1c2hTaW1wbGVCbG9jaygpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50T3BlcmF0aW9ucywgdm0gPT4ge1xuICB2bS5zdGFjay5wdXNoKG5ldyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyh2bS5lbnYpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRGlkQ3JlYXRlRWxlbWVudCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGFjdGlvbiA9ICdEaWRDcmVhdGVFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgbWFuYWdlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdm0uZWxlbWVudHMoKS5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0uZWxlbWVudHMoKS5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRTZWxmLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhdGUgPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLnN0YWNrLnB1c2goc3RhdGUubWFuYWdlci5nZXRTZWxmKHN0YXRlLmNvbXBvbmVudCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRMYXlvdXQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGRlZmluaXRpb24sIGNvbXBvbmVudCB9ID0gdm0uZmV0Y2hWYWx1ZTxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5zdGFjay5wdXNoKG1hbmFnZXIubGF5b3V0Rm9yKGRlZmluaXRpb24sIGNvbXBvbmVudCwgdm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZFJlbmRlckxheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBib3VuZHMgPSB2bS5lbGVtZW50cygpLnBvcEJsb2NrKCk7XG5cbiAgbWFuYWdlci5kaWRSZW5kZXJMYXlvdXQoY29tcG9uZW50LCBib3VuZHMpO1xuXG4gIHZtLmVudi5kaWRDcmVhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcblxuICB2bS51cGRhdGVXaXRoKG5ldyBEaWRVcGRhdGVMYXlvdXRPcGNvZGUobWFuYWdlciwgY29tcG9uZW50LCBib3VuZHMpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWl0Q29tcG9uZW50VHJhbnNhY3Rpb24sIHZtID0+IHZtLmNvbW1pdENhY2hlR3JvdXAoKSk7XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDb21wb25lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtY29tcG9uZW50XCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFnOiBUYWcsXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBwcml2YXRlIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBwcml2YXRlIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgbGV0IGNvbXBvbmVudFRhZyA9IG1hbmFnZXIuZ2V0VGFnKGNvbXBvbmVudCk7XG5cbiAgICBpZiAoY29tcG9uZW50VGFnKSB7XG4gICAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW3RhZywgY29tcG9uZW50VGFnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKF92bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlIH0gPSB0aGlzO1xuXG4gICAgbWFuYWdlci51cGRhdGUoY29tcG9uZW50LCBkeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMubmFtZSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlkVXBkYXRlTGF5b3V0T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLXVwZGF0ZS1sYXlvdXRcIjtcbiAgcHVibGljIHRhZzogVGFnID0gQ09OU1RBTlRfVEFHO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kc1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQsIGJvdW5kcyB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIuZGlkVXBkYXRlTGF5b3V0KGNvbXBvbmVudCwgYm91bmRzKTtcblxuICAgIHZtLmVudi5kaWRVcGRhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcbiAgfVxufVxuIl19

@@ -9,3 +9,3 @@ import { isSafeString, isNode, isString, cautiousInsert, trustingInsert } from '../../upsert';

import { APPEND_OPCODES } from '../../opcodes';
APPEND_OPCODES.add(26 /* DynamicContent */, (vm, { op1: append }) => {
APPEND_OPCODES.add(25 /* DynamicContent */, (vm, { op1: append }) => {
let opcode = vm.constants.getOther(append);

@@ -52,3 +52,3 @@ opcode.evaluate(vm);

evaluate(vm) {
let reference = vm.evalStack.pop();
let reference = vm.stack.pop();
let normalized = this.normalize(reference);

@@ -63,3 +63,3 @@ let value, cache;

}
let stack = vm.stack();
let stack = vm.elements();
let upsert = this.insert(vm.env.getAppendOperations(), stack, value);

@@ -83,12 +83,12 @@ let bounds = new Fragment(upsert.bounds);

if (this.deopted) {
vm.pushEvalFrame(this.start);
vm.goto(this.start);
}
else {
let value = vm.evalStack.pop();
let value = vm.stack.pop();
if (isComponentDefinition(value)) {
this.deopt(vm.env);
vm.pushEvalFrame(this.start);
vm.goto(this.start);
}
else {
vm.evalStack.push(value);
vm.stack.push(value);
super.evaluate(vm);

@@ -347,2 +347,2 @@ }

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBZSxFQUtiLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUVSLGNBQWMsRUFDZCxjQUFjLEVBQ2YsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczRCxPQUFPLEVBQXFDLGNBQWMsRUFBRSxZQUFZLEVBQWMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzSSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQU0sTUFBTSxlQUFlLENBQUM7QUFFbkQsY0FBYyxDQUFDLEdBQUcsQ0FBQyx1QkFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7SUFDeEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFtQyxDQUFDO0lBQzdFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxpQkFBaUIsS0FBYTtJQUM1QixNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUMxRixDQUFDO0FBRUQsTUFBTSw2QkFBNkIsS0FBYTtJQUM5QyxFQUFFLENBQUMsQ0FBQyxP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Q0FBQyxHQUF3QixFQUFFLE1BQWMsRUFBRSxLQUF3QjtRQUNqRixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFVwc2VydCwge1xuICBJbnNlcnRpb24sXG4gIENhdXRpb3VzSW5zZXJ0aW9uLFxuICBUcnVzdGluZ0luc2VydGlvbixcblxuICBpc1NhZmVTdHJpbmcsXG4gIGlzTm9kZSxcbiAgaXNTdHJpbmcsXG5cbiAgY2F1dGlvdXNJbnNlcnQsXG4gIHRydXN0aW5nSW5zZXJ0XG59IGZyb20gJy4uLy4uL3Vwc2VydCc7XG5pbXBvcnQgeyBpc0NvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBET01UcmVlQ29uc3RydWN0aW9uIH0gZnJvbSAnLi4vLi4vZG9tL2hlbHBlcic7XG5pbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgVk0sIFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBUcnlPcGNvZGUgfSBmcm9tICcuLi8uLi92bS91cGRhdGUnO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlLCBSZWZlcmVuY2VDYWNoZSwgVXBkYXRhYmxlVGFnLCBUYWdXcmFwcGVyLCBpc01vZGlmaWVkLCBpc0NvbnN0LCBtYXAgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEN1cnNvciwgY2xlYXIgfSBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCB7IENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0NvbnRlbnQsICh2bSwgeyBvcDE6IGFwcGVuZCB9KSA9PiB7XG4gIGxldCBvcGNvZGUgPSB2bS5jb25zdGFudHMuZ2V0T3RoZXIoYXBwZW5kKSBhcyBBcHBlbmREeW5hbWljT3Bjb2RlPEluc2VydGlvbj47XG4gIG9wY29kZS5ldmFsdWF0ZSh2bSk7XG59KTtcblxuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZTogT3BhcXVlKTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZVsndG9TdHJpbmcnXSAhPT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZTogT3BhcXVlKTogc3RyaW5nIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVUcnVzdGVkVmFsdWUodmFsdWU6IE9wYXF1ZSk6IFRydXN0aW5nSW5zZXJ0aW9uIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9IVE1MKCk7XG4gIH1cbiAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlOiBPcGFxdWUpOiBDYXV0aW91c0luc2VydGlvbiB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpIHx8IGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCB0eXBlIEFwcGVuZER5bmFtaWNPcGNvZGVDb25zdHJ1Y3RvciA9ICB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBlbmREeW5hbWljT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFQ+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlV2l0aCh2bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZTtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZShyZWZlcmVuY2UpO1xuXG4gICAgbGV0IHZhbHVlLCBjYWNoZTtcblxuICAgIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICAgIHZhbHVlID0gbm9ybWFsaXplZC52YWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShub3JtYWxpemVkKTtcbiAgICAgIHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgIH1cblxuICAgIGxldCBzdGFjayA9IHZtLnN0YWNrKCk7XG4gICAgbGV0IHVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIHN0YWNrLCB2YWx1ZSk7XG4gICAgbGV0IGJvdW5kcyA9IG5ldyBGcmFnbWVudCh1cHNlcnQuYm91bmRzKTtcblxuICAgIHN0YWNrLm5ld0JvdW5kcyhib3VuZHMpO1xuXG4gICAgaWYgKGNhY2hlIC8qIGkuZS4gIWlzQ29uc3QocmVmZXJlbmNlKSAqLykge1xuICAgICAgdm0udXBkYXRlV2l0aCh0aGlzLnVwZGF0ZVdpdGgodm0sIHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxUPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBBcHBlbmRPcGNvZGU6IHR5cGVvZiBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSB8IHR5cGVvZiBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcbiAgcHJpdmF0ZSBzdGFydCA9IC0xO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgZGVvcHRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydCA9PT0gLTE7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBpZiAodGhpcy5kZW9wdGVkKSB7XG4gICAgICB2bS5wdXNoRXZhbEZyYW1lKHRoaXMuc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsdWUgPSB2bS5ldmFsU3RhY2sucG9wKCk7XG5cbiAgICAgIGlmKGlzQ29tcG9uZW50RGVmaW5pdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kZW9wdCh2bS5lbnYpO1xuICAgICAgICB2bS5wdXNoRXZhbEZyYW1lKHRoaXMuc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uZXZhbFN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlb3B0KF9lbnY6IEVudmlyb25tZW50KTogbnVtYmVyIHsgLy8gUHVibGljIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBsYXp5IGRlb3B0XG4gICAgLy8gQXQgY29tcGlsZSB0aW1lLCB3ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBhcHBlbmQgY2FsbHNpdGUgbWlnaHQgcmVmZXJcbiAgICAvLyB0byBhIGxvY2FsIHZhcmlhYmxlL3Byb3BlcnR5IGxvb2t1cCB0aGF0IHJlc29sdmVzIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBhdCBydW50aW1lLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgaGF2ZSBlYWdlcmx5IGNvbXBpbGVkIHRoaXMgY2FsbHNpdGUgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICB7eyNpZiAoaXMtY29tcG9uZW50LWRlZmluaXRpb24gZm9vKX19XG4gICAgLy8gICAgIHt7Y29tcG9uZW50IGZvb319XG4gICAgLy8gICB7e2Vsc2V9fVxuICAgIC8vICAgICB7e2Zvb319XG4gICAgLy8gICB7ey9pZn19XG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCBpbiBwcmFjdGljZSwgdGhlcmUgbWlnaHQgYmUgYSBsYXJnZSBhbW91dCBvZiB0aGVzZSBjYWxsc2l0ZXNcbiAgICAvLyBhbmQgbW9zdCBvZiB0aGVtIHdvdWxkIHJlc29sdmUgdG8gYSBzaW1wbGUgdmFsdWUgbG9va3VwLiBUaGVyZWZvcmUsIHdlXG4gICAgLy8gdHJpZWQgdG8gYmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lZCB0aGF0IHRoZSBjYWxsc2l0ZSB3aWxsIHJlc29sdmUgdG9cbiAgICAvLyBhcHBlbmRpbmcgYSBzaW1wbGUgdmFsdWUuXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIHJlYWNoZWQgaGVyZSBiZWNhdXNlIGF0IHJ1bnRpbWUsIHRoZSBndWFyZCBjb25kaXRpb25hbFxuICAgIC8vIGhhdmUgZGV0ZWN0ZWQgdGhhdCB0aGlzIGNhbGxzaXRlIGlzIGluZGVlZCByZWZlcnJpbmcgdG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdC4gU2luY2UgdGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgdHJ1ZSBmb3Igb3RoZXJcbiAgICAvLyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2FsbHNpdGUsIGl0IGlzIG5vdyBhcHByb3BpYXRlIHRvIGRlb3B0IGludG8gdGhlXG4gICAgLy8gZXhwYW5kZWQgdmVyc2lvbiB0aGF0IGhhbmRsZXMgYm90aCBjYXNlcy4gVGhlIGNvbXBpbGF0aW9uIHdvdWxkIGxvb2tcbiAgICAvLyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAgIFB1dFZhbHVlKGV4cHJlc3Npb24pXG4gICAgLy8gICAgICAgICAgICAgICBUZXN0KGlzLWNvbXBvbmVudC1kZWZpbml0aW9uKVxuICAgIC8vICAgICAgICAgICAgICAgRW50ZXIoQkVHSU4sIEVORClcbiAgICAvLyAgIEJFR0lOOiAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIEp1bXBVbmxlc3MoVkFMVUUpXG4gICAgLy8gICAgICAgICAgICAgICBQdXREeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbk9wY29kZVxuICAgIC8vICAgICAgICAgICAgICAgT3BlbkNvbXBvbmVudFxuICAgIC8vICAgICAgICAgICAgICAgQ2xvc2VDb21wb25lbnRcbiAgICAvLyAgICAgICAgICAgICAgIEp1bXAoRU5EKVxuICAgIC8vICAgVkFMVUU6ICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgT3B0aW1pemVkQXBwZW5kXG4gICAgLy8gICBFTkQ6ICAgICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBFeGl0XG4gICAgLy9cbiAgICAvLyBLZWVwIGluIG1pbmQgdGhhdCBldmVuIGlmIHdlICpkb24ndCogcmVhY2ggaGVyZSBhdCBpbml0aWFsIHJlbmRlciB0aW1lLFxuICAgIC8vIGl0IGlzIHN0aWxsIHBvc3NpYmxlIChhbHRob3VnaCBxdWl0ZSByYXJlKSB0aGF0IHRoZSBzaW1wbGUgdmFsdWUgd2VcbiAgICAvLyBlbmNvdW50ZXIgZHVyaW5nIGluaXRpYWwgcmVuZGVyIGNvdWxkIGxhdGVyIGNoYW5nZSBpbnRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBvYmplY3QgYXQgdXBkYXRlIHRpbWUuIFRoYXQgaXMgaGFuZGxlZCBieSB0aGUgXCJsYXp5IGRlb3B0XCJcbiAgICAvLyBjb2RlIG9uIHRoZSB1cGRhdGUgc2lkZSAoc2Nyb2xsIGRvd24gZm9yIHRoZSBuZXh0IGJpZyBibG9jayBvZiBjb21tZW50KS5cblxuICAgIHJldHVybiBudWxsIGFzIGFueTtcbiAgfVxufVxuXG5jbGFzcyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UgZXh0ZW5kcyBDb25kaXRpb25hbFJlZmVyZW5jZSB7XG4gIHN0YXRpYyBjcmVhdGUoaW5uZXI6IFJlZmVyZW5jZTxPcGFxdWU+KTogSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZShpbm5lcik7XG4gIH1cblxuICB0b0Jvb2wodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIFVwZGF0ZU9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPixcbiAgICBwcm90ZWN0ZWQgYm91bmRzOiBGcmFnbWVudCxcbiAgICBwcm90ZWN0ZWQgdXBzZXJ0OiBVcHNlcnRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFQpOiBVcHNlcnQ7XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmNhY2hlLnJldmFsaWRhdGUoKTtcblxuICAgIGlmIChpc01vZGlmaWVkKHZhbHVlKSkge1xuICAgICAgbGV0IHsgYm91bmRzLCB1cHNlcnQgfSA9IHRoaXM7XG4gICAgICBsZXQgeyBkb20gfSA9IHZtO1xuXG4gICAgICBpZighdGhpcy51cHNlcnQudXBkYXRlKGRvbSwgdmFsdWUpKSB7XG4gICAgICAgIGxldCBjdXJzb3IgPSBuZXcgQ3Vyc29yKGJvdW5kcy5wYXJlbnRFbGVtZW50KCksIGNsZWFyKGJvdW5kcykpO1xuICAgICAgICB1cHNlcnQgPSB0aGlzLnVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIGN1cnNvciwgdmFsdWUgYXMgVCk7XG4gICAgICB9XG5cbiAgICAgIGJvdW5kcy51cGRhdGUodXBzZXJ0LmJvdW5kcyk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGRldGFpbHM6IHsgbGFzdFZhbHVlOiBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpIH1cbiAgICB9O1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VD4ge1xuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcbiAgcHJpdmF0ZSBkZW9wdGVkOiBPcHRpb248VHJ5T3Bjb2RlPiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPixcbiAgICBib3VuZHM6IEZyYWdtZW50LFxuICAgIHVwc2VydDogVXBzZXJ0XG4gICkge1xuICAgIHN1cGVyKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKHRoaXMudGFnKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgaWYgKHRoaXMuZGVvcHRlZCkge1xuICAgICAgdm0uZXZhbHVhdGVPcGNvZGUodGhpcy5kZW9wdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5pdGlvbih0aGlzLnJlZmVyZW5jZS52YWx1ZSgpKSkge1xuICAgICAgICB0aGlzLmxhenlEZW9wdCh2bSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsYXp5RGVvcHQoX3ZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgLy8gRHVyaWduIGluaXRpYWwgcmVuZGVyLCB3ZSBrbm93IHRoYXQgdGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBjb250YWluIGFcbiAgICAvLyBjb21wb25lbnQgZGVmaW5pdGlvbiwgc28gd2Ugb3B0aW1pc3RpY2FsbHkgYXNzdW1lZCB0aGF0IHRoaXMgYXBwZW5kXG4gICAgLy8gaXMganVzdCBhIG5vcm1hbCBhcHBlbmQuIEhvd2V2ZXIsIGF0IHVwZGF0ZSB0aW1lLCB3ZSBkaXNjb3ZlcmVkIHRoYXRcbiAgICAvLyB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBpbnRvIGNvbnRhaW5pbmcgYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgc29cbiAgICAvLyB3ZSBuZWVkIHRvIGRvIGEgXCJsYXp5IGRlb3B0XCIsIHNpbXVsYXRpbmcgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlmXG4gICAgLy8gd2UgaGFkIGRlY2lkZWQgdG8gcGVyZm9ybSB0aGUgZGVvcHQgaW4gdGhlIGZpcnN0IHBsYWNlIGR1cmluZyBpbml0aWFsXG4gICAgLy8gcmVuZGVyLlxuICAgIC8vXG4gICAgLy8gTW9yZSBjb25jcmV0ZWx5LCB3ZSB3b3VsZCBoYXZlIGV4cGFuZGVkIHRoZSBjdXJseSBpbnRvIGEgaWYvZWxzZSwgYW5kXG4gICAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgdmFsdWUgaXMgYSBjb21wb25lbnQgZGVmaW5pdGlvbiBvciBub3QsIHdlIHdvdWxkXG4gICAgLy8gaGF2ZSBlbnRlcmVkIGVpdGhlciB0aGUgZHluYW1pYyBjb21wb25lbnQgYnJhbmNoIG9yIHRoZSBzaW1wbGUgdmFsdWVcbiAgICAvLyBicmFuY2guXG4gICAgLy9cbiAgICAvLyBTaW5jZSB3ZSByZW5kZXJlZCBhIHNpbXBsZSB2YWx1ZSBkdXJpbmcgaW5pdGlhbCByZW5kZXIgKGFuZCBhbGwgdGhlXG4gICAgLy8gdXBkYXRlcyB1cCB1bnRpbCB0aGlzIHBvaW50KSwgd2UgbmVlZCB0byBwcmV0ZW5kIHRoYXQgdGhlIHJlc3VsdCBpc1xuICAgIC8vIHByb2R1Y2VkIGJ5IHRoZSBcIlZBTFVFXCIgYnJhbmNoIG9mIHRoZSBkZW9wdGVkIGFwcGVuZCBvcGNvZGU6XG4gICAgLy9cbiAgICAvLyAgIFRyeShCRUdJTiwgRU5EKVxuICAgIC8vICAgICBBc3NlcnQoSXNDb21wb25lbnREZWZpbml0aW9uLCBleHBlY3RlZD1mYWxzZSlcbiAgICAvLyAgICAgT3B0aW1pemVkVXBkYXRlXG4gICAgLy9cbiAgICAvLyBJbiB0aGlzIGNhc2UsIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgZnJvbSBiZWluZyBhIHNpbXBsZVxuICAgIC8vIHZhbHVlIGludG8gYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlzIHRoYXRcbiAgICAvLyB0aGUgYXNzZXJ0IHdvdWxkIHRocm93LCBjYXVzaW5nIHRoZSBUcnkgb3Bjb2RlIHRvIHRlYXJkb3duIHRoZSBib3VuZHNcbiAgICAvLyBhbmQgcmVydW4gdGhlIG9yaWdpbmFsIGFwcGVuZCBvcGNvZGUuXG4gICAgLy9cbiAgICAvLyBTaW5jZSB0aGUgVHJ5IG9wY29kZSB3b3VsZCBoYXZlIG51a2VkIHRoZSB1cGRhdGluZyBvcGNvZGVzIGFueXdheSwgd2VcbiAgICAvLyB3b3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHNpbXVsYXRpbmcgdGhvc2UuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRvXG4gICAgLy8gZXhlY3V0ZSB0aGUgVHJ5IG9wY29kZSBhbmQgaW1tZWRpYXRlbHkgdGhyb3cuXG5cbiAgICByZXR1cm4gbnVsbCBhcyBhbnk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGRlb3B0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVvcHRlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3VpZCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVvcHRlZDogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IFtkZW9wdGVkLnRvSlNPTigpXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmREeW5hbWljT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIF9yZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8Q2F1dGlvdXNJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8Q2F1dGlvdXNJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZShyZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ2d1YXJkZWQtY2F1dGlvdXMtdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC10cnVzdGluZy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgX3JlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUcnVzdGluZ0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC10cnVzdGluZy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3VhcmRlZFRydXN0aW5nQXBwZW5kT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZEFwcGVuZE9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ2d1YXJkZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgQXBwZW5kT3Bjb2RlID0gT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShyZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ3RydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBZSxFQUtiLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUVSLGNBQWMsRUFDZCxjQUFjLEVBQ2YsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczRCxPQUFPLEVBQXFDLGNBQWMsRUFBRSxZQUFZLEVBQWMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUzSSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQU0sTUFBTSxlQUFlLENBQUM7QUFFbkQsY0FBYyxDQUFDLEdBQUcsQ0FBQyx1QkFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7SUFDeEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFtQyxDQUFDO0lBQzdFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxpQkFBaUIsS0FBYTtJQUM1QixNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUMxRixDQUFDO0FBRUQsTUFBTSw2QkFBNkIsS0FBYTtJQUM5QyxFQUFFLENBQUMsQ0FBQyxP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Q0FBQyxHQUF3QixFQUFFLE1BQWMsRUFBRSxLQUF3QjtRQUNqRixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFVwc2VydCwge1xuICBJbnNlcnRpb24sXG4gIENhdXRpb3VzSW5zZXJ0aW9uLFxuICBUcnVzdGluZ0luc2VydGlvbixcblxuICBpc1NhZmVTdHJpbmcsXG4gIGlzTm9kZSxcbiAgaXNTdHJpbmcsXG5cbiAgY2F1dGlvdXNJbnNlcnQsXG4gIHRydXN0aW5nSW5zZXJ0XG59IGZyb20gJy4uLy4uL3Vwc2VydCc7XG5pbXBvcnQgeyBpc0NvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBET01UcmVlQ29uc3RydWN0aW9uIH0gZnJvbSAnLi4vLi4vZG9tL2hlbHBlcic7XG5pbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgVk0sIFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBUcnlPcGNvZGUgfSBmcm9tICcuLi8uLi92bS91cGRhdGUnO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlLCBSZWZlcmVuY2VDYWNoZSwgVXBkYXRhYmxlVGFnLCBUYWdXcmFwcGVyLCBpc01vZGlmaWVkLCBpc0NvbnN0LCBtYXAgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IEN1cnNvciwgY2xlYXIgfSBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCB7IENvbmRpdGlvbmFsUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0NvbnRlbnQsICh2bSwgeyBvcDE6IGFwcGVuZCB9KSA9PiB7XG4gIGxldCBvcGNvZGUgPSB2bS5jb25zdGFudHMuZ2V0T3RoZXIoYXBwZW5kKSBhcyBBcHBlbmREeW5hbWljT3Bjb2RlPEluc2VydGlvbj47XG4gIG9wY29kZS5ldmFsdWF0ZSh2bSk7XG59KTtcblxuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZTogT3BhcXVlKTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZVsndG9TdHJpbmcnXSAhPT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRWYWx1ZSh2YWx1ZTogT3BhcXVlKTogc3RyaW5nIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVUcnVzdGVkVmFsdWUodmFsdWU6IE9wYXF1ZSk6IFRydXN0aW5nSW5zZXJ0aW9uIHtcbiAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU2FmZVN0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9IVE1MKCk7XG4gIH1cbiAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlOiBPcGFxdWUpOiBDYXV0aW91c0luc2VydGlvbiB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpIHx8IGlzTm9kZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCB0eXBlIEFwcGVuZER5bmFtaWNPcGNvZGVDb25zdHJ1Y3RvciA9ICB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBlbmREeW5hbWljT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFQ+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdXBkYXRlV2l0aCh2bTogVk0sIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZTtcblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcbiAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplKHJlZmVyZW5jZSk7XG5cbiAgICBsZXQgdmFsdWUsIGNhY2hlO1xuXG4gICAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgICAgdmFsdWUgPSBub3JtYWxpemVkLnZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5vcm1hbGl6ZWQpO1xuICAgICAgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YWNrID0gdm0uZWxlbWVudHMoKTtcbiAgICBsZXQgdXBzZXJ0ID0gdGhpcy5pbnNlcnQodm0uZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSwgc3RhY2ssIHZhbHVlKTtcbiAgICBsZXQgYm91bmRzID0gbmV3IEZyYWdtZW50KHVwc2VydC5ib3VuZHMpO1xuXG4gICAgc3RhY2submV3Qm91bmRzKGJvdW5kcyk7XG5cbiAgICBpZiAoY2FjaGUgLyogaS5lLiAhaXNDb25zdChyZWZlcmVuY2UpICovKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKHRoaXMudXBkYXRlV2l0aCh2bSwgcmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBBcHBlbmREeW5hbWljT3Bjb2RlPFQ+IHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IEFwcGVuZE9wY29kZTogdHlwZW9mIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIHwgdHlwZW9mIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuICBwcml2YXRlIHN0YXJ0ID0gLTE7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBkZW9wdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0ID09PSAtMTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLmdvdG8odGhpcy5zdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB2YWx1ZSA9IHZtLnN0YWNrLnBvcCgpO1xuXG4gICAgICBpZihpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGVvcHQodm0uZW52KTtcbiAgICAgICAgdm0uZ290byh0aGlzLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZtLnN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlb3B0KF9lbnY6IEVudmlyb25tZW50KTogbnVtYmVyIHsgLy8gUHVibGljIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBsYXp5IGRlb3B0XG4gICAgLy8gQXQgY29tcGlsZSB0aW1lLCB3ZSBkZXRlcm1pbmVkIHRoYXQgdGhpcyBhcHBlbmQgY2FsbHNpdGUgbWlnaHQgcmVmZXJcbiAgICAvLyB0byBhIGxvY2FsIHZhcmlhYmxlL3Byb3BlcnR5IGxvb2t1cCB0aGF0IHJlc29sdmVzIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBhdCBydW50aW1lLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgaGF2ZSBlYWdlcmx5IGNvbXBpbGVkIHRoaXMgY2FsbHNpdGUgaW50byBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICB7eyNpZiAoaXMtY29tcG9uZW50LWRlZmluaXRpb24gZm9vKX19XG4gICAgLy8gICAgIHt7Y29tcG9uZW50IGZvb319XG4gICAgLy8gICB7e2Vsc2V9fVxuICAgIC8vICAgICB7e2Zvb319XG4gICAgLy8gICB7ey9pZn19XG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCBpbiBwcmFjdGljZSwgdGhlcmUgbWlnaHQgYmUgYSBsYXJnZSBhbW91dCBvZiB0aGVzZSBjYWxsc2l0ZXNcbiAgICAvLyBhbmQgbW9zdCBvZiB0aGVtIHdvdWxkIHJlc29sdmUgdG8gYSBzaW1wbGUgdmFsdWUgbG9va3VwLiBUaGVyZWZvcmUsIHdlXG4gICAgLy8gdHJpZWQgdG8gYmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lZCB0aGF0IHRoZSBjYWxsc2l0ZSB3aWxsIHJlc29sdmUgdG9cbiAgICAvLyBhcHBlbmRpbmcgYSBzaW1wbGUgdmFsdWUuXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIHJlYWNoZWQgaGVyZSBiZWNhdXNlIGF0IHJ1bnRpbWUsIHRoZSBndWFyZCBjb25kaXRpb25hbFxuICAgIC8vIGhhdmUgZGV0ZWN0ZWQgdGhhdCB0aGlzIGNhbGxzaXRlIGlzIGluZGVlZCByZWZlcnJpbmcgdG8gYSBjb21wb25lbnRcbiAgICAvLyBkZWZpbml0aW9uIG9iamVjdC4gU2luY2UgdGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgdHJ1ZSBmb3Igb3RoZXJcbiAgICAvLyBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2FsbHNpdGUsIGl0IGlzIG5vdyBhcHByb3BpYXRlIHRvIGRlb3B0IGludG8gdGhlXG4gICAgLy8gZXhwYW5kZWQgdmVyc2lvbiB0aGF0IGhhbmRsZXMgYm90aCBjYXNlcy4gVGhlIGNvbXBpbGF0aW9uIHdvdWxkIGxvb2tcbiAgICAvLyBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAgIFB1dFZhbHVlKGV4cHJlc3Npb24pXG4gICAgLy8gICAgICAgICAgICAgICBUZXN0KGlzLWNvbXBvbmVudC1kZWZpbml0aW9uKVxuICAgIC8vICAgICAgICAgICAgICAgRW50ZXIoQkVHSU4sIEVORClcbiAgICAvLyAgIEJFR0lOOiAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIEp1bXBVbmxlc3MoVkFMVUUpXG4gICAgLy8gICAgICAgICAgICAgICBQdXREeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbk9wY29kZVxuICAgIC8vICAgICAgICAgICAgICAgT3BlbkNvbXBvbmVudFxuICAgIC8vICAgICAgICAgICAgICAgQ2xvc2VDb21wb25lbnRcbiAgICAvLyAgICAgICAgICAgICAgIEp1bXAoRU5EKVxuICAgIC8vICAgVkFMVUU6ICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgT3B0aW1pemVkQXBwZW5kXG4gICAgLy8gICBFTkQ6ICAgICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBFeGl0XG4gICAgLy9cbiAgICAvLyBLZWVwIGluIG1pbmQgdGhhdCBldmVuIGlmIHdlICpkb24ndCogcmVhY2ggaGVyZSBhdCBpbml0aWFsIHJlbmRlciB0aW1lLFxuICAgIC8vIGl0IGlzIHN0aWxsIHBvc3NpYmxlIChhbHRob3VnaCBxdWl0ZSByYXJlKSB0aGF0IHRoZSBzaW1wbGUgdmFsdWUgd2VcbiAgICAvLyBlbmNvdW50ZXIgZHVyaW5nIGluaXRpYWwgcmVuZGVyIGNvdWxkIGxhdGVyIGNoYW5nZSBpbnRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBvYmplY3QgYXQgdXBkYXRlIHRpbWUuIFRoYXQgaXMgaGFuZGxlZCBieSB0aGUgXCJsYXp5IGRlb3B0XCJcbiAgICAvLyBjb2RlIG9uIHRoZSB1cGRhdGUgc2lkZSAoc2Nyb2xsIGRvd24gZm9yIHRoZSBuZXh0IGJpZyBibG9jayBvZiBjb21tZW50KS5cblxuICAgIHJldHVybiBudWxsIGFzIGFueTtcbiAgfVxufVxuXG5jbGFzcyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UgZXh0ZW5kcyBDb25kaXRpb25hbFJlZmVyZW5jZSB7XG4gIHN0YXRpYyBjcmVhdGUoaW5uZXI6IFJlZmVyZW5jZTxPcGFxdWU+KTogSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZShpbm5lcik7XG4gIH1cblxuICB0b0Jvb2wodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIFVwZGF0ZU9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPixcbiAgICBwcm90ZWN0ZWQgYm91bmRzOiBGcmFnbWVudCxcbiAgICBwcm90ZWN0ZWQgdXBzZXJ0OiBVcHNlcnRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFQpOiBVcHNlcnQ7XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmNhY2hlLnJldmFsaWRhdGUoKTtcblxuICAgIGlmIChpc01vZGlmaWVkKHZhbHVlKSkge1xuICAgICAgbGV0IHsgYm91bmRzLCB1cHNlcnQgfSA9IHRoaXM7XG4gICAgICBsZXQgeyBkb20gfSA9IHZtO1xuXG4gICAgICBpZighdGhpcy51cHNlcnQudXBkYXRlKGRvbSwgdmFsdWUpKSB7XG4gICAgICAgIGxldCBjdXJzb3IgPSBuZXcgQ3Vyc29yKGJvdW5kcy5wYXJlbnRFbGVtZW50KCksIGNsZWFyKGJvdW5kcykpO1xuICAgICAgICB1cHNlcnQgPSB0aGlzLnVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIGN1cnNvciwgdmFsdWUgYXMgVCk7XG4gICAgICB9XG5cbiAgICAgIGJvdW5kcy51cGRhdGUodXBzZXJ0LmJvdW5kcyk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGRldGFpbHM6IHsgbGFzdFZhbHVlOiBKU09OLnN0cmluZ2lmeShjYWNoZS5wZWVrKCkpIH1cbiAgICB9O1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VD4ge1xuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcbiAgcHJpdmF0ZSBkZW9wdGVkOiBPcHRpb248VHJ5T3Bjb2RlPiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUPixcbiAgICBib3VuZHM6IEZyYWdtZW50LFxuICAgIHVwc2VydDogVXBzZXJ0XG4gICkge1xuICAgIHN1cGVyKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKHRoaXMudGFnKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgaWYgKHRoaXMuZGVvcHRlZCkge1xuICAgICAgdm0uZXZhbHVhdGVPcGNvZGUodGhpcy5kZW9wdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzQ29tcG9uZW50RGVmaW5pdGlvbih0aGlzLnJlZmVyZW5jZS52YWx1ZSgpKSkge1xuICAgICAgICB0aGlzLmxhenlEZW9wdCh2bSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsYXp5RGVvcHQoX3ZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgLy8gRHVyaWduIGluaXRpYWwgcmVuZGVyLCB3ZSBrbm93IHRoYXQgdGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBjb250YWluIGFcbiAgICAvLyBjb21wb25lbnQgZGVmaW5pdGlvbiwgc28gd2Ugb3B0aW1pc3RpY2FsbHkgYXNzdW1lZCB0aGF0IHRoaXMgYXBwZW5kXG4gICAgLy8gaXMganVzdCBhIG5vcm1hbCBhcHBlbmQuIEhvd2V2ZXIsIGF0IHVwZGF0ZSB0aW1lLCB3ZSBkaXNjb3ZlcmVkIHRoYXRcbiAgICAvLyB0aGUgcmVmZXJlbmNlIGhhcyBzd2l0Y2hlZCBpbnRvIGNvbnRhaW5pbmcgYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgc29cbiAgICAvLyB3ZSBuZWVkIHRvIGRvIGEgXCJsYXp5IGRlb3B0XCIsIHNpbXVsYXRpbmcgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlmXG4gICAgLy8gd2UgaGFkIGRlY2lkZWQgdG8gcGVyZm9ybSB0aGUgZGVvcHQgaW4gdGhlIGZpcnN0IHBsYWNlIGR1cmluZyBpbml0aWFsXG4gICAgLy8gcmVuZGVyLlxuICAgIC8vXG4gICAgLy8gTW9yZSBjb25jcmV0ZWx5LCB3ZSB3b3VsZCBoYXZlIGV4cGFuZGVkIHRoZSBjdXJseSBpbnRvIGEgaWYvZWxzZSwgYW5kXG4gICAgLy8gYmFzZWQgb24gd2hldGhlciB0aGUgdmFsdWUgaXMgYSBjb21wb25lbnQgZGVmaW5pdGlvbiBvciBub3QsIHdlIHdvdWxkXG4gICAgLy8gaGF2ZSBlbnRlcmVkIGVpdGhlciB0aGUgZHluYW1pYyBjb21wb25lbnQgYnJhbmNoIG9yIHRoZSBzaW1wbGUgdmFsdWVcbiAgICAvLyBicmFuY2guXG4gICAgLy9cbiAgICAvLyBTaW5jZSB3ZSByZW5kZXJlZCBhIHNpbXBsZSB2YWx1ZSBkdXJpbmcgaW5pdGlhbCByZW5kZXIgKGFuZCBhbGwgdGhlXG4gICAgLy8gdXBkYXRlcyB1cCB1bnRpbCB0aGlzIHBvaW50KSwgd2UgbmVlZCB0byBwcmV0ZW5kIHRoYXQgdGhlIHJlc3VsdCBpc1xuICAgIC8vIHByb2R1Y2VkIGJ5IHRoZSBcIlZBTFVFXCIgYnJhbmNoIG9mIHRoZSBkZW9wdGVkIGFwcGVuZCBvcGNvZGU6XG4gICAgLy9cbiAgICAvLyAgIFRyeShCRUdJTiwgRU5EKVxuICAgIC8vICAgICBBc3NlcnQoSXNDb21wb25lbnREZWZpbml0aW9uLCBleHBlY3RlZD1mYWxzZSlcbiAgICAvLyAgICAgT3B0aW1pemVkVXBkYXRlXG4gICAgLy9cbiAgICAvLyBJbiB0aGlzIGNhc2UsIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgZnJvbSBiZWluZyBhIHNpbXBsZVxuICAgIC8vIHZhbHVlIGludG8gYSBjb21wb25lbnQgZGVmaW5pdGlvbiwgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGlzIHRoYXRcbiAgICAvLyB0aGUgYXNzZXJ0IHdvdWxkIHRocm93LCBjYXVzaW5nIHRoZSBUcnkgb3Bjb2RlIHRvIHRlYXJkb3duIHRoZSBib3VuZHNcbiAgICAvLyBhbmQgcmVydW4gdGhlIG9yaWdpbmFsIGFwcGVuZCBvcGNvZGUuXG4gICAgLy9cbiAgICAvLyBTaW5jZSB0aGUgVHJ5IG9wY29kZSB3b3VsZCBoYXZlIG51a2VkIHRoZSB1cGRhdGluZyBvcGNvZGVzIGFueXdheSwgd2VcbiAgICAvLyB3b3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHNpbXVsYXRpbmcgdGhvc2UuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRvXG4gICAgLy8gZXhlY3V0ZSB0aGUgVHJ5IG9wY29kZSBhbmQgaW1tZWRpYXRlbHkgdGhyb3cuXG5cbiAgICByZXR1cm4gbnVsbCBhcyBhbnk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQ6IGd1aWQsIHR5cGUsIGRlb3B0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVvcHRlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ3VpZCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVvcHRlZDogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IFtkZW9wdGVkLnRvSlNPTigpXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBBcHBlbmREeW5hbWljT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IENhdXRpb3VzSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gY2F1dGlvdXNJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIF9yZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8Q2F1dGlvdXNJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtY2F1dGlvdXMtdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRDYXV0aW91c0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8Q2F1dGlvdXNJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZShyZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgR3VhcmRlZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ2d1YXJkZWQtY2F1dGlvdXMtdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC10cnVzdGluZy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgX3JlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxUcnVzdGluZ0luc2VydGlvbj4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGUge1xuICAgIHJldHVybiBuZXcgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUoY2FjaGUsIGJvdW5kcywgdXBzZXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIFVwZGF0ZU9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC10cnVzdGluZy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3VhcmRlZFRydXN0aW5nQXBwZW5kT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZEFwcGVuZE9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ2d1YXJkZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgQXBwZW5kT3Bjb2RlID0gT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG5cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZShyZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+KTogUmVmZXJlbmNlPFRydXN0aW5nSW5zZXJ0aW9uPiB7XG4gICAgcmV0dXJuIG1hcChyZWZlcmVuY2UsIG5vcm1hbGl6ZVRydXN0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZShyZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgR3VhcmRlZFRydXN0aW5nVXBkYXRlT3Bjb2RlIGV4dGVuZHMgR3VhcmRlZFVwZGF0ZU9wY29kZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICB0eXBlID0gJ3RydXN0aW5nLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG4iXX0=

@@ -51,3 +51,3 @@ import { APPEND_OPCODES } from '../../opcodes';

}
APPEND_OPCODES.add(72 /* Debugger */, (vm, { op1: _symbols, op2: _evalInfo }) => {
APPEND_OPCODES.add(71 /* Debugger */, (vm, { op1: _symbols, op2: _evalInfo }) => {
let symbols = vm.constants.getOther(_symbols);

@@ -54,0 +54,0 @@ let evalInfo = vm.constants.getArray(_evalInfo);

@@ -7,24 +7,24 @@ import { UpdatingOpcode } from '../../opcodes';

import { APPEND_OPCODES } from '../../opcodes';
APPEND_OPCODES.add(24 /* Text */, (vm, { op1: text }) => {
vm.stack().appendText(vm.constants.getString(text));
APPEND_OPCODES.add(23 /* Text */, (vm, { op1: text }) => {
vm.elements().appendText(vm.constants.getString(text));
});
APPEND_OPCODES.add(25 /* Comment */, (vm, { op1: text }) => {
vm.stack().appendComment(vm.constants.getString(text));
APPEND_OPCODES.add(24 /* Comment */, (vm, { op1: text }) => {
vm.elements().appendComment(vm.constants.getString(text));
});
APPEND_OPCODES.add(27 /* OpenElement */, (vm, { op1: tag }) => {
vm.stack().openElement(vm.constants.getString(tag));
APPEND_OPCODES.add(26 /* OpenElement */, (vm, { op1: tag }) => {
vm.elements().openElement(vm.constants.getString(tag));
});
APPEND_OPCODES.add(28 /* OpenElementWithOperations */, (vm, { op1: tag }) => {
APPEND_OPCODES.add(27 /* OpenElementWithOperations */, (vm, { op1: tag }) => {
let tagName = vm.constants.getString(tag);
let operations = vm.evalStack.pop();
vm.stack().openElement(tagName, operations);
let operations = vm.stack.pop();
vm.elements().openElement(tagName, operations);
});
APPEND_OPCODES.add(29 /* OpenDynamicElement */, vm => {
let operations = vm.evalStack.pop();
let tagName = vm.evalStack.pop().value();
vm.stack().openElement(tagName, operations);
APPEND_OPCODES.add(28 /* OpenDynamicElement */, vm => {
let operations = vm.stack.pop();
let tagName = vm.stack.pop().value();
vm.elements().openElement(tagName, operations);
});
APPEND_OPCODES.add(36 /* PushRemoteElement */, vm => {
let elementRef = vm.evalStack.pop();
let nextSiblingRef = vm.evalStack.pop();
APPEND_OPCODES.add(35 /* PushRemoteElement */, vm => {
let elementRef = vm.stack.pop();
let nextSiblingRef = vm.stack.pop();
let element;

@@ -48,5 +48,5 @@ let nextSibling;

}
vm.stack().pushRemoteElement(element, nextSibling);
vm.elements().pushRemoteElement(element, nextSibling);
});
APPEND_OPCODES.add(37 /* PopRemoteElement */, vm => vm.stack().popRemoteElement());
APPEND_OPCODES.add(36 /* PopRemoteElement */, vm => vm.elements().popRemoteElement());
class ClassList {

@@ -235,4 +235,4 @@ constructor() {

}
APPEND_OPCODES.add(33 /* FlushElement */, vm => {
let stack = vm.stack();
APPEND_OPCODES.add(32 /* FlushElement */, vm => {
let stack = vm.elements();
let action = 'FlushElementOpcode#evaluate';

@@ -242,4 +242,4 @@ stack.expectOperations(action).flush(stack.expectConstructing(action), vm);

});
APPEND_OPCODES.add(34 /* CloseElement */, vm => vm.stack().closeElement());
APPEND_OPCODES.add(30 /* StaticAttr */, (vm, { op1: _name, op2: _value, op3: _namespace }) => {
APPEND_OPCODES.add(33 /* CloseElement */, vm => vm.elements().closeElement());
APPEND_OPCODES.add(29 /* StaticAttr */, (vm, { op1: _name, op2: _value, op3: _namespace }) => {
let name = vm.constants.getString(_name);

@@ -249,14 +249,14 @@ let value = vm.constants.getString(_value);

let namespace = vm.constants.getString(_namespace);
vm.stack().setStaticAttributeNS(namespace, name, value);
vm.elements().setStaticAttributeNS(namespace, name, value);
}
else {
vm.stack().setStaticAttribute(name, value);
vm.elements().setStaticAttribute(name, value);
}
});
APPEND_OPCODES.add(35 /* Modifier */, (vm, { op1: _manager }) => {
APPEND_OPCODES.add(34 /* Modifier */, (vm, { op1: _manager }) => {
let manager = vm.constants.getOther(_manager);
let stack = vm.evalStack;
let stack = vm.stack;
let args = stack.pop();
let tag = args.tag;
let { constructing: element, updateOperations } = vm.stack();
let { constructing: element, updateOperations } = vm.elements();
let dynamicScope = vm.dynamicScope();

@@ -363,12 +363,12 @@ let modifier = manager.create(element, args, dynamicScope, updateOperations);

}
APPEND_OPCODES.add(32 /* DynamicAttrNS */, (vm, { op1: _name, op2: _namespace, op3: trusting }) => {
APPEND_OPCODES.add(31 /* DynamicAttrNS */, (vm, { op1: _name, op2: _namespace, op3: trusting }) => {
let name = vm.constants.getString(_name);
let namespace = vm.constants.getString(_namespace);
let reference = vm.evalStack.pop();
vm.stack().setDynamicAttributeNS(namespace, name, reference, !!trusting);
let reference = vm.stack.pop();
vm.elements().setDynamicAttributeNS(namespace, name, reference, !!trusting);
});
APPEND_OPCODES.add(31 /* DynamicAttr */, (vm, { op1: _name, op2: trusting }) => {
APPEND_OPCODES.add(30 /* DynamicAttr */, (vm, { op1: _name, op2: trusting }) => {
let name = vm.constants.getString(_name);
let reference = vm.evalStack.pop();
vm.stack().setDynamicAttribute(name, reference, !!trusting);
let reference = vm.stack.pop();
vm.elements().setDynamicAttribute(name, reference, !!trusting);
});

@@ -394,2 +394,2 @@ export class PatchElementOpcode extends UpdatingOpcode {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0QsT0FBTyxFQUErQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFDTCxlQUFlLEVBR2YsY0FBYyxFQUlkLGFBQWEsRUFDYixPQUFPLElBQUksZ0JBQWdCLEVBQzNCLFVBQVUsRUFDWCxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFekQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0lBQzVDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUMsQ0FBQztBQUVILGNBQWMsQ0FBQyxHQUFHLENBQUMsZ0JBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7SUFDL0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNsRCxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsV0FB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dEMsTUFBTSxDQUFDO1lBQ0wsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJO1lBQ0osT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUU7U0FDNUIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IEFyZ3VtZW50cyB9IGZyb20gJy4uLy4uL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRklYX1JFSUZJQ0FUSU9OIH0gZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBGSVhNRSwgT3B0aW9uLCBPcGFxdWUsIERpY3QsIHVud3JhcCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBDYWNoZWRSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZSxcbiAgVmVyc2lvbmVkUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVGFnLFxuICBSZXZpc2lvbixcbiAgUGF0aFJlZmVyZW5jZSxcbiAgY29tYmluZVRhZ2dlZCxcbiAgaXNDb25zdCBhcyBpc0NvbnN0UmVmZXJlbmNlLFxuICBpc01vZGlmaWVkXG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBNb2RpZmllck1hbmFnZXIgfSBmcm9tICcuLi8uLi9tb2RpZmllci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5VTExfUkVGRVJFTkNFLCBQcmltaXRpdmVSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IEF0dHJpYnV0ZU1hbmFnZXIgfSBmcm9tICcuLi8uLi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcbmltcG9ydCB7IEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGV4dCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLnN0YWNrKCkuYXBwZW5kVGV4dCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWVudCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLnN0YWNrKCkuYXBwZW5kQ29tbWVudCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnQsICh2bSwgeyBvcDE6IHRhZyB9KSA9PiB7XG4gIHZtLnN0YWNrKCkub3BlbkVsZW1lbnQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0YWcpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucywgKHZtLCB7IG9wMTogdGFnIH0pID0+IHtcbiAgbGV0IHRhZ05hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRhZyk7XG4gIGxldCBvcGVyYXRpb25zID0gdm0uZXZhbFN0YWNrLnBvcDxFbGVtZW50T3BlcmF0aW9ucz4oKTtcbiAgdm0uc3RhY2soKS5vcGVuRWxlbWVudCh0YWdOYW1lLCBvcGVyYXRpb25zKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkR5bmFtaWNFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBvcGVyYXRpb25zID0gdm0uZXZhbFN0YWNrLnBvcDxFbGVtZW50T3BlcmF0aW9ucz4oKTtcbiAgbGV0IHRhZ05hbWUgPSB2bS5ldmFsU3RhY2sucG9wPFJlZmVyZW5jZTxzdHJpbmc+PigpLnZhbHVlKCk7XG4gIHZtLnN0YWNrKCkub3BlbkVsZW1lbnQodGFnTmFtZSwgb3BlcmF0aW9ucyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hSZW1vdGVFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBlbGVtZW50UmVmID0gdm0uZXZhbFN0YWNrLnBvcDxSZWZlcmVuY2U8U2ltcGxlLkVsZW1lbnQ+PigpO1xuICBsZXQgbmV4dFNpYmxpbmdSZWYgPSB2bS5ldmFsU3RhY2sucG9wPFJlZmVyZW5jZTxPcHRpb248U2ltcGxlLk5vZGU+Pj4oKTtcblxuICBsZXQgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQ7XG4gIGxldCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcblxuICBpZiAoaXNDb25zdFJlZmVyZW5jZShlbGVtZW50UmVmKSkge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50UmVmLnZhbHVlKCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKGVsZW1lbnRSZWYpO1xuICAgIGVsZW1lbnQgPSBjYWNoZS5wZWVrKCk7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cblxuICBpZiAoaXNDb25zdFJlZmVyZW5jZShuZXh0U2libGluZ1JlZikpIHtcbiAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nUmVmLnZhbHVlKCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5leHRTaWJsaW5nUmVmKTtcbiAgICBuZXh0U2libGluZyA9IGNhY2hlLnBlZWsoKTtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxuXG4gIHZtLnN0YWNrKCkucHVzaFJlbW90ZUVsZW1lbnQoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3BSZW1vdGVFbGVtZW50LCB2bSA9PiB2bS5zdGFjaygpLnBvcFJlbW90ZUVsZW1lbnQoKSk7XG5cbmNsYXNzIENsYXNzTGlzdCB7XG4gIHByaXZhdGUgbGlzdDogT3B0aW9uPFJlZmVyZW5jZTxzdHJpbmc+W10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0NvbnN0ID0gdHJ1ZTtcblxuICBhcHBlbmQocmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGxpc3QsIGlzQ29uc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAobGlzdCA9PT0gbnVsbCkgbGlzdCA9IHRoaXMubGlzdCA9IFtdO1xuXG4gICAgbGlzdC5wdXNoKHJlZmVyZW5jZSk7XG4gICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdCAmJiBpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG4gIH1cblxuICB0b1JlZmVyZW5jZSgpOiBSZWZlcmVuY2U8T3B0aW9uPHN0cmluZz4+IHtcbiAgICBsZXQgeyBsaXN0LCBpc0NvbnN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFsaXN0KSByZXR1cm4gTlVMTF9SRUZFUkVOQ0U7XG5cbiAgICBpZiAoaXNDb25zdCkgcmV0dXJuIFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodG9DbGFzc05hbWUobGlzdCkpO1xuXG4gICAgcmV0dXJuIG5ldyBDbGFzc0xpc3RSZWZlcmVuY2UobGlzdCk7XG4gIH1cblxufVxuXG5jbGFzcyBDbGFzc0xpc3RSZWZlcmVuY2UgZXh0ZW5kcyBDYWNoZWRSZWZlcmVuY2U8T3B0aW9uPHN0cmluZz4+IHtcbiAgcHVibGljIHRhZzogVGFnO1xuICBwcml2YXRlIGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmVUYWdnZWQobGlzdCk7XG4gICAgdGhpcy5saXN0ID0gbGlzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlKCk6IE9wdGlvbjxzdHJpbmc+IHtcbiAgICByZXR1cm4gdG9DbGFzc05hbWUodGhpcy5saXN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0NsYXNzTmFtZShsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdKTogT3B0aW9uPHN0cmluZz4ge1xuICBsZXQgcmV0OiBPcGFxdWVbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGxldCB2YWx1ZTogRklYTUU8T3BhcXVlLCAndXNlIE9wYXF1ZSBhbmQgbm9ybWFsaXplJz4gPSBsaXN0W2ldLnZhbHVlKCk7XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXQucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gKHJldC5sZW5ndGggPT09IDApID8gbnVsbCA6IHJldC5qb2luKCcgJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVFbGVtZW50T3BlcmF0aW9ucyBpbXBsZW1lbnRzIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBPcHRpb248VXBkYXRpbmdPcGNvZGVbXT4gPSBudWxsO1xuICBwcml2YXRlIGNsYXNzTGlzdDogT3B0aW9uPENsYXNzTGlzdD4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKHJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IFNpbXBsZS5OYW1lc3BhY2UsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICAgIGxldCBuc0F0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSwgbmFtZXNwYWNlKTtcblxuICAgIHRoaXMuYWRkQXR0cmlidXRlKG5zQXR0cmlidXRlKTtcbiAgfVxuXG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pIHtcbiAgICBsZXQgeyBlbnYgfSA9IHZtO1xuICAgIGxldCB7IG9wY29kZXMsIGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBvcGNvZGVzICYmIGkgPCBvcGNvZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKG9wY29kZXNbaV0pO1xuICAgIH1cblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgJ2NsYXNzJywgY2xhc3NMaXN0LnRvUmVmZXJlbmNlKCkpO1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMgPSBudWxsO1xuICAgIHRoaXMuY2xhc3NMaXN0ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MocmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGlmICghY2xhc3NMaXN0KSB7XG4gICAgICBjbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCA9IG5ldyBDbGFzc0xpc3QoKTtcbiAgICB9XG5cbiAgICBjbGFzc0xpc3QuYXBwZW5kKHJlZmVyZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSkge1xuICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2godGhpcy5lbnYpO1xuXG4gICAgaWYgKG9wY29kZSkge1xuICAgICAgbGV0IHsgb3Bjb2RlcyB9ID0gdGhpcztcblxuICAgICAgaWYgKCFvcGNvZGVzKSB7XG4gICAgICAgIG9wY29kZXMgPSB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICAgIH1cblxuICAgICAgb3Bjb2Rlcy5wdXNoKG9wY29kZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyBpbXBsZW1lbnRzIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgcHJpdmF0ZSBhdHRyaWJ1dGVOYW1lczogT3B0aW9uPHN0cmluZ1tdPiA9IG51bGw7XG4gIHByaXZhdGUgYXR0cmlidXRlczogT3B0aW9uPEF0dHJpYnV0ZVtdPiA9IG51bGw7XG4gIHByaXZhdGUgY2xhc3NMaXN0OiBPcHRpb248Q2xhc3NMaXN0PiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuZXcgU3RhdGljQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5ldyBTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhyZWZlcmVuY2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IFNpbXBsZS5OYW1lc3BhY2UsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcsIG5hbWVzcGFjZSk7XG4gICAgICBsZXQgbnNBdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UsIG5hbWVzcGFjZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5zQXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKSB7XG4gICAgbGV0IHsgZW52IH0gPSB0aGlzO1xuICAgIGxldCB7IGF0dHJpYnV0ZXMsIGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBhdHRyaWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlc1tpXS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xhc3NMaXN0KSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IGVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgJ2NsYXNzJywgZmFsc2UpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsICdjbGFzcycsIGNsYXNzTGlzdC50b1JlZmVyZW5jZSgpKTtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRBZGRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmF0dHJpYnV0ZU5hbWVzIHx8IHRoaXMuYXR0cmlidXRlTmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTE7XG4gIH1cblxuICBwcml2YXRlIGFkZENsYXNzKHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjbGFzc0xpc3QpIHtcbiAgICAgIGNsYXNzTGlzdCA9IHRoaXMuY2xhc3NMaXN0ID0gbmV3IENsYXNzTGlzdCgpO1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hcHBlbmQocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXR0cmlidXRlKG5hbWU6IHN0cmluZywgYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBsZXQgeyBhdHRyaWJ1dGVOYW1lcywgYXR0cmlidXRlcyB9ID0gdGhpcztcblxuICAgIGlmICghYXR0cmlidXRlTmFtZXMpIHtcbiAgICAgIGF0dHJpYnV0ZU5hbWVzID0gdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IFtdO1xuICAgICAgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZU5hbWVzLnB1c2gobmFtZSk7XG4gICAgdW53cmFwKGF0dHJpYnV0ZXMpLnB1c2goYXR0cmlidXRlKTtcbiAgfVxufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRmx1c2hFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrKCk7XG5cbiAgbGV0IGFjdGlvbiA9ICdGbHVzaEVsZW1lbnRPcGNvZGUjZXZhbHVhdGUnO1xuICBzdGFjay5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikuZmx1c2goc3RhY2suZXhwZWN0Q29uc3RydWN0aW5nKGFjdGlvbiksIHZtKTtcbiAgc3RhY2suZmx1c2hFbGVtZW50KCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNsb3NlRWxlbWVudCwgdm0gPT4gdm0uc3RhY2soKS5jbG9zZUVsZW1lbnQoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5TdGF0aWNBdHRyLCAodm0sIHsgb3AxOiBfbmFtZSwgb3AyOiBfdmFsdWUsIG9wMzogX25hbWVzcGFjZSB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCB2YWx1ZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX3ZhbHVlKTtcblxuICBpZiAoX25hbWVzcGFjZSkge1xuICAgIGxldCBuYW1lc3BhY2UgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lc3BhY2UpO1xuICAgIHZtLnN0YWNrKCkuc2V0U3RhdGljQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uc3RhY2soKS5zZXRTdGF0aWNBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk1vZGlmaWVyLCAodm0sIHsgb3AxOiBfbWFuYWdlciB9KSA9PiB7XG4gIGxldCBtYW5hZ2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyPE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+PihfbWFuYWdlcik7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdGFnID0gYXJncy50YWc7XG4gIGxldCB7IGNvbnN0cnVjdGluZzogZWxlbWVudCwgdXBkYXRlT3BlcmF0aW9ucyB9ID0gdm0uc3RhY2soKTtcbiAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLmR5bmFtaWNTY29wZSgpO1xuICBsZXQgbW9kaWZpZXIgPSBtYW5hZ2VyLmNyZWF0ZShlbGVtZW50IGFzIEZJWF9SRUlGSUNBVElPTjxFbGVtZW50PiwgYXJncywgZHluYW1pY1Njb3BlLCB1cGRhdGVPcGVyYXRpb25zKTtcblxuICBhcmdzLmNsZWFyKCk7XG5cbiAgdm0uZW52LnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVyKG1vZGlmaWVyLCBtYW5hZ2VyKTtcbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IobW9kaWZpZXIpO1xuXG4gIGlmIChkZXN0cnVjdG9yKSB7XG4gICAgdm0ubmV3RGVzdHJveWFibGUoZGVzdHJ1Y3Rvcik7XG4gIH1cblxuICB2bS51cGRhdGVXaXRoKG5ldyBVcGRhdGVNb2RpZmllck9wY29kZShcbiAgICB0YWcsXG4gICAgbWFuYWdlcixcbiAgICBtb2RpZmllclxuICApKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVXBkYXRlTW9kaWZpZXJPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtbW9kaWZpZXJcIjtcbiAgcHJpdmF0ZSBsYXN0VXBkYXRlZDogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhZzogVGFnLFxuICAgIHByaXZhdGUgbWFuYWdlcjogTW9kaWZpZXJNYW5hZ2VyPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBtb2RpZmllcjogT3BhcXVlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBtb2RpZmllciwgdGFnLCBsYXN0VXBkYXRlZCB9ID0gdGhpcztcblxuICAgIGlmICghdGFnLnZhbGlkYXRlKGxhc3RVcGRhdGVkKSkge1xuICAgICAgdm0uZW52LnNjaGVkdWxlVXBkYXRlTW9kaWZpZXIobW9kaWZpZXIsIG1hbmFnZXIpO1xuICAgICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xufVxuXG5leHBvcnQgY2xhc3MgU3RhdGljQXR0cmlidXRlIGltcGxlbWVudHMgQXR0cmlidXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgdmFsdWU6IHN0cmluZyxcbiAgICBwcml2YXRlIG5hbWVzcGFjZT86IHN0cmluZ1xuICApIHt9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhpcy5uYW1lLCB0aGlzLnZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGUgIHtcbiAgcHJpdmF0ZSBjYWNoZTogT3B0aW9uPFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT4+ID0gbnVsbDtcblxuICBwdWJsaWMgdGFnOiBUYWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwcml2YXRlIGF0dHJpYnV0ZU1hbmFnZXI6IEF0dHJpYnV0ZU1hbmFnZXIsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBuYW1lc3BhY2U/OiBTaW1wbGUuTmFtZXNwYWNlXG4gICkge1xuICAgIHRoaXMudGFnID0gcmVmZXJlbmNlLnRhZztcbiAgfVxuXG4gIHBhdGNoKGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBsZXQgeyBlbGVtZW50LCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCB2YWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3QgcGF0Y2ggYWZ0ZXIgZmx1c2gnKS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci51cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50IGFzIEZJWE1FPEVsZW1lbnQsICduZWVkcyB0byBiZSByZWlmaWVkIHByb3Blcmx5Jz4sIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IHJlZmVyZW5jZSwgZWxlbWVudCB9ID0gdGhpcztcblxuICAgIGlmIChpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSkpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHJlZmVyZW5jZS52YWx1ZSgpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhY2hlID0gdGhpcy5jYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuICAgICAgbGV0IHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbmV3IFBhdGNoRWxlbWVudE9wY29kZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogRGljdDxPcHRpb248c3RyaW5nPj4ge1xuICAgIGxldCB7IGVsZW1lbnQsIG5hbWVzcGFjZSwgbmFtZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZm9ybWF0dGVkRWxlbWVudCA9IGZvcm1hdEVsZW1lbnQoZWxlbWVudCk7XG4gICAgbGV0IGxhc3RWYWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3Qgc2VyaWFsaXplIGFmdGVyIGZsdXNoJykucGVlaygpIGFzIHN0cmluZztcblxuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IGZvcm1hdHRlZEVsZW1lbnQsXG4gICAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhc3RWYWx1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogZm9ybWF0dGVkRWxlbWVudCxcbiAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBuYW1lc3BhY2UsXG4gICAgICBuYW1lLFxuICAgICAgbGFzdFZhbHVlXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGA8JHtlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKX0gLz5gKTtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNBdHRyTlMsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IF9uYW1lc3BhY2UsIG9wMzogdHJ1c3RpbmcgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbmFtZXNwYWNlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZXNwYWNlKTtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIHZtLnN0YWNrKCkuc2V0RHluYW1pY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgcmVmZXJlbmNlLCAhIXRydXN0aW5nKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0F0dHIsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IHRydXN0aW5nIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIHZtLnN0YWNrKCkuc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lLCByZWZlcmVuY2UsICEhdHJ1c3RpbmcpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBQYXRjaEVsZW1lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwYXRjaC1lbGVtZW50XCI7XG5cbiAgcHJpdmF0ZSBvcGVyYXRpb246IER5bmFtaWNBdHRyaWJ1dGU7XG5cbiAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBEeW5hbWljQXR0cmlidXRlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IG9wZXJhdGlvbi50YWc7XG4gICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHRoaXMub3BlcmF0aW9uLnBhdGNoKHZtLmVudik7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQsIHR5cGUsIG9wZXJhdGlvbiB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiBfZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiBvcGVyYXRpb24udG9KU09OKClcbiAgICB9O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0QsT0FBTyxFQUErQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFDTCxlQUFlLEVBR2YsY0FBYyxFQUlkLGFBQWEsRUFDYixPQUFPLElBQUksZ0JBQWdCLEVBQzNCLFVBQVUsRUFDWCxNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFekQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0lBQzVDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUMsQ0FBQztBQUVILGNBQWMsQ0FBQyxHQUFHLENBQUMsZ0JBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7SUFDL0MsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNsRCxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsV0FB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dEMsTUFBTSxDQUFDO1lBQ0wsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJO1lBQ0osT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUU7U0FDNUIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBWTSwgVXBkYXRpbmdWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IEFyZ3VtZW50cyB9IGZyb20gJy4uLy4uL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRklYX1JFSUZJQ0FUSU9OIH0gZnJvbSAnLi4vLi4vZG9tL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBGSVhNRSwgT3B0aW9uLCBPcGFxdWUsIERpY3QsIHVud3JhcCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQge1xuICBDYWNoZWRSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZSxcbiAgVmVyc2lvbmVkUmVmZXJlbmNlLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVGFnLFxuICBSZXZpc2lvbixcbiAgUGF0aFJlZmVyZW5jZSxcbiAgY29tYmluZVRhZ2dlZCxcbiAgaXNDb25zdCBhcyBpc0NvbnN0UmVmZXJlbmNlLFxuICBpc01vZGlmaWVkXG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBNb2RpZmllck1hbmFnZXIgfSBmcm9tICcuLi8uLi9tb2RpZmllci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5VTExfUkVGRVJFTkNFLCBQcmltaXRpdmVSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IEF0dHJpYnV0ZU1hbmFnZXIgfSBmcm9tICcuLi8uLi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcbmltcG9ydCB7IEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGV4dCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLmVsZW1lbnRzKCkuYXBwZW5kVGV4dCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWVudCwgKHZtLCB7IG9wMTogdGV4dCB9KSA9PiB7XG4gIHZtLmVsZW1lbnRzKCkuYXBwZW5kQ29tbWVudCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRleHQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnQsICh2bSwgeyBvcDE6IHRhZyB9KSA9PiB7XG4gIHZtLmVsZW1lbnRzKCkub3BlbkVsZW1lbnQodm0uY29uc3RhbnRzLmdldFN0cmluZyh0YWcpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuT3BlbkVsZW1lbnRXaXRoT3BlcmF0aW9ucywgKHZtLCB7IG9wMTogdGFnIH0pID0+IHtcbiAgbGV0IHRhZ05hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRhZyk7XG4gIGxldCBvcGVyYXRpb25zID0gdm0uc3RhY2sucG9wPEVsZW1lbnRPcGVyYXRpb25zPigpO1xuICB2bS5lbGVtZW50cygpLm9wZW5FbGVtZW50KHRhZ05hbWUsIG9wZXJhdGlvbnMpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5PcGVuRHluYW1pY0VsZW1lbnQsIHZtID0+IHtcbiAgbGV0IG9wZXJhdGlvbnMgPSB2bS5zdGFjay5wb3A8RWxlbWVudE9wZXJhdGlvbnM+KCk7XG4gIGxldCB0YWdOYW1lID0gdm0uc3RhY2sucG9wPFJlZmVyZW5jZTxzdHJpbmc+PigpLnZhbHVlKCk7XG4gIHZtLmVsZW1lbnRzKCkub3BlbkVsZW1lbnQodGFnTmFtZSwgb3BlcmF0aW9ucyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hSZW1vdGVFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBlbGVtZW50UmVmID0gdm0uc3RhY2sucG9wPFJlZmVyZW5jZTxTaW1wbGUuRWxlbWVudD4+KCk7XG4gIGxldCBuZXh0U2libGluZ1JlZiA9IHZtLnN0YWNrLnBvcDxSZWZlcmVuY2U8T3B0aW9uPFNpbXBsZS5Ob2RlPj4+KCk7XG5cbiAgbGV0IGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50O1xuICBsZXQgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG5cbiAgaWYgKGlzQ29uc3RSZWZlcmVuY2UoZWxlbWVudFJlZikpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudFJlZi52YWx1ZSgpO1xuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShlbGVtZW50UmVmKTtcbiAgICBlbGVtZW50ID0gY2FjaGUucGVlaygpO1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG5cbiAgaWYgKGlzQ29uc3RSZWZlcmVuY2UobmV4dFNpYmxpbmdSZWYpKSB7XG4gICAgbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZ1JlZi52YWx1ZSgpO1xuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShuZXh0U2libGluZ1JlZik7XG4gICAgbmV4dFNpYmxpbmcgPSBjYWNoZS5wZWVrKCk7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cblxuICB2bS5lbGVtZW50cygpLnB1c2hSZW1vdGVFbGVtZW50KGVsZW1lbnQsIG5leHRTaWJsaW5nKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wUmVtb3RlRWxlbWVudCwgdm0gPT4gdm0uZWxlbWVudHMoKS5wb3BSZW1vdGVFbGVtZW50KCkpO1xuXG5jbGFzcyBDbGFzc0xpc3Qge1xuICBwcml2YXRlIGxpc3Q6IE9wdGlvbjxSZWZlcmVuY2U8c3RyaW5nPltdPiA9IG51bGw7XG4gIHByaXZhdGUgaXNDb25zdCA9IHRydWU7XG5cbiAgYXBwZW5kKHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBsaXN0LCBpc0NvbnN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKGxpc3QgPT09IG51bGwpIGxpc3QgPSB0aGlzLmxpc3QgPSBbXTtcblxuICAgIGxpc3QucHVzaChyZWZlcmVuY2UpO1xuICAgIHRoaXMuaXNDb25zdCA9IGlzQ29uc3QgJiYgaXNDb25zdFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICB9XG5cbiAgdG9SZWZlcmVuY2UoKTogUmVmZXJlbmNlPE9wdGlvbjxzdHJpbmc+PiB7XG4gICAgbGV0IHsgbGlzdCwgaXNDb25zdCB9ID0gdGhpcztcblxuICAgIGlmICghbGlzdCkgcmV0dXJuIE5VTExfUkVGRVJFTkNFO1xuXG4gICAgaWYgKGlzQ29uc3QpIHJldHVybiBQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHRvQ2xhc3NOYW1lKGxpc3QpKTtcblxuICAgIHJldHVybiBuZXcgQ2xhc3NMaXN0UmVmZXJlbmNlKGxpc3QpO1xuICB9XG5cbn1cblxuY2xhc3MgQ2xhc3NMaXN0UmVmZXJlbmNlIGV4dGVuZHMgQ2FjaGVkUmVmZXJlbmNlPE9wdGlvbjxzdHJpbmc+PiB7XG4gIHB1YmxpYyB0YWc6IFRhZztcbiAgcHJpdmF0ZSBsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdID0gW107XG5cbiAgY29uc3RydWN0b3IobGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lVGFnZ2VkKGxpc3QpO1xuICAgIHRoaXMubGlzdCA9IGxpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZSgpOiBPcHRpb248c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRvQ2xhc3NOYW1lKHRoaXMubGlzdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9DbGFzc05hbWUobGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSk6IE9wdGlvbjxzdHJpbmc+IHtcbiAgbGV0IHJldDogT3BhcXVlW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdmFsdWU6IEZJWE1FPE9wYXF1ZSwgJ3VzZSBPcGFxdWUgYW5kIG5vcm1hbGl6ZSc+ID0gbGlzdFtpXS52YWx1ZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0LnB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIChyZXQubGVuZ3RoID09PSAwKSA/IG51bGwgOiByZXQuam9pbignICcpO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgb3Bjb2RlczogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlW10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBjbGFzc0xpc3Q6IE9wdGlvbjxDbGFzc0xpc3Q+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhyZWZlcmVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBTaW1wbGUuTmFtZXNwYWNlLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZywgbmFtZXNwYWNlKTtcbiAgICBsZXQgbnNBdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UsIG5hbWVzcGFjZSk7XG5cbiAgICB0aGlzLmFkZEF0dHJpYnV0ZShuc0F0dHJpYnV0ZSk7XG4gIH1cblxuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKSB7XG4gICAgbGV0IHsgZW52IH0gPSB2bTtcbiAgICBsZXQgeyBvcGNvZGVzLCBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgb3Bjb2RlcyAmJiBpIDwgb3Bjb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGVzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NMaXN0KSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IGVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgJ2NsYXNzJywgZmFsc2UpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsICdjbGFzcycsIGNsYXNzTGlzdC50b1JlZmVyZW5jZSgpKTtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzTGlzdCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFkZENsYXNzKHJlZmVyZW5jZTogUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgPSBuZXcgQ2xhc3NMaXN0KCk7XG4gICAgfVxuXG4gICAgY2xhc3NMaXN0LmFwcGVuZChyZWZlcmVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKHRoaXMuZW52KTtcblxuICAgIGlmIChvcGNvZGUpIHtcbiAgICAgIGxldCB7IG9wY29kZXMgfSA9IHRoaXM7XG5cbiAgICAgIGlmICghb3Bjb2Rlcykge1xuICAgICAgICBvcGNvZGVzID0gdGhpcy5vcGNvZGVzID0gW107XG4gICAgICB9XG5cbiAgICAgIG9wY29kZXMucHVzaChvcGNvZGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgaW1wbGVtZW50cyBFbGVtZW50T3BlcmF0aW9ucyB7XG4gIHByaXZhdGUgYXR0cmlidXRlTmFtZXM6IE9wdGlvbjxzdHJpbmdbXT4gPSBudWxsO1xuICBwcml2YXRlIGF0dHJpYnV0ZXM6IE9wdGlvbjxBdHRyaWJ1dGVbXT4gPSBudWxsO1xuICBwcml2YXRlIGNsYXNzTGlzdDogT3B0aW9uPENsYXNzTGlzdD4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbmV3IFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuZXcgU3RhdGljQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MocmVmZXJlbmNlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBhdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBTaW1wbGUuTmFtZXNwYWNlLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICAgICAgbGV0IG5zQXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlLCBuYW1lc3BhY2UpO1xuXG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuc0F0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSkge1xuICAgIGxldCB7IGVudiB9ID0gdGhpcztcbiAgICBsZXQgeyBhdHRyaWJ1dGVzLCBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgYXR0cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZXNbaV0uZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSBlbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsICdjbGFzcycsIGZhbHNlKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCAnY2xhc3MnLCBjbGFzc0xpc3QudG9SZWZlcmVuY2UoKSk7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQWRkQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hdHRyaWJ1dGVOYW1lcyB8fCB0aGlzLmF0dHJpYnV0ZU5hbWVzLmluZGV4T2YobmFtZSkgPT09IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDbGFzcyhyZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGlmICghY2xhc3NMaXN0KSB7XG4gICAgICBjbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCA9IG5ldyBDbGFzc0xpc3QoKTtcbiAgICB9XG5cbiAgICBjbGFzc0xpc3QuYXBwZW5kKHJlZmVyZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZTogQXR0cmlidXRlKSB7XG4gICAgbGV0IHsgYXR0cmlidXRlTmFtZXMsIGF0dHJpYnV0ZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgICBhdHRyaWJ1dGVOYW1lcyA9IHRoaXMuYXR0cmlidXRlTmFtZXMgPSBbXTtcbiAgICAgIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lcy5wdXNoKG5hbWUpO1xuICAgIHVud3JhcChhdHRyaWJ1dGVzKS5wdXNoKGF0dHJpYnV0ZSk7XG4gIH1cbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkZsdXNoRWxlbWVudCwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5lbGVtZW50cygpO1xuXG4gIGxldCBhY3Rpb24gPSAnRmx1c2hFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgc3RhY2suZXhwZWN0T3BlcmF0aW9ucyhhY3Rpb24pLmZsdXNoKHN0YWNrLmV4cGVjdENvbnN0cnVjdGluZyhhY3Rpb24pLCB2bSk7XG4gIHN0YWNrLmZsdXNoRWxlbWVudCgpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5DbG9zZUVsZW1lbnQsIHZtID0+IHZtLmVsZW1lbnRzKCkuY2xvc2VFbGVtZW50KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU3RhdGljQXR0ciwgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogX3ZhbHVlLCBvcDM6IF9uYW1lc3BhY2UgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgdmFsdWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF92YWx1ZSk7XG5cbiAgaWYgKF9uYW1lc3BhY2UpIHtcbiAgICBsZXQgbmFtZXNwYWNlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZXNwYWNlKTtcbiAgICB2bS5lbGVtZW50cygpLnNldFN0YXRpY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHZtLmVsZW1lbnRzKCkuc2V0U3RhdGljQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Nb2RpZmllciwgKHZtLCB7IG9wMTogX21hbmFnZXIgfSkgPT4ge1xuICBsZXQgbWFuYWdlciA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcjxNb2RpZmllck1hbmFnZXI8T3BhcXVlPj4oX21hbmFnZXIpO1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdGFnID0gYXJncy50YWc7XG4gIGxldCB7IGNvbnN0cnVjdGluZzogZWxlbWVudCwgdXBkYXRlT3BlcmF0aW9ucyB9ID0gdm0uZWxlbWVudHMoKTtcbiAgbGV0IGR5bmFtaWNTY29wZSA9IHZtLmR5bmFtaWNTY29wZSgpO1xuICBsZXQgbW9kaWZpZXIgPSBtYW5hZ2VyLmNyZWF0ZShlbGVtZW50IGFzIEZJWF9SRUlGSUNBVElPTjxFbGVtZW50PiwgYXJncywgZHluYW1pY1Njb3BlLCB1cGRhdGVPcGVyYXRpb25zKTtcblxuICBhcmdzLmNsZWFyKCk7XG5cbiAgdm0uZW52LnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVyKG1vZGlmaWVyLCBtYW5hZ2VyKTtcbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IobW9kaWZpZXIpO1xuXG4gIGlmIChkZXN0cnVjdG9yKSB7XG4gICAgdm0ubmV3RGVzdHJveWFibGUoZGVzdHJ1Y3Rvcik7XG4gIH1cblxuICB2bS51cGRhdGVXaXRoKG5ldyBVcGRhdGVNb2RpZmllck9wY29kZShcbiAgICB0YWcsXG4gICAgbWFuYWdlcixcbiAgICBtb2RpZmllclxuICApKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVXBkYXRlTW9kaWZpZXJPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtbW9kaWZpZXJcIjtcbiAgcHJpdmF0ZSBsYXN0VXBkYXRlZDogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhZzogVGFnLFxuICAgIHByaXZhdGUgbWFuYWdlcjogTW9kaWZpZXJNYW5hZ2VyPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBtb2RpZmllcjogT3BhcXVlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBtb2RpZmllciwgdGFnLCBsYXN0VXBkYXRlZCB9ID0gdGhpcztcblxuICAgIGlmICghdGFnLnZhbGlkYXRlKGxhc3RVcGRhdGVkKSkge1xuICAgICAgdm0uZW52LnNjaGVkdWxlVXBkYXRlTW9kaWZpZXIobW9kaWZpZXIsIG1hbmFnZXIpO1xuICAgICAgdGhpcy5sYXN0VXBkYXRlZCA9IHRhZy52YWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZsdXNoKGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xufVxuXG5leHBvcnQgY2xhc3MgU3RhdGljQXR0cmlidXRlIGltcGxlbWVudHMgQXR0cmlidXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgdmFsdWU6IHN0cmluZyxcbiAgICBwcml2YXRlIG5hbWVzcGFjZT86IHN0cmluZ1xuICApIHt9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhpcy5uYW1lLCB0aGlzLnZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIER5bmFtaWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGUgIHtcbiAgcHJpdmF0ZSBjYWNoZTogT3B0aW9uPFJlZmVyZW5jZUNhY2hlPE9wYXF1ZT4+ID0gbnVsbDtcblxuICBwdWJsaWMgdGFnOiBUYWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBTaW1wbGUuRWxlbWVudCxcbiAgICBwcml2YXRlIGF0dHJpYnV0ZU1hbmFnZXI6IEF0dHJpYnV0ZU1hbmFnZXIsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgcHJpdmF0ZSBuYW1lc3BhY2U/OiBTaW1wbGUuTmFtZXNwYWNlXG4gICkge1xuICAgIHRoaXMudGFnID0gcmVmZXJlbmNlLnRhZztcbiAgfVxuXG4gIHBhdGNoKGVudjogRW52aXJvbm1lbnQpIHtcbiAgICBsZXQgeyBlbGVtZW50LCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCB2YWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3QgcGF0Y2ggYWZ0ZXIgZmx1c2gnKS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlTWFuYWdlci51cGRhdGVBdHRyaWJ1dGUoZW52LCBlbGVtZW50IGFzIEZJWE1FPEVsZW1lbnQsICduZWVkcyB0byBiZSByZWlmaWVkIHByb3Blcmx5Jz4sIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IHJlZmVyZW5jZSwgZWxlbWVudCB9ID0gdGhpcztcblxuICAgIGlmIChpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSkpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHJlZmVyZW5jZS52YWx1ZSgpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNhY2hlID0gdGhpcy5jYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuICAgICAgbGV0IHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShlbnYsIGVsZW1lbnQsIHZhbHVlLCB0aGlzLm5hbWVzcGFjZSk7XG4gICAgICByZXR1cm4gbmV3IFBhdGNoRWxlbWVudE9wY29kZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogRGljdDxPcHRpb248c3RyaW5nPj4ge1xuICAgIGxldCB7IGVsZW1lbnQsIG5hbWVzcGFjZSwgbmFtZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZm9ybWF0dGVkRWxlbWVudCA9IGZvcm1hdEVsZW1lbnQoZWxlbWVudCk7XG4gICAgbGV0IGxhc3RWYWx1ZSA9IGV4cGVjdChjYWNoZSwgJ211c3Qgc2VyaWFsaXplIGFmdGVyIGZsdXNoJykucGVlaygpIGFzIHN0cmluZztcblxuICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IGZvcm1hdHRlZEVsZW1lbnQsXG4gICAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxhc3RWYWx1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogZm9ybWF0dGVkRWxlbWVudCxcbiAgICAgIHR5cGU6ICdhdHRyaWJ1dGUnLFxuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBuYW1lc3BhY2UsXG4gICAgICBuYW1lLFxuICAgICAgbGFzdFZhbHVlXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGA8JHtlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKX0gLz5gKTtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNBdHRyTlMsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IF9uYW1lc3BhY2UsIG9wMzogdHJ1c3RpbmcgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbmFtZXNwYWNlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZXNwYWNlKTtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgdm0uZWxlbWVudHMoKS5zZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCByZWZlcmVuY2UsICEhdHJ1c3RpbmcpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EeW5hbWljQXR0ciwgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogdHJ1c3RpbmcgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wPFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+PigpO1xuICB2bS5lbGVtZW50cygpLnNldER5bmFtaWNBdHRyaWJ1dGUobmFtZSwgcmVmZXJlbmNlLCAhIXRydXN0aW5nKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgUGF0Y2hFbGVtZW50T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwicGF0Y2gtZWxlbWVudFwiO1xuXG4gIHByaXZhdGUgb3BlcmF0aW9uOiBEeW5hbWljQXR0cmlidXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wZXJhdGlvbjogRHluYW1pY0F0dHJpYnV0ZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBvcGVyYXRpb24udGFnO1xuICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB0aGlzLm9wZXJhdGlvbi5wYXRjaCh2bS5lbnYpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkLCB0eXBlLCBvcGVyYXRpb24gfSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogX2d1aWQsXG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsczogb3BlcmF0aW9uLnRvSlNPTigpXG4gICAgfTtcbiAgfVxufVxuIl19

@@ -5,3 +5,3 @@ import { APPEND_OPCODES } from '../../opcodes';

APPEND_OPCODES.add(1 /* Helper */, (vm, { op1: _helper }) => {
let stack = vm.evalStack;
let stack = vm.stack;
let helper = vm.constants.getFunction(_helper);

@@ -11,17 +11,17 @@ let args = stack.pop();

args.clear();
vm.evalStack.push(value);
vm.stack.push(value);
});
APPEND_OPCODES.add(2 /* Function */, (vm, { op1: _function }) => {
let func = vm.constants.getFunction(_function);
vm.evalStack.push(func(vm));
vm.stack.push(func(vm));
});
APPEND_OPCODES.add(4 /* GetVariable */, (vm, { op1: symbol }) => {
APPEND_OPCODES.add(5 /* GetVariable */, (vm, { op1: symbol }) => {
let expr = vm.referenceForSymbol(symbol);
vm.evalStack.push(expr);
vm.stack.push(expr);
});
APPEND_OPCODES.add(3 /* SetVariable */, (vm, { op1: symbol }) => {
let expr = vm.evalStack.pop();
APPEND_OPCODES.add(4 /* SetVariable */, (vm, { op1: symbol }) => {
let expr = vm.stack.pop();
vm.scope().bindSymbol(symbol, expr);
});
APPEND_OPCODES.add(71 /* ResolveMaybeLocal */, (vm, { op1: _name }) => {
APPEND_OPCODES.add(70 /* ResolveMaybeLocal */, (vm, { op1: _name }) => {
let name = vm.constants.getString(_name);

@@ -33,28 +33,22 @@ let locals = vm.scope().getPartialMap();

}
vm.evalStack.push(ref);
vm.stack.push(ref);
});
APPEND_OPCODES.add(20 /* RootScope */, (vm, { op1: symbols, op2: bindCallerScope }) => {
APPEND_OPCODES.add(19 /* RootScope */, (vm, { op1: symbols, op2: bindCallerScope }) => {
vm.pushRootScope(symbols, !!bindCallerScope);
});
APPEND_OPCODES.add(5 /* GetProperty */, (vm, { op1: _key }) => {
APPEND_OPCODES.add(6 /* GetProperty */, (vm, { op1: _key }) => {
let key = vm.constants.getString(_key);
let expr = vm.evalStack.pop();
vm.evalStack.push(expr.get(key));
let expr = vm.stack.pop();
vm.stack.push(expr.get(key));
});
APPEND_OPCODES.add(6 /* PushBlock */, (vm, { op1: _block }) => {
APPEND_OPCODES.add(7 /* PushBlock */, (vm, { op1: _block }) => {
let block = _block ? vm.constants.getBlock(_block) : null;
vm.evalStack.push(block);
vm.stack.push(block);
});
APPEND_OPCODES.add(7 /* PushBlocks */, (vm, { op1: defaultBlock, op2: inverseBlock }) => {
if (defaultBlock)
vm.evalStack.push(vm.constants.getBlock(defaultBlock));
if (inverseBlock)
vm.evalStack.push(vm.constants.getBlock(inverseBlock));
});
APPEND_OPCODES.add(8 /* GetBlock */, (vm, { op1: _block }) => {
vm.evalStack.push(vm.scope().getBlock(_block));
vm.stack.push(vm.scope().getBlock(_block));
});
APPEND_OPCODES.add(9 /* HasBlock */, (vm, { op1: _block }) => {
let hasBlock = !!vm.scope().getBlock(_block);
vm.evalStack.push(hasBlock ? TRUE_REFERENCE : FALSE_REFERENCE);
vm.stack.push(hasBlock ? TRUE_REFERENCE : FALSE_REFERENCE);
});

@@ -64,3 +58,3 @@ APPEND_OPCODES.add(10 /* HasBlockParams */, (vm, { op1: _block }) => {

let hasBlockParams = block && block.symbolTable.parameters.length;
vm.evalStack.push(hasBlockParams ? TRUE_REFERENCE : FALSE_REFERENCE);
vm.stack.push(hasBlockParams ? TRUE_REFERENCE : FALSE_REFERENCE);
});

@@ -70,6 +64,6 @@ APPEND_OPCODES.add(11 /* Concat */, (vm, { op1: count }) => {

for (let i = count; i > 0; i--) {
out.push(vm.evalStack.pop());
out.push(vm.stack.pop());
}
vm.evalStack.push(new ConcatReference(out.reverse()));
vm.stack.push(new ConcatReference(out.reverse()));
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUW5FLGNBQWMsQ0FBQyxHQUFHLENBQUMsY0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtJQUNqRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQ3pCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQWEsQ0FBQztJQUNsQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUViLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTtJQUNyRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBNkIsU0FBUyxDQUFDLENBQUM7SUFDM0UsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLG1CQUFjLEVBQUUsQ0FBQyxF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QUUsS0FBSyxFQUFFO0lBQy9DLElBQUksR0FBRyxHQUFxQyxFQUFFLENBQUM7SUFFL0MsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFrQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbmNhdFJlZmVyZW5jZSB9IGZyb20gJy4uL2V4cHJlc3Npb25zL2NvbmNhdCc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBUUlVFX1JFRkVSRU5DRSwgRkFMU0VfUkVGRVJFTkNFIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcyc7XG5pbXBvcnQgeyBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tIFwiLi4vLi4vdm1cIjtcbmltcG9ydCB7IEFyZ3VtZW50cyB9IGZyb20gXCIuLi8uLi92bS9hcmd1bWVudHNcIjtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gKHZtOiBQdWJsaWNWTSkgPT4gVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPjtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkhlbHBlciwgKHZtLCB7IG9wMTogX2hlbHBlciB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGhlbHBlciA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbjxIZWxwZXI+KF9oZWxwZXIpO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG4gIGxldCB2YWx1ZSA9IGhlbHBlcih2bSwgYXJncyk7XG5cbiAgYXJncy5jbGVhcigpO1xuXG4gIHZtLmV2YWxTdGFjay5wdXNoKHZhbHVlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRnVuY3Rpb24sICh2bSwgeyBvcDE6IF9mdW5jdGlvbiB9KSA9PiB7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uPEZ1bmN0aW9uRXhwcmVzc2lvbjxPcGFxdWU+PihfZnVuY3Rpb24pO1xuICB2bS5ldmFsU3RhY2sucHVzaChmdW5jKHZtKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldFZhcmlhYmxlLCAodm0sIHsgb3AxOiBzeW1ib2wgfSkgPT4ge1xuICBsZXQgZXhwciA9IHZtLnJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2wpO1xuICB2bS5ldmFsU3RhY2sucHVzaChleHByKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0VmFyaWFibGUsICh2bSwgeyBvcDE6IHN5bWJvbCB9KSA9PiB7XG4gIGxldCBleHByID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLnNjb3BlKCkuYmluZFN5bWJvbChzeW1ib2wsIGV4cHIpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgKHZtLCB7IG9wMTogX25hbWUgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbG9jYWxzID0gdm0uc2NvcGUoKS5nZXRQYXJ0aWFsTWFwKCkhO1xuXG4gIGxldCByZWYgPSBsb2NhbHNbbmFtZV07XG4gIGlmIChyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHZtLmdldFNlbGYoKS5nZXQobmFtZSk7XG4gIH1cblxuICB2bS5ldmFsU3RhY2sucHVzaChyZWYpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Sb290U2NvcGUsICh2bSwgeyBvcDE6IHN5bWJvbHMsIG9wMjogYmluZENhbGxlclNjb3BlIH0pID0+IHtcbiAgdm0ucHVzaFJvb3RTY29wZShzeW1ib2xzLCAhIWJpbmRDYWxsZXJTY29wZSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldFByb3BlcnR5LCAodm0sIHsgb3AxOiBfa2V5IH0pID0+IHtcbiAgbGV0IGtleSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX2tleSk7XG4gIGxldCBleHByID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGV4cHIuZ2V0KGtleSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IF9ibG9jayA/IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spIDogbnVsbDtcbiAgdm0uZXZhbFN0YWNrLnB1c2goYmxvY2spO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2tzLCAodm0sIHsgb3AxOiBkZWZhdWx0QmxvY2ssIG9wMjogaW52ZXJzZUJsb2NrIH0pID0+IHtcbiAgaWYgKGRlZmF1bHRCbG9jaykgdm0uZXZhbFN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldEJsb2NrKGRlZmF1bHRCbG9jaykpO1xuICBpZiAoaW52ZXJzZUJsb2NrKSB2bS5ldmFsU3RhY2sucHVzaCh2bS5jb25zdGFudHMuZ2V0QmxvY2soaW52ZXJzZUJsb2NrKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldEJsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICB2bS5ldmFsU3RhY2sucHVzaCh2bS5zY29wZSgpLmdldEJsb2NrKF9ibG9jaykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IYXNCbG9jaywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGhhc0Jsb2NrID0gISF2bS5zY29wZSgpLmdldEJsb2NrKF9ibG9jayk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGhhc0Jsb2NrID8gVFJVRV9SRUZFUkVOQ0UgOiBGQUxTRV9SRUZFUkVOQ0UpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IYXNCbG9ja1BhcmFtcywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spO1xuICBsZXQgaGFzQmxvY2tQYXJhbXMgPSBibG9jayAmJiBibG9jay5zeW1ib2xUYWJsZS5wYXJhbWV0ZXJzLmxlbmd0aDtcbiAgdm0uZXZhbFN0YWNrLnB1c2goaGFzQmxvY2tQYXJhbXMgPyBUUlVFX1JFRkVSRU5DRSA6IEZBTFNFX1JFRkVSRU5DRSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbmNhdCwgKHZtLCB7IG9wMTogY291bnQgfSkgPT4ge1xuICBsZXQgb3V0OiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSA9IFtdO1xuXG4gIGZvciAobGV0IGk9Y291bnQ7IGk+MDsgaS0tKSB7XG4gICAgb3V0LnB1c2godm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCkpO1xuICB9XG5cbiAgdm0uZXZhbFN0YWNrLnB1c2gobmV3IENvbmNhdFJlZmVyZW5jZShvdXQucmV2ZXJzZSgpKSk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUW5FLGNBQWMsQ0FBQyxHQUFHLENBQUMsY0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtJQUNqRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ3JCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQWEsQ0FBQztJQUNsQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUViLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTtJQUNyRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBNkIsU0FBUyxDQUFDLENBQUM7SUFDM0UsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLG1CQUFjLEVBQUUsQ0FBQyxF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RF9PUENPREVTLCBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29uY2F0UmVmZXJlbmNlIH0gZnJvbSAnLi4vZXhwcmVzc2lvbnMvY29uY2F0JztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IFRSVUVfUkVGRVJFTkNFLCBGQUxTRV9SRUZFUkVOQ0UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gXCIuLi8uLi92bVwiO1xuaW1wb3J0IHsgQXJndW1lbnRzIH0gZnJvbSBcIi4uLy4uL3ZtL2FyZ3VtZW50c1wiO1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb248VD4gPSAodm06IFB1YmxpY1ZNKSA9PiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPFQ+O1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGVscGVyLCAodm0sIHsgb3AxOiBfaGVscGVyIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBoZWxwZXIgPSB2bS5jb25zdGFudHMuZ2V0RnVuY3Rpb248SGVscGVyPihfaGVscGVyKTtcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdmFsdWUgPSBoZWxwZXIodm0sIGFyZ3MpO1xuXG4gIGFyZ3MuY2xlYXIoKTtcblxuICB2bS5zdGFjay5wdXNoKHZhbHVlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRnVuY3Rpb24sICh2bSwgeyBvcDE6IF9mdW5jdGlvbiB9KSA9PiB7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uPEZ1bmN0aW9uRXhwcmVzc2lvbjxPcGFxdWU+PihfZnVuY3Rpb24pO1xuICB2bS5zdGFjay5wdXNoKGZ1bmModm0pKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0VmFyaWFibGUsICh2bSwgeyBvcDE6IHN5bWJvbCB9KSA9PiB7XG4gIGxldCBleHByID0gdm0ucmVmZXJlbmNlRm9yU3ltYm9sKHN5bWJvbCk7XG4gIHZtLnN0YWNrLnB1c2goZXhwcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlNldFZhcmlhYmxlLCAodm0sIHsgb3AxOiBzeW1ib2wgfSkgPT4ge1xuICBsZXQgZXhwciA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLnNjb3BlKCkuYmluZFN5bWJvbChzeW1ib2wsIGV4cHIpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgKHZtLCB7IG9wMTogX25hbWUgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbG9jYWxzID0gdm0uc2NvcGUoKS5nZXRQYXJ0aWFsTWFwKCkhO1xuXG4gIGxldCByZWYgPSBsb2NhbHNbbmFtZV07XG4gIGlmIChyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHZtLmdldFNlbGYoKS5nZXQobmFtZSk7XG4gIH1cblxuICB2bS5zdGFjay5wdXNoKHJlZik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJvb3RTY29wZSwgKHZtLCB7IG9wMTogc3ltYm9scywgb3AyOiBiaW5kQ2FsbGVyU2NvcGUgfSkgPT4ge1xuICB2bS5wdXNoUm9vdFNjb3BlKHN5bWJvbHMsICEhYmluZENhbGxlclNjb3BlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UHJvcGVydHksICh2bSwgeyBvcDE6IF9rZXkgfSkgPT4ge1xuICBsZXQga2V5ID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfa2V5KTtcbiAgbGV0IGV4cHIgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICB2bS5zdGFjay5wdXNoKGV4cHIuZ2V0KGtleSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IF9ibG9jayA/IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spIDogbnVsbDtcbiAgdm0uc3RhY2sucHVzaChibG9jayk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldEJsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICB2bS5zdGFjay5wdXNoKHZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkhhc0Jsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICBsZXQgaGFzQmxvY2sgPSAhIXZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgdm0uc3RhY2sucHVzaChoYXNCbG9jayA/IFRSVUVfUkVGRVJFTkNFIDogRkFMU0VfUkVGRVJFTkNFKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGFzQmxvY2tQYXJhbXMsICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IHZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgbGV0IGhhc0Jsb2NrUGFyYW1zID0gYmxvY2sgJiYgYmxvY2suc3ltYm9sVGFibGUucGFyYW1ldGVycy5sZW5ndGg7XG4gIHZtLnN0YWNrLnB1c2goaGFzQmxvY2tQYXJhbXMgPyBUUlVFX1JFRkVSRU5DRSA6IEZBTFNFX1JFRkVSRU5DRSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbmNhdCwgKHZtLCB7IG9wMTogY291bnQgfSkgPT4ge1xuICBsZXQgb3V0OiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSA9IFtdO1xuXG4gIGZvciAobGV0IGk9Y291bnQ7IGk+MDsgaS0tKSB7XG4gICAgb3V0LnB1c2godm0uc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKSk7XG4gIH1cblxuICB2bS5zdGFjay5wdXNoKG5ldyBDb25jYXRSZWZlcmVuY2Uob3V0LnJldmVyc2UoKSkpO1xufSk7XG4iXX0=

@@ -12,4 +12,4 @@ import { ReferenceIterator } from '@glimmer/reference';

}
APPEND_OPCODES.add(52 /* PutIterator */, vm => {
let stack = vm.evalStack;
APPEND_OPCODES.add(53 /* PutIterator */, vm => {
let stack = vm.stack;
let listRef = stack.pop();

@@ -22,11 +22,11 @@ let key = stack.pop();

});
APPEND_OPCODES.add(50 /* EnterList */, (vm, { op2: start, op3: end }) => {
vm.enterList(start, end);
APPEND_OPCODES.add(51 /* EnterList */, (vm, { op1: start }) => {
vm.enterList(start);
});
APPEND_OPCODES.add(51 /* ExitList */, vm => vm.exitList());
APPEND_OPCODES.add(53 /* Iterate */, (vm, { op1: breaks, op2: start, op3: end }) => {
let stack = vm.evalStack;
let item = stack.top().next();
APPEND_OPCODES.add(52 /* ExitList */, vm => vm.exitList());
APPEND_OPCODES.add(54 /* Iterate */, (vm, { op1: breaks }) => {
let stack = vm.stack;
let item = stack.peek().next();
if (item) {
let tryOpcode = vm.iterate(start, end, item.memo, item.value);
let tryOpcode = vm.iterate(item.memo, item.value);
vm.enterItem(item.key, tryOpcode);

@@ -38,2 +38,2 @@ }

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWtCLGlCQUFpQixFQUE4QyxNQUFNLG9CQUFvQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQU0sTUFBTSxlQUFlLENBQUM7QUFFbkQ7SUFJRSxZQUFZLFNBQTZCO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSztRQUNILE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBRUQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBYyxFQUFFLEVBQUU7SUFDbkMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUN6QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFrQyxDQUFDO0lBQzFELElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQWtDLENBQUM7SUFDdEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELElBQUksUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUkseUJBQXlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLGtCQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDNUQsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLGlCQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBRXJELGNBQWMsQ0FBQyxHQUFHLENBQUMsZ0JBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQ3ZFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDekIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVqRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ1QsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgVGFnLCBSZWZlcmVuY2UsIFJlZmVyZW5jZUl0ZXJhdG9yLCBJdGVyYXRpb25BcnRpZmFjdHMsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbmNsYXNzIEl0ZXJhYmxlUHJlc2VuY2VSZWZlcmVuY2UgaW1wbGVtZW50cyBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICBwdWJsaWMgdGFnOiBUYWc7XG4gIHByaXZhdGUgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHM7XG5cbiAgY29uc3RydWN0b3IoYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHMpIHtcbiAgICB0aGlzLnRhZyA9IGFydGlmYWN0cy50YWc7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gIH1cblxuICB2YWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYXJ0aWZhY3RzLmlzRW1wdHkoKTtcbiAgfVxufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHV0SXRlcmF0b3IsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgbGlzdFJlZiA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIGxldCBrZXkgPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxzdHJpbmc+PigpO1xuICBsZXQgaXRlcmFibGUgPSB2bS5lbnYuaXRlcmFibGVGb3IobGlzdFJlZiwga2V5LnZhbHVlKCkpO1xuICBsZXQgaXRlcmF0b3IgPSBuZXcgUmVmZXJlbmNlSXRlcmF0b3IoaXRlcmFibGUpO1xuXG4gIHN0YWNrLnB1c2goaXRlcmF0b3IpO1xuICBzdGFjay5wdXNoKG5ldyBJdGVyYWJsZVByZXNlbmNlUmVmZXJlbmNlKGl0ZXJhdG9yLmFydGlmYWN0cykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FbnRlckxpc3QsICh2bSwgeyBvcDI6IHN0YXJ0LCBvcDM6IGVuZCB9KSA9PiB7XG4gIHZtLmVudGVyTGlzdChzdGFydCwgZW5kKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRXhpdExpc3QsIHZtID0+IHZtLmV4aXRMaXN0KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSXRlcmF0ZSwgKHZtLCB7IG9wMTogYnJlYWtzLCBvcDI6IHN0YXJ0LCBvcDM6IGVuZCB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGl0ZW0gPSBzdGFjay50b3A8UmVmZXJlbmNlSXRlcmF0b3I+KCkubmV4dCgpO1xuXG4gIGlmIChpdGVtKSB7XG4gICAgbGV0IHRyeU9wY29kZSA9IHZtLml0ZXJhdGUoc3RhcnQsIGVuZCwgaXRlbS5tZW1vLCBpdGVtLnZhbHVlKTtcbiAgICB2bS5lbnRlckl0ZW0oaXRlbS5rZXksIHRyeU9wY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uZ290byhicmVha3MpO1xuICB9XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWtCLGlCQUFpQixFQUE4QyxNQUFNLG9CQUFvQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQU0sTUFBTSxlQUFlLENBQUM7QUFFbkQ7SUFJRSxZQUFZLFNBQTZCO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSztRQUNILE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBRUQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxvQkFBYyxFQUFFLEVBQUU7SUFDbkMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNyQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFrQyxDQUFDO0lBQzFELElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQWtDLENBQUM7SUFDdEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELElBQUksUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUkseUJBQXlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLGtCQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2xELEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLGlCQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBRXJELGNBQWMsQ0FBQyxHQUFHLENBQUMsZ0JBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7SUFDakQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDVCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgVGFnLCBSZWZlcmVuY2UsIFJlZmVyZW5jZUl0ZXJhdG9yLCBJdGVyYXRpb25BcnRpZmFjdHMsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbmNsYXNzIEl0ZXJhYmxlUHJlc2VuY2VSZWZlcmVuY2UgaW1wbGVtZW50cyBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICBwdWJsaWMgdGFnOiBUYWc7XG4gIHByaXZhdGUgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHM7XG5cbiAgY29uc3RydWN0b3IoYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHMpIHtcbiAgICB0aGlzLnRhZyA9IGFydGlmYWN0cy50YWc7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gIH1cblxuICB2YWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYXJ0aWZhY3RzLmlzRW1wdHkoKTtcbiAgfVxufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHV0SXRlcmF0b3IsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBsaXN0UmVmID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcbiAgbGV0IGtleSA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIGxldCBpdGVyYWJsZSA9IHZtLmVudi5pdGVyYWJsZUZvcihsaXN0UmVmLCBrZXkudmFsdWUoKSk7XG4gIGxldCBpdGVyYXRvciA9IG5ldyBSZWZlcmVuY2VJdGVyYXRvcihpdGVyYWJsZSk7XG5cbiAgc3RhY2sucHVzaChpdGVyYXRvcik7XG4gIHN0YWNrLnB1c2gobmV3IEl0ZXJhYmxlUHJlc2VuY2VSZWZlcmVuY2UoaXRlcmF0b3IuYXJ0aWZhY3RzKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkVudGVyTGlzdCwgKHZtLCB7IG9wMTogc3RhcnQgfSkgPT4ge1xuICB2bS5lbnRlckxpc3Qoc3RhcnQpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FeGl0TGlzdCwgdm0gPT4gdm0uZXhpdExpc3QoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JdGVyYXRlLCAodm0sIHsgb3AxOiBicmVha3MgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGl0ZW0gPSBzdGFjay5wZWVrPFJlZmVyZW5jZUl0ZXJhdG9yPigpLm5leHQoKTtcblxuICBpZiAoaXRlbSkge1xuICAgIGxldCB0cnlPcGNvZGUgPSB2bS5pdGVyYXRlKGl0ZW0ubWVtbywgaXRlbS52YWx1ZSk7XG4gICAgdm0uZW50ZXJJdGVtKGl0ZW0ua2V5LCB0cnlPcGNvZGUpO1xuICB9IGVsc2Uge1xuICAgIHZtLmdvdG8oYnJlYWtzKTtcbiAgfVxufSk7XG4iXX0=
import { APPEND_OPCODES } from '../../opcodes';
APPEND_OPCODES.add(70 /* GetPartialTemplate */, vm => {
let stack = vm.evalStack;
APPEND_OPCODES.add(69 /* GetPartialTemplate */, vm => {
let stack = vm.stack;
let definition = stack.pop();
stack.push(definition.value().template.asPartial());
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBTSxNQUFNLGVBQWUsQ0FBQztBQUduRCxjQUFjLENBQUMsR0FBRyxDQUFDLDJCQUFxQixFQUFFLEVBQUU7SUFDMUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUN6QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUEyRCxDQUFDO0lBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVNZXRhIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFBhcnRpYWxEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vcGFydGlhbCc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRQYXJ0aWFsVGVtcGxhdGUsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgZGVmaW5pdGlvbiA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPFBhcnRpYWxEZWZpbml0aW9uPFRlbXBsYXRlTWV0YT4+PigpO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24udmFsdWUoKS50ZW1wbGF0ZS5hc1BhcnRpYWwoKSk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBTSxNQUFNLGVBQWUsQ0FBQztBQUduRCxjQUFjLENBQUMsR0FBRyxDQUFDLDJCQUFxQixFQUFFLEVBQUU7SUFDMUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNyQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUEyRCxDQUFDO0lBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVNZXRhIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFBhcnRpYWxEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vcGFydGlhbCc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRQYXJ0aWFsVGVtcGxhdGUsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBkZWZpbml0aW9uID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8UGFydGlhbERlZmluaXRpb248VGVtcGxhdGVNZXRhPj4+KCk7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi52YWx1ZSgpLnRlbXBsYXRlLmFzUGFydGlhbCgpKTtcbn0pO1xuIl19

@@ -7,21 +7,14 @@ import { UpdatingOpcode } from '../../opcodes';

import { NULL_REFERENCE, UNDEFINED_REFERENCE, TRUE_REFERENCE, FALSE_REFERENCE, PrimitiveReference } from '../../references';
APPEND_OPCODES.add(18 /* ReserveLocals */, (vm, { op1: amount }) => {
vm.reserveLocals(amount);
APPEND_OPCODES.add(20 /* ChildScope */, vm => vm.pushChildScope());
APPEND_OPCODES.add(21 /* PopScope */, vm => vm.popScope());
APPEND_OPCODES.add(38 /* PushDynamicScope */, vm => vm.pushDynamicScope());
APPEND_OPCODES.add(39 /* PopDynamicScope */, vm => vm.popDynamicScope());
APPEND_OPCODES.add(12 /* Immediate */, (vm, { op1: number }) => {
vm.stack.push(number);
});
APPEND_OPCODES.add(19 /* ReleaseLocals */, vm => vm.releaseLocals());
APPEND_OPCODES.add(14 /* SetLocal */, (vm, { op1: position }) => {
vm.setLocal(position, vm.evalStack.pop());
APPEND_OPCODES.add(13 /* Constant */, (vm, { op1: other }) => {
vm.stack.push(vm.constants.getOther(other));
});
APPEND_OPCODES.add(15 /* GetLocal */, (vm, { op1: position }) => {
vm.evalStack.push(vm.getLocal(position));
});
APPEND_OPCODES.add(21 /* ChildScope */, vm => vm.pushChildScope());
APPEND_OPCODES.add(22 /* PopScope */, vm => vm.popScope());
APPEND_OPCODES.add(39 /* PushDynamicScope */, vm => vm.pushDynamicScope());
APPEND_OPCODES.add(40 /* PopDynamicScope */, vm => vm.popDynamicScope());
APPEND_OPCODES.add(12 /* Constant */, (vm, { op1: other }) => {
vm.evalStack.push(vm.constants.getOther(other));
});
APPEND_OPCODES.add(13 /* Primitive */, (vm, { op1: primitive }) => {
let stack = vm.evalStack;
APPEND_OPCODES.add(14 /* PrimitiveReference */, (vm, { op1: primitive }) => {
let stack = vm.stack;
let flag = (primitive & (3 << 30)) >>> 30;

@@ -54,27 +47,35 @@ let value = primitive & ~(3 << 30);

});
APPEND_OPCODES.add(16 /* Dup */, vm => vm.evalStack.dup());
APPEND_OPCODES.add(17 /* Pop */, vm => vm.evalStack.pop());
APPEND_OPCODES.add(38 /* BindDynamicScope */, (vm, { op1: _names }) => {
APPEND_OPCODES.add(15 /* Dup */, (vm, { op1: register, op2: offset }) => {
let position = vm.fetchValue(register) - offset;
vm.stack.dup(position);
});
APPEND_OPCODES.add(16 /* Pop */, (vm, { op1: count }) => vm.stack.pop(count));
APPEND_OPCODES.add(17 /* Load */, (vm, { op1: register }) => vm.load(register));
APPEND_OPCODES.add(18 /* Fetch */, (vm, { op1: register }) => vm.fetch(register));
APPEND_OPCODES.add(37 /* BindDynamicScope */, (vm, { op1: _names }) => {
let names = vm.constants.getArray(_names);
vm.bindDynamicScope(names);
});
APPEND_OPCODES.add(47 /* Enter */, (vm, { op1: args, op2: start, op3: end }) => vm.enter(args, start, end));
APPEND_OPCODES.add(48 /* Exit */, (vm) => vm.exit());
APPEND_OPCODES.add(41 /* CompileDynamicBlock */, vm => {
let stack = vm.evalStack;
APPEND_OPCODES.add(46 /* PushFrame */, vm => vm.pushFrame());
APPEND_OPCODES.add(47 /* PopFrame */, vm => vm.popFrame());
APPEND_OPCODES.add(48 /* Enter */, (vm, { op1: args }) => vm.enter(args));
APPEND_OPCODES.add(49 /* Exit */, (vm) => vm.exit());
APPEND_OPCODES.add(40 /* CompileDynamicBlock */, vm => {
let stack = vm.stack;
let block = stack.pop();
stack.push(block ? block.compileDynamic(vm.env) : null);
});
APPEND_OPCODES.add(42 /* InvokeStatic */, (vm, { op1: _block }) => {
APPEND_OPCODES.add(41 /* InvokeStatic */, (vm, { op1: _block }) => {
let block = vm.constants.getBlock(_block);
vm.invokeBlock(block);
let compiled = block.compileStatic(vm.env);
vm.call(compiled.start);
});
APPEND_OPCODES.add(43 /* InvokeDynamic */, (vm, { op1: _invoker }) => {
APPEND_OPCODES.add(42 /* InvokeDynamic */, (vm, { op1: _invoker }) => {
let invoker = vm.constants.getOther(_invoker);
let block = vm.evalStack.pop();
let block = vm.stack.pop();
invoker.invoke(vm, block);
});
APPEND_OPCODES.add(44 /* Jump */, (vm, { op1: target }) => vm.goto(target));
APPEND_OPCODES.add(45 /* JumpIf */, (vm, { op1: target }) => {
let reference = vm.evalStack.pop();
APPEND_OPCODES.add(43 /* Jump */, (vm, { op1: target }) => vm.goto(target));
APPEND_OPCODES.add(44 /* JumpIf */, (vm, { op1: target }) => {
let reference = vm.stack.pop();
if (isConst(reference)) {

@@ -93,4 +94,4 @@ if (reference.value()) {

});
APPEND_OPCODES.add(46 /* JumpUnless */, (vm, { op1: target }) => {
let reference = vm.evalStack.pop();
APPEND_OPCODES.add(45 /* JumpUnless */, (vm, { op1: target }) => {
let reference = vm.stack.pop();
if (isConst(reference)) {

@@ -109,3 +110,3 @@ if (!reference.value()) {

});
APPEND_OPCODES.add(23 /* Return */, vm => vm.return());
APPEND_OPCODES.add(22 /* Return */, vm => vm.return());
export const ConstTest = function (ref, _env) {

@@ -120,4 +121,4 @@ return new ConstReference(!!ref.value());

};
APPEND_OPCODES.add(49 /* Test */, (vm, { op1: _func }) => {
let stack = vm.evalStack;
APPEND_OPCODES.add(50 /* Test */, (vm, { op1: _func }) => {
let stack = vm.stack;
let operand = stack.pop();

@@ -216,2 +217,2 @@ let func = vm.constants.getFunction(_func);

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNELE9BQU8sRUFBYSxjQUFjLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkYsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQWlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RyxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBTXpELE9BQU8sRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxzQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7SUFDdkQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQztBQUVILGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0FBRS9ELGNBQWMsQ0FBQyxHQUFHLENBQUMsaUJBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7SUFDcEQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLEdBQUcsQ0FBQyxpQkFBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtJQUNwRCxFQUFFLENBQUMs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QUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlIH0gZnJvbSAnLi4vYmxvY2tzJztcbmltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBVcGRhdGluZ1ZNLCBWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFN5bWJvbFRhYmxlIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIENvbnN0UmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQ09OU1RBTlRfVEFHLCBSZWZlcmVuY2VDYWNoZSwgUmV2aXNpb24sIFRhZywgaXNDb25zdCwgaXNNb2RpZmllZCB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7XG4gIEJsb2NrXG59IGZyb20gJy4uLy4uL3NjYW5uZXInO1xuXG5pbXBvcnQge1xuICBOVUxMX1JFRkVSRU5DRSxcbiAgVU5ERUZJTkVEX1JFRkVSRU5DRSxcbiAgVFJVRV9SRUZFUkVOQ0UsXG4gIEZBTFNFX1JFRkVSRU5DRSxcbiAgUHJpbWl0aXZlUmVmZXJlbmNlXG59IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUmVzZXJ2ZUxvY2FscywgKHZtLCB7IG9wMTogYW1vdW50IH0pID0+IHtcbiAgdm0ucmVzZXJ2ZUxvY2FscyhhbW91bnQpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZWxlYXNlTG9jYWxzLCB2bSA9PiB2bS5yZWxlYXNlTG9jYWxzKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0TG9jYWwsICh2bSwgeyBvcDE6IHBvc2l0aW9uIH0pID0+IHtcbiAgdm0uc2V0TG9jYWwocG9zaXRpb24sIHZtLmV2YWxTdGFjay5wb3AoKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldExvY2FsLCAodm0sIHsgb3AxOiBwb3NpdGlvbiB9KSA9PiB7XG4gIHZtLmV2YWxTdGFjay5wdXNoKHZtLmdldExvY2FsKHBvc2l0aW9uKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNoaWxkU2NvcGUsIHZtID0+IHZtLnB1c2hDaGlsZFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wU2NvcGUsIHZtID0+IHZtLnBvcFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucHVzaER5bmFtaWNTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucG9wRHluYW1pY1Njb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29uc3RhbnQsICh2bSwgeyBvcDE6IG90aGVyIH0pID0+IHtcbiAgdm0uZXZhbFN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldE90aGVyKG90aGVyKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlByaW1pdGl2ZSwgKHZtLCB7IG9wMTogcHJpbWl0aXZlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgZmxhZyA9IChwcmltaXRpdmUgJiAoMyA8PCAzMCkpID4+PiAzMDtcbiAgbGV0IHZhbHVlID0gcHJpbWl0aXZlICYgfigzIDw8IDMwKTtcblxuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHZhbHVlKSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlIDA6IHN0YWNrLnB1c2goRkFMU0VfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogc3RhY2sucHVzaChUUlVFX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IHN0YWNrLnB1c2goTlVMTF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBzdGFjay5wdXNoKFVOREVGSU5FRF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR1cCwgdm0gPT4gdm0uZXZhbFN0YWNrLmR1cCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcCwgdm0gPT4gdm0uZXZhbFN0YWNrLnBvcCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkJpbmREeW5hbWljU2NvcGUsICh2bSwgeyBvcDE6IF9uYW1lcyB9KSA9PiB7XG4gIGxldCBuYW1lcyA9IHZtLmNvbnN0YW50cy5nZXRBcnJheShfbmFtZXMpO1xuICB2bS5iaW5kRHluYW1pY1Njb3BlKG5hbWVzKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXIsICh2bSwgeyBvcDE6IGFyZ3MsIG9wMjogc3RhcnQsIG9wMzogZW5kIH0pID0+IHZtLmVudGVyKGFyZ3MsIHN0YXJ0LCBlbmQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXQsICh2bSkgPT4gdm0uZXhpdCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbXBpbGVEeW5hbWljQmxvY2ssIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgYmxvY2sgPSBzdGFjay5wb3A8QmxvY2s+KCk7XG4gIHN0YWNrLnB1c2goYmxvY2sgPyBibG9jay5jb21waWxlRHluYW1pYyh2bS5lbnYpIDogbnVsbCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkludm9rZVN0YXRpYywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uY29uc3RhbnRzLmdldEJsb2NrKF9ibG9jayk7XG4gIHZtLmludm9rZUJsb2NrKGJsb2NrKTtcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNJbnZva2VyPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBpbnZva2Uodm06IFZNLCBibG9jazogT3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+Pik6IHZvaWQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JbnZva2VEeW5hbWljLCAodm0sIHsgb3AxOiBfaW52b2tlciB9KSA9PiB7XG4gIGxldCBpbnZva2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyPER5bmFtaWNJbnZva2VyPFN5bWJvbFRhYmxlPj4oX2ludm9rZXIpO1xuICBsZXQgYmxvY2sgPSB2bS5ldmFsU3RhY2sucG9wPE9wdGlvbjxDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTeW1ib2xUYWJsZT4+PigpO1xuICBpbnZva2VyLmludm9rZSh2bSwgYmxvY2spO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4gdm0uZ290byh0YXJnZXQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkp1bXBJZiwgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAocmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoY2FjaGUucGVlaygpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcFVubGVzcywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAoIXJlZmVyZW5jZS52YWx1ZSgpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKCFjYWNoZS5wZWVrKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXR1cm4sIHZtID0+IHZtLnJldHVybigpKTtcblxuZXhwb3J0IHR5cGUgVGVzdEZ1bmN0aW9uID0gKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpID0+IFJlZmVyZW5jZTxib29sZWFuPjtcblxuZXhwb3J0IGNvbnN0IENvbnN0VGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgX2VudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IENvbnN0UmVmZXJlbmNlKCEhcmVmLnZhbHVlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IFNpbXBsZVRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIF9lbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIHJlZiBhcyBSZWZlcmVuY2U8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBlbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIGVudi50b0NvbmRpdGlvbmFsUmVmZXJlbmNlKHJlZik7XG59O1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGVzdCwgKHZtLCB7IG9wMTogX2Z1bmMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBvcGVyYW5kID0gc3RhY2sucG9wKCk7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uKF9mdW5jKTtcbiAgc3RhY2sucHVzaChmdW5jKG9wZXJhbmQsIHZtLmVudikpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBBc3NlcnQgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJhc3NlcnRcIjtcblxuICBwcml2YXRlIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+O1xuXG4gIGNvbnN0cnVjdG9yKGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQoY2FjaGUucmV2YWxpZGF0ZSgpKSkge1xuICAgICAgdm0udGhyb3coKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgdHlwZSwgX2d1aWQsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGV4cGVjdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGV4cGVjdGVkID0gU3RyaW5nKGNhY2hlLnBlZWsoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGFyZ3M6IFtdLFxuICAgICAgZGV0YWlsczogeyBleHBlY3RlZCB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJqdW1wLWlmLW5vdC1tb2RpZmllZFwiO1xuXG4gIHByaXZhdGUgbGFzdFJldmlzaW9uOiBSZXZpc2lvbjtcblxuICBjb25zdHJ1Y3Rvcih0YWc6IFRhZywgcHJpdmF0ZSB0YXJnZXQ6IExhYmVsT3Bjb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IHRhZztcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyB0YWcsIHRhcmdldCwgbGFzdFJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF2bS5hbHdheXNSZXZhbGlkYXRlICYmIHRhZy52YWxpZGF0ZShsYXN0UmV2aXNpb24pKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgZGlkTW9kaWZ5KCkge1xuICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGhpcy50YWcudmFsdWUoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLnRhcmdldC5pbnNwZWN0KCkpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZE1vZGlmeU9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImRpZC1tb2RpZnlcIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhcmdldDogSnVtcElmTm90TW9kaWZpZWRPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gQ09OU1RBTlRfVEFHO1xuICB9XG5cbiAgZXZhbHVhdGUoKSB7XG4gICAgdGhpcy50YXJnZXQuZGlkTW9kaWZ5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhYmVsT3Bjb2RlIGltcGxlbWVudHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdGFnOiBUYWcgPSBDT05TVEFOVF9UQUc7XG4gIHB1YmxpYyB0eXBlID0gXCJsYWJlbFwiO1xuICBwdWJsaWMgbGFiZWw6IE9wdGlvbjxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIF9ndWlkOiBudW1iZXI7XG5cbiAgcHJldjogYW55ID0gbnVsbDtcbiAgbmV4dDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihsYWJlbDogc3RyaW5nKSB7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBldmFsdWF0ZSgpIHt9XG5cbiAgaW5zcGVjdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfSBbJHt0aGlzLl9ndWlkfV1gO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMuaW5zcGVjdCgpKV1cbiAgICB9O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNELE9BQU8sRUFBYSxjQUFjLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkYsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQWlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RyxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBTXpELE9BQU8sRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxtQkFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUU3RCxjQUFjLENBQUMsR0FBRyxDQUFDLGlCQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBRXJELGNBQWMsQ0FBQyxHQUFHLENBQUMseUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFFckUsY0FBYyxDQUFDLEdBQUcsQ0FBQyx3QkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFFbkUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxrQkFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtJQUNuRCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQztBQUVILGNBQWMsQ0FBQyxHQUFHLENB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LEdBQUcsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sQ0FBQztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21waWxlZER5bmFtaWNUZW1wbGF0ZSB9IGZyb20gJy4uL2Jsb2Nrcyc7XG5pbXBvcnQgeyBPcGNvZGVKU09OLCBVcGRhdGluZ09wY29kZSB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgVXBkYXRpbmdWTSwgVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgeyBTeW1ib2xUYWJsZSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVmZXJlbmNlLCBDb25zdFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcHRpb24sIE9wYXF1ZSwgaW5pdGlhbGl6ZUd1aWQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IENPTlNUQU5UX1RBRywgUmVmZXJlbmNlQ2FjaGUsIFJldmlzaW9uLCBUYWcsIGlzQ29uc3QsIGlzTW9kaWZpZWQgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCBhcyBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuXG5pbXBvcnQge1xuICBCbG9ja1xufSBmcm9tICcuLi8uLi9zY2FubmVyJztcblxuaW1wb3J0IHtcbiAgTlVMTF9SRUZFUkVOQ0UsXG4gIFVOREVGSU5FRF9SRUZFUkVOQ0UsXG4gIFRSVUVfUkVGRVJFTkNFLFxuICBGQUxTRV9SRUZFUkVOQ0UsXG4gIFByaW1pdGl2ZVJlZmVyZW5jZVxufSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNoaWxkU2NvcGUsIHZtID0+IHZtLnB1c2hDaGlsZFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wU2NvcGUsIHZtID0+IHZtLnBvcFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucHVzaER5bmFtaWNTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucG9wRHluYW1pY1Njb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSW1tZWRpYXRlLCAodm0sIHsgb3AxOiBudW1iZXIgfSkgPT4ge1xuICB2bS5zdGFjay5wdXNoKG51bWJlcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbnN0YW50LCAodm0sIHsgb3AxOiBvdGhlciB9KSA9PiB7XG4gIHZtLnN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldE90aGVyKG90aGVyKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlByaW1pdGl2ZVJlZmVyZW5jZSwgKHZtLCB7IG9wMTogcHJpbWl0aXZlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBmbGFnID0gKHByaW1pdGl2ZSAmICgzIDw8IDMwKSkgPj4+IDMwO1xuICBsZXQgdmFsdWUgPSBwcmltaXRpdmUgJiB+KDMgPDwgMzApO1xuXG4gIHN3aXRjaCAoZmxhZykge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAxOlxuICAgICAgc3RhY2sucHVzaChQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodmFsdWUpKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgMDogc3RhY2sucHVzaChGQUxTRV9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAxOiBzdGFjay5wdXNoKFRSVUVfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogc3RhY2sucHVzaChOVUxMX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IHN0YWNrLnB1c2goVU5ERUZJTkVEX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHVwLCAodm0sIHsgb3AxOiByZWdpc3Rlciwgb3AyOiBvZmZzZXQgfSkgPT4ge1xuICBsZXQgcG9zaXRpb24gPSB2bS5mZXRjaFZhbHVlPG51bWJlcj4ocmVnaXN0ZXIpIC0gb2Zmc2V0O1xuICB2bS5zdGFjay5kdXAocG9zaXRpb24pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3AsICh2bSwgeyBvcDE6IGNvdW50IH0pID0+IHZtLnN0YWNrLnBvcChjb3VudCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuTG9hZCwgKHZtLCB7IG9wMTogcmVnaXN0ZXIgfSkgPT4gdm0ubG9hZChyZWdpc3RlcikpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRmV0Y2gsICh2bSwgeyBvcDE6IHJlZ2lzdGVyIH0pID0+IHZtLmZldGNoKHJlZ2lzdGVyKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CaW5kRHluYW1pY1Njb3BlLCAodm0sIHsgb3AxOiBfbmFtZXMgfSkgPT4ge1xuICBsZXQgbmFtZXMgPSB2bS5jb25zdGFudHMuZ2V0QXJyYXkoX25hbWVzKTtcbiAgdm0uYmluZER5bmFtaWNTY29wZShuYW1lcyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlB1c2hGcmFtZSwgdm0gPT4gdm0ucHVzaEZyYW1lKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wRnJhbWUsIHZtID0+IHZtLnBvcEZyYW1lKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXIsICh2bSwgeyBvcDE6IGFyZ3MgfSkgPT4gdm0uZW50ZXIoYXJncykpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRXhpdCwgKHZtKSA9PiB2bS5leGl0KCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tcGlsZUR5bmFtaWNCbG9jaywgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGJsb2NrID0gc3RhY2sucG9wPEJsb2NrPigpO1xuICBzdGFjay5wdXNoKGJsb2NrID8gYmxvY2suY29tcGlsZUR5bmFtaWModm0uZW52KSA6IG51bGwpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JbnZva2VTdGF0aWMsICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spO1xuICBsZXQgY29tcGlsZWQgPSBibG9jay5jb21waWxlU3RhdGljKHZtLmVudik7XG4gIHZtLmNhbGwoY29tcGlsZWQuc3RhcnQpO1xufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0ludm9rZXI8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiB7XG4gIGludm9rZSh2bTogVk0sIGJsb2NrOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+KTogdm9pZDtcbn1cblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkludm9rZUR5bmFtaWMsICh2bSwgeyBvcDE6IF9pbnZva2VyIH0pID0+IHtcbiAgbGV0IGludm9rZXIgPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8RHluYW1pY0ludm9rZXI8U3ltYm9sVGFibGU+PihfaW52b2tlcik7XG4gIGxldCBibG9jayA9IHZtLnN0YWNrLnBvcDxPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8U3ltYm9sVGFibGU+Pj4oKTtcbiAgaW52b2tlci5pbnZva2Uodm0sIGJsb2NrKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcCwgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHZtLmdvdG8odGFyZ2V0KSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wSWYsICh2bSwgeyBvcDE6IHRhcmdldCB9KSA9PiB7XG4gIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAocmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoY2FjaGUucGVlaygpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcFVubGVzcywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG5cbiAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgIGlmICghcmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoIWNhY2hlLnBlZWsoKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cblxuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJldHVybiwgdm0gPT4gdm0ucmV0dXJuKCkpO1xuXG5leHBvcnQgdHlwZSBUZXN0RnVuY3Rpb24gPSAocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgZW52OiBFbnZpcm9ubWVudCkgPT4gUmVmZXJlbmNlPGJvb2xlYW4+O1xuXG5leHBvcnQgY29uc3QgQ29uc3RUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBfZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiBuZXcgQ29uc3RSZWZlcmVuY2UoISFyZWYudmFsdWUoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgU2ltcGxlVGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgX2VudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gcmVmIGFzIFJlZmVyZW5jZTxib29sZWFuPjtcbn07XG5cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudFRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZW52LnRvQ29uZGl0aW9uYWxSZWZlcmVuY2UocmVmKTtcbn07XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5UZXN0LCAodm0sIHsgb3AxOiBfZnVuYyB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgb3BlcmFuZCA9IHN0YWNrLnBvcCgpO1xuICBsZXQgZnVuYyA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbihfZnVuYyk7XG4gIHN0YWNrLnB1c2goZnVuYyhvcGVyYW5kLCB2bS5lbnYpKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgQXNzZXJ0IGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiYXNzZXJ0XCI7XG5cbiAgcHJpdmF0ZSBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8T3BhcXVlPjtcblxuICBjb25zdHJ1Y3RvcihjYWNoZTogUmVmZXJlbmNlQ2FjaGU8T3BhcXVlPikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjYWNoZS50YWc7XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBjYWNoZSB9ID0gdGhpcztcblxuICAgIGlmIChpc01vZGlmaWVkKGNhY2hlLnJldmFsaWRhdGUoKSkpIHtcbiAgICAgIHZtLnRocm93KCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IHR5cGUsIF9ndWlkLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCBleHBlY3RlZDtcblxuICAgIHRyeSB7XG4gICAgICBleHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KGNhY2hlLnBlZWsoKSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBleHBlY3RlZCA9IFN0cmluZyhjYWNoZS5wZWVrKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiBfZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBhcmdzOiBbXSxcbiAgICAgIGRldGFpbHM6IHsgZXhwZWN0ZWQgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwianVtcC1pZi1ub3QtbW9kaWZpZWRcIjtcblxuICBwcml2YXRlIGxhc3RSZXZpc2lvbjogUmV2aXNpb247XG5cbiAgY29uc3RydWN0b3IodGFnOiBUYWcsIHByaXZhdGUgdGFyZ2V0OiBMYWJlbE9wY29kZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSB0YWc7XG4gICAgdGhpcy5sYXN0UmV2aXNpb24gPSB0YWcudmFsdWUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgdGFnLCB0YXJnZXQsIGxhc3RSZXZpc2lvbiB9ID0gdGhpcztcblxuICAgIGlmICghdm0uYWx3YXlzUmV2YWxpZGF0ZSAmJiB0YWcudmFsaWRhdGUobGFzdFJldmlzaW9uKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGRpZE1vZGlmeSgpIHtcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IHRoaXMudGFnLnZhbHVlKCk7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IHRoaXMuX2d1aWQsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBhcmdzOiBbSlNPTi5zdHJpbmdpZnkodGhpcy50YXJnZXQuaW5zcGVjdCgpKV1cbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaWRNb2RpZnlPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJkaWQtbW9kaWZ5XCI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YXJnZXQ6IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IENPTlNUQU5UX1RBRztcbiAgfVxuXG4gIGV2YWx1YXRlKCkge1xuICAgIHRoaXMudGFyZ2V0LmRpZE1vZGlmeSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYWJlbE9wY29kZSBpbXBsZW1lbnRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHRhZzogVGFnID0gQ09OU1RBTlRfVEFHO1xuICBwdWJsaWMgdHlwZSA9IFwibGFiZWxcIjtcbiAgcHVibGljIGxhYmVsOiBPcHRpb248c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBfZ3VpZDogbnVtYmVyO1xuXG4gIHByZXY6IGFueSA9IG51bGw7XG4gIG5leHQ6IGFueSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IobGFiZWw6IHN0cmluZykge1xuICAgIGluaXRpYWxpemVHdWlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICB9XG5cbiAgZXZhbHVhdGUoKSB7fVxuXG4gIGluc3BlY3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5sYWJlbH0gWyR7dGhpcy5fZ3VpZH1dYDtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLmluc3BlY3QoKSldXG4gICAgfTtcbiAgfVxufVxuIl19
import { CompiledDynamicTemplate } from './compiled/blocks';
import { Ops } from '@glimmer/wire-format';
import { debugSlice } from './opcodes';
import { Register, debugSlice } from './opcodes';
import { ATTRS_BLOCK, ClientSide, compileStatement } from './scanner';

@@ -73,10 +73,10 @@ import { expr } from './syntax/functions';

b.startLabels();
// let state = b.local();
// b.setLocal(state);
if (dynamicTag) {
b.fetch(Register.s1);
expr(dynamicTag, b);
b.dup();
b.load(Register.s1);
b.test('simple');
b.jumpUnless('BODY');
b.dup();
b.fetch(Register.s1);
b.pushComponentOperations();

@@ -90,3 +90,3 @@ b.openDynamicElement();

if (dynamicTag || staticTag) {
// b.didCreateElement(state);
b.didCreateElement(Register.s0);
let attrs = this.attrs['buffer'];

@@ -101,9 +101,6 @@ for (let i = 0; i < attrs.length; i++) {

if (dynamicTag) {
b.dup();
b.fetch(Register.s1);
b.test('simple');
b.jumpUnless('ELSE');
b.jumpUnless('END');
b.closeElement();
b.jump('END');
b.label('ELSE');
b.pop();
}

@@ -114,3 +111,6 @@ else if (staticTag) {

b.label('END');
// b.didRenderLayout(state);
b.didRenderLayout(Register.s0);
if (dynamicTag) {
b.load(Register.s1);
}
b.stopLabels();

@@ -190,24 +190,28 @@ let start = b.start;

dynamic(definitionArgs, getDefinition, args) {
this.builder.unit(b => {
let [params, hash, block, inverse] = args;
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
let meta = this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
b.compileArgs(definitionArgs[0], definitionArgs[1], true);
b.helper(helper);
b.dup();
b.test('simple');
b.closure(2, b => {
b.jumpUnless('ELSE');
b.pushDynamicComponentManager();
b.invokeComponent(null, params, hash, block, inverse);
b.jump('END');
b.label('ELSE');
b.pop();
});
});
let [params, hash, block, inverse] = args;
let { builder } = this;
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
let meta = this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
builder.compileArgs(definitionArgs[0], definitionArgs[1], true);
builder.helper(helper);
builder.dup();
builder.test('simple');
builder.enter(2);
builder.jumpUnless('ELSE');
builder.pushDynamicComponentManager();
builder.invokeComponent(null, params, hash, block, inverse);
builder.label('ELSE');
builder.exit();
builder.return();
builder.label('END');
builder.popFrame();
builder.stopLabels();
}

@@ -218,2 +222,2 @@ }

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQTBCLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEYsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUXRFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUxQyxPQUFPLGdCQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBYzFELE1BQU0sd0JBQXdCLFVBQTRCLEVBQUUsR0FBZ0I7SUFDMUUsSUFBSSxPQUFPLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5QyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQVFEO0lBR0UsWUFBbUIsR0FBZ0I7UUFBaEIsUUFBRyxHQUFILEdBQUcsQ0FBYTtJQUFHLENBQUM7SUFFdkMsVUFBVSxDQUFDLE1BQThCO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQThCO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJ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S0FBSyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELE1BQU0sa0JBQWtCLEdBQWdCLEVBQUUsSUFBcUI7SUFDN0QsTUFBTSxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIENvbXBpbGF0aW9uTWV0YSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljUHJvZ3JhbSwgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBNYXliZSwgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBPcHMsIFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlJztcbmltcG9ydCB7IGRlYnVnU2xpY2UgfSBmcm9tICcuL29wY29kZXMnO1xuXG5pbXBvcnQgeyBBVFRSU19CTE9DSywgQ2xpZW50U2lkZSwgY29tcGlsZVN0YXRlbWVudCB9IGZyb20gJy4vc2Nhbm5lcic7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudEFyZ3MsXG4gIENvbXBvbmVudEJ1aWxkZXIgYXMgSUNvbXBvbmVudEJ1aWxkZXIsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uXG59IGZyb20gJy4vb3Bjb2RlLWJ1aWxkZXInO1xuXG5pbXBvcnQgeyBleHByIH0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0vYXBwZW5kJztcbmltcG9ydCB7IElBcmd1bWVudHMgfSBmcm9tICcuL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb21waWxlZC9vcGNvZGVzL2V4cHJlc3Npb25zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsYWJsZUxheW91dCB7XG4gIGNvbXBpbGUoYnVpbGRlcjogQ29tcG9uZW50LkNvbXBvbmVudExheW91dEJ1aWxkZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUxheW91dChjb21waWxhYmxlOiBDb21waWxhYmxlTGF5b3V0LCBlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gIGxldCBidWlsZGVyID0gbmV3IENvbXBvbmVudExheW91dEJ1aWxkZXIoZW52KTtcblxuICBjb21waWxhYmxlLmNvbXBpbGUoYnVpbGRlcik7XG5cbiAgcmV0dXJuIGJ1aWxkZXIuY29tcGlsZSgpO1xufVxuXG5pbnRlcmZhY2UgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgdGFnOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlcjtcbiAgYXR0cnM6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXI7XG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbTtcbn1cblxuY2xhc3MgQ29tcG9uZW50TGF5b3V0QnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBpbm5lcjogSW5uZXJMYXlvdXRCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50KSB7fVxuXG4gIHdyYXBMYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBXcmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGZyb21MYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBVbndyYXBwZWRCdWlsZGVyKHRoaXMuZW52LCBsYXlvdXQpO1xuICB9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5jb21waWxlKCk7XG4gIH1cblxuICBnZXQgdGFnKCk6IENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci50YWc7XG4gIH1cblxuICBnZXQgYXR0cnMoKTogQ29tcG9uZW50LkNvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuYXR0cnM7XG4gIH1cbn1cblxuY2xhc3MgV3JhcHBlZEJ1aWxkZXIgaW1wbGVtZW50cyBJbm5lckxheW91dEJ1aWxkZXIge1xuICBwdWJsaWMgdGFnID0gbmV3IENvbXBvbmVudFRhZ0J1aWxkZXIoKTtcbiAgcHVibGljIGF0dHJzID0gbmV3IENvbXBvbmVudEF0dHJzQnVpbGRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50LCBwcml2YXRlIGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge31cblxuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICAgIC8vPT09PT09PT1EWU5BTUlDXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhCT0RZKVxuICAgIC8vICAgICAgICBPcGVuRHluYW1pY1ByaW1pdGl2ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgRGlkQ3JlYXRlRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5hdHRyIHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgRmx1c2hFbGVtZW50XG4gICAgLy8gQk9EWTogIE5vb3BcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhFTkQpXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vIEVORDogICBOb29wXG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG4gICAgLy9cbiAgICAvLz09PT09PT09U1RBVElDXG4gICAgLy8gICAgICAgIE9wZW5QcmltaXRpdmVFbGVtZW50T3Bjb2RlXG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5ib2R5IHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgQ2xvc2VFbGVtZW50XG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG5cbiAgICBsZXQgeyBlbnYsIGxheW91dCB9ID0gdGhpcztcbiAgICBsZXQgbWV0YSA9IHsgdGVtcGxhdGVNZXRhOiBsYXlvdXQubWV0YSwgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMsIGFzUGFydGlhbDogZmFsc2UgfTtcblxuICAgIGxldCBkeW5hbWljVGFnID0gdGhpcy50YWcuZ2V0RHluYW1pYygpO1xuICAgIGxldCBzdGF0aWNUYWcgPSB0aGlzLnRhZy5nZXRTdGF0aWMoKTtcblxuICAgIGxldCBiID0gYnVpbGRlcihlbnYsIG1ldGEpO1xuICAgIGIuc3RhcnRMYWJlbHMoKTtcblxuICAgIC8vIGxldCBzdGF0ZSA9IGIubG9jYWwoKTtcbiAgICAvLyBiLnNldExvY2FsKHN0YXRlKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBleHByKGR5bmFtaWNUYWcsIGIpO1xuXG4gICAgICBiLmR1cCgpO1xuICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcblxuICAgICAgYi5qdW1wVW5sZXNzKCdCT0RZJyk7XG5cbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5EeW5hbWljRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGljVGFnKSB7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnMoc3RhdGljVGFnKTtcbiAgICB9XG5cbiAgICBpZiAoZHluYW1pY1RhZyB8fCBzdGF0aWNUYWcpIHtcbiAgICAgIC8vIGIuZGlkQ3JlYXRlRWxlbWVudChzdGF0ZSk7XG5cbiAgICAgIGxldCBhdHRycyA9IHRoaXMuYXR0cnNbJ2J1ZmZlciddO1xuXG4gICAgICBmb3IgKGxldCBpPTA7IGk8YXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcGlsZVN0YXRlbWVudChhdHRyc1tpXSwgYik7XG4gICAgICB9XG5cbiAgICAgIGIuZmx1c2hFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnQk9EWScpO1xuICAgIGIuaW52b2tlU3RhdGljKGxheW91dC5hc0Jsb2NrKCkpO1xuXG4gICAgaWYgKGR5bmFtaWNUYWcpIHtcbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgYi5qdW1wVW5sZXNzKCdFTFNFJyk7XG4gICAgICBiLmNsb3NlRWxlbWVudCgpO1xuICAgICAgYi5qdW1wKCdFTkQnKTtcbiAgICAgIGIubGFiZWwoJ0VMU0UnKTtcbiAgICAgIGIucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzdGF0aWNUYWcpIHtcbiAgICAgIGIuY2xvc2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnRU5EJyk7XG5cbiAgICAvLyBiLmRpZFJlbmRlckxheW91dChzdGF0ZSk7XG5cbiAgICBiLnN0b3BMYWJlbHMoKTtcblxuICAgIGxldCBzdGFydCA9IGIuc3RhcnQ7XG4gICAgbGV0IGVuZCA9IGIuZmluYWxpemUoKTtcblxuICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhcnQsIGVuZCwge1xuICAgICAgbWV0YSxcbiAgICAgIGhhc0V2YWw6IGxheW91dC5oYXNFdmFsLFxuICAgICAgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMuY29uY2F0KFtBVFRSU19CTE9DS10pXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgVW53cmFwcGVkQnVpbGRlciBpbXBsZW1lbnRzIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCVUc6IENhbm5vdCBjYWxsIGB0YWdgIG9uIGFuIFVud3JhcHBlZEJ1aWxkZXInKTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgcmV0dXJuIGxheW91dC5hc0xheW91dCh0aGlzLmF0dHJzWydidWZmZXInXSkuY29tcGlsZUR5bmFtaWMoZW52KTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRUYWdCdWlsZGVyIGltcGxlbWVudHMgQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICBwdWJsaWMgaXNEeW5hbWljOiBPcHRpb248Ym9vbGVhbj4gPSBudWxsO1xuICBwdWJsaWMgaXNTdGF0aWM6IE9wdGlvbjxib29sZWFuPiA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWNUYWdOYW1lOiBPcHRpb248c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBkeW5hbWljVGFnTmFtZTogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbj4gPSBudWxsO1xuXG4gIGdldER5bmFtaWMoKTogTWF5YmU8V2lyZUZvcm1hdC5FeHByZXNzaW9uPiB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljVGFnTmFtZTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0aWMoKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0aWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRpY1RhZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljKHRhZ05hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNTdGF0aWMgPSB0cnVlO1xuICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IHRhZ05hbWU7XG4gIH1cblxuICBkeW5hbWljKHRhZ05hbWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gICAgdGhpcy5pc0R5bmFtaWMgPSB0cnVlO1xuICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBbT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uLCBDbGllbnRTaWRlLk9wcy5GdW5jdGlvbkV4cHJlc3Npb24sIHRhZ05hbWVdO1xuICB9XG59XG5cbmNsYXNzIENvbXBvbmVudEF0dHJzQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG5cbiAgc3RhdGljKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbnVsbF0pO1xuICB9XG5cbiAgZHluYW1pYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgW09wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiwgQ2xpZW50U2lkZS5PcHMuRnVuY3Rpb25FeHByZXNzaW9uLCB2YWx1ZV0sIG51bGxdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QnVpbGRlciBpbXBsZW1lbnRzIElDb21wb25lbnRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBlbnY6IEVudmlyb25tZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVpbGRlcjogT3Bjb2RlQnVpbGRlckRTTCkge1xuICAgIHRoaXMuZW52ID0gYnVpbGRlci5lbnY7XG4gIH1cblxuICBzdGF0aWMoZGVmaW5pdGlvbjogQ29tcG9uZW50LkNvbXBvbmVudERlZmluaXRpb248T3BhcXVlPiwgYXJnczogQ29tcG9uZW50QXJncykge1xuICAgIGxldCBbcGFyYW1zLCBoYXNoLCBfZGVmYXVsdCwgaW52ZXJzZV0gPSBhcmdzO1xuICAgIGxldCB7IGJ1aWxkZXIgfSA9IHRoaXM7XG5cbiAgICBidWlsZGVyLnB1c2hDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb24pO1xuICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2UpO1xuICB9XG5cbiAgZHluYW1pYyhkZWZpbml0aW9uQXJnczogQ29tcG9uZW50QXJncywgZ2V0RGVmaW5pdGlvbjogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIGFyZ3M6IENvbXBvbmVudEFyZ3MpIHtcbiAgICB0aGlzLmJ1aWxkZXIudW5pdChiID0+IHtcbiAgICAgIGxldCBbcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZV0gPSBhcmdzO1xuXG4gICAgICBpZiAoIWRlZmluaXRpb25BcmdzIHx8IGRlZmluaXRpb25BcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEeW5hbWljIHN5bnRheCB3aXRob3V0IGFuIGFyZ3VtZW50XCIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWV0YSA9IHRoaXMuYnVpbGRlci5tZXRhLnRlbXBsYXRlTWV0YTtcblxuICAgICAgZnVuY3Rpb24gaGVscGVyKHZtOiBQdWJsaWNWTSwgYXJnczogSUFyZ3VtZW50cykge1xuICAgICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbih2bSwgYXJncywgbWV0YSk7XG4gICAgICB9XG5cbiAgICAgIGIuY29tcGlsZUFyZ3MoZGVmaW5pdGlvbkFyZ3NbMF0sIGRlZmluaXRpb25BcmdzWzFdLCB0cnVlKTtcbiAgICAgIGIuaGVscGVyKGhlbHBlcik7XG5cbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuXG4gICAgICBiLmNsb3N1cmUoMiwgYiA9PiB7XG4gICAgICAgIGIuanVtcFVubGVzcygnRUxTRScpO1xuICAgICAgICBiLnB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlcigpO1xuICAgICAgICBiLmludm9rZUNvbXBvbmVudChudWxsLCBwYXJhbXMsIGhhc2gsIGJsb2NrLCBpbnZlcnNlKTtcbiAgICAgICAgYi5qdW1wKCdFTkQnKTtcbiAgICAgICAgYi5sYWJlbCgnRUxTRScpO1xuICAgICAgICBiLnBvcCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkZXIoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhKSB7XG4gIHJldHVybiBuZXcgT3Bjb2RlQnVpbGRlckRTTChlbnYsIG1ldGEpO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQTBCLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEYsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVF0RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxnQkFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQWMxRCxNQUFNLHdCQUF3QixVQUE0QixFQUFFLEdBQWdCO0lBQzFFLElBQUksT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU1QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFRRDtJQUdFLFlBQW1CLEdBQWdCO1FBQWhCLFFBQUcsR0FBSCxHQUFHLENBQWE7SUFBRyxDQUFDO0lBRXZDLFVBQVUsQ0FBQyxNQUE4QjtRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUE4QjtRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lB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O1FBRXZCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQixPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNCLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTVELE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWpCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRW5CLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGtCQUFrQixHQUFnQixFQUFFLElBQXFCO0lBQzdELE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BhcXVlLCBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7IENvbXBpbGVkRHluYW1pY1Byb2dyYW0sIENvbXBpbGVkRHluYW1pY1RlbXBsYXRlIH0gZnJvbSAnLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgTWF5YmUsIE9wdGlvbiB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgT3BzLCBUZW1wbGF0ZU1ldGEgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi90ZW1wbGF0ZSc7XG5pbXBvcnQgeyBSZWdpc3RlciwgZGVidWdTbGljZSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7IEFUVFJTX0JMT0NLLCBDbGllbnRTaWRlLCBjb21waWxlU3RhdGVtZW50IH0gZnJvbSAnLi9zY2FubmVyJztcblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50QXJncyxcbiAgQ29tcG9uZW50QnVpbGRlciBhcyBJQ29tcG9uZW50QnVpbGRlcixcbiAgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb25cbn0gZnJvbSAnLi9vcGNvZGUtYnVpbGRlcic7XG5cbmltcG9ydCB7IGV4cHIgfSBmcm9tICcuL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5pbXBvcnQgT3Bjb2RlQnVpbGRlckRTTCBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5cbmltcG9ydCAqIGFzIENvbXBvbmVudCBmcm9tICcuL2NvbXBvbmVudC9pbnRlcmZhY2VzJztcblxuaW1wb3J0ICogYXMgV2lyZUZvcm1hdCBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmltcG9ydCB7IFB1YmxpY1ZNIH0gZnJvbSAnLi92bS9hcHBlbmQnO1xuaW1wb3J0IHsgSUFyZ3VtZW50cyB9IGZyb20gJy4vdm0vYXJndW1lbnRzJztcbmltcG9ydCB7IEZ1bmN0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCIuL2NvbXBpbGVkL29wY29kZXMvZXhwcmVzc2lvbnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxhYmxlTGF5b3V0IHtcbiAgY29tcGlsZShidWlsZGVyOiBDb21wb25lbnQuQ29tcG9uZW50TGF5b3V0QnVpbGRlcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlTGF5b3V0KGNvbXBpbGFibGU6IENvbXBpbGFibGVMYXlvdXQsIGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgbGV0IGJ1aWxkZXIgPSBuZXcgQ29tcG9uZW50TGF5b3V0QnVpbGRlcihlbnYpO1xuXG4gIGNvbXBpbGFibGUuY29tcGlsZShidWlsZGVyKTtcblxuICByZXR1cm4gYnVpbGRlci5jb21waWxlKCk7XG59XG5cbmludGVyZmFjZSBJbm5lckxheW91dEJ1aWxkZXIge1xuICB0YWc6IENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyO1xuICBhdHRyczogQ29tcG9uZW50LkNvbXBvbmVudEF0dHJzQnVpbGRlcjtcbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtO1xufVxuXG5jbGFzcyBDb21wb25lbnRMYXlvdXRCdWlsZGVyIGltcGxlbWVudHMgQ29tcG9uZW50LkNvbXBvbmVudExheW91dEJ1aWxkZXIge1xuICBwcml2YXRlIGlubmVyOiBJbm5lckxheW91dEJ1aWxkZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVudjogRW52aXJvbm1lbnQpIHt9XG5cbiAgd3JhcExheW91dChsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHtcbiAgICB0aGlzLmlubmVyID0gbmV3IFdyYXBwZWRCdWlsZGVyKHRoaXMuZW52LCBsYXlvdXQpO1xuICB9XG5cbiAgZnJvbUxheW91dChsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHtcbiAgICB0aGlzLmlubmVyID0gbmV3IFVud3JhcHBlZEJ1aWxkZXIodGhpcy5lbnYsIGxheW91dCk7XG4gIH1cblxuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICAgIHJldHVybiB0aGlzLmlubmVyLmNvbXBpbGUoKTtcbiAgfVxuXG4gIGdldCB0YWcoKTogQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmlubmVyLnRhZztcbiAgfVxuXG4gIGdldCBhdHRycygpOiBDb21wb25lbnQuQ29tcG9uZW50QXR0cnNCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5hdHRycztcbiAgfVxufVxuXG5jbGFzcyBXcmFwcGVkQnVpbGRlciBpbXBsZW1lbnRzIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHB1YmxpYyB0YWcgPSBuZXcgQ29tcG9uZW50VGFnQnVpbGRlcigpO1xuICBwdWJsaWMgYXR0cnMgPSBuZXcgQ29tcG9uZW50QXR0cnNCdWlsZGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVudjogRW52aXJvbm1lbnQsIHByaXZhdGUgbGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7fVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgLy89PT09PT09PURZTkFNSUNcbiAgICAvLyAgICAgICAgUHV0VmFsdWUoVGFnRXhwcilcbiAgICAvLyAgICAgICAgVGVzdFxuICAgIC8vICAgICAgICBKdW1wVW5sZXNzKEJPRFkpXG4gICAgLy8gICAgICAgIE9wZW5EeW5hbWljUHJpbWl0aXZlRWxlbWVudFxuICAgIC8vICAgICAgICBEaWRDcmVhdGVFbGVtZW50XG4gICAgLy8gICAgICAgIC4uLmF0dHIgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBGbHVzaEVsZW1lbnRcbiAgICAvLyBCT0RZOiAgTm9vcFxuICAgIC8vICAgICAgICAuLi5ib2R5IHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgUHV0VmFsdWUoVGFnRXhwcilcbiAgICAvLyAgICAgICAgVGVzdFxuICAgIC8vICAgICAgICBKdW1wVW5sZXNzKEVORClcbiAgICAvLyAgICAgICAgQ2xvc2VFbGVtZW50XG4gICAgLy8gRU5EOiAgIE5vb3BcbiAgICAvLyAgICAgICAgRGlkUmVuZGVyTGF5b3V0XG4gICAgLy8gICAgICAgIEV4aXRcbiAgICAvL1xuICAgIC8vPT09PT09PT1TVEFUSUNcbiAgICAvLyAgICAgICAgT3BlblByaW1pdGl2ZUVsZW1lbnRPcGNvZGVcbiAgICAvLyAgICAgICAgRGlkQ3JlYXRlRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5hdHRyIHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgRmx1c2hFbGVtZW50XG4gICAgLy8gICAgICAgIC4uLmJvZHkgc3RhdGVtZW50cy4uLlxuICAgIC8vICAgICAgICBDbG9zZUVsZW1lbnRcbiAgICAvLyAgICAgICAgRGlkUmVuZGVyTGF5b3V0XG4gICAgLy8gICAgICAgIEV4aXRcblxuICAgIGxldCB7IGVudiwgbGF5b3V0IH0gPSB0aGlzO1xuICAgIGxldCBtZXRhID0geyB0ZW1wbGF0ZU1ldGE6IGxheW91dC5tZXRhLCBzeW1ib2xzOiBsYXlvdXQuc3ltYm9scywgYXNQYXJ0aWFsOiBmYWxzZSB9O1xuXG4gICAgbGV0IGR5bmFtaWNUYWcgPSB0aGlzLnRhZy5nZXREeW5hbWljKCk7XG4gICAgbGV0IHN0YXRpY1RhZyA9IHRoaXMudGFnLmdldFN0YXRpYygpO1xuXG4gICAgbGV0IGIgPSBidWlsZGVyKGVudiwgbWV0YSk7XG5cbiAgICBiLnN0YXJ0TGFiZWxzKCk7XG5cbiAgICBpZiAoZHluYW1pY1RhZykge1xuICAgICAgYi5mZXRjaChSZWdpc3Rlci5zMSk7XG5cbiAgICAgIGV4cHIoZHluYW1pY1RhZywgYik7XG5cbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLmxvYWQoUmVnaXN0ZXIuczEpO1xuXG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuXG4gICAgICBiLmp1bXBVbmxlc3MoJ0JPRFknKTtcblxuICAgICAgYi5mZXRjaChSZWdpc3Rlci5zMSk7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5EeW5hbWljRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGljVGFnKSB7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnMoc3RhdGljVGFnKTtcbiAgICB9XG5cbiAgICBpZiAoZHluYW1pY1RhZyB8fCBzdGF0aWNUYWcpIHtcbiAgICAgIGIuZGlkQ3JlYXRlRWxlbWVudChSZWdpc3Rlci5zMCk7XG5cbiAgICAgIGxldCBhdHRycyA9IHRoaXMuYXR0cnNbJ2J1ZmZlciddO1xuXG4gICAgICBmb3IgKGxldCBpPTA7IGk8YXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcGlsZVN0YXRlbWVudChhdHRyc1tpXSwgYik7XG4gICAgICB9XG5cbiAgICAgIGIuZmx1c2hFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnQk9EWScpO1xuICAgIGIuaW52b2tlU3RhdGljKGxheW91dC5hc0Jsb2NrKCkpO1xuXG4gICAgaWYgKGR5bmFtaWNUYWcpIHtcbiAgICAgIGIuZmV0Y2goUmVnaXN0ZXIuczEpO1xuICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcbiAgICAgIGIuanVtcFVubGVzcygnRU5EJyk7XG4gICAgICBiLmNsb3NlRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGljVGFnKSB7XG4gICAgICBiLmNsb3NlRWxlbWVudCgpO1xuICAgIH1cblxuICAgIGIubGFiZWwoJ0VORCcpO1xuXG4gICAgYi5kaWRSZW5kZXJMYXlvdXQoUmVnaXN0ZXIuczApO1xuXG4gICAgaWYgKGR5bmFtaWNUYWcpIHtcbiAgICAgIGIubG9hZChSZWdpc3Rlci5zMSk7XG4gICAgfVxuXG4gICAgYi5zdG9wTGFiZWxzKCk7XG5cbiAgICBsZXQgc3RhcnQgPSBiLnN0YXJ0O1xuICAgIGxldCBlbmQgPSBiLmZpbmFsaXplKCk7XG5cbiAgICBkZWJ1Z1NsaWNlKGVudiwgc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gbmV3IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlKHN0YXJ0LCBlbmQsIHtcbiAgICAgIG1ldGEsXG4gICAgICBoYXNFdmFsOiBsYXlvdXQuaGFzRXZhbCxcbiAgICAgIHN5bWJvbHM6IGxheW91dC5zeW1ib2xzLmNvbmNhdChbQVRUUlNfQkxPQ0tdKVxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIFVud3JhcHBlZEJ1aWxkZXIgaW1wbGVtZW50cyBJbm5lckxheW91dEJ1aWxkZXIge1xuICBwdWJsaWMgYXR0cnMgPSBuZXcgQ29tcG9uZW50QXR0cnNCdWlsZGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVudjogRW52aXJvbm1lbnQsIHByaXZhdGUgbGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7fVxuXG4gIGdldCB0YWcoKTogQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignQlVHOiBDYW5ub3QgY2FsbCBgdGFnYCBvbiBhbiBVbndyYXBwZWRCdWlsZGVyJyk7XG4gIH1cblxuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICAgIGxldCB7IGVudiwgbGF5b3V0IH0gPSB0aGlzO1xuICAgIHJldHVybiBsYXlvdXQuYXNMYXlvdXQodGhpcy5hdHRyc1snYnVmZmVyJ10pLmNvbXBpbGVEeW5hbWljKGVudik7XG4gIH1cbn1cblxuY2xhc3MgQ29tcG9uZW50VGFnQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgcHVibGljIGlzRHluYW1pYzogT3B0aW9uPGJvb2xlYW4+ID0gbnVsbDtcbiAgcHVibGljIGlzU3RhdGljOiBPcHRpb248Ym9vbGVhbj4gPSBudWxsO1xuICBwdWJsaWMgc3RhdGljVGFnTmFtZTogT3B0aW9uPHN0cmluZz4gPSBudWxsO1xuICBwdWJsaWMgZHluYW1pY1RhZ05hbWU6IE9wdGlvbjxXaXJlRm9ybWF0LkV4cHJlc3Npb24+ID0gbnVsbDtcblxuICBnZXREeW5hbWljKCk6IE1heWJlPFdpcmVGb3JtYXQuRXhwcmVzc2lvbj4ge1xuICAgIGlmICh0aGlzLmlzRHluYW1pYykge1xuICAgICAgcmV0dXJuIHRoaXMuZHluYW1pY1RhZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdGljKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmlzU3RhdGljKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0aWNUYWdOYW1lO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyh0YWdOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzU3RhdGljID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXRpY1RhZ05hbWUgPSB0YWdOYW1lO1xuICB9XG5cbiAgZHluYW1pYyh0YWdOYW1lOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuaXNEeW5hbWljID0gdHJ1ZTtcbiAgICB0aGlzLmR5bmFtaWNUYWdOYW1lID0gW09wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiwgQ2xpZW50U2lkZS5PcHMuRnVuY3Rpb25FeHByZXNzaW9uLCB0YWdOYW1lXTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRBdHRyc0J1aWxkZXIgaW1wbGVtZW50cyBDb21wb25lbnQuQ29tcG9uZW50QXR0cnNCdWlsZGVyIHtcbiAgcHJpdmF0ZSBidWZmZXI6IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuXG4gIHN0YXRpYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1ZmZlci5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG51bGxdKTtcbiAgfVxuXG4gIGR5bmFtaWMobmFtZTogc3RyaW5nLCB2YWx1ZTogRnVuY3Rpb25FeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgICB0aGlzLmJ1ZmZlci5wdXNoKFtPcHMuRHluYW1pY0F0dHIsIG5hbWUsIFtPcHMuQ2xpZW50U2lkZUV4cHJlc3Npb24sIENsaWVudFNpZGUuT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgdmFsdWVdLCBudWxsXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJ1aWxkZXIgaW1wbGVtZW50cyBJQ29tcG9uZW50QnVpbGRlciB7XG4gIHByaXZhdGUgZW52OiBFbnZpcm9ubWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1aWxkZXI6IE9wY29kZUJ1aWxkZXJEU0wpIHtcbiAgICB0aGlzLmVudiA9IGJ1aWxkZXIuZW52O1xuICB9XG5cbiAgc3RhdGljKGRlZmluaXRpb246IENvbXBvbmVudC5Db21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4sIGFyZ3M6IENvbXBvbmVudEFyZ3MpIHtcbiAgICBsZXQgW3BhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2VdID0gYXJncztcbiAgICBsZXQgeyBidWlsZGVyIH0gPSB0aGlzO1xuXG4gICAgYnVpbGRlci5wdXNoQ29tcG9uZW50TWFuYWdlcihkZWZpbml0aW9uKTtcbiAgICBidWlsZGVyLmludm9rZUNvbXBvbmVudChudWxsLCBwYXJhbXMsIGhhc2gsIF9kZWZhdWx0LCBpbnZlcnNlKTtcbiAgfVxuXG4gIGR5bmFtaWMoZGVmaW5pdGlvbkFyZ3M6IENvbXBvbmVudEFyZ3MsIGdldERlZmluaXRpb246IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLCBhcmdzOiBDb21wb25lbnRBcmdzKSB7XG4gICAgbGV0IFtwYXJhbXMsIGhhc2gsIGJsb2NrLCBpbnZlcnNlXSA9IGFyZ3M7XG4gICAgbGV0IHsgYnVpbGRlciB9ID0gdGhpcztcblxuICAgIGlmICghZGVmaW5pdGlvbkFyZ3MgfHwgZGVmaW5pdGlvbkFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEeW5hbWljIHN5bnRheCB3aXRob3V0IGFuIGFyZ3VtZW50XCIpO1xuICAgIH1cblxuICAgIGxldCBtZXRhID0gdGhpcy5idWlsZGVyLm1ldGEudGVtcGxhdGVNZXRhO1xuXG4gICAgZnVuY3Rpb24gaGVscGVyKHZtOiBQdWJsaWNWTSwgYXJnczogSUFyZ3VtZW50cykge1xuICAgICAgcmV0dXJuIGdldERlZmluaXRpb24odm0sIGFyZ3MsIG1ldGEpO1xuICAgIH1cblxuICAgIGJ1aWxkZXIuc3RhcnRMYWJlbHMoKTtcblxuICAgIGJ1aWxkZXIucHVzaEZyYW1lKCk7XG5cbiAgICBidWlsZGVyLnJldHVyblRvKCdFTkQnKTtcblxuICAgIGJ1aWxkZXIuY29tcGlsZUFyZ3MoZGVmaW5pdGlvbkFyZ3NbMF0sIGRlZmluaXRpb25BcmdzWzFdLCB0cnVlKTtcbiAgICBidWlsZGVyLmhlbHBlcihoZWxwZXIpO1xuXG4gICAgYnVpbGRlci5kdXAoKTtcbiAgICBidWlsZGVyLnRlc3QoJ3NpbXBsZScpO1xuXG4gICAgYnVpbGRlci5lbnRlcigyKTtcblxuICAgIGJ1aWxkZXIuanVtcFVubGVzcygnRUxTRScpO1xuXG4gICAgYnVpbGRlci5wdXNoRHluYW1pY0NvbXBvbmVudE1hbmFnZXIoKTtcbiAgICBidWlsZGVyLmludm9rZUNvbXBvbmVudChudWxsLCBwYXJhbXMsIGhhc2gsIGJsb2NrLCBpbnZlcnNlKTtcblxuICAgIGJ1aWxkZXIubGFiZWwoJ0VMU0UnKTtcbiAgICBidWlsZGVyLmV4aXQoKTtcbiAgICBidWlsZGVyLnJldHVybigpO1xuXG4gICAgYnVpbGRlci5sYWJlbCgnRU5EJyk7XG4gICAgYnVpbGRlci5wb3BGcmFtZSgpO1xuXG4gICAgYnVpbGRlci5zdG9wTGFiZWxzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkZXIoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhKSB7XG4gIHJldHVybiBuZXcgT3Bjb2RlQnVpbGRlckRTTChlbnYsIG1ldGEpO1xufVxuIl19

@@ -51,2 +51,3 @@ import { CompiledDynamicTemplate, CompiledStaticTemplate } from './compiled/blocks';

prelude.push([Ops.ClientSideStatement, ClientSide.Ops.OpenComponentElement, tag]);
prelude.push([Ops.ClientSideStatement, ClientSide.Ops.DidCreateElement]);
let attrsSymbol = symbolTable.symbols.length + 1;

@@ -57,3 +58,4 @@ symbolTable.symbols.push(ATTRS_BLOCK);

.concat(head)
.concat(body);
.concat(body)
.concat([[Ops.ClientSideStatement, ClientSide.Ops.DidRenderLayout]]);
return new CompilableTemplate(statements, symbolTable);

@@ -109,9 +111,11 @@ }

Ops[Ops["OpenComponentElement"] = 0] = "OpenComponentElement";
Ops[Ops["OptimizedAppend"] = 1] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 2] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 3] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 4] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 5] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 6] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 7] = "FunctionExpression";
Ops[Ops["DidCreateElement"] = 1] = "DidCreateElement";
Ops[Ops["DidRenderLayout"] = 2] = "DidRenderLayout";
Ops[Ops["OptimizedAppend"] = 3] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 4] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 5] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 6] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 7] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 8] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 9] = "FunctionExpression";
})(Ops = ClientSide.Ops || (ClientSide.Ops = {}));

@@ -167,2 +171,2 @@ function is(variant) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdyQyxPQUFPLEVBQVUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUd2QyxPQUFPLEVBQ0wsVUFBVSxFQUNYLE1BQU0sb0JBQW9CLENBQUM7QUFJNUIsTUFBTSwyQkFBMkIsU0FBK0IsRUFBRSxPQUFzQjtJQUN0RixVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBT0QsTUFBTTtJQUlKLFlBQW1CLFVBQWtDLEVBQVMsV0FBYztRQUF6RCxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFHO1FBSHBFLG1CQUFjLEdBQW1DLElBQUksQ0FBQztRQUN0RCxvQkFBZSxHQUF1QyxJQUFJLENBQUM7SUFFWSxDQUFDO0lBRWhGLGFBQWEsQ0FBQyxHQUFnQjtRQUM1QixJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRTlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRTdFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxD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L0csQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsIENvbXBpbGVkU3RhdGljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgT3Bjb2RlQnVpbGRlciBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBPcHRpb24sIEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgQmxvY2tTeW1ib2xUYWJsZSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVidWdTbGljZSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtcbiAgU1RBVEVNRU5UU1xufSBmcm9tICcuL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRTdGF0ZW1lbnQgPSBXaXJlRm9ybWF0LlN0YXRlbWVudCB8IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGUgfCBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXJndW1lbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudDogV2lyZUZvcm1hdC5TdGF0ZW1lbnQsIGJ1aWxkZXI6IE9wY29kZUJ1aWxkZXIpIHtcbiAgU1RBVEVNRU5UUy5jb21waWxlKHN0YXRlbWVudCwgYnVpbGRlcik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lZFRlbXBsYXRlPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb21waWxlU3RhdGljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZFN0YXRpY1RlbXBsYXRlO1xuICBjb21waWxlRHluYW1pYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBDb21waWxhYmxlVGVtcGxhdGU8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiBpbXBsZW1lbnRzIFNjYW5uZWRUZW1wbGF0ZTxTPiB7XG4gIHByaXZhdGUgY29tcGlsZWRTdGF0aWM6IE9wdGlvbjxDb21waWxlZFN0YXRpY1RlbXBsYXRlPiA9IG51bGw7XG4gIHByaXZhdGUgY29tcGlsZWREeW5hbWljOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHVibGljIHN5bWJvbFRhYmxlOiBTKSB7fVxuXG4gIGNvbXBpbGVTdGF0aWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkU3RhdGljVGVtcGxhdGUge1xuICAgIGxldCB7IGNvbXBpbGVkU3RhdGljIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjb21waWxlZFN0YXRpYykge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBjb21waWxlU3RhdGVtZW50cyh0aGlzLnN0YXRlbWVudHMsIHRoaXMuc3ltYm9sVGFibGUubWV0YSwgZW52KTtcblxuICAgICAgbGV0IHN0YXJ0ID0gYnVpbGRlci5zdGFydDtcbiAgICAgIGxldCBlbmQgPSBidWlsZGVyLmZpbmFsaXplKCk7XG5cbiAgICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgICAgY29tcGlsZWRTdGF0aWMgPSB0aGlzLmNvbXBpbGVkU3RhdGljID0gbmV3IENvbXBpbGVkU3RhdGljVGVtcGxhdGUoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkU3RhdGljO1xuICB9XG5cbiAgY29tcGlsZUR5bmFtaWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+IHtcbiAgICBsZXQgeyBjb21waWxlZER5bmFtaWMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNvbXBpbGVkRHluYW1pYykge1xuICAgICAgbGV0IHN0YXRpY0Jsb2NrID0gdGhpcy5jb21waWxlU3RhdGljKGVudik7XG4gICAgICBjb21waWxlZER5bmFtaWMgPSBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhdGljQmxvY2suc3RhcnQsIHN0YXRpY0Jsb2NrLmVuZCwgdGhpcy5zeW1ib2xUYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkRHluYW1pYztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4geyBHbGltbWVyRGVidWc6ICc8dGVtcGxhdGU+JyB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0gQ29tcGlsYWJsZVRlbXBsYXRlPFN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIFByb2dyYW0gPSBDb21waWxhYmxlVGVtcGxhdGU8UHJvZ3JhbVN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIEJsb2NrID0gQ29tcGlsYWJsZVRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5leHBvcnQgdHlwZSBTY2FubmVkUHJvZ3JhbSA9IFNjYW5uZWRUZW1wbGF0ZTxQcm9ncmFtU3ltYm9sVGFibGU+O1xuZXhwb3J0IHR5cGUgU2Nhbm5lZEJsb2NrID0gU2Nhbm5lZFRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5mdW5jdGlvbiBjb21waWxlU3RhdGVtZW50cyhzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgbGV0IGIgPSBidWlsZGVyKGVudiwgbWV0YSk7XG4gIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgY29tcGlsZVN0YXRlbWVudChzdGF0ZW1lbnQsIGIpO1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG5cbmV4cG9ydCBjb25zdCBBVFRSU19CTE9DSyA9ICcmYXR0cnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGF5b3V0KHByZWx1ZGU6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGhlYWQ6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGJvZHk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgbGV0IFssIHRhZ10gPSBwcmVsdWRlLnBvcCgpIGFzIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5PcGVuRWxlbWVudDtcbiAgcHJlbHVkZS5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHRhZ10pO1xuXG4gIGxldCBhdHRyc1N5bWJvbCA9IHN5bWJvbFRhYmxlLnN5bWJvbHMubGVuZ3RoICsgMTtcbiAgc3ltYm9sVGFibGUuc3ltYm9scy5wdXNoKEFUVFJTX0JMT0NLKTtcblxuICBsZXQgc3RhdGVtZW50cyA9IHByZWx1ZGVcbiAgICAuY29uY2F0KFtbT3BzLllpZWxkLCBhdHRyc1N5bWJvbCwgRU1QVFlfQVJSQVldXSlcbiAgICAuY29uY2F0KGhlYWQpXG4gICAgLmNvbmNhdChib2R5KTtcblxuICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCBzeW1ib2xUYWJsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJsb2NrOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLCBwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIHNjYW5FbnRyeVBvaW50KG1ldGE6IENvbXBpbGF0aW9uTWV0YSk6IFByb2dyYW0ge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd1Byb2dyYW0oZW52LCBtZXRhLCBzdGF0ZW1lbnRzLCBibG9jay5zeW1ib2xzLCBibG9jay5oYXNFdmFsKS5zY2FuKCk7XG4gIH1cblxuICBzY2FuQmxvY2sobWV0YTogQ29tcGlsYXRpb25NZXRhKTogQmxvY2sge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKGVudiwgbWV0YSwgc3RhdGVtZW50cywgRU1QVFlfQVJSQVkpLnNjYW4oKTtcbiAgfVxuXG4gIHNjYW5MYXlvdXQobWV0YTogQ29tcGlsYXRpb25NZXRhLCBhdHRyczogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdKTogUHJvZ3JhbSB7XG4gICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgbGV0IHsgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG5cbiAgICBpZiAoIWJsb2NrLnByZWx1ZGUgfHwgIWJsb2NrLmhlYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBsYXlvdXQgbXVzdCBoYXZlIGEgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICB9XG5cbiAgICBsZXQgc3ltYm9sVGFibGUgPSB7IG1ldGEsIGhhc0V2YWwsIHN5bWJvbHMgfTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBwcmVsdWRlIH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBibG9jay5wcmVsdWRlLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG4gICAgbGV0IHsgc3RhdGVtZW50czogaGVhZCB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogWy4uLmF0dHJzLCAuLi5ibG9jay5oZWFkXSwgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuICAgIGxldCB7IHN0YXRlbWVudHM6IGJvZHkgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IGJsb2NrLnN0YXRlbWVudHMsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcblxuICAgIHJldHVybiBsYXlvdXQocHJlbHVkZSwgaGVhZCwgYm9keSwgc3ltYm9sVGFibGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FuQmxvY2soYmxvY2s6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpOiBCbG9jayB7XG4gIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2soZW52LCBtZXRhLCBibG9jay5zdGF0ZW1lbnRzLCBFTVBUWV9BUlJBWSkuc2NhbigpO1xufVxuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2xpZW50U2lkZSB7XG4gIGV4cG9ydCBlbnVtIE9wcyB7XG4gICAgT3BlbkNvbXBvbmVudEVsZW1lbnQsXG4gICAgT3B0aW1pemVkQXBwZW5kLFxuICAgIFVub3B0aW1pemVkQXBwZW5kLFxuICAgIFN0YXRpY1BhcnRpYWwsXG4gICAgRHluYW1pY1BhcnRpYWwsXG4gICAgTmVzdGVkQmxvY2ssXG4gICAgU2Nhbm5lZEJsb2NrLFxuXG4gICAgRnVuY3Rpb25FeHByZXNzaW9uXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXM8VCBleHRlbmRzIGFueVtdPih2YXJpYW50OiBPcHMpOiAodmFsdWU6IGFueVtdKSA9PiB2YWx1ZSBpcyBUIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWU6IGFueVtdKTogdmFsdWUgaXMgVCB7XG4gICAgICByZXR1cm4gdmFsdWVbMF0gPT09IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uIHx8IHZhbHVlWzBdID09PSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlU3RhdGVtZW50ICYmIHZhbHVlWzFdID09PSB2YXJpYW50O1xuICAgIH07XG4gIH1cblxuICBpbXBvcnQgQ2xpZW50U2lkZVN0YXRlbWVudCA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQ7XG4gIGltcG9ydCBDbGllbnRTaWRlRXhwcmVzc2lvbiA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uO1xuXG4gIGV4cG9ydCB0eXBlIE9wZW5Db21wb25lbnRFbGVtZW50ICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHN0cmluZ107XG4gIGV4cG9ydCB0eXBlIE9wdGltaXplZEFwcGVuZCAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBVbm9wdGltaXplZEFwcGVuZCAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlVub3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBTdGF0aWNQYXJ0aWFsICAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlN0YXRpY1BhcnRpYWwsIHN0cmluZywgV2lyZUZvcm1hdC5Db3JlLkV2YWxJbmZvXTtcbiAgZXhwb3J0IHR5cGUgRHluYW1pY1BhcnRpYWwgICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5EeW5hbWljUGFydGlhbCwgV2lyZUZvcm1hdC5FeHByZXNzaW9uLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuXG4gIGV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbiAgICA9IFtDbGllbnRTaWRlRXhwcmVzc2lvbiwgT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8T3BhcXVlPl07XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8VD4gPSAoVk06IFB1YmxpY1ZNLCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpID0+IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8VD47XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZVN0YXRlbWVudCA9XG4gICAgfCBPcGVuQ29tcG9uZW50RWxlbWVudFxuICAgIHwgT3B0aW1pemVkQXBwZW5kXG4gICAgfCBVbm9wdGltaXplZEFwcGVuZFxuICAgIHwgU3RhdGljUGFydGlhbFxuICAgIHwgRHluYW1pY1BhcnRpYWxcbiAgICA7XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZUV4cHJlc3Npb24gPVxuICAgIHwgRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgO1xufVxuXG5jb25zdCB7IE9wcyB9ID0gV2lyZUZvcm1hdDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJhd0Jsb2NrPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZW52OiBFbnZpcm9ubWVudCwgcHJvdGVjdGVkIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgcHJpdmF0ZSBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdKSB7fVxuXG4gIHNjYW5TdGF0ZW1lbnRzKCk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10ge1xuICAgIGxldCBidWZmZXI6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10gPSBbXTtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc3RhdGVtZW50cztcbiAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgYnVmZmVyLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgY2hpbGQoYmxvY2s6IE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz4pOiBPcHRpb248UmF3SW5saW5lQmxvY2s+IHtcbiAgICBpZiAoIWJsb2NrKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKHRoaXMuZW52LCB0aGlzLm1ldGEsIGJsb2NrLnN0YXRlbWVudHMsIGJsb2NrLnBhcmFtZXRlcnMpO1xuICB9XG5cbiAgYWJzdHJhY3Qgc2NhbigpOiBDb21waWxhYmxlVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBSYXdJbmxpbmVCbG9jayBleHRlbmRzIFJhd0Jsb2NrPEJsb2NrU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBwcml2YXRlIHBhcmFtZXRlcnM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoZW52LCBtZXRhLCBzdGF0ZW1lbnRzKTtcbiAgfVxuXG4gIHNjYW4oKTogQmxvY2sge1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zY2FuU3RhdGVtZW50cygpO1xuICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzLCBtZXRhOiB0aGlzLm1ldGEgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhd1Byb2dyYW0gZXh0ZW5kcyBSYXdCbG9jazxQcm9ncmFtU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBwcml2YXRlIHN5bWJvbHM6IHN0cmluZ1tdLCBwcml2YXRlIGhhc0V2YWw6IGJvb2xlYW4pIHtcbiAgICBzdXBlcihlbnYsIG1ldGEsIHN0YXRlbWVudHMpO1xuICB9XG5cbiAgc2NhbigpOiBQcm9ncmFtIHtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc2NhblN0YXRlbWVudHMoKTtcbiAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IHN5bWJvbHM6IHRoaXMuc3ltYm9scywgaGFzRXZhbDogdGhpcy5oYXNFdmFsLCBtZXRhOiB0aGlzLm1ldGEgfSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdyQyxPQUFPLEVBQVUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUd2QyxPQUFPLEVBQ0wsVUFBVSxFQUNYLE1BQU0sb0JBQW9CLENBQUM7QUFJNUIsTUFBTSwyQkFBMkIsU0FBK0IsRUFBRSxPQUFzQjtJQUN0RixVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBT0QsTUFBTTtJQUlKLFlBQW1CLFVBQWtDLEVBQVMsV0FBYztRQUF6RCxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFHO1FBSHBFLG1CQUFjLEdBQW1DLElBQUksQ0FBQztRQUN0RCxvQkFBZSxHQUF1QyxJQUFJLENBQUM7SUFFWSxDQUFDO0lBRWhGLGFBQWEsQ0FBQyxHQUFnQjtRQUM1QixJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRTlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRTdFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxD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QUU1SSxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxNQUFNLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0csQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsIENvbXBpbGVkU3RhdGljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgT3Bjb2RlQnVpbGRlciBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBPcHRpb24sIEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgQmxvY2tTeW1ib2xUYWJsZSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVidWdTbGljZSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtcbiAgU1RBVEVNRU5UU1xufSBmcm9tICcuL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRTdGF0ZW1lbnQgPSBXaXJlRm9ybWF0LlN0YXRlbWVudCB8IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGUgfCBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXJndW1lbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudDogV2lyZUZvcm1hdC5TdGF0ZW1lbnQsIGJ1aWxkZXI6IE9wY29kZUJ1aWxkZXIpIHtcbiAgU1RBVEVNRU5UUy5jb21waWxlKHN0YXRlbWVudCwgYnVpbGRlcik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lZFRlbXBsYXRlPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb21waWxlU3RhdGljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZFN0YXRpY1RlbXBsYXRlO1xuICBjb21waWxlRHluYW1pYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBDb21waWxhYmxlVGVtcGxhdGU8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiBpbXBsZW1lbnRzIFNjYW5uZWRUZW1wbGF0ZTxTPiB7XG4gIHByaXZhdGUgY29tcGlsZWRTdGF0aWM6IE9wdGlvbjxDb21waWxlZFN0YXRpY1RlbXBsYXRlPiA9IG51bGw7XG4gIHByaXZhdGUgY29tcGlsZWREeW5hbWljOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHVibGljIHN5bWJvbFRhYmxlOiBTKSB7fVxuXG4gIGNvbXBpbGVTdGF0aWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkU3RhdGljVGVtcGxhdGUge1xuICAgIGxldCB7IGNvbXBpbGVkU3RhdGljIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjb21waWxlZFN0YXRpYykge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBjb21waWxlU3RhdGVtZW50cyh0aGlzLnN0YXRlbWVudHMsIHRoaXMuc3ltYm9sVGFibGUubWV0YSwgZW52KTtcblxuICAgICAgbGV0IHN0YXJ0ID0gYnVpbGRlci5zdGFydDtcbiAgICAgIGxldCBlbmQgPSBidWlsZGVyLmZpbmFsaXplKCk7XG5cbiAgICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgICAgY29tcGlsZWRTdGF0aWMgPSB0aGlzLmNvbXBpbGVkU3RhdGljID0gbmV3IENvbXBpbGVkU3RhdGljVGVtcGxhdGUoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkU3RhdGljO1xuICB9XG5cbiAgY29tcGlsZUR5bmFtaWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+IHtcbiAgICBsZXQgeyBjb21waWxlZER5bmFtaWMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNvbXBpbGVkRHluYW1pYykge1xuICAgICAgbGV0IHN0YXRpY0Jsb2NrID0gdGhpcy5jb21waWxlU3RhdGljKGVudik7XG4gICAgICBjb21waWxlZER5bmFtaWMgPSBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhdGljQmxvY2suc3RhcnQsIHN0YXRpY0Jsb2NrLmVuZCwgdGhpcy5zeW1ib2xUYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkRHluYW1pYztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4geyBHbGltbWVyRGVidWc6ICc8dGVtcGxhdGU+JyB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0gQ29tcGlsYWJsZVRlbXBsYXRlPFN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIFByb2dyYW0gPSBDb21waWxhYmxlVGVtcGxhdGU8UHJvZ3JhbVN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIEJsb2NrID0gQ29tcGlsYWJsZVRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5leHBvcnQgdHlwZSBTY2FubmVkUHJvZ3JhbSA9IFNjYW5uZWRUZW1wbGF0ZTxQcm9ncmFtU3ltYm9sVGFibGU+O1xuZXhwb3J0IHR5cGUgU2Nhbm5lZEJsb2NrID0gU2Nhbm5lZFRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5mdW5jdGlvbiBjb21waWxlU3RhdGVtZW50cyhzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgbGV0IGIgPSBidWlsZGVyKGVudiwgbWV0YSk7XG5cbiAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudCwgYik7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cblxuZXhwb3J0IGNvbnN0IEFUVFJTX0JMT0NLID0gJyZhdHRycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXlvdXQocHJlbHVkZTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgaGVhZDogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgYm9keTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgc3ltYm9sVGFibGU6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICBsZXQgWywgdGFnXSA9IHByZWx1ZGUucG9wKCkgYXMgV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLk9wZW5FbGVtZW50O1xuICBwcmVsdWRlLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5PcGVuQ29tcG9uZW50RWxlbWVudCwgdGFnXSk7XG4gIHByZWx1ZGUucHVzaChbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLkRpZENyZWF0ZUVsZW1lbnRdKTtcblxuICBsZXQgYXR0cnNTeW1ib2wgPSBzeW1ib2xUYWJsZS5zeW1ib2xzLmxlbmd0aCArIDE7XG4gIHN5bWJvbFRhYmxlLnN5bWJvbHMucHVzaChBVFRSU19CTE9DSyk7XG5cbiAgbGV0IHN0YXRlbWVudHMgPSBwcmVsdWRlXG4gICAgLmNvbmNhdChbW09wcy5ZaWVsZCwgYXR0cnNTeW1ib2wsIEVNUFRZX0FSUkFZXV0pXG4gICAgLmNvbmNhdChoZWFkKVxuICAgIC5jb25jYXQoYm9keSlcbiAgICAuY29uY2F0KFtbT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQsIENsaWVudFNpZGUuT3BzLkRpZFJlbmRlckxheW91dF1dKTtcblxuICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCBzeW1ib2xUYWJsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJsb2NrOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLCBwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIHNjYW5FbnRyeVBvaW50KG1ldGE6IENvbXBpbGF0aW9uTWV0YSk6IFByb2dyYW0ge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd1Byb2dyYW0oZW52LCBtZXRhLCBzdGF0ZW1lbnRzLCBibG9jay5zeW1ib2xzLCBibG9jay5oYXNFdmFsKS5zY2FuKCk7XG4gIH1cblxuICBzY2FuQmxvY2sobWV0YTogQ29tcGlsYXRpb25NZXRhKTogQmxvY2sge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKGVudiwgbWV0YSwgc3RhdGVtZW50cywgRU1QVFlfQVJSQVkpLnNjYW4oKTtcbiAgfVxuXG4gIHNjYW5MYXlvdXQobWV0YTogQ29tcGlsYXRpb25NZXRhLCBhdHRyczogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdKTogUHJvZ3JhbSB7XG4gICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgbGV0IHsgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG5cbiAgICBpZiAoIWJsb2NrLnByZWx1ZGUgfHwgIWJsb2NrLmhlYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBsYXlvdXQgbXVzdCBoYXZlIGEgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICB9XG5cbiAgICBsZXQgc3ltYm9sVGFibGUgPSB7IG1ldGEsIGhhc0V2YWwsIHN5bWJvbHMgfTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBwcmVsdWRlIH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBibG9jay5wcmVsdWRlLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG4gICAgbGV0IHsgc3RhdGVtZW50czogaGVhZCB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogWy4uLmF0dHJzLCAuLi5ibG9jay5oZWFkXSwgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuICAgIGxldCB7IHN0YXRlbWVudHM6IGJvZHkgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IGJsb2NrLnN0YXRlbWVudHMsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcblxuICAgIHJldHVybiBsYXlvdXQocHJlbHVkZSwgaGVhZCwgYm9keSwgc3ltYm9sVGFibGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FuQmxvY2soYmxvY2s6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpOiBCbG9jayB7XG4gIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2soZW52LCBtZXRhLCBibG9jay5zdGF0ZW1lbnRzLCBFTVBUWV9BUlJBWSkuc2NhbigpO1xufVxuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2xpZW50U2lkZSB7XG4gIGV4cG9ydCBlbnVtIE9wcyB7XG4gICAgT3BlbkNvbXBvbmVudEVsZW1lbnQsXG4gICAgRGlkQ3JlYXRlRWxlbWVudCxcbiAgICBEaWRSZW5kZXJMYXlvdXQsXG4gICAgT3B0aW1pemVkQXBwZW5kLFxuICAgIFVub3B0aW1pemVkQXBwZW5kLFxuICAgIFN0YXRpY1BhcnRpYWwsXG4gICAgRHluYW1pY1BhcnRpYWwsXG4gICAgTmVzdGVkQmxvY2ssXG4gICAgU2Nhbm5lZEJsb2NrLFxuXG4gICAgRnVuY3Rpb25FeHByZXNzaW9uXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXM8VCBleHRlbmRzIGFueVtdPih2YXJpYW50OiBPcHMpOiAodmFsdWU6IGFueVtdKSA9PiB2YWx1ZSBpcyBUIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWU6IGFueVtdKTogdmFsdWUgaXMgVCB7XG4gICAgICByZXR1cm4gdmFsdWVbMF0gPT09IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uIHx8IHZhbHVlWzBdID09PSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlU3RhdGVtZW50ICYmIHZhbHVlWzFdID09PSB2YXJpYW50O1xuICAgIH07XG4gIH1cblxuICBpbXBvcnQgQ2xpZW50U2lkZVN0YXRlbWVudCA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQ7XG4gIGltcG9ydCBDbGllbnRTaWRlRXhwcmVzc2lvbiA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uO1xuXG4gIGV4cG9ydCB0eXBlIE9wZW5Db21wb25lbnRFbGVtZW50ICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHN0cmluZ107XG4gIGV4cG9ydCB0eXBlIERpZENyZWF0ZUVsZW1lbnQgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuRGlkQ3JlYXRlRWxlbWVudF07XG4gIGV4cG9ydCB0eXBlIERpZFJlbmRlckxheW91dCAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuRGlkUmVuZGVyTGF5b3V0XTtcbiAgZXhwb3J0IHR5cGUgT3B0aW1pemVkQXBwZW5kICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5PcHRpbWl6ZWRBcHBlbmQsIFdpcmVGb3JtYXQuRXhwcmVzc2lvbiwgYm9vbGVhbl07XG4gIGV4cG9ydCB0eXBlIFVub3B0aW1pemVkQXBwZW5kICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuVW5vcHRpbWl6ZWRBcHBlbmQsIFdpcmVGb3JtYXQuRXhwcmVzc2lvbiwgYm9vbGVhbl07XG4gIGV4cG9ydCB0eXBlIFN0YXRpY1BhcnRpYWwgICAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuU3RhdGljUGFydGlhbCwgc3RyaW5nLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuICBleHBvcnQgdHlwZSBEeW5hbWljUGFydGlhbCAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLkR5bmFtaWNQYXJ0aWFsLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIFdpcmVGb3JtYXQuQ29yZS5FdmFsSW5mb107XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uICAgID0gW0NsaWVudFNpZGVFeHByZXNzaW9uLCBPcHMuRnVuY3Rpb25FeHByZXNzaW9uLCBGdW5jdGlvbkV4cHJlc3Npb25DYWxsYmFjazxPcGFxdWU+XTtcblxuICBleHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb25DYWxsYmFjazxUPiA9IChWTTogUHVibGljVk0sIHN5bWJvbFRhYmxlOiBTeW1ib2xUYWJsZSkgPT4gVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxUPjtcblxuICBleHBvcnQgdHlwZSBDbGllbnRTaWRlU3RhdGVtZW50ID1cbiAgICB8IE9wZW5Db21wb25lbnRFbGVtZW50XG4gICAgfCBEaWRDcmVhdGVFbGVtZW50XG4gICAgfCBEaWRSZW5kZXJMYXlvdXRcbiAgICB8IE9wdGltaXplZEFwcGVuZFxuICAgIHwgVW5vcHRpbWl6ZWRBcHBlbmRcbiAgICB8IFN0YXRpY1BhcnRpYWxcbiAgICB8IER5bmFtaWNQYXJ0aWFsXG4gICAgO1xuXG4gIGV4cG9ydCB0eXBlIENsaWVudFNpZGVFeHByZXNzaW9uID1cbiAgICB8IEZ1bmN0aW9uRXhwcmVzc2lvblxuICAgIDtcbn1cblxuY29uc3QgeyBPcHMgfSA9IFdpcmVGb3JtYXQ7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSYXdCbG9jazxTIGV4dGVuZHMgU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVudjogRW52aXJvbm1lbnQsIHByb3RlY3RlZCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHByaXZhdGUgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSkge31cblxuICBzY2FuU3RhdGVtZW50cygpOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdIHtcbiAgICBsZXQgYnVmZmVyOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdID0gW107XG4gICAgbGV0IHN0YXRlbWVudHMgPSB0aGlzLnN0YXRlbWVudHM7XG4gICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGNoaWxkKGJsb2NrOiBPcHRpb248V2lyZUZvcm1hdC5TZXJpYWxpemVkSW5saW5lQmxvY2s+KTogT3B0aW9uPFJhd0lubGluZUJsb2NrPiB7XG4gICAgaWYgKCFibG9jaykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBSYXdJbmxpbmVCbG9jayh0aGlzLmVudiwgdGhpcy5tZXRhLCBibG9jay5zdGF0ZW1lbnRzLCBibG9jay5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIGFic3RyYWN0IHNjYW4oKTogQ29tcGlsYWJsZVRlbXBsYXRlPFM+O1xufVxuXG5leHBvcnQgY2xhc3MgUmF3SW5saW5lQmxvY2sgZXh0ZW5kcyBSYXdCbG9jazxCbG9ja1N5bWJvbFRhYmxlPiB7XG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHJpdmF0ZSBwYXJhbWV0ZXJzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKGVudiwgbWV0YSwgc3RhdGVtZW50cyk7XG4gIH1cblxuICBzY2FuKCk6IEJsb2NrIHtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc2NhblN0YXRlbWVudHMoKTtcbiAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycywgbWV0YTogdGhpcy5tZXRhIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYXdQcm9ncmFtIGV4dGVuZHMgUmF3QmxvY2s8UHJvZ3JhbVN5bWJvbFRhYmxlPiB7XG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHJpdmF0ZSBzeW1ib2xzOiBzdHJpbmdbXSwgcHJpdmF0ZSBoYXNFdmFsOiBib29sZWFuKSB7XG4gICAgc3VwZXIoZW52LCBtZXRhLCBzdGF0ZW1lbnRzKTtcbiAgfVxuXG4gIHNjYW4oKTogUHJvZ3JhbSB7XG4gICAgbGV0IHN0YXRlbWVudHMgPSB0aGlzLnNjYW5TdGF0ZW1lbnRzKCk7XG4gICAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgeyBzeW1ib2xzOiB0aGlzLnN5bWJvbHMsIGhhc0V2YWw6IHRoaXMuaGFzRXZhbCwgbWV0YTogdGhpcy5tZXRhIH0pO1xuICB9XG59XG4iXX0=

@@ -0,1 +1,2 @@

import { Register } from '../opcodes';
import { Scope } from '../environment';

@@ -9,41 +10,47 @@ import { Stack, LinkedList, ListSlice, expect } from '@glimmer/util';

export class EvaluationStack {
constructor(stack = []) {
constructor(stack, fp, sp) {
this.stack = stack;
this.fp = fp;
this.sp = sp;
Object.seal(this);
}
get pos() {
return this.stack.length;
static empty() {
return new this([], 0, -1);
}
snapshot(args = 0) {
return new EvaluationStack(this.stack.slice(-args));
static restore(snapshot) {
return new this(snapshot.slice(), 0, snapshot.length - 1);
}
restore(bp) {
this.stack.length = bp;
return this.pop();
isEmpty() {
return this.sp === -1;
}
set(pos, value) {
this.stack[pos] = value;
push(value) {
this.stack[++this.sp] = value;
}
get(pos) {
return this.stack[pos];
dup(position = this.sp) {
this.push(this.stack[position]);
}
push(value) {
this.stack.push(value);
pop(n = 1) {
let top = this.stack[this.sp];
this.sp -= n;
return top;
}
dup() {
this.push(this.fromTop(0));
peek() {
return this.stack[this.sp];
}
pop() {
return this.stack.pop();
fromBase(offset) {
return this.stack[this.fp - offset];
}
top() {
return this.stack[this.stack.length - 1];
fromTop(offset) {
return this.stack[this.sp - offset];
}
fromTop(pos) {
return this.stack[this.stack.length - 1 - pos];
capture(items) {
let end = this.sp + 1;
let start = end - items;
return this.stack.slice(start, end);
}
slice(count) {
return this.stack.slice(this.stack.length - count);
toArray() {
return this.stack.slice(this.fp, this.sp + 1);
}
}
let i = 0;
export default class VM {

@@ -55,8 +62,13 @@ constructor(env, scope, dynamicScope, elementStack) {

this.scopeStack = new Stack();
this.bp = 0;
this.updatingOpcodeStack = new Stack();
this.cacheGroups = new Stack();
this.listBlockStack = new Stack();
this.frames = [];
this.evalStack = new EvaluationStack();
this.stack = EvaluationStack.empty();
/** Registers **/
this.pc = -1;
this.ra = -1;
this.s0 = null;
this.s1 = null;
this.t0 = null;
this.t1 = null;
this.env = env;

@@ -68,14 +80,70 @@ this.constants = env.constants;

}
get fp() {
return this.stack.fp;
}
set fp(fp) {
this.stack.fp = fp;
}
get sp() {
return this.stack.sp;
}
set sp(sp) {
this.stack.sp = sp;
}
// Fetch a value from a register onto the stack
fetch(register) {
this.stack.push(this[Register[register]]);
}
// Load a value from the stack into a register
load(register) {
this[Register[register]] = this.stack.pop();
}
// Fetch a value from a register
fetchValue(register) {
return this[Register[register]];
}
// Load a value into a register
loadValue(register, value) {
this[Register[register]] = value;
}
// Start a new frame and save $ra and $fp on the stack
pushFrame() {
this.stack.push(this.ra);
this.stack.push(this.fp);
this.fp = this.sp - 1;
// this.fp = this.sp + 1;
}
// Restore $ra, $sp and $fp
popFrame() {
this.sp = this.fp - 1;
this.ra = this.stack.fromBase(0);
this.fp = this.stack.fromBase(-1);
}
// Jump to an address in `program`
goto(pc) {
this.pc = pc;
}
// Save $pc into $ra, then jump to a new address in `program` (jal in MIPS)
call(pc) {
this.ra = this.pc;
this.pc = pc;
}
// Put a specific `program` address in $ra
returnTo(ra) {
this.ra = ra;
}
// Return to the `program` address stored in $ra
return() {
if (this.pc === (this.ra + 4)) {
throw "ZOMG";
}
this.pc = this.ra;
}
static initial(env, self, dynamicScope, elementStack, program) {
let scope = Scope.root(self, program.symbolTable.symbols.length);
let vm = new VM(env, scope, dynamicScope, elementStack);
vm.prepare(program.start);
vm.pc = program.start;
vm.updatingOpcodeStack.push(new LinkedList());
return vm;
}
get ip() {
return this.frames[this.frames.length - 1];
}
set ip(val) {
this.frames[this.frames.length - 1] = val;
}
capture(args) {

@@ -86,27 +154,5 @@ return {

dynamicScope: this.dynamicScope(),
stack: this.evalStack.snapshot(args),
bp: this.bp
stack: this.stack.capture(args)
};
}
reserveLocals(size) {
let { evalStack: stack, bp } = this;
stack.push(bp);
this.bp = stack.pos;
for (let i = 0; i < size; i++) {
stack.push(null);
}
}
releaseLocals() {
let { evalStack: stack, bp } = this;
this.bp = stack.restore(bp);
}
setLocal(position, value) {
this.evalStack.set(this.bp + position, value);
}
getLocal(position) {
return this.evalStack.get(this.bp + position);
}
goto(ip) {
this.ip = ip;
}
beginCacheGroup() {

@@ -133,22 +179,19 @@ this.cacheGroups.push(this.updating().tail());

}
enter(args, start, end) {
enter(args) {
let updating = new LinkedList();
let state = this.capture(args);
let tracker = this.stack().pushUpdatableBlock();
let tryOpcode = new TryOpcode(start, end, state, tracker, updating);
let ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
let tracker = this.elements().pushUpdatableBlock();
let tryOpcode = new TryOpcode(this.pc, state, tracker, updating);
this.didEnter(tryOpcode);
}
iterate(start, end, memo, value, updating = new LinkedList()) {
let stack = this.evalStack;
iterate(memo, value, updating = new LinkedList()) {
let stack = this.stack;
stack.push(value);
stack.push(memo);
let state = this.capture(2);
let tracker = this.stack().pushUpdatableBlock();
let ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
return new TryOpcode(start, end, state, tracker, updating);
let tracker = this.elements().pushUpdatableBlock();
// let ip = this.ip;
// this.ip = end + 4;
// this.frames.push(ip);
return new TryOpcode(this.pc, state, tracker, updating);
}

@@ -159,8 +202,8 @@ enterItem(key, opcode) {

}
enterList(start, end) {
enterList(start) {
let updating = new LinkedList();
let state = this.capture(1);
let tracker = this.stack().pushBlockList(updating);
let artifacts = this.evalStack.top().artifacts;
let opcode = new ListBlockOpcode(start, end, state, tracker, updating, artifacts);
let state = this.capture(0);
let tracker = this.elements().pushBlockList(updating);
let artifacts = this.stack.peek().artifacts;
let opcode = new ListBlockOpcode(start, state, tracker, updating, artifacts);
this.listBlockStack.push(opcode);

@@ -174,17 +217,9 @@ this.didEnter(opcode);

exit() {
this.frames.pop();
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
let parent = this.updating().tail();
parent.didInitializeChildren();
}
this.elements().popBlock();
this.updatingOpcodeStack.pop();
let parent = this.updating().tail();
parent.didInitializeChildren();
}
exitList() {
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
let parent = this.updating().tail();
parent.didInitializeChildren();
}
this.exit();
this.listBlockStack.pop();

@@ -201,3 +236,3 @@ }

}
stack() {
elements() {
return this.elementStack;

@@ -211,8 +246,2 @@ }

}
pushFrame(block) {
this.frames.push(block.start);
}
pushEvalFrame(start) {
this.frames.push(start);
}
pushChildScope() {

@@ -244,3 +273,3 @@ this.scopeStack.push(this.scope().child());

newDestroyable(d) {
this.stack().newDestroyable(d);
this.elements().newDestroyable(d);
}

@@ -255,10 +284,6 @@ /// SCOPE HELPERS

/// EXECUTION
resume(start, stack, bp) {
return this.execute(start, vm => {
vm.evalStack = stack;
vm.bp = bp;
});
}
execute(start, initialize) {
this.prepare(start, initialize);
this.pc = start;
if (initialize)
initialize(this);
let result;

@@ -272,13 +297,8 @@ while (true) {

}
prepare(start, initialize) {
let { elementStack, frames, updatingOpcodeStack } = this;
elementStack.pushSimpleBlock();
updatingOpcodeStack.push(new LinkedList());
frames.push(start);
if (initialize)
initialize(this);
}
next() {
let { env, updatingOpcodeStack, elementStack } = this;
let opcode;
if (i++ > 100000) {
throw "zomg";
}
if (opcode = this.nextStatement(env)) {

@@ -293,13 +313,10 @@ APPEND_OPCODES.evaluate(this, opcode, opcode.type);

}
return() {
this.frames.pop();
}
nextStatement(env) {
if (this.frames.length === 0) {
let { pc } = this;
if (pc === -1) {
return null;
}
let { ip } = this;
let program = env.program;
this.ip += 4;
return program.opcode(ip);
this.pc += 4;
return program.opcode(pc);
}

@@ -309,11 +326,2 @@ evaluateOpcode(opcode) {

}
invoke(compiled) {
this.pushFrame(compiled);
}
// Make sure you have opcodes that push and pop a scope around this opcode
// if you need to change the scope.
invokeBlock(block) {
let compiled = block.compileStatic(this.env);
this.invoke(compiled);
}
bindDynamicScope(names) {

@@ -323,6 +331,6 @@ let scope = this.dynamicScope();

let name = this.constants.getString(names[i]);
scope.set(name, this.evalStack.pop());
scope.set(name, this.stack.pop());
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQXFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUUsT0FBTyxFQUF1QixLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUE0RCxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9GLE9BQU8sRUFBVyxlQUFlLEVBQUUsU0FBUyxFQUFlLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFDTCxjQUFjLEVBRWYsTUFBTSxZQUFZLENBQUM7QUFjcEIsTUFBTTtJQUNKLFlBQW9CLFFBQWtCLEVBQUU7UUFBcEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUNmLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFVO1FBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQWE7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QUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQXVCO1FBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoQyxHQUFHLENBQUEsQ0FBQyxJQUFJLENBQUMsR0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQWtDLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NvcGUsIER5bmFtaWNTY29wZSwgRW52aXJvbm1lbnQsIE9wY29kZSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVsZW1lbnRTdGFjayB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgT3B0aW9uLCBEZXN0cm95YWJsZSwgU3RhY2ssIExpbmtlZExpc3QsIExpc3RTbGljZSwgT3BhcXVlLCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFJlZmVyZW5jZUl0ZXJhdG9yLCBQYXRoUmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlLCBjb21iaW5lU2xpY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljUHJvZ3JhbSwgT3BTbGljZSB9IGZyb20gJy4uL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4uL3NjYW5uZXInO1xuaW1wb3J0IHsgTGFiZWxPcGNvZGUsIEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlLCBEaWRNb2RpZnlPcGNvZGUgfSBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL3ZtJztcbmltcG9ydCB7IFZNU3RhdGUsIExpc3RCbG9ja09wY29kZSwgVHJ5T3Bjb2RlLCBCbG9ja09wY29kZSB9IGZyb20gJy4vdXBkYXRlJztcbmltcG9ydCBSZW5kZXJSZXN1bHQgZnJvbSAnLi9yZW5kZXItcmVzdWx0JztcblxuaW1wb3J0IHtcbiAgQVBQRU5EX09QQ09ERVMsXG4gIFVwZGF0aW5nT3Bjb2RlXG59IGZyb20gJy4uL29wY29kZXMnO1xuXG5pbXBvcnQge1xuICBDb25zdGFudHMsXG4gIENvbnN0YW50U3RyaW5nXG59IGZyb20gJy4uL2Vudmlyb25tZW50L2NvbnN0YW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljVk0ge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBkeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlO1xuICBnZXRTZWxmKCk6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPjtcbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRXZhbHVhdGlvblN0YWNrIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGFjazogT3BhcXVlW10gPSBbXSkge1xuICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICB9XG5cbiAgZ2V0IHBvcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5sZW5ndGg7XG4gIH1cblxuICBzbmFwc2hvdChhcmdzID0gMCk6IEV2YWx1YXRpb25TdGFjayB7XG4gICAgcmV0dXJuIG5ldyBFdmFsdWF0aW9uU3RhY2sodGhpcy5zdGFjay5zbGljZSgtYXJncykpO1xuICB9XG5cbiAgcmVzdG9yZShicDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IGJwO1xuICAgIHJldHVybiB0aGlzLnBvcDxudW1iZXI+KCk7XG4gIH1cblxuICBzZXQocG9zOiBudW1iZXIsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICB0aGlzLnN0YWNrW3Bvc10gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldChwb3M6IG51bWJlcik6IE9wYXF1ZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbcG9zXTtcbiAgfVxuXG4gIHB1c2godmFsdWU6IE9wYXF1ZSk6IHZvaWQge1xuICAgIHRoaXMuc3RhY2sucHVzaCh2YWx1ZSk7XG4gIH1cblxuICBkdXAoKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKHRoaXMuZnJvbVRvcCgwKSk7XG4gIH1cblxuICBwb3A8VD4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2sucG9wKCkgYXMgVDtcbiAgfVxuXG4gIHRvcDxUPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdIGFzIFQ7XG4gIH1cblxuICBmcm9tVG9wPFQ+KHBvczogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxIC0gcG9zXSBhcyBUO1xuICB9XG5cbiAgc2xpY2U8VCBleHRlbmRzIE9wYXF1ZVtdPihjb3VudDogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc2xpY2UodGhpcy5zdGFjay5sZW5ndGggLSBjb3VudCkgYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBJdGVyYXRvclJlc3VsdDxUPiA9IHtcbiAgZG9uZTogZmFsc2U7XG4gIHZhbHVlOiBudWxsO1xufSB8IHtcbiAgZG9uZTogdHJ1ZTtcbiAgdmFsdWU6IFQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWTSBpbXBsZW1lbnRzIFB1YmxpY1ZNIHtcbiAgcHJpdmF0ZSBkeW5hbWljU2NvcGVTdGFjayA9IG5ldyBTdGFjazxEeW5hbWljU2NvcGU+KCk7XG4gIHByaXZhdGUgc2NvcGVTdGFjayA9IG5ldyBTdGFjazxTY29wZT4oKTtcbiAgcHJpdmF0ZSBicCA9IDA7XG4gIHB1YmxpYyB1cGRhdGluZ09wY29kZVN0YWNrID0gbmV3IFN0YWNrPExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+PigpO1xuICBwdWJsaWMgY2FjaGVHcm91cHMgPSBuZXcgU3RhY2s8T3B0aW9uPFVwZGF0aW5nT3Bjb2RlPj4oKTtcbiAgcHVibGljIGxpc3RCbG9ja1N0YWNrID0gbmV3IFN0YWNrPExpc3RCbG9ja09wY29kZT4oKTtcbiAgcHVibGljIGZyYW1lczogbnVtYmVyW10gPSBbXTtcbiAgcHVibGljIGNvbnN0YW50czogQ29uc3RhbnRzO1xuICBwdWJsaWMgZXZhbFN0YWNrID0gbmV3IEV2YWx1YXRpb25TdGFjaygpO1xuXG4gIHN0YXRpYyBpbml0aWFsKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICAgc2VsZjogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICAgIGVsZW1lbnRTdGFjazogRWxlbWVudFN0YWNrLFxuICAgIHByb2dyYW06IENvbXBpbGVkRHluYW1pY1Byb2dyYW1cbiAgKSB7XG4gICAgbGV0IHNjb3BlID0gU2NvcGUucm9vdChzZWxmLCBwcm9ncmFtLnN5bWJvbFRhYmxlLnN5bWJvbHMubGVuZ3RoKTtcbiAgICBsZXQgdm0gPSBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICAgIHZtLnByZXBhcmUocHJvZ3JhbS5zdGFydCk7XG4gICAgcmV0dXJuIHZtO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVudjogRW52aXJvbm1lbnQsXG4gICAgc2NvcGU6IFNjb3BlLFxuICAgIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICAgIHByaXZhdGUgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2ssXG4gICkge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuY29uc3RhbnRzID0gZW52LmNvbnN0YW50cztcbiAgICB0aGlzLmVsZW1lbnRTdGFjayA9IGVsZW1lbnRTdGFjaztcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChzY29wZSk7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGR5bmFtaWNTY29wZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZyYW1lc1t0aGlzLmZyYW1lcy5sZW5ndGggLSAxXSE7XG4gIH1cblxuICBwcml2YXRlIHNldCBpcCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVzLmxlbmd0aCAtIDFdID0gdmFsO1xuICB9XG5cbiAgY2FwdHVyZShhcmdzOiBudW1iZXIpOiBWTVN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlKCksXG4gICAgICBkeW5hbWljU2NvcGU6IHRoaXMuZHluYW1pY1Njb3BlKCksXG4gICAgICBzdGFjazogdGhpcy5ldmFsU3RhY2suc25hcHNob3QoYXJncyksXG4gICAgICBicDogdGhpcy5icFxuICAgIH07XG4gIH1cblxuICByZXNlcnZlTG9jYWxzKHNpemU6IG51bWJlcikge1xuICAgIGxldCB7IGV2YWxTdGFjazogc3RhY2ssIGJwIH0gPSB0aGlzO1xuXG4gICAgc3RhY2sucHVzaChicCk7XG4gICAgdGhpcy5icCA9IHN0YWNrLnBvcztcblxuICAgIGZvciAobGV0IGk9MDsgaTxzaXplOyBpKyspIHtcbiAgICAgIHN0YWNrLnB1c2gobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcmVsZWFzZUxvY2FscygpIHtcbiAgICBsZXQgeyBldmFsU3RhY2s6IHN0YWNrLCBicCB9ID0gdGhpcztcbiAgICB0aGlzLmJwID0gc3RhY2sucmVzdG9yZShicCk7XG4gIH1cblxuICBzZXRMb2NhbChwb3NpdGlvbjogbnVtYmVyLCB2YWx1ZTogT3BhcXVlKSB7XG4gICAgdGhpcy5ldmFsU3RhY2suc2V0KHRoaXMuYnAgKyBwb3NpdGlvbiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0TG9jYWw8VD4ocG9zaXRpb246IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLmV2YWxTdGFjay5nZXQodGhpcy5icCArIHBvc2l0aW9uKSBhcyBUO1xuICB9XG5cbiAgZ290byhpcDogbnVtYmVyKSB7XG4gICAgdGhpcy5pcCA9IGlwO1xuICB9XG5cbiAgYmVnaW5DYWNoZUdyb3VwKCkge1xuICAgIHRoaXMuY2FjaGVHcm91cHMucHVzaCh0aGlzLnVwZGF0aW5nKCkudGFpbCgpKTtcbiAgfVxuXG4gIGNvbW1pdENhY2hlR3JvdXAoKSB7XG4gICAgLy8gICAgICAgIEp1bXBJZk5vdE1vZGlmaWVkKEVORClcbiAgICAvLyAgICAgICAgKGhlYWQpXG4gICAgLy8gICAgICAgICguLi4uKVxuICAgIC8vICAgICAgICAodGFpbClcbiAgICAvLyAgICAgICAgRGlkTW9kaWZ5XG4gICAgLy8gRU5EOiAgIE5vb3BcblxuICAgIGxldCBFTkQgPSBuZXcgTGFiZWxPcGNvZGUoXCJFTkRcIik7XG5cbiAgICBsZXQgb3Bjb2RlcyA9IHRoaXMudXBkYXRpbmcoKTtcbiAgICBsZXQgbWFya2VyID0gdGhpcy5jYWNoZUdyb3Vwcy5wb3AoKTtcbiAgICBsZXQgaGVhZCA9IG1hcmtlciA/IG9wY29kZXMubmV4dE5vZGUobWFya2VyKSA6IG9wY29kZXMuaGVhZCgpO1xuICAgIGxldCB0YWlsID0gb3Bjb2Rlcy50YWlsKCk7XG4gICAgbGV0IHRhZyA9IGNvbWJpbmVTbGljZShuZXcgTGlzdFNsaWNlKGhlYWQsIHRhaWwpKTtcblxuICAgIGxldCBndWFyZCA9IG5ldyBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSh0YWcsIEVORCk7XG5cbiAgICBvcGNvZGVzLmluc2VydEJlZm9yZShndWFyZCwgaGVhZCk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQobmV3IERpZE1vZGlmeU9wY29kZShndWFyZCkpO1xuICAgIG9wY29kZXMuYXBwZW5kKEVORCk7XG4gIH1cblxuICBlbnRlcihhcmdzOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoYXJncyk7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLnN0YWNrKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG5cbiAgICBsZXQgdHJ5T3Bjb2RlID0gbmV3IFRyeU9wY29kZShzdGFydCwgZW5kLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcpO1xuXG4gICAgbGV0IGlwID0gdGhpcy5pcDtcbiAgICB0aGlzLmlwID0gZW5kICsgNDtcbiAgICB0aGlzLmZyYW1lcy5wdXNoKGlwKTtcblxuICAgIHRoaXMuZGlkRW50ZXIodHJ5T3Bjb2RlKTtcbiAgfVxuXG4gIGl0ZXJhdGUoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIG1lbW86IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgdmFsdWU6IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKSk6IFRyeU9wY29kZSB7XG4gICAgbGV0IHN0YWNrID0gdGhpcy5ldmFsU3RhY2s7XG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgc3RhY2sucHVzaChtZW1vKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgyKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuc3RhY2soKS5wdXNoVXBkYXRhYmxlQmxvY2soKTtcblxuICAgIGxldCBpcCA9IHRoaXMuaXA7XG4gICAgdGhpcy5pcCA9IGVuZCArIDQ7XG4gICAgdGhpcy5mcmFtZXMucHVzaChpcCk7XG5cbiAgICByZXR1cm4gbmV3IFRyeU9wY29kZShzdGFydCwgZW5kLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcpO1xuICB9XG5cbiAgZW50ZXJJdGVtKGtleTogc3RyaW5nLCBvcGNvZGU6IFRyeU9wY29kZSkge1xuICAgIHRoaXMubGlzdEJsb2NrKCkubWFwW2tleV0gPSBvcGNvZGU7XG4gICAgdGhpcy5kaWRFbnRlcihvcGNvZGUpO1xuICB9XG5cbiAgZW50ZXJMaXN0KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8QmxvY2tPcGNvZGU+KCk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoMSk7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLnN0YWNrKCkucHVzaEJsb2NrTGlzdCh1cGRhdGluZyk7XG4gICAgbGV0IGFydGlmYWN0cyA9IHRoaXMuZXZhbFN0YWNrLnRvcDxSZWZlcmVuY2VJdGVyYXRvcj4oKS5hcnRpZmFjdHM7XG5cbiAgICBsZXQgb3Bjb2RlID0gbmV3IExpc3RCbG9ja09wY29kZShzdGFydCwgZW5kLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcsIGFydGlmYWN0cyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnB1c2gob3Bjb2RlKTtcblxuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlkRW50ZXIob3Bjb2RlOiBCbG9ja09wY29kZSkge1xuICAgIHRoaXMudXBkYXRlV2l0aChvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKG9wY29kZS5jaGlsZHJlbik7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuZnJhbWVzLnBvcCgpO1xuXG4gICAgaWYgKHRoaXMuZnJhbWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGFjaygpLnBvcEJsb2NrKCk7XG4gICAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCk7XG5cbiAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnVwZGF0aW5nKCkudGFpbCgpIGFzIEJsb2NrT3Bjb2RlO1xuXG4gICAgICBwYXJlbnQuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gICAgfVxuICB9XG5cbiAgZXhpdExpc3QoKSB7XG4gICAgaWYgKHRoaXMuZnJhbWVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGFjaygpLnBvcEJsb2NrKCk7XG4gICAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCk7XG5cbiAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnVwZGF0aW5nKCkudGFpbCgpIGFzIEJsb2NrT3Bjb2RlO1xuXG4gICAgICBwYXJlbnQuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5saXN0QmxvY2tTdGFjay5wb3AoKTtcbiAgfVxuXG4gIHVwZGF0ZVdpdGgob3Bjb2RlOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMudXBkYXRpbmcoKS5hcHBlbmQob3Bjb2RlKTtcbiAgfVxuXG4gIGxpc3RCbG9jaygpOiBMaXN0QmxvY2tPcGNvZGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5saXN0QmxvY2tTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgYSBsaXN0IGJsb2NrJyk7XG4gIH1cblxuICB1cGRhdGluZygpOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIHVwZGF0aW5nIG9wY29kZSBvbiB0aGUgdXBkYXRpbmcgb3Bjb2RlIHN0YWNrJyk7XG4gIH1cblxuICBzdGFjaygpOiBFbGVtZW50U3RhY2sge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRTdGFjaztcbiAgfVxuXG4gIHNjb3BlKCk6IFNjb3BlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuc2NvcGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgc2NvcGUgb24gdGhlIHNjb3BlIHN0YWNrJyk7XG4gIH1cblxuICBkeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZHluYW1pY1Njb3BlU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIGR5bmFtaWMgc2NvcGUgb24gdGhlIGR5bmFtaWMgc2NvcGUgc3RhY2snKTtcbiAgfVxuXG4gIHB1c2hGcmFtZShibG9jazogT3BTbGljZSkge1xuICAgIHRoaXMuZnJhbWVzLnB1c2goYmxvY2suc3RhcnQpO1xuICB9XG5cbiAgcHVzaEV2YWxGcmFtZShzdGFydDogbnVtYmVyKSB7XG4gICAgdGhpcy5mcmFtZXMucHVzaChzdGFydCk7XG4gIH1cblxuICBwdXNoQ2hpbGRTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaCh0aGlzLnNjb3BlKCkuY2hpbGQoKSk7XG4gIH1cblxuICBwdXNoQ2FsbGVyU2NvcGUoY2hpbGRTY29wZSA9IGZhbHNlKSB7XG4gICAgbGV0IGNhbGxlclNjb3BlID0gZXhwZWN0KHRoaXMuc2NvcGUoKS5nZXRDYWxsZXJTY29wZSgpLCAncHVzaENhbGxlclNjb3BlIGlzIGNhbGxlZCB3aGVuIGEgY2FsbGVyIHNjb3BlIGlzIHByZXNlbnQnKTtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChjaGlsZFNjb3BlID8gY2FsbGVyU2NvcGUuY2hpbGQoKSA6IGNhbGxlclNjb3BlKTtcbiAgfVxuXG4gIHB1c2hEeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlIHtcbiAgICBsZXQgY2hpbGQgPSB0aGlzLmR5bmFtaWNTY29wZSgpLmNoaWxkKCk7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGNoaWxkKTtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICBwdXNoUm9vdFNjb3BlKHNpemU6IG51bWJlciwgYmluZENhbGxlcjogYm9vbGVhbik6IFNjb3BlIHtcbiAgICBsZXQgc2NvcGUgPSBTY29wZS5zaXplZChzaXplKTtcbiAgICBpZiAoYmluZENhbGxlcikgc2NvcGUuYmluZENhbGxlclNjb3BlKHRoaXMuc2NvcGUoKSk7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goc2NvcGUpO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIHBvcFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIHBvcER5bmFtaWNTY29wZSgpIHtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLnN0YWNrKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICAvLy8gU0NPUEUgSEVMUEVSU1xuXG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFNlbGYoKTtcbiAgfVxuXG4gIHJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2w6IG51bWJlcik6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIC8vLyBFWEVDVVRJT05cblxuICByZXN1bWUoc3RhcnQ6IG51bWJlciwgc3RhY2s6IEV2YWx1YXRpb25TdGFjaywgYnA6IG51bWJlcik6IFJlbmRlclJlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShzdGFydCwgdm0gPT4ge1xuICAgICAgdm0uZXZhbFN0YWNrID0gc3RhY2s7XG4gICAgICB2bS5icCA9IGJwO1xuICAgIH0pO1xuICB9XG5cbiAgZXhlY3V0ZShzdGFydDogbnVtYmVyLCBpbml0aWFsaXplPzogKHZtOiBWTSkgPT4gdm9pZCk6IFJlbmRlclJlc3VsdCB7XG4gICAgdGhpcy5wcmVwYXJlKHN0YXJ0LCBpbml0aWFsaXplKTtcbiAgICBsZXQgcmVzdWx0OiBJdGVyYXRvclJlc3VsdDxSZW5kZXJSZXN1bHQ+O1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubmV4dCgpO1xuICAgICAgaWYgKHJlc3VsdC5kb25lKSBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlIGFzIFJlbmRlclJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZShzdGFydDogbnVtYmVyLCBpbml0aWFsaXplPzogKHZtOiBWTSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCB7IGVsZW1lbnRTdGFjaywgZnJhbWVzLCB1cGRhdGluZ09wY29kZVN0YWNrIH0gPSB0aGlzO1xuXG4gICAgZWxlbWVudFN0YWNrLnB1c2hTaW1wbGVCbG9jaygpO1xuXG4gICAgdXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTtcblxuICAgIGZyYW1lcy5wdXNoKHN0YXJ0KTtcblxuICAgIGlmIChpbml0aWFsaXplKSBpbml0aWFsaXplKHRoaXMpO1xuICB9XG5cbiAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxSZW5kZXJSZXN1bHQ+IHtcbiAgICBsZXQgeyBlbnYsIHVwZGF0aW5nT3Bjb2RlU3RhY2ssIGVsZW1lbnRTdGFjayB9ID0gdGhpcztcbiAgICBsZXQgb3Bjb2RlOiBPcHRpb248T3Bjb2RlPjtcblxuICAgIGlmIChvcGNvZGUgPSB0aGlzLm5leHRTdGF0ZW1lbnQoZW52KSkge1xuICAgICAgQVBQRU5EX09QQ09ERVMuZXZhbHVhdGUodGhpcywgb3Bjb2RlLCBvcGNvZGUudHlwZSk7XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG51bGwgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXcgUmVuZGVyUmVzdWx0KFxuICAgICAgICBlbnYsXG4gICAgICAgIGV4cGVjdCh1cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpLCAndGhlcmUgc2hvdWxkIGJlIGEgZmluYWwgdXBkYXRpbmcgb3Bjb2RlIHN0YWNrJyksXG4gICAgICAgIGVsZW1lbnRTdGFjay5wb3BCbG9jaygpXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybigpOiB2b2lkIHtcbiAgICB0aGlzLmZyYW1lcy5wb3AoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dFN0YXRlbWVudChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPE9wY29kZT4ge1xuICAgIGlmICh0aGlzLmZyYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCB7IGlwIH0gPSB0aGlzO1xuICAgIGxldCBwcm9ncmFtID0gZW52LnByb2dyYW07XG4gICAgdGhpcy5pcCArPSA0O1xuICAgIHJldHVybiBwcm9ncmFtLm9wY29kZShpcCk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IE9wY29kZSkge1xuICAgIEFQUEVORF9PUENPREVTLmV2YWx1YXRlKHRoaXMsIG9wY29kZSwgb3Bjb2RlLnR5cGUpO1xuICB9XG5cbiAgaW52b2tlKGNvbXBpbGVkOiBPcFNsaWNlKSB7XG4gICAgdGhpcy5wdXNoRnJhbWUoY29tcGlsZWQpO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHlvdSBoYXZlIG9wY29kZXMgdGhhdCBwdXNoIGFuZCBwb3AgYSBzY29wZSBhcm91bmQgdGhpcyBvcGNvZGVcbiAgLy8gaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBzY29wZS5cbiAgaW52b2tlQmxvY2soYmxvY2s6IFRlbXBsYXRlKSB7XG4gICAgbGV0IGNvbXBpbGVkID0gYmxvY2suY29tcGlsZVN0YXRpYyh0aGlzLmVudik7XG4gICAgdGhpcy5pbnZva2UoY29tcGlsZWQpO1xuICB9XG5cbiAgYmluZER5bmFtaWNTY29wZShuYW1lczogQ29uc3RhbnRTdHJpbmdbXSkge1xuICAgIGxldCBzY29wZSA9IHRoaXMuZHluYW1pY1Njb3BlKCk7XG5cbiAgICBmb3IobGV0IGk9bmFtZXMubGVuZ3RoIC0gMTsgaT49MDsgaS0tKSB7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuY29uc3RhbnRzLmdldFN0cmluZyhuYW1lc1tpXSk7XG4gICAgICBzY29wZS5zZXQobmFtZSwgdGhpcy5ldmFsU3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBcUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQXVCLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUE0RCxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RyxPQUFPLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9GLE9BQU8sRUFBVyxlQUFlLEVBQUUsU0FBUyxFQUFlLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFDTCxjQUFjLEVBRWYsTUFBTSxZQUFZLENBQUM7QUFnQnBCLE1BQU07SUFTSixZQUFvQixLQUFlLEVBQVMsRUFBVSxFQUFTLEVBQVU7UUFBckQsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUFTLE9BQUUsR0FBRixFQUFFLENBQVE7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQVZELE1BQU0sQ0FBQyxLQUFLO1FBQ1YsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUF1QjtRQUNwQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVE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O1lBQ3RDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFrQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZ2lzdGVyIH0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCwgT3Bjb2RlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPcHRpb24sIERlc3Ryb3lhYmxlLCBTdGFjaywgTGlua2VkTGlzdCwgTGlzdFNsaWNlLCBPcGFxdWUsIGFzc2VydCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBSZWZlcmVuY2VJdGVyYXRvciwgUGF0aFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSwgY29tYmluZVNsaWNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IENvbXBpbGVkRHluYW1pY1Byb2dyYW0gfSBmcm9tICcuLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgTGFiZWxPcGNvZGUsIEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlLCBEaWRNb2RpZnlPcGNvZGUgfSBmcm9tICcuLi9jb21waWxlZC9vcGNvZGVzL3ZtJztcbmltcG9ydCB7IFZNU3RhdGUsIExpc3RCbG9ja09wY29kZSwgVHJ5T3Bjb2RlLCBCbG9ja09wY29kZSB9IGZyb20gJy4vdXBkYXRlJztcbmltcG9ydCBSZW5kZXJSZXN1bHQgZnJvbSAnLi9yZW5kZXItcmVzdWx0JztcblxuaW1wb3J0IHtcbiAgQVBQRU5EX09QQ09ERVMsXG4gIFVwZGF0aW5nT3Bjb2RlXG59IGZyb20gJy4uL29wY29kZXMnO1xuXG5pbXBvcnQge1xuICBDb25zdGFudHMsXG4gIENvbnN0YW50U3RyaW5nXG59IGZyb20gJy4uL2Vudmlyb25tZW50L2NvbnN0YW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljVk0ge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBkeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlO1xuICBnZXRTZWxmKCk6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPjtcbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBDYXB0dXJlZFN0YWNrID0gT3BhcXVlW107XG5cbmV4cG9ydCBjbGFzcyBFdmFsdWF0aW9uU3RhY2sge1xuICBzdGF0aWMgZW1wdHkoKTogRXZhbHVhdGlvblN0YWNrIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoW10sIDAsIC0xKTtcbiAgfVxuXG4gIHN0YXRpYyByZXN0b3JlKHNuYXBzaG90OiBDYXB0dXJlZFN0YWNrKTogRXZhbHVhdGlvblN0YWNrIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoc25hcHNob3Quc2xpY2UoKSwgMCwgc25hcHNob3QubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YWNrOiBPcGFxdWVbXSwgcHVibGljIGZwOiBudW1iZXIsIHB1YmxpYyBzcDogbnVtYmVyKSB7XG4gICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnNwID09PSAtMTtcbiAgfVxuXG4gIHB1c2godmFsdWU6IE9wYXF1ZSk6IHZvaWQge1xuICAgIHRoaXMuc3RhY2tbKyt0aGlzLnNwXSA9IHZhbHVlO1xuICB9XG5cbiAgZHVwKHBvc2l0aW9uID0gdGhpcy5zcCk6IHZvaWQge1xuICAgIHRoaXMucHVzaCh0aGlzLnN0YWNrW3Bvc2l0aW9uXSk7XG4gIH1cblxuICBwb3A8VD4obiA9IDEpOiBUIHtcbiAgICBsZXQgdG9wID0gdGhpcy5zdGFja1t0aGlzLnNwXSBhcyBUO1xuICAgIHRoaXMuc3AgLT0gbjtcbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgcGVlazxUPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnNwXSBhcyBUO1xuICB9XG5cbiAgZnJvbUJhc2U8VD4ob2Zmc2V0OiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLmZwIC0gb2Zmc2V0XSBhcyBUO1xuICB9XG5cbiAgZnJvbVRvcDxUPihvZmZzZXQ6IG51bWJlcik6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuc3AgLSBvZmZzZXRdIGFzIFQ7XG4gIH1cblxuICBjYXB0dXJlKGl0ZW1zOiBudW1iZXIpOiBDYXB0dXJlZFN0YWNrIHtcbiAgICBsZXQgZW5kID0gdGhpcy5zcCArIDE7XG4gICAgbGV0IHN0YXJ0ID0gZW5kIC0gaXRlbXM7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICB0b0FycmF5KCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNsaWNlKHRoaXMuZnAsIHRoaXMuc3AgKyAxKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBJdGVyYXRvclJlc3VsdDxUPiA9IHtcbiAgZG9uZTogZmFsc2U7XG4gIHZhbHVlOiBudWxsO1xufSB8IHtcbiAgZG9uZTogdHJ1ZTtcbiAgdmFsdWU6IFQ7XG59O1xuXG5sZXQgaSA9IDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZNIGltcGxlbWVudHMgUHVibGljVk0ge1xuICBwcml2YXRlIGR5bmFtaWNTY29wZVN0YWNrID0gbmV3IFN0YWNrPER5bmFtaWNTY29wZT4oKTtcbiAgcHJpdmF0ZSBzY29wZVN0YWNrID0gbmV3IFN0YWNrPFNjb3BlPigpO1xuICBwdWJsaWMgdXBkYXRpbmdPcGNvZGVTdGFjayA9IG5ldyBTdGFjazxMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPj4oKTtcbiAgcHVibGljIGNhY2hlR3JvdXBzID0gbmV3IFN0YWNrPE9wdGlvbjxVcGRhdGluZ09wY29kZT4+KCk7XG4gIHB1YmxpYyBsaXN0QmxvY2tTdGFjayA9IG5ldyBTdGFjazxMaXN0QmxvY2tPcGNvZGU+KCk7XG4gIHB1YmxpYyBjb25zdGFudHM6IENvbnN0YW50cztcblxuICBwdWJsaWMgc3RhY2sgPSBFdmFsdWF0aW9uU3RhY2suZW1wdHkoKTtcblxuICAvKiogUmVnaXN0ZXJzICoqL1xuXG4gIHByaXZhdGUgcGMgPSAtMTtcbiAgcHJpdmF0ZSByYSA9IC0xO1xuXG4gIHByaXZhdGUgZ2V0IGZwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suZnA7XG4gIH1cblxuICBwcml2YXRlIHNldCBmcChmcDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdGFjay5mcCA9IGZwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3AoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zcDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IHNwKHNwOiBudW1iZXIpIHtcbiAgICB0aGlzLnN0YWNrLnNwID0gc3A7XG4gIH1cblxuICBwdWJsaWMgczA6IGFueSA9IG51bGw7XG4gIHB1YmxpYyBzMTogYW55ID0gbnVsbDtcbiAgcHVibGljIHQwOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgdDE6IGFueSA9IG51bGw7XG5cbiAgLy8gRmV0Y2ggYSB2YWx1ZSBmcm9tIGEgcmVnaXN0ZXIgb250byB0aGUgc3RhY2tcbiAgZmV0Y2gocmVnaXN0ZXI6IFJlZ2lzdGVyKSB7XG4gICAgdGhpcy5zdGFjay5wdXNoKHRoaXNbUmVnaXN0ZXJbcmVnaXN0ZXJdXSk7XG4gIH1cblxuICAvLyBMb2FkIGEgdmFsdWUgZnJvbSB0aGUgc3RhY2sgaW50byBhIHJlZ2lzdGVyXG4gIGxvYWQocmVnaXN0ZXI6IFJlZ2lzdGVyKSB7XG4gICAgdGhpc1tSZWdpc3RlcltyZWdpc3Rlcl1dID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuXG4gIC8vIEZldGNoIGEgdmFsdWUgZnJvbSBhIHJlZ2lzdGVyXG4gIGZldGNoVmFsdWU8VD4ocmVnaXN0ZXI6IFJlZ2lzdGVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXNbUmVnaXN0ZXJbcmVnaXN0ZXJdXTtcbiAgfVxuXG4gIC8vIExvYWQgYSB2YWx1ZSBpbnRvIGEgcmVnaXN0ZXJcbiAgbG9hZFZhbHVlPFQ+KHJlZ2lzdGVyOiBSZWdpc3RlciwgdmFsdWU6IFQpIHtcbiAgICB0aGlzW1JlZ2lzdGVyW3JlZ2lzdGVyXV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8vIFN0YXJ0IGEgbmV3IGZyYW1lIGFuZCBzYXZlICRyYSBhbmQgJGZwIG9uIHRoZSBzdGFja1xuICBwdXNoRnJhbWUoKSB7XG4gICAgdGhpcy5zdGFjay5wdXNoKHRoaXMucmEpO1xuICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLmZwKTtcbiAgICB0aGlzLmZwID0gdGhpcy5zcCAtIDE7XG4gICAgLy8gdGhpcy5mcCA9IHRoaXMuc3AgKyAxO1xuICB9XG5cbiAgLy8gUmVzdG9yZSAkcmEsICRzcCBhbmQgJGZwXG4gIHBvcEZyYW1lKCkge1xuICAgIHRoaXMuc3AgPSB0aGlzLmZwIC0gMTtcbiAgICB0aGlzLnJhID0gdGhpcy5zdGFjay5mcm9tQmFzZTxudW1iZXI+KDApO1xuICAgIHRoaXMuZnAgPSB0aGlzLnN0YWNrLmZyb21CYXNlPG51bWJlcj4oLTEpO1xuICB9XG5cbiAgLy8gSnVtcCB0byBhbiBhZGRyZXNzIGluIGBwcm9ncmFtYFxuICBnb3RvKHBjOiBudW1iZXIpIHtcbiAgICB0aGlzLnBjID0gcGM7XG4gIH1cblxuICAvLyBTYXZlICRwYyBpbnRvICRyYSwgdGhlbiBqdW1wIHRvIGEgbmV3IGFkZHJlc3MgaW4gYHByb2dyYW1gIChqYWwgaW4gTUlQUylcbiAgY2FsbChwYzogbnVtYmVyKSB7XG4gICAgdGhpcy5yYSA9IHRoaXMucGM7XG4gICAgdGhpcy5wYyA9IHBjO1xuICB9XG5cbiAgLy8gUHV0IGEgc3BlY2lmaWMgYHByb2dyYW1gIGFkZHJlc3MgaW4gJHJhXG4gIHJldHVyblRvKHJhOiBudW1iZXIpIHtcbiAgICB0aGlzLnJhID0gcmE7XG4gIH1cblxuICAvLyBSZXR1cm4gdG8gdGhlIGBwcm9ncmFtYCBhZGRyZXNzIHN0b3JlZCBpbiAkcmFcbiAgcmV0dXJuKCkge1xuICAgIGlmICh0aGlzLnBjID09PSAodGhpcy5yYSArIDQpKSB7XG4gICAgICB0aHJvdyBcIlpPTUdcIjtcbiAgICB9XG5cbiAgICB0aGlzLnBjID0gdGhpcy5yYTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICAgc2VsZjogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LFxuICAgIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICAgIGVsZW1lbnRTdGFjazogRWxlbWVudFN0YWNrLFxuICAgIHByb2dyYW06IENvbXBpbGVkRHluYW1pY1Byb2dyYW1cbiAgKSB7XG4gICAgbGV0IHNjb3BlID0gU2NvcGUucm9vdChzZWxmLCBwcm9ncmFtLnN5bWJvbFRhYmxlLnN5bWJvbHMubGVuZ3RoKTtcbiAgICBsZXQgdm0gPSBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICAgIHZtLnBjID0gcHJvZ3JhbS5zdGFydDtcbiAgICB2bS51cGRhdGluZ09wY29kZVN0YWNrLnB1c2gobmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpO1xuICAgIHJldHVybiB2bTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbnY6IEVudmlyb25tZW50LFxuICAgIHNjb3BlOiBTY29wZSxcbiAgICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgICBwcml2YXRlIGVsZW1lbnRTdGFjazogRWxlbWVudFN0YWNrLFxuICApIHtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLmNvbnN0YW50cyA9IGVudi5jb25zdGFudHM7XG4gICAgdGhpcy5lbGVtZW50U3RhY2sgPSBlbGVtZW50U3RhY2s7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goc2NvcGUpO1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucHVzaChkeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgY2FwdHVyZShhcmdzOiBudW1iZXIpOiBWTVN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlKCksXG4gICAgICBkeW5hbWljU2NvcGU6IHRoaXMuZHluYW1pY1Njb3BlKCksXG4gICAgICBzdGFjazogdGhpcy5zdGFjay5jYXB0dXJlKGFyZ3MpXG4gICAgfTtcbiAgfVxuXG4gIGJlZ2luQ2FjaGVHcm91cCgpIHtcbiAgICB0aGlzLmNhY2hlR3JvdXBzLnB1c2godGhpcy51cGRhdGluZygpLnRhaWwoKSk7XG4gIH1cblxuICBjb21taXRDYWNoZUdyb3VwKCkge1xuICAgIC8vICAgICAgICBKdW1wSWZOb3RNb2RpZmllZChFTkQpXG4gICAgLy8gICAgICAgIChoZWFkKVxuICAgIC8vICAgICAgICAoLi4uLilcbiAgICAvLyAgICAgICAgKHRhaWwpXG4gICAgLy8gICAgICAgIERpZE1vZGlmeVxuICAgIC8vIEVORDogICBOb29wXG5cbiAgICBsZXQgRU5EID0gbmV3IExhYmVsT3Bjb2RlKFwiRU5EXCIpO1xuXG4gICAgbGV0IG9wY29kZXMgPSB0aGlzLnVwZGF0aW5nKCk7XG4gICAgbGV0IG1hcmtlciA9IHRoaXMuY2FjaGVHcm91cHMucG9wKCk7XG4gICAgbGV0IGhlYWQgPSBtYXJrZXIgPyBvcGNvZGVzLm5leHROb2RlKG1hcmtlcikgOiBvcGNvZGVzLmhlYWQoKTtcbiAgICBsZXQgdGFpbCA9IG9wY29kZXMudGFpbCgpO1xuICAgIGxldCB0YWcgPSBjb21iaW5lU2xpY2UobmV3IExpc3RTbGljZShoZWFkLCB0YWlsKSk7XG5cbiAgICBsZXQgZ3VhcmQgPSBuZXcgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUodGFnLCBFTkQpO1xuXG4gICAgb3Bjb2Rlcy5pbnNlcnRCZWZvcmUoZ3VhcmQsIGhlYWQpO1xuICAgIG9wY29kZXMuYXBwZW5kKG5ldyBEaWRNb2RpZnlPcGNvZGUoZ3VhcmQpKTtcbiAgICBvcGNvZGVzLmFwcGVuZChFTkQpO1xuICB9XG5cbiAgZW50ZXIoYXJnczogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoYXJncyk7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLmVsZW1lbnRzKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG5cbiAgICBsZXQgdHJ5T3Bjb2RlID0gbmV3IFRyeU9wY29kZSh0aGlzLnBjLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcpO1xuXG4gICAgdGhpcy5kaWRFbnRlcih0cnlPcGNvZGUpO1xuICB9XG5cbiAgaXRlcmF0ZShtZW1vOiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIHZhbHVlOiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpOiBUcnlPcGNvZGUge1xuICAgIGxldCBzdGFjayA9IHRoaXMuc3RhY2s7XG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgc3RhY2sucHVzaChtZW1vKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgyKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuZWxlbWVudHMoKS5wdXNoVXBkYXRhYmxlQmxvY2soKTtcblxuICAgIC8vIGxldCBpcCA9IHRoaXMuaXA7XG4gICAgLy8gdGhpcy5pcCA9IGVuZCArIDQ7XG4gICAgLy8gdGhpcy5mcmFtZXMucHVzaChpcCk7XG5cbiAgICByZXR1cm4gbmV3IFRyeU9wY29kZSh0aGlzLnBjLCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcpO1xuICB9XG5cbiAgZW50ZXJJdGVtKGtleTogc3RyaW5nLCBvcGNvZGU6IFRyeU9wY29kZSkge1xuICAgIHRoaXMubGlzdEJsb2NrKCkubWFwW2tleV0gPSBvcGNvZGU7XG4gICAgdGhpcy5kaWRFbnRlcihvcGNvZGUpO1xuICB9XG5cbiAgZW50ZXJMaXN0KHN0YXJ0OiBudW1iZXIpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxCbG9ja09wY29kZT4oKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgwKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuZWxlbWVudHMoKS5wdXNoQmxvY2tMaXN0KHVwZGF0aW5nKTtcbiAgICBsZXQgYXJ0aWZhY3RzID0gdGhpcy5zdGFjay5wZWVrPFJlZmVyZW5jZUl0ZXJhdG9yPigpLmFydGlmYWN0cztcblxuICAgIGxldCBvcGNvZGUgPSBuZXcgTGlzdEJsb2NrT3Bjb2RlKHN0YXJ0LCBzdGF0ZSwgdHJhY2tlciwgdXBkYXRpbmcsIGFydGlmYWN0cyk7XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnB1c2gob3Bjb2RlKTtcblxuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlkRW50ZXIob3Bjb2RlOiBCbG9ja09wY29kZSkge1xuICAgIHRoaXMudXBkYXRlV2l0aChvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKG9wY29kZS5jaGlsZHJlbik7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuZWxlbWVudHMoKS5wb3BCbG9jaygpO1xuICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKTtcblxuICAgIGxldCBwYXJlbnQgPSB0aGlzLnVwZGF0aW5nKCkudGFpbCgpIGFzIEJsb2NrT3Bjb2RlO1xuXG4gICAgcGFyZW50LmRpZEluaXRpYWxpemVDaGlsZHJlbigpO1xuICB9XG5cbiAgZXhpdExpc3QoKSB7XG4gICAgdGhpcy5leGl0KCk7XG4gICAgdGhpcy5saXN0QmxvY2tTdGFjay5wb3AoKTtcbiAgfVxuXG4gIHVwZGF0ZVdpdGgob3Bjb2RlOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMudXBkYXRpbmcoKS5hcHBlbmQob3Bjb2RlKTtcbiAgfVxuXG4gIGxpc3RCbG9jaygpOiBMaXN0QmxvY2tPcGNvZGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5saXN0QmxvY2tTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgYSBsaXN0IGJsb2NrJyk7XG4gIH1cblxuICB1cGRhdGluZygpOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIHVwZGF0aW5nIG9wY29kZSBvbiB0aGUgdXBkYXRpbmcgb3Bjb2RlIHN0YWNrJyk7XG4gIH1cblxuICBlbGVtZW50cygpOiBFbGVtZW50U3RhY2sge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRTdGFjaztcbiAgfVxuXG4gIHNjb3BlKCk6IFNjb3BlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuc2NvcGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgc2NvcGUgb24gdGhlIHNjb3BlIHN0YWNrJyk7XG4gIH1cblxuICBkeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZHluYW1pY1Njb3BlU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIGR5bmFtaWMgc2NvcGUgb24gdGhlIGR5bmFtaWMgc2NvcGUgc3RhY2snKTtcbiAgfVxuXG4gIHB1c2hDaGlsZFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHRoaXMuc2NvcGUoKS5jaGlsZCgpKTtcbiAgfVxuXG4gIHB1c2hDYWxsZXJTY29wZShjaGlsZFNjb3BlID0gZmFsc2UpIHtcbiAgICBsZXQgY2FsbGVyU2NvcGUgPSBleHBlY3QodGhpcy5zY29wZSgpLmdldENhbGxlclNjb3BlKCksICdwdXNoQ2FsbGVyU2NvcGUgaXMgY2FsbGVkIHdoZW4gYSBjYWxsZXIgc2NvcGUgaXMgcHJlc2VudCcpO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKGNoaWxkU2NvcGUgPyBjYWxsZXJTY29wZS5jaGlsZCgpIDogY2FsbGVyU2NvcGUpO1xuICB9XG5cbiAgcHVzaER5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZHluYW1pY1Njb3BlKCkuY2hpbGQoKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHB1c2hSb290U2NvcGUoc2l6ZTogbnVtYmVyLCBiaW5kQ2FsbGVyOiBib29sZWFuKTogU2NvcGUge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnNpemVkKHNpemUpO1xuICAgIGlmIChiaW5kQ2FsbGVyKSBzY29wZS5iaW5kQ2FsbGVyU2NvcGUodGhpcy5zY29wZSgpKTtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChzY29wZSk7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgcG9wU2NvcGUoKSB7XG4gICAgdGhpcy5zY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgcG9wRHluYW1pY1Njb3BlKCkge1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucG9wKCk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuZWxlbWVudHMoKS5uZXdEZXN0cm95YWJsZShkKTtcbiAgfVxuXG4gIC8vLyBTQ09QRSBIRUxQRVJTXG5cbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNjb3BlKCkuZ2V0U2VsZigpO1xuICB9XG5cbiAgcmVmZXJlbmNlRm9yU3ltYm9sKHN5bWJvbDogbnVtYmVyKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFN5bWJvbChzeW1ib2wpO1xuICB9XG5cbiAgLy8vIEVYRUNVVElPTlxuXG4gIGV4ZWN1dGUoc3RhcnQ6IG51bWJlciwgaW5pdGlhbGl6ZT86ICh2bTogVk0pID0+IHZvaWQpOiBSZW5kZXJSZXN1bHQge1xuICAgIHRoaXMucGMgPSBzdGFydDtcblxuICAgIGlmIChpbml0aWFsaXplKSBpbml0aWFsaXplKHRoaXMpO1xuXG4gICAgbGV0IHJlc3VsdDogSXRlcmF0b3JSZXN1bHQ8UmVuZGVyUmVzdWx0PjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm5leHQoKTtcbiAgICAgIGlmIChyZXN1bHQuZG9uZSkgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZSBhcyBSZW5kZXJSZXN1bHQ7XG4gIH1cblxuICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PFJlbmRlclJlc3VsdD4ge1xuICAgIGxldCB7IGVudiwgdXBkYXRpbmdPcGNvZGVTdGFjaywgZWxlbWVudFN0YWNrIH0gPSB0aGlzO1xuICAgIGxldCBvcGNvZGU6IE9wdGlvbjxPcGNvZGU+O1xuXG4gICAgaWYgKGkrKyA+IDEwMDAwMCkge1xuICAgICAgdGhyb3cgXCJ6b21nXCI7XG4gICAgfVxuXG4gICAgaWYgKG9wY29kZSA9IHRoaXMubmV4dFN0YXRlbWVudChlbnYpKSB7XG4gICAgICBBUFBFTkRfT1BDT0RFUy5ldmFsdWF0ZSh0aGlzLCBvcGNvZGUsIG9wY29kZS50eXBlKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogbnVsbCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkb25lOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ldyBSZW5kZXJSZXN1bHQoXG4gICAgICAgIGVudixcbiAgICAgICAgZXhwZWN0KHVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCksICd0aGVyZSBzaG91bGQgYmUgYSBmaW5hbCB1cGRhdGluZyBvcGNvZGUgc3RhY2snKSxcbiAgICAgICAgZWxlbWVudFN0YWNrLnBvcEJsb2NrKClcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0U3RhdGVtZW50KGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248T3Bjb2RlPiB7XG4gICAgbGV0IHsgcGMgfSA9IHRoaXM7XG5cbiAgICBpZiAocGMgPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcHJvZ3JhbSA9IGVudi5wcm9ncmFtO1xuICAgIHRoaXMucGMgKz0gNDtcbiAgICByZXR1cm4gcHJvZ3JhbS5vcGNvZGUocGMpO1xuICB9XG5cbiAgZXZhbHVhdGVPcGNvZGUob3Bjb2RlOiBPcGNvZGUpIHtcbiAgICBBUFBFTkRfT1BDT0RFUy5ldmFsdWF0ZSh0aGlzLCBvcGNvZGUsIG9wY29kZS50eXBlKTtcbiAgfVxuXG4gIGJpbmREeW5hbWljU2NvcGUobmFtZXM6IENvbnN0YW50U3RyaW5nW10pIHtcbiAgICBsZXQgc2NvcGUgPSB0aGlzLmR5bmFtaWNTY29wZSgpO1xuXG4gICAgZm9yKGxldCBpPW5hbWVzLmxlbmd0aCAtIDE7IGk+PTA7IGktLSkge1xuICAgICAgbGV0IG5hbWUgPSB0aGlzLmNvbnN0YW50cy5nZXRTdHJpbmcobmFtZXNbaV0pO1xuICAgICAgc2NvcGUuc2V0KG5hbWUsIHRoaXMuc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
import { clear, move as moveBounds } from '../bounds';
import { ElementStack } from '../builder';
import { Stack, dict, expect } from '@glimmer/util';
import { Stack, LinkedList, dict, expect } from '@glimmer/util';
import { IteratorSynchronizer,

@@ -8,3 +8,3 @@ // Tags

import { UpdatingOpcode } from '../opcodes';
import VM from './append';
import VM, { EvaluationStack } from './append';
export default class UpdatingVM {

@@ -50,10 +50,9 @@ constructor(env, { alwaysRevalidate = false }) {

export class BlockOpcode extends UpdatingOpcode {
constructor(start, end, state, bounds, children) {
constructor(start, state, bounds, children) {
super();
this.start = start;
this.end = end;
this.type = "block";
this.next = null;
this.prev = null;
let { env, scope, dynamicScope, stack, bp } = state;
let { env, scope, dynamicScope, stack } = state;
this.children = children;

@@ -64,3 +63,2 @@ this.env = env;

this.stack = stack;
this.bp = bp;
this.bounds = bounds;

@@ -98,4 +96,4 @@ }

export class TryOpcode extends BlockOpcode {
constructor(start, end, state, bounds, children) {
super(start, end, state, bounds, children);
constructor(start, state, bounds, children) {
super(start, state, bounds, children);
this.type = "try";

@@ -111,8 +109,15 @@ this.tag = this._tag = UpdatableTag.create(CONSTANT_TAG);

handleException() {
let { env, scope, start, dynamicScope, stack, bp } = this;
let elementStack = ElementStack.resume(this.env, this.bounds, this.bounds.reset(env));
let { env, bounds, children, scope, dynamicScope, start, stack, prev, next } = this;
children.clear();
let elementStack = ElementStack.resume(env, bounds, bounds.reset(env));
let vm = new VM(env, scope, dynamicScope, elementStack);
let result = vm.resume(start, stack.snapshot(), bp);
this.children = result.opcodes();
this.didInitializeChildren();
let updating = new LinkedList();
vm.execute(start, vm => {
vm.stack = EvaluationStack.restore(stack);
vm.updatingOpcodeStack.push(updating);
vm.updateWith(this);
vm.updatingOpcodeStack.push(children);
});
this.prev = prev;
this.next = next;
}

@@ -150,7 +155,9 @@ toJSON() {

let tryOpcode = null;
let { start, end } = opcode;
let { start } = opcode;
vm.execute(start, vm => {
map[key] = tryOpcode = vm.iterate(start, end, memo, item, vm.updating());
map[key] = tryOpcode = vm.iterate(memo, item);
vm.updatingOpcodeStack.push(new LinkedList());
vm.updateWith(tryOpcode);
vm.updatingOpcodeStack.push(tryOpcode.children);
});
tryOpcode.didInitializeChildren();
updating.insertBefore(tryOpcode, reference);

@@ -188,4 +195,4 @@ this.didInsert = true;

export class ListBlockOpcode extends BlockOpcode {
constructor(start, end, state, bounds, children, artifacts) {
super(start, end, state, bounds, children);
constructor(start, state, bounds, children, artifacts) {
super(start, state, bounds, children);
this.type = "list-block";

@@ -262,2 +269,2 @@ this.map = dict();

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsS0FBSyxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBNkIsTUFBTSxZQUFZLENBQUM7QUFDckUsT0FBTyxFQUFrQixLQUFLLEVBQW9CLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUdMLG9CQUFvQjtBQUdwQixPQUFPO0FBQ1AsT0FBTyxFQUVQLFlBQVksRUFFWixZQUFZLEVBQ1osWUFBWSxFQUNaLE9BQU8sRUFDUixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBYyxjQUFjLEVBQWlCLE1BQU0sWUFBWSxDQUFDO0FBS3ZFLE9BQU8sRUFBdUIsTUFBTSxVQUFVLENBQUM7QUFFL0MsTUFBTSxDQUFDLE9BQU87SUFRWixZQUFZLEdBQWdCLEVBQUUsRUFBRSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUU7UUFGbEQsZUFBVSxHQUEyQixJQUFJLEtBQUssRUFBbUIsQ0FBQztRQUd4RSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFzQixFQUFFLE9BQXlCO1FBQ3ZELElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0IsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLEVBQUUsQ0FBQyxDQUFD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QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZTtRQUNiLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciwgbW92ZSBhcyBtb3ZlQm91bmRzIH0gZnJvbSAnLi4vYm91bmRzJztcbmltcG9ydCB7IEVsZW1lbnRTdGFjaywgVHJhY2tlciwgVXBkYXRhYmxlVHJhY2tlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUsIFN0YWNrLCBMaW5rZWRMaXN0LCBEaWN0LCBkaWN0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIFBhdGhSZWZlcmVuY2UsXG4gIEl0ZXJhdGlvbkFydGlmYWN0cyxcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXIsXG4gIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUsXG5cbiAgLy8gVGFnc1xuICBjb21iaW5lLFxuICBSZXZpc2lvbixcbiAgVXBkYXRhYmxlVGFnLFxuICBUYWdXcmFwcGVyLFxuICBjb21iaW5lU2xpY2UsXG4gIENPTlNUQU5UX1RBRyxcbiAgSU5JVElBTFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUsIFVwZGF0aW5nT3BTZXEgfSBmcm9tICcuLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2Vudmlyb25tZW50L2NvbnN0YW50cyc7XG5pbXBvcnQgeyBET01DaGFuZ2VzIH0gZnJvbSAnLi4vZG9tL2hlbHBlcic7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vZG9tL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgVk0sIHsgRXZhbHVhdGlvblN0YWNrIH0gZnJvbSAnLi9hcHBlbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGRhdGluZ1ZNIHtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG4gIHB1YmxpYyBkb206IERPTUNoYW5nZXM7XG4gIHB1YmxpYyBhbHdheXNSZXZhbGlkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG5cbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBTdGFjazxVcGRhdGluZ1ZNRnJhbWU+ID0gbmV3IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4oKTtcblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCB7IGFsd2F5c1JldmFsaWRhdGUgPSBmYWxzZSB9KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZG9tID0gZW52LmdldERPTSgpO1xuICAgIHRoaXMuYWx3YXlzUmV2YWxpZGF0ZSA9IGFsd2F5c1JldmFsaWRhdGU7XG4gIH1cblxuICBleGVjdXRlKG9wY29kZXM6IFVwZGF0aW5nT3BTZXEsIGhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICBsZXQgeyBmcmFtZVN0YWNrIH0gPSB0aGlzO1xuXG4gICAgdGhpcy50cnkob3Bjb2RlcywgaGFuZGxlcik7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGZyYW1lU3RhY2suaXNFbXB0eSgpKSBicmVhaztcblxuICAgICAgbGV0IG9wY29kZSA9IHRoaXMuZnJhbWUubmV4dFN0YXRlbWVudCgpO1xuXG4gICAgICBpZiAob3Bjb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBmcmFtZSgpIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZnJhbWVTdGFjay5jdXJyZW50LCAnYnVnOiBleHBlY3RlZCBhIGZyYW1lJyk7XG4gIH1cblxuICBnb3RvKG9wOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMuZnJhbWUuZ290byhvcCk7XG4gIH1cblxuICB0cnkob3BzOiBVcGRhdGluZ09wU2VxLCBoYW5kbGVyOiBPcHRpb248RXhjZXB0aW9uSGFuZGxlcj4pIHtcbiAgICB0aGlzLmZyYW1lU3RhY2sucHVzaChuZXcgVXBkYXRpbmdWTUZyYW1lKHRoaXMsIG9wcywgaGFuZGxlcikpO1xuICB9XG5cbiAgdGhyb3coKSB7XG4gICAgdGhpcy5mcmFtZS5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uSGFuZGxlciB7XG4gIGhhbmRsZUV4Y2VwdGlvbigpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZNU3RhdGUge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBzY29wZTogU2NvcGU7XG4gIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBzdGFjazogRXZhbHVhdGlvblN0YWNrO1xuICBicDogbnVtYmVyO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSBpbXBsZW1lbnRzIERlc3Ryb3lhYmxlQm91bmRzIHtcbiAgcHVibGljIHR5cGUgPSBcImJsb2NrXCI7XG4gIHB1YmxpYyBuZXh0ID0gbnVsbDtcbiAgcHVibGljIHByZXYgPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+O1xuXG4gIHByb3RlY3RlZCBlbnY6IEVudmlyb25tZW50O1xuICBwcm90ZWN0ZWQgc2NvcGU6IFNjb3BlO1xuICBwcm90ZWN0ZWQgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGU7XG4gIHByb3RlY3RlZCBzdGFjazogRXZhbHVhdGlvblN0YWNrO1xuICBwcm90ZWN0ZWQgYnA6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGJvdW5kczogRGVzdHJveWFibGVCb3VuZHM7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHN0YXJ0OiBudW1iZXIsIHB1YmxpYyBlbmQ6IG51bWJlciwgc3RhdGU6IFZNU3RhdGUsIGJvdW5kczogRGVzdHJveWFibGVCb3VuZHMsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHN1cGVyKCk7XG4gICAgbGV0IHsgZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBzdGFjaywgYnAgfSA9IHN0YXRlO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5keW5hbWljU2NvcGUgPSBkeW5hbWljU2NvcGU7XG4gICAgdGhpcy5zdGFjayA9IHN0YWNrO1xuICAgIHRoaXMuYnAgPSBicDtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIGFic3RyYWN0IGRpZEluaXRpYWxpemVDaGlsZHJlbigpOiB2b2lkO1xuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdm0udHJ5KHRoaXMuY2hpbGRyZW4sIG51bGwpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmJvdW5kcy5kZXN0cm95KCk7XG4gIH1cblxuICBkaWREZXN0cm95KCkge1xuICAgIHRoaXMuZW52LmRpZERlc3Ryb3kodGhpcy5ib3VuZHMpO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgZGV0YWlscyA9IGRpY3Q8c3RyaW5nPigpO1xuXG4gICAgZGV0YWlsc1tcImd1aWRcIl0gPSBgJHt0aGlzLl9ndWlkfWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGRldGFpbHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbi50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyeU9wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIGltcGxlbWVudHMgRXhjZXB0aW9uSGFuZGxlciB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0cnlcIjtcblxuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBwcm90ZWN0ZWQgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyLCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4pIHtcbiAgICBzdXBlcihzdGFydCwgZW5kLCBzdGF0ZSwgYm91bmRzLCBjaGlsZHJlbik7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKENPTlNUQU5UX1RBRyk7XG4gIH1cblxuICBkaWRJbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB2bS50cnkodGhpcy5jaGlsZHJlbiwgdGhpcyk7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgbGV0IHsgZW52LCBzY29wZSwgc3RhcnQsIGR5bmFtaWNTY29wZSwgc3RhY2ssIGJwIH0gPSB0aGlzO1xuXG4gICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5yZXN1bWUoXG4gICAgICB0aGlzLmVudixcbiAgICAgIHRoaXMuYm91bmRzLFxuICAgICAgdGhpcy5ib3VuZHMucmVzZXQoZW52KVxuICAgICk7XG5cbiAgICBsZXQgdm0gPSBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICAgIGxldCByZXN1bHQgPSB2bS5yZXN1bWUoc3RhcnQsIHN0YWNrLnNuYXBzaG90KCksIGJwKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSByZXN1bHQub3Bjb2RlcygpO1xuICAgIHRoaXMuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG5cbiAgICBsZXQgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdO1xuICAgIGlmICghZGV0YWlscykge1xuICAgICAgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICB9XG59XG5cbmNsYXNzIExpc3RSZXZhbGlkYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUge1xuICBwcml2YXRlIG1hcDogRGljdDxCbG9ja09wY29kZT47XG4gIHByaXZhdGUgdXBkYXRpbmc6IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+O1xuXG4gIHByaXZhdGUgZGlkSW5zZXJ0ID0gZmFsc2U7XG4gIHByaXZhdGUgZGlkRGVsZXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcGNvZGU6IExpc3RCbG9ja09wY29kZSwgcHJpdmF0ZSBtYXJrZXI6IFNpbXBsZS5Db21tZW50KSB7XG4gICAgdGhpcy5tYXAgPSBvcGNvZGUubWFwO1xuICAgIHRoaXMudXBkYXRpbmcgPSBvcGNvZGVbJ2NoaWxkcmVuJ107XG4gIH1cblxuICBpbnNlcnQoa2V5OiBzdHJpbmcsIGl0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBiZWZvcmU6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCwgb3Bjb2RlLCB1cGRhdGluZyB9ID0gdGhpcztcbiAgICBsZXQgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsO1xuICAgIGxldCByZWZlcmVuY2U6IE9wdGlvbjxCbG9ja09wY29kZT4gPSBudWxsO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgcmVmZXJlbmNlID0gbWFwW2JlZm9yZV07XG4gICAgICBuZXh0U2libGluZyA9IHJlZmVyZW5jZVsnYm91bmRzJ10uZmlyc3ROb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRTaWJsaW5nID0gdGhpcy5tYXJrZXI7XG4gICAgfVxuXG4gICAgbGV0IHZtID0gb3Bjb2RlLnZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nKTtcbiAgICBsZXQgdHJ5T3Bjb2RlOiBPcHRpb248VHJ5T3Bjb2RlPiA9IG51bGw7XG5cbiAgICBsZXQgeyBzdGFydCwgZW5kIH0gPSBvcGNvZGU7XG5cbiAgICB2bS5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICBtYXBba2V5XSA9IHRyeU9wY29kZSA9IHZtLml0ZXJhdGUoc3RhcnQsIGVuZCwgbWVtbywgaXRlbSwgdm0udXBkYXRpbmcoKSk7XG4gICAgfSk7XG5cbiAgICB0cnlPcGNvZGUhLmRpZEluaXRpYWxpemVDaGlsZHJlbigpO1xuXG4gICAgdXBkYXRpbmcuaW5zZXJ0QmVmb3JlKHRyeU9wY29kZSEsIHJlZmVyZW5jZSk7XG5cbiAgICB0aGlzLmRpZEluc2VydCA9IHRydWU7XG4gIH1cblxuICByZXRhaW4oX2tleTogc3RyaW5nLCBfaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBfbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+KSB7XG4gIH1cblxuICBtb3ZlKGtleTogc3RyaW5nLCBfaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBfbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBiZWZvcmU6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCwgdXBkYXRpbmcgfSA9IHRoaXM7XG5cbiAgICBsZXQgZW50cnkgPSBtYXBba2V5XTtcbiAgICBsZXQgcmVmZXJlbmNlID0gbWFwW2JlZm9yZV0gfHwgbnVsbDtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIG1vdmVCb3VuZHMoZW50cnksIHJlZmVyZW5jZS5maXJzdE5vZGUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vdmVCb3VuZHMoZW50cnksIHRoaXMubWFya2VyKTtcbiAgICB9XG5cbiAgICB1cGRhdGluZy5yZW1vdmUoZW50cnkpO1xuICAgIHVwZGF0aW5nLmluc2VydEJlZm9yZShlbnRyeSwgcmVmZXJlbmNlKTtcbiAgfVxuXG4gIGRlbGV0ZShrZXk6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCB9ID0gdGhpcztcbiAgICBsZXQgb3Bjb2RlID0gbWFwW2tleV07XG4gICAgb3Bjb2RlLmRpZERlc3Ryb3koKTtcbiAgICBjbGVhcihvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmcucmVtb3ZlKG9wY29kZSk7XG4gICAgZGVsZXRlIG1hcFtrZXldO1xuXG4gICAgdGhpcy5kaWREZWxldGUgPSB0cnVlO1xuICB9XG5cbiAgZG9uZSgpIHtcbiAgICB0aGlzLm9wY29kZS5kaWRJbml0aWFsaXplQ2hpbGRyZW4odGhpcy5kaWRJbnNlcnQgfHwgdGhpcy5kaWREZWxldGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QmxvY2tPcGNvZGUgZXh0ZW5kcyBCbG9ja09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJsaXN0LWJsb2NrXCI7XG4gIHB1YmxpYyBtYXAgPSBkaWN0PEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHM7XG5cbiAgcHJpdmF0ZSBsYXN0SXRlcmF0ZWQ6IFJldmlzaW9uID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPiwgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHMpIHtcbiAgICBzdXBlcihzdGFydCwgZW5kLCBzdGF0ZSwgYm91bmRzLCBjaGlsZHJlbik7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgbGV0IF90YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKENPTlNUQU5UX1RBRyk7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lKFthcnRpZmFjdHMudGFnLCBfdGFnXSk7XG4gIH1cblxuICBkaWRJbml0aWFsaXplQ2hpbGRyZW4obGlzdERpZENoYW5nZSA9IHRydWUpIHtcbiAgICB0aGlzLmxhc3RJdGVyYXRlZCA9IHRoaXMuYXJ0aWZhY3RzLnRhZy52YWx1ZSgpO1xuXG4gICAgaWYgKGxpc3REaWRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX3RhZy5pbm5lci51cGRhdGUoY29tYmluZVNsaWNlKHRoaXMuY2hpbGRyZW4pKTtcbiAgICB9XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGFydGlmYWN0cywgbGFzdEl0ZXJhdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFhcnRpZmFjdHMudGFnLnZhbGlkYXRlKGxhc3RJdGVyYXRlZCkpIHtcbiAgICAgIGxldCB7IGJvdW5kcyB9ID0gdGhpcztcbiAgICAgIGxldCB7IGRvbSB9ID0gdm07XG5cbiAgICAgIGxldCBtYXJrZXIgPSBkb20uY3JlYXRlQ29tbWVudCgnJyk7XG4gICAgICBkb20uaW5zZXJ0QWZ0ZXIoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgbWFya2VyLCBleHBlY3QoYm91bmRzLmxhc3ROb2RlKCksIFwiY2FuJ3QgaW5zZXJ0IGFmdGVyIGFuIGVtcHR5IGJvdW5kc1wiKSk7XG5cbiAgICAgIGxldCB0YXJnZXQgPSBuZXcgTGlzdFJldmFsaWRhdGlvbkRlbGVnYXRlKHRoaXMsIG1hcmtlcik7XG4gICAgICBsZXQgc3luY2hyb25pemVyID0gbmV3IEl0ZXJhdG9yU3luY2hyb25pemVyKHsgdGFyZ2V0LCBhcnRpZmFjdHMgfSk7XG5cbiAgICAgIHN5bmNocm9uaXplci5zeW5jKCk7XG5cbiAgICAgIHRoaXMucGFyZW50RWxlbWVudCgpLnJlbW92ZUNoaWxkKG1hcmtlcik7XG4gICAgfVxuXG4gICAgLy8gUnVuIG5vdy11cGRhdGVkIHVwZGF0aW5nIG9wY29kZXNcbiAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gIH1cblxuICB2bUZvckluc2VydGlvbihuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPik6IFZNIHtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZWxlbWVudFN0YWNrID0gRWxlbWVudFN0YWNrLmZvckluaXRpYWxSZW5kZXIoXG4gICAgICB0aGlzLmVudixcbiAgICAgIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKSxcbiAgICAgIG5leHRTaWJsaW5nXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQganNvbiA9IHN1cGVyLnRvSlNPTigpO1xuICAgIGxldCBtYXAgPSB0aGlzLm1hcDtcblxuICAgIGxldCBpbm5lciA9IE9iamVjdC5rZXlzKG1hcCkubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06ICR7bWFwW2tleV0uX2d1aWR9YDtcbiAgICB9KS5qb2luKFwiLCBcIik7XG5cbiAgICBsZXQgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdO1xuICAgIGlmICghZGV0YWlscykge1xuICAgICAgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdID0ge307XG4gICAgfVxuXG4gICAgZGV0YWlsc1tcIm1hcFwiXSA9IGB7JHtpbm5lcn19YDtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG59XG5cbmNsYXNzIFVwZGF0aW5nVk1GcmFtZSB7XG4gIHByaXZhdGUgY3VycmVudDogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZtOiBVcGRhdGluZ1ZNLCBwcml2YXRlIG9wczogVXBkYXRpbmdPcFNlcSwgcHJpdmF0ZSBleGNlcHRpb25IYW5kbGVyOiBPcHRpb248RXhjZXB0aW9uSGFuZGxlcj4pIHtcbiAgICB0aGlzLnZtID0gdm07XG4gICAgdGhpcy5vcHMgPSBvcHM7XG4gICAgdGhpcy5jdXJyZW50ID0gb3BzLmhlYWQoKTtcbiAgfVxuXG4gIGdvdG8ob3A6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy5jdXJyZW50ID0gb3A7XG4gIH1cblxuICBuZXh0U3RhdGVtZW50KCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IGN1cnJlbnQsIG9wcyB9ID0gdGhpcztcbiAgICBpZiAoY3VycmVudCkgdGhpcy5jdXJyZW50ID0gb3BzLm5leHROb2RlKGN1cnJlbnQpO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgaGFuZGxlRXhjZXB0aW9uKCkge1xuICAgIGlmICh0aGlzLmV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsS0FBSyxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBNkIsTUFBTSxZQUFZLENBQUM7QUFDckUsT0FBTyxFQUFrQixLQUFLLEVBQUUsVUFBVSxFQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUdMLG9CQUFvQjtBQUdwQixPQUFPO0FBQ1AsT0FBTyxFQUVQLFlBQVksRUFFWixZQUFZLEVBQ1osWUFBWSxFQUNaLE9BQU8sRUFDUixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBYyxjQUFjLEVBQWlCLE1BQU0sWUFBWSxDQUFDO0FBS3ZFLE9BQU8sRUFBRSxFQUFFLEVBQWlCLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU5RCxNQUFNLENBQUMsT0FBTztJQVFaLFlBQVksR0FBZ0IsRUFBRSxFQUFFLGdCQUFnQixHQUFHLEtBQUssRUFBRTtRQUZsRCxlQUFVLEdBQTJCLElBQUksS0FBSyxFQUFtQixDQUFDO1FBR3hFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQXNCLEVBQUUsT0FBeUI7UUFDdkQsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUUzQixPQUFPLElBQUksRUFBRSxDQUFDO1lBQ1osRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUFDLEtBQUssQ0FBQztZQUVoQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXhDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixRQUFRLENBQUM7WUFDWCxDQUFDO1lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVksS0FBSztRQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsSUFBSSxDQUFDLEVBQWtCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBa0IsRUFBRSxPQUFpQztRQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFzQjtRQUNuQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQWFELE1BQU0sa0JBQTRCLFNBQVEsY0FBYztJQVl0RCxZQUFtQixLQUFhLEVBQUUsS0FBYyxFQUFFLE1BQXlCLEVBQUUsUUFBb0M7UUFDL0csS0FBSyxFQUFFLENBQUM7UUFEUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBWHpCLFNBQUksR0FBRyxPQUFPLENBQUM7UUFDZixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osU0FBSSxHQUFHLElBQUksQ0FBQztRQVdqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUlELGFBQWE7UUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFjO1FBQ3JCLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLE9BQU8sR0FBRyxJQUFJLEVBQVUsQ0FBQztRQUU3QixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbEMsTUFBTSxDQUFDO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE9BQU87WUFDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6RCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQsTUFBTSxnQkFBaUIsU0FBUSxXQUFXO0lBT3hDLFlBQVksS0FBYSxFQUFFLEtBQWMsRUFBRSxNQUF3QixFQUFFLFFBQW9DO1FBQ3ZHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQVBqQyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBUWxCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQWM7UUFDckIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRXBGLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVqQixJQUFJLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUNwQyxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ2xCLENBQUM7UUFFRixJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV4RCxJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsRUFBa0IsQ0FBQztRQUVoRCxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRTFCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFFRDtJQU9FLFlBQW9CLE1BQXVCLEVBQVUsTUFBc0I7UUFBdkQsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUhuRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHeEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVyxFQUFFLElBQTJCLEVBQUUsSUFBMkIsRUFBRSxNQUFjO1FBQzFGLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLFdBQVcsR0FBd0IsSUFBSSxDQUFDO1FBQzVDLElBQUksU0FBUyxHQUF3QixJQUFJLENBQUM7UUFFMUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNYLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsV0FBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxJQUFJLFNBQVMsR0FBc0IsSUFBSSxDQUFDO1FBRXhDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFdkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQWtCLENBQUMsQ0FBQztZQUM5RCxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZLEVBQUUsS0FBNEIsRUFBRSxLQUE0QjtJQUMvRSxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVcsRUFBRSxLQUE0QixFQUFFLEtBQTRCLEVBQUUsTUFBYztRQUMxRixJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztRQUU3QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQztRQUVwQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1gsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLHNCQUF1QixTQUFRLFdBQVc7SUFROUMsWUFBWSxLQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBRSxRQUFvQyxFQUFFLFNBQTZCO1FBQzdILEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQVJqQyxTQUFJLEdBQUcsWUFBWSxDQUFDO1FBQ3BCLFFBQUcsR0FBRyxJQUFJLEVBQWUsQ0FBQztRQUd6QixpQkFBWSxHQUFhLE9BQU8sQ0FBQztRQUt2QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHFCQUFxQixDQUFDLGFBQWEsR0FBRyxJQUFJO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0MsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQWM7UUFDckIsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBRWpCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO1lBRWpILElBQUksTUFBTSxHQUFHLElBQUksd0JBQXdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELElBQUksWUFBWSxHQUFHLElBQUksb0JBQW9CLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUVuRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsbUNBQW1DO1FBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFnQztRQUM3QyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFeEMsSUFBSSxZQUFZLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUM5QyxJQUFJLENBQUMsR0FBRyxFQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQzNCLFdBQVcsQ0FDWixDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFFbkIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFZCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssR0FBRyxDQUFDO1FBRTlCLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRDtJQUdFLFlBQW9CLEVBQWMsRUFBVSxHQUFrQixFQUFVLGdCQUEwQztRQUE5RixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMEI7UUFDaEgsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLENBQUMsRUFBa0I7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZTtRQUNiLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciwgbW92ZSBhcyBtb3ZlQm91bmRzIH0gZnJvbSAnLi4vYm91bmRzJztcbmltcG9ydCB7IEVsZW1lbnRTdGFjaywgVHJhY2tlciwgVXBkYXRhYmxlVHJhY2tlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUsIFN0YWNrLCBMaW5rZWRMaXN0LCBEaWN0LCBkaWN0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIFBhdGhSZWZlcmVuY2UsXG4gIEl0ZXJhdGlvbkFydGlmYWN0cyxcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXIsXG4gIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUsXG5cbiAgLy8gVGFnc1xuICBjb21iaW5lLFxuICBSZXZpc2lvbixcbiAgVXBkYXRhYmxlVGFnLFxuICBUYWdXcmFwcGVyLFxuICBjb21iaW5lU2xpY2UsXG4gIENPTlNUQU5UX1RBRyxcbiAgSU5JVElBTFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUsIFVwZGF0aW5nT3BTZXEgfSBmcm9tICcuLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2Vudmlyb25tZW50L2NvbnN0YW50cyc7XG5pbXBvcnQgeyBET01DaGFuZ2VzIH0gZnJvbSAnLi4vZG9tL2hlbHBlcic7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vZG9tL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgVk0sIHsgQ2FwdHVyZWRTdGFjaywgRXZhbHVhdGlvblN0YWNrIH0gZnJvbSAnLi9hcHBlbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGRhdGluZ1ZNIHtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG4gIHB1YmxpYyBkb206IERPTUNoYW5nZXM7XG4gIHB1YmxpYyBhbHdheXNSZXZhbGlkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG5cbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBTdGFjazxVcGRhdGluZ1ZNRnJhbWU+ID0gbmV3IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4oKTtcblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCB7IGFsd2F5c1JldmFsaWRhdGUgPSBmYWxzZSB9KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZG9tID0gZW52LmdldERPTSgpO1xuICAgIHRoaXMuYWx3YXlzUmV2YWxpZGF0ZSA9IGFsd2F5c1JldmFsaWRhdGU7XG4gIH1cblxuICBleGVjdXRlKG9wY29kZXM6IFVwZGF0aW5nT3BTZXEsIGhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICBsZXQgeyBmcmFtZVN0YWNrIH0gPSB0aGlzO1xuXG4gICAgdGhpcy50cnkob3Bjb2RlcywgaGFuZGxlcik7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGZyYW1lU3RhY2suaXNFbXB0eSgpKSBicmVhaztcblxuICAgICAgbGV0IG9wY29kZSA9IHRoaXMuZnJhbWUubmV4dFN0YXRlbWVudCgpO1xuXG4gICAgICBpZiAob3Bjb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBmcmFtZSgpIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZnJhbWVTdGFjay5jdXJyZW50LCAnYnVnOiBleHBlY3RlZCBhIGZyYW1lJyk7XG4gIH1cblxuICBnb3RvKG9wOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMuZnJhbWUuZ290byhvcCk7XG4gIH1cblxuICB0cnkob3BzOiBVcGRhdGluZ09wU2VxLCBoYW5kbGVyOiBPcHRpb248RXhjZXB0aW9uSGFuZGxlcj4pIHtcbiAgICB0aGlzLmZyYW1lU3RhY2sucHVzaChuZXcgVXBkYXRpbmdWTUZyYW1lKHRoaXMsIG9wcywgaGFuZGxlcikpO1xuICB9XG5cbiAgdGhyb3coKSB7XG4gICAgdGhpcy5mcmFtZS5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uSGFuZGxlciB7XG4gIGhhbmRsZUV4Y2VwdGlvbigpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZNU3RhdGUge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBzY29wZTogU2NvcGU7XG4gIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBzdGFjazogQ2FwdHVyZWRTdGFjaztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUgaW1wbGVtZW50cyBEZXN0cm95YWJsZUJvdW5kcyB7XG4gIHB1YmxpYyB0eXBlID0gXCJibG9ja1wiO1xuICBwdWJsaWMgbmV4dCA9IG51bGw7XG4gIHB1YmxpYyBwcmV2ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPjtcblxuICBwcm90ZWN0ZWQgZW52OiBFbnZpcm9ubWVudDtcbiAgcHJvdGVjdGVkIHNjb3BlOiBTY29wZTtcbiAgcHJvdGVjdGVkIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBwcm90ZWN0ZWQgc3RhY2s6IENhcHR1cmVkU3RhY2s7XG4gIHByb3RlY3RlZCBib3VuZHM6IERlc3Ryb3lhYmxlQm91bmRzO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFydDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcywgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIHN0YWNrIH0gPSBzdGF0ZTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMuZHluYW1pY1Njb3BlID0gZHluYW1pY1Njb3BlO1xuICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIGFic3RyYWN0IGRpZEluaXRpYWxpemVDaGlsZHJlbigpOiB2b2lkO1xuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdm0udHJ5KHRoaXMuY2hpbGRyZW4sIG51bGwpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmJvdW5kcy5kZXN0cm95KCk7XG4gIH1cblxuICBkaWREZXN0cm95KCkge1xuICAgIHRoaXMuZW52LmRpZERlc3Ryb3kodGhpcy5ib3VuZHMpO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgZGV0YWlscyA9IGRpY3Q8c3RyaW5nPigpO1xuXG4gICAgZGV0YWlsc1tcImd1aWRcIl0gPSBgJHt0aGlzLl9ndWlkfWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGRldGFpbHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbi50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyeU9wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIGltcGxlbWVudHMgRXhjZXB0aW9uSGFuZGxlciB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0cnlcIjtcblxuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBwcm90ZWN0ZWQgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFVwZGF0YWJsZVRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHN1cGVyKHN0YXJ0LCBzdGF0ZSwgYm91bmRzLCBjaGlsZHJlbik7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKENPTlNUQU5UX1RBRyk7XG4gIH1cblxuICBkaWRJbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB2bS50cnkodGhpcy5jaGlsZHJlbiwgdGhpcyk7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgbGV0IHsgZW52LCBib3VuZHMsIGNoaWxkcmVuLCBzY29wZSwgZHluYW1pY1Njb3BlLCBzdGFydCwgc3RhY2ssIHByZXYsIG5leHQgfSA9IHRoaXM7XG5cbiAgICBjaGlsZHJlbi5jbGVhcigpO1xuXG4gICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5yZXN1bWUoXG4gICAgICBlbnYsXG4gICAgICBib3VuZHMsXG4gICAgICBib3VuZHMucmVzZXQoZW52KVxuICAgICk7XG5cbiAgICBsZXQgdm0gPSBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuXG4gICAgbGV0IHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCk7XG5cbiAgICB2bS5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICB2bS5zdGFjayA9IEV2YWx1YXRpb25TdGFjay5yZXN0b3JlKHN0YWNrKTtcbiAgICAgIHZtLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaCh1cGRhdGluZyk7XG4gICAgICB2bS51cGRhdGVXaXRoKHRoaXMpO1xuICAgICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKGNoaWxkcmVuKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJldiA9IHByZXY7XG4gICAgdGhpcy5uZXh0ID0gbmV4dDtcbiAgfVxuXG4gIHRvSlNPTigpIDogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IGpzb24gPSBzdXBlci50b0pTT04oKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIudG9KU09OKCk7XG4gIH1cbn1cblxuY2xhc3MgTGlzdFJldmFsaWRhdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZSB7XG4gIHByaXZhdGUgbWFwOiBEaWN0PEJsb2NrT3Bjb2RlPjtcbiAgcHJpdmF0ZSB1cGRhdGluZzogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG5cbiAgcHJpdmF0ZSBkaWRJbnNlcnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkaWREZWxldGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wY29kZTogTGlzdEJsb2NrT3Bjb2RlLCBwcml2YXRlIG1hcmtlcjogU2ltcGxlLkNvbW1lbnQpIHtcbiAgICB0aGlzLm1hcCA9IG9wY29kZS5tYXA7XG4gICAgdGhpcy51cGRhdGluZyA9IG9wY29kZVsnY2hpbGRyZW4nXTtcbiAgfVxuXG4gIGluc2VydChrZXk6IHN0cmluZywgaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBtZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCBvcGNvZGUsIHVwZGF0aW5nIH0gPSB0aGlzO1xuICAgIGxldCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGw7XG4gICAgbGV0IHJlZmVyZW5jZTogT3B0aW9uPEJsb2NrT3Bjb2RlPiA9IG51bGw7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXTtcbiAgICAgIG5leHRTaWJsaW5nID0gcmVmZXJlbmNlWydib3VuZHMnXS5maXJzdE5vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dFNpYmxpbmcgPSB0aGlzLm1hcmtlcjtcbiAgICB9XG5cbiAgICBsZXQgdm0gPSBvcGNvZGUudm1Gb3JJbnNlcnRpb24obmV4dFNpYmxpbmcpO1xuICAgIGxldCB0cnlPcGNvZGU6IE9wdGlvbjxUcnlPcGNvZGU+ID0gbnVsbDtcblxuICAgIGxldCB7IHN0YXJ0IH0gPSBvcGNvZGU7XG5cbiAgICB2bS5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICBtYXBba2V5XSA9IHRyeU9wY29kZSA9IHZtLml0ZXJhdGUobWVtbywgaXRlbSk7XG4gICAgICB2bS51cGRhdGluZ09wY29kZVN0YWNrLnB1c2gobmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpO1xuICAgICAgdm0udXBkYXRlV2l0aCh0cnlPcGNvZGUpO1xuICAgICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKHRyeU9wY29kZS5jaGlsZHJlbik7XG4gICAgfSk7XG5cbiAgICB1cGRhdGluZy5pbnNlcnRCZWZvcmUodHJ5T3Bjb2RlISwgcmVmZXJlbmNlKTtcblxuICAgIHRoaXMuZGlkSW5zZXJ0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldGFpbihfa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4pIHtcbiAgfVxuXG4gIG1vdmUoa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCB1cGRhdGluZyB9ID0gdGhpcztcblxuICAgIGxldCBlbnRyeSA9IG1hcFtrZXldO1xuICAgIGxldCByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXSB8fCBudWxsO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgcmVmZXJlbmNlLmZpcnN0Tm9kZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgdGhpcy5tYXJrZXIpO1xuICAgIH1cblxuICAgIHVwZGF0aW5nLnJlbW92ZShlbnRyeSk7XG4gICAgdXBkYXRpbmcuaW5zZXJ0QmVmb3JlKGVudHJ5LCByZWZlcmVuY2UpO1xuICB9XG5cbiAgZGVsZXRlKGtleTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwIH0gPSB0aGlzO1xuICAgIGxldCBvcGNvZGUgPSBtYXBba2V5XTtcbiAgICBvcGNvZGUuZGlkRGVzdHJveSgpO1xuICAgIGNsZWFyKG9wY29kZSk7XG4gICAgdGhpcy51cGRhdGluZy5yZW1vdmUob3Bjb2RlKTtcbiAgICBkZWxldGUgbWFwW2tleV07XG5cbiAgICB0aGlzLmRpZERlbGV0ZSA9IHRydWU7XG4gIH1cblxuICBkb25lKCkge1xuICAgIHRoaXMub3Bjb2RlLmRpZEluaXRpYWxpemVDaGlsZHJlbih0aGlzLmRpZEluc2VydCB8fCB0aGlzLmRpZERlbGV0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCbG9ja09wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImxpc3QtYmxvY2tcIjtcbiAgcHVibGljIG1hcCA9IGRpY3Q8QmxvY2tPcGNvZGU+KCk7XG4gIHB1YmxpYyBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBwcml2YXRlIGxhc3RJdGVyYXRlZDogUmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBjb25zdHJ1Y3RvcihzdGFydDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBUcmFja2VyLCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4sIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzKSB7XG4gICAgc3VwZXIoc3RhcnQsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgICBsZXQgX3RhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUoQ09OU1RBTlRfVEFHKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW2FydGlmYWN0cy50YWcsIF90YWddKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbihsaXN0RGlkQ2hhbmdlID0gdHJ1ZSkge1xuICAgIHRoaXMubGFzdEl0ZXJhdGVkID0gdGhpcy5hcnRpZmFjdHMudGFnLnZhbHVlKCk7XG5cbiAgICBpZiAobGlzdERpZENoYW5nZSkge1xuICAgICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgYXJ0aWZhY3RzLCBsYXN0SXRlcmF0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWFydGlmYWN0cy50YWcudmFsaWRhdGUobGFzdEl0ZXJhdGVkKSkge1xuICAgICAgbGV0IHsgYm91bmRzIH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgbGV0IG1hcmtlciA9IGRvbS5jcmVhdGVDb21tZW50KCcnKTtcbiAgICAgIGRvbS5pbnNlcnRBZnRlcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBtYXJrZXIsIGV4cGVjdChib3VuZHMubGFzdE5vZGUoKSwgXCJjYW4ndCBpbnNlcnQgYWZ0ZXIgYW4gZW1wdHkgYm91bmRzXCIpKTtcblxuICAgICAgbGV0IHRhcmdldCA9IG5ldyBMaXN0UmV2YWxpZGF0aW9uRGVsZWdhdGUodGhpcywgbWFya2VyKTtcbiAgICAgIGxldCBzeW5jaHJvbml6ZXIgPSBuZXcgSXRlcmF0b3JTeW5jaHJvbml6ZXIoeyB0YXJnZXQsIGFydGlmYWN0cyB9KTtcblxuICAgICAgc3luY2hyb25pemVyLnN5bmMoKTtcblxuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50KCkucmVtb3ZlQ2hpbGQobWFya2VyKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gbm93LXVwZGF0ZWQgdXBkYXRpbmcgb3Bjb2Rlc1xuICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgfVxuXG4gIHZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KTogVk0ge1xuICAgIGxldCB7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIGxldCBlbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2suZm9ySW5pdGlhbFJlbmRlcihcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpLFxuICAgICAgbmV4dFNpYmxpbmdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG4gICAgbGV0IG1hcCA9IHRoaXMubWFwO1xuXG4gICAgbGV0IGlubmVyID0gT2JqZWN0LmtleXMobWFwKS5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfTogJHttYXBba2V5XS5fZ3VpZH1gO1xuICAgIH0pLmpvaW4oXCIsIFwiKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICBkZXRhaWxzW1wibWFwXCJdID0gYHske2lubmVyfX1gO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuY2xhc3MgVXBkYXRpbmdWTUZyYW1lIHtcbiAgcHJpdmF0ZSBjdXJyZW50OiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdm06IFVwZGF0aW5nVk0sIHByaXZhdGUgb3BzOiBVcGRhdGluZ09wU2VxLCBwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IE9wdGlvbjxFeGNlcHRpb25IYW5kbGVyPikge1xuICAgIHRoaXMudm0gPSB2bTtcbiAgICB0aGlzLm9wcyA9IG9wcztcbiAgICB0aGlzLmN1cnJlbnQgPSBvcHMuaGVhZCgpO1xuICB9XG5cbiAgZ290byhvcDogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLmN1cnJlbnQgPSBvcDtcbiAgfVxuXG4gIG5leHRTdGF0ZW1lbnQoKTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgbGV0IHsgY3VycmVudCwgb3BzIH0gPSB0aGlzO1xuICAgIGlmIChjdXJyZW50KSB0aGlzLmN1cnJlbnQgPSBvcHMubmV4dE5vZGUoY3VycmVudCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuZXhjZXB0aW9uSGFuZGxlcikge1xuICAgICAgdGhpcy5leGNlcHRpb25IYW5kbGVyLmhhbmRsZUV4Y2VwdGlvbigpO1xuICAgIH1cbiAgfVxufVxuIl19

@@ -8,3 +8,3 @@ import './lib/bootstrap';

export { AttributeManager as IAttributeManager, AttributeManager, PropertyManager, INPUT_VALUE_PROPERTY_MANAGER, defaultManagers, defaultAttributeManagers, defaultPropertyManagers, readDOMAttr } from './lib/dom/attribute-managers';
export { debugSlice } from './lib/opcodes';
export { Register, debugSlice } from './lib/opcodes';
export { normalizeTextValue } from './lib/compiled/opcodes/content';

@@ -25,2 +25,2 @@ export { setDebuggerCallback, resetDebuggerCallback } from './lib/compiled/opcodes/debugger';

export { ConcreteBounds } from './lib/bounds';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEFBQWlCLEFBQUM7QUFFekIsQUFBTyxTQUFFLEFBQU8sV0FBSSxBQUFlLEFBQTZCLHVCQUFNLEFBQWdCLEFBQUM7QUFFdkYsQUFBTyxTQUFFLEFBQWMsZ0JBQUUsQUFBbUIscUJBQUUsQUFBa0Isb0JBQUUsQUFBb0IsQUFBRSw0QkFBTSxBQUFrQixBQUFDO0FBRWpILEFBQU8sU0FDSixBQUFPLFdBQUksQUFBZ0IsQUFDN0Isd0JBQU0sQUFBZ0MsQUFBQztBQUV4QyxBQUFPLFNBRUwsQUFBYSxBQUNkLHFCQUFNLEFBQWdCLEFBQUM7QUFPeEIsQUFBTyxTQUNMLEFBQXNCLHdCQUN0QixBQUF1QixBQUd4QiwrQkFBTSxBQUF1QixBQUFDO0FBRS9CLEFBQU8sU0FDTCxBQUFnQixvQkFBSSxBQUFpQixtQkFDckMsQUFBZ0Isa0JBQ2hCLEFBQWUsaUJBQ2YsQUFBNEIsOEJBQzVCLEFBQWUsaUJBQ2YsQUFBd0IsMEJBQ3hCLEFBQXVCLHlCQUN2QixBQUFXLEFBQ1osbUJBQU0sQUFBOEIsQUFBQztBQUV0QyxBQUFPLFNBQ0wsQUFBVSxBQUNYLGtCQUFNLEFBQWUsQUFBQztBQUV2QixBQUFPLFNBQ0wsQUFBa0IsQUFDbkIsMEJBQU0sQUFBZ0MsQUFBQztBQUV4QyxBQUFPLFNBQ0wsQUFBbUIscUJBQ25CLEFBQXFCLEFBRXRCLDZCQUFNLEFBQWlDLEFBQUM7QUFFekMsQUFBTyxTQUNMLEFBQU8sV0FBSSxBQUFhLEFBQ3pCLHFCQUFNLEFBQStCLEFBQUM7QUFFdkMsQUFBTyxTQUNMLEFBQU0sVUFBSSxBQUFXLGFBQ3JCLEFBQU8sV0FBSSxBQUFZLGNBR3ZCLEFBQVcsYUFDWCxBQUFJLFFBQUksQUFBaUIsQUFDMUIseUJBQU0sQUFBd0IsQUFBQztBQUVoQyxBQUFPLFNBQ0wsQUFBVSxZQUNWLEFBQWtCLG9CQUtsQixBQUFnQixBQUNqQix3QkFBTSxBQUFlLEFBQUM7QUFFdkIsQUFBTyxTQUFrQixBQUFVLFlBQUUsQUFBWSxBQUFrQixvQkFBTSxBQUFVLEFBQUM7QUFXcEYsQUFBTyxTQUFjLEFBQVksQUFBRSxvQkFBTSxBQUFjLEFBQUM7QUFFeEQsQUFBTyxTQUNMLEFBQUssT0FDTCxBQUFPLFdBQUksQUFBVyxBQUd2QixtQkFBTSxBQUFtQixBQUFDO0FBRTNCLEFBQU8sU0FDTCxBQUFpQixBQUNsQix5QkFBTSxBQUFlLEFBQUM7QUFFdkIsQUFBTyxTQUlMLEFBQW1CLHFCQUluQixBQUFxQixBQUN0Qiw2QkFBTSxBQUE0QixBQUFDO0FBTXBDLEFBQU8sU0FBRSxBQUFPLFdBQUksQUFBVSxZQUFFLEFBQVUsY0FBSSxBQUFXLGFBQUUsQUFBbUIscUJBQUUsQUFBWSxjQUFFLEFBQWdCLEFBQUUsd0JBQU0sQUFBa0IsQUFBQztBQUN6SSxPQUFRLEtBQUssQUFBTSxZQUFNLEFBQXNCLEFBQUM7QUFDaEQsQUFBTyxTQUFFLEFBQU0sQUFBRSxBQUFDO0FBQ2xCLEFBQU8sU0FBRSxBQUFZLEFBQXFCLG9CQUFNLEFBQWUsQUFBQztBQUNoRSxBQUFPLFNBQXFCLEFBQWMsQUFBRSxzQkFBTSxBQUFjLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4vbGliL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZUZhY3RvcnksIFRlbXBsYXRlIH0gZnJvbSAnLi9saWIvdGVtcGxhdGUnO1xuXG5leHBvcnQgeyBOVUxMX1JFRkVSRU5DRSwgVU5ERUZJTkVEX1JFRkVSRU5DRSwgUHJpbWl0aXZlUmVmZXJlbmNlLCBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4vbGliL3JlZmVyZW5jZXMnO1xuXG5leHBvcnQge1xuICAgZGVmYXVsdCBhcyBPcGNvZGVCdWlsZGVyRFNMXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBpbGFibGVMYXlvdXQsXG4gIGNvbXBpbGVMYXlvdXRcbn0gZnJvbSAnLi9saWIvY29tcGlsZXInO1xuXG5leHBvcnQge1xuICBDb21wb25lbnRCdWlsZGVyLFxuICBDb21wb25lbnRBcmdzXG59IGZyb20gJy4vbGliL29wY29kZS1idWlsZGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZSxcbiAgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsXG4gIENvbXBpbGVkRHluYW1pY0Jsb2NrLFxuICBDb21waWxlZER5bmFtaWNQcm9ncmFtXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL2Jsb2Nrcyc7XG5cbmV4cG9ydCB7XG4gIEF0dHJpYnV0ZU1hbmFnZXIgYXMgSUF0dHJpYnV0ZU1hbmFnZXIsXG4gIEF0dHJpYnV0ZU1hbmFnZXIsXG4gIFByb3BlcnR5TWFuYWdlcixcbiAgSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUixcbiAgZGVmYXVsdE1hbmFnZXJzLFxuICBkZWZhdWx0QXR0cmlidXRlTWFuYWdlcnMsXG4gIGRlZmF1bHRQcm9wZXJ0eU1hbmFnZXJzLFxuICByZWFkRE9NQXR0clxufSBmcm9tICcuL2xpYi9kb20vYXR0cmlidXRlLW1hbmFnZXJzJztcblxuZXhwb3J0IHtcbiAgZGVidWdTbGljZVxufSBmcm9tICcuL2xpYi9vcGNvZGVzJztcblxuZXhwb3J0IHtcbiAgbm9ybWFsaXplVGV4dFZhbHVlXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvY29udGVudCc7XG5cbmV4cG9ydCB7XG4gIHNldERlYnVnZ2VyQ2FsbGJhY2ssXG4gIHJlc2V0RGVidWdnZXJDYWxsYmFjayxcbiAgRGVidWdDYWxsYmFja1xufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2RlYnVnZ2VyJztcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBnZXREeW5hbWljVmFyXG59IGZyb20gJy4vbGliL2hlbHBlcnMvZ2V0LWR5bmFtaWMtdmFyJztcblxuZXhwb3J0IHtcbiAgQmxvY2tzIGFzIEJsb2NrTWFjcm9zLFxuICBJbmxpbmVzIGFzIElubGluZU1hY3JvcyxcbiAgQmxvY2tNYWNybyxcbiAgTWlzc2luZ0Jsb2NrTWFjcm8sXG4gIGNvbXBpbGVMaXN0LFxuICBleHByIGFzIGNvbXBpbGVFeHByZXNzaW9uXG59IGZyb20gJy4vbGliL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQge1xuICBDbGllbnRTaWRlLFxuICBDb21waWxhYmxlVGVtcGxhdGUsXG4gIFNjYW5uZWRCbG9jayxcbiAgU2Nhbm5lZFByb2dyYW0sXG4gIEJsb2NrLFxuICBQcm9ncmFtLFxuICBjb21waWxlU3RhdGVtZW50XG59IGZyb20gJy4vbGliL3NjYW5uZXInO1xuXG5leHBvcnQgeyBQdWJsaWNWTSBhcyBWTSwgVXBkYXRpbmdWTSwgUmVuZGVyUmVzdWx0LCBJdGVyYXRvclJlc3VsdCB9IGZyb20gJy4vbGliL3ZtJztcblxuZXhwb3J0IHtcbiAgSUFyZ3VtZW50cyBhcyBBcmd1bWVudHMsXG4gIElDYXB0dXJlZEFyZ3VtZW50cyBhcyBDYXB0dXJlZEFyZ3VtZW50cyxcbiAgSVBvc2l0aW9uYWxBcmd1bWVudHMgYXMgUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyBhcyBDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHMsXG4gIElOYW1lZEFyZ3VtZW50cyBhcyBOYW1lZEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkTmFtZWRBcmd1bWVudHMgYXMgQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyxcbn0gZnJvbSAnLi9saWIvdm0vYXJndW1lbnRzJztcblxuZXhwb3J0IHsgU2FmZVN0cmluZywgaXNTYWZlU3RyaW5nIH0gZnJvbSAnLi9saWIvdXBzZXJ0JztcblxuZXhwb3J0IHtcbiAgU2NvcGUsXG4gIGRlZmF1bHQgYXMgRW52aXJvbm1lbnQsXG4gIEhlbHBlcixcbiAgRHluYW1pY1Njb3BlLFxufSBmcm9tICcuL2xpYi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCB7XG4gIFBhcnRpYWxEZWZpbml0aW9uXG59IGZyb20gJy4vbGliL3BhcnRpYWwnO1xuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudENsYXNzLFxuICBDb21wb25lbnRNYW5hZ2VyLFxuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRMYXlvdXRCdWlsZGVyLFxuICBDb21wb25lbnRBdHRyc0J1aWxkZXIsXG4gIFByZXBhcmVkQXJndW1lbnRzLFxuICBpc0NvbXBvbmVudERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvY29tcG9uZW50L2ludGVyZmFjZXMnO1xuXG5leHBvcnQge1xuICBNb2RpZmllck1hbmFnZXJcbn0gZnJvbSAnLi9saWIvbW9kaWZpZXIvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgRE9NQ2hhbmdlcywgRE9NQ2hhbmdlcyBhcyBJRE9NQ2hhbmdlcywgRE9NVHJlZUNvbnN0cnVjdGlvbiwgaXNXaGl0ZXNwYWNlLCBpbnNlcnRIVE1MQmVmb3JlIH0gZnJvbSAnLi9saWIvZG9tL2hlbHBlcic7XG5pbXBvcnQgICogYXMgU2ltcGxlIGZyb20gJy4vbGliL2RvbS9pbnRlcmZhY2VzJztcbmV4cG9ydCB7IFNpbXBsZSB9O1xuZXhwb3J0IHsgRWxlbWVudFN0YWNrLCBFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4vbGliL2J1aWxkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMsIENvbmNyZXRlQm91bmRzIH0gZnJvbSAnLi9saWIvYm91bmRzJztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEFBQWlCLEFBQUM7QUFFekIsQUFBTyxTQUFFLEFBQU8sV0FBSSxBQUFlLEFBQTZCLHVCQUFNLEFBQWdCLEFBQUM7QUFFdkYsQUFBTyxTQUFFLEFBQWMsZ0JBQUUsQUFBbUIscUJBQUUsQUFBa0Isb0JBQUUsQUFBb0IsQUFBRSw0QkFBTSxBQUFrQixBQUFDO0FBRWpILEFBQU8sU0FDSixBQUFPLFdBQUksQUFBZ0IsQUFDN0Isd0JBQU0sQUFBZ0MsQUFBQztBQUV4QyxBQUFPLFNBRUwsQUFBYSxBQUNkLHFCQUFNLEFBQWdCLEFBQUM7QUFPeEIsQUFBTyxTQUNMLEFBQXNCLHdCQUN0QixBQUF1QixBQUd4QiwrQkFBTSxBQUF1QixBQUFDO0FBRS9CLEFBQU8sU0FDTCxBQUFnQixvQkFBSSxBQUFpQixtQkFDckMsQUFBZ0Isa0JBQ2hCLEFBQWUsaUJBQ2YsQUFBNEIsOEJBQzVCLEFBQWUsaUJBQ2YsQUFBd0IsMEJBQ3hCLEFBQXVCLHlCQUN2QixBQUFXLEFBQ1osbUJBQU0sQUFBOEIsQUFBQztBQUV0QyxBQUFPLFNBQ0wsQUFBUSxVQUNSLEFBQVUsQUFDWCxrQkFBTSxBQUFlLEFBQUM7QUFFdkIsQUFBTyxTQUNMLEFBQWtCLEFBQ25CLDBCQUFNLEFBQWdDLEFBQUM7QUFFeEMsQUFBTyxTQUNMLEFBQW1CLHFCQUNuQixBQUFxQixBQUV0Qiw2QkFBTSxBQUFpQyxBQUFDO0FBRXpDLEFBQU8sU0FDTCxBQUFPLFdBQUksQUFBYSxBQUN6QixxQkFBTSxBQUErQixBQUFDO0FBRXZDLEFBQU8sU0FDTCxBQUFNLFVBQUksQUFBVyxhQUNyQixBQUFPLFdBQUksQUFBWSxjQUd2QixBQUFXLGFBQ1gsQUFBSSxRQUFJLEFBQWlCLEFBQzFCLHlCQUFNLEFBQXdCLEFBQUM7QUFFaEMsQUFBTyxTQUNMLEFBQVUsWUFDVixBQUFrQixvQkFLbEIsQUFBZ0IsQUFDakIsd0JBQU0sQUFBZSxBQUFDO0FBRXZCLEFBQU8sU0FBa0IsQUFBVSxZQUFFLEFBQVksQUFBa0Isb0JBQU0sQUFBVSxBQUFDO0FBV3BGLEFBQU8sU0FBYyxBQUFZLEFBQUUsb0JBQU0sQUFBYyxBQUFDO0FBRXhELEFBQU8sU0FDTCxBQUFLLE9BQ0wsQUFBTyxXQUFJLEFBQVcsQUFHdkIsbUJBQU0sQUFBbUIsQUFBQztBQUUzQixBQUFPLFNBQ0wsQUFBaUIsQUFDbEIseUJBQU0sQUFBZSxBQUFDO0FBRXZCLEFBQU8sU0FJTCxBQUFtQixxQkFJbkIsQUFBcUIsQUFDdEIsNkJBQU0sQUFBNEIsQUFBQztBQU1wQyxBQUFPLFNBQUUsQUFBTyxXQUFJLEFBQVUsWUFBRSxBQUFVLGNBQUksQUFBVyxhQUFFLEFBQW1CLHFCQUFFLEFBQVksY0FBRSxBQUFnQixBQUFFLHdCQUFNLEFBQWtCLEFBQUM7QUFDekksT0FBUSxLQUFLLEFBQU0sWUFBTSxBQUFzQixBQUFDO0FBQ2hELEFBQU8sU0FBRSxBQUFNLEFBQUUsQUFBQztBQUNsQixBQUFPLFNBQUUsQUFBWSxBQUFxQixvQkFBTSxBQUFlLEFBQUM7QUFDaEUsQUFBTyxTQUFxQixBQUFjLEFBQUUsc0JBQU0sQUFBYyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuL2xpYi9ib290c3RyYXAnO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRlbXBsYXRlRmFjdG9yeSwgVGVtcGxhdGVGYWN0b3J5LCBUZW1wbGF0ZSB9IGZyb20gJy4vbGliL3RlbXBsYXRlJztcblxuZXhwb3J0IHsgTlVMTF9SRUZFUkVOQ0UsIFVOREVGSU5FRF9SRUZFUkVOQ0UsIFByaW1pdGl2ZVJlZmVyZW5jZSwgQ29uZGl0aW9uYWxSZWZlcmVuY2UgfSBmcm9tICcuL2xpYi9yZWZlcmVuY2VzJztcblxuZXhwb3J0IHtcbiAgIGRlZmF1bHQgYXMgT3Bjb2RlQnVpbGRlckRTTFxufSBmcm9tICcuL2xpYi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5leHBvcnQge1xuICBDb21waWxhYmxlTGF5b3V0LFxuICBjb21waWxlTGF5b3V0XG59IGZyb20gJy4vbGliL2NvbXBpbGVyJztcblxuZXhwb3J0IHtcbiAgQ29tcG9uZW50QnVpbGRlcixcbiAgQ29tcG9uZW50QXJnc1xufSBmcm9tICcuL2xpYi9vcGNvZGUtYnVpbGRlcic7XG5cbmV4cG9ydCB7XG4gIENvbXBpbGVkU3RhdGljVGVtcGxhdGUsXG4gIENvbXBpbGVkRHluYW1pY1RlbXBsYXRlLFxuICBDb21waWxlZER5bmFtaWNCbG9jayxcbiAgQ29tcGlsZWREeW5hbWljUHJvZ3JhbVxufSBmcm9tICcuL2xpYi9jb21waWxlZC9ibG9ja3MnO1xuXG5leHBvcnQge1xuICBBdHRyaWJ1dGVNYW5hZ2VyIGFzIElBdHRyaWJ1dGVNYW5hZ2VyLFxuICBBdHRyaWJ1dGVNYW5hZ2VyLFxuICBQcm9wZXJ0eU1hbmFnZXIsXG4gIElOUFVUX1ZBTFVFX1BST1BFUlRZX01BTkFHRVIsXG4gIGRlZmF1bHRNYW5hZ2VycyxcbiAgZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzLFxuICBkZWZhdWx0UHJvcGVydHlNYW5hZ2VycyxcbiAgcmVhZERPTUF0dHJcbn0gZnJvbSAnLi9saWIvZG9tL2F0dHJpYnV0ZS1tYW5hZ2Vycyc7XG5cbmV4cG9ydCB7XG4gIFJlZ2lzdGVyLFxuICBkZWJ1Z1NsaWNlXG59IGZyb20gJy4vbGliL29wY29kZXMnO1xuXG5leHBvcnQge1xuICBub3JtYWxpemVUZXh0VmFsdWVcbn0gZnJvbSAnLi9saWIvY29tcGlsZWQvb3Bjb2Rlcy9jb250ZW50JztcblxuZXhwb3J0IHtcbiAgc2V0RGVidWdnZXJDYWxsYmFjayxcbiAgcmVzZXREZWJ1Z2dlckNhbGxiYWNrLFxuICBEZWJ1Z0NhbGxiYWNrXG59IGZyb20gJy4vbGliL2NvbXBpbGVkL29wY29kZXMvZGVidWdnZXInO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGdldER5bmFtaWNWYXJcbn0gZnJvbSAnLi9saWIvaGVscGVycy9nZXQtZHluYW1pYy12YXInO1xuXG5leHBvcnQge1xuICBCbG9ja3MgYXMgQmxvY2tNYWNyb3MsXG4gIElubGluZXMgYXMgSW5saW5lTWFjcm9zLFxuICBCbG9ja01hY3JvLFxuICBNaXNzaW5nQmxvY2tNYWNybyxcbiAgY29tcGlsZUxpc3QsXG4gIGV4cHIgYXMgY29tcGlsZUV4cHJlc3Npb25cbn0gZnJvbSAnLi9saWIvc3ludGF4L2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCB7XG4gIENsaWVudFNpZGUsXG4gIENvbXBpbGFibGVUZW1wbGF0ZSxcbiAgU2Nhbm5lZEJsb2NrLFxuICBTY2FubmVkUHJvZ3JhbSxcbiAgQmxvY2ssXG4gIFByb2dyYW0sXG4gIGNvbXBpbGVTdGF0ZW1lbnRcbn0gZnJvbSAnLi9saWIvc2Nhbm5lcic7XG5cbmV4cG9ydCB7IFB1YmxpY1ZNIGFzIFZNLCBVcGRhdGluZ1ZNLCBSZW5kZXJSZXN1bHQsIEl0ZXJhdG9yUmVzdWx0IH0gZnJvbSAnLi9saWIvdm0nO1xuXG5leHBvcnQge1xuICBJQXJndW1lbnRzIGFzIEFyZ3VtZW50cyxcbiAgSUNhcHR1cmVkQXJndW1lbnRzIGFzIENhcHR1cmVkQXJndW1lbnRzLFxuICBJUG9zaXRpb25hbEFyZ3VtZW50cyBhcyBQb3NpdGlvbmFsQXJndW1lbnRzLFxuICBJQ2FwdHVyZWRQb3NpdGlvbmFsQXJndW1lbnRzIGFzIENhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyxcbiAgSU5hbWVkQXJndW1lbnRzIGFzIE5hbWVkQXJndW1lbnRzLFxuICBJQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyBhcyBDYXB0dXJlZE5hbWVkQXJndW1lbnRzLFxufSBmcm9tICcuL2xpYi92bS9hcmd1bWVudHMnO1xuXG5leHBvcnQgeyBTYWZlU3RyaW5nLCBpc1NhZmVTdHJpbmcgfSBmcm9tICcuL2xpYi91cHNlcnQnO1xuXG5leHBvcnQge1xuICBTY29wZSxcbiAgZGVmYXVsdCBhcyBFbnZpcm9ubWVudCxcbiAgSGVscGVyLFxuICBEeW5hbWljU2NvcGUsXG59IGZyb20gJy4vbGliL2Vudmlyb25tZW50JztcblxuZXhwb3J0IHtcbiAgUGFydGlhbERlZmluaXRpb25cbn0gZnJvbSAnLi9saWIvcGFydGlhbCc7XG5cbmV4cG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50Q2xhc3MsXG4gIENvbXBvbmVudE1hbmFnZXIsXG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIENvbXBvbmVudExheW91dEJ1aWxkZXIsXG4gIENvbXBvbmVudEF0dHJzQnVpbGRlcixcbiAgUHJlcGFyZWRBcmd1bWVudHMsXG4gIGlzQ29tcG9uZW50RGVmaW5pdGlvblxufSBmcm9tICcuL2xpYi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCB7XG4gIE1vZGlmaWVyTWFuYWdlclxufSBmcm9tICcuL2xpYi9tb2RpZmllci9pbnRlcmZhY2VzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBET01DaGFuZ2VzLCBET01DaGFuZ2VzIGFzIElET01DaGFuZ2VzLCBET01UcmVlQ29uc3RydWN0aW9uLCBpc1doaXRlc3BhY2UsIGluc2VydEhUTUxCZWZvcmUgfSBmcm9tICcuL2xpYi9kb20vaGVscGVyJztcbmltcG9ydCAgKiBhcyBTaW1wbGUgZnJvbSAnLi9saWIvZG9tL2ludGVyZmFjZXMnO1xuZXhwb3J0IHsgU2ltcGxlIH07XG5leHBvcnQgeyBFbGVtZW50U3RhY2ssIEVsZW1lbnRPcGVyYXRpb25zIH0gZnJvbSAnLi9saWIvYnVpbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvdW5kcywgQ29uY3JldGVCb3VuZHMgfSBmcm9tICcuL2xpYi9ib3VuZHMnO1xuIl19

@@ -81,2 +81,3 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }

this.defaultOperations = new SimpleElementOperations(env);
this.pushSimpleBlock();
this.elementStack.push(this.element);

@@ -361,5 +362,6 @@ this.nextSiblingStack.push(this.nextSibling);

var nextSibling = clear(this);
this.destroyables = null;
this.first = null;
this.last = null;
this.destroyables = null;
this.nesting = 0;
return nextSibling;

@@ -421,2 +423,2 @@ };

}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFlLFNBQTZCLEFBQUssQUFBRSxhQUFNLEFBQVUsQUFBQztBQUlwRSxBQUFPLFNBQXVCLEFBQUssT0FBOEIsQUFBTSxRQUFFLEFBQU0sQUFBRSxjQUFNLEFBQWUsQUFBQztBQVF2RyxBQUFPLFNBQ0wsQUFBdUIsQUFDeEIsK0JBQU0sQUFBd0IsQUFBQyxBQVloQzs7O0FBQ0UsbUJBQW9CLEFBQVU7OztBQUFWLGFBQUksT0FBSixBQUFJLEFBQU0sQUFBSTtBQUFDOztvQkFFbkMsQUFBUztBQUNQLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQ25CO0FBQUMsQUFDRixBQUVEOzs7Ozs7QUFDRSxrQkFBb0IsQUFBVTs7O0FBQVYsYUFBSSxPQUFKLEFBQUksQUFBTSxBQUFJO0FBQUM7O21CQUVuQyxBQUFRO0FBQ04sQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFJLEFBQUMsQUFDbkI7QUFBQyxBQUNGOzs7OztBQVVELEFBQU07QUFHSixzQkFBWSxBQUFjOzs7QUFDeEIsQUFBSSxhQUFDLEFBQU0sU0FBRyxBQUFNLEFBQUMsQUFDdkI7QUFBQzs7dUJBRUQsQUFBYTtBQUNYLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQWEsQUFBRSxBQUFDLEFBQ3JDO0FBQUM7O3VCQUVELEFBQVM7QUFDUCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNqQztBQUFDOzt1QkFFRCxBQUFRO0FBQ04sQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBUSxBQUFFLEFBQUMsQUFDaEM7QUFBQzs7dUJBRUQsQUFBTSx5QkFBQyxBQUFjO0FBQ25CLEFBQUksYUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQ3ZCO0FBQUMsQUFDRjs7OztBQUVELEFBQU07QUE0Qkos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LEFBQU0sU0FBRyxBQUFNLEFBQUM7QUFDckIsQUFBSSxhQUFDLEFBQVMsWUFBRyxBQUFTLEFBQUMsQUFDN0I7QUFBQzs7K0JBRUQsQUFBTztBQUNMLEFBQUksYUFBQyxBQUFTLFVBQUMsQUFBVztBQUFDLEFBQUksbUJBQUksQUFBSSxLQUFDLEFBQU8sQUFBRSxBQUFDLEFBQUMsQUFDckQ7O0FBQUM7OytCQUVELEFBQWE7QUFDWCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUNyQjtBQUFDOzsrQkFFRCxBQUFTO0FBQ1AsWUFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEFBQUUsQUFBQztBQUNqQyxBQUFNLGVBQUMsQUFBSSxRQUFJLEFBQUksS0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNsQztBQUFDOzsrQkFFRCxBQUFRO0FBQ04sWUFBSSxBQUFJLE9BQUcsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEFBQUUsQUFBQztBQUNqQyxBQUFNLGVBQUMsQUFBSSxRQUFJLEFBQUksS0FBQyxBQUFRLEFBQUUsQUFBQyxBQUNqQztBQUFDOzsrQkFFRCxBQUFXLG1DQUFDLEFBQWlCO0FBQzNCLEFBQU0sZUFBQyxBQUFLLE9BQUUsQUFBaUQsQUFBQyxBQUFDLEFBQ25FO0FBQUM7OytCQUVELEFBQVk7QUFDVixBQUFNLGVBQUMsQUFBSyxPQUFFLEFBQWtELEFBQUMsQUFBQyxBQUNwRTtBQUFDOzsrQkFFRCxBQUFPLDJCQUFDLEFBQVc7QUFDakIsQUFBTSxlQUFDLEFBQUssT0FBRSxBQUF1RCxBQUFDLEFBQUMsQUFDekU7QUFBQzs7K0JBRUQsQUFBUywrQkFBQyxBQUFlLFNBQ3pCLENBQUM7OytCQUVELEFBQWMseUNBQUMsQUFBZSxJQUM5QixDQUFDOzsrQkFFRCxBQUFRLDZCQUFDLEFBQW9CLFFBQzdCLENBQUMsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCb3VuZHMsIHsgQ3Vyc29yLCBEZXN0cm95YWJsZUJvdW5kcywgY2xlYXIgfSBmcm9tICcuL2JvdW5kcyc7XG5cbmltcG9ydCB7IERPTUNoYW5nZXMsIERPTVRyZWVDb25zdHJ1Y3Rpb24gfSBmcm9tICcuL2RvbS9oZWxwZXInO1xuXG5pbXBvcnQgeyBPcHRpb24sIERlc3Ryb3lhYmxlLCBTdGFjaywgTGlua2VkTGlzdCwgTGlua2VkTGlzdE5vZGUsIGFzc2VydCwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7IFZNIH0gZnJvbSAnLi92bSc7XG5cbmltcG9ydCB7IFZlcnNpb25lZFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmltcG9ydCB7XG4gIFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zXG59IGZyb20gJy4vY29tcGlsZWQvb3Bjb2Rlcy9kb20nO1xuXG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi9kb20vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyc3ROb2RlIHtcbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFzdE5vZGUge1xuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+O1xufVxuXG5jbGFzcyBGaXJzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbm9kZTogTm9kZSkgeyB9XG5cbiAgZmlyc3ROb2RlKCk6IE5vZGUge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cbn1cblxuY2xhc3MgTGFzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbm9kZTogTm9kZSkgeyB9XG5cbiAgbGFzdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKTogdm9pZDtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEZyYWdtZW50IGltcGxlbWVudHMgQm91bmRzIHtcbiAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kcztcblxuICBjb25zdHJ1Y3Rvcihib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG5cbiAgcGFyZW50RWxlbWVudCgpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIHVwZGF0ZShib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50U3RhY2sgaW1wbGVtZW50cyBDdXJzb3Ige1xuICBwdWJsaWMgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG4gIHB1YmxpYyBkb206IERPTVRyZWVDb25zdHJ1Y3Rpb247XG4gIHB1YmxpYyB1cGRhdGVPcGVyYXRpb25zOiBET01DaGFuZ2VzO1xuICBwdWJsaWMgY29uc3RydWN0aW5nOiBPcHRpb248U2ltcGxlLkVsZW1lbnQ+ID0gbnVsbDtcbiAgcHVibGljIG9wZXJhdGlvbnM6IE9wdGlvbjxFbGVtZW50T3BlcmF0aW9ucz4gPSBudWxsO1xuICBwdWJsaWMgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQ7XG4gIHB1YmxpYyBlbnY6IEVudmlyb25tZW50O1xuXG4gIHByaXZhdGUgZWxlbWVudFN0YWNrID0gbmV3IFN0YWNrPFNpbXBsZS5FbGVtZW50PigpO1xuICBwcml2YXRlIG5leHRTaWJsaW5nU3RhY2sgPSBuZXcgU3RhY2s8T3B0aW9uPFNpbXBsZS5Ob2RlPj4oKTtcbiAgcHJpdmF0ZSBibG9ja1N0YWNrID0gbmV3IFN0YWNrPFRyYWNrZXI+KCk7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0T3BlcmF0aW9uczogRWxlbWVudE9wZXJhdGlvbnM7XG5cbiAgc3RhdGljIGZvckluaXRpYWxSZW5kZXIoZW52OiBFbnZpcm9ubWVudCwgcGFyZW50Tm9kZTogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgcmV0dXJuIG5ldyBFbGVtZW50U3RhY2soZW52LCBwYXJlbnROb2RlLCBuZXh0U2libGluZyk7XG4gIH1cblxuICBzdGF0aWMgcmVzdW1lKGVudjogRW52aXJvbm1lbnQsIHRyYWNrZXI6IFRyYWNrZXIsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSB0cmFja2VyLnBhcmVudEVsZW1lbnQoKTtcblxuICAgIGxldCBzdGFjayA9IG5ldyBFbGVtZW50U3RhY2soZW52LCBwYXJlbnROb2RlLCBuZXh0U2libGluZyk7XG4gICAgc3RhY2sucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcblxuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGVudjogRW52aXJvbm1lbnQsIHBhcmVudE5vZGU6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPikge1xuICAgIHRoaXMuZW52ID0gZW52O1xuICAgIHRoaXMuZG9tID0gZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZU9wZXJhdGlvbnMgPSBlbnYuZ2V0RE9NKCk7XG4gICAgdGhpcy5lbGVtZW50ID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmc7XG5cbiAgICB0aGlzLmRlZmF1bHRPcGVyYXRpb25zID0gbmV3IFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zKGVudik7XG5cbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2godGhpcy5uZXh0U2libGluZyk7XG4gIH1cblxuICBleHBlY3RDb25zdHJ1Y3RpbmcobWV0aG9kOiBzdHJpbmcpOiBTaW1wbGUuRWxlbWVudCB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmNvbnN0cnVjdGluZywgYCR7bWV0aG9kfSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hpbGUgY29uc3RydWN0aW5nIGFuIGVsZW1lbnRgKTtcbiAgfVxuXG4gIGV4cGVjdE9wZXJhdGlvbnMobWV0aG9kOiBzdHJpbmcpOiBFbGVtZW50T3BlcmF0aW9ucyB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLm9wZXJhdGlvbnMsIGAke21ldGhvZH0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG4gIH1cblxuICBibG9jaygpOiBUcmFja2VyIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tTdGFjay5jdXJyZW50LCBcIkV4cGVjdGVkIGEgY3VycmVudCBibG9jayB0cmFja2VyXCIpO1xuICB9XG5cbiAgcG9wRWxlbWVudCgpIHtcbiAgICBsZXQgeyBlbGVtZW50U3RhY2ssIG5leHRTaWJsaW5nU3RhY2sgfSAgPSB0aGlzO1xuXG4gICAgbGV0IHRvcEVsZW1lbnQgPSBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgbmV4dFNpYmxpbmdTdGFjay5wb3AoKTtcbiAgICAvLyBMT0dHRVIuZGVidWcoYC0+IGVsZW1lbnQgc3RhY2sgJHt0aGlzLmVsZW1lbnRTdGFjay50b0FycmF5KCkubWFwKGUgPT4gZS50YWdOYW1lKS5qb2luKCcsICcpfWApO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gZXhwZWN0KGVsZW1lbnRTdGFjay5jdXJyZW50LCBcImNhbid0IHBvcCBwYXN0IHRoZSBsYXN0IGVsZW1lbnRcIik7XG4gICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRTaWJsaW5nU3RhY2suY3VycmVudDtcblxuICAgIHJldHVybiB0b3BFbGVtZW50O1xuICB9XG5cbiAgcHVzaFNpbXBsZUJsb2NrKCk6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IFNpbXBsZUJsb2NrVHJhY2tlcih0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hVcGRhdGFibGVCbG9jaygpOiBVcGRhdGFibGVUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBVcGRhdGFibGVCbG9ja1RyYWNrZXIodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwcml2YXRlIHB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcjogVHJhY2tlciwgaXNSZW1vdGUgPSBmYWxzZSkge1xuICAgIGxldCBjdXJyZW50ID0gdGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQ7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY3VycmVudC5uZXdEZXN0cm95YWJsZSh0cmFja2VyKTtcblxuICAgICAgaWYgKCFpc1JlbW90ZSkge1xuICAgICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHB1c2hCbG9ja0xpc3QobGlzdDogTGlua2VkTGlzdDxMaW5rZWRMaXN0Tm9kZSAmIEJvdW5kcyAmIERlc3Ryb3lhYmxlPik6IFRyYWNrZXIge1xuICAgIGxldCB0cmFja2VyID0gbmV3IEJsb2NrTGlzdFRyYWNrZXIodGhpcy5lbGVtZW50LCBsaXN0KTtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuYmxvY2tTdGFjay5jdXJyZW50O1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQubmV3RGVzdHJveWFibGUodHJhY2tlcik7XG4gICAgICBjdXJyZW50Lm5ld0JvdW5kcyh0cmFja2VyKTtcbiAgICB9XG5cbiAgICB0aGlzLmJsb2NrU3RhY2sucHVzaCh0cmFja2VyKTtcbiAgICByZXR1cm4gdHJhY2tlcjtcbiAgfVxuXG4gIHBvcEJsb2NrKCk6IFRyYWNrZXIge1xuICAgIHRoaXMuYmxvY2soKS5maW5hbGl6ZSh0aGlzKTtcblxuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja1N0YWNrLnBvcCgpLCBcIkV4cGVjdGVkIHBvcEJsb2NrIHRvIHJldHVybiBhIGJsb2NrXCIpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQodGFnOiBzdHJpbmcsIG9wZXJhdGlvbnMgPSB0aGlzLmRlZmF1bHRPcGVyYXRpb25zKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIGxldCBlbGVtZW50ID0gdGhpcy5kb20uY3JlYXRlRWxlbWVudCh0YWcsIHRoaXMuZWxlbWVudCk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdGluZyA9IGVsZW1lbnQ7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gb3BlcmF0aW9ucztcblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIGxldCBwYXJlbnQgID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBlbGVtZW50ID0gZXhwZWN0KHRoaXMuY29uc3RydWN0aW5nLCBgZmx1c2hFbGVtZW50IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG5cbiAgICB0aGlzLmRvbS5pbnNlcnRCZWZvcmUocGFyZW50LCBlbGVtZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcblxuICAgIHRoaXMuY29uc3RydWN0aW5nID0gbnVsbDtcbiAgICB0aGlzLm9wZXJhdGlvbnMgPSBudWxsO1xuXG4gICAgdGhpcy5wdXNoRWxlbWVudChlbGVtZW50KTtcbiAgICB0aGlzLmJsb2NrKCkub3BlbkVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICBwdXNoUmVtb3RlRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsKSB7XG4gICAgdGhpcy5wdXNoRWxlbWVudChlbGVtZW50LCBuZXh0U2libGluZyk7XG5cbiAgICBsZXQgdHJhY2tlciA9IG5ldyBSZW1vdGVCbG9ja1RyYWNrZXIoZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIsIHRydWUpO1xuICB9XG5cbiAgcG9wUmVtb3RlRWxlbWVudCgpIHtcbiAgICB0aGlzLnBvcEJsb2NrKCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hFbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGwpIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuZWxlbWVudFN0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgLy8gTE9HR0VSLmRlYnVnKGAtPiBlbGVtZW50IHN0YWNrICR7dGhpcy5lbGVtZW50U3RhY2sudG9BcnJheSgpLm1hcChlID0+IGUudGFnTmFtZSkuam9pbignLCAnKX1gKTtcblxuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZztcbiAgICB0aGlzLm5leHRTaWJsaW5nU3RhY2sucHVzaChuZXh0U2libGluZyk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuYmxvY2soKS5uZXdEZXN0cm95YWJsZShkKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcykge1xuICAgIHRoaXMuYmxvY2soKS5uZXdCb3VuZHMoYm91bmRzKTtcbiAgfVxuXG4gIGFwcGVuZFRleHQoc3RyaW5nOiBzdHJpbmcpOiBTaW1wbGUuVGV4dCB7XG4gICAgbGV0IHsgZG9tIH0gPSB0aGlzO1xuICAgIGxldCB0ZXh0ID0gZG9tLmNyZWF0ZVRleHROb2RlKHN0cmluZyk7XG4gICAgZG9tLmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsIHRleHQsIHRoaXMubmV4dFNpYmxpbmcpO1xuICAgIHRoaXMuYmxvY2soKS5uZXdOb2RlKHRleHQpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgYXBwZW5kQ29tbWVudChzdHJpbmc6IHN0cmluZyk6IFNpbXBsZS5Db21tZW50IHtcbiAgICBsZXQgeyBkb20gfSA9IHRoaXM7XG4gICAgbGV0IGNvbW1lbnQgPSBkb20uY3JlYXRlQ29tbWVudChzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCBjb21tZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrKCkubmV3Tm9kZShjb21tZW50KTtcbiAgICByZXR1cm4gY29tbWVudDtcbiAgfVxuXG4gIHNldFN0YXRpY0F0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldFN0YXRpY0F0dHJpYnV0ZScpLmFkZFN0YXRpY0F0dHJpYnV0ZSh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0U3RhdGljQXR0cmlidXRlJyksIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldFN0YXRpY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldFN0YXRpY0F0dHJpYnV0ZU5TJykuYWRkU3RhdGljQXR0cmlidXRlTlModGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldFN0YXRpY0F0dHJpYnV0ZU5TJyksIG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldER5bmFtaWNBdHRyaWJ1dGUnKS5hZGREeW5hbWljQXR0cmlidXRlKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXREeW5hbWljQXR0cmlidXRlJyksIG5hbWUsIHJlZmVyZW5jZSwgaXNUcnVzdGluZyk7XG4gIH1cblxuICBzZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuZXhwZWN0T3BlcmF0aW9ucygnc2V0RHluYW1pY0F0dHJpYnV0ZU5TJykuYWRkRHluYW1pY0F0dHJpYnV0ZU5TKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXREeW5hbWljQXR0cmlidXRlTlMnKSwgbmFtZXNwYWNlLCBuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIHRoaXMuYmxvY2soKS5jbG9zZUVsZW1lbnQoKTtcbiAgICB0aGlzLnBvcEVsZW1lbnQoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXIgZXh0ZW5kcyBEZXN0cm95YWJsZUJvdW5kcyB7XG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50KTogdm9pZDtcbiAgY2xvc2VFbGVtZW50KCk6IHZvaWQ7XG4gIG5ld05vZGUobm9kZTogU2ltcGxlLk5vZGUpOiB2b2lkO1xuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpOiB2b2lkO1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk6IHZvaWQ7XG4gIGZpbmFsaXplKHN0YWNrOiBFbGVtZW50U3RhY2spOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlQmxvY2tUcmFja2VyIGltcGxlbWVudHMgVHJhY2tlciB7XG4gIHByb3RlY3RlZCBmaXJzdDogT3B0aW9uPEZpcnN0Tm9kZT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgbGFzdDogT3B0aW9uPExhc3ROb2RlPiA9IG51bGw7XG4gIHByb3RlY3RlZCBkZXN0cm95YWJsZXM6IE9wdGlvbjxEZXN0cm95YWJsZVtdPiA9IG51bGw7XG4gIHByb3RlY3RlZCBuZXN0aW5nID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU2ltcGxlLkVsZW1lbnQpe31cblxuICBkZXN0cm95KCkge1xuICAgIGxldCB7IGRlc3Ryb3lhYmxlcyB9ID0gdGhpcztcblxuICAgIGlmIChkZXN0cm95YWJsZXMgJiYgZGVzdHJveWFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPGRlc3Ryb3lhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkZXN0cm95YWJsZXNbaV0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmZpcnN0ICYmIHRoaXMuZmlyc3QuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5sYXN0ICYmIHRoaXMubGFzdC5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICAgIHRoaXMubmV3Tm9kZShlbGVtZW50KTtcbiAgICB0aGlzLm5lc3RpbmcrKztcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICB0aGlzLm5lc3RpbmctLTtcbiAgfVxuXG4gIG5ld05vZGUobm9kZTogTm9kZSkge1xuICAgIGlmICh0aGlzLm5lc3RpbmcgIT09IDApIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgdGhpcy5maXJzdCA9IG5ldyBGaXJzdChub2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3QgPSBuZXcgTGFzdChub2RlKTtcbiAgfVxuXG4gIG5ld0JvdW5kcyhib3VuZHM6IEJvdW5kcykge1xuICAgIGlmICh0aGlzLm5lc3RpbmcgIT09IDApIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdCkge1xuICAgICAgdGhpcy5maXJzdCA9IGJvdW5kcztcbiAgICB9XG5cbiAgICB0aGlzLmxhc3QgPSBib3VuZHM7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuZGVzdHJveWFibGVzID0gdGhpcy5kZXN0cm95YWJsZXMgfHwgW107XG4gICAgdGhpcy5kZXN0cm95YWJsZXMucHVzaChkKTtcbiAgfVxuXG4gIGZpbmFsaXplKHN0YWNrOiBFbGVtZW50U3RhY2spIHtcbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHN0YWNrLmFwcGVuZENvbW1lbnQoJycpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZW1vdGVCbG9ja1RyYWNrZXIgZXh0ZW5kcyBTaW1wbGVCbG9ja1RyYWNrZXIge1xuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcblxuICAgIGNsZWFyKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRhYmxlVHJhY2tlciBleHRlbmRzIFRyYWNrZXIge1xuICByZXNldChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0YWJsZUJsb2NrVHJhY2tlciBleHRlbmRzIFNpbXBsZUJsb2NrVHJhY2tlciBpbXBsZW1lbnRzIFVwZGF0YWJsZVRyYWNrZXIge1xuICByZXNldChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IHsgZGVzdHJveWFibGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlc3Ryb3lhYmxlcyAmJiBkZXN0cm95YWJsZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpPTA7IGk8ZGVzdHJveWFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudi5kaWREZXN0cm95KGRlc3Ryb3lhYmxlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5leHRTaWJsaW5nID0gY2xlYXIodGhpcyk7XG5cbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IG51bGw7XG4gICAgdGhpcy5maXJzdCA9IG51bGw7XG4gICAgdGhpcy5sYXN0ID0gbnVsbDtcblxuICAgIHJldHVybiBuZXh0U2libGluZztcbiAgfVxufVxuXG5jbGFzcyBCbG9ja0xpc3RUcmFja2VyIGltcGxlbWVudHMgVHJhY2tlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTaW1wbGUuRWxlbWVudCwgcHJpdmF0ZSBib3VuZExpc3Q6IExpbmtlZExpc3Q8TGlua2VkTGlzdE5vZGUgJiBCb3VuZHMgJiBEZXN0cm95YWJsZT4pIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLmJvdW5kTGlzdCA9IGJvdW5kTGlzdDtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ib3VuZExpc3QuZm9yRWFjaE5vZGUobm9kZSA9PiBub2RlLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgaGVhZCA9IHRoaXMuYm91bmRMaXN0LmhlYWQoKTtcbiAgICByZXR1cm4gaGVhZCAmJiBoZWFkLmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IHRhaWwgPSB0aGlzLmJvdW5kTGlzdC50YWlsKCk7XG4gICAgcmV0dXJuIHRhaWwgJiYgdGFpbC5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoX2VsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3Qgb3BlbkVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjbG9zZUVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgbmV3Tm9kZShfbm9kZTogTm9kZSkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgbm9kZSBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBuZXdCb3VuZHMoX2JvdW5kczogQm91bmRzKSB7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShfZDogRGVzdHJveWFibGUpIHtcbiAgfVxuXG4gIGZpbmFsaXplKF9zdGFjazogRWxlbWVudFN0YWNrKSB7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFlLFNBQTZCLEFBQUssQUFBRSxhQUFNLEFBQVUsQUFBQztBQUlwRSxBQUFPLFNBQXVCLEFBQUssT0FBOEIsQUFBTSxRQUFFLEFBQU0sQUFBRSxjQUFNLEFBQWUsQUFBQztBQVF2RyxBQUFPLFNBQ0wsQUFBdUIsQUFDeEIsK0JBQU0sQUFBd0IsQUFBQyxBQVloQzs7O0FBQ0UsbUJBQW9CLEFBQVU7OztBQUFWLGFBQUksT0FBSixBQUFJLEFBQU0sQUFBSTtBQUFDOztvQkFFbkMsQUFBUztBQUNQLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQ25CO0FBQUMsQUFDRixBQUVEOzs7Ozs7QUFDRSxrQkFBb0IsQUFBVTs7O0FBQVYsYUFBSSxPQUFKLEFBQUksQUFBTSxBQUFJO0FBQUM7O21CQUVuQyxBQUFRO0FBQ04sQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFJLEFBQUMsQUFDbkI7QUFBQyxBQUNGOzs7OztBQVVELEFBQU07QUFHSixzQkFBWSxBQUFjOzs7QUFDeEIsQUFBSSxhQUFDLEFBQU0sU0FBRyxBQUFNLEFBQUMsQUFDdkI7QUFBQzs7dUJBRUQsQUFBYTtBQUNYLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQWEsQUFBRSxBQUFDLEFBQ3JDO0FBQUM7O3VCQUVELEFBQVM7QUFDUCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFTLEFBQUUsQUFBQyxBQUNqQztBQUFDOzt1QkFFRCxBQUFRO0FBQ04sQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBUSxBQUFFLEFBQUMsQUFDaEM7QUFBQzs7dUJBRUQsQUFBTSx5QkFBQyxBQUFjO0FBQ25CLEFBQUksYUFBQyxBQUFNLFNBQUcsQUFBTSxBQUFDLEFBQ3ZCO0FBQUMsQUFDRjs7OztBQUVELEFBQU07QUE0Qkos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b3J0IEJvdW5kcywgeyBDdXJzb3IsIERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciB9IGZyb20gJy4vYm91bmRzJztcblxuaW1wb3J0IHsgRE9NQ2hhbmdlcywgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4vZG9tL2hlbHBlcic7XG5cbmltcG9ydCB7IE9wdGlvbiwgRGVzdHJveWFibGUsIFN0YWNrLCBMaW5rZWRMaXN0LCBMaW5rZWRMaXN0Tm9kZSwgYXNzZXJ0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50JztcblxuaW1wb3J0IHsgVk0gfSBmcm9tICcuL3ZtJztcblxuaW1wb3J0IHsgVmVyc2lvbmVkUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcblxuaW1wb3J0IHtcbiAgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnNcbn0gZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2RvbSc7XG5cbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuL2RvbS9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBGaXJzdE5vZGUge1xuICBmaXJzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXN0Tm9kZSB7XG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmNsYXNzIEZpcnN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBmaXJzdE5vZGUoKTogTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5jbGFzcyBMYXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub2RlOiBOb2RlKSB7IH1cblxuICBsYXN0Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE9wZXJhdGlvbnMge1xuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pOiB2b2lkO1xuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbik6IHZvaWQ7XG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRnJhZ21lbnQgaW1wbGVtZW50cyBCb3VuZHMge1xuICBwcml2YXRlIGJvdW5kczogQm91bmRzO1xuXG4gIGNvbnN0cnVjdG9yKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpO1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKTtcbiAgfVxuXG4gIGxhc3ROb2RlKCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIHJldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgdXBkYXRlKGJvdW5kczogQm91bmRzKSB7XG4gICAgdGhpcy5ib3VuZHMgPSBib3VuZHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTdGFjayBpbXBsZW1lbnRzIEN1cnNvciB7XG4gIHB1YmxpYyBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcbiAgcHVibGljIGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbjtcbiAgcHVibGljIHVwZGF0ZU9wZXJhdGlvbnM6IERPTUNoYW5nZXM7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rpbmc6IE9wdGlvbjxTaW1wbGUuRWxlbWVudD4gPSBudWxsO1xuICBwdWJsaWMgb3BlcmF0aW9uczogT3B0aW9uPEVsZW1lbnRPcGVyYXRpb25zPiA9IG51bGw7XG4gIHB1YmxpYyBlbGVtZW50OiBTaW1wbGUuRWxlbWVudDtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG5cbiAgcHJpdmF0ZSBlbGVtZW50U3RhY2sgPSBuZXcgU3RhY2s8U2ltcGxlLkVsZW1lbnQ+KCk7XG4gIHByaXZhdGUgbmV4dFNpYmxpbmdTdGFjayA9IG5ldyBTdGFjazxPcHRpb248U2ltcGxlLk5vZGU+PigpO1xuICBwcml2YXRlIGJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8VHJhY2tlcj4oKTtcblxuICBwcml2YXRlIGRlZmF1bHRPcGVyYXRpb25zOiBFbGVtZW50T3BlcmF0aW9ucztcblxuICBzdGF0aWMgZm9ySW5pdGlhbFJlbmRlcihlbnY6IEVudmlyb25tZW50LCBwYXJlbnROb2RlOiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICByZXR1cm4gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyByZXN1bWUoZW52OiBFbnZpcm9ubWVudCwgdHJhY2tlcjogVHJhY2tlciwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4pIHtcbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRyYWNrZXIucGFyZW50RWxlbWVudCgpO1xuXG4gICAgbGV0IHN0YWNrID0gbmV3IEVsZW1lbnRTdGFjayhlbnYsIHBhcmVudE5vZGUsIG5leHRTaWJsaW5nKTtcbiAgICBzdGFjay5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgcGFyZW50Tm9kZTogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5kb20gPSBlbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0aW9ucyA9IGVudi5nZXRET00oKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBwYXJlbnROb2RlO1xuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZztcblxuICAgIHRoaXMuZGVmYXVsdE9wZXJhdGlvbnMgPSBuZXcgU2ltcGxlRWxlbWVudE9wZXJhdGlvbnMoZW52KTtcblxuICAgIHRoaXMucHVzaFNpbXBsZUJsb2NrKCk7XG4gICAgdGhpcy5lbGVtZW50U3RhY2sucHVzaCh0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMubmV4dFNpYmxpbmdTdGFjay5wdXNoKHRoaXMubmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgZXhwZWN0Q29uc3RydWN0aW5nKG1ldGhvZDogc3RyaW5nKTogU2ltcGxlLkVsZW1lbnQge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5jb25zdHJ1Y3RpbmcsIGAke21ldGhvZH0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50YCk7XG4gIH1cblxuICBleHBlY3RPcGVyYXRpb25zKG1ldGhvZDogc3RyaW5nKTogRWxlbWVudE9wZXJhdGlvbnMge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5vcGVyYXRpb25zLCBgJHttZXRob2R9IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuICB9XG5cbiAgYmxvY2soKTogVHJhY2tlciB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmJsb2NrU3RhY2suY3VycmVudCwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgYmxvY2sgdHJhY2tlclwiKTtcbiAgfVxuXG4gIHBvcEVsZW1lbnQoKSB7XG4gICAgbGV0IHsgZWxlbWVudFN0YWNrLCBuZXh0U2libGluZ1N0YWNrIH0gID0gdGhpcztcblxuICAgIGxldCB0b3BFbGVtZW50ID0gZWxlbWVudFN0YWNrLnBvcCgpO1xuICAgIG5leHRTaWJsaW5nU3RhY2sucG9wKCk7XG4gICAgLy8gTE9HR0VSLmRlYnVnKGAtPiBlbGVtZW50IHN0YWNrICR7dGhpcy5lbGVtZW50U3RhY2sudG9BcnJheSgpLm1hcChlID0+IGUudGFnTmFtZSkuam9pbignLCAnKX1gKTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGV4cGVjdChlbGVtZW50U3RhY2suY3VycmVudCwgXCJjYW4ndCBwb3AgcGFzdCB0aGUgbGFzdCBlbGVtZW50XCIpO1xuICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0U2libGluZ1N0YWNrLmN1cnJlbnQ7XG5cbiAgICByZXR1cm4gdG9wRWxlbWVudDtcbiAgfVxuXG4gIHB1c2hTaW1wbGVCbG9jaygpOiBUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBTaW1wbGVCbG9ja1RyYWNrZXIodGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLnB1c2hCbG9ja1RyYWNrZXIodHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwdXNoVXBkYXRhYmxlQmxvY2soKTogVXBkYXRhYmxlVHJhY2tlciB7XG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgVXBkYXRhYmxlQmxvY2tUcmFja2VyKHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5wdXNoQmxvY2tUcmFja2VyKHRyYWNrZXIpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQmxvY2tUcmFja2VyKHRyYWNrZXI6IFRyYWNrZXIsIGlzUmVtb3RlID0gZmFsc2UpIHtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuYmxvY2tTdGFjay5jdXJyZW50O1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnQubmV3RGVzdHJveWFibGUodHJhY2tlcik7XG5cbiAgICAgIGlmICghaXNSZW1vdGUpIHtcbiAgICAgICAgY3VycmVudC5uZXdCb3VuZHModHJhY2tlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ibG9ja1N0YWNrLnB1c2godHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwdXNoQmxvY2tMaXN0KGxpc3Q6IExpbmtlZExpc3Q8TGlua2VkTGlzdE5vZGUgJiBCb3VuZHMgJiBEZXN0cm95YWJsZT4pOiBUcmFja2VyIHtcbiAgICBsZXQgdHJhY2tlciA9IG5ldyBCbG9ja0xpc3RUcmFja2VyKHRoaXMuZWxlbWVudCwgbGlzdCk7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmJsb2NrU3RhY2suY3VycmVudDtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjdXJyZW50Lm5ld0Rlc3Ryb3lhYmxlKHRyYWNrZXIpO1xuICAgICAgY3VycmVudC5uZXdCb3VuZHModHJhY2tlcik7XG4gICAgfVxuXG4gICAgdGhpcy5ibG9ja1N0YWNrLnB1c2godHJhY2tlcik7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH1cblxuICBwb3BCbG9jaygpOiBUcmFja2VyIHtcbiAgICB0aGlzLmJsb2NrKCkuZmluYWxpemUodGhpcyk7XG5cbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tTdGFjay5wb3AoKSwgXCJFeHBlY3RlZCBwb3BCbG9jayB0byByZXR1cm4gYSBibG9ja1wiKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KHRhZzogc3RyaW5nLCBvcGVyYXRpb25zID0gdGhpcy5kZWZhdWx0T3BlcmF0aW9ucyk6IFNpbXBsZS5FbGVtZW50IHtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQodGFnLCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RpbmcgPSBlbGVtZW50O1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICBsZXQgcGFyZW50ICA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgZWxlbWVudCA9IGV4cGVjdCh0aGlzLmNvbnN0cnVjdGluZywgYGZsdXNoRWxlbWVudCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudGApO1xuXG4gICAgdGhpcy5kb20uaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxlbWVudCwgdGhpcy5uZXh0U2libGluZyk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdGluZyA9IG51bGw7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gbnVsbDtcblxuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCk7XG4gICAgdGhpcy5ibG9jaygpLm9wZW5FbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgcHVzaFJlbW90ZUVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+ID0gbnVsbCkge1xuICAgIHRoaXMucHVzaEVsZW1lbnQoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xuXG4gICAgbGV0IHRyYWNrZXIgPSBuZXcgUmVtb3RlQmxvY2tUcmFja2VyKGVsZW1lbnQpO1xuICAgIHRoaXMucHVzaEJsb2NrVHJhY2tlcih0cmFja2VyLCB0cnVlKTtcbiAgfVxuXG4gIHBvcFJlbW90ZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5wb3BCbG9jaygpO1xuICAgIHRoaXMucG9wRWxlbWVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmVsZW1lbnRTdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgIC8vIExPR0dFUi5kZWJ1ZyhgLT4gZWxlbWVudCBzdGFjayAke3RoaXMuZWxlbWVudFN0YWNrLnRvQXJyYXkoKS5tYXAoZSA9PiBlLnRhZ05hbWUpLmpvaW4oJywgJyl9YCk7XG5cbiAgICB0aGlzLm5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmc7XG4gICAgdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2gobmV4dFNpYmxpbmcpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmJsb2NrKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpIHtcbiAgICB0aGlzLmJsb2NrKCkubmV3Qm91bmRzKGJvdW5kcyk7XG4gIH1cblxuICBhcHBlbmRUZXh0KHN0cmluZzogc3RyaW5nKTogU2ltcGxlLlRleHQge1xuICAgIGxldCB7IGRvbSB9ID0gdGhpcztcbiAgICBsZXQgdGV4dCA9IGRvbS5jcmVhdGVUZXh0Tm9kZShzdHJpbmcpO1xuICAgIGRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCB0ZXh0LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICB0aGlzLmJsb2NrKCkubmV3Tm9kZSh0ZXh0KTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGFwcGVuZENvbW1lbnQoc3RyaW5nOiBzdHJpbmcpOiBTaW1wbGUuQ29tbWVudCB7XG4gICAgbGV0IHsgZG9tIH0gPSB0aGlzO1xuICAgIGxldCBjb21tZW50ID0gZG9tLmNyZWF0ZUNvbW1lbnQoc3RyaW5nKTtcbiAgICBkb20uaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgY29tbWVudCwgdGhpcy5uZXh0U2libGluZyk7XG4gICAgdGhpcy5ibG9jaygpLm5ld05vZGUoY29tbWVudCk7XG4gICAgcmV0dXJuIGNvbW1lbnQ7XG4gIH1cblxuICBzZXRTdGF0aWNBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXRTdGF0aWNBdHRyaWJ1dGUnKS5hZGRTdGF0aWNBdHRyaWJ1dGUodGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoJ3NldFN0YXRpY0F0dHJpYnV0ZScpLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRTdGF0aWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXRTdGF0aWNBdHRyaWJ1dGVOUycpLmFkZFN0YXRpY0F0dHJpYnV0ZU5TKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCdzZXRTdGF0aWNBdHRyaWJ1dGVOUycpLCBuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldER5bmFtaWNBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5leHBlY3RPcGVyYXRpb25zKCdzZXREeW5hbWljQXR0cmlidXRlJykuYWRkRHluYW1pY0F0dHJpYnV0ZSh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0RHluYW1pY0F0dHJpYnV0ZScpLCBuYW1lLCByZWZlcmVuY2UsIGlzVHJ1c3RpbmcpO1xuICB9XG5cbiAgc2V0RHluYW1pY0F0dHJpYnV0ZU5TKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHJlZmVyZW5jZTogVmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmV4cGVjdE9wZXJhdGlvbnMoJ3NldER5bmFtaWNBdHRyaWJ1dGVOUycpLmFkZER5bmFtaWNBdHRyaWJ1dGVOUyh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygnc2V0RHluYW1pY0F0dHJpYnV0ZU5TJyksIG5hbWVzcGFjZSwgbmFtZSwgcmVmZXJlbmNlLCBpc1RydXN0aW5nKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpIHtcbiAgICB0aGlzLmJsb2NrKCkuY2xvc2VFbGVtZW50KCk7XG4gICAgdGhpcy5wb3BFbGVtZW50KCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFja2VyIGV4dGVuZHMgRGVzdHJveWFibGVCb3VuZHMge1xuICBvcGVuRWxlbWVudChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCk6IHZvaWQ7XG4gIGNsb3NlRWxlbWVudCgpOiB2b2lkO1xuICBuZXdOb2RlKG5vZGU6IFNpbXBsZS5Ob2RlKTogdm9pZDtcbiAgbmV3Qm91bmRzKGJvdW5kczogQm91bmRzKTogdm9pZDtcbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpOiB2b2lkO1xuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUJsb2NrVHJhY2tlciBpbXBsZW1lbnRzIFRyYWNrZXIge1xuICBwcm90ZWN0ZWQgZmlyc3Q6IE9wdGlvbjxGaXJzdE5vZGU+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGxhc3Q6IE9wdGlvbjxMYXN0Tm9kZT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgZGVzdHJveWFibGVzOiBPcHRpb248RGVzdHJveWFibGVbXT4gPSBudWxsO1xuICBwcm90ZWN0ZWQgbmVzdGluZyA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFNpbXBsZS5FbGVtZW50KXt9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBsZXQgeyBkZXN0cm95YWJsZXMgfSA9IHRoaXM7XG5cbiAgICBpZiAoZGVzdHJveWFibGVzICYmIGRlc3Ryb3lhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxkZXN0cm95YWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVzdHJveWFibGVzW2ldLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICByZXR1cm4gdGhpcy5maXJzdCAmJiB0aGlzLmZpcnN0LmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgcmV0dXJuIHRoaXMubGFzdCAmJiB0aGlzLmxhc3QubGFzdE5vZGUoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICB0aGlzLm5ld05vZGUoZWxlbWVudCk7XG4gICAgdGhpcy5uZXN0aW5nKys7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKSB7XG4gICAgdGhpcy5uZXN0aW5nLS07XG4gIH1cblxuICBuZXdOb2RlKG5vZGU6IE5vZGUpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBuZXcgRmlyc3Qobm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gbmV3IExhc3Qobm9kZSk7XG4gIH1cblxuICBuZXdCb3VuZHMoYm91bmRzOiBCb3VuZHMpIHtcbiAgICBpZiAodGhpcy5uZXN0aW5nICE9PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSBib3VuZHM7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0ID0gYm91bmRzO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IHRoaXMuZGVzdHJveWFibGVzIHx8IFtdO1xuICAgIHRoaXMuZGVzdHJveWFibGVzLnB1c2goZCk7XG4gIH1cblxuICBmaW5hbGl6ZShzdGFjazogRWxlbWVudFN0YWNrKSB7XG4gICAgaWYgKCF0aGlzLmZpcnN0KSB7XG4gICAgICBzdGFjay5hcHBlbmRDb21tZW50KCcnKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUmVtb3RlQmxvY2tUcmFja2VyIGV4dGVuZHMgU2ltcGxlQmxvY2tUcmFja2VyIHtcbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG5cbiAgICBjbGVhcih0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0YWJsZVRyYWNrZXIgZXh0ZW5kcyBUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxTaW1wbGUuTm9kZT47XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGFibGVCbG9ja1RyYWNrZXIgZXh0ZW5kcyBTaW1wbGVCbG9ja1RyYWNrZXIgaW1wbGVtZW50cyBVcGRhdGFibGVUcmFja2VyIHtcbiAgcmVzZXQoZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxTaW1wbGUuTm9kZT4ge1xuICAgIGxldCB7IGRlc3Ryb3lhYmxlcyB9ID0gdGhpcztcblxuICAgIGlmIChkZXN0cm95YWJsZXMgJiYgZGVzdHJveWFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPGRlc3Ryb3lhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlbnYuZGlkRGVzdHJveShkZXN0cm95YWJsZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXh0U2libGluZyA9IGNsZWFyKHRoaXMpO1xuXG4gICAgdGhpcy5maXJzdCA9IG51bGw7XG4gICAgdGhpcy5sYXN0ID0gbnVsbDtcbiAgICB0aGlzLmRlc3Ryb3lhYmxlcyA9IG51bGw7XG4gICAgdGhpcy5uZXN0aW5nID0gMDtcblxuICAgIHJldHVybiBuZXh0U2libGluZztcbiAgfVxufVxuXG5jbGFzcyBCbG9ja0xpc3RUcmFja2VyIGltcGxlbWVudHMgVHJhY2tlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTaW1wbGUuRWxlbWVudCwgcHJpdmF0ZSBib3VuZExpc3Q6IExpbmtlZExpc3Q8TGlua2VkTGlzdE5vZGUgJiBCb3VuZHMgJiBEZXN0cm95YWJsZT4pIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLmJvdW5kTGlzdCA9IGJvdW5kTGlzdDtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ib3VuZExpc3QuZm9yRWFjaE5vZGUobm9kZSA9PiBub2RlLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBPcHRpb248U2ltcGxlLk5vZGU+IHtcbiAgICBsZXQgaGVhZCA9IHRoaXMuYm91bmRMaXN0LmhlYWQoKTtcbiAgICByZXR1cm4gaGVhZCAmJiBoZWFkLmZpcnN0Tm9kZSgpO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogT3B0aW9uPFNpbXBsZS5Ob2RlPiB7XG4gICAgbGV0IHRhaWwgPSB0aGlzLmJvdW5kTGlzdC50YWlsKCk7XG4gICAgcmV0dXJuIHRhaWwgJiYgdGFpbC5sYXN0Tm9kZSgpO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoX2VsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBhc3NlcnQoZmFsc2UsICdDYW5ub3Qgb3BlbkVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KCkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjbG9zZUVsZW1lbnQgZGlyZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCcpO1xuICB9XG5cbiAgbmV3Tm9kZShfbm9kZTogTm9kZSkge1xuICAgIGFzc2VydChmYWxzZSwgJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgbm9kZSBkaXJlY3RseSBpbnNpZGUgYSBibG9jayBsaXN0Jyk7XG4gIH1cblxuICBuZXdCb3VuZHMoX2JvdW5kczogQm91bmRzKSB7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShfZDogRGVzdHJveWFibGUpIHtcbiAgfVxuXG4gIGZpbmFsaXplKF9zdGFjazogRWxlbWVudFN0YWNrKSB7XG4gIH1cbn1cbiJdfQ==

@@ -9,6 +9,5 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }

import { UpdatingOpcode } from '../../opcodes';
import { APPEND_OPCODES, UpdatingOpcode } from '../../opcodes';
import { Assert } from './vm';
import ARGS from '../../vm/arguments';
import { APPEND_OPCODES } from '../../opcodes';
import { ComponentElementOperations } from './dom';

@@ -20,3 +19,3 @@ import { CONSTANT_TAG, ReferenceCache, combine, isConst } from '@glimmer/reference';

var definition = vm.constants.getOther(_definition);
var stack = vm.evalStack;
var stack = vm.stack;
stack.push(definition);

@@ -26,3 +25,3 @@ stack.push(definition.manager);

APPEND_OPCODES.add(56 /* PushDynamicComponentManager */, function (vm) {
var stack = vm.evalStack;
var stack = vm.stack;
var reference = stack.pop();

@@ -37,26 +36,24 @@ var cache = isConst(reference) ? undefined : new ReferenceCache(reference);

});
APPEND_OPCODES.add(57 /* SetComponentState */, function (vm, _ref2) {
var local = _ref2.op1;
var stack = vm.evalStack;
APPEND_OPCODES.add(57 /* InitializeComponentState */, function (vm) {
var stack = vm.stack;
var manager = stack.pop();
var definition = stack.pop();
vm.setLocal(local, { definition: definition, manager: manager, component: null });
stack.push({ definition: definition, manager: manager, component: null });
});
APPEND_OPCODES.add(58 /* PushArgs */, function (vm, _ref3) {
var positional = _ref3.op1,
synthetic = _ref3.op2;
APPEND_OPCODES.add(58 /* PushArgs */, function (vm, _ref2) {
var positional = _ref2.op1,
synthetic = _ref2.op2;
var stack = vm.evalStack;
var stack = vm.stack;
ARGS.setup(stack, positional, !!synthetic);
stack.push(ARGS);
});
APPEND_OPCODES.add(59 /* PrepareArgs */, function (vm, _ref4) {
var _state = _ref4.op1;
APPEND_OPCODES.add(59 /* PrepareArgs */, function (vm, _ref3) {
var _state = _ref3.op1;
var stack = vm.evalStack;
var stack = vm.stack;
var _vm$getLocal = vm.getLocal(_state),
definition = _vm$getLocal.definition,
manager = _vm$getLocal.manager;
var _vm$fetchValue = vm.fetchValue(_state),
definition = _vm$fetchValue.definition,
manager = _vm$fetchValue.manager;

@@ -84,13 +81,13 @@ var args = stack.pop();

});
APPEND_OPCODES.add(60 /* CreateComponent */, function (vm, _ref5) {
var _vm$getLocal2;
APPEND_OPCODES.add(60 /* CreateComponent */, function (vm, _ref4) {
var _vm$fetchValue2;
var flags = _ref5.op1,
_state = _ref5.op2;
var flags = _ref4.op1,
_state = _ref4.op2;
var definition = void 0,
manager = void 0;
var args = vm.evalStack.pop();
var args = vm.stack.pop();
var dynamicScope = vm.dynamicScope();
var state = (_vm$getLocal2 = vm.getLocal(_state), definition = _vm$getLocal2.definition, manager = _vm$getLocal2.manager, _vm$getLocal2);
var state = (_vm$fetchValue2 = vm.fetchValue(_state), definition = _vm$fetchValue2.definition, manager = _vm$fetchValue2.manager, _vm$fetchValue2);
var hasDefaultBlock = flags & 0b01;

@@ -101,8 +98,8 @@ var component = manager.create(vm.env, definition, args, dynamicScope, vm.getSelf(), !!hasDefaultBlock);

});
APPEND_OPCODES.add(61 /* RegisterComponentDestructor */, function (vm, _ref6) {
var _state = _ref6.op1;
APPEND_OPCODES.add(61 /* RegisterComponentDestructor */, function (vm, _ref5) {
var _state = _ref5.op1;
var _vm$getLocal3 = vm.getLocal(_state),
manager = _vm$getLocal3.manager,
component = _vm$getLocal3.component;
var _vm$fetchValue3 = vm.fetchValue(_state),
manager = _vm$fetchValue3.manager,
component = _vm$fetchValue3.component;

@@ -114,41 +111,41 @@ var destructor = manager.getDestructor(component);

vm.beginCacheGroup();
vm.stack().pushSimpleBlock();
vm.elements().pushSimpleBlock();
});
APPEND_OPCODES.add(62 /* PushComponentOperations */, function (vm) {
vm.evalStack.push(new ComponentElementOperations(vm.env));
vm.stack.push(new ComponentElementOperations(vm.env));
});
APPEND_OPCODES.add(67 /* DidCreateElement */, function (vm, _ref7) {
var _state = _ref7.op1;
APPEND_OPCODES.add(67 /* DidCreateElement */, function (vm, _ref6) {
var _state = _ref6.op1;
var _vm$getLocal4 = vm.getLocal(_state),
manager = _vm$getLocal4.manager,
component = _vm$getLocal4.component;
var _vm$fetchValue4 = vm.fetchValue(_state),
manager = _vm$fetchValue4.manager,
component = _vm$fetchValue4.component;
var action = 'DidCreateElementOpcode#evaluate';
manager.didCreateElement(component, vm.stack().expectConstructing(action), vm.stack().expectOperations(action));
manager.didCreateElement(component, vm.elements().expectConstructing(action), vm.elements().expectOperations(action));
});
APPEND_OPCODES.add(63 /* GetComponentSelf */, function (vm, _ref8) {
var _state = _ref8.op1;
APPEND_OPCODES.add(63 /* GetComponentSelf */, function (vm, _ref7) {
var _state = _ref7.op1;
var state = vm.getLocal(_state);
vm.evalStack.push(state.manager.getSelf(state.component));
var state = vm.fetchValue(_state);
vm.stack.push(state.manager.getSelf(state.component));
});
APPEND_OPCODES.add(64 /* GetComponentLayout */, function (vm, _ref9) {
var _state = _ref9.op1;
APPEND_OPCODES.add(64 /* GetComponentLayout */, function (vm, _ref8) {
var _state = _ref8.op1;
var _vm$getLocal5 = vm.getLocal(_state),
manager = _vm$getLocal5.manager,
definition = _vm$getLocal5.definition,
component = _vm$getLocal5.component;
var _vm$fetchValue5 = vm.fetchValue(_state),
manager = _vm$fetchValue5.manager,
definition = _vm$fetchValue5.definition,
component = _vm$fetchValue5.component;
vm.evalStack.push(manager.layoutFor(definition, component, vm.env));
vm.stack.push(manager.layoutFor(definition, component, vm.env));
});
APPEND_OPCODES.add(69 /* DidRenderLayout */, function (vm, _ref10) {
var _state = _ref10.op1;
APPEND_OPCODES.add(68 /* DidRenderLayout */, function (vm, _ref9) {
var _state = _ref9.op1;
var _vm$getLocal6 = vm.getLocal(_state),
manager = _vm$getLocal6.manager,
component = _vm$getLocal6.component;
var _vm$fetchValue6 = vm.fetchValue(_state),
manager = _vm$fetchValue6.manager,
component = _vm$fetchValue6.component;
var bounds = vm.stack().popBlock();
var bounds = vm.elements().popBlock();
manager.didRenderLayout(component, bounds);

@@ -228,2 +225,2 @@ vm.env.didCreate(component, manager);

}(UpdatingOpcode);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsQUFBTyxTQUFjLEFBQWMsQUFBRSxzQkFBTSxBQUFlLEFBQUM7QUFDM0QsQUFBTyxTQUFFLEFBQU0sQUFBRSxjQUFNLEFBQU0sQUFBQztBQUU5QixPQUFPLEFBQStCLFVBQU0sQUFBb0IsQUFBQztBQUlqRSxBQUFPLFNBQUUsQUFBYyxBQUFZLHNCQUFNLEFBQWUsQUFBQztBQUN6RCxBQUFPLFNBQUUsQUFBMEIsQUFBRSxrQ0FBTSxBQUFPLEFBQUM7QUFFbkQsQUFBTyxTQUNMLEFBQVksY0FDWixBQUFjLGdCQUdkLEFBQU8sU0FDUCxBQUFPLEFBQ1IsZUFBTSxBQUFvQixBQUFDO0FBRTVCLEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBdUIsNEJBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFXLEFBQUUsbUJBQWxCLEFBQUc7O0FBQ3BELFFBQUksQUFBVSxhQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUSxTQUE4QixBQUFXLEFBQUMsQUFBQztBQUNqRixRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBUyxBQUFDO0FBRXpCLEFBQUssVUFBQyxBQUFJLEtBQUMsQUFBVSxBQUFDLEFBQUM7QUFDdkIsQUFBSyxVQUFDLEFBQUksS0FBQyxBQUFVLFdBQUMsQUFBTyxBQUFDLEFBQUMsQUFDakM7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQThCLG1DQUFFLEFBQUU7QUFDbkQsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsQUFBQztBQUN6QixRQUFJLEFBQVMsWUFBRyxBQUFLLE1BQUMsQUFBRyxBQUF1RCxBQUFDO0FBQ2pGLFFBQUksQUFBSyxRQUFHLEFBQU8sUUFBQyxBQUFTLEFBQUMsYUFBRyxBQUFTLFlBQUcsSUFBSSxBQUFjLGVBQThCLEFBQVMsQUFBQyxBQUFD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SSxLQUFDLEFBQUk7QUFDZixBQUFJLGtCQUFFLENBQUMsQUFBSSxLQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDbEMsQUFBQyxBQUNKO0FBTFM7QUFLUixBQUNGOzs7RUFsQzBDLEFBQWM7QUFvQ3pELEFBQU0sV0FBNkI7OztBQUlqQyxtQ0FDVSxBQUFvQyxTQUNwQyxBQUFvQixXQUNwQixBQUFjOzs7c0RBRXRCLEFBQUssQUFBRSxBQUFDOztBQUpBLGVBQU8sVUFBUCxBQUFPLEFBQTZCO0FBQ3BDLGVBQVMsWUFBVCxBQUFTLEFBQVc7QUFDcEIsZUFBTSxTQUFOLEFBQU0sQUFBUTtBQU5qQixlQUFJLE9BQUcsQUFBbUIsQUFBQztBQUMzQixlQUFHLE1BQVEsQUFBWSxBQUFDLEFBUS9COztBQUFDOztvQ0FFRCxBQUFRLDZCQUFDLEFBQWM7QUFDckIsQUFBSSxZQUFFLEFBQU87WUFBRSxBQUFTO1lBQUUsQUFBTSxBQUFFLFNBQUcsQUFBSSxBQUFDOztBQUUxQyxBQUFPLGdCQUFDLEFBQWUsZ0JBQUMsQUFBUyxXQUFFLEFBQU0sQUFBQyxBQUFDO0FBRTNDLEFBQUUsV0FBQyxBQUFHLElBQUMsQUFBUyxVQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN2QztBQUFDLEFBQ0Y7OztFQW5CMEMsQUFBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgQVJHUywgeyBBcmd1bWVudHMsIElBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHluYW1pY1Njb3BlIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IEJvdW5kcyBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHtcbiAgQ09OU1RBTlRfVEFHLFxuICBSZWZlcmVuY2VDYWNoZSxcbiAgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSxcbiAgVGFnLFxuICBjb21iaW5lLFxuICBpc0NvbnN0XG59IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50TWFuYWdlciwgKHZtLCB7IG9wMTogX2RlZmluaXRpb24gfSkgPT4ge1xuICBsZXQgZGVmaW5pdGlvbiA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcjxDb21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4+KF9kZWZpbml0aW9uKTtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IHJlZmVyZW5jZSA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPj4+KCk7XG4gIGxldCBjYWNoZSA9IGlzQ29uc3QocmVmZXJlbmNlKSA/IHVuZGVmaW5lZCA6IG5ldyBSZWZlcmVuY2VDYWNoZTxDb21wb25lbnREZWZpbml0aW9uPE9wYXF1ZT4+KHJlZmVyZW5jZSk7XG4gIGxldCBkZWZpbml0aW9uID0gY2FjaGUgPyBjYWNoZS5wZWVrKCkgOiByZWZlcmVuY2UudmFsdWUoKTtcblxuICBzdGFjay5wdXNoKGRlZmluaXRpb24pO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24ubWFuYWdlcik7XG5cbiAgaWYgKGNhY2hlKSB7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5pbnRlcmZhY2UgSW5pdGlhbENvbXBvbmVudFN0YXRlPFQ+IHtcbiAgZGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbjxUPjtcbiAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxUPjtcbiAgY29tcG9uZW50OiBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFN0YXRlPFQ+IHtcbiAgZGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbjxUPjtcbiAgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxUPjtcbiAgY29tcG9uZW50OiBUO1xufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0Q29tcG9uZW50U3RhdGUsICh2bSwgeyBvcDE6IGxvY2FsIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuXG4gIGxldCBtYW5hZ2VyID0gc3RhY2sucG9wKCk7XG4gIGxldCBkZWZpbml0aW9uID0gc3RhY2sucG9wKCk7XG5cbiAgdm0uc2V0TG9jYWwobG9jYWwsIHsgZGVmaW5pdGlvbiwgbWFuYWdlciwgY29tcG9uZW50OiBudWxsIH0pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQXJncywgKHZtLCB7IG9wMTogcG9zaXRpb25hbCwgb3AyOiBzeW50aGV0aWMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIEFSR1Muc2V0dXAoc3RhY2ssIHBvc2l0aW9uYWwsICEhc3ludGhldGljKTtcbiAgc3RhY2sucHVzaChBUkdTKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHJlcGFyZUFyZ3MsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IHsgZGVmaW5pdGlvbiwgbWFuYWdlciB9ID0gdm0uZ2V0TG9jYWw8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcblxuICBsZXQgcHJlcGFyZWRBcmdzID0gbWFuYWdlci5wcmVwYXJlQXJncyhkZWZpbml0aW9uLCBhcmdzKTtcblxuICBpZiAocHJlcGFyZWRBcmdzKSB7XG4gICAgYXJncy5jbGVhcigpO1xuXG4gICAgbGV0IHsgcG9zaXRpb25hbCwgbmFtZWQgfSA9IHByZXBhcmVkQXJncztcblxuICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGk9MDsgaTxwb3NpdGlvbmFsQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChwb3NpdGlvbmFsW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZXMgPSBPYmplY3Qua2V5cyhuYW1lZCk7XG4gICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bmFtZWRDb3VudDsgaSsrKSB7XG4gICAgICBzdGFjay5wdXNoKG5hbWVkW25hbWVzW2ldXSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaChuYW1lcyk7XG4gICAgYXJncy5zZXR1cChzdGFjaywgcG9zaXRpb25hbENvdW50LCB0cnVlKTtcbiAgfVxuXG4gIHN0YWNrLnB1c2goYXJncyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNyZWF0ZUNvbXBvbmVudCwgKHZtLCB7IG9wMTogZmxhZ3MsIG9wMjogX3N0YXRlIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24sIG1hbmFnZXI7XG4gIGxldCBhcmdzID0gdm0uZXZhbFN0YWNrLnBvcDxJQXJndW1lbnRzPigpO1xuICBsZXQgZHluYW1pY1Njb3BlID0gdm0uZHluYW1pY1Njb3BlKCk7XG4gIGxldCBzdGF0ZSA9IHsgZGVmaW5pdGlvbiwgbWFuYWdlciB9ID0gdm0uZ2V0TG9jYWw8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGhhc0RlZmF1bHRCbG9jayA9IGZsYWdzICYgMGIwMTtcblxuICBsZXQgY29tcG9uZW50ID0gbWFuYWdlci5jcmVhdGUodm0uZW52LCBkZWZpbml0aW9uLCBhcmdzLCBkeW5hbWljU2NvcGUsIHZtLmdldFNlbGYoKSwgISFoYXNEZWZhdWx0QmxvY2spO1xuICAoc3RhdGUgYXMgQ29tcG9uZW50U3RhdGU8dHlwZW9mIGNvbXBvbmVudD4pLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcblxuICB2bS51cGRhdGVXaXRoKG5ldyBVcGRhdGVDb21wb25lbnRPcGNvZGUoYXJncy50YWcsIGRlZmluaXRpb24ubmFtZSwgY29tcG9uZW50LCBtYW5hZ2VyLCBkeW5hbWljU2NvcGUpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUmVnaXN0ZXJDb21wb25lbnREZXN0cnVjdG9yLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQgfSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IoY29tcG9uZW50KTtcbiAgaWYgKGRlc3RydWN0b3IpIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB7XG4gIHZtLmJlZ2luQ2FjaGVHcm91cCgpO1xuICB2bS5zdGFjaygpLnB1c2hTaW1wbGVCbG9jaygpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50T3BlcmF0aW9ucywgdm0gPT4ge1xuICB2bS5ldmFsU3RhY2sucHVzaChuZXcgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnModm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZENyZWF0ZUVsZW1lbnQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGNvbXBvbmVudCB9ID0gdm0uZ2V0TG9jYWw8Q29tcG9uZW50U3RhdGU8T3BhcXVlPj4oX3N0YXRlKTtcblxuICBsZXQgYWN0aW9uID0gJ0RpZENyZWF0ZUVsZW1lbnRPcGNvZGUjZXZhbHVhdGUnO1xuICBtYW5hZ2VyLmRpZENyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCB2bS5zdGFjaygpLmV4cGVjdENvbnN0cnVjdGluZyhhY3Rpb24pLCB2bS5zdGFjaygpLmV4cGVjdE9wZXJhdGlvbnMoYWN0aW9uKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldENvbXBvbmVudFNlbGYsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCBzdGF0ZSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKHN0YXRlLm1hbmFnZXIuZ2V0U2VsZihzdGF0ZS5jb21wb25lbnQpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0Q29tcG9uZW50TGF5b3V0LCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgeyBtYW5hZ2VyLCBkZWZpbml0aW9uLCBjb21wb25lbnQgfSA9IHZtLmdldExvY2FsPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLmV2YWxTdGFjay5wdXNoKG1hbmFnZXIubGF5b3V0Rm9yKGRlZmluaXRpb24sIGNvbXBvbmVudCwgdm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZFJlbmRlckxheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5nZXRMb2NhbDxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICBsZXQgYm91bmRzID0gdm0uc3RhY2soKS5wb3BCbG9jaygpO1xuXG4gIG1hbmFnZXIuZGlkUmVuZGVyTGF5b3V0KGNvbXBvbmVudCwgYm91bmRzKTtcblxuICB2bS5lbnYuZGlkQ3JlYXRlKGNvbXBvbmVudCwgbWFuYWdlcik7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgRGlkVXBkYXRlTGF5b3V0T3Bjb2RlKG1hbmFnZXIsIGNvbXBvbmVudCwgYm91bmRzKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbW1pdENvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB2bS5jb21taXRDYWNoZUdyb3VwKCkpO1xuXG5leHBvcnQgY2xhc3MgVXBkYXRlQ29tcG9uZW50T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwidXBkYXRlLWNvbXBvbmVudFwiO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhZzogVGFnLFxuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPENvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGxldCBjb21wb25lbnRUYWcgPSBtYW5hZ2VyLmdldFRhZyhjb21wb25lbnQpO1xuXG4gICAgaWYgKGNvbXBvbmVudFRhZykge1xuICAgICAgdGhpcy50YWcgPSBjb21iaW5lKFt0YWcsIGNvbXBvbmVudFRhZ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICB9XG4gIH1cblxuICBldmFsdWF0ZShfdm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBjb21wb25lbnQsIG1hbmFnZXIsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIudXBkYXRlKGNvbXBvbmVudCwgZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLm5hbWUpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZFVwZGF0ZUxheW91dE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImRpZC11cGRhdGUtbGF5b3V0XCI7XG4gIHB1YmxpYyB0YWc6IFRhZyA9IENPTlNUQU5UX1RBRztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBwcml2YXRlIGNvbXBvbmVudDogQ29tcG9uZW50LFxuICAgIHByaXZhdGUgYm91bmRzOiBCb3VuZHNcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50LCBib3VuZHMgfSA9IHRoaXM7XG5cbiAgICBtYW5hZ2VyLmRpZFVwZGF0ZUxheW91dChjb21wb25lbnQsIGJvdW5kcyk7XG5cbiAgICB2bS5lbnYuZGlkVXBkYXRlKGNvbXBvbmVudCwgbWFuYWdlcik7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsQUFBTyxTQUFFLEFBQWMsZ0JBQWtCLEFBQWMsQUFBRSxzQkFBTSxBQUFlLEFBQUM7QUFDL0UsQUFBTyxTQUFFLEFBQU0sQUFBRSxjQUFNLEFBQU0sQUFBQztBQUU5QixPQUFPLEFBQStCLFVBQU0sQUFBb0IsQUFBQztBQUlqRSxBQUFPLFNBQUUsQUFBMEIsQUFBRSxrQ0FBTSxBQUFPLEFBQUM7QUFFbkQsQUFBTyxTQUNMLEFBQVksY0FDWixBQUFjLGdCQUdkLEFBQU8sU0FDUCxBQUFPLEFBQ1IsZUFBTSxBQUFvQixBQUFDO0FBRTVCLEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBdUIsNEJBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFXLEFBQUUsbUJBQWxCLEFBQUc7O0FBQ3BELFFBQUksQUFBVSxhQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUSxTQUE4QixBQUFXLEFBQUMsQUFBQztBQUNqRixRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBSyxBQUFDO0FBRXJCLEFBQUssVUFBQyxBQUFJLEtBQUMsQUFBVSxBQUFDLEFBQUM7QUFDdkIsQUFBSyxVQUFDLEFBQUksS0FBQyxBQUFVLFdBQUMsQUFBTyxBQUFDLEFBQUMsQUFDakM7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQThCLG1DQUFFLEFBQUU7QUFDbkQsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssQUFBQztBQUNyQixRQUFJLEFBQVMsWUFBRyxBQUFLLE1BQUMsQUFBRyxBQUF1RCxBQUFDO0FBQ2pGLFFBQUksQUFBSyxRQUFHLEFBQU8sUUFBQyxBQUFTLEFBQUMsYUFBRyxBQUFTLFlBQUcsSUFBSSxBQUFjLGVBQThCLEFBQVMsQUFBQyxBQUFDO0FBQ3hHLFFBQUksQUFBVSxhQUFHLEFBQUssUUFB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LEFBQ2xDLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRjs7O0VBbEMwQyxBQUFjO0FBb0N6RCxBQUFNLFdBQTZCOzs7QUFJakMsbUNBQ1UsQUFBb0MsU0FDcEMsQUFBb0IsV0FDcEIsQUFBYzs7O3NEQUV0QixBQUFLLEFBQUUsQUFBQzs7QUFKQSxlQUFPLFVBQVAsQUFBTyxBQUE2QjtBQUNwQyxlQUFTLFlBQVQsQUFBUyxBQUFXO0FBQ3BCLGVBQU0sU0FBTixBQUFNLEFBQVE7QUFOakIsZUFBSSxPQUFHLEFBQW1CLEFBQUM7QUFDM0IsZUFBRyxNQUFRLEFBQVksQUFBQyxBQVEvQjs7QUFBQzs7b0NBRUQsQUFBUSw2QkFBQyxBQUFjO0FBQ3JCLEFBQUksWUFBRSxBQUFPO1lBQUUsQUFBUztZQUFFLEFBQU0sQUFBRSxTQUFHLEFBQUksQUFBQzs7QUFFMUMsQUFBTyxnQkFBQyxBQUFlLGdCQUFDLEFBQVMsV0FBRSxBQUFNLEFBQUMsQUFBQztBQUUzQyxBQUFFLFdBQUMsQUFBRyxJQUFDLEFBQVMsVUFBQyxBQUFTLFdBQUUsQUFBTyxBQUFDLEFBQUMsQUFDdkM7QUFBQyxBQUNGOzs7RUFuQjBDLEFBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AsIE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBBc3NlcnQgfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFVwZGF0aW5nVk0gfSBmcm9tICcuLi8uLi92bSc7XG5pbXBvcnQgQVJHUywgeyBBcmd1bWVudHMsIElBcmd1bWVudHMgfSBmcm9tICcuLi8uLi92bS9hcmd1bWVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRNYW5hZ2VyLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHluYW1pY1Njb3BlIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IEJvdW5kcyBmcm9tICcuLi8uLi9ib3VuZHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENPTlNUQU5UX1RBRyxcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsXG4gIFRhZyxcbiAgY29tYmluZSxcbiAgaXNDb25zdFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaENvbXBvbmVudE1hbmFnZXIsICh2bSwgeyBvcDE6IF9kZWZpbml0aW9uIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24gPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+PihfZGVmaW5pdGlvbik7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgcmVmZXJlbmNlID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8Q29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+Pj4oKTtcbiAgbGV0IGNhY2hlID0gaXNDb25zdChyZWZlcmVuY2UpID8gdW5kZWZpbmVkIDogbmV3IFJlZmVyZW5jZUNhY2hlPENvbXBvbmVudERlZmluaXRpb248T3BhcXVlPj4ocmVmZXJlbmNlKTtcbiAgbGV0IGRlZmluaXRpb24gPSBjYWNoZSA/IGNhY2hlLnBlZWsoKSA6IHJlZmVyZW5jZS52YWx1ZSgpO1xuXG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbik7XG4gIHN0YWNrLnB1c2goZGVmaW5pdGlvbi5tYW5hZ2VyKTtcblxuICBpZiAoY2FjaGUpIHtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbmludGVyZmFjZSBJbml0aWFsQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50U3RhdGU8VD4ge1xuICBkZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uPFQ+O1xuICBtYW5hZ2VyOiBDb21wb25lbnRNYW5hZ2VyPFQ+O1xuICBjb21wb25lbnQ6IFQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Jbml0aWFsaXplQ29tcG9uZW50U3RhdGUsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG5cbiAgbGV0IG1hbmFnZXIgPSBzdGFjay5wb3AoKTtcbiAgbGV0IGRlZmluaXRpb24gPSBzdGFjay5wb3AoKTtcblxuICBzdGFjay5wdXNoKHsgZGVmaW5pdGlvbiwgbWFuYWdlciwgY29tcG9uZW50OiBudWxsIH0pO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQXJncywgKHZtLCB7IG9wMTogcG9zaXRpb25hbCwgb3AyOiBzeW50aGV0aWMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgQVJHUy5zZXR1cChzdGFjaywgcG9zaXRpb25hbCwgISFzeW50aGV0aWMpO1xuICBzdGFjay5wdXNoKEFSR1MpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QcmVwYXJlQXJncywgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCB7IGRlZmluaXRpb24sIG1hbmFnZXIgfSA9IHZtLmZldGNoVmFsdWU8SW5pdGlhbENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBhcmdzID0gc3RhY2sucG9wPEFyZ3VtZW50cz4oKTtcblxuICBsZXQgcHJlcGFyZWRBcmdzID0gbWFuYWdlci5wcmVwYXJlQXJncyhkZWZpbml0aW9uLCBhcmdzKTtcblxuICBpZiAocHJlcGFyZWRBcmdzKSB7XG4gICAgYXJncy5jbGVhcigpO1xuXG4gICAgbGV0IHsgcG9zaXRpb25hbCwgbmFtZWQgfSA9IHByZXBhcmVkQXJncztcblxuICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBwb3NpdGlvbmFsLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGk9MDsgaTxwb3NpdGlvbmFsQ291bnQ7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChwb3NpdGlvbmFsW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbmFtZXMgPSBPYmplY3Qua2V5cyhuYW1lZCk7XG4gICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpPTA7IGk8bmFtZWRDb3VudDsgaSsrKSB7XG4gICAgICBzdGFjay5wdXNoKG5hbWVkW25hbWVzW2ldXSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaChuYW1lcyk7XG4gICAgYXJncy5zZXR1cChzdGFjaywgcG9zaXRpb25hbENvdW50LCB0cnVlKTtcbiAgfVxuXG4gIHN0YWNrLnB1c2goYXJncyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNyZWF0ZUNvbXBvbmVudCwgKHZtLCB7IG9wMTogZmxhZ3MsIG9wMjogX3N0YXRlIH0pID0+IHtcbiAgbGV0IGRlZmluaXRpb24sIG1hbmFnZXI7XG4gIGxldCBhcmdzID0gdm0uc3RhY2sucG9wPElBcmd1bWVudHM+KCk7XG4gIGxldCBkeW5hbWljU2NvcGUgPSB2bS5keW5hbWljU2NvcGUoKTtcbiAgbGV0IHN0YXRlID0geyBkZWZpbml0aW9uLCBtYW5hZ2VyIH0gPSB2bS5mZXRjaFZhbHVlPEluaXRpYWxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuXG4gIGxldCBoYXNEZWZhdWx0QmxvY2sgPSBmbGFncyAmIDBiMDE7XG5cbiAgbGV0IGNvbXBvbmVudCA9IG1hbmFnZXIuY3JlYXRlKHZtLmVudiwgZGVmaW5pdGlvbiwgYXJncywgZHluYW1pY1Njb3BlLCB2bS5nZXRTZWxmKCksICEhaGFzRGVmYXVsdEJsb2NrKTtcbiAgKHN0YXRlIGFzIENvbXBvbmVudFN0YXRlPHR5cGVvZiBjb21wb25lbnQ+KS5jb21wb25lbnQgPSBjb21wb25lbnQ7XG5cbiAgdm0udXBkYXRlV2l0aChuZXcgVXBkYXRlQ29tcG9uZW50T3Bjb2RlKGFyZ3MudGFnLCBkZWZpbml0aW9uLm5hbWUsIGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJlZ2lzdGVyQ29tcG9uZW50RGVzdHJ1Y3RvciwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGRlc3RydWN0b3IgPSBtYW5hZ2VyLmdldERlc3RydWN0b3IoY29tcG9uZW50KTtcbiAgaWYgKGRlc3RydWN0b3IpIHZtLm5ld0Rlc3Ryb3lhYmxlKGRlc3RydWN0b3IpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5CZWdpbkNvbXBvbmVudFRyYW5zYWN0aW9uLCB2bSA9PiB7XG4gIHZtLmJlZ2luQ2FjaGVHcm91cCgpO1xuICB2bS5lbGVtZW50cygpLnB1c2hTaW1wbGVCbG9jaygpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQ29tcG9uZW50T3BlcmF0aW9ucywgdm0gPT4ge1xuICB2bS5zdGFjay5wdXNoKG5ldyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyh2bS5lbnYpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRGlkQ3JlYXRlRWxlbWVudCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG5cbiAgbGV0IGFjdGlvbiA9ICdEaWRDcmVhdGVFbGVtZW50T3Bjb2RlI2V2YWx1YXRlJztcbiAgbWFuYWdlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgdm0uZWxlbWVudHMoKS5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0uZWxlbWVudHMoKS5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRTZWxmLCAodm0sIHsgb3AxOiBfc3RhdGUgfSkgPT4ge1xuICBsZXQgc3RhdGUgPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIHZtLnN0YWNrLnB1c2goc3RhdGUubWFuYWdlci5nZXRTZWxmKHN0YXRlLmNvbXBvbmVudCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRDb21wb25lbnRMYXlvdXQsICh2bSwgeyBvcDE6IF9zdGF0ZSB9KSA9PiB7XG4gIGxldCB7IG1hbmFnZXIsIGRlZmluaXRpb24sIGNvbXBvbmVudCB9ID0gdm0uZmV0Y2hWYWx1ZTxDb21wb25lbnRTdGF0ZTxPcGFxdWU+Pihfc3RhdGUpO1xuICB2bS5zdGFjay5wdXNoKG1hbmFnZXIubGF5b3V0Rm9yKGRlZmluaXRpb24sIGNvbXBvbmVudCwgdm0uZW52KSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkRpZFJlbmRlckxheW91dCwgKHZtLCB7IG9wMTogX3N0YXRlIH0pID0+IHtcbiAgbGV0IHsgbWFuYWdlciwgY29tcG9uZW50IH0gPSB2bS5mZXRjaFZhbHVlPENvbXBvbmVudFN0YXRlPE9wYXF1ZT4+KF9zdGF0ZSk7XG4gIGxldCBib3VuZHMgPSB2bS5lbGVtZW50cygpLnBvcEJsb2NrKCk7XG5cbiAgbWFuYWdlci5kaWRSZW5kZXJMYXlvdXQoY29tcG9uZW50LCBib3VuZHMpO1xuXG4gIHZtLmVudi5kaWRDcmVhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcblxuICB2bS51cGRhdGVXaXRoKG5ldyBEaWRVcGRhdGVMYXlvdXRPcGNvZGUobWFuYWdlciwgY29tcG9uZW50LCBib3VuZHMpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29tbWl0Q29tcG9uZW50VHJhbnNhY3Rpb24sIHZtID0+IHZtLmNvbW1pdENhY2hlR3JvdXAoKSk7XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVDb21wb25lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJ1cGRhdGUtY29tcG9uZW50XCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdGFnOiBUYWcsXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICBwcml2YXRlIG1hbmFnZXI6IENvbXBvbmVudE1hbmFnZXI8Q29tcG9uZW50PixcbiAgICBwcml2YXRlIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlLFxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgbGV0IGNvbXBvbmVudFRhZyA9IG1hbmFnZXIuZ2V0VGFnKGNvbXBvbmVudCk7XG5cbiAgICBpZiAoY29tcG9uZW50VGFnKSB7XG4gICAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW3RhZywgY29tcG9uZW50VGFnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKF92bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNvbXBvbmVudCwgbWFuYWdlciwgZHluYW1pY1Njb3BlIH0gPSB0aGlzO1xuXG4gICAgbWFuYWdlci51cGRhdGUoY29tcG9uZW50LCBkeW5hbWljU2NvcGUpO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMubmFtZSldXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlkVXBkYXRlTGF5b3V0T3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdHlwZSA9IFwiZGlkLXVwZGF0ZS1sYXlvdXRcIjtcbiAgcHVibGljIHRhZzogVGFnID0gQ09OU1RBTlRfVEFHO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWFuYWdlcjogQ29tcG9uZW50TWFuYWdlcjxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBib3VuZHM6IEJvdW5kc1xuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyBtYW5hZ2VyLCBjb21wb25lbnQsIGJvdW5kcyB9ID0gdGhpcztcblxuICAgIG1hbmFnZXIuZGlkVXBkYXRlTGF5b3V0KGNvbXBvbmVudCwgYm91bmRzKTtcblxuICAgIHZtLmVudi5kaWRVcGRhdGUoY29tcG9uZW50LCBtYW5hZ2VyKTtcbiAgfVxufVxuIl19

@@ -19,3 +19,3 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

import { APPEND_OPCODES } from '../../opcodes';
APPEND_OPCODES.add(26 /* DynamicContent */, function (vm, _ref) {
APPEND_OPCODES.add(25 /* DynamicContent */, function (vm, _ref) {
var append = _ref.op1;

@@ -68,3 +68,3 @@

AppendDynamicOpcode.prototype.evaluate = function evaluate(vm) {
var reference = vm.evalStack.pop();
var reference = vm.stack.pop();
var normalized = this.normalize(reference);

@@ -79,3 +79,3 @@ var value = void 0,

}
var stack = vm.stack();
var stack = vm.elements();
var upsert = this.insert(vm.env.getAppendOperations(), stack, value);

@@ -105,10 +105,10 @@ var bounds = new Fragment(upsert.bounds);

if (this.deopted) {
vm.pushEvalFrame(this.start);
vm.goto(this.start);
} else {
var value = vm.evalStack.pop();
var value = vm.stack.pop();
if (isComponentDefinition(value)) {
this.deopt(vm.env);
vm.pushEvalFrame(this.start);
vm.goto(this.start);
} else {
vm.evalStack.push(value);
vm.stack.push(value);
_AppendDynamicOpcode.prototype.evaluate.call(this, vm);

@@ -505,2 +505,2 @@ }

}(GuardedUpdateOpcode);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLEFBQWUsU0FLYixBQUFZLGNBQ1osQUFBTSxRQUNOLEFBQVEsVUFFUixBQUFjLGdCQUNkLEFBQWMsQUFDZixzQkFBTSxBQUFjLEFBQUM7QUFDdEIsQUFBTyxTQUFFLEFBQXFCLEFBQUUsNkJBQU0sQUFBNEIsQUFBQztBQUVuRSxBQUFPLFNBQWMsQUFBYyxBQUFFLHNCQUFNLEFBQWUsQUFBQztBQUczRCxBQUFPLFNBQXFDLEFBQWMsZ0JBQUUsQUFBWSxjQUFjLEFBQVUsWUFBRSxBQUFPLFNBQUUsQUFBRyxBQUFFLFdBQU0sQUFBb0IsQUFBQztBQUUzSSxBQUFPLFNBQUUsQUFBTSxRQUFFLEFBQUssQUFBRSxhQUFNLEFBQWMsQUFBQztBQUM3QyxBQUFPLFNBQUUsQUFBUSxBQUFFLGdCQUFNLEFBQWUsQUFBQztBQUN6QyxBQUFPLFNBQUUsQUFBb0IsQUFBRSw0QkFBTSxBQUFrQixBQUFDO0FBRXhELEFBQU8sU0FBRSxBQUFjLEFBQU0sc0JBQU0sQUFBZSxBQUFDO0FBRW5ELEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBaUIsc0JBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFNLEFBQUUsY0FBYixBQUFHOztBQUM5QyxRQUFJLEFBQU0sU0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBQyxBQUFNLEFBQW1DLEFBQUM7QUFDN0UsQUFBTSxXQUFDLEFBQVEsU0FBQyxBQUFFLEFBQUMsQUFBQyxBQUN0QjtBQUFDLEFBQUMsQUFBQztBQUVILGlCQUFpQixBQUFhO0FBQzVCLEFBQU0sV0FBQyxBQUFLLFVBQUssQUFBSSxRQUFJLEFBQUssVUFBSyxBQUFTLGFBQUksT0FBTyxBQUFLLE1BQUMsQUFBVSxBQUFDLGdCQUFLLEFBQVUsQUFBQyxBQUMxRjtBQUFDO0FBRUQsQUFBTSxtQ0FBNkIsQUFBYTtBQUM5QyxB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QUEyQiw0QkFBQyxBQUFTLFdBQUUsQUFBSyxPQUFFLEFBQU0sUUFBRSxBQUFNLEFBQUMsQUFBQyxBQUMzRTtBQUFDLEFBQ0YsQUFFRDs7O0VBbEJpRCxBQUFzQzs7SUFrQnJEOzs7QUFBbEM7Ozs7O0FBQ0UsZ0JBQUksT0FBRyxBQUFpQixBQUFDLEFBSzNCOztBQUFDOzswQ0FIVyxBQUFNLHlCQUFDLEFBQXdCLEtBQUUsQUFBYyxRQUFFLEFBQXdCO0FBQ2pGLEFBQU0sZUFBQyxBQUFjLGVBQUMsQUFBRyxLQUFFLEFBQU0sUUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QztBQUFDLEFBQ0Y7OztFQU55QyxBQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVcHNlcnQsIHtcbiAgSW5zZXJ0aW9uLFxuICBDYXV0aW91c0luc2VydGlvbixcbiAgVHJ1c3RpbmdJbnNlcnRpb24sXG5cbiAgaXNTYWZlU3RyaW5nLFxuICBpc05vZGUsXG4gIGlzU3RyaW5nLFxuXG4gIGNhdXRpb3VzSW5zZXJ0LFxuICB0cnVzdGluZ0luc2VydFxufSBmcm9tICcuLi8uLi91cHNlcnQnO1xuaW1wb3J0IHsgaXNDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4uLy4uL2RvbS9oZWxwZXInO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNLCBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgVHJ5T3Bjb2RlIH0gZnJvbSAnLi4vLi4vdm0vdXBkYXRlJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSwgUmVmZXJlbmNlQ2FjaGUsIFVwZGF0YWJsZVRhZywgVGFnV3JhcHBlciwgaXNNb2RpZmllZCwgaXNDb25zdCwgbWFwIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBDdXJzb3IsIGNsZWFyIH0gZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNDb250ZW50LCAodm0sIHsgb3AxOiBhcHBlbmQgfSkgPT4ge1xuICBsZXQgb3Bjb2RlID0gdm0uY29uc3RhbnRzLmdldE90aGVyKGFwcGVuZCkgYXMgQXBwZW5kRHluYW1pY09wY29kZTxJbnNlcnRpb24+O1xuICBvcGNvZGUuZXZhbHVhdGUodm0pO1xufSk7XG5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWVbJ3RvU3RyaW5nJ10gIT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUZXh0VmFsdWUodmFsdWU6IE9wYXF1ZSk6IHN0cmluZyB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVHJ1c3RlZFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBUcnVzdGluZ0luc2VydGlvbiB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvSFRNTCgpO1xuICB9XG4gIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZTogT3BhcXVlKTogQ2F1dGlvdXNJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgdHlwZSBBcHBlbmREeW5hbWljT3Bjb2RlQ29uc3RydWN0b3IgPSAgdHlwZW9mIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIHwgdHlwZW9mIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwZW5kRHluYW1pY09wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUPjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGU7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICAgIGxldCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemUocmVmZXJlbmNlKTtcblxuICAgIGxldCB2YWx1ZSwgY2FjaGU7XG5cbiAgICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgICB2YWx1ZSA9IG5vcm1hbGl6ZWQudmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUobm9ybWFsaXplZCk7XG4gICAgICB2YWx1ZSA9IGNhY2hlLnBlZWsoKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhY2sgPSB2bS5zdGFjaygpO1xuICAgIGxldCB1cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBzdGFjaywgdmFsdWUpO1xuICAgIGxldCBib3VuZHMgPSBuZXcgRnJhZ21lbnQodXBzZXJ0LmJvdW5kcyk7XG5cbiAgICBzdGFjay5uZXdCb3VuZHMoYm91bmRzKTtcblxuICAgIGlmIChjYWNoZSAvKiBpLmUuICFpc0NvbnN0KHJlZmVyZW5jZSkgKi8pIHtcbiAgICAgIHZtLnVwZGF0ZVdpdGgodGhpcy51cGRhdGVXaXRoKHZtLCByZWZlcmVuY2UsIGNhY2hlLCBib3VuZHMsIHVwc2VydCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR3VhcmRlZEFwcGVuZE9wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgQXBwZW5kT3Bjb2RlOiB0eXBlb2YgT3B0aW1pemVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgfCB0eXBlb2YgT3B0aW1pemVkVHJ1c3RpbmdBcHBlbmRPcGNvZGU7XG4gIHByaXZhdGUgc3RhcnQgPSAtMTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IGRlb3B0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQgPT09IC0xO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgaWYgKHRoaXMuZGVvcHRlZCkge1xuICAgICAgdm0ucHVzaEV2YWxGcmFtZSh0aGlzLnN0YXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHZhbHVlID0gdm0uZXZhbFN0YWNrLnBvcCgpO1xuXG4gICAgICBpZihpc0NvbXBvbmVudERlZmluaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGVvcHQodm0uZW52KTtcbiAgICAgICAgdm0ucHVzaEV2YWxGcmFtZSh0aGlzLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZtLmV2YWxTdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZW9wdChfZW52OiBFbnZpcm9ubWVudCk6IG51bWJlciB7IC8vIFB1YmxpYyBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgbGF6eSBkZW9wdFxuICAgIC8vIEF0IGNvbXBpbGUgdGltZSwgd2UgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgYXBwZW5kIGNhbGxzaXRlIG1pZ2h0IHJlZmVyXG4gICAgLy8gdG8gYSBsb2NhbCB2YXJpYWJsZS9wcm9wZXJ0eSBsb29rdXAgdGhhdCByZXNvbHZlcyB0byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gYXQgcnVudGltZS5cbiAgICAvL1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgZWFnZXJseSBjb21waWxlZCB0aGlzIGNhbGxzaXRlIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vICAge3sjaWYgKGlzLWNvbXBvbmVudC1kZWZpbml0aW9uIGZvbyl9fVxuICAgIC8vICAgICB7e2NvbXBvbmVudCBmb299fVxuICAgIC8vICAge3tlbHNlfX1cbiAgICAvLyAgICAge3tmb299fVxuICAgIC8vICAge3svaWZ9fVxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoZXJlIG1pZ2h0IGJlIGEgbGFyZ2UgYW1vdXQgb2YgdGhlc2UgY2FsbHNpdGVzXG4gICAgLy8gYW5kIG1vc3Qgb2YgdGhlbSB3b3VsZCByZXNvbHZlIHRvIGEgc2ltcGxlIHZhbHVlIGxvb2t1cC4gVGhlcmVmb3JlLCB3ZVxuICAgIC8vIHRyaWVkIHRvIGJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZWQgdGhhdCB0aGUgY2FsbHNpdGUgd2lsbCByZXNvbHZlIHRvXG4gICAgLy8gYXBwZW5kaW5nIGEgc2ltcGxlIHZhbHVlLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgd2UgaGF2ZSByZWFjaGVkIGhlcmUgYmVjYXVzZSBhdCBydW50aW1lLCB0aGUgZ3VhcmQgY29uZGl0aW9uYWxcbiAgICAvLyBoYXZlIGRldGVjdGVkIHRoYXQgdGhpcyBjYWxsc2l0ZSBpcyBpbmRlZWQgcmVmZXJyaW5nIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBvYmplY3QuIFNpbmNlIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIHRydWUgZm9yIG90aGVyXG4gICAgLy8gaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNhbGxzaXRlLCBpdCBpcyBub3cgYXBwcm9waWF0ZSB0byBkZW9wdCBpbnRvIHRoZVxuICAgIC8vIGV4cGFuZGVkIHZlcnNpb24gdGhhdCBoYW5kbGVzIGJvdGggY2FzZXMuIFRoZSBjb21waWxhdGlvbiB3b3VsZCBsb29rXG4gICAgLy8gbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgICBQdXRWYWx1ZShleHByZXNzaW9uKVxuICAgIC8vICAgICAgICAgICAgICAgVGVzdChpcy1jb21wb25lbnQtZGVmaW5pdGlvbilcbiAgICAvLyAgICAgICAgICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gICBCRUdJTjogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBKdW1wVW5sZXNzKFZBTFVFKVxuICAgIC8vICAgICAgICAgICAgICAgUHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25PcGNvZGVcbiAgICAvLyAgICAgICAgICAgICAgIE9wZW5Db21wb25lbnRcbiAgICAvLyAgICAgICAgICAgICAgIENsb3NlQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBKdW1wKEVORClcbiAgICAvLyAgIFZBTFVFOiAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIE9wdGltaXplZEFwcGVuZFxuICAgIC8vICAgRU5EOiAgICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy8gS2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBpZiB3ZSAqZG9uJ3QqIHJlYWNoIGhlcmUgYXQgaW5pdGlhbCByZW5kZXIgdGltZSxcbiAgICAvLyBpdCBpcyBzdGlsbCBwb3NzaWJsZSAoYWx0aG91Z2ggcXVpdGUgcmFyZSkgdGhhdCB0aGUgc2ltcGxlIHZhbHVlIHdlXG4gICAgLy8gZW5jb3VudGVyIGR1cmluZyBpbml0aWFsIHJlbmRlciBjb3VsZCBsYXRlciBjaGFuZ2UgaW50byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gb2JqZWN0IGF0IHVwZGF0ZSB0aW1lLiBUaGF0IGlzIGhhbmRsZWQgYnkgdGhlIFwibGF6eSBkZW9wdFwiXG4gICAgLy8gY29kZSBvbiB0aGUgdXBkYXRlIHNpZGUgKHNjcm9sbCBkb3duIGZvciB0aGUgbmV4dCBiaWcgYmxvY2sgb2YgY29tbWVudCkuXG5cbiAgICByZXR1cm4gbnVsbCBhcyBhbnk7XG4gIH1cbn1cblxuY2xhc3MgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIGV4dGVuZHMgQ29uZGl0aW9uYWxSZWZlcmVuY2Uge1xuICBzdGF0aWMgY3JlYXRlKGlubmVyOiBSZWZlcmVuY2U8T3BhcXVlPik6IElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UoaW5uZXIpO1xuICB9XG5cbiAgdG9Cb29sKHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgcHJvdGVjdGVkIGJvdW5kczogRnJhZ21lbnQsXG4gICAgcHJvdGVjdGVkIHVwc2VydDogVXBzZXJ0XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjYWNoZS50YWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jYWNoZS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIGxldCB7IGJvdW5kcywgdXBzZXJ0IH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgaWYoIXRoaXMudXBzZXJ0LnVwZGF0ZShkb20sIHZhbHVlKSkge1xuICAgICAgICBsZXQgY3Vyc29yID0gbmV3IEN1cnNvcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBjbGVhcihib3VuZHMpKTtcbiAgICAgICAgdXBzZXJ0ID0gdGhpcy51cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBjdXJzb3IsIHZhbHVlIGFzIFQpO1xuICAgICAgfVxuXG4gICAgICBib3VuZHMudXBkYXRlKHVwc2VydC5ib3VuZHMpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiB7IGxhc3RWYWx1ZTogSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKSB9XG4gICAgfTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFQ+IHtcbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG4gIHByaXZhdGUgZGVvcHRlZDogT3B0aW9uPFRyeU9wY29kZT4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgYm91bmRzOiBGcmFnbWVudCxcbiAgICB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcihjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICAgIHRoaXMudGFnID0gdGhpcy5fdGFnID0gVXBkYXRhYmxlVGFnLmNyZWF0ZSh0aGlzLnRhZyk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLmV2YWx1YXRlT3Bjb2RlKHRoaXMuZGVvcHRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0NvbXBvbmVudERlZmluaXRpb24odGhpcy5yZWZlcmVuY2UudmFsdWUoKSkpIHtcbiAgICAgICAgdGhpcy5sYXp5RGVvcHQodm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGF6eURlb3B0KF92bTogVXBkYXRpbmdWTSkge1xuICAgIC8vIER1cmlnbiBpbml0aWFsIHJlbmRlciwgd2Uga25vdyB0aGF0IHRoZSByZWZlcmVuY2UgZG9lcyBub3QgY29udGFpbiBhXG4gICAgLy8gY29tcG9uZW50IGRlZmluaXRpb24sIHNvIHdlIG9wdGltaXN0aWNhbGx5IGFzc3VtZWQgdGhhdCB0aGlzIGFwcGVuZFxuICAgIC8vIGlzIGp1c3QgYSBub3JtYWwgYXBwZW5kLiBIb3dldmVyLCBhdCB1cGRhdGUgdGltZSwgd2UgZGlzY292ZXJlZCB0aGF0XG4gICAgLy8gdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgaW50byBjb250YWluaW5nIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHNvXG4gICAgLy8gd2UgbmVlZCB0byBkbyBhIFwibGF6eSBkZW9wdFwiLCBzaW11bGF0aW5nIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpZlxuICAgIC8vIHdlIGhhZCBkZWNpZGVkIHRvIHBlcmZvcm0gdGhlIGRlb3B0IGluIHRoZSBmaXJzdCBwbGFjZSBkdXJpbmcgaW5pdGlhbFxuICAgIC8vIHJlbmRlci5cbiAgICAvL1xuICAgIC8vIE1vcmUgY29uY3JldGVseSwgd2Ugd291bGQgaGF2ZSBleHBhbmRlZCB0aGUgY3VybHkgaW50byBhIGlmL2Vsc2UsIGFuZFxuICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgY29tcG9uZW50IGRlZmluaXRpb24gb3Igbm90LCB3ZSB3b3VsZFxuICAgIC8vIGhhdmUgZW50ZXJlZCBlaXRoZXIgdGhlIGR5bmFtaWMgY29tcG9uZW50IGJyYW5jaCBvciB0aGUgc2ltcGxlIHZhbHVlXG4gICAgLy8gYnJhbmNoLlxuICAgIC8vXG4gICAgLy8gU2luY2Ugd2UgcmVuZGVyZWQgYSBzaW1wbGUgdmFsdWUgZHVyaW5nIGluaXRpYWwgcmVuZGVyIChhbmQgYWxsIHRoZVxuICAgIC8vIHVwZGF0ZXMgdXAgdW50aWwgdGhpcyBwb2ludCksIHdlIG5lZWQgdG8gcHJldGVuZCB0aGF0IHRoZSByZXN1bHQgaXNcbiAgICAvLyBwcm9kdWNlZCBieSB0aGUgXCJWQUxVRVwiIGJyYW5jaCBvZiB0aGUgZGVvcHRlZCBhcHBlbmQgb3Bjb2RlOlxuICAgIC8vXG4gICAgLy8gICBUcnkoQkVHSU4sIEVORClcbiAgICAvLyAgICAgQXNzZXJ0KElzQ29tcG9uZW50RGVmaW5pdGlvbiwgZXhwZWN0ZWQ9ZmFsc2UpXG4gICAgLy8gICAgIE9wdGltaXplZFVwZGF0ZVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGZyb20gYmVpbmcgYSBzaW1wbGVcbiAgICAvLyB2YWx1ZSBpbnRvIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpcyB0aGF0XG4gICAgLy8gdGhlIGFzc2VydCB3b3VsZCB0aHJvdywgY2F1c2luZyB0aGUgVHJ5IG9wY29kZSB0byB0ZWFyZG93biB0aGUgYm91bmRzXG4gICAgLy8gYW5kIHJlcnVuIHRoZSBvcmlnaW5hbCBhcHBlbmQgb3Bjb2RlLlxuICAgIC8vXG4gICAgLy8gU2luY2UgdGhlIFRyeSBvcGNvZGUgd291bGQgaGF2ZSBudWtlZCB0aGUgdXBkYXRpbmcgb3Bjb2RlcyBhbnl3YXksIHdlXG4gICAgLy8gd291bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBzaW11bGF0aW5nIHRob3NlLiBBbGwgd2UgaGF2ZSB0byBkbyBpcyB0b1xuICAgIC8vIGV4ZWN1dGUgdGhlIFRyeSBvcGNvZGUgYW5kIGltbWVkaWF0ZWx5IHRocm93LlxuXG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBkZW9wdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlb3B0ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGd1aWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlb3B0ZWQ6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiBbZGVvcHRlZC50b0pTT04oKV1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCBfcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIF9yZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLXRydXN0aW5nLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICd0cnVzdGluZy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLEFBQWUsU0FLYixBQUFZLGNBQ1osQUFBTSxRQUNOLEFBQVEsVUFFUixBQUFjLGdCQUNkLEFBQWMsQUFDZixzQkFBTSxBQUFjLEFBQUM7QUFDdEIsQUFBTyxTQUFFLEFBQXFCLEFBQUUsNkJBQU0sQUFBNEIsQUFBQztBQUVuRSxBQUFPLFNBQWMsQUFBYyxBQUFFLHNCQUFNLEFBQWUsQUFBQztBQUczRCxBQUFPLFNBQXFDLEFBQWMsZ0JBQUUsQUFBWSxjQUFjLEFBQVUsWUFBRSxBQUFPLFNBQUUsQUFBRyxBQUFFLFdBQU0sQUFBb0IsQUFBQztBQUUzSSxBQUFPLFNBQUUsQUFBTSxRQUFFLEFBQUssQUFBRSxhQUFNLEFBQWMsQUFBQztBQUM3QyxBQUFPLFNBQUUsQUFBUSxBQUFFLGdCQUFNLEFBQWUsQUFBQztBQUN6QyxBQUFPLFNBQUUsQUFBb0IsQUFBRSw0QkFBTSxBQUFrQixBQUFDO0FBRXhELEFBQU8sU0FBRSxBQUFjLEFBQU0sc0JBQU0sQUFBZSxBQUFDO0FBRW5ELEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBaUIsc0JBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFNLEFBQUUsY0FBYixBQUFHOztBQUM5QyxRQUFJLEFBQU0sU0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBQyxBQUFNLEFBQW1DLEFBQUM7QUFDN0UsQUFBTSxXQUFDLEFBQVEsU0FBQyxBQUFFLEFBQUMsQUFBQyxBQUN0QjtBQUFDLEFBQUMsQUFBQztBQUVILGlCQUFpQixBQUFhO0FBQzVCLEFBQU0sV0FBQyxBQUFLLFVBQUssQUFBSSxRQUFJLEFBQUssVUFBSyxBQUFTLGFBQUksT0FBTyxBQUFLLE1BQUMsQUFBVSxBQUFDLGdCQUFLLEFBQVUsQUFBQyxBQUMxRjtBQUFDO0FBRUQsQUFBTSxtQ0FBNkIsQUFBYTtBQUM5QyxB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QUEyQiw0QkFBQyxBQUFTLFdBQUUsQUFBSyxPQUFFLEFBQU0sUUFBRSxBQUFNLEFBQUMsQUFBQyxBQUMzRTtBQUFDLEFBQ0YsQUFFRDs7O0VBbEJpRCxBQUFzQzs7SUFrQnJEOzs7QUFBbEM7Ozs7O0FBQ0UsZ0JBQUksT0FBRyxBQUFpQixBQUFDLEFBSzNCOztBQUFDOzswQ0FIVyxBQUFNLHlCQUFDLEFBQXdCLEtBQUUsQUFBYyxRQUFFLEFBQXdCO0FBQ2pGLEFBQU0sZUFBQyxBQUFjLGVBQUMsQUFBRyxLQUFFLEFBQU0sUUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM1QztBQUFDLEFBQ0Y7OztFQU55QyxBQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVcHNlcnQsIHtcbiAgSW5zZXJ0aW9uLFxuICBDYXV0aW91c0luc2VydGlvbixcbiAgVHJ1c3RpbmdJbnNlcnRpb24sXG5cbiAgaXNTYWZlU3RyaW5nLFxuICBpc05vZGUsXG4gIGlzU3RyaW5nLFxuXG4gIGNhdXRpb3VzSW5zZXJ0LFxuICB0cnVzdGluZ0luc2VydFxufSBmcm9tICcuLi8uLi91cHNlcnQnO1xuaW1wb3J0IHsgaXNDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRE9NVHJlZUNvbnN0cnVjdGlvbiB9IGZyb20gJy4uLy4uL2RvbS9oZWxwZXInO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNLCBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgVHJ5T3Bjb2RlIH0gZnJvbSAnLi4vLi4vdm0vdXBkYXRlJztcbmltcG9ydCB7IFJlZmVyZW5jZSwgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSwgUmVmZXJlbmNlQ2FjaGUsIFVwZGF0YWJsZVRhZywgVGFnV3JhcHBlciwgaXNNb2RpZmllZCwgaXNDb25zdCwgbWFwIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBDdXJzb3IsIGNsZWFyIH0gZnJvbSAnLi4vLi4vYm91bmRzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbFJlZmVyZW5jZSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNDb250ZW50LCAodm0sIHsgb3AxOiBhcHBlbmQgfSkgPT4ge1xuICBsZXQgb3Bjb2RlID0gdm0uY29uc3RhbnRzLmdldE90aGVyKGFwcGVuZCkgYXMgQXBwZW5kRHluYW1pY09wY29kZTxJbnNlcnRpb24+O1xuICBvcGNvZGUuZXZhbHVhdGUodm0pO1xufSk7XG5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWU6IE9wYXF1ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWVbJ3RvU3RyaW5nJ10gIT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUZXh0VmFsdWUodmFsdWU6IE9wYXF1ZSk6IHN0cmluZyB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVHJ1c3RlZFZhbHVlKHZhbHVlOiBPcGFxdWUpOiBUcnVzdGluZ0luc2VydGlvbiB7XG4gIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1NhZmVTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvSFRNTCgpO1xuICB9XG4gIGlmIChpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZTogT3BhcXVlKTogQ2F1dGlvdXNJbnNlcnRpb24ge1xuICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTYWZlU3RyaW5nKHZhbHVlKSB8fCBpc05vZGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5leHBvcnQgdHlwZSBBcHBlbmREeW5hbWljT3Bjb2RlQ29uc3RydWN0b3IgPSAgdHlwZW9mIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIHwgdHlwZW9mIE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwZW5kRHluYW1pY09wY29kZTxUIGV4dGVuZHMgSW5zZXJ0aW9uPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUPjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVCk6IFVwc2VydDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZVdpdGgodm06IFZNLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sIGJvdW5kczogRnJhZ21lbnQsIHVwc2VydDogVXBzZXJ0KTogVXBkYXRpbmdPcGNvZGU7XG5cbiAgZXZhbHVhdGUodm06IFZNKSB7XG4gICAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZShyZWZlcmVuY2UpO1xuXG4gICAgbGV0IHZhbHVlLCBjYWNoZTtcblxuICAgIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICAgIHZhbHVlID0gbm9ybWFsaXplZC52YWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShub3JtYWxpemVkKTtcbiAgICAgIHZhbHVlID0gY2FjaGUucGVlaygpO1xuICAgIH1cblxuICAgIGxldCBzdGFjayA9IHZtLmVsZW1lbnRzKCk7XG4gICAgbGV0IHVwc2VydCA9IHRoaXMuaW5zZXJ0KHZtLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCksIHN0YWNrLCB2YWx1ZSk7XG4gICAgbGV0IGJvdW5kcyA9IG5ldyBGcmFnbWVudCh1cHNlcnQuYm91bmRzKTtcblxuICAgIHN0YWNrLm5ld0JvdW5kcyhib3VuZHMpO1xuXG4gICAgaWYgKGNhY2hlIC8qIGkuZS4gIWlzQ29uc3QocmVmZXJlbmNlKSAqLykge1xuICAgICAgdm0udXBkYXRlV2l0aCh0aGlzLnVwZGF0ZVdpdGgodm0sIHJlZmVyZW5jZSwgY2FjaGUsIGJvdW5kcywgdXBzZXJ0KSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxUPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBBcHBlbmRPcGNvZGU6IHR5cGVvZiBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZSB8IHR5cGVvZiBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZTtcbiAgcHJpdmF0ZSBzdGFydCA9IC0xO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgZGVvcHRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydCA9PT0gLTE7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVk0pIHtcbiAgICBpZiAodGhpcy5kZW9wdGVkKSB7XG4gICAgICB2bS5nb3RvKHRoaXMuc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsdWUgPSB2bS5zdGFjay5wb3AoKTtcblxuICAgICAgaWYoaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmRlb3B0KHZtLmVudik7XG4gICAgICAgIHZtLmdvdG8odGhpcy5zdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bS5zdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZW9wdChfZW52OiBFbnZpcm9ubWVudCk6IG51bWJlciB7IC8vIFB1YmxpYyBiZWNhdXNlIGl0J3MgdXNlZCBpbiB0aGUgbGF6eSBkZW9wdFxuICAgIC8vIEF0IGNvbXBpbGUgdGltZSwgd2UgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgYXBwZW5kIGNhbGxzaXRlIG1pZ2h0IHJlZmVyXG4gICAgLy8gdG8gYSBsb2NhbCB2YXJpYWJsZS9wcm9wZXJ0eSBsb29rdXAgdGhhdCByZXNvbHZlcyB0byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gYXQgcnVudGltZS5cbiAgICAvL1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgZWFnZXJseSBjb21waWxlZCB0aGlzIGNhbGxzaXRlIGludG8gc29tZXRoaW5nIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vICAge3sjaWYgKGlzLWNvbXBvbmVudC1kZWZpbml0aW9uIGZvbyl9fVxuICAgIC8vICAgICB7e2NvbXBvbmVudCBmb299fVxuICAgIC8vICAge3tlbHNlfX1cbiAgICAvLyAgICAge3tmb299fVxuICAgIC8vICAge3svaWZ9fVxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoZXJlIG1pZ2h0IGJlIGEgbGFyZ2UgYW1vdXQgb2YgdGhlc2UgY2FsbHNpdGVzXG4gICAgLy8gYW5kIG1vc3Qgb2YgdGhlbSB3b3VsZCByZXNvbHZlIHRvIGEgc2ltcGxlIHZhbHVlIGxvb2t1cC4gVGhlcmVmb3JlLCB3ZVxuICAgIC8vIHRyaWVkIHRvIGJlIG9wdGltaXN0aWMgYW5kIGFzc3VtZWQgdGhhdCB0aGUgY2FsbHNpdGUgd2lsbCByZXNvbHZlIHRvXG4gICAgLy8gYXBwZW5kaW5nIGEgc2ltcGxlIHZhbHVlLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgd2UgaGF2ZSByZWFjaGVkIGhlcmUgYmVjYXVzZSBhdCBydW50aW1lLCB0aGUgZ3VhcmQgY29uZGl0aW9uYWxcbiAgICAvLyBoYXZlIGRldGVjdGVkIHRoYXQgdGhpcyBjYWxsc2l0ZSBpcyBpbmRlZWQgcmVmZXJyaW5nIHRvIGEgY29tcG9uZW50XG4gICAgLy8gZGVmaW5pdGlvbiBvYmplY3QuIFNpbmNlIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIHRydWUgZm9yIG90aGVyXG4gICAgLy8gaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNhbGxzaXRlLCBpdCBpcyBub3cgYXBwcm9waWF0ZSB0byBkZW9wdCBpbnRvIHRoZVxuICAgIC8vIGV4cGFuZGVkIHZlcnNpb24gdGhhdCBoYW5kbGVzIGJvdGggY2FzZXMuIFRoZSBjb21waWxhdGlvbiB3b3VsZCBsb29rXG4gICAgLy8gbGlrZSB0aGlzOlxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgICBQdXRWYWx1ZShleHByZXNzaW9uKVxuICAgIC8vICAgICAgICAgICAgICAgVGVzdChpcy1jb21wb25lbnQtZGVmaW5pdGlvbilcbiAgICAvLyAgICAgICAgICAgICAgIEVudGVyKEJFR0lOLCBFTkQpXG4gICAgLy8gICBCRUdJTjogICAgICBOb29wXG4gICAgLy8gICAgICAgICAgICAgICBKdW1wVW5sZXNzKFZBTFVFKVxuICAgIC8vICAgICAgICAgICAgICAgUHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb25PcGNvZGVcbiAgICAvLyAgICAgICAgICAgICAgIE9wZW5Db21wb25lbnRcbiAgICAvLyAgICAgICAgICAgICAgIENsb3NlQ29tcG9uZW50XG4gICAgLy8gICAgICAgICAgICAgICBKdW1wKEVORClcbiAgICAvLyAgIFZBTFVFOiAgICAgIE5vb3BcbiAgICAvLyAgICAgICAgICAgICAgIE9wdGltaXplZEFwcGVuZFxuICAgIC8vICAgRU5EOiAgICAgICAgTm9vcFxuICAgIC8vICAgICAgICAgICAgICAgRXhpdFxuICAgIC8vXG4gICAgLy8gS2VlcCBpbiBtaW5kIHRoYXQgZXZlbiBpZiB3ZSAqZG9uJ3QqIHJlYWNoIGhlcmUgYXQgaW5pdGlhbCByZW5kZXIgdGltZSxcbiAgICAvLyBpdCBpcyBzdGlsbCBwb3NzaWJsZSAoYWx0aG91Z2ggcXVpdGUgcmFyZSkgdGhhdCB0aGUgc2ltcGxlIHZhbHVlIHdlXG4gICAgLy8gZW5jb3VudGVyIGR1cmluZyBpbml0aWFsIHJlbmRlciBjb3VsZCBsYXRlciBjaGFuZ2UgaW50byBhIGNvbXBvbmVudFxuICAgIC8vIGRlZmluaXRpb24gb2JqZWN0IGF0IHVwZGF0ZSB0aW1lLiBUaGF0IGlzIGhhbmRsZWQgYnkgdGhlIFwibGF6eSBkZW9wdFwiXG4gICAgLy8gY29kZSBvbiB0aGUgdXBkYXRlIHNpZGUgKHNjcm9sbCBkb3duIGZvciB0aGUgbmV4dCBiaWcgYmxvY2sgb2YgY29tbWVudCkuXG5cbiAgICByZXR1cm4gbnVsbCBhcyBhbnk7XG4gIH1cbn1cblxuY2xhc3MgSXNDb21wb25lbnREZWZpbml0aW9uUmVmZXJlbmNlIGV4dGVuZHMgQ29uZGl0aW9uYWxSZWZlcmVuY2Uge1xuICBzdGF0aWMgY3JlYXRlKGlubmVyOiBSZWZlcmVuY2U8T3BhcXVlPik6IElzQ29tcG9uZW50RGVmaW5pdGlvblJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBJc0NvbXBvbmVudERlZmluaXRpb25SZWZlcmVuY2UoaW5uZXIpO1xuICB9XG5cbiAgdG9Cb29sKHZhbHVlOiBPcGFxdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDb21wb25lbnREZWZpbml0aW9uKHZhbHVlKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBVcGRhdGVPcGNvZGU8VCBleHRlbmRzIEluc2VydGlvbj4gZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgcHJvdGVjdGVkIGJvdW5kczogRnJhZ21lbnQsXG4gICAgcHJvdGVjdGVkIHVwc2VydDogVXBzZXJ0XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50YWcgPSBjYWNoZS50YWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUKTogVXBzZXJ0O1xuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5jYWNoZS5yZXZhbGlkYXRlKCk7XG5cbiAgICBpZiAoaXNNb2RpZmllZCh2YWx1ZSkpIHtcbiAgICAgIGxldCB7IGJvdW5kcywgdXBzZXJ0IH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgaWYoIXRoaXMudXBzZXJ0LnVwZGF0ZShkb20sIHZhbHVlKSkge1xuICAgICAgICBsZXQgY3Vyc29yID0gbmV3IEN1cnNvcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBjbGVhcihib3VuZHMpKTtcbiAgICAgICAgdXBzZXJ0ID0gdGhpcy51cHNlcnQgPSB0aGlzLmluc2VydCh2bS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLCBjdXJzb3IsIHZhbHVlIGFzIFQpO1xuICAgICAgfVxuXG4gICAgICBib3VuZHMudXBkYXRlKHVwc2VydC5ib3VuZHMpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZDogZ3VpZCwgdHlwZSwgY2FjaGUgfSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiB7IGxhc3RWYWx1ZTogSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKSB9XG4gICAgfTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBHdWFyZGVkVXBkYXRlT3Bjb2RlPFQgZXh0ZW5kcyBJbnNlcnRpb24+IGV4dGVuZHMgVXBkYXRlT3Bjb2RlPFQ+IHtcbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG4gIHByaXZhdGUgZGVvcHRlZDogT3B0aW9uPFRyeU9wY29kZT4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VD4sXG4gICAgYm91bmRzOiBGcmFnbWVudCxcbiAgICB1cHNlcnQ6IFVwc2VydFxuICApIHtcbiAgICBzdXBlcihjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICAgIHRoaXMudGFnID0gdGhpcy5fdGFnID0gVXBkYXRhYmxlVGFnLmNyZWF0ZSh0aGlzLnRhZyk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGlmICh0aGlzLmRlb3B0ZWQpIHtcbiAgICAgIHZtLmV2YWx1YXRlT3Bjb2RlKHRoaXMuZGVvcHRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0NvbXBvbmVudERlZmluaXRpb24odGhpcy5yZWZlcmVuY2UudmFsdWUoKSkpIHtcbiAgICAgICAgdGhpcy5sYXp5RGVvcHQodm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIuZXZhbHVhdGUodm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGF6eURlb3B0KF92bTogVXBkYXRpbmdWTSkge1xuICAgIC8vIER1cmlnbiBpbml0aWFsIHJlbmRlciwgd2Uga25vdyB0aGF0IHRoZSByZWZlcmVuY2UgZG9lcyBub3QgY29udGFpbiBhXG4gICAgLy8gY29tcG9uZW50IGRlZmluaXRpb24sIHNvIHdlIG9wdGltaXN0aWNhbGx5IGFzc3VtZWQgdGhhdCB0aGlzIGFwcGVuZFxuICAgIC8vIGlzIGp1c3QgYSBub3JtYWwgYXBwZW5kLiBIb3dldmVyLCBhdCB1cGRhdGUgdGltZSwgd2UgZGlzY292ZXJlZCB0aGF0XG4gICAgLy8gdGhlIHJlZmVyZW5jZSBoYXMgc3dpdGNoZWQgaW50byBjb250YWluaW5nIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHNvXG4gICAgLy8gd2UgbmVlZCB0byBkbyBhIFwibGF6eSBkZW9wdFwiLCBzaW11bGF0aW5nIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpZlxuICAgIC8vIHdlIGhhZCBkZWNpZGVkIHRvIHBlcmZvcm0gdGhlIGRlb3B0IGluIHRoZSBmaXJzdCBwbGFjZSBkdXJpbmcgaW5pdGlhbFxuICAgIC8vIHJlbmRlci5cbiAgICAvL1xuICAgIC8vIE1vcmUgY29uY3JldGVseSwgd2Ugd291bGQgaGF2ZSBleHBhbmRlZCB0aGUgY3VybHkgaW50byBhIGlmL2Vsc2UsIGFuZFxuICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgY29tcG9uZW50IGRlZmluaXRpb24gb3Igbm90LCB3ZSB3b3VsZFxuICAgIC8vIGhhdmUgZW50ZXJlZCBlaXRoZXIgdGhlIGR5bmFtaWMgY29tcG9uZW50IGJyYW5jaCBvciB0aGUgc2ltcGxlIHZhbHVlXG4gICAgLy8gYnJhbmNoLlxuICAgIC8vXG4gICAgLy8gU2luY2Ugd2UgcmVuZGVyZWQgYSBzaW1wbGUgdmFsdWUgZHVyaW5nIGluaXRpYWwgcmVuZGVyIChhbmQgYWxsIHRoZVxuICAgIC8vIHVwZGF0ZXMgdXAgdW50aWwgdGhpcyBwb2ludCksIHdlIG5lZWQgdG8gcHJldGVuZCB0aGF0IHRoZSByZXN1bHQgaXNcbiAgICAvLyBwcm9kdWNlZCBieSB0aGUgXCJWQUxVRVwiIGJyYW5jaCBvZiB0aGUgZGVvcHRlZCBhcHBlbmQgb3Bjb2RlOlxuICAgIC8vXG4gICAgLy8gICBUcnkoQkVHSU4sIEVORClcbiAgICAvLyAgICAgQXNzZXJ0KElzQ29tcG9uZW50RGVmaW5pdGlvbiwgZXhwZWN0ZWQ9ZmFsc2UpXG4gICAgLy8gICAgIE9wdGltaXplZFVwZGF0ZVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgaGFzIHN3aXRjaGVkIGZyb20gYmVpbmcgYSBzaW1wbGVcbiAgICAvLyB2YWx1ZSBpbnRvIGEgY29tcG9uZW50IGRlZmluaXRpb24sIHdoYXQgd291bGQgaGF2ZSBoYXBwZW5lZCBpcyB0aGF0XG4gICAgLy8gdGhlIGFzc2VydCB3b3VsZCB0aHJvdywgY2F1c2luZyB0aGUgVHJ5IG9wY29kZSB0byB0ZWFyZG93biB0aGUgYm91bmRzXG4gICAgLy8gYW5kIHJlcnVuIHRoZSBvcmlnaW5hbCBhcHBlbmQgb3Bjb2RlLlxuICAgIC8vXG4gICAgLy8gU2luY2UgdGhlIFRyeSBvcGNvZGUgd291bGQgaGF2ZSBudWtlZCB0aGUgdXBkYXRpbmcgb3Bjb2RlcyBhbnl3YXksIHdlXG4gICAgLy8gd291bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBzaW11bGF0aW5nIHRob3NlLiBBbGwgd2UgaGF2ZSB0byBkbyBpcyB0b1xuICAgIC8vIGV4ZWN1dGUgdGhlIFRyeSBvcGNvZGUgYW5kIGltbWVkaWF0ZWx5IHRocm93LlxuXG4gICAgcmV0dXJuIG51bGwgYXMgYW55O1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIGxldCB7IF9ndWlkOiBndWlkLCB0eXBlLCBkZW9wdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKGRlb3B0ZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGd1aWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGRlb3B0ZWQ6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiBbZGVvcHRlZC50b0pTT04oKV1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdXBlci50b0pTT04oKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wdGltaXplZENhdXRpb3VzQXBwZW5kT3Bjb2RlIGV4dGVuZHMgQXBwZW5kRHluYW1pY09wY29kZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICB0eXBlID0gJ29wdGltaXplZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxDYXV0aW91c0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVWYWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBDYXV0aW91c0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIGNhdXRpb3VzSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aChfdm06IFZNLCBfcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpbWl6ZWRDYXV0aW91c1VwZGF0ZU9wY29kZShjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIE9wdGltaXplZENhdXRpb3VzVXBkYXRlT3Bjb2RlIGV4dGVuZHMgVXBkYXRlT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnb3B0aW1pemVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWFyZGVkQ2F1dGlvdXNBcHBlbmRPcGNvZGUgZXh0ZW5kcyBHdWFyZGVkQXBwZW5kT3Bjb2RlPENhdXRpb3VzSW5zZXJ0aW9uPiB7XG4gIHR5cGUgPSAnZ3VhcmRlZC1jYXV0aW91cy1hcHBlbmQnO1xuXG4gIHByb3RlY3RlZCBBcHBlbmRPcGNvZGUgPSBPcHRpbWl6ZWRDYXV0aW91c0FwcGVuZE9wY29kZTtcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPENhdXRpb3VzSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkQ2F1dGlvdXNVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRDYXV0aW91c1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8Q2F1dGlvdXNJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLWNhdXRpb3VzLXVwZGF0ZSc7XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogQ2F1dGlvdXNJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiBjYXV0aW91c0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpbWl6ZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEFwcGVuZER5bmFtaWNPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctYXBwZW5kJztcblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplKHJlZmVyZW5jZTogUmVmZXJlbmNlPE9wYXF1ZT4pOiBSZWZlcmVuY2U8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgICByZXR1cm4gbWFwKHJlZmVyZW5jZSwgbm9ybWFsaXplVHJ1c3RlZFZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoKF92bTogVk0sIF9yZWZlcmVuY2U6IFJlZmVyZW5jZTxPcGFxdWU+LCBjYWNoZTogUmVmZXJlbmNlQ2FjaGU8VHJ1c3RpbmdJbnNlcnRpb24+LCBib3VuZHM6IEZyYWdtZW50LCB1cHNlcnQ6IFVwc2VydCk6IFVwZGF0aW5nT3Bjb2RlIHtcbiAgICByZXR1cm4gbmV3IE9wdGltaXplZFRydXN0aW5nVXBkYXRlT3Bjb2RlKGNhY2hlLCBib3VuZHMsIHVwc2VydCk7XG4gIH1cbn1cblxuY2xhc3MgT3B0aW1pemVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUgZXh0ZW5kcyBVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdvcHRpbWl6ZWQtdHJ1c3RpbmctdXBkYXRlJztcblxuICBwcm90ZWN0ZWQgaW5zZXJ0KGRvbTogRE9NVHJlZUNvbnN0cnVjdGlvbiwgY3Vyc29yOiBDdXJzb3IsIHZhbHVlOiBUcnVzdGluZ0luc2VydGlvbik6IFVwc2VydCB7XG4gICAgcmV0dXJuIHRydXN0aW5nSW5zZXJ0KGRvbSwgY3Vyc29yLCB2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1YXJkZWRUcnVzdGluZ0FwcGVuZE9wY29kZSBleHRlbmRzIEd1YXJkZWRBcHBlbmRPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICdndWFyZGVkLXRydXN0aW5nLWFwcGVuZCc7XG5cbiAgcHJvdGVjdGVkIEFwcGVuZE9wY29kZSA9IE9wdGltaXplZFRydXN0aW5nQXBwZW5kT3Bjb2RlO1xuXG4gIHByb3RlY3RlZCBub3JtYWxpemUocmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPik6IFJlZmVyZW5jZTxUcnVzdGluZ0luc2VydGlvbj4ge1xuICAgIHJldHVybiBtYXAocmVmZXJlbmNlLCBub3JtYWxpemVUcnVzdGVkVmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydChkb206IERPTVRyZWVDb25zdHJ1Y3Rpb24sIGN1cnNvcjogQ3Vyc29yLCB2YWx1ZTogVHJ1c3RpbmdJbnNlcnRpb24pOiBVcHNlcnQge1xuICAgIHJldHVybiB0cnVzdGluZ0luc2VydChkb20sIGN1cnNvciwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGgoX3ZtOiBWTSwgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPiwgY2FjaGU6IFJlZmVyZW5jZUNhY2hlPFRydXN0aW5nSW5zZXJ0aW9uPiwgYm91bmRzOiBGcmFnbWVudCwgdXBzZXJ0OiBVcHNlcnQpOiBVcGRhdGluZ09wY29kZSB7XG4gICAgcmV0dXJuIG5ldyBHdWFyZGVkVHJ1c3RpbmdVcGRhdGVPcGNvZGUocmVmZXJlbmNlLCBjYWNoZSwgYm91bmRzLCB1cHNlcnQpO1xuICB9XG59XG5cbmNsYXNzIEd1YXJkZWRUcnVzdGluZ1VwZGF0ZU9wY29kZSBleHRlbmRzIEd1YXJkZWRVcGRhdGVPcGNvZGU8VHJ1c3RpbmdJbnNlcnRpb24+IHtcbiAgdHlwZSA9ICd0cnVzdGluZy11cGRhdGUnO1xuXG4gIHByb3RlY3RlZCBpbnNlcnQoZG9tOiBET01UcmVlQ29uc3RydWN0aW9uLCBjdXJzb3I6IEN1cnNvciwgdmFsdWU6IFRydXN0aW5nSW5zZXJ0aW9uKTogVXBzZXJ0IHtcbiAgICByZXR1cm4gdHJ1c3RpbmdJbnNlcnQoZG9tLCBjdXJzb3IsIHZhbHVlKTtcbiAgfVxufVxuIl19

@@ -67,3 +67,3 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

APPEND_OPCODES.add(72 /* Debugger */, function (vm, _ref) {
APPEND_OPCODES.add(71 /* Debugger */, function (vm, _ref) {
var _symbols = _ref.op1,

@@ -70,0 +70,0 @@ _evalInfo = _ref.op2;

@@ -15,32 +15,32 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }

import { APPEND_OPCODES } from '../../opcodes';
APPEND_OPCODES.add(24 /* Text */, function (vm, _ref) {
APPEND_OPCODES.add(23 /* Text */, function (vm, _ref) {
var text = _ref.op1;
vm.stack().appendText(vm.constants.getString(text));
vm.elements().appendText(vm.constants.getString(text));
});
APPEND_OPCODES.add(25 /* Comment */, function (vm, _ref2) {
APPEND_OPCODES.add(24 /* Comment */, function (vm, _ref2) {
var text = _ref2.op1;
vm.stack().appendComment(vm.constants.getString(text));
vm.elements().appendComment(vm.constants.getString(text));
});
APPEND_OPCODES.add(27 /* OpenElement */, function (vm, _ref3) {
APPEND_OPCODES.add(26 /* OpenElement */, function (vm, _ref3) {
var tag = _ref3.op1;
vm.stack().openElement(vm.constants.getString(tag));
vm.elements().openElement(vm.constants.getString(tag));
});
APPEND_OPCODES.add(28 /* OpenElementWithOperations */, function (vm, _ref4) {
APPEND_OPCODES.add(27 /* OpenElementWithOperations */, function (vm, _ref4) {
var tag = _ref4.op1;
var tagName = vm.constants.getString(tag);
var operations = vm.evalStack.pop();
vm.stack().openElement(tagName, operations);
var operations = vm.stack.pop();
vm.elements().openElement(tagName, operations);
});
APPEND_OPCODES.add(29 /* OpenDynamicElement */, function (vm) {
var operations = vm.evalStack.pop();
var tagName = vm.evalStack.pop().value();
vm.stack().openElement(tagName, operations);
APPEND_OPCODES.add(28 /* OpenDynamicElement */, function (vm) {
var operations = vm.stack.pop();
var tagName = vm.stack.pop().value();
vm.elements().openElement(tagName, operations);
});
APPEND_OPCODES.add(36 /* PushRemoteElement */, function (vm) {
var elementRef = vm.evalStack.pop();
var nextSiblingRef = vm.evalStack.pop();
APPEND_OPCODES.add(35 /* PushRemoteElement */, function (vm) {
var elementRef = vm.stack.pop();
var nextSiblingRef = vm.stack.pop();
var element = void 0;

@@ -62,6 +62,6 @@ var nextSibling = void 0;

}
vm.stack().pushRemoteElement(element, nextSibling);
vm.elements().pushRemoteElement(element, nextSibling);
});
APPEND_OPCODES.add(37 /* PopRemoteElement */, function (vm) {
return vm.stack().popRemoteElement();
APPEND_OPCODES.add(36 /* PopRemoteElement */, function (vm) {
return vm.elements().popRemoteElement();
});

@@ -297,4 +297,4 @@

}();
APPEND_OPCODES.add(33 /* FlushElement */, function (vm) {
var stack = vm.stack();
APPEND_OPCODES.add(32 /* FlushElement */, function (vm) {
var stack = vm.elements();
var action = 'FlushElementOpcode#evaluate';

@@ -304,6 +304,6 @@ stack.expectOperations(action).flush(stack.expectConstructing(action), vm);

});
APPEND_OPCODES.add(34 /* CloseElement */, function (vm) {
return vm.stack().closeElement();
APPEND_OPCODES.add(33 /* CloseElement */, function (vm) {
return vm.elements().closeElement();
});
APPEND_OPCODES.add(30 /* StaticAttr */, function (vm, _ref5) {
APPEND_OPCODES.add(29 /* StaticAttr */, function (vm, _ref5) {
var _name = _ref5.op1,

@@ -317,18 +317,18 @@ _value = _ref5.op2,

var namespace = vm.constants.getString(_namespace);
vm.stack().setStaticAttributeNS(namespace, name, value);
vm.elements().setStaticAttributeNS(namespace, name, value);
} else {
vm.stack().setStaticAttribute(name, value);
vm.elements().setStaticAttribute(name, value);
}
});
APPEND_OPCODES.add(35 /* Modifier */, function (vm, _ref6) {
APPEND_OPCODES.add(34 /* Modifier */, function (vm, _ref6) {
var _manager = _ref6.op1;
var manager = vm.constants.getOther(_manager);
var stack = vm.evalStack;
var stack = vm.stack;
var args = stack.pop();
var tag = args.tag;
var _vm$stack = vm.stack(),
element = _vm$stack.constructing,
updateOperations = _vm$stack.updateOperations;
var _vm$elements = vm.elements(),
element = _vm$elements.constructing,
updateOperations = _vm$elements.updateOperations;

@@ -469,3 +469,3 @@ var dynamicScope = vm.dynamicScope();

}
APPEND_OPCODES.add(32 /* DynamicAttrNS */, function (vm, _ref7) {
APPEND_OPCODES.add(31 /* DynamicAttrNS */, function (vm, _ref7) {
var _name = _ref7.op1,

@@ -477,6 +477,6 @@ _namespace = _ref7.op2,

var namespace = vm.constants.getString(_namespace);
var reference = vm.evalStack.pop();
vm.stack().setDynamicAttributeNS(namespace, name, reference, !!trusting);
var reference = vm.stack.pop();
vm.elements().setDynamicAttributeNS(namespace, name, reference, !!trusting);
});
APPEND_OPCODES.add(31 /* DynamicAttr */, function (vm, _ref8) {
APPEND_OPCODES.add(30 /* DynamicAttr */, function (vm, _ref8) {
var _name = _ref8.op1,

@@ -486,4 +486,4 @@ trusting = _ref8.op2;

var name = vm.constants.getString(_name);
var reference = vm.evalStack.pop();
vm.stack().setDynamicAttribute(name, reference, !!trusting);
var reference = vm.stack.pop();
vm.elements().setDynamicAttribute(name, reference, !!trusting);
});

@@ -522,2 +522,2 @@ export var PatchElementOpcode = function (_UpdatingOpcode2) {

}(UpdatingOpcode);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsQUFBTyxTQUFjLEFBQWMsQUFBRSxzQkFBTSxBQUFlLEFBQUM7QUFNM0QsQUFBTyxTQUErQixBQUFNLFFBQUUsQUFBTSxBQUFFLGNBQU0sQUFBZSxBQUFDO0FBQzVFLEFBQU8sU0FDTCxBQUFlLGlCQUdmLEFBQWMsZ0JBSWQsQUFBYSxlQUNiLEFBQU8sV0FBSSxBQUFnQixrQkFDM0IsQUFBVSxBQUNYLGtCQUFNLEFBQW9CLEFBQUM7QUFFNUIsQUFBTyxTQUFFLEFBQWMsZ0JBQUUsQUFBa0IsQUFBRSwwQkFBTSxBQUFrQixBQUFDO0FBR3RFLEFBQU8sU0FBRSxBQUFNLEFBQUUsY0FBTSxBQUFNLEFBQUM7QUFDOUIsQUFBTyxTQUFFLEFBQWMsQUFBWSxzQkFBTSxBQUFlLEFBQUM7QUFFekQsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFPLFlBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFJLEFBQUUsWUFBWCxBQUFHOztBQUNwQyxBQUFFLE9BQUMsQUFBSyxBQUFFLFFBQUMsQUFBVSxXQUFDLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDdEQ7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQVUsZUFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUksQUFBRSxhQUFYLEFBQUc7O0FBQ3ZDLEFBQUUsT0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFhLGNBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQyxBQUN6RDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUcsQUFBRSxZQUFWLEFBQUc7O0FBQzNDLEFBQUUsT0FBQyxBQUFL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QUFBQztBQUN6QixBQUFJLGVBQUMsQUFBUyxZQUFHLEFBQVMsQUFBQyxBQUM3Qjs7QUFBQzs7aUNBRUQsQUFBUSw2QkFBQyxBQUFjO0FBQ3JCLEFBQUksYUFBQyxBQUFTLFVBQUMsQUFBSyxNQUFDLEFBQUUsR0FBQyxBQUFHLEFBQUMsQUFBQyxBQUMvQjtBQUFDOztpQ0FFRCxBQUFNO0FBQ0osQUFBSSxZQUFFLEFBQUs7WUFBRSxBQUFJLE9BQWdCLEFBQUksQUFBQztZQUFuQixBQUFTLEFBQUU7O0FBRTlCLEFBQU07QUFDSixBQUFJLGtCQUFFLEFBQUs7QUFDWCxBQUFJO0FBQ0osQUFBTyxxQkFBRSxBQUFTLFVBQUMsQUFBTSxBQUFFLEFBQzVCLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRjs7O0VBeEJ1QyxBQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNLCBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgQXJndW1lbnRzIH0gZnJvbSAnLi4vLi4vdm0vYXJndW1lbnRzJztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuLi8uLi9kb20vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGSVhfUkVJRklDQVRJT04gfSBmcm9tICcuLi8uLi9kb20vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEZJWE1FLCBPcHRpb24sIE9wYXF1ZSwgRGljdCwgdW53cmFwLCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENhY2hlZFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlLFxuICBWZXJzaW9uZWRSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZUNhY2hlLFxuICBUYWcsXG4gIFJldmlzaW9uLFxuICBQYXRoUmVmZXJlbmNlLFxuICBjb21iaW5lVGFnZ2VkLFxuICBpc0NvbnN0IGFzIGlzQ29uc3RSZWZlcmVuY2UsXG4gIGlzTW9kaWZpZWRcbn0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE1vZGlmaWVyTWFuYWdlciB9IGZyb20gJy4uLy4uL21vZGlmaWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTlVMTF9SRUZFUkVOQ0UsIFByaW1pdGl2ZVJlZmVyZW5jZSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgQXR0cmlidXRlTWFuYWdlciB9IGZyb20gJy4uLy4uL2RvbS9hdHRyaWJ1dGUtbWFuYWdlcnMnO1xuaW1wb3J0IHsgRWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCB7IEFzc2VydCB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5UZXh0LCAodm0sIHsgb3AxOiB0ZXh0IH0pID0+IHtcbiAgdm0uc3RhY2soKS5hcHBlbmRUZXh0KHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGV4dCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db21tZW50LCAodm0sIHsgb3AxOiB0ZXh0IH0pID0+IHtcbiAgdm0uc3RhY2soKS5hcHBlbmRDb21tZW50KHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGV4dCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5PcGVuRWxlbWVudCwgKHZtLCB7IG9wMTogdGFnIH0pID0+IHtcbiAgdm0uc3RhY2soKS5vcGVuRWxlbWVudCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRhZykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5PcGVuRWxlbWVudFdpdGhPcGVyYXRpb25zLCAodm0sIHsgb3AxOiB0YWcgfSkgPT4ge1xuICBsZXQgdGFnTmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGFnKTtcbiAgbGV0IG9wZXJhdGlvbnMgPSB2bS5ldmFsU3RhY2sucG9wPEVsZW1lbnRPcGVyYXRpb25zPigpO1xuICB2bS5zdGFjaygpLm9wZW5FbGVtZW50KHRhZ05hbWUsIG9wZXJhdGlvbnMpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5PcGVuRHluYW1pY0VsZW1lbnQsIHZtID0+IHtcbiAgbGV0IG9wZXJhdGlvbnMgPSB2bS5ldmFsU3RhY2sucG9wPEVsZW1lbnRPcGVyYXRpb25zPigpO1xuICBsZXQgdGFnTmFtZSA9IHZtLmV2YWxTdGFjay5wb3A8UmVmZXJlbmNlPHN0cmluZz4+KCkudmFsdWUoKTtcbiAgdm0uc3RhY2soKS5vcGVuRWxlbWVudCh0YWdOYW1lLCBvcGVyYXRpb25zKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaFJlbW90ZUVsZW1lbnQsIHZtID0+IHtcbiAgbGV0IGVsZW1lbnRSZWYgPSB2bS5ldmFsU3RhY2sucG9wPFJlZmVyZW5jZTxTaW1wbGUuRWxlbWVudD4+KCk7XG4gIGxldCBuZXh0U2libGluZ1JlZiA9IHZtLmV2YWxTdGFjay5wb3A8UmVmZXJlbmNlPE9wdGlvbjxTaW1wbGUuTm9kZT4+PigpO1xuXG4gIGxldCBlbGVtZW50OiBTaW1wbGUuRWxlbWVudDtcbiAgbGV0IG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+O1xuXG4gIGlmIChpc0NvbnN0UmVmZXJlbmNlKGVsZW1lbnRSZWYpKSB7XG4gICAgZWxlbWVudCA9IGVsZW1lbnRSZWYudmFsdWUoKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUoZWxlbWVudFJlZik7XG4gICAgZWxlbWVudCA9IGNhY2hlLnBlZWsoKTtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxuXG4gIGlmIChpc0NvbnN0UmVmZXJlbmNlKG5leHRTaWJsaW5nUmVmKSkge1xuICAgIG5leHRTaWJsaW5nID0gbmV4dFNpYmxpbmdSZWYudmFsdWUoKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUobmV4dFNpYmxpbmdSZWYpO1xuICAgIG5leHRTaWJsaW5nID0gY2FjaGUucGVlaygpO1xuICAgIHZtLnVwZGF0ZVdpdGgobmV3IEFzc2VydChjYWNoZSkpO1xuICB9XG5cbiAgdm0uc3RhY2soKS5wdXNoUmVtb3RlRWxlbWVudChlbGVtZW50LCBuZXh0U2libGluZyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcFJlbW90ZUVsZW1lbnQsIHZtID0+IHZtLnN0YWNrKCkucG9wUmVtb3RlRWxlbWVudCgpKTtcblxuY2xhc3MgQ2xhc3NMaXN0IHtcbiAgcHJpdmF0ZSBsaXN0OiBPcHRpb248UmVmZXJlbmNlPHN0cmluZz5bXT4gPSBudWxsO1xuICBwcml2YXRlIGlzQ29uc3QgPSB0cnVlO1xuXG4gIGFwcGVuZChyZWZlcmVuY2U6IFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgbGlzdCwgaXNDb25zdCB9ID0gdGhpcztcblxuICAgIGlmIChsaXN0ID09PSBudWxsKSBsaXN0ID0gdGhpcy5saXN0ID0gW107XG5cbiAgICBsaXN0LnB1c2gocmVmZXJlbmNlKTtcbiAgICB0aGlzLmlzQ29uc3QgPSBpc0NvbnN0ICYmIGlzQ29uc3RSZWZlcmVuY2UocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHRvUmVmZXJlbmNlKCk6IFJlZmVyZW5jZTxPcHRpb248c3RyaW5nPj4ge1xuICAgIGxldCB7IGxpc3QsIGlzQ29uc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWxpc3QpIHJldHVybiBOVUxMX1JFRkVSRU5DRTtcblxuICAgIGlmIChpc0NvbnN0KSByZXR1cm4gUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh0b0NsYXNzTmFtZShsaXN0KSk7XG5cbiAgICByZXR1cm4gbmV3IENsYXNzTGlzdFJlZmVyZW5jZShsaXN0KTtcbiAgfVxuXG59XG5cbmNsYXNzIENsYXNzTGlzdFJlZmVyZW5jZSBleHRlbmRzIENhY2hlZFJlZmVyZW5jZTxPcHRpb248c3RyaW5nPj4ge1xuICBwdWJsaWMgdGFnOiBUYWc7XG4gIHByaXZhdGUgbGlzdDogUmVmZXJlbmNlPHN0cmluZz5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gY29tYmluZVRhZ2dlZChsaXN0KTtcbiAgICB0aGlzLmxpc3QgPSBsaXN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGUoKTogT3B0aW9uPHN0cmluZz4ge1xuICAgIHJldHVybiB0b0NsYXNzTmFtZSh0aGlzLmxpc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ2xhc3NOYW1lKGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10pOiBPcHRpb248c3RyaW5nPiB7XG4gIGxldCByZXQ6IE9wYXF1ZVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHZhbHVlOiBGSVhNRTxPcGFxdWUsICd1c2UgT3BhcXVlIGFuZCBub3JtYWxpemUnPiA9IGxpc3RbaV0udmFsdWUoKTtcbiAgICBpZiAodmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHJldC5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiAocmV0Lmxlbmd0aCA9PT0gMCkgPyBudWxsIDogcmV0LmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbXBsZUVsZW1lbnRPcGVyYXRpb25zIGltcGxlbWVudHMgRWxlbWVudE9wZXJhdGlvbnMge1xuICBwcml2YXRlIG9wY29kZXM6IE9wdGlvbjxVcGRhdGluZ09wY29kZVtdPiA9IG51bGw7XG4gIHByaXZhdGUgY2xhc3NMaXN0OiBPcHRpb248Q2xhc3NMaXN0PiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFJlZmVyZW5jZTxzdHJpbmc+LCBpc1RydXN0aW5nOiBib29sZWFuKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MocmVmZXJlbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZyk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogU2ltcGxlLk5hbWVzcGFjZSwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcsIG5hbWVzcGFjZSk7XG4gICAgbGV0IG5zQXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlLCBuYW1lc3BhY2UpO1xuXG4gICAgdGhpcy5hZGRBdHRyaWJ1dGUobnNBdHRyaWJ1dGUpO1xuICB9XG5cbiAgZmx1c2goZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIHZtOiBWTSkge1xuICAgIGxldCB7IGVudiB9ID0gdm07XG4gICAgbGV0IHsgb3Bjb2RlcywgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IG9wY29kZXMgJiYgaSA8IG9wY29kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2Rlc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSBlbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsICdjbGFzcycsIGZhbHNlKTtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCAnY2xhc3MnLCBjbGFzc0xpc3QudG9SZWZlcmVuY2UoKSk7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlcyA9IG51bGw7XG4gICAgdGhpcy5jbGFzc0xpc3QgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDbGFzcyhyZWZlcmVuY2U6IFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjbGFzc0xpc3QpIHtcbiAgICAgIGNsYXNzTGlzdCA9IHRoaXMuY2xhc3NMaXN0ID0gbmV3IENsYXNzTGlzdCgpO1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hcHBlbmQocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlKSB7XG4gICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaCh0aGlzLmVudik7XG5cbiAgICBpZiAob3Bjb2RlKSB7XG4gICAgICBsZXQgeyBvcGNvZGVzIH0gPSB0aGlzO1xuXG4gICAgICBpZiAoIW9wY29kZXMpIHtcbiAgICAgICAgb3Bjb2RlcyA9IHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBvcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEVsZW1lbnRPcGVyYXRpb25zIGltcGxlbWVudHMgRWxlbWVudE9wZXJhdGlvbnMge1xuICBwcml2YXRlIGF0dHJpYnV0ZU5hbWVzOiBPcHRpb248c3RyaW5nW10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBhdHRyaWJ1dGVzOiBPcHRpb248QXR0cmlidXRlW10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBjbGFzc0xpc3Q6IE9wdGlvbjxDbGFzc0xpc3Q+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgIHRoaXMuYWRkQ2xhc3MoUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2YWx1ZSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5ldyBTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGVOUyhlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbmV3IFN0YXRpY0F0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKHJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZyk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgbmFtZSwgcmVmZXJlbmNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBhZGREeW5hbWljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogU2ltcGxlLk5hbWVzcGFjZSwgbmFtZTogc3RyaW5nLCByZWZlcmVuY2U6IFBhdGhSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbGV0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgbmFtZSwgaXNUcnVzdGluZywgbmFtZXNwYWNlKTtcbiAgICAgIGxldCBuc0F0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSwgbmFtZXNwYWNlKTtcblxuICAgICAgdGhpcy5hZGRBdHRyaWJ1dGUobmFtZSwgbnNBdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pIHtcbiAgICBsZXQgeyBlbnYgfSA9IHRoaXM7XG4gICAgbGV0IHsgYXR0cmlidXRlcywgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGF0dHJpYnV0ZXMgJiYgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGVzW2ldLmZsdXNoKGVudik7XG5cbiAgICAgIGlmIChvcGNvZGUpIHtcbiAgICAgICAgdm0udXBkYXRlV2l0aChvcGNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgJ2NsYXNzJywgY2xhc3NMaXN0LnRvUmVmZXJlbmNlKCkpO1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEFkZEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYXR0cmlidXRlTmFtZXMgfHwgdGhpcy5hdHRyaWJ1dGVOYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MocmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4pIHtcbiAgICBsZXQgeyBjbGFzc0xpc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0ID0gdGhpcy5jbGFzc0xpc3QgPSBuZXcgQ2xhc3NMaXN0KCk7XG4gICAgfVxuXG4gICAgY2xhc3NMaXN0LmFwcGVuZChyZWZlcmVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSkge1xuICAgIGxldCB7IGF0dHJpYnV0ZU5hbWVzLCBhdHRyaWJ1dGVzIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFhdHRyaWJ1dGVOYW1lcykge1xuICAgICAgYXR0cmlidXRlTmFtZXMgPSB0aGlzLmF0dHJpYnV0ZU5hbWVzID0gW107XG4gICAgICBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgfVxuXG4gICAgYXR0cmlidXRlTmFtZXMucHVzaChuYW1lKTtcbiAgICB1bndyYXAoYXR0cmlidXRlcykucHVzaChhdHRyaWJ1dGUpO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5GbHVzaEVsZW1lbnQsIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2soKTtcblxuICBsZXQgYWN0aW9uID0gJ0ZsdXNoRWxlbWVudE9wY29kZSNldmFsdWF0ZSc7XG4gIHN0YWNrLmV4cGVjdE9wZXJhdGlvbnMoYWN0aW9uKS5mbHVzaChzdGFjay5leHBlY3RDb25zdHJ1Y3RpbmcoYWN0aW9uKSwgdm0pO1xuICBzdGFjay5mbHVzaEVsZW1lbnQoKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ2xvc2VFbGVtZW50LCB2bSA9PiB2bS5zdGFjaygpLmNsb3NlRWxlbWVudCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlN0YXRpY0F0dHIsICh2bSwgeyBvcDE6IF9uYW1lLCBvcDI6IF92YWx1ZSwgb3AzOiBfbmFtZXNwYWNlIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IHZhbHVlID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfdmFsdWUpO1xuXG4gIGlmIChfbmFtZXNwYWNlKSB7XG4gICAgbGV0IG5hbWVzcGFjZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWVzcGFjZSk7XG4gICAgdm0uc3RhY2soKS5zZXRTdGF0aWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2bS5zdGFjaygpLnNldFN0YXRpY0F0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuTW9kaWZpZXIsICh2bSwgeyBvcDE6IF9tYW5hZ2VyIH0pID0+IHtcbiAgbGV0IG1hbmFnZXIgPSB2bS5jb25zdGFudHMuZ2V0T3RoZXI8TW9kaWZpZXJNYW5hZ2VyPE9wYXF1ZT4+KF9tYW5hZ2VyKTtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG4gIGxldCB0YWcgPSBhcmdzLnRhZztcbiAgbGV0IHsgY29uc3RydWN0aW5nOiBlbGVtZW50LCB1cGRhdGVPcGVyYXRpb25zIH0gPSB2bS5zdGFjaygpO1xuICBsZXQgZHluYW1pY1Njb3BlID0gdm0uZHluYW1pY1Njb3BlKCk7XG4gIGxldCBtb2RpZmllciA9IG1hbmFnZXIuY3JlYXRlKGVsZW1lbnQgYXMgRklYX1JFSUZJQ0FUSU9OPEVsZW1lbnQ+LCBhcmdzLCBkeW5hbWljU2NvcGUsIHVwZGF0ZU9wZXJhdGlvbnMpO1xuXG4gIGFyZ3MuY2xlYXIoKTtcblxuICB2bS5lbnYuc2NoZWR1bGVJbnN0YWxsTW9kaWZpZXIobW9kaWZpZXIsIG1hbmFnZXIpO1xuICBsZXQgZGVzdHJ1Y3RvciA9IG1hbmFnZXIuZ2V0RGVzdHJ1Y3Rvcihtb2RpZmllcik7XG5cbiAgaWYgKGRlc3RydWN0b3IpIHtcbiAgICB2bS5uZXdEZXN0cm95YWJsZShkZXN0cnVjdG9yKTtcbiAgfVxuXG4gIHZtLnVwZGF0ZVdpdGgobmV3IFVwZGF0ZU1vZGlmaWVyT3Bjb2RlKFxuICAgIHRhZyxcbiAgICBtYW5hZ2VyLFxuICAgIG1vZGlmaWVyXG4gICkpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVNb2RpZmllck9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInVwZGF0ZS1tb2RpZmllclwiO1xuICBwcml2YXRlIGxhc3RVcGRhdGVkOiBSZXZpc2lvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFnOiBUYWcsXG4gICAgcHJpdmF0ZSBtYW5hZ2VyOiBNb2RpZmllck1hbmFnZXI8T3BhcXVlPixcbiAgICBwcml2YXRlIG1vZGlmaWVyOiBPcGFxdWVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxhc3RVcGRhdGVkID0gdGFnLnZhbHVlKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IG1hbmFnZXIsIG1vZGlmaWVyLCB0YWcsIGxhc3RVcGRhdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF0YWcudmFsaWRhdGUobGFzdFVwZGF0ZWQpKSB7XG4gICAgICB2bS5lbnYuc2NoZWR1bGVVcGRhdGVNb2RpZmllcihtb2RpZmllciwgbWFuYWdlcik7XG4gICAgICB0aGlzLmxhc3RVcGRhdGVkID0gdGFnLnZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT47XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0aWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB2YWx1ZTogc3RyaW5nLFxuICAgIHByaXZhdGUgbmFtZXNwYWNlPzogc3RyaW5nXG4gICkge31cblxuICBmbHVzaChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCB0aGlzLm5hbWUsIHRoaXMudmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHluYW1pY0F0dHJpYnV0ZSBpbXBsZW1lbnRzIEF0dHJpYnV0ZSAge1xuICBwcml2YXRlIGNhY2hlOiBPcHRpb248UmVmZXJlbmNlQ2FjaGU8T3BhcXVlPj4gPSBudWxsO1xuXG4gIHB1YmxpYyB0YWc6IFRhZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LFxuICAgIHByaXZhdGUgYXR0cmlidXRlTWFuYWdlcjogQXR0cmlidXRlTWFuYWdlcixcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBwcml2YXRlIG5hbWVzcGFjZT86IFNpbXBsZS5OYW1lc3BhY2VcbiAgKSB7XG4gICAgdGhpcy50YWcgPSByZWZlcmVuY2UudGFnO1xuICB9XG5cbiAgcGF0Y2goZW52OiBFbnZpcm9ubWVudCkge1xuICAgIGxldCB7IGVsZW1lbnQsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IHZhbHVlID0gZXhwZWN0KGNhY2hlLCAnbXVzdCBwYXRjaCBhZnRlciBmbHVzaCcpLnJldmFsaWRhdGUoKTtcblxuICAgIGlmIChpc01vZGlmaWVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQgYXMgRklYTUU8RWxlbWVudCwgJ25lZWRzIHRvIGJlIHJlaWZpZWQgcHJvcGVybHknPiwgdmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgbGV0IHsgcmVmZXJlbmNlLCBlbGVtZW50IH0gPSB0aGlzO1xuXG4gICAgaWYgKGlzQ29uc3RSZWZlcmVuY2UocmVmZXJlbmNlKSkge1xuICAgICAgbGV0IHZhbHVlID0gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgICB0aGlzLmF0dHJpYnV0ZU1hbmFnZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLmNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG4gICAgICBsZXQgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgICB0aGlzLmF0dHJpYnV0ZU1hbmFnZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgIHJldHVybiBuZXcgUGF0Y2hFbGVtZW50T3Bjb2RlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBEaWN0PE9wdGlvbjxzdHJpbmc+PiB7XG4gICAgbGV0IHsgZWxlbWVudCwgbmFtZXNwYWNlLCBuYW1lLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCBmb3JtYXR0ZWRFbGVtZW50ID0gZm9ybWF0RWxlbWVudChlbGVtZW50KTtcbiAgICBsZXQgbGFzdFZhbHVlID0gZXhwZWN0KGNhY2hlLCAnbXVzdCBzZXJpYWxpemUgYWZ0ZXIgZmx1c2gnKS5wZWVrKCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogZm9ybWF0dGVkRWxlbWVudCxcbiAgICAgICAgdHlwZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGFzdFZhbHVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50OiBmb3JtYXR0ZWRFbGVtZW50LFxuICAgICAgdHlwZTogJ2F0dHJpYnV0ZScsXG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG5hbWVzcGFjZSxcbiAgICAgIG5hbWUsXG4gICAgICBsYXN0VmFsdWVcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYDwke2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpfSAvPmApO1xufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0F0dHJOUywgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogX25hbWVzcGFjZSwgb3AzOiB0cnVzdGluZyB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCBuYW1lc3BhY2UgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lc3BhY2UpO1xuICBsZXQgcmVmZXJlbmNlID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgdm0uc3RhY2soKS5zZXREeW5hbWljQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCByZWZlcmVuY2UsICEhdHJ1c3RpbmcpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EeW5hbWljQXR0ciwgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogdHJ1c3RpbmcgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgcmVmZXJlbmNlID0gdm0uZXZhbFN0YWNrLnBvcDxWZXJzaW9uZWRSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgdm0uc3RhY2soKS5zZXREeW5hbWljQXR0cmlidXRlKG5hbWUsIHJlZmVyZW5jZSwgISF0cnVzdGluZyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFBhdGNoRWxlbWVudE9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInBhdGNoLWVsZW1lbnRcIjtcblxuICBwcml2YXRlIG9wZXJhdGlvbjogRHluYW1pY0F0dHJpYnV0ZTtcblxuICBjb25zdHJ1Y3RvcihvcGVyYXRpb246IER5bmFtaWNBdHRyaWJ1dGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gb3BlcmF0aW9uLnRhZztcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdGhpcy5vcGVyYXRpb24ucGF0Y2godm0uZW52KTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgeyBfZ3VpZCwgdHlwZSwgb3BlcmF0aW9uIH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGRldGFpbHM6IG9wZXJhdGlvbi50b0pTT04oKVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsQUFBTyxTQUFjLEFBQWMsQUFBRSxzQkFBTSxBQUFlLEFBQUM7QUFNM0QsQUFBTyxTQUErQixBQUFNLFFBQUUsQUFBTSxBQUFFLGNBQU0sQUFBZSxBQUFDO0FBQzVFLEFBQU8sU0FDTCxBQUFlLGlCQUdmLEFBQWMsZ0JBSWQsQUFBYSxlQUNiLEFBQU8sV0FBSSxBQUFnQixrQkFDM0IsQUFBVSxBQUNYLGtCQUFNLEFBQW9CLEFBQUM7QUFFNUIsQUFBTyxTQUFFLEFBQWMsZ0JBQUUsQUFBa0IsQUFBRSwwQkFBTSxBQUFrQixBQUFDO0FBR3RFLEFBQU8sU0FBRSxBQUFNLEFBQUUsY0FBTSxBQUFNLEFBQUM7QUFDOUIsQUFBTyxTQUFFLEFBQWMsQUFBWSxzQkFBTSxBQUFlLEFBQUM7QUFFekQsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFPLFlBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFJLEFBQUUsWUFBWCxBQUFHOztBQUNwQyxBQUFFLE9BQUMsQUFBUSxBQUFFLFdBQUMsQUFBVSxXQUFDLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDekQ7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQVUsZUFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUksQUFBRSxhQUFYLEFBQUc7O0FBQ3ZDLEFBQUUsT0FBQyxBQUFRLEFBQUUsV0FBQyxBQUFhLGNBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQyxBQUM1RDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUcsQUFBRSxZQUFWLEFBQUc7O0FBQzNDLEFBQUUsT0FBQyxBQUFRLEFBQUUsV0FBQyxBQUFXLFlBQUMsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBRyxBQUFDLEFBQUMsQUFBQyxBQUN6RDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBNEIsaUNBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFHLEFBQUUsWUFBVixBQUFHOztBQUN6RCxRQUFJLEFBQU8sVUFBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFHLEFBQUMsQUFBQztBQUMxQyxRQUFJLEFBQVUsYUFBRyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBcUIsQUFBQztBQUNuRCxBQUFFLE9BQUMsQUFBUSxBQUFFLFdBQUMsQUFBVyxZQUFDLEFBQU8sU0FBRSxBQUFVLEFBQUMsQUFBQyxBQUNqRDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBcUIsMEJBQUUsQUFBRTtBQUMxQyxRQUFJLEFBQVUsYUFBRyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBcUIsQUFBQztBQUNuRCxRQUFJLEFBQU8sVUFBRyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBcUIsTUFBQyxBQUFLLEFBQUUsQUFBQztBQUN4RCxBQUFFLE9BQUMsQUFBUSxBQUFFLFdBQUMsQUFBVyxZQUFDLEFBQU8sU0FBRSxBQUFVLEFBQUMsQUFBQyxBQUNqRDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBb0IseUJBQUUsQUFBRTtBQUN6QyxRQUFJLEFBQVUsYUFBRyxBQUFFLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBNkIsQUFBQztBQUMzRCxRQUFJLEFBQWMsaUJBQUcsQUFBRSxHQUFDLEFBQUssTUFBQyxBQUFHLEFBQWtDLEFBQUM7QUFFcEUsUUFBSSxBQUF1QixBQUFDO0FBQzVCLFFBQUksQUFBZ0MsQUFBQztBQUVyQyxBQUFFLEFBQUMsUUFBQyxBQUFnQixpQkFBQyxBQUFVLEFBQUMsQUFBQyxhQUFDLEFBQUM7QUFDakMsQUFBTyxrQkFBRyxBQUFVLFdBQUMsQUFBSyxBQUFFLEFBQUMsQUFDL0I7QUFBQyxBQUFDLEFBQUksV0FBQyxBQUFDO0FBQ04sWUFBSSxBQUFLLFFBQUcsSUFBSSxBQUFjLGVBQUMsQUFBVSxBQUFDLEFBQUM7QUFDM0MsQUFBTyxrQkFBRyxBQUFLLE1BQUMsQUFBSSxBQUFFLEFBQUM7QUFDdkIsQUFBRSxXQUFDLEFBQVUsV0FBQyxJQUFJLEFBQU0sT0FBQyxBQUFLLEFBQUMsQUFBQyxBQUFDLEFBQ25DO0FBQUM7QUFFRCxBQUFFLEFBQUMsUUFBQyxBQUFnQixpQkFBQyxBQUFjLEFBQUMsQUFBQyxpQkFBQyxBQUFDO0FBQ3JDLEFBQVcsc0JBQUcsQUFBYyxlQUFDLEFBQUssQUFBRSxBQUFDLEFBQ3ZDO0FBQUMsQUFBQyxBQUFJLFdBQUMsQUFBQztBQUNOLFlBQUksQUFBSyxTQUFHLElBQUksQUFBYyxlQUFDLEFBQWMsQUFBQyxBQUFDO0FBQy9DLEFBQVcsc0JBQUcsQUFBSyxPQUFDLEFBQUksQUFBRSxBQUFDO0FBQzNCLEFBQUUsV0FBQyxBQUFVLFdBQUMsSUFBSSxBQUFNLE9BQUMsQUFBSyxBQUFDLEFBQUMsQUFBQyxBQUNuQztBQUFDO0FBRUQsQUFBRSxPQUFDLEFBQVEsQUFBRSxXQUFDLEFBQWlCLGtCQUFDLEFBQU8sU0FBRSxBQUFXLEFBQUMsQUFBQyxBQUN4RDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBbUI7QUFBRSxBQUFFLFdBQUksQUFBRSxHQUFDLEFBQVEsQUFBRSxXQUFDLEFBQWdCLEFBQUUsQUFBQyxBQUFDLEFBRWhGOzs7O0FBQUE7OztBQUNVLGFBQUksT0FBZ0MsQUFBSSxBQUFDO0FBQ3pDLGFBQU8sVUFBRyxBQUFJLEFBQUMsQUFxQnpCO0FBQUM7O3dCQW5CQyxBQUFNLHlCQUFDLEFBQTRCO0FBQ2pDLEFBQUksWUFBRSxBQUFJLE9BQWMsQUFBSSxBQUFDO1lBQWpCLEFBQU8sQUFBRTs7QUFFckIsQUFBRSxBQUFDLFlBQUMsQUFBSSxTQUFLLEFBQUksQUFBQyxNQUFDLEFBQUksT0FBRyxBQUFJLEtBQUMsQUFBSSxPQUFHLEFBQUUsQUFBQztBQUV6QyxBQUFJLGFBQUMsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDO0FBQ3JCLEFBQUksYUFBQyxBQUFPLFVBQUcsQUFBTyxXQUFJLEFBQWdCLGlCQUFDLEFBQVMsQUFBQyxBQUFDLEFBQ3hEO0FBQUM7O3dCQUVELEFBQVc7QUFDVCxBQUFJLFlBQUUsQUFBSSxPQUFjLEFBQUksQUFBQztZQUFqQixBQUFPLEFBQUU7O0FBRXJCLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBSSxBQUFDLE1BQUMsQUFBTSxPQUFDLEFBQWMsQUFBQztBQUVqQyxBQUFFLEFBQUMsWUFBQyxBQUFPLEFBQUMsU0FBQyxBQUFNLE9BQUMsQUFBa0IsbUJBQUMsQUFBTSxPQUFDLEFBQVcsWUFBQyxBQUFJLEFBQUMsQUFBQyxBQUFDO0FBRWpFLEFBQU0sZUFBQyxJQUFJLEFBQWtCLG1CQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3RDO0FBQUMsQUFFRixBQUVEOzs7OztJQUF5Qjs7O0FBSXZCLGdDQUFZLEFBQXlCOzs7cURBQ25DLEFBQUssQUFBRSxBQUFDOztBQUhGLGNBQUksT0FBd0IsQUFBRSxBQUFDO0FBSXJDLEFBQUksY0FBQyxBQUFHLE1BQUcsQUFBYSxjQUFDLEFBQUksQUFBQyxBQUFDO0FBQy9CLEFBQUksY0FBQyxBQUFJLE9BQUcsQUFBSSxBQUFDLEFBQ25COztBQUFDOztpQ0FFUyxBQUFPO0FBQ2YsQUFBTSxlQUFDLEFBQVcsWUFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUMsQUFDaEM7QUFBQyxBQUNGOzs7RUFiZ0MsQUFBK0I7O0FBZWhFLHFCQUFxQixBQUF5QjtBQUM1QyxRQUFJLEFBQUcsTUFBYSxBQUFFLEFBQUM7QUFFdkIsQUFBRyxBQUFDLFNBQUMsSUFBSSxBQUFDLElBQUcsQUFBQyxHQUFFLEFBQUMsSUFBRyxBQUFJLEtBQUMsQUFBTSxRQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUM7QUFDckMsWUFBSSxBQUFLLFFBQThDLEFBQUksS0FBQyxBQUFDLEFBQUMsR0FBQyxBQUFLLEFBQUUsQUFBQztBQUN2RSxBQUFFLEFBQUMsWUFBQyxBQUFLLFVBQUssQUFBSyxTQUFJLEFBQUssVUFBSyxBQUFJLFFBQUksQUFBSyxVQUFLLEFBQVMsQUFBQyxXQUFDLEFBQUcsSUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUMsQUFDaEY7QUFBQztBQUVELEFBQU0sV0FBRSxBQUFHLElBQUMsQUFBTSxXQUFLLEFBQUMsQUFBQyxDQUFsQixHQUFxQixBQUFJLE9BQUcsQUFBRyxJQUFDLEFBQUksS0FBQyxBQUFHLEFBQUMsQUFBQyxBQUNuRDtBQUFDO0FBRUQsQUFBTTtBQUlKLHFDQUFvQixBQUFnQjs7O0FBQWhCLGFBQUcsTUFBSCxBQUFHLEFBQWE7QUFINUIsYUFBTyxVQUE2QixBQUFJLEFBQUM7QUFDekMsYUFBUyxZQUFzQixBQUFJLEFBQUMsQUFHNUM7QUFBQzs7c0NBRUQsQUFBa0IsaURBQUMsQUFBdUIsU0FBRSxBQUFZLE1BQUUsQUFBYTtBQUNyRSxBQUFFLEFBQUMsWUFBQyxBQUFJLFNBQUssQUFBTyxBQUFDLFNBQUMsQUFBQztBQUNyQixBQUFJLGlCQUFDLEFBQVEsU0FBQyxBQUFrQixtQkFBQyxBQUFNLE9BQUMsQUFBSyxBQUFDLEFBQUMsQUFBQyxBQUNsRDtBQUFDLEFBQUMsQUFBSSxlQUFDLEFBQUM7QUFDTixBQUFJLGlCQUFDLEFBQUcsSUFBQyxBQUFtQixBQUFFLHNCQUFDLEFBQVksYUFBQyxBQUFPLFNBQUUsQUFBSSxNQUFFLEFBQUssQUFBQyxBQUFDLEFBQ3BFO0FBQUMsQUFDSDtBQUFDOztzQ0FFRCxBQUFvQixxREFBQyxBQUF1QixTQUFFLEFBQWlCLFdBQUUsQUFBWSxNQUFFLEFBQWE7QUFDMUYsQUFBSSxhQUFDLEFBQUcsSUFBQyxBQUFtQixBQUFFLHNCQUFDLEFBQVksYUFBQyxBQUFPLFNBQUUsQUFBSSxNQUFFLEFBQUssT0FBRSxBQUFTLEFBQUMsQUFBQyxBQUMvRTtBQUFDOztzQ0FFRCxBQUFtQixtREFBQyxBQUF1QixTQUFFLEFBQVksTUFBRSxBQUE0QixXQUFFLEFBQW1CO0FBQzFHLEFBQUUsQUFBQyxZQUFDLEFBQUksU0FBSyxBQUFPLEFBQUMsU0FBQyxBQUFDO0FBQ3JCLEFBQUksaUJBQUMsQUFBUSxTQUFDLEFBQVMsQUFBQyxBQUFDLEFBQzNCO0FBQUMsQUFBQyxBQUFJLGVBQUMsQUFBQztBQUNOLGdCQUFJLEFBQWdCLG1CQUFHLEFBQUksS0FBQyxBQUFHLElBQUMsQUFBWSxhQUFDLEFBQU8sU0FBRSxBQUFJLE1BQUUsQUFBVSxBQUFDLEFBQUM7QUFDeEUsZ0JBQUksQUFBUyxZQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBTyxTQUFFLEFBQWdCLGtCQUFFLEFBQUksTUFBRSxBQUFTLEFBQUMsQUFBQztBQUVqRixBQUFJLGlCQUFDLEFBQVksYUFBQyxBQUFTLEFBQUMsQUFBQyxBQUMvQjtBQUFDLEFBQ0g7QUFBQzs7c0NBRUQsQUFBcUIsdURBQUMsQUFBdUIsU0FBRSxBQUEyQixXQUFFLEFBQVksTUFBRSxBQUFnQyxXQUFFLEFBQW1CO0FBQzdJLFlBQUksQUFBZ0IsbUJBQUcsQUFBSSxLQUFDLEFBQUcsSUFBQyxBQUFZLGFBQUMsQUFBTyxTQUFFLEFBQUksTUFBRSxBQUFVLFlBQUUsQUFBUyxBQUFDLEFBQUM7QUFDbkYsWUFBSSxBQUFXLGNBQUcsSUFBSSxBQUFnQixpQkFBQyxBQUFPLFNBQUUsQUFBZ0Isa0JBQUUsQUFBSSxNQUFFLEFBQVMsV0FBRSxBQUFTLEFBQUMsQUFBQztBQUU5RixBQUFJLGFBQUMsQUFBWSxhQUFDLEFBQVcsQUFBQyxBQUFDLEFBQ2pDO0FBQUM7O3NDQUVELEFBQUssdUJBQUMsQUFBdUIsU0FBRSxBQUFNO0FBQ25DLEFBQUksWUFBRSxBQUFHLEFBQUUsTUFBRyxBQUFFLEFBQUMsQUFDakIsQUFBSTtZQUFFLEFBQU8sVUFBZ0IsQUFBSSxBQUFDO1lBQW5CLEFBQVMsQUFBRTs7QUFFMUIsQUFBRyxBQUFDLGFBQUMsSUFBSSxBQUFDLElBQUcsQUFBQyxHQUFFLEFBQU8sV0FBSSxBQUFDLElBQUcsQUFBTyxRQUFDLEFBQU0sUUFBRSxBQUFDLEFBQUUsS0FBRSxBQUFDO0FBQ25ELEFBQUUsZUFBQyxBQUFVLFdBQUMsQUFBTyxRQUFDLEFBQUMsQUFBQyxBQUFDLEFBQUMsQUFDNUI7QUFBQztBQUVELEFBQUUsQUFBQyxZQUFDLEFBQVMsQUFBQyxXQUFDLEFBQUM7QUFDZCxnQkFBSSxBQUFnQixtQkFBRyxBQUFHLElBQUMsQUFBWSxhQUFDLEFBQU8sU0FBRSxBQUFPLFNBQUUsQUFBSyxBQUFDLEFBQUM7QUFDakUsZ0JBQUksQUFBUyxZQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBTyxTQUFFLEFBQWdCLGtCQUFFLEFBQU8sU0FBRSxBQUFTLFVBQUMsQUFBVyxBQUFFLEFBQUMsQUFBQztBQUNsRyxnQkFBSSxBQUFNLFNBQUcsQUFBUyxVQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUVsQyxBQUFFLEFBQUMsZ0JBQUMsQUFBTSxBQUFDLFFBQUMsQUFBQztBQUNYLEFBQUUsbUJBQUMsQUFBVSxXQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ3hCO0FBQUMsQUFDSDtBQUFDO0FBRUQsQUFBSSxhQUFDLEFBQU8sVUFBRyxBQUFJLEFBQUM7QUFDcEIsQUFBSSxhQUFDLEFBQVMsWUFBRyxBQUFJLEFBQUMsQUFDeEI7QUFBQzs7c0NBRU8sQUFBUSw2QkFBQyxBQUE0QjtBQUMzQyxBQUFJLFlBQUUsQUFBUyxBQUFFLFlBQUcsQUFBSSxBQUFDOztBQUV6QixBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQVMsQUFBQyxXQUFDLEFBQUM7QUFDZixBQUFTLHdCQUFHLEFBQUksS0FBQyxBQUFTLFlBQUcsSUFBSSxBQUFTLEFBQUUsQUFBQyxBQUMvQztBQUFDO0FBRUQsQUFBUyxrQkFBQyxBQUFNLE9BQUMsQUFBUyxBQUFDLEFBQUMsQUFDOUI7QUFBQzs7c0NBRU8sQUFBWSxxQ0FBQyxBQUFvQjtBQUN2QyxZQUFJLEFBQU0sU0FBRyxBQUFTLFVBQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFHLEFBQUMsQUFBQztBQUV2QyxBQUFFLEFBQUMsWUFBQyxBQUFNLEFBQUM7QUFBQyxBQUFDLEFBQ1gsQUFBSSxnQkFBRSxBQUFPLEFBQUUsVUFBRyxBQUFJLEFBQUM7O0FBRXZCLEFBQUUsQUFBQyxnQkFBQyxDQUFDLEFBQU8sQUFBQyxTQUFDLEFBQUM7QUFDYixBQUFPLDBCQUFHLEFBQUksS0FBQyxBQUFPLFVBQUcsQUFBRSxBQUFDLEFBQzlCO0FBQUM7QUFFRCxBQUFPLG9CQUFDLEFBQUksS0FBQyxBQUFNLEFBQUMsQUFBQyxBQUN2QjtBQUFDLEFBQ0g7QUFBQyxBQUNGOzs7O0FBRUQsQUFBTTtBQUtKLHdDQUFvQixBQUFnQjs7O0FBQWhCLGFBQUcsTUFBSCxBQUFHLEFBQWE7QUFKNUIsYUFBYyxpQkFBcUIsQUFBSSxBQUFDO0FBQ3hDLGFBQVUsYUFBd0IsQUFBSSxBQUFDO0FBQ3ZDLGFBQVMsWUFBc0IsQUFBSSxBQUFDLEFBRzVDO0FBQUM7O3lDQUVELEFBQWtCLGlEQUFDLEFBQXVCLFNBQUUsQUFBWSxNQUFFLEFBQWE7QUFDckUsQUFBRSxBQUFDLFlBQUMsQUFBSSxTQUFLLEFBQU8sQUFBQyxTQUFDLEFBQUM7QUFDckIsQUFBSSxpQkFBQyxBQUFRLFNBQUMsQUFBa0IsbUJBQUMsQUFBTSxPQUFDLEFBQUssQUFBQyxBQUFDLEFBQUMsQUFDbEQ7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFFLEFBQUMsSUFBQyxBQUFJLEtBQUMsQUFBa0IsbUJBQUMsQUFBSSxBQUFDLEFBQUMsT0FBQyxBQUFDO0FBQ3pDLEFBQUksaUJBQUMsQUFBWSxhQUFDLEFBQUksTUFBRSxJQUFJLEFBQWUsZ0JBQUMsQUFBTyxTQUFFLEFBQUksTUFBRSxBQUFLLEFBQUMsQUFBQyxBQUFDLEFBQ3JFO0FBQUMsQUFDSDtBQUFDOzt5Q0FFRCxBQUFvQixxREFBQyxBQUF1QixTQUFFLEFBQWlCLFdBQUUsQUFBWSxNQUFFLEFBQWE7QUFDMUYsQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQWtCLG1CQUFDLEFBQUksQUFBQyxBQUFDLE9BQUMsQUFBQztBQUNsQyxBQUFJLGlCQUFDLEFBQVksYUFBQyxBQUFJLE1BQUUsSUFBSSxBQUFlLGdCQUFDLEFBQU8sU0FBRSxBQUFJLE1BQUUsQUFBSyxPQUFFLEFBQVMsQUFBQyxBQUFDLEFBQUMsQUFDaEY7QUFBQyxBQUNIO0FBQUM7O3lDQUVELEFBQW1CLG1EQUFDLEFBQXVCLFNBQUUsQUFBWSxNQUFFLEFBQWdDLFdBQUUsQUFBbUI7QUFDOUcsQUFBRSxBQUFDLFlBQUMsQUFBSSxTQUFLLEFBQU8sQUFBQyxTQUFDLEFBQUM7QUFDckIsQUFBSSxpQkFBQyxBQUFRLFNBQUMsQUFBUyxBQUFDLEFBQUMsQUFDM0I7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFFLEFBQUMsSUFBQyxBQUFJLEtBQUMsQUFBa0IsbUJBQUMsQUFBSSxBQUFDLEFBQUMsT0FBQyxBQUFDO0FBQ3pDLGdCQUFJLEFBQWdCLG1CQUFHLEFBQUksS0FBQyxBQUFHLElBQUMsQUFBWSxhQUFDLEFBQU8sU0FBRSxBQUFJLE1BQUUsQUFBVSxBQUFDLEFBQUM7QUFDeEUsZ0JBQUksQUFBUyxZQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBTyxTQUFFLEFBQWdCLGtCQUFFLEFBQUksTUFBRSxBQUFTLEFBQUMsQUFBQztBQUVqRixBQUFJLGlCQUFDLEFBQVksYUFBQyxBQUFJLE1BQUUsQUFBUyxBQUFDLEFBQUMsQUFDckM7QUFBQyxBQUNIO0FBQUM7O3lDQUVELEFBQXFCLHVEQUFDLEFBQXVCLFNBQUUsQUFBMkIsV0FBRSxBQUFZLE1BQUUsQUFBZ0MsV0FBRSxBQUFtQjtBQUM3SSxBQUFFLEFBQUMsWUFBQyxBQUFJLEtBQUMsQUFBa0IsbUJBQUMsQUFBSSxBQUFDLEFBQUMsT0FBQyxBQUFDO0FBQ2xDLGdCQUFJLEFBQWdCLG1CQUFHLEFBQUksS0FBQyxBQUFHLElBQUMsQUFBWSxhQUFDLEFBQU8sU0FBRSxBQUFJLE1BQUUsQUFBVSxZQUFFLEFBQVMsQUFBQyxBQUFDO0FBQ25GLGdCQUFJLEFBQVcsY0FBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sU0FBRSxBQUFnQixrQkFBRSxBQUFJLE1BQUUsQUFBUyxXQUFFLEFBQVMsQUFBQyxBQUFDO0FBRTlGLEFBQUksaUJBQUMsQUFBWSxhQUFDLEFBQUksTUFBRSxBQUFXLEFBQUMsQUFBQyxBQUN2QztBQUFDLEFBQ0g7QUFBQzs7eUNBRUQsQUFBSyx1QkFBQyxBQUF1QixTQUFFLEFBQU07QUFDbkMsQUFBSSxZQUFFLEFBQUcsQUFBRSxNQUFHLEFBQUksQUFBQyxBQUNuQixBQUFJO1lBQUUsQUFBVTtZQUFFLEFBQVMsQUFBRSxZQUFHLEFBQUksQUFBQzs7QUFFckMsQUFBRyxBQUFDLGFBQUMsSUFBSSxBQUFDLElBQUcsQUFBQyxHQUFFLEFBQVUsY0FBSSxBQUFDLElBQUcsQUFBVSxXQUFDLEFBQU0sUUFBRSxBQUFDLEFBQUUsS0FBRSxBQUFDO0FBQ3pELGdCQUFJLEFBQU0sU0FBRyxBQUFVLFdBQUMsQUFBQyxBQUFDLEdBQUMsQUFBSyxNQUFDLEFBQUcsQUFBQyxBQUFDO0FBRXRDLEFBQUUsQUFBQyxnQkFBQyxBQUFNLEFBQUMsUUFBQyxBQUFDO0FBQ1gsQUFBRSxtQkFBQyxBQUFVLFdBQUMsQUFBTSxBQUFDLEFBQUMsQUFDeEI7QUFBQyxBQUNIO0FBQUM7QUFFRCxBQUFFLEFBQUMsWUFBQyxBQUFTLEFBQUMsV0FBQyxBQUFDO0FBQ2QsZ0JBQUksQUFBZ0IsbUJBQUcsQUFBRyxJQUFDLEFBQVksYUFBQyxBQUFPLFNBQUUsQUFBTyxTQUFFLEFBQUssQUFBQyxBQUFDO0FBQ2pFLGdCQUFJLEFBQVMsWUFBRyxJQUFJLEFBQWdCLGlCQUFDLEFBQU8sU0FBRSxBQUFnQixrQkFBRSxBQUFPLFNBQUUsQUFBUyxVQUFDLEFBQVcsQUFBRSxBQUFDLEFBQUM7QUFDbEcsZ0JBQUksQUFBTSxVQUFHLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBRyxBQUFDLEFBQUM7QUFFbEMsQUFBRSxBQUFDLGdCQUFDLEFBQU0sQUFBQyxTQUFDLEFBQUM7QUFDWCxBQUFFLG1CQUFDLEFBQVUsV0FBQyxBQUFNLEFBQUMsQUFBQyxBQUN4QjtBQUFDLEFBQ0g7QUFBQyxBQUNIO0FBQUM7O3lDQUVPLEFBQWtCLGlEQUFDLEFBQVk7QUFDckMsQUFBTSxlQUFDLENBQUMsQUFBSSxLQUFDLEFBQWMsa0JBQUksQUFBSSxLQUFDLEFBQWMsZUFBQyxBQUFPLFFBQUMsQUFBSSxBQUFDLFVBQUssQ0FBQyxBQUFDLEFBQUMsQUFDMUU7QUFBQzs7eUNBRU8sQUFBUSw2QkFBQyxBQUFnQztBQUMvQyxBQUFJLFlBQUUsQUFBUyxBQUFFLFlBQUcsQUFBSSxBQUFDOztBQUV6QixBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQVMsQUFBQyxXQUFDLEFBQUM7QUFDZixBQUFTLHdCQUFHLEFBQUksS0FBQyxBQUFTLFlBQUcsSUFBSSxBQUFTLEFBQUUsQUFBQyxBQUMvQztBQUFDO0FBRUQsQUFBUyxrQkFBQyxBQUFNLE9BQUMsQUFBUyxBQUFDLEFBQUMsQUFDOUI7QUFBQzs7eUNBRU8sQUFBWSxxQ0FBQyxBQUFZLE1BQUUsQUFBb0I7QUFDckQsQUFBSSxZQUFFLEFBQWM7WUFBRSxBQUFVLEFBQUUsYUFBRyxBQUFJLEFBQUM7O0FBRTFDLEFBQUUsQUFBQyxZQUFDLENBQUMsQUFBYyxBQUFDLGdCQUFDLEFBQUM7QUFDcEIsQUFBYyw2QkFBRyxBQUFJLEtBQUMsQUFBYyxpQkFBRyxBQUFFLEFBQUM7QUFDMUMsQUFBVSx5QkFBRyxBQUFJLEtBQUMsQUFBVSxhQUFHLEFBQUUsQUFBQyxBQUNwQztBQUFDO0FBRUQsQUFBYyx1QkFBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUM7QUFDMUIsQUFBTSxlQUFDLEFBQVUsQUFBQyxZQUFDLEFBQUksS0FBQyxBQUFTLEFBQUMsQUFBQyxBQUNyQztBQUFDLEFBQ0Y7Ozs7QUFFRCxBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQWUsb0JBQUUsQUFBRTtBQUNwQyxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUM7QUFFMUIsUUFBSSxBQUFNLFNBQUcsQUFBNkIsQUFBQztBQUMzQyxBQUFLLFVBQUMsQUFBZ0IsaUJBQUMsQUFBTSxBQUFDLFFBQUMsQUFBSyxNQUFDLEFBQUssTUFBQyxBQUFrQixtQkFBQyxBQUFNLEFBQUMsU0FBRSxBQUFFLEFBQUMsQUFBQztBQUMzRSxBQUFLLFVBQUMsQUFBWSxBQUFFLEFBQUMsQUFDdkI7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQWU7QUFBRSxBQUFFLFdBQUksQUFBRSxHQUFDLEFBQVEsQUFBRSxXQUFDLEFBQVksQUFBRSxBQUFDLEFBQUM7O0FBRXhFLEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBYSxrQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUssY0FBVixBQUFHO1FBQWMsQUFBTSxlQUFYLEFBQUc7UUFBZSxBQUFVLEFBQUUsbUJBQWpCLEFBQUc7O0FBQ25FLFFBQUksQUFBSSxPQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUssQUFBQyxBQUFDO0FBQ3pDLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQU0sQUFBQyxBQUFDO0FBRTNDLEFBQUUsQUFBQyxRQUFDLEFBQVUsQUFBQyxZQUFDLEFBQUM7QUFDZixZQUFJLEFBQVMsWUFBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFVLEFBQUMsQUFBQztBQUNuRCxBQUFFLFdBQUMsQUFBUSxBQUFFLFdBQUMsQUFBb0IscUJBQUMsQUFBUyxXQUFFLEFBQUksTUFBRSxBQUFLLEFBQUMsQUFBQyxBQUM3RDtBQUFDLEFBQUMsQUFBSSxXQUFDLEFBQUM7QUFDTixBQUFFLFdBQUMsQUFBUSxBQUFFLFdBQUMsQUFBa0IsbUJBQUMsQUFBSSxNQUFFLEFBQUssQUFBQyxBQUFDLEFBQ2hEO0FBQUMsQUFDSDtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBVyxnQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQVEsQUFBRSxpQkFBZixBQUFHOztBQUN4QyxRQUFJLEFBQU8sVUFBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVEsU0FBMEIsQUFBUSxBQUFDLEFBQUM7QUFDdkUsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQUssQUFBQztBQUNyQixRQUFJLEFBQUksT0FBRyxBQUFLLE1BQUMsQUFBRyxBQUFhLEFBQUM7QUFDbEMsUUFBSSxBQUFHLE1BQUcsQUFBSSxLQUFDLEFBQUcsQUFBQyxBQUNuQixBQUFJOzt1QkFBOEMsQUFBRSxHQUFDLEFBQVEsQUFBRSxBQUFDO1FBQTVDLEFBQU8sdUJBQXJCLEFBQVk7UUFBVyxBQUFnQixBQUFFOztBQUMvQyxRQUFJLEFBQVksZUFBRyxBQUFFLEdBQUMsQUFBWSxBQUFFLEFBQUM7QUFDckMsUUFBSSxBQUFRLFdBQUcsQUFBTyxRQUFDLEFBQU0sT0FBQyxBQUFtQyxTQUFFLEFBQUksTUFBRSxBQUFZLGNBQUUsQUFBZ0IsQUFBQyxBQUFDO0FBRXpHLEFBQUksU0FBQyxBQUFLLEFBQUUsQUFBQztBQUViLEFBQUUsT0FBQyxBQUFHLElBQUMsQUFBdUIsd0JBQUMsQUFBUSxVQUFFLEFBQU8sQUFBQyxBQUFDO0FBQ2xELFFBQUksQUFBVSxhQUFHLEFBQU8sUUFBQyxBQUFhLGNBQUMsQUFBUSxBQUFDLEFBQUM7QUFFakQsQUFBRSxBQUFDLFFBQUMsQUFBVSxBQUFDLFlBQUMsQUFBQztBQUNmLEFBQUUsV0FBQyxBQUFjLGVBQUMsQUFBVSxBQUFDLEFBQUMsQUFDaEM7QUFBQztBQUVELEFBQUUsT0FBQyxBQUFVLFdBQUMsSUFBSSxBQUFvQixxQkFDcEMsQUFBRyxLQUNILEFBQU8sU0FDUCxBQUFRLEFBQ1QsQUFBQyxBQUFDLEFBQ0w7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFNLFdBQTRCOzs7QUFJaEMsa0NBQ1MsQUFBUSxLQUNQLEFBQWdDLFNBQ2hDLEFBQWdCOzs7c0RBRXhCLEFBQUssQUFBRSxBQUFDOztBQUpELGVBQUcsTUFBSCxBQUFHLEFBQUs7QUFDUCxlQUFPLFVBQVAsQUFBTyxBQUF5QjtBQUNoQyxlQUFRLFdBQVIsQUFBUSxBQUFRO0FBTm5CLGVBQUksT0FBRyxBQUFpQixBQUFDO0FBUzlCLEFBQUksZUFBQyxBQUFXLGNBQUcsQUFBRyxJQUFDLEFBQUssQUFBRSxBQUFDLEFBQ2pDOztBQUFDOzttQ0FFRCxBQUFRLDZCQUFDLEFBQWM7QUFDckIsQUFBSSxZQUFFLEFBQU87WUFBRSxBQUFRO1lBQUUsQUFBRyxNQUFrQixBQUFJLEFBQUM7WUFBckIsQUFBVyxBQUFFOztBQUUzQyxBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQUcsSUFBQyxBQUFRLFNBQUMsQUFBVyxBQUFDLEFBQUMsY0FBQyxBQUFDO0FBQy9CLEFBQUUsZUFBQyxBQUFHLElBQUMsQUFBc0IsdUJBQUMsQUFBUSxVQUFFLEFBQU8sQUFBQyxBQUFDO0FBQ2pELEFBQUksaUJBQUMsQUFBVyxjQUFHLEFBQUcsSUFBQyxBQUFLLEFBQUUsQUFBQyxBQUNqQztBQUFDLEFBQ0g7QUFBQzs7bUNBRUQsQUFBTTtBQUNKLEFBQU07QUFDSixBQUFJLGtCQUFFLEFBQUksS0FBQyxBQUFLO0FBQ2hCLEFBQUksa0JBQUUsQUFBSSxLQUFDLEFBQUksQUFDaEIsQUFBQyxBQUNKO0FBSlM7QUFJUixBQUNGOzs7RUE1QnlDLEFBQWM7QUFtQ3hELEFBQU07QUFDSiw2QkFDVSxBQUF1QixTQUN4QixBQUFZLE1BQ1gsQUFBYSxPQUNiLEFBQWtCOzs7QUFIbEIsYUFBTyxVQUFQLEFBQU8sQUFBZ0I7QUFDeEIsYUFBSSxPQUFKLEFBQUksQUFBUTtBQUNYLGFBQUssUUFBTCxBQUFLLEFBQVE7QUFDYixhQUFTLFlBQVQsQUFBUyxBQUFTLEFBQ3pCO0FBQUM7OzhCQUVKLEFBQUssdUJBQUMsQUFBZ0I7QUFDcEIsQUFBRyxZQUFDLEFBQW1CLEFBQUUsc0JBQUMsQUFBWSxhQUFDLEFBQUksS0FBQyxBQUFPLFNBQUUsQUFBSSxLQUFDLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBSyxPQUFFLEFBQUksS0FBQyxBQUFTLEFBQUMsQUFBQztBQUM1RixBQUFNLGVBQUMsQUFBSSxBQUFDLEFBQ2Q7QUFBQyxBQUNGOzs7O0FBRUQsQUFBTTtBQUtKLDhCQUNVLEFBQXVCLFNBQ3ZCLEFBQWtDLGtCQUNuQyxBQUFZLE1BQ1gsQUFBNEIsV0FDNUIsQUFBNEI7OztBQUo1QixhQUFPLFVBQVAsQUFBTyxBQUFnQjtBQUN2QixhQUFnQixtQkFBaEIsQUFBZ0IsQUFBa0I7QUFDbkMsYUFBSSxPQUFKLEFBQUksQUFBUTtBQUNYLGFBQVMsWUFBVCxBQUFTLEFBQW1CO0FBQzVCLGFBQVMsWUFBVCxBQUFTLEFBQW1CO0FBVDlCLGFBQUssUUFBbUMsQUFBSSxBQUFDO0FBV25ELEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBUyxVQUFDLEFBQUcsQUFBQyxBQUMzQjtBQUFDOzsrQkFFRCxBQUFLLHVCQUFDLEFBQWdCO0FBQ3BCLEFBQUksWUFBRSxBQUFPO1lBQUUsQUFBSyxBQUFFLFFBQUcsQUFBSSxBQUFDOztBQUU5QixZQUFJLEFBQUssUUFBRyxBQUFNLE9BQUMsQUFBSyxPQUFFLEFBQXdCLEFBQUMsMEJBQUMsQUFBVSxBQUFFLEFBQUM7QUFFakUsQUFBRSxBQUFDLFlBQUMsQUFBVSxXQUFDLEFBQUssQUFBQyxBQUFDLFFBQUMsQUFBQztBQUN0QixBQUFJLGlCQUFDLEFBQWdCLGlCQUFDLEFBQWUsZ0JBQUMsQUFBRyxLQUFFLEFBQXlELFNBQUUsQUFBSyxPQUFFLEFBQUksS0FBQyxBQUFTLEFBQUMsQUFBQyxBQUMvSDtBQUFDLEFBQ0g7QUFBQzs7K0JBRUQsQUFBSyx1QkFBQyxBQUFnQjtBQUNwQixBQUFJLFlBQUUsQUFBUztZQUFFLEFBQU8sQUFBRSxVQUFHLEFBQUksQUFBQzs7QUFFbEMsQUFBRSxBQUFDLFlBQUMsQUFBZ0IsaUJBQUMsQUFBUyxBQUFDLEFBQUMsWUFBQyxBQUFDO0FBQ2hDLGdCQUFJLEFBQUssUUFBRyxBQUFTLFVBQUMsQUFBSyxBQUFFLEFBQUM7QUFDOUIsQUFBSSxpQkFBQyxBQUFnQixpQkFBQyxBQUFZLGFBQUMsQUFBRyxLQUFFLEFBQU8sU0FBRSxBQUFLLE9BQUUsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDO0FBQ3hFLEFBQU0sbUJBQUMsQUFBSSxBQUFDLEFBQ2Q7QUFBQyxBQUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sZ0JBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFLLFFBQUcsSUFBSSxBQUFjLGVBQUMsQUFBUyxBQUFDLEFBQUM7QUFDdkQsZ0JBQUksQUFBSyxVQUFHLEFBQUssTUFBQyxBQUFJLEFBQUUsQUFBQztBQUN6QixBQUFJLGlCQUFDLEFBQWdCLGlCQUFDLEFBQVksYUFBQyxBQUFHLEtBQUUsQUFBTyxTQUFFLEFBQUssU0FBRSxBQUFJLEtBQUMsQUFBUyxBQUFDLEFBQUM7QUFDeEUsQUFBTSxtQkFBQyxJQUFJLEFBQWtCLG1CQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3RDO0FBQUMsQUFDSDtBQUFDOzsrQkFFRCxBQUFNO0FBQ0osQUFBSSxZQUFFLEFBQU87WUFBRSxBQUFTO1lBQUUsQUFBSSxPQUFZLEFBQUksQUFBQztZQUFmLEFBQUssQUFBRTs7QUFFdkMsWUFBSSxBQUFnQixtQkFBRyxBQUFhLGNBQUMsQUFBTyxBQUFDLEFBQUM7QUFDOUMsWUFBSSxBQUFTLFlBQUcsQUFBTSxPQUFDLEFBQUssT0FBRSxBQUE0QixBQUFDLDhCQUFDLEFBQUksQUFBWSxBQUFDO0FBRTdFLEFBQUUsQUFBQyxZQUFDLEFBQVMsQUFBQyxXQUFDLEFBQUM7QUFDZCxBQUFNO0FBQ0osQUFBTyx5QkFBRSxBQUFnQjtBQUN6QixBQUFJLHNCQUFFLEFBQVc7QUFDakIsQUFBUztBQUNULEFBQUk7QUFDSixBQUFTLEFBQ1YsQUFBQyxBQUNKO0FBUFM7QUFPUjtBQUVELEFBQU07QUFDSixBQUFPLHFCQUFFLEFBQWdCO0FBQ3pCLEFBQUksa0JBQUUsQUFBVztBQUNqQixBQUFTLHVCQUFFLEFBQVMsY0FBSyxBQUFTLFlBQUcsQUFBSSxPQUFHLEFBQVM7QUFDckQsQUFBSTtBQUNKLEFBQVMsQUFDVixBQUFDLEFBQ0o7QUFQUztBQU9SLEFBQ0Y7Ozs7QUFFRCx1QkFBdUIsQUFBdUI7QUFDNUMsQUFBTSxXQUFDLEFBQUksS0FBQyxBQUFTLEFBQUMsZ0JBQUksQUFBTyxRQUFDLEFBQU8sUUFBQyxBQUFXLEFBQUUsQUFBSyxBQUFDLEFBQUMsQUFDaEU7QUFBQztBQUVELEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBZ0IscUJBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFLLGNBQVYsQUFBRztRQUFjLEFBQVUsbUJBQWYsQUFBRztRQUFtQixBQUFRLEFBQUUsaUJBQWYsQUFBRzs7QUFDMUUsUUFBSSxBQUFJLE9BQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBSyxBQUFDLEFBQUM7QUFDekMsUUFBSSxBQUFTLFlBQUcsQUFBRSxHQUFDLEFBQVMsVUFBQyxBQUFTLFVBQUMsQUFBVSxBQUFDLEFBQUM7QUFDbkQsUUFBSSxBQUFTLFlBQUcsQUFBRSxHQUFDLEFBQUssTUFBQyxBQUFHLEFBQThCLEFBQUM7QUFDM0QsQUFBRSxPQUFDLEFBQVEsQUFBRSxXQUFDLEFBQXFCLHNCQUFDLEFBQVMsV0FBRSxBQUFJLE1BQUUsQUFBUyxXQUFFLENBQUMsQ0FBQyxBQUFRLEFBQUMsQUFBQyxBQUM5RTtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUssY0FBVixBQUFHO1FBQWMsQUFBUSxBQUFFLGlCQUFmLEFBQUc7O0FBQ3ZELFFBQUksQUFBSSxPQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUssQUFBQyxBQUFDO0FBQ3pDLFFBQUksQUFBUyxZQUFHLEFBQUUsR0FBQyxBQUFLLE1BQUMsQUFBRyxBQUE4QixBQUFDO0FBQzNELEFBQUUsT0FBQyxBQUFRLEFBQUUsV0FBQyxBQUFtQixvQkFBQyxBQUFJLE1BQUUsQUFBUyxXQUFFLENBQUMsQ0FBQyxBQUFRLEFBQUMsQUFBQyxBQUNqRTtBQUFDLEFBQUMsQUFBQztBQUVILEFBQU0sV0FBMEI7OztBQUs5QixnQ0FBWSxBQUEyQjs7O3NEQUNyQyxBQUFLLEFBQUUsQUFBQzs7QUFMSCxlQUFJLE9BQUcsQUFBZSxBQUFDO0FBTTVCLEFBQUksZUFBQyxBQUFHLE1BQUcsQUFBUyxVQUFDLEFBQUcsQUFBQztBQUN6QixBQUFJLGVBQUMsQUFBUyxZQUFHLEFBQVMsQUFBQyxBQUM3Qjs7QUFBQzs7aUNBRUQsQUFBUSw2QkFBQyxBQUFjO0FBQ3JCLEFBQUksYUFBQyxBQUFTLFVBQUMsQUFBSyxNQUFDLEFBQUUsR0FBQyxBQUFHLEFBQUMsQUFBQyxBQUMvQjtBQUFDOztpQ0FFRCxBQUFNO0FBQ0osQUFBSSxZQUFFLEFBQUs7WUFBRSxBQUFJLE9BQWdCLEFBQUksQUFBQztZQUFuQixBQUFTLEFBQUU7O0FBRTlCLEFBQU07QUFDSixBQUFJLGtCQUFFLEFBQUs7QUFDWCxBQUFJO0FBQ0osQUFBTyxxQkFBRSxBQUFTLFVBQUMsQUFBTSxBQUFFLEFBQzVCLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRjs7O0VBeEJ1QyxBQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcbmltcG9ydCB7IFZNLCBVcGRhdGluZ1ZNIH0gZnJvbSAnLi4vLi4vdm0nO1xuaW1wb3J0IHsgQXJndW1lbnRzIH0gZnJvbSAnLi4vLi4vdm0vYXJndW1lbnRzJztcbmltcG9ydCAqIGFzIFNpbXBsZSBmcm9tICcuLi8uLi9kb20vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGSVhfUkVJRklDQVRJT04gfSBmcm9tICcuLi8uLi9kb20vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEZJWE1FLCBPcHRpb24sIE9wYXF1ZSwgRGljdCwgdW53cmFwLCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIENhY2hlZFJlZmVyZW5jZSxcbiAgUmVmZXJlbmNlLFxuICBWZXJzaW9uZWRSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZUNhY2hlLFxuICBUYWcsXG4gIFJldmlzaW9uLFxuICBQYXRoUmVmZXJlbmNlLFxuICBjb21iaW5lVGFnZ2VkLFxuICBpc0NvbnN0IGFzIGlzQ29uc3RSZWZlcmVuY2UsXG4gIGlzTW9kaWZpZWRcbn0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE1vZGlmaWVyTWFuYWdlciB9IGZyb20gJy4uLy4uL21vZGlmaWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTlVMTF9SRUZFUkVOQ0UsIFByaW1pdGl2ZVJlZmVyZW5jZSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgQXR0cmlidXRlTWFuYWdlciB9IGZyb20gJy4uLy4uL2RvbS9hdHRyaWJ1dGUtbWFuYWdlcnMnO1xuaW1wb3J0IHsgRWxlbWVudE9wZXJhdGlvbnMgfSBmcm9tICcuLi8uLi9idWlsZGVyJztcbmltcG9ydCB7IEFzc2VydCB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5UZXh0LCAodm0sIHsgb3AxOiB0ZXh0IH0pID0+IHtcbiAgdm0uZWxlbWVudHMoKS5hcHBlbmRUZXh0KHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGV4dCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db21tZW50LCAodm0sIHsgb3AxOiB0ZXh0IH0pID0+IHtcbiAgdm0uZWxlbWVudHMoKS5hcHBlbmRDb21tZW50KHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGV4dCkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5PcGVuRWxlbWVudCwgKHZtLCB7IG9wMTogdGFnIH0pID0+IHtcbiAgdm0uZWxlbWVudHMoKS5vcGVuRWxlbWVudCh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHRhZykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5PcGVuRWxlbWVudFdpdGhPcGVyYXRpb25zLCAodm0sIHsgb3AxOiB0YWcgfSkgPT4ge1xuICBsZXQgdGFnTmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcodGFnKTtcbiAgbGV0IG9wZXJhdGlvbnMgPSB2bS5zdGFjay5wb3A8RWxlbWVudE9wZXJhdGlvbnM+KCk7XG4gIHZtLmVsZW1lbnRzKCkub3BlbkVsZW1lbnQodGFnTmFtZSwgb3BlcmF0aW9ucyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk9wZW5EeW5hbWljRWxlbWVudCwgdm0gPT4ge1xuICBsZXQgb3BlcmF0aW9ucyA9IHZtLnN0YWNrLnBvcDxFbGVtZW50T3BlcmF0aW9ucz4oKTtcbiAgbGV0IHRhZ05hbWUgPSB2bS5zdGFjay5wb3A8UmVmZXJlbmNlPHN0cmluZz4+KCkudmFsdWUoKTtcbiAgdm0uZWxlbWVudHMoKS5vcGVuRWxlbWVudCh0YWdOYW1lLCBvcGVyYXRpb25zKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaFJlbW90ZUVsZW1lbnQsIHZtID0+IHtcbiAgbGV0IGVsZW1lbnRSZWYgPSB2bS5zdGFjay5wb3A8UmVmZXJlbmNlPFNpbXBsZS5FbGVtZW50Pj4oKTtcbiAgbGV0IG5leHRTaWJsaW5nUmVmID0gdm0uc3RhY2sucG9wPFJlZmVyZW5jZTxPcHRpb248U2ltcGxlLk5vZGU+Pj4oKTtcblxuICBsZXQgZWxlbWVudDogU2ltcGxlLkVsZW1lbnQ7XG4gIGxldCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPjtcblxuICBpZiAoaXNDb25zdFJlZmVyZW5jZShlbGVtZW50UmVmKSkge1xuICAgIGVsZW1lbnQgPSBlbGVtZW50UmVmLnZhbHVlKCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKGVsZW1lbnRSZWYpO1xuICAgIGVsZW1lbnQgPSBjYWNoZS5wZWVrKCk7XG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cblxuICBpZiAoaXNDb25zdFJlZmVyZW5jZShuZXh0U2libGluZ1JlZikpIHtcbiAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nUmVmLnZhbHVlKCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKG5leHRTaWJsaW5nUmVmKTtcbiAgICBuZXh0U2libGluZyA9IGNhY2hlLnBlZWsoKTtcbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxuXG4gIHZtLmVsZW1lbnRzKCkucHVzaFJlbW90ZUVsZW1lbnQoZWxlbWVudCwgbmV4dFNpYmxpbmcpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3BSZW1vdGVFbGVtZW50LCB2bSA9PiB2bS5lbGVtZW50cygpLnBvcFJlbW90ZUVsZW1lbnQoKSk7XG5cbmNsYXNzIENsYXNzTGlzdCB7XG4gIHByaXZhdGUgbGlzdDogT3B0aW9uPFJlZmVyZW5jZTxzdHJpbmc+W10+ID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0NvbnN0ID0gdHJ1ZTtcblxuICBhcHBlbmQocmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGxpc3QsIGlzQ29uc3QgfSA9IHRoaXM7XG5cbiAgICBpZiAobGlzdCA9PT0gbnVsbCkgbGlzdCA9IHRoaXMubGlzdCA9IFtdO1xuXG4gICAgbGlzdC5wdXNoKHJlZmVyZW5jZSk7XG4gICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdCAmJiBpc0NvbnN0UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG4gIH1cblxuICB0b1JlZmVyZW5jZSgpOiBSZWZlcmVuY2U8T3B0aW9uPHN0cmluZz4+IHtcbiAgICBsZXQgeyBsaXN0LCBpc0NvbnN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFsaXN0KSByZXR1cm4gTlVMTF9SRUZFUkVOQ0U7XG5cbiAgICBpZiAoaXNDb25zdCkgcmV0dXJuIFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodG9DbGFzc05hbWUobGlzdCkpO1xuXG4gICAgcmV0dXJuIG5ldyBDbGFzc0xpc3RSZWZlcmVuY2UobGlzdCk7XG4gIH1cblxufVxuXG5jbGFzcyBDbGFzc0xpc3RSZWZlcmVuY2UgZXh0ZW5kcyBDYWNoZWRSZWZlcmVuY2U8T3B0aW9uPHN0cmluZz4+IHtcbiAgcHVibGljIHRhZzogVGFnO1xuICBwcml2YXRlIGxpc3Q6IFJlZmVyZW5jZTxzdHJpbmc+W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmVUYWdnZWQobGlzdCk7XG4gICAgdGhpcy5saXN0ID0gbGlzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wdXRlKCk6IE9wdGlvbjxzdHJpbmc+IHtcbiAgICByZXR1cm4gdG9DbGFzc05hbWUodGhpcy5saXN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0NsYXNzTmFtZShsaXN0OiBSZWZlcmVuY2U8c3RyaW5nPltdKTogT3B0aW9uPHN0cmluZz4ge1xuICBsZXQgcmV0OiBPcGFxdWVbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGxldCB2YWx1ZTogRklYTUU8T3BhcXVlLCAndXNlIE9wYXF1ZSBhbmQgbm9ybWFsaXplJz4gPSBsaXN0W2ldLnZhbHVlKCk7XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXQucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gKHJldC5sZW5ndGggPT09IDApID8gbnVsbCA6IHJldC5qb2luKCcgJyk7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVFbGVtZW50T3BlcmF0aW9ucyBpbXBsZW1lbnRzIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBPcHRpb248VXBkYXRpbmdPcGNvZGVbXT4gPSBudWxsO1xuICBwcml2YXRlIGNsYXNzTGlzdDogT3B0aW9uPENsYXNzTGlzdD4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW52OiBFbnZpcm9ubWVudCkge1xuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0YXRpY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPiwgaXNUcnVzdGluZzogYm9vbGVhbikge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKHJlZmVyZW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IFNpbXBsZS5OYW1lc3BhY2UsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IHRoaXMuZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCBuYW1lLCBpc1RydXN0aW5nLCBuYW1lc3BhY2UpO1xuICAgIGxldCBuc0F0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSwgbmFtZXNwYWNlKTtcblxuICAgIHRoaXMuYWRkQXR0cmlidXRlKG5zQXR0cmlidXRlKTtcbiAgfVxuXG4gIGZsdXNoKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCB2bTogVk0pIHtcbiAgICBsZXQgeyBlbnYgfSA9IHZtO1xuICAgIGxldCB7IG9wY29kZXMsIGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBvcGNvZGVzICYmIGkgPCBvcGNvZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2bS51cGRhdGVXaXRoKG9wY29kZXNbaV0pO1xuICAgIH1cblxuICAgIGlmIChjbGFzc0xpc3QpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gZW52LmF0dHJpYnV0ZUZvcihlbGVtZW50LCAnY2xhc3MnLCBmYWxzZSk7XG4gICAgICBsZXQgYXR0cmlidXRlID0gbmV3IER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlTWFuYWdlciwgJ2NsYXNzJywgY2xhc3NMaXN0LnRvUmVmZXJlbmNlKCkpO1xuICAgICAgbGV0IG9wY29kZSA9IGF0dHJpYnV0ZS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMgPSBudWxsO1xuICAgIHRoaXMuY2xhc3NMaXN0ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xhc3MocmVmZXJlbmNlOiBSZWZlcmVuY2U8c3RyaW5nPikge1xuICAgIGxldCB7IGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGlmICghY2xhc3NMaXN0KSB7XG4gICAgICBjbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCA9IG5ldyBDbGFzc0xpc3QoKTtcbiAgICB9XG5cbiAgICBjbGFzc0xpc3QuYXBwZW5kKHJlZmVyZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSkge1xuICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2godGhpcy5lbnYpO1xuXG4gICAgaWYgKG9wY29kZSkge1xuICAgICAgbGV0IHsgb3Bjb2RlcyB9ID0gdGhpcztcblxuICAgICAgaWYgKCFvcGNvZGVzKSB7XG4gICAgICAgIG9wY29kZXMgPSB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICAgIH1cblxuICAgICAgb3Bjb2Rlcy5wdXNoKG9wY29kZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFbGVtZW50T3BlcmF0aW9ucyBpbXBsZW1lbnRzIEVsZW1lbnRPcGVyYXRpb25zIHtcbiAgcHJpdmF0ZSBhdHRyaWJ1dGVOYW1lczogT3B0aW9uPHN0cmluZ1tdPiA9IG51bGw7XG4gIHByaXZhdGUgYXR0cmlidXRlczogT3B0aW9uPEF0dHJpYnV0ZVtdPiA9IG51bGw7XG4gIHByaXZhdGUgY2xhc3NMaXN0OiBPcHRpb248Q2xhc3NMaXN0PiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBhZGRTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChuYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICB0aGlzLmFkZEF0dHJpYnV0ZShuYW1lLCBuZXcgU3RhdGljQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3RhdGljQXR0cmlidXRlTlMoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5ldyBTdGF0aWNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNBdHRyaWJ1dGUoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NsYXNzJykge1xuICAgICAgdGhpcy5hZGRDbGFzcyhyZWZlcmVuY2UpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsIG5hbWUsIHJlZmVyZW5jZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIGF0dHJpYnV0ZSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY0F0dHJpYnV0ZU5TKGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LCBuYW1lc3BhY2U6IFNpbXBsZS5OYW1lc3BhY2UsIG5hbWU6IHN0cmluZywgcmVmZXJlbmNlOiBQYXRoUmVmZXJlbmNlPHN0cmluZz4sIGlzVHJ1c3Rpbmc6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGVNYW5hZ2VyID0gdGhpcy5lbnYuYXR0cmlidXRlRm9yKGVsZW1lbnQsIG5hbWUsIGlzVHJ1c3RpbmcsIG5hbWVzcGFjZSk7XG4gICAgICBsZXQgbnNBdHRyaWJ1dGUgPSBuZXcgRHluYW1pY0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVNYW5hZ2VyLCBuYW1lLCByZWZlcmVuY2UsIG5hbWVzcGFjZSk7XG5cbiAgICAgIHRoaXMuYWRkQXR0cmlidXRlKG5hbWUsIG5zQXR0cmlidXRlKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaChlbGVtZW50OiBTaW1wbGUuRWxlbWVudCwgdm06IFZNKSB7XG4gICAgbGV0IHsgZW52IH0gPSB0aGlzO1xuICAgIGxldCB7IGF0dHJpYnV0ZXMsIGNsYXNzTGlzdCB9ID0gdGhpcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBhdHRyaWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb3Bjb2RlID0gYXR0cmlidXRlc1tpXS5mbHVzaChlbnYpO1xuXG4gICAgICBpZiAob3Bjb2RlKSB7XG4gICAgICAgIHZtLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xhc3NMaXN0KSB7XG4gICAgICBsZXQgYXR0cmlidXRlTWFuYWdlciA9IGVudi5hdHRyaWJ1dGVGb3IoZWxlbWVudCwgJ2NsYXNzJywgZmFsc2UpO1xuICAgICAgbGV0IGF0dHJpYnV0ZSA9IG5ldyBEeW5hbWljQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZU1hbmFnZXIsICdjbGFzcycsIGNsYXNzTGlzdC50b1JlZmVyZW5jZSgpKTtcbiAgICAgIGxldCBvcGNvZGUgPSBhdHRyaWJ1dGUuZmx1c2goZW52KTtcblxuICAgICAgaWYgKG9wY29kZSkge1xuICAgICAgICB2bS51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRBZGRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmF0dHJpYnV0ZU5hbWVzIHx8IHRoaXMuYXR0cmlidXRlTmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTE7XG4gIH1cblxuICBwcml2YXRlIGFkZENsYXNzKHJlZmVyZW5jZTogUGF0aFJlZmVyZW5jZTxzdHJpbmc+KSB7XG4gICAgbGV0IHsgY2xhc3NMaXN0IH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjbGFzc0xpc3QpIHtcbiAgICAgIGNsYXNzTGlzdCA9IHRoaXMuY2xhc3NMaXN0ID0gbmV3IENsYXNzTGlzdCgpO1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hcHBlbmQocmVmZXJlbmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXR0cmlidXRlKG5hbWU6IHN0cmluZywgYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBsZXQgeyBhdHRyaWJ1dGVOYW1lcywgYXR0cmlidXRlcyB9ID0gdGhpcztcblxuICAgIGlmICghYXR0cmlidXRlTmFtZXMpIHtcbiAgICAgIGF0dHJpYnV0ZU5hbWVzID0gdGhpcy5hdHRyaWJ1dGVOYW1lcyA9IFtdO1xuICAgICAgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZU5hbWVzLnB1c2gobmFtZSk7XG4gICAgdW53cmFwKGF0dHJpYnV0ZXMpLnB1c2goYXR0cmlidXRlKTtcbiAgfVxufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRmx1c2hFbGVtZW50LCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmVsZW1lbnRzKCk7XG5cbiAgbGV0IGFjdGlvbiA9ICdGbHVzaEVsZW1lbnRPcGNvZGUjZXZhbHVhdGUnO1xuICBzdGFjay5leHBlY3RPcGVyYXRpb25zKGFjdGlvbikuZmx1c2goc3RhY2suZXhwZWN0Q29uc3RydWN0aW5nKGFjdGlvbiksIHZtKTtcbiAgc3RhY2suZmx1c2hFbGVtZW50KCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNsb3NlRWxlbWVudCwgdm0gPT4gdm0uZWxlbWVudHMoKS5jbG9zZUVsZW1lbnQoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5TdGF0aWNBdHRyLCAodm0sIHsgb3AxOiBfbmFtZSwgb3AyOiBfdmFsdWUsIG9wMzogX25hbWVzcGFjZSB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCB2YWx1ZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX3ZhbHVlKTtcblxuICBpZiAoX25hbWVzcGFjZSkge1xuICAgIGxldCBuYW1lc3BhY2UgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lc3BhY2UpO1xuICAgIHZtLmVsZW1lbnRzKCkuc2V0U3RhdGljQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uZWxlbWVudHMoKS5zZXRTdGF0aWNBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLk1vZGlmaWVyLCAodm0sIHsgb3AxOiBfbWFuYWdlciB9KSA9PiB7XG4gIGxldCBtYW5hZ2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyPE1vZGlmaWVyTWFuYWdlcjxPcGFxdWU+PihfbWFuYWdlcik7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgYXJncyA9IHN0YWNrLnBvcDxBcmd1bWVudHM+KCk7XG4gIGxldCB0YWcgPSBhcmdzLnRhZztcbiAgbGV0IHsgY29uc3RydWN0aW5nOiBlbGVtZW50LCB1cGRhdGVPcGVyYXRpb25zIH0gPSB2bS5lbGVtZW50cygpO1xuICBsZXQgZHluYW1pY1Njb3BlID0gdm0uZHluYW1pY1Njb3BlKCk7XG4gIGxldCBtb2RpZmllciA9IG1hbmFnZXIuY3JlYXRlKGVsZW1lbnQgYXMgRklYX1JFSUZJQ0FUSU9OPEVsZW1lbnQ+LCBhcmdzLCBkeW5hbWljU2NvcGUsIHVwZGF0ZU9wZXJhdGlvbnMpO1xuXG4gIGFyZ3MuY2xlYXIoKTtcblxuICB2bS5lbnYuc2NoZWR1bGVJbnN0YWxsTW9kaWZpZXIobW9kaWZpZXIsIG1hbmFnZXIpO1xuICBsZXQgZGVzdHJ1Y3RvciA9IG1hbmFnZXIuZ2V0RGVzdHJ1Y3Rvcihtb2RpZmllcik7XG5cbiAgaWYgKGRlc3RydWN0b3IpIHtcbiAgICB2bS5uZXdEZXN0cm95YWJsZShkZXN0cnVjdG9yKTtcbiAgfVxuXG4gIHZtLnVwZGF0ZVdpdGgobmV3IFVwZGF0ZU1vZGlmaWVyT3Bjb2RlKFxuICAgIHRhZyxcbiAgICBtYW5hZ2VyLFxuICAgIG1vZGlmaWVyXG4gICkpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVNb2RpZmllck9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcInVwZGF0ZS1tb2RpZmllclwiO1xuICBwcml2YXRlIGxhc3RVcGRhdGVkOiBSZXZpc2lvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFnOiBUYWcsXG4gICAgcHJpdmF0ZSBtYW5hZ2VyOiBNb2RpZmllck1hbmFnZXI8T3BhcXVlPixcbiAgICBwcml2YXRlIG1vZGlmaWVyOiBPcGFxdWVcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxhc3RVcGRhdGVkID0gdGFnLnZhbHVlKCk7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IG1hbmFnZXIsIG1vZGlmaWVyLCB0YWcsIGxhc3RVcGRhdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF0YWcudmFsaWRhdGUobGFzdFVwZGF0ZWQpKSB7XG4gICAgICB2bS5lbnYuc2NoZWR1bGVVcGRhdGVNb2RpZmllcihtb2RpZmllciwgbWFuYWdlcik7XG4gICAgICB0aGlzLmxhc3RVcGRhdGVkID0gdGFnLnZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZmx1c2goZW52OiBFbnZpcm9ubWVudCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT47XG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0aWNBdHRyaWJ1dGUgaW1wbGVtZW50cyBBdHRyaWJ1dGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB2YWx1ZTogc3RyaW5nLFxuICAgIHByaXZhdGUgbmFtZXNwYWNlPzogc3RyaW5nXG4gICkge31cblxuICBmbHVzaChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCB0aGlzLm5hbWUsIHRoaXMudmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHluYW1pY0F0dHJpYnV0ZSBpbXBsZW1lbnRzIEF0dHJpYnV0ZSAge1xuICBwcml2YXRlIGNhY2hlOiBPcHRpb248UmVmZXJlbmNlQ2FjaGU8T3BhcXVlPj4gPSBudWxsO1xuXG4gIHB1YmxpYyB0YWc6IFRhZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnQ6IFNpbXBsZS5FbGVtZW50LFxuICAgIHByaXZhdGUgYXR0cmlidXRlTWFuYWdlcjogQXR0cmlidXRlTWFuYWdlcixcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlOiBSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBwcml2YXRlIG5hbWVzcGFjZT86IFNpbXBsZS5OYW1lc3BhY2VcbiAgKSB7XG4gICAgdGhpcy50YWcgPSByZWZlcmVuY2UudGFnO1xuICB9XG5cbiAgcGF0Y2goZW52OiBFbnZpcm9ubWVudCkge1xuICAgIGxldCB7IGVsZW1lbnQsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IHZhbHVlID0gZXhwZWN0KGNhY2hlLCAnbXVzdCBwYXRjaCBhZnRlciBmbHVzaCcpLnJldmFsaWRhdGUoKTtcblxuICAgIGlmIChpc01vZGlmaWVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnVwZGF0ZUF0dHJpYnV0ZShlbnYsIGVsZW1lbnQgYXMgRklYTUU8RWxlbWVudCwgJ25lZWRzIHRvIGJlIHJlaWZpZWQgcHJvcGVybHknPiwgdmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgbGV0IHsgcmVmZXJlbmNlLCBlbGVtZW50IH0gPSB0aGlzO1xuXG4gICAgaWYgKGlzQ29uc3RSZWZlcmVuY2UocmVmZXJlbmNlKSkge1xuICAgICAgbGV0IHZhbHVlID0gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgICB0aGlzLmF0dHJpYnV0ZU1hbmFnZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLmNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG4gICAgICBsZXQgdmFsdWUgPSBjYWNoZS5wZWVrKCk7XG4gICAgICB0aGlzLmF0dHJpYnV0ZU1hbmFnZXIuc2V0QXR0cmlidXRlKGVudiwgZWxlbWVudCwgdmFsdWUsIHRoaXMubmFtZXNwYWNlKTtcbiAgICAgIHJldHVybiBuZXcgUGF0Y2hFbGVtZW50T3Bjb2RlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBEaWN0PE9wdGlvbjxzdHJpbmc+PiB7XG4gICAgbGV0IHsgZWxlbWVudCwgbmFtZXNwYWNlLCBuYW1lLCBjYWNoZSB9ID0gdGhpcztcblxuICAgIGxldCBmb3JtYXR0ZWRFbGVtZW50ID0gZm9ybWF0RWxlbWVudChlbGVtZW50KTtcbiAgICBsZXQgbGFzdFZhbHVlID0gZXhwZWN0KGNhY2hlLCAnbXVzdCBzZXJpYWxpemUgYWZ0ZXIgZmx1c2gnKS5wZWVrKCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogZm9ybWF0dGVkRWxlbWVudCxcbiAgICAgICAgdHlwZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGFzdFZhbHVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50OiBmb3JtYXR0ZWRFbGVtZW50LFxuICAgICAgdHlwZTogJ2F0dHJpYnV0ZScsXG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG5hbWVzcGFjZSxcbiAgICAgIG5hbWUsXG4gICAgICBsYXN0VmFsdWVcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEVsZW1lbnQoZWxlbWVudDogU2ltcGxlLkVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYDwke2VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpfSAvPmApO1xufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRHluYW1pY0F0dHJOUywgKHZtLCB7IG9wMTogX25hbWUsIG9wMjogX25hbWVzcGFjZSwgb3AzOiB0cnVzdGluZyB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCBuYW1lc3BhY2UgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lc3BhY2UpO1xuICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wPFZlcnNpb25lZFJlZmVyZW5jZTxzdHJpbmc+PigpO1xuICB2bS5lbGVtZW50cygpLnNldER5bmFtaWNBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHJlZmVyZW5jZSwgISF0cnVzdGluZyk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR5bmFtaWNBdHRyLCAodm0sIHsgb3AxOiBfbmFtZSwgb3AyOiB0cnVzdGluZyB9KSA9PiB7XG4gIGxldCBuYW1lID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfbmFtZSk7XG4gIGxldCByZWZlcmVuY2UgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIHZtLmVsZW1lbnRzKCkuc2V0RHluYW1pY0F0dHJpYnV0ZShuYW1lLCByZWZlcmVuY2UsICEhdHJ1c3RpbmcpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBQYXRjaEVsZW1lbnRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJwYXRjaC1lbGVtZW50XCI7XG5cbiAgcHJpdmF0ZSBvcGVyYXRpb246IER5bmFtaWNBdHRyaWJ1dGU7XG5cbiAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBEeW5hbWljQXR0cmlidXRlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IG9wZXJhdGlvbi50YWc7XG4gICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIHRoaXMub3BlcmF0aW9uLnBhdGNoKHZtLmVudik7XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgX2d1aWQsIHR5cGUsIG9wZXJhdGlvbiB9ID0gdGhpcztcblxuICAgIHJldHVybiB7XG4gICAgICBndWlkOiBfZ3VpZCxcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWxzOiBvcGVyYXRpb24udG9KU09OKClcbiAgICB9O1xuICB9XG59XG4iXX0=

@@ -7,3 +7,3 @@ import { APPEND_OPCODES } from '../../opcodes';

var stack = vm.evalStack;
var stack = vm.stack;
var helper = vm.constants.getFunction(_helper);

@@ -13,3 +13,3 @@ var args = stack.pop();

args.clear();
vm.evalStack.push(value);
vm.stack.push(value);
});

@@ -20,17 +20,17 @@ APPEND_OPCODES.add(2 /* Function */, function (vm, _ref2) {

var func = vm.constants.getFunction(_function);
vm.evalStack.push(func(vm));
vm.stack.push(func(vm));
});
APPEND_OPCODES.add(4 /* GetVariable */, function (vm, _ref3) {
APPEND_OPCODES.add(5 /* GetVariable */, function (vm, _ref3) {
var symbol = _ref3.op1;
var expr = vm.referenceForSymbol(symbol);
vm.evalStack.push(expr);
vm.stack.push(expr);
});
APPEND_OPCODES.add(3 /* SetVariable */, function (vm, _ref4) {
APPEND_OPCODES.add(4 /* SetVariable */, function (vm, _ref4) {
var symbol = _ref4.op1;
var expr = vm.evalStack.pop();
var expr = vm.stack.pop();
vm.scope().bindSymbol(symbol, expr);
});
APPEND_OPCODES.add(71 /* ResolveMaybeLocal */, function (vm, _ref5) {
APPEND_OPCODES.add(70 /* ResolveMaybeLocal */, function (vm, _ref5) {
var _name = _ref5.op1;

@@ -44,5 +44,5 @@

}
vm.evalStack.push(ref);
vm.stack.push(ref);
});
APPEND_OPCODES.add(20 /* RootScope */, function (vm, _ref6) {
APPEND_OPCODES.add(19 /* RootScope */, function (vm, _ref6) {
var symbols = _ref6.op1,

@@ -53,49 +53,42 @@ bindCallerScope = _ref6.op2;

});
APPEND_OPCODES.add(5 /* GetProperty */, function (vm, _ref7) {
APPEND_OPCODES.add(6 /* GetProperty */, function (vm, _ref7) {
var _key = _ref7.op1;
var key = vm.constants.getString(_key);
var expr = vm.evalStack.pop();
vm.evalStack.push(expr.get(key));
var expr = vm.stack.pop();
vm.stack.push(expr.get(key));
});
APPEND_OPCODES.add(6 /* PushBlock */, function (vm, _ref8) {
APPEND_OPCODES.add(7 /* PushBlock */, function (vm, _ref8) {
var _block = _ref8.op1;
var block = _block ? vm.constants.getBlock(_block) : null;
vm.evalStack.push(block);
vm.stack.push(block);
});
APPEND_OPCODES.add(7 /* PushBlocks */, function (vm, _ref9) {
var defaultBlock = _ref9.op1,
inverseBlock = _ref9.op2;
APPEND_OPCODES.add(8 /* GetBlock */, function (vm, _ref9) {
var _block = _ref9.op1;
if (defaultBlock) vm.evalStack.push(vm.constants.getBlock(defaultBlock));
if (inverseBlock) vm.evalStack.push(vm.constants.getBlock(inverseBlock));
vm.stack.push(vm.scope().getBlock(_block));
});
APPEND_OPCODES.add(8 /* GetBlock */, function (vm, _ref10) {
APPEND_OPCODES.add(9 /* HasBlock */, function (vm, _ref10) {
var _block = _ref10.op1;
vm.evalStack.push(vm.scope().getBlock(_block));
var hasBlock = !!vm.scope().getBlock(_block);
vm.stack.push(hasBlock ? TRUE_REFERENCE : FALSE_REFERENCE);
});
APPEND_OPCODES.add(9 /* HasBlock */, function (vm, _ref11) {
APPEND_OPCODES.add(10 /* HasBlockParams */, function (vm, _ref11) {
var _block = _ref11.op1;
var hasBlock = !!vm.scope().getBlock(_block);
vm.evalStack.push(hasBlock ? TRUE_REFERENCE : FALSE_REFERENCE);
});
APPEND_OPCODES.add(10 /* HasBlockParams */, function (vm, _ref12) {
var _block = _ref12.op1;
var block = vm.scope().getBlock(_block);
var hasBlockParams = block && block.symbolTable.parameters.length;
vm.evalStack.push(hasBlockParams ? TRUE_REFERENCE : FALSE_REFERENCE);
vm.stack.push(hasBlockParams ? TRUE_REFERENCE : FALSE_REFERENCE);
});
APPEND_OPCODES.add(11 /* Concat */, function (vm, _ref13) {
var count = _ref13.op1;
APPEND_OPCODES.add(11 /* Concat */, function (vm, _ref12) {
var count = _ref12.op1;
var out = [];
for (var i = count; i > 0; i--) {
out.push(vm.evalStack.pop());
out.push(vm.stack.pop());
}
vm.evalStack.push(new ConcatReference(out.reverse()));
vm.stack.push(new ConcatReference(out.reverse()));
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFPLFNBQUUsQUFBYyxBQUFNLHNCQUFNLEFBQWUsQUFBQztBQUNuRCxBQUFPLFNBQUUsQUFBZSxBQUFFLHVCQUFNLEFBQXVCLEFBQUM7QUFFeEQsQUFBTyxTQUFFLEFBQWMsZ0JBQUUsQUFBZSxBQUFFLHVCQUFNLEFBQWtCLEFBQUM7QUFRbkUsQUFBYyxlQUFDLEFBQUcsSUFBQyxFQUFTLGNBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFPLEFBQUUsZUFBZCxBQUFHOztBQUN0QyxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBUyxBQUFDO0FBQ3pCLFFBQUksQUFBTSxTQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBVyxZQUFTLEFBQU8sQUFBQyxBQUFDO0FBQ3ZELFFBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFHLEFBQWEsQUFBQztBQUNsQyxRQUFJLEFBQUssUUFBRyxBQUFNLE9BQUMsQUFBRSxJQUFFLEFBQUksQUFBQyxBQUFDO0FBRTdCLEFBQUksU0FBQyxBQUFLLEFBQUUsQUFBQztBQUViLEFBQUUsT0FBQyxBQUFTLFVBQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQzNCO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyxlQUFDLEFBQUcsSUFBQyxFQUFXLGdCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBUyxBQUFFLGtCQUFoQixBQUFHOztBQUN4QyxRQUFJLEFBQUksT0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVcsWUFBNkIsQUFBUyxBQUFDLEFBQUM7QUFDM0UsQUFBRSxPQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQUUsQUFBQyxBQUFDLEFBQUMsQUFDOUI7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEVBQWMsbUJBQUUs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Y0FBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQUssQUFBRSxlQUFaLEFBQUc7O0FBQ3RDLFFBQUksQUFBRyxNQUFxQyxBQUFFLEFBQUM7QUFFL0MsQUFBRyxBQUFDLFNBQUMsSUFBSSxBQUFDLElBQUMsQUFBSyxPQUFFLEFBQUMsSUFBQyxBQUFDLEdBQUUsQUFBQyxBQUFFLEtBQUUsQUFBQztBQUMzQixBQUFHLFlBQUMsQUFBSSxLQUFDLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBRyxBQUFrQyxBQUFDLEFBQUMsQUFDL0Q7QUFBQztBQUVELEFBQUUsT0FBQyxBQUFTLFVBQUMsQUFBSSxLQUFDLElBQUksQUFBZSxnQkFBQyxBQUFHLElBQUMsQUFBTyxBQUFFLEFBQUMsQUFBQyxBQUFDLEFBQ3hEO0FBQUMsQUFBQyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb25jYXRSZWZlcmVuY2UgfSBmcm9tICcuLi9leHByZXNzaW9ucy9jb25jYXQnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgVFJVRV9SRUZFUkVOQ0UsIEZBTFNFX1JFRkVSRU5DRSB9IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFB1YmxpY1ZNIH0gZnJvbSBcIi4uLy4uL3ZtXCI7XG5pbXBvcnQgeyBBcmd1bWVudHMgfSBmcm9tIFwiLi4vLi4vdm0vYXJndW1lbnRzXCI7XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiA9ICh2bTogUHVibGljVk0pID0+IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8VD47XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5IZWxwZXIsICh2bSwgeyBvcDE6IF9oZWxwZXIgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBoZWxwZXIgPSB2bS5jb25zdGFudHMuZ2V0RnVuY3Rpb248SGVscGVyPihfaGVscGVyKTtcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdmFsdWUgPSBoZWxwZXIodm0sIGFyZ3MpO1xuXG4gIGFyZ3MuY2xlYXIoKTtcblxuICB2bS5ldmFsU3RhY2sucHVzaCh2YWx1ZSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkZ1bmN0aW9uLCAodm0sIHsgb3AxOiBfZnVuY3Rpb24gfSkgPT4ge1xuICBsZXQgZnVuYyA9IHZtLmNvbnN0YW50cy5nZXRGdW5jdGlvbjxGdW5jdGlvbkV4cHJlc3Npb248T3BhcXVlPj4oX2Z1bmN0aW9uKTtcbiAgdm0uZXZhbFN0YWNrLnB1c2goZnVuYyh2bSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRWYXJpYWJsZSwgKHZtLCB7IG9wMTogc3ltYm9sIH0pID0+IHtcbiAgbGV0IGV4cHIgPSB2bS5yZWZlcmVuY2VGb3JTeW1ib2woc3ltYm9sKTtcbiAgdm0uZXZhbFN0YWNrLnB1c2goZXhwcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlNldFZhcmlhYmxlLCAodm0sIHsgb3AxOiBzeW1ib2wgfSkgPT4ge1xuICBsZXQgZXhwciA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICB2bS5zY29wZSgpLmJpbmRTeW1ib2woc3ltYm9sLCBleHByKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUmVzb2x2ZU1heWJlTG9jYWwsICh2bSwgeyBvcDE6IF9uYW1lIH0pID0+IHtcbiAgbGV0IG5hbWUgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9uYW1lKTtcbiAgbGV0IGxvY2FscyA9IHZtLnNjb3BlKCkuZ2V0UGFydGlhbE1hcCgpITtcblxuICBsZXQgcmVmID0gbG9jYWxzW25hbWVdO1xuICBpZiAocmVmID09PSB1bmRlZmluZWQpIHtcbiAgICByZWYgPSB2bS5nZXRTZWxmKCkuZ2V0KG5hbWUpO1xuICB9XG5cbiAgdm0uZXZhbFN0YWNrLnB1c2gocmVmKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUm9vdFNjb3BlLCAodm0sIHsgb3AxOiBzeW1ib2xzLCBvcDI6IGJpbmRDYWxsZXJTY29wZSB9KSA9PiB7XG4gIHZtLnB1c2hSb290U2NvcGUoc3ltYm9scywgISFiaW5kQ2FsbGVyU2NvcGUpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRQcm9wZXJ0eSwgKHZtLCB7IG9wMTogX2tleSB9KSA9PiB7XG4gIGxldCBrZXkgPSB2bS5jb25zdGFudHMuZ2V0U3RyaW5nKF9rZXkpO1xuICBsZXQgZXhwciA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICB2bS5ldmFsU3RhY2sucHVzaChleHByLmdldChrZXkpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaEJsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICBsZXQgYmxvY2sgPSBfYmxvY2sgPyB2bS5jb25zdGFudHMuZ2V0QmxvY2soX2Jsb2NrKSA6IG51bGw7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGJsb2NrKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaEJsb2NrcywgKHZtLCB7IG9wMTogZGVmYXVsdEJsb2NrLCBvcDI6IGludmVyc2VCbG9jayB9KSA9PiB7XG4gIGlmIChkZWZhdWx0QmxvY2spIHZtLmV2YWxTdGFjay5wdXNoKHZtLmNvbnN0YW50cy5nZXRCbG9jayhkZWZhdWx0QmxvY2spKTtcbiAgaWYgKGludmVyc2VCbG9jaykgdm0uZXZhbFN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldEJsb2NrKGludmVyc2VCbG9jaykpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5HZXRCbG9jaywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgdm0uZXZhbFN0YWNrLnB1c2godm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGFzQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBoYXNCbG9jayA9ICEhdm0uc2NvcGUoKS5nZXRCbG9jayhfYmxvY2spO1xuICB2bS5ldmFsU3RhY2sucHVzaChoYXNCbG9jayA/IFRSVUVfUkVGRVJFTkNFIDogRkFMU0VfUkVGRVJFTkNFKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGFzQmxvY2tQYXJhbXMsICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IHZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgbGV0IGhhc0Jsb2NrUGFyYW1zID0gYmxvY2sgJiYgYmxvY2suc3ltYm9sVGFibGUucGFyYW1ldGVycy5sZW5ndGg7XG4gIHZtLmV2YWxTdGFjay5wdXNoKGhhc0Jsb2NrUGFyYW1zID8gVFJVRV9SRUZFUkVOQ0UgOiBGQUxTRV9SRUZFUkVOQ0UpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db25jYXQsICh2bSwgeyBvcDE6IGNvdW50IH0pID0+IHtcbiAgbGV0IG91dDogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+W10gPSBbXTtcblxuICBmb3IgKGxldCBpPWNvdW50OyBpPjA7IGktLSkge1xuICAgIG91dC5wdXNoKHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpKTtcbiAgfVxuXG4gIHZtLmV2YWxTdGFjay5wdXNoKG5ldyBDb25jYXRSZWZlcmVuY2Uob3V0LnJldmVyc2UoKSkpO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxBQUFPLFNBQUUsQUFBYyxBQUFNLHNCQUFNLEFBQWUsQUFBQztBQUNuRCxBQUFPLFNBQUUsQUFBZSxBQUFFLHVCQUFNLEFBQXVCLEFBQUM7QUFFeEQsQUFBTyxTQUFFLEFBQWMsZ0JBQUUsQUFBZSxBQUFFLHVCQUFNLEFBQWtCLEFBQUM7QUFRbkUsQUFBYyxlQUFDLEFBQUcsSUFBQyxFQUFTLGNBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFPLEFBQUUsZUFBZCxBQUFHOztBQUN0QyxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBSyxBQUFDO0FBQ3JCLFFBQUksQUFBTSxTQUFHLEFBQUUsR0FBQyxBQUFTLFVBQUMsQUFBVyxZQUFTLEFBQU8sQUFBQyxBQUFDO0FBQ3ZELFFBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFHLEFBQWEsQUFBQztBQUNsQyxRQUFJLEFBQUssUUFBRyxBQUFNLE9BQUMsQUFBRSxJQUFFLEFBQUksQUFBQyxBQUFDO0FBRTdCLEFBQUksU0FBQyxBQUFLLEFBQUUsQUFBQztBQUViLEFBQUUsT0FBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDLEFBQ3ZCO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyxlQUFDLEFBQUcsSUFBQyxFQUFXLGdCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBUyxBQUFFLGtCQUFoQixBQUFHOztBQUN4QyxRQUFJLEFBQUksT0FBRyxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQVcsWUFBNkIsQUFBUyxBQUFDLEFBQUM7QUFDM0UsQUFBRSxPQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQUUsQUFBQyxBQUFDLEFBQUMsQUFDMUI7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEVBQWMsbUJBQUUs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ZXNDb250ZW50IjpbImltcG9ydCB7IEFQUEVORF9PUENPREVTLCBPcCB9IGZyb20gJy4uLy4uL29wY29kZXMnO1xuaW1wb3J0IHsgQ29uY2F0UmVmZXJlbmNlIH0gZnJvbSAnLi4vZXhwcmVzc2lvbnMvY29uY2F0JztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IFRSVUVfUkVGRVJFTkNFLCBGQUxTRV9SRUZFUkVOQ0UgfSBmcm9tICcuLi8uLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gXCIuLi8uLi92bVwiO1xuaW1wb3J0IHsgQXJndW1lbnRzIH0gZnJvbSBcIi4uLy4uL3ZtL2FyZ3VtZW50c1wiO1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb248VD4gPSAodm06IFB1YmxpY1ZNKSA9PiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPFQ+O1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGVscGVyLCAodm0sIHsgb3AxOiBfaGVscGVyIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBoZWxwZXIgPSB2bS5jb25zdGFudHMuZ2V0RnVuY3Rpb248SGVscGVyPihfaGVscGVyKTtcbiAgbGV0IGFyZ3MgPSBzdGFjay5wb3A8QXJndW1lbnRzPigpO1xuICBsZXQgdmFsdWUgPSBoZWxwZXIodm0sIGFyZ3MpO1xuXG4gIGFyZ3MuY2xlYXIoKTtcblxuICB2bS5zdGFjay5wdXNoKHZhbHVlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRnVuY3Rpb24sICh2bSwgeyBvcDE6IF9mdW5jdGlvbiB9KSA9PiB7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uPEZ1bmN0aW9uRXhwcmVzc2lvbjxPcGFxdWU+PihfZnVuY3Rpb24pO1xuICB2bS5zdGFjay5wdXNoKGZ1bmModm0pKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0VmFyaWFibGUsICh2bSwgeyBvcDE6IHN5bWJvbCB9KSA9PiB7XG4gIGxldCBleHByID0gdm0ucmVmZXJlbmNlRm9yU3ltYm9sKHN5bWJvbCk7XG4gIHZtLnN0YWNrLnB1c2goZXhwcik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlNldFZhcmlhYmxlLCAodm0sIHsgb3AxOiBzeW1ib2wgfSkgPT4ge1xuICBsZXQgZXhwciA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG4gIHZtLnNjb3BlKCkuYmluZFN5bWJvbChzeW1ib2wsIGV4cHIpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXNvbHZlTWF5YmVMb2NhbCwgKHZtLCB7IG9wMTogX25hbWUgfSkgPT4ge1xuICBsZXQgbmFtZSA9IHZtLmNvbnN0YW50cy5nZXRTdHJpbmcoX25hbWUpO1xuICBsZXQgbG9jYWxzID0gdm0uc2NvcGUoKS5nZXRQYXJ0aWFsTWFwKCkhO1xuXG4gIGxldCByZWYgPSBsb2NhbHNbbmFtZV07XG4gIGlmIChyZWYgPT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHZtLmdldFNlbGYoKS5nZXQobmFtZSk7XG4gIH1cblxuICB2bS5zdGFjay5wdXNoKHJlZik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlJvb3RTY29wZSwgKHZtLCB7IG9wMTogc3ltYm9scywgb3AyOiBiaW5kQ2FsbGVyU2NvcGUgfSkgPT4ge1xuICB2bS5wdXNoUm9vdFNjb3BlKHN5bWJvbHMsICEhYmluZENhbGxlclNjb3BlKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UHJvcGVydHksICh2bSwgeyBvcDE6IF9rZXkgfSkgPT4ge1xuICBsZXQga2V5ID0gdm0uY29uc3RhbnRzLmdldFN0cmluZyhfa2V5KTtcbiAgbGV0IGV4cHIgPSB2bS5zdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICB2bS5zdGFjay5wdXNoKGV4cHIuZ2V0KGtleSkpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoQmxvY2ssICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IF9ibG9jayA/IHZtLmNvbnN0YW50cy5nZXRCbG9jayhfYmxvY2spIDogbnVsbDtcbiAgdm0uc3RhY2sucHVzaChibG9jayk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldEJsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICB2bS5zdGFjay5wdXNoKHZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkhhc0Jsb2NrLCAodm0sIHsgb3AxOiBfYmxvY2sgfSkgPT4ge1xuICBsZXQgaGFzQmxvY2sgPSAhIXZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgdm0uc3RhY2sucHVzaChoYXNCbG9jayA/IFRSVUVfUkVGRVJFTkNFIDogRkFMU0VfUkVGRVJFTkNFKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSGFzQmxvY2tQYXJhbXMsICh2bSwgeyBvcDE6IF9ibG9jayB9KSA9PiB7XG4gIGxldCBibG9jayA9IHZtLnNjb3BlKCkuZ2V0QmxvY2soX2Jsb2NrKTtcbiAgbGV0IGhhc0Jsb2NrUGFyYW1zID0gYmxvY2sgJiYgYmxvY2suc3ltYm9sVGFibGUucGFyYW1ldGVycy5sZW5ndGg7XG4gIHZtLnN0YWNrLnB1c2goaGFzQmxvY2tQYXJhbXMgPyBUUlVFX1JFRkVSRU5DRSA6IEZBTFNFX1JFRkVSRU5DRSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbmNhdCwgKHZtLCB7IG9wMTogY291bnQgfSkgPT4ge1xuICBsZXQgb3V0OiBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT5bXSA9IFtdO1xuXG4gIGZvciAobGV0IGk9Y291bnQ7IGk+MDsgaS0tKSB7XG4gICAgb3V0LnB1c2godm0uc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKSk7XG4gIH1cblxuICB2bS5zdGFjay5wdXNoKG5ldyBDb25jYXRSZWZlcmVuY2Uob3V0LnJldmVyc2UoKSkpO1xufSk7XG4iXX0=

@@ -21,4 +21,4 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

APPEND_OPCODES.add(52 /* PutIterator */, function (vm) {
var stack = vm.evalStack;
APPEND_OPCODES.add(53 /* PutIterator */, function (vm) {
var stack = vm.stack;
var listRef = stack.pop();

@@ -31,20 +31,17 @@ var key = stack.pop();

});
APPEND_OPCODES.add(50 /* EnterList */, function (vm, _ref) {
var start = _ref.op2,
end = _ref.op3;
APPEND_OPCODES.add(51 /* EnterList */, function (vm, _ref) {
var start = _ref.op1;
vm.enterList(start, end);
vm.enterList(start);
});
APPEND_OPCODES.add(51 /* ExitList */, function (vm) {
APPEND_OPCODES.add(52 /* ExitList */, function (vm) {
return vm.exitList();
});
APPEND_OPCODES.add(53 /* Iterate */, function (vm, _ref2) {
var breaks = _ref2.op1,
start = _ref2.op2,
end = _ref2.op3;
APPEND_OPCODES.add(54 /* Iterate */, function (vm, _ref2) {
var breaks = _ref2.op1;
var stack = vm.evalStack;
var item = stack.top().next();
var stack = vm.stack;
var item = stack.peek().next();
if (item) {
var tryOpcode = vm.iterate(start, end, item.memo, item.value);
var tryOpcode = vm.iterate(item.memo, item.value);
vm.enterItem(item.key, tryOpcode);

@@ -55,2 +52,2 @@ } else {

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLEFBQU8sU0FBa0IsQUFBaUIsQUFBOEMseUJBQU0sQUFBb0IsQUFBQztBQUNuSCxBQUFPLFNBQUUsQUFBYyxBQUFNLHNCQUFNLEFBQWUsQUFBQyxBQUVuRDs7O0FBSUUsdUNBQVksQUFBNkI7OztBQUN2QyxBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQVMsVUFBQyxBQUFHLEFBQUM7QUFDekIsQUFBSSxhQUFDLEFBQVMsWUFBRyxBQUFTLEFBQUMsQUFDN0I7QUFBQzs7d0NBRUQsQUFBSztBQUNILEFBQU0sZUFBQyxDQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBTyxBQUFFLEFBQUMsQUFDbkM7QUFBQyxBQUNGOzs7OztBQUVELEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxBQUFFO0FBQ25DLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLEFBQUM7QUFDekIsUUFBSSxBQUFPLFVBQUcsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQztBQUMxRCxRQUFJLEFBQUcsTUFBRyxBQUFLLE1BQUMsQUFBRyxBQUFrQyxBQUFDO0FBQ3RELFFBQUksQUFBUSxXQUFHLEFBQUUsR0FBQyxBQUFHLElBQUMsQUFBVyxZQUFDLEFBQU8sU0FBRSxBQUFHLElBQUMsQUFBSyxBQUFFLEFBQUMsQUFBQztBQUN4RCxRQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWlCLGtCQUFDLEFBQVEsQUFBQyxBQUFDO0FBRS9DLEFBQUssVUFBQyxBQUFJLEtBQUMsQUFBUSxBQUFDLEFBQUM7QUFDckIsQUFBSyxVQUFDLEFBQUksS0FBQyxJQUFJLEFBQXlCLDBCQUFDLEFBQVEsU0FBQyxBQUFTLEFBQUMsQUFBQyxBQUFDLEFBQ2hFO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFZLGlCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBSyxhQUFWLEFBQUc7UUFBYyxBQUFHLEFBQUUsV0FBVixBQUFHOztBQUNyRCxBQUFFLE9BQUMsQUFBUyxVQUFDLEFBQUssT0FBRSxBQUFHLEFBQUMsQUFBQyxBQUMzQjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBVztBQUFFLEFBQUUsV0FBSSxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUMsQUFBQzs7QUFFckQsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFNLGVBQVgsQUFBRztRQUFlLEFBQUssY0FBVixBQUFHO1FBQWMsQUFBRyxBQUFFLFlBQVYsQUFBRzs7QUFDaEUsUUFBSSxBQUFLLFFBQUcsQUFBRSxHQUFDLEFBQVMsQUFBQztBQUN6QixRQUFJLEFBQUksT0FBRyxBQUFLLE1BQUMsQUFBRyxBQUFxQixNQUFDLEFBQUksQUFBRSxBQUFDO0FBRWpELEFBQUUsQUFBQyxRQUFDLEFBQUksQUFBQyxNQUFDLEFBQUM7QUFDVCxZQUFJLEFBQVMsWUFBRyxBQUFFLEdBQUMsQUFBTyxRQUFDLEFBQUssT0FBRSxBQUFHLEtBQUUsQUFBSSxLQUFDLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUM7QUFDOUQsQUFBRSxXQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQVMsQUFBQyxBQUFDLEFBQ3BDO0FBQUMsQUFBQyxBQUFJLFdBQUMsQUFBQztBQUNOLEFBQUUsV0FBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEI7QUFBQyxBQUNIO0FBQUMsQUFBQyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBUYWcsIFJlZmVyZW5jZSwgUmVmZXJlbmNlSXRlcmF0b3IsIEl0ZXJhdGlvbkFydGlmYWN0cywgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuY2xhc3MgSXRlcmFibGVQcmVzZW5jZVJlZmVyZW5jZSBpbXBsZW1lbnRzIFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHB1YmxpYyB0YWc6IFRhZztcbiAgcHJpdmF0ZSBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBjb25zdHJ1Y3RvcihhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHRoaXMudGFnID0gYXJ0aWZhY3RzLnRhZztcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgfVxuXG4gIHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hcnRpZmFjdHMuaXNFbXB0eSgpO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXRJdGVyYXRvciwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBsaXN0UmVmID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcbiAgbGV0IGtleSA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPHN0cmluZz4+KCk7XG4gIGxldCBpdGVyYWJsZSA9IHZtLmVudi5pdGVyYWJsZUZvcihsaXN0UmVmLCBrZXkudmFsdWUoKSk7XG4gIGxldCBpdGVyYXRvciA9IG5ldyBSZWZlcmVuY2VJdGVyYXRvcihpdGVyYWJsZSk7XG5cbiAgc3RhY2sucHVzaChpdGVyYXRvcik7XG4gIHN0YWNrLnB1c2gobmV3IEl0ZXJhYmxlUHJlc2VuY2VSZWZlcmVuY2UoaXRlcmF0b3IuYXJ0aWZhY3RzKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkVudGVyTGlzdCwgKHZtLCB7IG9wMjogc3RhcnQsIG9wMzogZW5kIH0pID0+IHtcbiAgdm0uZW50ZXJMaXN0KHN0YXJ0LCBlbmQpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FeGl0TGlzdCwgdm0gPT4gdm0uZXhpdExpc3QoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JdGVyYXRlLCAodm0sIHsgb3AxOiBicmVha3MsIG9wMjogc3RhcnQsIG9wMzogZW5kIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgaXRlbSA9IHN0YWNrLnRvcDxSZWZlcmVuY2VJdGVyYXRvcj4oKS5uZXh0KCk7XG5cbiAgaWYgKGl0ZW0pIHtcbiAgICBsZXQgdHJ5T3Bjb2RlID0gdm0uaXRlcmF0ZShzdGFydCwgZW5kLCBpdGVtLm1lbW8sIGl0ZW0udmFsdWUpO1xuICAgIHZtLmVudGVySXRlbShpdGVtLmtleSwgdHJ5T3Bjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2bS5nb3RvKGJyZWFrcyk7XG4gIH1cbn0pO1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsaXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLEFBQU8sU0FBa0IsQUFBaUIsQUFBOEMseUJBQU0sQUFBb0IsQUFBQztBQUNuSCxBQUFPLFNBQUUsQUFBYyxBQUFNLHNCQUFNLEFBQWUsQUFBQyxBQUVuRDs7O0FBSUUsdUNBQVksQUFBNkI7OztBQUN2QyxBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQVMsVUFBQyxBQUFHLEFBQUM7QUFDekIsQUFBSSxhQUFDLEFBQVMsWUFBRyxBQUFTLEFBQUMsQUFDN0I7QUFBQzs7d0NBRUQsQUFBSztBQUNILEFBQU0sZUFBQyxDQUFDLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBTyxBQUFFLEFBQUMsQUFDbkM7QUFBQyxBQUNGOzs7OztBQUVELEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBYyxtQkFBRSxBQUFFO0FBQ25DLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUM7QUFDckIsUUFBSSxBQUFPLFVBQUcsQUFBSyxNQUFDLEFBQUcsQUFBa0MsQUFBQztBQUMxRCxRQUFJLEFBQUcsTUFBRyxBQUFLLE1BQUMsQUFBRyxBQUFrQyxBQUFDO0FBQ3RELFFBQUksQUFBUSxXQUFHLEFBQUUsR0FBQyxBQUFHLElBQUMsQUFBVyxZQUFDLEFBQU8sU0FBRSxBQUFHLElBQUMsQUFBSyxBQUFFLEFBQUMsQUFBQztBQUN4RCxRQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWlCLGtCQUFDLEFBQVEsQUFBQyxBQUFDO0FBRS9DLEFBQUssVUFBQyxBQUFJLEtBQUMsQUFBUSxBQUFDLEFBQUM7QUFDckIsQUFBSyxVQUFDLEFBQUksS0FBQyxJQUFJLEFBQXlCLDBCQUFDLEFBQVEsU0FBQyxBQUFTLEFBQUMsQUFBQyxBQUFDLEFBQ2hFO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFZLGlCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBSyxBQUFFLGFBQVosQUFBRzs7QUFDekMsQUFBRSxPQUFDLEFBQVMsVUFBQyxBQUFLLEFBQUMsQUFBQyxBQUN0QjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBVztBQUFFLEFBQUUsV0FBSSxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUMsQUFBQzs7QUFFckQsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFVLGVBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFNLEFBQUUsZUFBYixBQUFHOztBQUN2QyxRQUFJLEFBQUssUUFBRyxBQUFFLEdBQUMsQUFBSyxBQUFDO0FBQ3JCLFFBQUksQUFBSSxPQUFHLEFBQUssTUFBQyxBQUFJLEFBQXFCLE9BQUMsQUFBSSxBQUFFLEFBQUM7QUFFbEQsQUFBRSxBQUFDLFFBQUMsQUFBSSxBQUFDLE1BQUMsQUFBQztBQUNULFlBQUksQUFBUyxZQUFHLEFBQUUsR0FBQyxBQUFPLFFBQUMsQUFBSSxLQUFDLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUM7QUFDbEQsQUFBRSxXQUFDLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQVMsQUFBQyxBQUFDLEFBQ3BDO0FBQUMsQUFBQyxBQUFJLFdBQUMsQUFBQztBQUNOLEFBQUUsV0FBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUMsQUFDbEI7QUFBQyxBQUNIO0FBQUMsQUFBQyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3BhcXVlIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBUYWcsIFJlZmVyZW5jZSwgUmVmZXJlbmNlSXRlcmF0b3IsIEl0ZXJhdGlvbkFydGlmYWN0cywgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBBUFBFTkRfT1BDT0RFUywgT3AgfSBmcm9tICcuLi8uLi9vcGNvZGVzJztcblxuY2xhc3MgSXRlcmFibGVQcmVzZW5jZVJlZmVyZW5jZSBpbXBsZW1lbnRzIFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHB1YmxpYyB0YWc6IFRhZztcbiAgcHJpdmF0ZSBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBjb25zdHJ1Y3RvcihhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cykge1xuICAgIHRoaXMudGFnID0gYXJ0aWZhY3RzLnRhZztcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgfVxuXG4gIHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hcnRpZmFjdHMuaXNFbXB0eSgpO1xuICB9XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXRJdGVyYXRvciwgdm0gPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGxpc3RSZWYgPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuICBsZXQga2V5ID0gc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8c3RyaW5nPj4oKTtcbiAgbGV0IGl0ZXJhYmxlID0gdm0uZW52Lml0ZXJhYmxlRm9yKGxpc3RSZWYsIGtleS52YWx1ZSgpKTtcbiAgbGV0IGl0ZXJhdG9yID0gbmV3IFJlZmVyZW5jZUl0ZXJhdG9yKGl0ZXJhYmxlKTtcblxuICBzdGFjay5wdXNoKGl0ZXJhdG9yKTtcbiAgc3RhY2sucHVzaChuZXcgSXRlcmFibGVQcmVzZW5jZVJlZmVyZW5jZShpdGVyYXRvci5hcnRpZmFjdHMpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXJMaXN0LCAodm0sIHsgb3AxOiBzdGFydCB9KSA9PiB7XG4gIHZtLmVudGVyTGlzdChzdGFydCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXRMaXN0LCB2bSA9PiB2bS5leGl0TGlzdCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkl0ZXJhdGUsICh2bSwgeyBvcDE6IGJyZWFrcyB9KSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgaXRlbSA9IHN0YWNrLnBlZWs8UmVmZXJlbmNlSXRlcmF0b3I+KCkubmV4dCgpO1xuXG4gIGlmIChpdGVtKSB7XG4gICAgbGV0IHRyeU9wY29kZSA9IHZtLml0ZXJhdGUoaXRlbS5tZW1vLCBpdGVtLnZhbHVlKTtcbiAgICB2bS5lbnRlckl0ZW0oaXRlbS5rZXksIHRyeU9wY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgdm0uZ290byhicmVha3MpO1xuICB9XG59KTtcbiJdfQ==
import { APPEND_OPCODES } from '../../opcodes';
APPEND_OPCODES.add(70 /* GetPartialTemplate */, function (vm) {
var stack = vm.evalStack;
APPEND_OPCODES.add(69 /* GetPartialTemplate */, function (vm) {
var stack = vm.stack;
var definition = stack.pop();
stack.push(definition.value().template.asPartial());
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsQUFBTyxTQUFFLEFBQWMsQUFBTSxzQkFBTSxBQUFlLEFBQUM7QUFHbkQsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFxQiwwQkFBRSxBQUFFO0FBQzFDLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFTLEFBQUM7QUFDekIsUUFBSSxBQUFVLGFBQUcsQUFBSyxNQUFDLEFBQUcsQUFBMkQsQUFBQztBQUN0RixBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFRLFNBQUMsQUFBUyxBQUFFLEFBQUMsQUFBQyxBQUN0RDtBQUFDLEFBQUMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3BhcnRpYWwnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UGFydGlhbFRlbXBsYXRlLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLmV2YWxTdGFjaztcbiAgbGV0IGRlZmluaXRpb24gPSBzdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxQYXJ0aWFsRGVmaW5pdGlvbjxUZW1wbGF0ZU1ldGE+Pj4oKTtcbiAgc3RhY2sucHVzaChkZWZpbml0aW9uLnZhbHVlKCkudGVtcGxhdGUuYXNQYXJ0aWFsKCkpO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhcnRpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsQUFBTyxTQUFFLEFBQWMsQUFBTSxzQkFBTSxBQUFlLEFBQUM7QUFHbkQsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFxQiwwQkFBRSxBQUFFO0FBQzFDLFFBQUksQUFBSyxRQUFHLEFBQUUsR0FBQyxBQUFLLEFBQUM7QUFDckIsUUFBSSxBQUFVLGFBQUcsQUFBSyxNQUFDLEFBQUcsQUFBMkQsQUFBQztBQUN0RixBQUFLLFVBQUMsQUFBSSxLQUFDLEFBQVUsV0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFRLFNBQUMsQUFBUyxBQUFFLEFBQUMsQUFBQyxBQUN0RDtBQUFDLEFBQUMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBQYXJ0aWFsRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL3BhcnRpYWwnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuR2V0UGFydGlhbFRlbXBsYXRlLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgZGVmaW5pdGlvbiA9IHN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPFBhcnRpYWxEZWZpbml0aW9uPFRlbXBsYXRlTWV0YT4+PigpO1xuICBzdGFjay5wdXNoKGRlZmluaXRpb24udmFsdWUoKS50ZW1wbGF0ZS5hc1BhcnRpYWwoKSk7XG59KTtcbiJdfQ==

@@ -15,41 +15,28 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }

import { NULL_REFERENCE, UNDEFINED_REFERENCE, TRUE_REFERENCE, FALSE_REFERENCE, PrimitiveReference } from '../../references';
APPEND_OPCODES.add(18 /* ReserveLocals */, function (vm, _ref) {
var amount = _ref.op1;
vm.reserveLocals(amount);
});
APPEND_OPCODES.add(19 /* ReleaseLocals */, function (vm) {
return vm.releaseLocals();
});
APPEND_OPCODES.add(14 /* SetLocal */, function (vm, _ref2) {
var position = _ref2.op1;
vm.setLocal(position, vm.evalStack.pop());
});
APPEND_OPCODES.add(15 /* GetLocal */, function (vm, _ref3) {
var position = _ref3.op1;
vm.evalStack.push(vm.getLocal(position));
});
APPEND_OPCODES.add(21 /* ChildScope */, function (vm) {
APPEND_OPCODES.add(20 /* ChildScope */, function (vm) {
return vm.pushChildScope();
});
APPEND_OPCODES.add(22 /* PopScope */, function (vm) {
APPEND_OPCODES.add(21 /* PopScope */, function (vm) {
return vm.popScope();
});
APPEND_OPCODES.add(39 /* PushDynamicScope */, function (vm) {
APPEND_OPCODES.add(38 /* PushDynamicScope */, function (vm) {
return vm.pushDynamicScope();
});
APPEND_OPCODES.add(40 /* PopDynamicScope */, function (vm) {
APPEND_OPCODES.add(39 /* PopDynamicScope */, function (vm) {
return vm.popDynamicScope();
});
APPEND_OPCODES.add(12 /* Constant */, function (vm, _ref4) {
var other = _ref4.op1;
APPEND_OPCODES.add(12 /* Immediate */, function (vm, _ref) {
var number = _ref.op1;
vm.evalStack.push(vm.constants.getOther(other));
vm.stack.push(number);
});
APPEND_OPCODES.add(13 /* Primitive */, function (vm, _ref5) {
var primitive = _ref5.op1;
APPEND_OPCODES.add(13 /* Constant */, function (vm, _ref2) {
var other = _ref2.op1;
var stack = vm.evalStack;
vm.stack.push(vm.constants.getOther(other));
});
APPEND_OPCODES.add(14 /* PrimitiveReference */, function (vm, _ref3) {
var primitive = _ref3.op1;
var stack = vm.stack;
var flag = (primitive & 3 << 30) >>> 30;

@@ -82,10 +69,23 @@ var value = primitive & ~(3 << 30);

});
APPEND_OPCODES.add(16 /* Dup */, function (vm) {
return vm.evalStack.dup();
APPEND_OPCODES.add(15 /* Dup */, function (vm, _ref4) {
var register = _ref4.op1,
offset = _ref4.op2;
var position = vm.fetchValue(register) - offset;
vm.stack.dup(position);
});
APPEND_OPCODES.add(17 /* Pop */, function (vm) {
return vm.evalStack.pop();
APPEND_OPCODES.add(16 /* Pop */, function (vm, _ref5) {
var count = _ref5.op1;
return vm.stack.pop(count);
});
APPEND_OPCODES.add(38 /* BindDynamicScope */, function (vm, _ref6) {
var _names = _ref6.op1;
APPEND_OPCODES.add(17 /* Load */, function (vm, _ref6) {
var register = _ref6.op1;
return vm.load(register);
});
APPEND_OPCODES.add(18 /* Fetch */, function (vm, _ref7) {
var register = _ref7.op1;
return vm.fetch(register);
});
APPEND_OPCODES.add(37 /* BindDynamicScope */, function (vm, _ref8) {
var _names = _ref8.op1;

@@ -95,37 +95,42 @@ var names = vm.constants.getArray(_names);

});
APPEND_OPCODES.add(47 /* Enter */, function (vm, _ref7) {
var args = _ref7.op1,
start = _ref7.op2,
end = _ref7.op3;
return vm.enter(args, start, end);
APPEND_OPCODES.add(46 /* PushFrame */, function (vm) {
return vm.pushFrame();
});
APPEND_OPCODES.add(48 /* Exit */, function (vm) {
APPEND_OPCODES.add(47 /* PopFrame */, function (vm) {
return vm.popFrame();
});
APPEND_OPCODES.add(48 /* Enter */, function (vm, _ref9) {
var args = _ref9.op1;
return vm.enter(args);
});
APPEND_OPCODES.add(49 /* Exit */, function (vm) {
return vm.exit();
});
APPEND_OPCODES.add(41 /* CompileDynamicBlock */, function (vm) {
var stack = vm.evalStack;
APPEND_OPCODES.add(40 /* CompileDynamicBlock */, function (vm) {
var stack = vm.stack;
var block = stack.pop();
stack.push(block ? block.compileDynamic(vm.env) : null);
});
APPEND_OPCODES.add(42 /* InvokeStatic */, function (vm, _ref8) {
var _block = _ref8.op1;
APPEND_OPCODES.add(41 /* InvokeStatic */, function (vm, _ref10) {
var _block = _ref10.op1;
var block = vm.constants.getBlock(_block);
vm.invokeBlock(block);
var compiled = block.compileStatic(vm.env);
vm.call(compiled.start);
});
APPEND_OPCODES.add(43 /* InvokeDynamic */, function (vm, _ref9) {
var _invoker = _ref9.op1;
APPEND_OPCODES.add(42 /* InvokeDynamic */, function (vm, _ref11) {
var _invoker = _ref11.op1;
var invoker = vm.constants.getOther(_invoker);
var block = vm.evalStack.pop();
var block = vm.stack.pop();
invoker.invoke(vm, block);
});
APPEND_OPCODES.add(44 /* Jump */, function (vm, _ref10) {
var target = _ref10.op1;
APPEND_OPCODES.add(43 /* Jump */, function (vm, _ref12) {
var target = _ref12.op1;
return vm.goto(target);
});
APPEND_OPCODES.add(45 /* JumpIf */, function (vm, _ref11) {
var target = _ref11.op1;
APPEND_OPCODES.add(44 /* JumpIf */, function (vm, _ref13) {
var target = _ref13.op1;
var reference = vm.evalStack.pop();
var reference = vm.stack.pop();
if (isConst(reference)) {

@@ -143,6 +148,6 @@ if (reference.value()) {

});
APPEND_OPCODES.add(46 /* JumpUnless */, function (vm, _ref12) {
var target = _ref12.op1;
APPEND_OPCODES.add(45 /* JumpUnless */, function (vm, _ref14) {
var target = _ref14.op1;
var reference = vm.evalStack.pop();
var reference = vm.stack.pop();
if (isConst(reference)) {

@@ -160,3 +165,3 @@ if (!reference.value()) {

});
APPEND_OPCODES.add(23 /* Return */, function (vm) {
APPEND_OPCODES.add(22 /* Return */, function (vm) {
return vm.return();

@@ -173,6 +178,6 @@ });

};
APPEND_OPCODES.add(49 /* Test */, function (vm, _ref13) {
var _func = _ref13.op1;
APPEND_OPCODES.add(50 /* Test */, function (vm, _ref15) {
var _func = _ref15.op1;
var stack = vm.evalStack;
var stack = vm.stack;
var operand = stack.pop();

@@ -313,2 +318,2 @@ var func = vm.constants.getFunction(_func);

}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBLEFBQU8sU0FBYyxBQUFjLEFBQUUsc0JBQU0sQUFBZSxBQUFDO0FBRzNELEFBQU8sU0FBYSxBQUFjLEFBQTBCLHNCQUFNLEFBQW9CLEFBQUM7QUFDdkYsQUFBTyxTQUFrQixBQUFjLEFBQUUsc0JBQU0sQUFBZSxBQUFDO0FBQy9ELEFBQU8sU0FBRSxBQUFZLGNBQUUsQUFBYyxnQkFBaUIsQUFBTyxTQUFFLEFBQVUsQUFBRSxrQkFBTSxBQUFvQixBQUFDO0FBRXRHLEFBQU8sU0FBRSxBQUFjLEFBQVksc0JBQU0sQUFBZSxBQUFDO0FBTXpELEFBQU8sU0FDTCxBQUFjLGdCQUNkLEFBQW1CLHFCQUNuQixBQUFjLGdCQUNkLEFBQWUsaUJBQ2YsQUFBa0IsQUFDbkIsMEJBQU0sQUFBa0IsQUFBQztBQUUxQixBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQWdCLHFCQUFFLFVBQUMsQUFBRSxBQUFFO1FBQU8sQUFBTSxBQUFFLGNBQWIsQUFBRzs7QUFDN0MsQUFBRSxPQUFDLEFBQWEsY0FBQyxBQUFNLEFBQUMsQUFBQyxBQUMzQjtBQUFDLEFBQUMsQUFBQztBQUVILEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBZ0I7QUFBRSxBQUFFLFdBQUksQUFBRSxHQUFDLEFBQWEsQUFBRSxBQUFDLEFBQUM7O0FBRS9ELEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBVyxnQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQVEsQUFBRSxpQkFBZixBQUFHOztBQUN4QyxBQUFFLE9BQUMsQUFBUSxTQUFDLEFBQVEsVUFBRSxBQUFFLEdBQUMsQUFBUyxVQUFDLEFBQUcsQUFBRSxBQUFDLEFBQUMsQUFDNUM7QUFBQyxBQUFDLEFBQUM7QUFFSCxBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQVcsZ0JBQUUsVUFBQyxBQUFFLEFBQUU7UUFBTyxBQUFRLEFBQUUsaUJBQWYsQUFB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aEIsQUFBSSxrQkFBRSxBQUFJLEtBQUMsQUFBSTtBQUNmLEFBQUksa0JBQUUsQ0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFPLEFBQUUsQUFBQyxBQUFDLEFBQ3ZDLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlIH0gZnJvbSAnLi4vYmxvY2tzJztcbmltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBVcGRhdGluZ1ZNLCBWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFN5bWJvbFRhYmxlIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIENvbnN0UmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQ09OU1RBTlRfVEFHLCBSZWZlcmVuY2VDYWNoZSwgUmV2aXNpb24sIFRhZywgaXNDb25zdCwgaXNNb2RpZmllZCB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7XG4gIEJsb2NrXG59IGZyb20gJy4uLy4uL3NjYW5uZXInO1xuXG5pbXBvcnQge1xuICBOVUxMX1JFRkVSRU5DRSxcbiAgVU5ERUZJTkVEX1JFRkVSRU5DRSxcbiAgVFJVRV9SRUZFUkVOQ0UsXG4gIEZBTFNFX1JFRkVSRU5DRSxcbiAgUHJpbWl0aXZlUmVmZXJlbmNlXG59IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUmVzZXJ2ZUxvY2FscywgKHZtLCB7IG9wMTogYW1vdW50IH0pID0+IHtcbiAgdm0ucmVzZXJ2ZUxvY2FscyhhbW91bnQpO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZWxlYXNlTG9jYWxzLCB2bSA9PiB2bS5yZWxlYXNlTG9jYWxzKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuU2V0TG9jYWwsICh2bSwgeyBvcDE6IHBvc2l0aW9uIH0pID0+IHtcbiAgdm0uc2V0TG9jYWwocG9zaXRpb24sIHZtLmV2YWxTdGFjay5wb3AoKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkdldExvY2FsLCAodm0sIHsgb3AxOiBwb3NpdGlvbiB9KSA9PiB7XG4gIHZtLmV2YWxTdGFjay5wdXNoKHZtLmdldExvY2FsKHBvc2l0aW9uKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNoaWxkU2NvcGUsIHZtID0+IHZtLnB1c2hDaGlsZFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wU2NvcGUsIHZtID0+IHZtLnBvcFNjb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucHVzaER5bmFtaWNTY29wZSgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcER5bmFtaWNTY29wZSwgdm0gPT4gdm0ucG9wRHluYW1pY1Njb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29uc3RhbnQsICh2bSwgeyBvcDE6IG90aGVyIH0pID0+IHtcbiAgdm0uZXZhbFN0YWNrLnB1c2godm0uY29uc3RhbnRzLmdldE90aGVyKG90aGVyKSk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlByaW1pdGl2ZSwgKHZtLCB7IG9wMTogcHJpbWl0aXZlIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgZmxhZyA9IChwcmltaXRpdmUgJiAoMyA8PCAzMCkpID4+PiAzMDtcbiAgbGV0IHZhbHVlID0gcHJpbWl0aXZlICYgfigzIDw8IDMwKTtcblxuICBzd2l0Y2ggKGZsYWcpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodmFsdWUpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YWNrLnB1c2goUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSh2bS5jb25zdGFudHMuZ2V0U3RyaW5nKHZhbHVlKSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAyOlxuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlIDA6IHN0YWNrLnB1c2goRkFMU0VfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogc3RhY2sucHVzaChUUlVFX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IHN0YWNrLnB1c2goTlVMTF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAzOiBzdGFjay5wdXNoKFVOREVGSU5FRF9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkR1cCwgdm0gPT4gdm0uZXZhbFN0YWNrLmR1cCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcCwgdm0gPT4gdm0uZXZhbFN0YWNrLnBvcCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkJpbmREeW5hbWljU2NvcGUsICh2bSwgeyBvcDE6IF9uYW1lcyB9KSA9PiB7XG4gIGxldCBuYW1lcyA9IHZtLmNvbnN0YW50cy5nZXRBcnJheShfbmFtZXMpO1xuICB2bS5iaW5kRHluYW1pY1Njb3BlKG5hbWVzKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuRW50ZXIsICh2bSwgeyBvcDE6IGFyZ3MsIG9wMjogc3RhcnQsIG9wMzogZW5kIH0pID0+IHZtLmVudGVyKGFyZ3MsIHN0YXJ0LCBlbmQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkV4aXQsICh2bSkgPT4gdm0uZXhpdCgpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkNvbXBpbGVEeW5hbWljQmxvY2ssIHZtID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uZXZhbFN0YWNrO1xuICBsZXQgYmxvY2sgPSBzdGFjay5wb3A8QmxvY2s+KCk7XG4gIHN0YWNrLnB1c2goYmxvY2sgPyBibG9jay5jb21waWxlRHluYW1pYyh2bS5lbnYpIDogbnVsbCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkludm9rZVN0YXRpYywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uY29uc3RhbnRzLmdldEJsb2NrKF9ibG9jayk7XG4gIHZtLmludm9rZUJsb2NrKGJsb2NrKTtcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNJbnZva2VyPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBpbnZva2Uodm06IFZNLCBibG9jazogT3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+Pik6IHZvaWQ7XG59XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JbnZva2VEeW5hbWljLCAodm0sIHsgb3AxOiBfaW52b2tlciB9KSA9PiB7XG4gIGxldCBpbnZva2VyID0gdm0uY29uc3RhbnRzLmdldE90aGVyPER5bmFtaWNJbnZva2VyPFN5bWJvbFRhYmxlPj4oX2ludm9rZXIpO1xuICBsZXQgYmxvY2sgPSB2bS5ldmFsU3RhY2sucG9wPE9wdGlvbjxDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTeW1ib2xUYWJsZT4+PigpO1xuICBpbnZva2VyLmludm9rZSh2bSwgYmxvY2spO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4gdm0uZ290byh0YXJnZXQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkp1bXBJZiwgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAocmVmZXJlbmNlLnZhbHVlKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNhY2hlID0gbmV3IFJlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoY2FjaGUucGVlaygpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSnVtcFVubGVzcywgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpO1xuXG4gIGlmIChpc0NvbnN0KHJlZmVyZW5jZSkpIHtcbiAgICBpZiAoIXJlZmVyZW5jZS52YWx1ZSgpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBjYWNoZSA9IG5ldyBSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKCFjYWNoZS5wZWVrKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5SZXR1cm4sIHZtID0+IHZtLnJldHVybigpKTtcblxuZXhwb3J0IHR5cGUgVGVzdEZ1bmN0aW9uID0gKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIGVudjogRW52aXJvbm1lbnQpID0+IFJlZmVyZW5jZTxib29sZWFuPjtcblxuZXhwb3J0IGNvbnN0IENvbnN0VGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgX2VudjogRW52aXJvbm1lbnQpOiBSZWZlcmVuY2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IENvbnN0UmVmZXJlbmNlKCEhcmVmLnZhbHVlKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IFNpbXBsZVRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIF9lbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIHJlZiBhcyBSZWZlcmVuY2U8Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBlbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIGVudi50b0NvbmRpdGlvbmFsUmVmZXJlbmNlKHJlZik7XG59O1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuVGVzdCwgKHZtLCB7IG9wMTogX2Z1bmMgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5ldmFsU3RhY2s7XG4gIGxldCBvcGVyYW5kID0gc3RhY2sucG9wKCk7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uKF9mdW5jKTtcbiAgc3RhY2sucHVzaChmdW5jKG9wZXJhbmQsIHZtLmVudikpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBBc3NlcnQgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJhc3NlcnRcIjtcblxuICBwcml2YXRlIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+O1xuXG4gIGNvbnN0cnVjdG9yKGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQoY2FjaGUucmV2YWxpZGF0ZSgpKSkge1xuICAgICAgdm0udGhyb3coKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgdHlwZSwgX2d1aWQsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGV4cGVjdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGV4cGVjdGVkID0gU3RyaW5nKGNhY2hlLnBlZWsoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGFyZ3M6IFtdLFxuICAgICAgZGV0YWlsczogeyBleHBlY3RlZCB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJqdW1wLWlmLW5vdC1tb2RpZmllZFwiO1xuXG4gIHByaXZhdGUgbGFzdFJldmlzaW9uOiBSZXZpc2lvbjtcblxuICBjb25zdHJ1Y3Rvcih0YWc6IFRhZywgcHJpdmF0ZSB0YXJnZXQ6IExhYmVsT3Bjb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IHRhZztcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyB0YWcsIHRhcmdldCwgbGFzdFJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF2bS5hbHdheXNSZXZhbGlkYXRlICYmIHRhZy52YWxpZGF0ZShsYXN0UmV2aXNpb24pKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgZGlkTW9kaWZ5KCkge1xuICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGhpcy50YWcudmFsdWUoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLnRhcmdldC5pbnNwZWN0KCkpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZE1vZGlmeU9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImRpZC1tb2RpZnlcIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhcmdldDogSnVtcElmTm90TW9kaWZpZWRPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gQ09OU1RBTlRfVEFHO1xuICB9XG5cbiAgZXZhbHVhdGUoKSB7XG4gICAgdGhpcy50YXJnZXQuZGlkTW9kaWZ5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhYmVsT3Bjb2RlIGltcGxlbWVudHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdGFnOiBUYWcgPSBDT05TVEFOVF9UQUc7XG4gIHB1YmxpYyB0eXBlID0gXCJsYWJlbFwiO1xuICBwdWJsaWMgbGFiZWw6IE9wdGlvbjxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIF9ndWlkOiBudW1iZXI7XG5cbiAgcHJldjogYW55ID0gbnVsbDtcbiAgbmV4dDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihsYWJlbDogc3RyaW5nKSB7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBldmFsdWF0ZSgpIHt9XG5cbiAgaW5zcGVjdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfSBbJHt0aGlzLl9ndWlkfV1gO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMuaW5zcGVjdCgpKV1cbiAgICB9O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBLEFBQU8sU0FBYyxBQUFjLEFBQUUsc0JBQU0sQUFBZSxBQUFDO0FBRzNELEFBQU8sU0FBYSxBQUFjLEFBQTBCLHNCQUFNLEFBQW9CLEFBQUM7QUFDdkYsQUFBTyxTQUFrQixBQUFjLEFBQUUsc0JBQU0sQUFBZSxBQUFDO0FBQy9ELEFBQU8sU0FBRSxBQUFZLGNBQUUsQUFBYyxnQkFBaUIsQUFBTyxTQUFFLEFBQVUsQUFBRSxrQkFBTSxBQUFvQixBQUFDO0FBRXRHLEFBQU8sU0FBRSxBQUFjLEFBQVksc0JBQU0sQUFBZSxBQUFDO0FBTXpELEFBQU8sU0FDTCxBQUFjLGdCQUNkLEFBQW1CLHFCQUNuQixBQUFjLGdCQUNkLEFBQWUsaUJBQ2YsQUFBa0IsQUFDbkIsMEJBQU0sQUFBa0IsQUFBQztBQUUxQixBQUFjLGVBQUMsQUFBRyxJQUFDLEdBQWE7QUFBRSxBQUFFLFdBQUksQUFBRSxHQUFDLEFBQWMsQUFBRSxBQUFDLEFBQUM7O0FBRTdELEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBVztBQUFFLEFBQUUsV0FBSSxBQUFFLEdBQUMsQUFBUSxBQUFFLEFBQUMsQUFBQzs7QUFFckQsQUFBYyxlQUFDLEFBQUcsSUFBQyxHQUFtQjtBQUFFLEFBQUUsV0FBSSxBQUFFLEdBQUMsQUFBZ0IsQUFBRSxBQUFDLEFBQUM7O0FBRXJFLEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBa0I7QUFBRSxBQUFFLFdBQUksQUFBRSxHQUFDLEFBQWUsQUFBRSxBQUFDLEFBQUM7O0FBRW5FLEFBQWMsZUFBQyxBQUFHLElBQUMsR0FBWSxpQkFBRSxVQUFDLEFBQUUsQUFBRTtRQUFPLEFBQU0sQUFBRSxjQUFiLEFBQUc7O0FBQ3pDLEFBQUUsT0FBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQU0sQUFBQyxBQUFDLEFBQ3hCO0FBQUMsQUFBQyxBQUFDO0FBRUgsQUFB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QUFBSyxRQUFHLEFBQUssQUFBQyxBQUNoQztBQUFDOzswQkFFRCxBQUFRLCtCQUFJLENBQUM7OzBCQUViLEFBQU87QUFDTCxBQUFNLEFBQUMsZUFBRyxBQUFJLEtBQUMsQUFBSyxlQUFLLEFBQUksS0FBQyxBQUFLLEFBQUcsQUFBQyxBQUN6QztBQUFDOzswQkFFRCxBQUFNO0FBQ0osQUFBTTtBQUNKLEFBQUksa0JBQUUsQUFBSSxLQUFDLEFBQUs7QUFDaEIsQUFBSSxrQkFBRSxBQUFJLEtBQUMsQUFBSTtBQUNmLEFBQUksa0JBQUUsQ0FBQyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUksS0FBQyxBQUFPLEFBQUUsQUFBQyxBQUFDLEFBQ3ZDLEFBQUMsQUFDSjtBQUxTO0FBS1IsQUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlIH0gZnJvbSAnLi4vYmxvY2tzJztcbmltcG9ydCB7IE9wY29kZUpTT04sIFVwZGF0aW5nT3Bjb2RlIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBVcGRhdGluZ1ZNLCBWTSB9IGZyb20gJy4uLy4uL3ZtJztcbmltcG9ydCB7IFN5bWJvbFRhYmxlIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2UsIENvbnN0UmVmZXJlbmNlLCBWZXJzaW9uZWRQYXRoUmVmZXJlbmNlIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmltcG9ydCB7IE9wdGlvbiwgT3BhcXVlLCBpbml0aWFsaXplR3VpZCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgQ09OU1RBTlRfVEFHLCBSZWZlcmVuY2VDYWNoZSwgUmV2aXNpb24sIFRhZywgaXNDb25zdCwgaXNNb2RpZmllZCB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQVBQRU5EX09QQ09ERVMsIE9wIGFzIE9wIH0gZnJvbSAnLi4vLi4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7XG4gIEJsb2NrXG59IGZyb20gJy4uLy4uL3NjYW5uZXInO1xuXG5pbXBvcnQge1xuICBOVUxMX1JFRkVSRU5DRSxcbiAgVU5ERUZJTkVEX1JFRkVSRU5DRSxcbiAgVFJVRV9SRUZFUkVOQ0UsXG4gIEZBTFNFX1JFRkVSRU5DRSxcbiAgUHJpbWl0aXZlUmVmZXJlbmNlXG59IGZyb20gJy4uLy4uL3JlZmVyZW5jZXMnO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ2hpbGRTY29wZSwgdm0gPT4gdm0ucHVzaENoaWxkU2NvcGUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3BTY29wZSwgdm0gPT4gdm0ucG9wU2NvcGUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5QdXNoRHluYW1pY1Njb3BlLCB2bSA9PiB2bS5wdXNoRHluYW1pY1Njb3BlKCkpO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUG9wRHluYW1pY1Njb3BlLCB2bSA9PiB2bS5wb3BEeW5hbWljU2NvcGUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5JbW1lZGlhdGUsICh2bSwgeyBvcDE6IG51bWJlciB9KSA9PiB7XG4gIHZtLnN0YWNrLnB1c2gobnVtYmVyKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuQ29uc3RhbnQsICh2bSwgeyBvcDE6IG90aGVyIH0pID0+IHtcbiAgdm0uc3RhY2sucHVzaCh2bS5jb25zdGFudHMuZ2V0T3RoZXIob3RoZXIpKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHJpbWl0aXZlUmVmZXJlbmNlLCAodm0sIHsgb3AxOiBwcmltaXRpdmUgfSkgPT4ge1xuICBsZXQgc3RhY2sgPSB2bS5zdGFjaztcbiAgbGV0IGZsYWcgPSAocHJpbWl0aXZlICYgKDMgPDwgMzApKSA+Pj4gMzA7XG4gIGxldCB2YWx1ZSA9IHByaW1pdGl2ZSAmIH4oMyA8PCAzMCk7XG5cbiAgc3dpdGNoIChmbGFnKSB7XG4gICAgY2FzZSAwOlxuICAgICAgc3RhY2sucHVzaChQcmltaXRpdmVSZWZlcmVuY2UuY3JlYXRlKHZhbHVlKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGFjay5wdXNoKFByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUodm0uY29uc3RhbnRzLmdldFN0cmluZyh2YWx1ZSkpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMjpcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAwOiBzdGFjay5wdXNoKEZBTFNFX1JFRkVSRU5DRSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDE6IHN0YWNrLnB1c2goVFJVRV9SRUZFUkVOQ0UpOyBicmVhaztcbiAgICAgICAgY2FzZSAyOiBzdGFjay5wdXNoKE5VTExfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogc3RhY2sucHVzaChVTkRFRklORURfUkVGRVJFTkNFKTsgYnJlYWs7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5EdXAsICh2bSwgeyBvcDE6IHJlZ2lzdGVyLCBvcDI6IG9mZnNldCB9KSA9PiB7XG4gIGxldCBwb3NpdGlvbiA9IHZtLmZldGNoVmFsdWU8bnVtYmVyPihyZWdpc3RlcikgLSBvZmZzZXQ7XG4gIHZtLnN0YWNrLmR1cChwb3NpdGlvbik7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlBvcCwgKHZtLCB7IG9wMTogY291bnQgfSkgPT4gdm0uc3RhY2sucG9wKGNvdW50KSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Mb2FkLCAodm0sIHsgb3AxOiByZWdpc3RlciB9KSA9PiB2bS5sb2FkKHJlZ2lzdGVyKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5GZXRjaCwgKHZtLCB7IG9wMTogcmVnaXN0ZXIgfSkgPT4gdm0uZmV0Y2gocmVnaXN0ZXIpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkJpbmREeW5hbWljU2NvcGUsICh2bSwgeyBvcDE6IF9uYW1lcyB9KSA9PiB7XG4gIGxldCBuYW1lcyA9IHZtLmNvbnN0YW50cy5nZXRBcnJheShfbmFtZXMpO1xuICB2bS5iaW5kRHluYW1pY1Njb3BlKG5hbWVzKTtcbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUHVzaEZyYW1lLCB2bSA9PiB2bS5wdXNoRnJhbWUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Qb3BGcmFtZSwgdm0gPT4gdm0ucG9wRnJhbWUoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FbnRlciwgKHZtLCB7IG9wMTogYXJncyB9KSA9PiB2bS5lbnRlcihhcmdzKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5FeGl0LCAodm0pID0+IHZtLmV4aXQoKSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5Db21waWxlRHluYW1pY0Jsb2NrLCB2bSA9PiB7XG4gIGxldCBzdGFjayA9IHZtLnN0YWNrO1xuICBsZXQgYmxvY2sgPSBzdGFjay5wb3A8QmxvY2s+KCk7XG4gIHN0YWNrLnB1c2goYmxvY2sgPyBibG9jay5jb21waWxlRHluYW1pYyh2bS5lbnYpIDogbnVsbCk7XG59KTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkludm9rZVN0YXRpYywgKHZtLCB7IG9wMTogX2Jsb2NrIH0pID0+IHtcbiAgbGV0IGJsb2NrID0gdm0uY29uc3RhbnRzLmdldEJsb2NrKF9ibG9jayk7XG4gIGxldCBjb21waWxlZCA9IGJsb2NrLmNvbXBpbGVTdGF0aWModm0uZW52KTtcbiAgdm0uY2FsbChjb21waWxlZC5zdGFydCk7XG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljSW52b2tlcjxTIGV4dGVuZHMgU3ltYm9sVGFibGU+IHtcbiAgaW52b2tlKHZtOiBWTSwgYmxvY2s6IE9wdGlvbjxDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTPj4pOiB2b2lkO1xufVxuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuSW52b2tlRHluYW1pYywgKHZtLCB7IG9wMTogX2ludm9rZXIgfSkgPT4ge1xuICBsZXQgaW52b2tlciA9IHZtLmNvbnN0YW50cy5nZXRPdGhlcjxEeW5hbWljSW52b2tlcjxTeW1ib2xUYWJsZT4+KF9pbnZva2VyKTtcbiAgbGV0IGJsb2NrID0gdm0uc3RhY2sucG9wPE9wdGlvbjxDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTeW1ib2xUYWJsZT4+PigpO1xuICBpbnZva2VyLmludm9rZSh2bSwgYmxvY2spO1xufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4gdm0uZ290byh0YXJnZXQpKTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLkp1bXBJZiwgKHZtLCB7IG9wMTogdGFyZ2V0IH0pID0+IHtcbiAgbGV0IHJlZmVyZW5jZSA9IHZtLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCk7XG5cbiAgaWYgKGlzQ29uc3QocmVmZXJlbmNlKSkge1xuICAgIGlmIChyZWZlcmVuY2UudmFsdWUoKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcblxuICAgIGlmIChjYWNoZS5wZWVrKCkpIHtcbiAgICAgIHZtLmdvdG8odGFyZ2V0KTtcbiAgICB9XG5cbiAgICB2bS51cGRhdGVXaXRoKG5ldyBBc3NlcnQoY2FjaGUpKTtcbiAgfVxufSk7XG5cbkFQUEVORF9PUENPREVTLmFkZChPcC5KdW1wVW5sZXNzLCAodm0sIHsgb3AxOiB0YXJnZXQgfSkgPT4ge1xuICBsZXQgcmVmZXJlbmNlID0gdm0uc3RhY2sucG9wPFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8T3BhcXVlPj4oKTtcblxuICBpZiAoaXNDb25zdChyZWZlcmVuY2UpKSB7XG4gICAgaWYgKCFyZWZlcmVuY2UudmFsdWUoKSkge1xuICAgICAgdm0uZ290byh0YXJnZXQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgY2FjaGUgPSBuZXcgUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKTtcblxuICAgIGlmICghY2FjaGUucGVlaygpKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuXG4gICAgdm0udXBkYXRlV2l0aChuZXcgQXNzZXJ0KGNhY2hlKSk7XG4gIH1cbn0pO1xuXG5BUFBFTkRfT1BDT0RFUy5hZGQoT3AuUmV0dXJuLCB2bSA9PiB2bS5yZXR1cm4oKSk7XG5cbmV4cG9ydCB0eXBlIFRlc3RGdW5jdGlvbiA9IChyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBlbnY6IEVudmlyb25tZW50KSA9PiBSZWZlcmVuY2U8Ym9vbGVhbj47XG5cbmV4cG9ydCBjb25zdCBDb25zdFRlc3Q6IFRlc3RGdW5jdGlvbiA9IGZ1bmN0aW9uKHJlZjogUmVmZXJlbmNlPE9wYXF1ZT4sIF9lbnY6IEVudmlyb25tZW50KTogUmVmZXJlbmNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBDb25zdFJlZmVyZW5jZSghIXJlZi52YWx1ZSgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTaW1wbGVUZXN0OiBUZXN0RnVuY3Rpb24gPSBmdW5jdGlvbihyZWY6IFJlZmVyZW5jZTxPcGFxdWU+LCBfZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiByZWYgYXMgUmVmZXJlbmNlPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50VGVzdDogVGVzdEZ1bmN0aW9uID0gZnVuY3Rpb24ocmVmOiBSZWZlcmVuY2U8T3BhcXVlPiwgZW52OiBFbnZpcm9ubWVudCk6IFJlZmVyZW5jZTxib29sZWFuPiB7XG4gIHJldHVybiBlbnYudG9Db25kaXRpb25hbFJlZmVyZW5jZShyZWYpO1xufTtcblxuQVBQRU5EX09QQ09ERVMuYWRkKE9wLlRlc3QsICh2bSwgeyBvcDE6IF9mdW5jIH0pID0+IHtcbiAgbGV0IHN0YWNrID0gdm0uc3RhY2s7XG4gIGxldCBvcGVyYW5kID0gc3RhY2sucG9wKCk7XG4gIGxldCBmdW5jID0gdm0uY29uc3RhbnRzLmdldEZ1bmN0aW9uKF9mdW5jKTtcbiAgc3RhY2sucHVzaChmdW5jKG9wZXJhbmQsIHZtLmVudikpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBBc3NlcnQgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJhc3NlcnRcIjtcblxuICBwcml2YXRlIGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+O1xuXG4gIGNvbnN0cnVjdG9yKGNhY2hlOiBSZWZlcmVuY2VDYWNoZTxPcGFxdWU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IGNhY2hlLnRhZztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgaWYgKGlzTW9kaWZpZWQoY2FjaGUucmV2YWxpZGF0ZSgpKSkge1xuICAgICAgdm0udGhyb3coKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IHsgdHlwZSwgX2d1aWQsIGNhY2hlIH0gPSB0aGlzO1xuXG4gICAgbGV0IGV4cGVjdGVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoY2FjaGUucGVlaygpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGV4cGVjdGVkID0gU3RyaW5nKGNhY2hlLnBlZWsoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGd1aWQ6IF9ndWlkLFxuICAgICAgdHlwZSxcbiAgICAgIGFyZ3M6IFtdLFxuICAgICAgZGV0YWlsczogeyBleHBlY3RlZCB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJqdW1wLWlmLW5vdC1tb2RpZmllZFwiO1xuXG4gIHByaXZhdGUgbGFzdFJldmlzaW9uOiBSZXZpc2lvbjtcblxuICBjb25zdHJ1Y3Rvcih0YWc6IFRhZywgcHJpdmF0ZSB0YXJnZXQ6IExhYmVsT3Bjb2RlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRhZyA9IHRhZztcbiAgICB0aGlzLmxhc3RSZXZpc2lvbiA9IHRhZy52YWx1ZSgpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICBsZXQgeyB0YWcsIHRhcmdldCwgbGFzdFJldmlzaW9uIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF2bS5hbHdheXNSZXZhbGlkYXRlICYmIHRhZy52YWxpZGF0ZShsYXN0UmV2aXNpb24pKSB7XG4gICAgICB2bS5nb3RvKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgZGlkTW9kaWZ5KCkge1xuICAgIHRoaXMubGFzdFJldmlzaW9uID0gdGhpcy50YWcudmFsdWUoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBPcGNvZGVKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGFyZ3M6IFtKU09OLnN0cmluZ2lmeSh0aGlzLnRhcmdldC5pbnNwZWN0KCkpXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZE1vZGlmeU9wY29kZSBleHRlbmRzIFVwZGF0aW5nT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImRpZC1tb2RpZnlcIjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhcmdldDogSnVtcElmTm90TW9kaWZpZWRPcGNvZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGFnID0gQ09OU1RBTlRfVEFHO1xuICB9XG5cbiAgZXZhbHVhdGUoKSB7XG4gICAgdGhpcy50YXJnZXQuZGlkTW9kaWZ5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhYmVsT3Bjb2RlIGltcGxlbWVudHMgVXBkYXRpbmdPcGNvZGUge1xuICBwdWJsaWMgdGFnOiBUYWcgPSBDT05TVEFOVF9UQUc7XG4gIHB1YmxpYyB0eXBlID0gXCJsYWJlbFwiO1xuICBwdWJsaWMgbGFiZWw6IE9wdGlvbjxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIF9ndWlkOiBudW1iZXI7XG5cbiAgcHJldjogYW55ID0gbnVsbDtcbiAgbmV4dDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihsYWJlbDogc3RyaW5nKSB7XG4gICAgaW5pdGlhbGl6ZUd1aWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBldmFsdWF0ZSgpIHt9XG5cbiAgaW5zcGVjdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxhYmVsfSBbJHt0aGlzLl9ndWlkfV1gO1xuICB9XG5cbiAgdG9KU09OKCk6IE9wY29kZUpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBndWlkOiB0aGlzLl9ndWlkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgYXJnczogW0pTT04uc3RyaW5naWZ5KHRoaXMuaW5zcGVjdCgpKV1cbiAgICB9O1xuICB9XG59XG4iXX0=

@@ -7,3 +7,3 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

import { Ops } from '@glimmer/wire-format';
import { debugSlice } from './opcodes';
import { Register, debugSlice } from './opcodes';
import { ATTRS_BLOCK, ClientSide, compileStatement } from './scanner';

@@ -98,10 +98,10 @@ import { expr } from './syntax/functions';

b.startLabels();
// let state = b.local();
// b.setLocal(state);
if (dynamicTag) {
b.fetch(Register.s1);
expr(dynamicTag, b);
b.dup();
b.load(Register.s1);
b.test('simple');
b.jumpUnless('BODY');
b.dup();
b.fetch(Register.s1);
b.pushComponentOperations();

@@ -114,3 +114,3 @@ b.openDynamicElement();

if (dynamicTag || staticTag) {
// b.didCreateElement(state);
b.didCreateElement(Register.s0);
var attrs = this.attrs['buffer'];

@@ -125,9 +125,6 @@ for (var i = 0; i < attrs.length; i++) {

if (dynamicTag) {
b.dup();
b.fetch(Register.s1);
b.test('simple');
b.jumpUnless('ELSE');
b.jumpUnless('END');
b.closeElement();
b.jump('END');
b.label('ELSE');
b.pop();
} else if (staticTag) {

@@ -137,3 +134,6 @@ b.closeElement();

b.label('END');
// b.didRenderLayout(state);
b.didRenderLayout(Register.s0);
if (dynamicTag) {
b.load(Register.s1);
}
b.stopLabels();

@@ -252,30 +252,32 @@ var start = b.start;

ComponentBuilder.prototype.dynamic = function dynamic(definitionArgs, getDefinition, args) {
var _this = this;
var params = args[0],
hash = args[1],
block = args[2],
inverse = args[3];
var builder = this.builder;
this.builder.unit(function (b) {
var params = args[0],
hash = args[1],
block = args[2],
inverse = args[3];
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
var meta = _this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
b.compileArgs(definitionArgs[0], definitionArgs[1], true);
b.helper(helper);
b.dup();
b.test('simple');
b.closure(2, function (b) {
b.jumpUnless('ELSE');
b.pushDynamicComponentManager();
b.invokeComponent(null, params, hash, block, inverse);
b.jump('END');
b.label('ELSE');
b.pop();
});
});
if (!definitionArgs || definitionArgs.length === 0) {
throw new Error("Dynamic syntax without an argument");
}
var meta = this.builder.meta.templateMeta;
function helper(vm, args) {
return getDefinition(vm, args, meta);
}
builder.startLabels();
builder.pushFrame();
builder.returnTo('END');
builder.compileArgs(definitionArgs[0], definitionArgs[1], true);
builder.helper(helper);
builder.dup();
builder.test('simple');
builder.enter(2);
builder.jumpUnless('ELSE');
builder.pushDynamicComponentManager();
builder.invokeComponent(null, params, hash, block, inverse);
builder.label('ELSE');
builder.exit();
builder.return();
builder.label('END');
builder.popFrame();
builder.stopLabels();
};

@@ -288,2 +290,2 @@

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsQUFBTyxTQUEwQixBQUF1QixBQUFFLCtCQUFNLEFBQW1CLEFBQUM7QUFFcEYsQUFBTyxTQUFFLEFBQUcsQUFBZ0IsV0FBTSxBQUFzQixBQUFDO0FBR3pELEFBQU8sU0FBRSxBQUFVLEFBQUUsa0JBQU0sQUFBVyxBQUFDO0FBRXZDLEFBQU8sU0FBRSxBQUFXLGFBQUUsQUFBVSxZQUFFLEFBQWdCLEFBQUUsd0JBQU0sQUFBVyxBQUFDO0FBUXRFLEFBQU8sU0FBRSxBQUFJLEFBQUUsWUFBTSxBQUFvQixBQUFDO0FBRTFDLE9BQU8sQUFBZ0Isc0JBQU0sQUFBNEIsQUFBQztBQWMxRCxBQUFNLDhCQUF3QixBQUE0QixZQUFFLEFBQWdCO0FBQzFFLFFBQUksQUFBTyxVQUFHLElBQUksQUFBc0IsdUJBQUMsQUFBRyxBQUFDLEFBQUM7QUFFOUMsQUFBVSxlQUFDLEFBQU8sUUFBQyxBQUFPLEFBQUMsQUFBQztBQUU1QixBQUFNLFdBQUMsQUFBTyxRQUFDLEFBQU8sQUFBRSxBQUFDLEFBQzNCO0FBQUMsQUFRRDs7O0FBR0Usb0NBQW1CLEFBQWdCOzs7QUFBaEIsYUFBRyxNQUFILEFBQUcsQUFBYSxBQUFHO0FBQUM7O3FDQUV2QyxBQUFVLGlDQUFDLEFBQThCO0FBQ3ZDLEFBQUksYUFBQyxBQUFLLFFBQUcsSUFBSSxBQUFjLGVBQUMsQUFBSSxLQUFDLEFBQUcsS0FBRSxBQUFNLEFBQUMsQUFBQyxBQUNwRDtBQUFDOztxQ0FFRCxBQUFVLGlDQUFDLEFBQThCO0FBQ3ZDLEFBQUksYUFBQyxBQUFLLFFBQUcsSUFBSSxBQUFnQixpQkFBQyxBQUFJLEtBQUMsQUFBRyxLQUFFLEFBQU0sQUFBQyxBQUFDLEFBQ3REO0FBQUM7O3FDQUVELEFBQU87QUFDTCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFPLEFBQUUsQUFB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QUMsQUFBZSxnQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQUksTUFBRSxBQUFLLE9BQUUsQUFBTyxBQUFDLEFBQUM7QUFDdEQsQUFBQyxrQkFBQyxBQUFJLEtBQUMsQUFBSyxBQUFDLEFBQUM7QUFDZCxBQUFDLGtCQUFDLEFBQUssTUFBQyxBQUFNLEFBQUMsQUFBQztBQUNoQixBQUFDLGtCQUFDLEFBQUcsQUFBRSxBQUFDLEFBQ1Y7QUFBQyxBQUFDLEFBQUMsQUFDTDtBQUFDLEFBQUMsQUFBQyxBQUNMO0FBQUMsQUFDRjs7OztBQUVELEFBQU0sd0JBQWtCLEFBQWdCLEtBQUUsQUFBcUI7QUFDN0QsQUFBTSxXQUFDLElBQUksQUFBZ0IsaUJBQUMsQUFBRyxLQUFFLEFBQUksQUFBQyxBQUFDLEFBQ3pDO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGFxdWUsIENvbXBpbGF0aW9uTWV0YSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljUHJvZ3JhbSwgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBNYXliZSwgT3B0aW9uIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgeyBPcHMsIFRlbXBsYXRlTWV0YSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcblxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL3RlbXBsYXRlJztcbmltcG9ydCB7IGRlYnVnU2xpY2UgfSBmcm9tICcuL29wY29kZXMnO1xuXG5pbXBvcnQgeyBBVFRSU19CTE9DSywgQ2xpZW50U2lkZSwgY29tcGlsZVN0YXRlbWVudCB9IGZyb20gJy4vc2Nhbm5lcic7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudEFyZ3MsXG4gIENvbXBvbmVudEJ1aWxkZXIgYXMgSUNvbXBvbmVudEJ1aWxkZXIsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uXG59IGZyb20gJy4vb3Bjb2RlLWJ1aWxkZXInO1xuXG5pbXBvcnQgeyBleHByIH0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0vYXBwZW5kJztcbmltcG9ydCB7IElBcmd1bWVudHMgfSBmcm9tICcuL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb21waWxlZC9vcGNvZGVzL2V4cHJlc3Npb25zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsYWJsZUxheW91dCB7XG4gIGNvbXBpbGUoYnVpbGRlcjogQ29tcG9uZW50LkNvbXBvbmVudExheW91dEJ1aWxkZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUxheW91dChjb21waWxhYmxlOiBDb21waWxhYmxlTGF5b3V0LCBlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gIGxldCBidWlsZGVyID0gbmV3IENvbXBvbmVudExheW91dEJ1aWxkZXIoZW52KTtcblxuICBjb21waWxhYmxlLmNvbXBpbGUoYnVpbGRlcik7XG5cbiAgcmV0dXJuIGJ1aWxkZXIuY29tcGlsZSgpO1xufVxuXG5pbnRlcmZhY2UgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgdGFnOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlcjtcbiAgYXR0cnM6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXI7XG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbTtcbn1cblxuY2xhc3MgQ29tcG9uZW50TGF5b3V0QnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBpbm5lcjogSW5uZXJMYXlvdXRCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50KSB7fVxuXG4gIHdyYXBMYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBXcmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGZyb21MYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBVbndyYXBwZWRCdWlsZGVyKHRoaXMuZW52LCBsYXlvdXQpO1xuICB9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5jb21waWxlKCk7XG4gIH1cblxuICBnZXQgdGFnKCk6IENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci50YWc7XG4gIH1cblxuICBnZXQgYXR0cnMoKTogQ29tcG9uZW50LkNvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuYXR0cnM7XG4gIH1cbn1cblxuY2xhc3MgV3JhcHBlZEJ1aWxkZXIgaW1wbGVtZW50cyBJbm5lckxheW91dEJ1aWxkZXIge1xuICBwdWJsaWMgdGFnID0gbmV3IENvbXBvbmVudFRhZ0J1aWxkZXIoKTtcbiAgcHVibGljIGF0dHJzID0gbmV3IENvbXBvbmVudEF0dHJzQnVpbGRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50LCBwcml2YXRlIGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge31cblxuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICAgIC8vPT09PT09PT1EWU5BTUlDXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhCT0RZKVxuICAgIC8vICAgICAgICBPcGVuRHluYW1pY1ByaW1pdGl2ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgRGlkQ3JlYXRlRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5hdHRyIHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgRmx1c2hFbGVtZW50XG4gICAgLy8gQk9EWTogIE5vb3BcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhFTkQpXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vIEVORDogICBOb29wXG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG4gICAgLy9cbiAgICAvLz09PT09PT09U1RBVElDXG4gICAgLy8gICAgICAgIE9wZW5QcmltaXRpdmVFbGVtZW50T3Bjb2RlXG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5ib2R5IHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgQ2xvc2VFbGVtZW50XG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG5cbiAgICBsZXQgeyBlbnYsIGxheW91dCB9ID0gdGhpcztcbiAgICBsZXQgbWV0YSA9IHsgdGVtcGxhdGVNZXRhOiBsYXlvdXQubWV0YSwgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMsIGFzUGFydGlhbDogZmFsc2UgfTtcblxuICAgIGxldCBkeW5hbWljVGFnID0gdGhpcy50YWcuZ2V0RHluYW1pYygpO1xuICAgIGxldCBzdGF0aWNUYWcgPSB0aGlzLnRhZy5nZXRTdGF0aWMoKTtcblxuICAgIGxldCBiID0gYnVpbGRlcihlbnYsIG1ldGEpO1xuICAgIGIuc3RhcnRMYWJlbHMoKTtcblxuICAgIC8vIGxldCBzdGF0ZSA9IGIubG9jYWwoKTtcbiAgICAvLyBiLnNldExvY2FsKHN0YXRlKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBleHByKGR5bmFtaWNUYWcsIGIpO1xuXG4gICAgICBiLmR1cCgpO1xuICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcblxuICAgICAgYi5qdW1wVW5sZXNzKCdCT0RZJyk7XG5cbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5EeW5hbWljRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGljVGFnKSB7XG4gICAgICBiLnB1c2hDb21wb25lbnRPcGVyYXRpb25zKCk7XG4gICAgICBiLm9wZW5FbGVtZW50V2l0aE9wZXJhdGlvbnMoc3RhdGljVGFnKTtcbiAgICB9XG5cbiAgICBpZiAoZHluYW1pY1RhZyB8fCBzdGF0aWNUYWcpIHtcbiAgICAgIC8vIGIuZGlkQ3JlYXRlRWxlbWVudChzdGF0ZSk7XG5cbiAgICAgIGxldCBhdHRycyA9IHRoaXMuYXR0cnNbJ2J1ZmZlciddO1xuXG4gICAgICBmb3IgKGxldCBpPTA7IGk8YXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcGlsZVN0YXRlbWVudChhdHRyc1tpXSwgYik7XG4gICAgICB9XG5cbiAgICAgIGIuZmx1c2hFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnQk9EWScpO1xuICAgIGIuaW52b2tlU3RhdGljKGxheW91dC5hc0Jsb2NrKCkpO1xuXG4gICAgaWYgKGR5bmFtaWNUYWcpIHtcbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuICAgICAgYi5qdW1wVW5sZXNzKCdFTFNFJyk7XG4gICAgICBiLmNsb3NlRWxlbWVudCgpO1xuICAgICAgYi5qdW1wKCdFTkQnKTtcbiAgICAgIGIubGFiZWwoJ0VMU0UnKTtcbiAgICAgIGIucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzdGF0aWNUYWcpIHtcbiAgICAgIGIuY2xvc2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgYi5sYWJlbCgnRU5EJyk7XG5cbiAgICAvLyBiLmRpZFJlbmRlckxheW91dChzdGF0ZSk7XG5cbiAgICBiLnN0b3BMYWJlbHMoKTtcblxuICAgIGxldCBzdGFydCA9IGIuc3RhcnQ7XG4gICAgbGV0IGVuZCA9IGIuZmluYWxpemUoKTtcblxuICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgIHJldHVybiBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhcnQsIGVuZCwge1xuICAgICAgbWV0YSxcbiAgICAgIGhhc0V2YWw6IGxheW91dC5oYXNFdmFsLFxuICAgICAgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMuY29uY2F0KFtBVFRSU19CTE9DS10pXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgVW53cmFwcGVkQnVpbGRlciBpbXBsZW1lbnRzIElubmVyTGF5b3V0QnVpbGRlciB7XG4gIHB1YmxpYyBhdHRycyA9IG5ldyBDb21wb25lbnRBdHRyc0J1aWxkZXIoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW52OiBFbnZpcm9ubWVudCwgcHJpdmF0ZSBsYXlvdXQ6IFRlbXBsYXRlPFRlbXBsYXRlTWV0YT4pIHt9XG5cbiAgZ2V0IHRhZygpOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCVUc6IENhbm5vdCBjYWxsIGB0YWdgIG9uIGFuIFVud3JhcHBlZEJ1aWxkZXInKTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gICAgbGV0IHsgZW52LCBsYXlvdXQgfSA9IHRoaXM7XG4gICAgcmV0dXJuIGxheW91dC5hc0xheW91dCh0aGlzLmF0dHJzWydidWZmZXInXSkuY29tcGlsZUR5bmFtaWMoZW52KTtcbiAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRUYWdCdWlsZGVyIGltcGxlbWVudHMgQ29tcG9uZW50LkNvbXBvbmVudFRhZ0J1aWxkZXIge1xuICBwdWJsaWMgaXNEeW5hbWljOiBPcHRpb248Ym9vbGVhbj4gPSBudWxsO1xuICBwdWJsaWMgaXNTdGF0aWM6IE9wdGlvbjxib29sZWFuPiA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWNUYWdOYW1lOiBPcHRpb248c3RyaW5nPiA9IG51bGw7XG4gIHB1YmxpYyBkeW5hbWljVGFnTmFtZTogT3B0aW9uPFdpcmVGb3JtYXQuRXhwcmVzc2lvbj4gPSBudWxsO1xuXG4gIGdldER5bmFtaWMoKTogTWF5YmU8V2lyZUZvcm1hdC5FeHByZXNzaW9uPiB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljKSB7XG4gICAgICByZXR1cm4gdGhpcy5keW5hbWljVGFnTmFtZTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0aWMoKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaXNTdGF0aWMpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRpY1RhZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljKHRhZ05hbWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNTdGF0aWMgPSB0cnVlO1xuICAgIHRoaXMuc3RhdGljVGFnTmFtZSA9IHRhZ05hbWU7XG4gIH1cblxuICBkeW5hbWljKHRhZ05hbWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gICAgdGhpcy5pc0R5bmFtaWMgPSB0cnVlO1xuICAgIHRoaXMuZHluYW1pY1RhZ05hbWUgPSBbT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uLCBDbGllbnRTaWRlLk9wcy5GdW5jdGlvbkV4cHJlc3Npb24sIHRhZ05hbWVdO1xuICB9XG59XG5cbmNsYXNzIENvbXBvbmVudEF0dHJzQnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG5cbiAgc3RhdGljKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbnVsbF0pO1xuICB9XG5cbiAgZHluYW1pYyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbkV4cHJlc3Npb248c3RyaW5nPikge1xuICAgIHRoaXMuYnVmZmVyLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgW09wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiwgQ2xpZW50U2lkZS5PcHMuRnVuY3Rpb25FeHByZXNzaW9uLCB2YWx1ZV0sIG51bGxdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QnVpbGRlciBpbXBsZW1lbnRzIElDb21wb25lbnRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBlbnY6IEVudmlyb25tZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnVpbGRlcjogT3Bjb2RlQnVpbGRlckRTTCkge1xuICAgIHRoaXMuZW52ID0gYnVpbGRlci5lbnY7XG4gIH1cblxuICBzdGF0aWMoZGVmaW5pdGlvbjogQ29tcG9uZW50LkNvbXBvbmVudERlZmluaXRpb248T3BhcXVlPiwgYXJnczogQ29tcG9uZW50QXJncykge1xuICAgIGxldCBbcGFyYW1zLCBoYXNoLCBfZGVmYXVsdCwgaW52ZXJzZV0gPSBhcmdzO1xuICAgIGxldCB7IGJ1aWxkZXIgfSA9IHRoaXM7XG5cbiAgICBidWlsZGVyLnB1c2hDb21wb25lbnRNYW5hZ2VyKGRlZmluaXRpb24pO1xuICAgIGJ1aWxkZXIuaW52b2tlQ29tcG9uZW50KG51bGwsIHBhcmFtcywgaGFzaCwgX2RlZmF1bHQsIGludmVyc2UpO1xuICB9XG5cbiAgZHluYW1pYyhkZWZpbml0aW9uQXJnczogQ29tcG9uZW50QXJncywgZ2V0RGVmaW5pdGlvbjogRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIGFyZ3M6IENvbXBvbmVudEFyZ3MpIHtcbiAgICB0aGlzLmJ1aWxkZXIudW5pdChiID0+IHtcbiAgICAgIGxldCBbcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZV0gPSBhcmdzO1xuXG4gICAgICBpZiAoIWRlZmluaXRpb25BcmdzIHx8IGRlZmluaXRpb25BcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEeW5hbWljIHN5bnRheCB3aXRob3V0IGFuIGFyZ3VtZW50XCIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWV0YSA9IHRoaXMuYnVpbGRlci5tZXRhLnRlbXBsYXRlTWV0YTtcblxuICAgICAgZnVuY3Rpb24gaGVscGVyKHZtOiBQdWJsaWNWTSwgYXJnczogSUFyZ3VtZW50cykge1xuICAgICAgICByZXR1cm4gZ2V0RGVmaW5pdGlvbih2bSwgYXJncywgbWV0YSk7XG4gICAgICB9XG5cbiAgICAgIGIuY29tcGlsZUFyZ3MoZGVmaW5pdGlvbkFyZ3NbMF0sIGRlZmluaXRpb25BcmdzWzFdLCB0cnVlKTtcbiAgICAgIGIuaGVscGVyKGhlbHBlcik7XG5cbiAgICAgIGIuZHVwKCk7XG4gICAgICBiLnRlc3QoJ3NpbXBsZScpO1xuXG4gICAgICBiLmNsb3N1cmUoMiwgYiA9PiB7XG4gICAgICAgIGIuanVtcFVubGVzcygnRUxTRScpO1xuICAgICAgICBiLnB1c2hEeW5hbWljQ29tcG9uZW50TWFuYWdlcigpO1xuICAgICAgICBiLmludm9rZUNvbXBvbmVudChudWxsLCBwYXJhbXMsIGhhc2gsIGJsb2NrLCBpbnZlcnNlKTtcbiAgICAgICAgYi5qdW1wKCdFTkQnKTtcbiAgICAgICAgYi5sYWJlbCgnRUxTRScpO1xuICAgICAgICBiLnBvcCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkZXIoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhKSB7XG4gIHJldHVybiBuZXcgT3Bjb2RlQnVpbGRlckRTTChlbnYsIG1ldGEpO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsQUFBTyxTQUEwQixBQUF1QixBQUFFLCtCQUFNLEFBQW1CLEFBQUM7QUFFcEYsQUFBTyxTQUFFLEFBQUcsQUFBZ0IsV0FBTSxBQUFzQixBQUFDO0FBR3pELEFBQU8sU0FBRSxBQUFRLFVBQUUsQUFBVSxBQUFFLGtCQUFNLEFBQVcsQUFBQztBQUVqRCxBQUFPLFNBQUUsQUFBVyxhQUFFLEFBQVUsWUFBRSxBQUFnQixBQUFFLHdCQUFNLEFBQVcsQUFBQztBQVF0RSxBQUFPLFNBQUUsQUFBSSxBQUFFLFlBQU0sQUFBb0IsQUFBQztBQUUxQyxPQUFPLEFBQWdCLHNCQUFNLEFBQTRCLEFBQUM7QUFjMUQsQUFBTSw4QkFBd0IsQUFBNEIsWUFBRSxBQUFnQjtBQUMxRSxRQUFJLEFBQU8sVUFBRyxJQUFJLEFBQXNCLHVCQUFDLEFBQUcsQUFBQyxBQUFDO0FBRTlDLEFBQVUsZUFBQyxBQUFPLFFBQUMsQUFBTyxBQUFDLEFBQUM7QUFFNUIsQUFBTSxXQUFDLEFBQU8sUUFBQyxBQUFPLEFBQUUsQUFBQyxBQUMzQjtBQUFDLEFBUUQ7OztBQUdFLG9DQUFtQixBQUFnQjs7O0FBQWhCLGFBQUcsTUFBSCxBQUFHLEFBQWEsQUFBRztBQUFDOztxQ0FFdkMsQUFBVSxpQ0FBQyxBQUE4QjtBQUN2QyxBQUFJLGFBQUMsQUFBSyxRQUFHLElBQUksQUFBYyxlQUFDLEFBQUksS0FBQyxBQUFHLEtBQUUsQUFBTSxBQUFDLEFBQUMsQUFDcEQ7QUFBQzs7cUNBRUQsQUFBVSxpQ0FBQyxBQUE4QjtBQUN2QyxBQUFJLGFBQUMsQUFBSyxRQUFHLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxLQUFDLEFBQUcsS0FBRSxBQUFNLEFBQUMsQUFBQyxBQUN0RDtBQUFDOztxQ0FFRCxBQUFPO0FBQ0wsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFB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QUFDLEFBQUMsQUFBQyxJQUFFLEFBQWMsZUFBQyxBQUFDLEFBQUMsSUFBRSxBQUFJLEFBQUMsQUFBQztBQUNoRSxBQUFPLGdCQUFDLEFBQU0sT0FBQyxBQUFNLEFBQUMsQUFBQztBQUV2QixBQUFPLGdCQUFDLEFBQUcsQUFBRSxBQUFDO0FBQ2QsQUFBTyxnQkFBQyxBQUFJLEtBQUMsQUFBUSxBQUFDLEFBQUM7QUFFdkIsQUFBTyxnQkFBQyxBQUFLLE1BQUMsQUFBQyxBQUFDLEFBQUM7QUFFakIsQUFBTyxnQkFBQyxBQUFVLFdBQUMsQUFBTSxBQUFDLEFBQUM7QUFFM0IsQUFBTyxnQkFBQyxBQUEyQixBQUFFLEFBQUM7QUFDdEMsQUFBTyxnQkFBQyxBQUFlLGdCQUFDLEFBQUksTUFBRSxBQUFNLFFBQUUsQUFBSSxNQUFFLEFBQUssT0FBRSxBQUFPLEFBQUMsQUFBQztBQUU1RCxBQUFPLGdCQUFDLEFBQUssTUFBQyxBQUFNLEFBQUMsQUFBQztBQUN0QixBQUFPLGdCQUFDLEFBQUksQUFBRSxBQUFDO0FBQ2YsQUFBTyxnQkFBQyxBQUFNLEFBQUUsQUFBQztBQUVqQixBQUFPLGdCQUFDLEFBQUssTUFBQyxBQUFLLEFBQUMsQUFBQztBQUNyQixBQUFPLGdCQUFDLEFBQVEsQUFBRSxBQUFDO0FBRW5CLEFBQU8sZ0JBQUMsQUFBVSxBQUFFLEFBQUMsQUFDdkI7QUFBQyxBQUNGOzs7O0FBRUQsQUFBTSx3QkFBa0IsQUFBZ0IsS0FBRSxBQUFxQjtBQUM3RCxBQUFNLFdBQUMsSUFBSSxBQUFnQixpQkFBQyxBQUFHLEtBQUUsQUFBSSxBQUFDLEFBQUMsQUFDekM7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wYXF1ZSwgQ29tcGlsYXRpb25NZXRhIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBDb21waWxlZER5bmFtaWNQcm9ncmFtLCBDb21waWxlZER5bmFtaWNUZW1wbGF0ZSB9IGZyb20gJy4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCB7IE1heWJlLCBPcHRpb24gfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IE9wcywgVGVtcGxhdGVNZXRhIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4vdGVtcGxhdGUnO1xuaW1wb3J0IHsgUmVnaXN0ZXIsIGRlYnVnU2xpY2UgfSBmcm9tICcuL29wY29kZXMnO1xuXG5pbXBvcnQgeyBBVFRSU19CTE9DSywgQ2xpZW50U2lkZSwgY29tcGlsZVN0YXRlbWVudCB9IGZyb20gJy4vc2Nhbm5lcic7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudEFyZ3MsXG4gIENvbXBvbmVudEJ1aWxkZXIgYXMgSUNvbXBvbmVudEJ1aWxkZXIsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uXG59IGZyb20gJy4vb3Bjb2RlLWJ1aWxkZXInO1xuXG5pbXBvcnQgeyBleHByIH0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcblxuaW1wb3J0IE9wY29kZUJ1aWxkZXJEU0wgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIFdpcmVGb3JtYXQgZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0vYXBwZW5kJztcbmltcG9ydCB7IElBcmd1bWVudHMgfSBmcm9tICcuL3ZtL2FyZ3VtZW50cyc7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb21waWxlZC9vcGNvZGVzL2V4cHJlc3Npb25zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsYWJsZUxheW91dCB7XG4gIGNvbXBpbGUoYnVpbGRlcjogQ29tcG9uZW50LkNvbXBvbmVudExheW91dEJ1aWxkZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUxheW91dChjb21waWxhYmxlOiBDb21waWxhYmxlTGF5b3V0LCBlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbSB7XG4gIGxldCBidWlsZGVyID0gbmV3IENvbXBvbmVudExheW91dEJ1aWxkZXIoZW52KTtcblxuICBjb21waWxhYmxlLmNvbXBpbGUoYnVpbGRlcik7XG5cbiAgcmV0dXJuIGJ1aWxkZXIuY29tcGlsZSgpO1xufVxuXG5pbnRlcmZhY2UgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgdGFnOiBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlcjtcbiAgYXR0cnM6IENvbXBvbmVudC5Db21wb25lbnRBdHRyc0J1aWxkZXI7XG4gIGNvbXBpbGUoKTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbTtcbn1cblxuY2xhc3MgQ29tcG9uZW50TGF5b3V0QnVpbGRlciBpbXBsZW1lbnRzIENvbXBvbmVudC5Db21wb25lbnRMYXlvdXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBpbm5lcjogSW5uZXJMYXlvdXRCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50KSB7fVxuXG4gIHdyYXBMYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBXcmFwcGVkQnVpbGRlcih0aGlzLmVudiwgbGF5b3V0KTtcbiAgfVxuXG4gIGZyb21MYXlvdXQobGF5b3V0OiBUZW1wbGF0ZTxUZW1wbGF0ZU1ldGE+KSB7XG4gICAgdGhpcy5pbm5lciA9IG5ldyBVbndyYXBwZWRCdWlsZGVyKHRoaXMuZW52LCBsYXlvdXQpO1xuICB9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci5jb21waWxlKCk7XG4gIH1cblxuICBnZXQgdGFnKCk6IENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lci50YWc7XG4gIH1cblxuICBnZXQgYXR0cnMoKTogQ29tcG9uZW50LkNvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXIuYXR0cnM7XG4gIH1cbn1cblxuY2xhc3MgV3JhcHBlZEJ1aWxkZXIgaW1wbGVtZW50cyBJbm5lckxheW91dEJ1aWxkZXIge1xuICBwdWJsaWMgdGFnID0gbmV3IENvbXBvbmVudFRhZ0J1aWxkZXIoKTtcbiAgcHVibGljIGF0dHJzID0gbmV3IENvbXBvbmVudEF0dHJzQnVpbGRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50LCBwcml2YXRlIGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge31cblxuICBjb21waWxlKCk6IENvbXBpbGVkRHluYW1pY1Byb2dyYW0ge1xuICAgIC8vPT09PT09PT1EWU5BTUlDXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhCT0RZKVxuICAgIC8vICAgICAgICBPcGVuRHluYW1pY1ByaW1pdGl2ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgRGlkQ3JlYXRlRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5hdHRyIHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgRmx1c2hFbGVtZW50XG4gICAgLy8gQk9EWTogIE5vb3BcbiAgICAvLyAgICAgICAgLi4uYm9keSBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIFB1dFZhbHVlKFRhZ0V4cHIpXG4gICAgLy8gICAgICAgIFRlc3RcbiAgICAvLyAgICAgICAgSnVtcFVubGVzcyhFTkQpXG4gICAgLy8gICAgICAgIENsb3NlRWxlbWVudFxuICAgIC8vIEVORDogICBOb29wXG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG4gICAgLy9cbiAgICAvLz09PT09PT09U1RBVElDXG4gICAgLy8gICAgICAgIE9wZW5QcmltaXRpdmVFbGVtZW50T3Bjb2RlXG4gICAgLy8gICAgICAgIERpZENyZWF0ZUVsZW1lbnRcbiAgICAvLyAgICAgICAgLi4uYXR0ciBzdGF0ZW1lbnRzLi4uXG4gICAgLy8gICAgICAgIEZsdXNoRWxlbWVudFxuICAgIC8vICAgICAgICAuLi5ib2R5IHN0YXRlbWVudHMuLi5cbiAgICAvLyAgICAgICAgQ2xvc2VFbGVtZW50XG4gICAgLy8gICAgICAgIERpZFJlbmRlckxheW91dFxuICAgIC8vICAgICAgICBFeGl0XG5cbiAgICBsZXQgeyBlbnYsIGxheW91dCB9ID0gdGhpcztcbiAgICBsZXQgbWV0YSA9IHsgdGVtcGxhdGVNZXRhOiBsYXlvdXQubWV0YSwgc3ltYm9sczogbGF5b3V0LnN5bWJvbHMsIGFzUGFydGlhbDogZmFsc2UgfTtcblxuICAgIGxldCBkeW5hbWljVGFnID0gdGhpcy50YWcuZ2V0RHluYW1pYygpO1xuICAgIGxldCBzdGF0aWNUYWcgPSB0aGlzLnRhZy5nZXRTdGF0aWMoKTtcblxuICAgIGxldCBiID0gYnVpbGRlcihlbnYsIG1ldGEpO1xuXG4gICAgYi5zdGFydExhYmVscygpO1xuXG4gICAgaWYgKGR5bmFtaWNUYWcpIHtcbiAgICAgIGIuZmV0Y2goUmVnaXN0ZXIuczEpO1xuXG4gICAgICBleHByKGR5bmFtaWNUYWcsIGIpO1xuXG4gICAgICBiLmR1cCgpO1xuICAgICAgYi5sb2FkKFJlZ2lzdGVyLnMxKTtcblxuICAgICAgYi50ZXN0KCdzaW1wbGUnKTtcblxuICAgICAgYi5qdW1wVW5sZXNzKCdCT0RZJyk7XG5cbiAgICAgIGIuZmV0Y2goUmVnaXN0ZXIuczEpO1xuICAgICAgYi5wdXNoQ29tcG9uZW50T3BlcmF0aW9ucygpO1xuICAgICAgYi5vcGVuRHluYW1pY0VsZW1lbnQoKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpY1RhZykge1xuICAgICAgYi5wdXNoQ29tcG9uZW50T3BlcmF0aW9ucygpO1xuICAgICAgYi5vcGVuRWxlbWVudFdpdGhPcGVyYXRpb25zKHN0YXRpY1RhZyk7XG4gICAgfVxuXG4gICAgaWYgKGR5bmFtaWNUYWcgfHwgc3RhdGljVGFnKSB7XG4gICAgICBiLmRpZENyZWF0ZUVsZW1lbnQoUmVnaXN0ZXIuczApO1xuXG4gICAgICBsZXQgYXR0cnMgPSB0aGlzLmF0dHJzWydidWZmZXInXTtcblxuICAgICAgZm9yIChsZXQgaT0wOyBpPGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbXBpbGVTdGF0ZW1lbnQoYXR0cnNbaV0sIGIpO1xuICAgICAgfVxuXG4gICAgICBiLmZsdXNoRWxlbWVudCgpO1xuICAgIH1cblxuICAgIGIubGFiZWwoJ0JPRFknKTtcbiAgICBiLmludm9rZVN0YXRpYyhsYXlvdXQuYXNCbG9jaygpKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBiLmZldGNoKFJlZ2lzdGVyLnMxKTtcbiAgICAgIGIudGVzdCgnc2ltcGxlJyk7XG4gICAgICBiLmp1bXBVbmxlc3MoJ0VORCcpO1xuICAgICAgYi5jbG9zZUVsZW1lbnQoKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpY1RhZykge1xuICAgICAgYi5jbG9zZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBiLmxhYmVsKCdFTkQnKTtcblxuICAgIGIuZGlkUmVuZGVyTGF5b3V0KFJlZ2lzdGVyLnMwKTtcblxuICAgIGlmIChkeW5hbWljVGFnKSB7XG4gICAgICBiLmxvYWQoUmVnaXN0ZXIuczEpO1xuICAgIH1cblxuICAgIGIuc3RvcExhYmVscygpO1xuXG4gICAgbGV0IHN0YXJ0ID0gYi5zdGFydDtcbiAgICBsZXQgZW5kID0gYi5maW5hbGl6ZSgpO1xuXG4gICAgZGVidWdTbGljZShlbnYsIHN0YXJ0LCBlbmQpO1xuXG4gICAgcmV0dXJuIG5ldyBDb21waWxlZER5bmFtaWNUZW1wbGF0ZShzdGFydCwgZW5kLCB7XG4gICAgICBtZXRhLFxuICAgICAgaGFzRXZhbDogbGF5b3V0Lmhhc0V2YWwsXG4gICAgICBzeW1ib2xzOiBsYXlvdXQuc3ltYm9scy5jb25jYXQoW0FUVFJTX0JMT0NLXSlcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBVbndyYXBwZWRCdWlsZGVyIGltcGxlbWVudHMgSW5uZXJMYXlvdXRCdWlsZGVyIHtcbiAgcHVibGljIGF0dHJzID0gbmV3IENvbXBvbmVudEF0dHJzQnVpbGRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbnY6IEVudmlyb25tZW50LCBwcml2YXRlIGxheW91dDogVGVtcGxhdGU8VGVtcGxhdGVNZXRhPikge31cblxuICBnZXQgdGFnKCk6IENvbXBvbmVudC5Db21wb25lbnRUYWdCdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JVRzogQ2Fubm90IGNhbGwgYHRhZ2Agb24gYW4gVW53cmFwcGVkQnVpbGRlcicpO1xuICB9XG5cbiAgY29tcGlsZSgpOiBDb21waWxlZER5bmFtaWNQcm9ncmFtIHtcbiAgICBsZXQgeyBlbnYsIGxheW91dCB9ID0gdGhpcztcbiAgICByZXR1cm4gbGF5b3V0LmFzTGF5b3V0KHRoaXMuYXR0cnNbJ2J1ZmZlciddKS5jb21waWxlRHluYW1pYyhlbnYpO1xuICB9XG59XG5cbmNsYXNzIENvbXBvbmVudFRhZ0J1aWxkZXIgaW1wbGVtZW50cyBDb21wb25lbnQuQ29tcG9uZW50VGFnQnVpbGRlciB7XG4gIHB1YmxpYyBpc0R5bmFtaWM6IE9wdGlvbjxib29sZWFuPiA9IG51bGw7XG4gIHB1YmxpYyBpc1N0YXRpYzogT3B0aW9uPGJvb2xlYW4+ID0gbnVsbDtcbiAgcHVibGljIHN0YXRpY1RhZ05hbWU6IE9wdGlvbjxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIGR5bmFtaWNUYWdOYW1lOiBPcHRpb248V2lyZUZvcm1hdC5FeHByZXNzaW9uPiA9IG51bGw7XG5cbiAgZ2V0RHluYW1pYygpOiBNYXliZTxXaXJlRm9ybWF0LkV4cHJlc3Npb24+IHtcbiAgICBpZiAodGhpcy5pc0R5bmFtaWMpIHtcbiAgICAgIHJldHVybiB0aGlzLmR5bmFtaWNUYWdOYW1lO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRpYygpOiBNYXliZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5pc1N0YXRpYykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGljVGFnTmFtZTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWModGFnTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1N0YXRpYyA9IHRydWU7XG4gICAgdGhpcy5zdGF0aWNUYWdOYW1lID0gdGFnTmFtZTtcbiAgfVxuXG4gIGR5bmFtaWModGFnTmFtZTogRnVuY3Rpb25FeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgICB0aGlzLmlzRHluYW1pYyA9IHRydWU7XG4gICAgdGhpcy5keW5hbWljVGFnTmFtZSA9IFtPcHMuQ2xpZW50U2lkZUV4cHJlc3Npb24sIENsaWVudFNpZGUuT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgdGFnTmFtZV07XG4gIH1cbn1cblxuY2xhc3MgQ29tcG9uZW50QXR0cnNCdWlsZGVyIGltcGxlbWVudHMgQ29tcG9uZW50LkNvbXBvbmVudEF0dHJzQnVpbGRlciB7XG4gIHByaXZhdGUgYnVmZmVyOiBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlW10gPSBbXTtcblxuICBzdGF0aWMobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5idWZmZXIucHVzaChbT3BzLlN0YXRpY0F0dHIsIG5hbWUsIHZhbHVlLCBudWxsXSk7XG4gIH1cblxuICBkeW5hbWljKG5hbWU6IHN0cmluZywgdmFsdWU6IEZ1bmN0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gICAgdGhpcy5idWZmZXIucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCBbT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uLCBDbGllbnRTaWRlLk9wcy5GdW5jdGlvbkV4cHJlc3Npb24sIHZhbHVlXSwgbnVsbF0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRCdWlsZGVyIGltcGxlbWVudHMgSUNvbXBvbmVudEJ1aWxkZXIge1xuICBwcml2YXRlIGVudjogRW52aXJvbm1lbnQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidWlsZGVyOiBPcGNvZGVCdWlsZGVyRFNMKSB7XG4gICAgdGhpcy5lbnYgPSBidWlsZGVyLmVudjtcbiAgfVxuXG4gIHN0YXRpYyhkZWZpbml0aW9uOiBDb21wb25lbnQuQ29tcG9uZW50RGVmaW5pdGlvbjxPcGFxdWU+LCBhcmdzOiBDb21wb25lbnRBcmdzKSB7XG4gICAgbGV0IFtwYXJhbXMsIGhhc2gsIF9kZWZhdWx0LCBpbnZlcnNlXSA9IGFyZ3M7XG4gICAgbGV0IHsgYnVpbGRlciB9ID0gdGhpcztcblxuICAgIGJ1aWxkZXIucHVzaENvbXBvbmVudE1hbmFnZXIoZGVmaW5pdGlvbik7XG4gICAgYnVpbGRlci5pbnZva2VDb21wb25lbnQobnVsbCwgcGFyYW1zLCBoYXNoLCBfZGVmYXVsdCwgaW52ZXJzZSk7XG4gIH1cblxuICBkeW5hbWljKGRlZmluaXRpb25BcmdzOiBDb21wb25lbnRBcmdzLCBnZXREZWZpbml0aW9uOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbiwgYXJnczogQ29tcG9uZW50QXJncykge1xuICAgIGxldCBbcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZV0gPSBhcmdzO1xuICAgIGxldCB7IGJ1aWxkZXIgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWRlZmluaXRpb25BcmdzIHx8IGRlZmluaXRpb25BcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyBzeW50YXggd2l0aG91dCBhbiBhcmd1bWVudFwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YSA9IHRoaXMuYnVpbGRlci5tZXRhLnRlbXBsYXRlTWV0YTtcblxuICAgIGZ1bmN0aW9uIGhlbHBlcih2bTogUHVibGljVk0sIGFyZ3M6IElBcmd1bWVudHMpIHtcbiAgICAgIHJldHVybiBnZXREZWZpbml0aW9uKHZtLCBhcmdzLCBtZXRhKTtcbiAgICB9XG5cbiAgICBidWlsZGVyLnN0YXJ0TGFiZWxzKCk7XG5cbiAgICBidWlsZGVyLnB1c2hGcmFtZSgpO1xuXG4gICAgYnVpbGRlci5yZXR1cm5UbygnRU5EJyk7XG5cbiAgICBidWlsZGVyLmNvbXBpbGVBcmdzKGRlZmluaXRpb25BcmdzWzBdLCBkZWZpbml0aW9uQXJnc1sxXSwgdHJ1ZSk7XG4gICAgYnVpbGRlci5oZWxwZXIoaGVscGVyKTtcblxuICAgIGJ1aWxkZXIuZHVwKCk7XG4gICAgYnVpbGRlci50ZXN0KCdzaW1wbGUnKTtcblxuICAgIGJ1aWxkZXIuZW50ZXIoMik7XG5cbiAgICBidWlsZGVyLmp1bXBVbmxlc3MoJ0VMU0UnKTtcblxuICAgIGJ1aWxkZXIucHVzaER5bmFtaWNDb21wb25lbnRNYW5hZ2VyKCk7XG4gICAgYnVpbGRlci5pbnZva2VDb21wb25lbnQobnVsbCwgcGFyYW1zLCBoYXNoLCBibG9jaywgaW52ZXJzZSk7XG5cbiAgICBidWlsZGVyLmxhYmVsKCdFTFNFJyk7XG4gICAgYnVpbGRlci5leGl0KCk7XG4gICAgYnVpbGRlci5yZXR1cm4oKTtcblxuICAgIGJ1aWxkZXIubGFiZWwoJ0VORCcpO1xuICAgIGJ1aWxkZXIucG9wRnJhbWUoKTtcblxuICAgIGJ1aWxkZXIuc3RvcExhYmVscygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZGVyKGVudjogRW52aXJvbm1lbnQsIG1ldGE6IENvbXBpbGF0aW9uTWV0YSkge1xuICByZXR1cm4gbmV3IE9wY29kZUJ1aWxkZXJEU0woZW52LCBtZXRhKTtcbn1cbiJdfQ==

@@ -70,5 +70,6 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }

prelude.push([Ops.ClientSideStatement, ClientSide.Ops.OpenComponentElement, tag]);
prelude.push([Ops.ClientSideStatement, ClientSide.Ops.DidCreateElement]);
var attrsSymbol = symbolTable.symbols.length + 1;
symbolTable.symbols.push(ATTRS_BLOCK);
var statements = prelude.concat([[Ops.Yield, attrsSymbol, EMPTY_ARRAY]]).concat(head).concat(body);
var statements = prelude.concat([[Ops.Yield, attrsSymbol, EMPTY_ARRAY]]).concat(head).concat(body).concat([[Ops.ClientSideStatement, ClientSide.Ops.DidRenderLayout]]);
return new CompilableTemplate(statements, symbolTable);

@@ -146,9 +147,11 @@ }

Ops[Ops["OpenComponentElement"] = 0] = "OpenComponentElement";
Ops[Ops["OptimizedAppend"] = 1] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 2] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 3] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 4] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 5] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 6] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 7] = "FunctionExpression";
Ops[Ops["DidCreateElement"] = 1] = "DidCreateElement";
Ops[Ops["DidRenderLayout"] = 2] = "DidRenderLayout";
Ops[Ops["OptimizedAppend"] = 3] = "OptimizedAppend";
Ops[Ops["UnoptimizedAppend"] = 4] = "UnoptimizedAppend";
Ops[Ops["StaticPartial"] = 5] = "StaticPartial";
Ops[Ops["DynamicPartial"] = 6] = "DynamicPartial";
Ops[Ops["NestedBlock"] = 7] = "NestedBlock";
Ops[Ops["ScannedBlock"] = 8] = "ScannedBlock";
Ops[Ops["FunctionExpression"] = 9] = "FunctionExpression";
})(Ops = ClientSide.Ops || (ClientSide.Ops = {}));

@@ -228,2 +231,2 @@ function is(variant) {

}(RawBlock);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFPLFNBQUUsQUFBdUIseUJBQUUsQUFBc0IsQUFBRSw4QkFBTSxBQUFtQixBQUFDO0FBQ3BGLEFBQU8sU0FBRSxBQUFPLEFBQUUsZUFBTSxBQUFZLEFBQUM7QUFHckMsQUFBTyxTQUFVLEFBQVcsQUFBRSxtQkFBTSxBQUFlLEFBQUM7QUFDcEQsT0FBTyxLQUFLLEFBQVUsZ0JBQU0sQUFBc0IsQUFBQztBQUVuRCxBQUFPLFNBQUUsQUFBVSxBQUFFLGtCQUFNLEFBQVcsQUFBQztBQUd2QyxBQUFPLFNBQ0wsQUFBVSxBQUNYLGtCQUFNLEFBQW9CLEFBQUM7QUFJNUIsQUFBTSxpQ0FBMkIsQUFBK0IsV0FBRSxBQUFzQjtBQUN0RixBQUFVLGVBQUMsQUFBTyxRQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN6QztBQUFDO0FBT0QsQUFBTTtBQUlKLGdDQUFtQixBQUFrQyxZQUFTLEFBQWM7OztBQUF6RCxhQUFVLGFBQVYsQUFBVSxBQUF3QjtBQUFTLGFBQVcsY0FBWCxBQUFXLEFBQUc7QUFIcEUsYUFBYyxpQkFBbUMsQUFBSSxBQUFDO0FBQ3RELGFBQWUsa0JBQXVDLEFBQUksQUFBQyxBQUVZO0FBQUM7O2lDQUVoRixBQUFhLHVDQUFDLEFBQWdCO0FBQzVCLEFBQUksWUFBRSxBQUFjLEFBQUUsaUJBQUcsQUFBSSxBQUFDOztBQUU5QixBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQWMsQUFBQyxnQkFBQyxBQUFDO0FBQ3BCLGdCQUFJLEFBQU8sV0FBRyxBQUFpQixrQkFBQyxBQUFJLEtBQUMsQUFBVSxZQUFFLEFBQUksS0FBQyxBQUFXLFlBQUMsQUFBSSxNQUFFLEFBQUcsQUFBQyxBQUFDO0FBRTdFLGdCQUFJLEFBQUssUUFBRyxBQUFPLFNBQUMsQUFBSyxBQUFDO0FBQzFCLGdCQUFJLEFBQUcsTUFBRyxB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QUFFLEFBQUksS0FBQyxBQUFPLFNBQUUsQUFBSSxNQUFFLEFBQUksS0FBQyxBQUFJLEFBQUUsQUFBQyxBQUFDLEFBQy9HO0FBQUMsQUFDRjs7O0VBVCtCLEFBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUsIENvbXBpbGVkU3RhdGljVGVtcGxhdGUgfSBmcm9tICcuL2NvbXBpbGVkL2Jsb2Nrcyc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9jb21waWxlcic7XG5pbXBvcnQgT3Bjb2RlQnVpbGRlciBmcm9tICcuL2NvbXBpbGVkL29wY29kZXMvYnVpbGRlcic7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBPcHRpb24sIEVNUFRZX0FSUkFZIH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5pbXBvcnQgKiBhcyBXaXJlRm9ybWF0IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IE9wYXF1ZSwgU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSwgQmxvY2tTeW1ib2xUYWJsZSB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGVidWdTbGljZSB9IGZyb20gJy4vb3Bjb2Rlcyc7XG5pbXBvcnQgeyBDb21waWxhdGlvbk1ldGEgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtcbiAgU1RBVEVNRU5UU1xufSBmcm9tICcuL3N5bnRheC9mdW5jdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRTdGF0ZW1lbnQgPSBXaXJlRm9ybWF0LlN0YXRlbWVudCB8IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGUgfCBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXJndW1lbnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlU3RhdGVtZW50KHN0YXRlbWVudDogV2lyZUZvcm1hdC5TdGF0ZW1lbnQsIGJ1aWxkZXI6IE9wY29kZUJ1aWxkZXIpIHtcbiAgU1RBVEVNRU5UUy5jb21waWxlKHN0YXRlbWVudCwgYnVpbGRlcik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lZFRlbXBsYXRlPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb21waWxlU3RhdGljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZFN0YXRpY1RlbXBsYXRlO1xuICBjb21waWxlRHluYW1pYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBDb21waWxhYmxlVGVtcGxhdGU8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiBpbXBsZW1lbnRzIFNjYW5uZWRUZW1wbGF0ZTxTPiB7XG4gIHByaXZhdGUgY29tcGlsZWRTdGF0aWM6IE9wdGlvbjxDb21waWxlZFN0YXRpY1RlbXBsYXRlPiA9IG51bGw7XG4gIHByaXZhdGUgY29tcGlsZWREeW5hbWljOiBPcHRpb248Q29tcGlsZWREeW5hbWljVGVtcGxhdGU8Uz4+ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgcHVibGljIHN5bWJvbFRhYmxlOiBTKSB7fVxuXG4gIGNvbXBpbGVTdGF0aWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkU3RhdGljVGVtcGxhdGUge1xuICAgIGxldCB7IGNvbXBpbGVkU3RhdGljIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjb21waWxlZFN0YXRpYykge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBjb21waWxlU3RhdGVtZW50cyh0aGlzLnN0YXRlbWVudHMsIHRoaXMuc3ltYm9sVGFibGUubWV0YSwgZW52KTtcblxuICAgICAgbGV0IHN0YXJ0ID0gYnVpbGRlci5zdGFydDtcbiAgICAgIGxldCBlbmQgPSBidWlsZGVyLmZpbmFsaXplKCk7XG5cbiAgICAgIGRlYnVnU2xpY2UoZW52LCBzdGFydCwgZW5kKTtcblxuICAgICAgY29tcGlsZWRTdGF0aWMgPSB0aGlzLmNvbXBpbGVkU3RhdGljID0gbmV3IENvbXBpbGVkU3RhdGljVGVtcGxhdGUoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkU3RhdGljO1xuICB9XG5cbiAgY29tcGlsZUR5bmFtaWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+IHtcbiAgICBsZXQgeyBjb21waWxlZER5bmFtaWMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWNvbXBpbGVkRHluYW1pYykge1xuICAgICAgbGV0IHN0YXRpY0Jsb2NrID0gdGhpcy5jb21waWxlU3RhdGljKGVudik7XG4gICAgICBjb21waWxlZER5bmFtaWMgPSBuZXcgQ29tcGlsZWREeW5hbWljVGVtcGxhdGUoc3RhdGljQmxvY2suc3RhcnQsIHN0YXRpY0Jsb2NrLmVuZCwgdGhpcy5zeW1ib2xUYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBpbGVkRHluYW1pYztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4geyBHbGltbWVyRGVidWc6ICc8dGVtcGxhdGU+JyB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0gQ29tcGlsYWJsZVRlbXBsYXRlPFN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIFByb2dyYW0gPSBDb21waWxhYmxlVGVtcGxhdGU8UHJvZ3JhbVN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIEJsb2NrID0gQ29tcGlsYWJsZVRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5leHBvcnQgdHlwZSBTY2FubmVkUHJvZ3JhbSA9IFNjYW5uZWRUZW1wbGF0ZTxQcm9ncmFtU3ltYm9sVGFibGU+O1xuZXhwb3J0IHR5cGUgU2Nhbm5lZEJsb2NrID0gU2Nhbm5lZFRlbXBsYXRlPEJsb2NrU3ltYm9sVGFibGU+O1xuXG5mdW5jdGlvbiBjb21waWxlU3RhdGVtZW50cyhzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpIHtcbiAgbGV0IGIgPSBidWlsZGVyKGVudiwgbWV0YSk7XG4gIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgY29tcGlsZVN0YXRlbWVudChzdGF0ZW1lbnQsIGIpO1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG5cbmV4cG9ydCBjb25zdCBBVFRSU19CTE9DSyA9ICcmYXR0cnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGF5b3V0KHByZWx1ZGU6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGhlYWQ6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGJvZHk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgbGV0IFssIHRhZ10gPSBwcmVsdWRlLnBvcCgpIGFzIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5PcGVuRWxlbWVudDtcbiAgcHJlbHVkZS5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHRhZ10pO1xuXG4gIGxldCBhdHRyc1N5bWJvbCA9IHN5bWJvbFRhYmxlLnN5bWJvbHMubGVuZ3RoICsgMTtcbiAgc3ltYm9sVGFibGUuc3ltYm9scy5wdXNoKEFUVFJTX0JMT0NLKTtcblxuICBsZXQgc3RhdGVtZW50cyA9IHByZWx1ZGVcbiAgICAuY29uY2F0KFtbT3BzLllpZWxkLCBhdHRyc1N5bWJvbCwgRU1QVFlfQVJSQVldXSlcbiAgICAuY29uY2F0KGhlYWQpXG4gICAgLmNvbmNhdChib2R5KTtcblxuICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCBzeW1ib2xUYWJsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYW5uZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJsb2NrOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLCBwcml2YXRlIGVudjogRW52aXJvbm1lbnQpIHtcbiAgfVxuXG4gIHNjYW5FbnRyeVBvaW50KG1ldGE6IENvbXBpbGF0aW9uTWV0YSk6IFByb2dyYW0ge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd1Byb2dyYW0oZW52LCBtZXRhLCBzdGF0ZW1lbnRzLCBibG9jay5zeW1ib2xzLCBibG9jay5oYXNFdmFsKS5zY2FuKCk7XG4gIH1cblxuICBzY2FuQmxvY2sobWV0YTogQ29tcGlsYXRpb25NZXRhKTogQmxvY2sge1xuICAgIGxldCB7IGJsb2NrLCBlbnYgfSA9IHRoaXM7XG5cbiAgICBsZXQgc3RhdGVtZW50cztcbiAgICBpZiAoYmxvY2sucHJlbHVkZSAmJiBibG9jay5oZWFkKSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2sucHJlbHVkZS5jb25jYXQoYmxvY2suaGVhZCkuY29uY2F0KGJsb2NrLnN0YXRlbWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzID0gYmxvY2suc3RhdGVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKGVudiwgbWV0YSwgc3RhdGVtZW50cywgRU1QVFlfQVJSQVkpLnNjYW4oKTtcbiAgfVxuXG4gIHNjYW5MYXlvdXQobWV0YTogQ29tcGlsYXRpb25NZXRhLCBhdHRyczogV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdKTogUHJvZ3JhbSB7XG4gICAgbGV0IHsgYmxvY2sgfSA9IHRoaXM7XG4gICAgbGV0IHsgc3ltYm9scywgaGFzRXZhbCB9ID0gYmxvY2s7XG5cbiAgICBpZiAoIWJsb2NrLnByZWx1ZGUgfHwgIWJsb2NrLmhlYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBsYXlvdXQgbXVzdCBoYXZlIGEgdG9wLWxldmVsIGVsZW1lbnRgKTtcbiAgICB9XG5cbiAgICBsZXQgc3ltYm9sVGFibGUgPSB7IG1ldGEsIGhhc0V2YWwsIHN5bWJvbHMgfTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBwcmVsdWRlIH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBibG9jay5wcmVsdWRlLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG4gICAgbGV0IHsgc3RhdGVtZW50czogaGVhZCB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogWy4uLmF0dHJzLCAuLi5ibG9jay5oZWFkXSwgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuICAgIGxldCB7IHN0YXRlbWVudHM6IGJvZHkgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IGJsb2NrLnN0YXRlbWVudHMsIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcblxuICAgIHJldHVybiBsYXlvdXQocHJlbHVkZSwgaGVhZCwgYm9keSwgc3ltYm9sVGFibGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FuQmxvY2soYmxvY2s6IFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrLCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIGVudjogRW52aXJvbm1lbnQpOiBCbG9jayB7XG4gIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2soZW52LCBtZXRhLCBibG9jay5zdGF0ZW1lbnRzLCBFTVBUWV9BUlJBWSkuc2NhbigpO1xufVxuXG5pbXBvcnQgeyBQdWJsaWNWTSB9IGZyb20gJy4vdm0nO1xuaW1wb3J0IHsgVmVyc2lvbmVkUGF0aFJlZmVyZW5jZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2xpZW50U2lkZSB7XG4gIGV4cG9ydCBlbnVtIE9wcyB7XG4gICAgT3BlbkNvbXBvbmVudEVsZW1lbnQsXG4gICAgT3B0aW1pemVkQXBwZW5kLFxuICAgIFVub3B0aW1pemVkQXBwZW5kLFxuICAgIFN0YXRpY1BhcnRpYWwsXG4gICAgRHluYW1pY1BhcnRpYWwsXG4gICAgTmVzdGVkQmxvY2ssXG4gICAgU2Nhbm5lZEJsb2NrLFxuXG4gICAgRnVuY3Rpb25FeHByZXNzaW9uXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXM8VCBleHRlbmRzIGFueVtdPih2YXJpYW50OiBPcHMpOiAodmFsdWU6IGFueVtdKSA9PiB2YWx1ZSBpcyBUIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWU6IGFueVtdKTogdmFsdWUgaXMgVCB7XG4gICAgICByZXR1cm4gdmFsdWVbMF0gPT09IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uIHx8IHZhbHVlWzBdID09PSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlU3RhdGVtZW50ICYmIHZhbHVlWzFdID09PSB2YXJpYW50O1xuICAgIH07XG4gIH1cblxuICBpbXBvcnQgQ2xpZW50U2lkZVN0YXRlbWVudCA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVTdGF0ZW1lbnQ7XG4gIGltcG9ydCBDbGllbnRTaWRlRXhwcmVzc2lvbiA9IFdpcmVGb3JtYXQuT3BzLkNsaWVudFNpZGVFeHByZXNzaW9uO1xuXG4gIGV4cG9ydCB0eXBlIE9wZW5Db21wb25lbnRFbGVtZW50ICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHN0cmluZ107XG4gIGV4cG9ydCB0eXBlIE9wdGltaXplZEFwcGVuZCAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBVbm9wdGltaXplZEFwcGVuZCAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlVub3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBTdGF0aWNQYXJ0aWFsICAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlN0YXRpY1BhcnRpYWwsIHN0cmluZywgV2lyZUZvcm1hdC5Db3JlLkV2YWxJbmZvXTtcbiAgZXhwb3J0IHR5cGUgRHluYW1pY1BhcnRpYWwgICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5EeW5hbWljUGFydGlhbCwgV2lyZUZvcm1hdC5FeHByZXNzaW9uLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuXG4gIGV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbiAgICA9IFtDbGllbnRTaWRlRXhwcmVzc2lvbiwgT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8T3BhcXVlPl07XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8VD4gPSAoVk06IFB1YmxpY1ZNLCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpID0+IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8VD47XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZVN0YXRlbWVudCA9XG4gICAgfCBPcGVuQ29tcG9uZW50RWxlbWVudFxuICAgIHwgT3B0aW1pemVkQXBwZW5kXG4gICAgfCBVbm9wdGltaXplZEFwcGVuZFxuICAgIHwgU3RhdGljUGFydGlhbFxuICAgIHwgRHluYW1pY1BhcnRpYWxcbiAgICA7XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZUV4cHJlc3Npb24gPVxuICAgIHwgRnVuY3Rpb25FeHByZXNzaW9uXG4gICAgO1xufVxuXG5jb25zdCB7IE9wcyB9ID0gV2lyZUZvcm1hdDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJhd0Jsb2NrPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZW52OiBFbnZpcm9ubWVudCwgcHJvdGVjdGVkIG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgcHJpdmF0ZSBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdKSB7fVxuXG4gIHNjYW5TdGF0ZW1lbnRzKCk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10ge1xuICAgIGxldCBidWZmZXI6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10gPSBbXTtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc3RhdGVtZW50cztcbiAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgYnVmZmVyLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgY2hpbGQoYmxvY2s6IE9wdGlvbjxXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaz4pOiBPcHRpb248UmF3SW5saW5lQmxvY2s+IHtcbiAgICBpZiAoIWJsb2NrKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKHRoaXMuZW52LCB0aGlzLm1ldGEsIGJsb2NrLnN0YXRlbWVudHMsIGJsb2NrLnBhcmFtZXRlcnMpO1xuICB9XG5cbiAgYWJzdHJhY3Qgc2NhbigpOiBDb21waWxhYmxlVGVtcGxhdGU8Uz47XG59XG5cbmV4cG9ydCBjbGFzcyBSYXdJbmxpbmVCbG9jayBleHRlbmRzIFJhd0Jsb2NrPEJsb2NrU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBwcml2YXRlIHBhcmFtZXRlcnM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoZW52LCBtZXRhLCBzdGF0ZW1lbnRzKTtcbiAgfVxuXG4gIHNjYW4oKTogQmxvY2sge1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zY2FuU3RhdGVtZW50cygpO1xuICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzLCBtZXRhOiB0aGlzLm1ldGEgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJhd1Byb2dyYW0gZXh0ZW5kcyBSYXdCbG9jazxQcm9ncmFtU3ltYm9sVGFibGU+IHtcbiAgY29uc3RydWN0b3IoZW52OiBFbnZpcm9ubWVudCwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBzdGF0ZW1lbnRzOiBXaXJlRm9ybWF0LlN0YXRlbWVudFtdLCBwcml2YXRlIHN5bWJvbHM6IHN0cmluZ1tdLCBwcml2YXRlIGhhc0V2YWw6IGJvb2xlYW4pIHtcbiAgICBzdXBlcihlbnYsIG1ldGEsIHN0YXRlbWVudHMpO1xuICB9XG5cbiAgc2NhbigpOiBQcm9ncmFtIHtcbiAgICBsZXQgc3RhdGVtZW50cyA9IHRoaXMuc2NhblN0YXRlbWVudHMoKTtcbiAgICByZXR1cm4gbmV3IENvbXBpbGFibGVUZW1wbGF0ZShzdGF0ZW1lbnRzLCB7IHN5bWJvbHM6IHRoaXMuc3ltYm9scywgaGFzRXZhbDogdGhpcy5oYXNFdmFsLCBtZXRhOiB0aGlzLm1ldGEgfSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxBQUFPLFNBQUUsQUFBdUIseUJBQUUsQUFBc0IsQUFBRSw4QkFBTSxBQUFtQixBQUFDO0FBQ3BGLEFBQU8sU0FBRSxBQUFPLEFBQUUsZUFBTSxBQUFZLEFBQUM7QUFHckMsQUFBTyxTQUFVLEFBQVcsQUFBRSxtQkFBTSxBQUFlLEFBQUM7QUFDcEQsT0FBTyxLQUFLLEFBQVUsZ0JBQU0sQUFBc0IsQUFBQztBQUVuRCxBQUFPLFNBQUUsQUFBVSxBQUFFLGtCQUFNLEFBQVcsQUFBQztBQUd2QyxBQUFPLFNBQ0wsQUFBVSxBQUNYLGtCQUFNLEFBQW9CLEFBQUM7QUFJNUIsQUFBTSxpQ0FBMkIsQUFBK0IsV0FBRSxBQUFzQjtBQUN0RixBQUFVLGVBQUMsQUFBTyxRQUFDLEFBQVMsV0FBRSxBQUFPLEFBQUMsQUFBQyxBQUN6QztBQUFDO0FBT0QsQUFBTTtBQUlKLGdDQUFtQixBQUFrQyxZQUFTLEFBQWM7OztBQUF6RCxhQUFVLGFBQVYsQUFBVSxBQUF3QjtBQUFTLGFBQVcsY0FBWCxBQUFXLEFBQUc7QUFIcEUsYUFBYyxpQkFBbUMsQUFBSSxBQUFDO0FBQ3RELGFBQWUsa0JBQXVDLEFBQUksQUFBQyxBQUVZO0FBQUM7O2lDQUVoRixBQUFhLHVDQUFDLEFBQWdCO0FBQzVCLEFBQUksWUFBRSxBQUFjLEFBQUUsaUJBQUcsQUFBSSxBQUFDOztBQUU5QixBQUFFLEFBQUMsWUFBQyxDQUFDLEFBQWMsQUFBQyxnQkFBQyxBQUFDO0FBQ3BCLGdCQUFJLEFBQU8sV0FBRyxBQUFpQixrQkFBQyxBQUFJLEtBQUMsQUFBVSxZQUFFLEFBQUksS0FBQyxBQUFXLFlBQUMsQUFBSSxNQUFFLEFBQUcsQUFBQyxBQUFDO0FBRTdFLGdCQUFJLEFBQUssUUFBRyxBQUFPLFNBQUMsQUFBSyxBQUFDO0FBQzFCLGdCQUFJLEFBQUcsTUFBRyxB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O0FBRGtFLGVBQU8sVUFBUCxBQUFPLEFBQVU7QUFBVSxlQUFPLFVBQVAsQUFBTyxBQUFTLEFBRTVJOztBQUFDOzt5QkFFRCxBQUFJO0FBQ0YsWUFBSSxBQUFVLGFBQUcsQUFBSSxLQUFDLEFBQWMsQUFBRSxBQUFDO0FBQ3ZDLEFBQU0sZUFBQyxJQUFJLEFBQWtCLG1CQUFDLEFBQVUsWUFBRSxFQUFFLEFBQU8sU0FBRSxBQUFJLEtBQUMsQUFBTyxTQUFFLEFBQU8sU0FBRSxBQUFJLEtBQUMsQUFBTyxTQUFFLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBSSxBQUFFLEFBQUMsQUFBQyxBQUMvRztBQUFDLEFBQ0Y7OztFQVQrQixBQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlLCBDb21waWxlZFN0YXRpY1RlbXBsYXRlIH0gZnJvbSAnLi9jb21waWxlZC9ibG9ja3MnO1xuaW1wb3J0IHsgYnVpbGRlciB9IGZyb20gJy4vY29tcGlsZXInO1xuaW1wb3J0IE9wY29kZUJ1aWxkZXIgZnJvbSAnLi9jb21waWxlZC9vcGNvZGVzL2J1aWxkZXInO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgT3B0aW9uLCBFTVBUWV9BUlJBWSB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0ICogYXMgV2lyZUZvcm1hdCBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBPcGFxdWUsIFN5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUsIEJsb2NrU3ltYm9sVGFibGUgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRlYnVnU2xpY2UgfSBmcm9tICcuL29wY29kZXMnO1xuaW1wb3J0IHsgQ29tcGlsYXRpb25NZXRhIH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7XG4gIFNUQVRFTUVOVFNcbn0gZnJvbSAnLi9zeW50YXgvZnVuY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkU3RhdGVtZW50ID0gV2lyZUZvcm1hdC5TdGF0ZW1lbnQgfCBXaXJlRm9ybWF0LlN0YXRlbWVudHMuQXR0cmlidXRlIHwgV2lyZUZvcm1hdC5TdGF0ZW1lbnRzLkFyZ3VtZW50O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZVN0YXRlbWVudChzdGF0ZW1lbnQ6IFdpcmVGb3JtYXQuU3RhdGVtZW50LCBidWlsZGVyOiBPcGNvZGVCdWlsZGVyKSB7XG4gIFNUQVRFTUVOVFMuY29tcGlsZShzdGF0ZW1lbnQsIGJ1aWxkZXIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5uZWRUZW1wbGF0ZTxTIGV4dGVuZHMgU3ltYm9sVGFibGU+IHtcbiAgY29tcGlsZVN0YXRpYyhlbnY6IEVudmlyb25tZW50KTogQ29tcGlsZWRTdGF0aWNUZW1wbGF0ZTtcbiAgY29tcGlsZUR5bmFtaWMoZW52OiBFbnZpcm9ubWVudCk6IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGlsYWJsZVRlbXBsYXRlPFMgZXh0ZW5kcyBTeW1ib2xUYWJsZT4gaW1wbGVtZW50cyBTY2FubmVkVGVtcGxhdGU8Uz4ge1xuICBwcml2YXRlIGNvbXBpbGVkU3RhdGljOiBPcHRpb248Q29tcGlsZWRTdGF0aWNUZW1wbGF0ZT4gPSBudWxsO1xuICBwcml2YXRlIGNvbXBpbGVkRHluYW1pYzogT3B0aW9uPENvbXBpbGVkRHluYW1pY1RlbXBsYXRlPFM+PiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHB1YmxpYyBzeW1ib2xUYWJsZTogUykge31cblxuICBjb21waWxlU3RhdGljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZFN0YXRpY1RlbXBsYXRlIHtcbiAgICBsZXQgeyBjb21waWxlZFN0YXRpYyB9ID0gdGhpcztcblxuICAgIGlmICghY29tcGlsZWRTdGF0aWMpIHtcbiAgICAgIGxldCBidWlsZGVyID0gY29tcGlsZVN0YXRlbWVudHModGhpcy5zdGF0ZW1lbnRzLCB0aGlzLnN5bWJvbFRhYmxlLm1ldGEsIGVudik7XG5cbiAgICAgIGxldCBzdGFydCA9IGJ1aWxkZXIuc3RhcnQ7XG4gICAgICBsZXQgZW5kID0gYnVpbGRlci5maW5hbGl6ZSgpO1xuXG4gICAgICBkZWJ1Z1NsaWNlKGVudiwgc3RhcnQsIGVuZCk7XG5cbiAgICAgIGNvbXBpbGVkU3RhdGljID0gdGhpcy5jb21waWxlZFN0YXRpYyA9IG5ldyBDb21waWxlZFN0YXRpY1RlbXBsYXRlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZFN0YXRpYztcbiAgfVxuXG4gIGNvbXBpbGVEeW5hbWljKGVudjogRW52aXJvbm1lbnQpOiBDb21waWxlZER5bmFtaWNUZW1wbGF0ZTxTPiB7XG4gICAgbGV0IHsgY29tcGlsZWREeW5hbWljIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFjb21waWxlZER5bmFtaWMpIHtcbiAgICAgIGxldCBzdGF0aWNCbG9jayA9IHRoaXMuY29tcGlsZVN0YXRpYyhlbnYpO1xuICAgICAgY29tcGlsZWREeW5hbWljID0gbmV3IENvbXBpbGVkRHluYW1pY1RlbXBsYXRlKHN0YXRpY0Jsb2NrLnN0YXJ0LCBzdGF0aWNCbG9jay5lbmQsIHRoaXMuc3ltYm9sVGFibGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21waWxlZER5bmFtaWM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHsgR2xpbW1lckRlYnVnOiAnPHRlbXBsYXRlPicgfTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZSA9IENvbXBpbGFibGVUZW1wbGF0ZTxTeW1ib2xUYWJsZT47XG5leHBvcnQgdHlwZSBQcm9ncmFtID0gQ29tcGlsYWJsZVRlbXBsYXRlPFByb2dyYW1TeW1ib2xUYWJsZT47XG5leHBvcnQgdHlwZSBCbG9jayA9IENvbXBpbGFibGVUZW1wbGF0ZTxCbG9ja1N5bWJvbFRhYmxlPjtcblxuZXhwb3J0IHR5cGUgU2Nhbm5lZFByb2dyYW0gPSBTY2FubmVkVGVtcGxhdGU8UHJvZ3JhbVN5bWJvbFRhYmxlPjtcbmV4cG9ydCB0eXBlIFNjYW5uZWRCbG9jayA9IFNjYW5uZWRUZW1wbGF0ZTxCbG9ja1N5bWJvbFRhYmxlPjtcblxuZnVuY3Rpb24gY29tcGlsZVN0YXRlbWVudHMoc3RhdGVtZW50czogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSwgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBlbnY6IEVudmlyb25tZW50KSB7XG4gIGxldCBiID0gYnVpbGRlcihlbnYsIG1ldGEpO1xuXG4gIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgY29tcGlsZVN0YXRlbWVudChzdGF0ZW1lbnQsIGIpO1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG5cbmV4cG9ydCBjb25zdCBBVFRSU19CTE9DSyA9ICcmYXR0cnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGF5b3V0KHByZWx1ZGU6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGhlYWQ6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIGJvZHk6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgbGV0IFssIHRhZ10gPSBwcmVsdWRlLnBvcCgpIGFzIFdpcmVGb3JtYXQuU3RhdGVtZW50cy5PcGVuRWxlbWVudDtcbiAgcHJlbHVkZS5wdXNoKFtPcHMuQ2xpZW50U2lkZVN0YXRlbWVudCwgQ2xpZW50U2lkZS5PcHMuT3BlbkNvbXBvbmVudEVsZW1lbnQsIHRhZ10pO1xuICBwcmVsdWRlLnB1c2goW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5EaWRDcmVhdGVFbGVtZW50XSk7XG5cbiAgbGV0IGF0dHJzU3ltYm9sID0gc3ltYm9sVGFibGUuc3ltYm9scy5sZW5ndGggKyAxO1xuICBzeW1ib2xUYWJsZS5zeW1ib2xzLnB1c2goQVRUUlNfQkxPQ0spO1xuXG4gIGxldCBzdGF0ZW1lbnRzID0gcHJlbHVkZVxuICAgIC5jb25jYXQoW1tPcHMuWWllbGQsIGF0dHJzU3ltYm9sLCBFTVBUWV9BUlJBWV1dKVxuICAgIC5jb25jYXQoaGVhZClcbiAgICAuY29uY2F0KGJvZHkpXG4gICAgLmNvbmNhdChbW09wcy5DbGllbnRTaWRlU3RhdGVtZW50LCBDbGllbnRTaWRlLk9wcy5EaWRSZW5kZXJMYXlvdXRdXSk7XG5cbiAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgc3ltYm9sVGFibGUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2FubmVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBibG9jazogV2lyZUZvcm1hdC5TZXJpYWxpemVkVGVtcGxhdGVCbG9jaywgcHJpdmF0ZSBlbnY6IEVudmlyb25tZW50KSB7XG4gIH1cblxuICBzY2FuRW50cnlQb2ludChtZXRhOiBDb21waWxhdGlvbk1ldGEpOiBQcm9ncmFtIHtcbiAgICBsZXQgeyBibG9jaywgZW52IH0gPSB0aGlzO1xuXG4gICAgbGV0IHN0YXRlbWVudHM7XG4gICAgaWYgKGJsb2NrLnByZWx1ZGUgJiYgYmxvY2suaGVhZCkge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnByZWx1ZGUuY29uY2F0KGJsb2NrLmhlYWQpLmNvbmNhdChibG9jay5zdGF0ZW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnN0YXRlbWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSYXdQcm9ncmFtKGVudiwgbWV0YSwgc3RhdGVtZW50cywgYmxvY2suc3ltYm9scywgYmxvY2suaGFzRXZhbCkuc2NhbigpO1xuICB9XG5cbiAgc2NhbkJsb2NrKG1ldGE6IENvbXBpbGF0aW9uTWV0YSk6IEJsb2NrIHtcbiAgICBsZXQgeyBibG9jaywgZW52IH0gPSB0aGlzO1xuXG4gICAgbGV0IHN0YXRlbWVudHM7XG4gICAgaWYgKGJsb2NrLnByZWx1ZGUgJiYgYmxvY2suaGVhZCkge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnByZWx1ZGUuY29uY2F0KGJsb2NrLmhlYWQpLmNvbmNhdChibG9jay5zdGF0ZW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVtZW50cyA9IGJsb2NrLnN0YXRlbWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSYXdJbmxpbmVCbG9jayhlbnYsIG1ldGEsIHN0YXRlbWVudHMsIEVNUFRZX0FSUkFZKS5zY2FuKCk7XG4gIH1cblxuICBzY2FuTGF5b3V0KG1ldGE6IENvbXBpbGF0aW9uTWV0YSwgYXR0cnM6IFdpcmVGb3JtYXQuU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSk6IFByb2dyYW0ge1xuICAgIGxldCB7IGJsb2NrIH0gPSB0aGlzO1xuICAgIGxldCB7IHN5bWJvbHMsIGhhc0V2YWwgfSA9IGJsb2NrO1xuXG4gICAgaWYgKCFibG9jay5wcmVsdWRlIHx8ICFibG9jay5oZWFkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgbGF5b3V0IG11c3QgaGF2ZSBhIHRvcC1sZXZlbCBlbGVtZW50YCk7XG4gICAgfVxuXG4gICAgbGV0IHN5bWJvbFRhYmxlID0geyBtZXRhLCBoYXNFdmFsLCBzeW1ib2xzIH07XG4gICAgbGV0IHsgc3RhdGVtZW50czogcHJlbHVkZSB9ID0gc2NhbkJsb2NrKHsgc3RhdGVtZW50czogYmxvY2sucHJlbHVkZSwgcGFyYW1ldGVyczogRU1QVFlfQVJSQVkgfSwgbWV0YSwgdGhpcy5lbnYpO1xuICAgIGxldCB7IHN0YXRlbWVudHM6IGhlYWQgfSA9IHNjYW5CbG9jayh7IHN0YXRlbWVudHM6IFsuLi5hdHRycywgLi4uYmxvY2suaGVhZF0sIHBhcmFtZXRlcnM6IEVNUFRZX0FSUkFZIH0sIG1ldGEsIHRoaXMuZW52KTtcbiAgICBsZXQgeyBzdGF0ZW1lbnRzOiBib2R5IH0gPSBzY2FuQmxvY2soeyBzdGF0ZW1lbnRzOiBibG9jay5zdGF0ZW1lbnRzLCBwYXJhbWV0ZXJzOiBFTVBUWV9BUlJBWSB9LCBtZXRhLCB0aGlzLmVudik7XG5cbiAgICByZXR1cm4gbGF5b3V0KHByZWx1ZGUsIGhlYWQsIGJvZHksIHN5bWJvbFRhYmxlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbkJsb2NrKGJsb2NrOiBXaXJlRm9ybWF0LlNlcmlhbGl6ZWRJbmxpbmVCbG9jaywgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBlbnY6IEVudmlyb25tZW50KTogQmxvY2sge1xuICByZXR1cm4gbmV3IFJhd0lubGluZUJsb2NrKGVudiwgbWV0YSwgYmxvY2suc3RhdGVtZW50cywgRU1QVFlfQVJSQVkpLnNjYW4oKTtcbn1cblxuaW1wb3J0IHsgUHVibGljVk0gfSBmcm9tICcuL3ZtJztcbmltcG9ydCB7IFZlcnNpb25lZFBhdGhSZWZlcmVuY2UgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuXG5leHBvcnQgbmFtZXNwYWNlIENsaWVudFNpZGUge1xuICBleHBvcnQgZW51bSBPcHMge1xuICAgIE9wZW5Db21wb25lbnRFbGVtZW50LFxuICAgIERpZENyZWF0ZUVsZW1lbnQsXG4gICAgRGlkUmVuZGVyTGF5b3V0LFxuICAgIE9wdGltaXplZEFwcGVuZCxcbiAgICBVbm9wdGltaXplZEFwcGVuZCxcbiAgICBTdGF0aWNQYXJ0aWFsLFxuICAgIER5bmFtaWNQYXJ0aWFsLFxuICAgIE5lc3RlZEJsb2NrLFxuICAgIFNjYW5uZWRCbG9jayxcblxuICAgIEZ1bmN0aW9uRXhwcmVzc2lvblxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzPFQgZXh0ZW5kcyBhbnlbXT4odmFyaWFudDogT3BzKTogKHZhbHVlOiBhbnlbXSkgPT4gdmFsdWUgaXMgVCB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlOiBhbnlbXSk6IHZhbHVlIGlzIFQge1xuICAgICAgcmV0dXJuIHZhbHVlWzBdID09PSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlRXhwcmVzc2lvbiB8fCB2YWx1ZVswXSA9PT0gV2lyZUZvcm1hdC5PcHMuQ2xpZW50U2lkZVN0YXRlbWVudCAmJiB2YWx1ZVsxXSA9PT0gdmFyaWFudDtcbiAgICB9O1xuICB9XG5cbiAgaW1wb3J0IENsaWVudFNpZGVTdGF0ZW1lbnQgPSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlU3RhdGVtZW50O1xuICBpbXBvcnQgQ2xpZW50U2lkZUV4cHJlc3Npb24gPSBXaXJlRm9ybWF0Lk9wcy5DbGllbnRTaWRlRXhwcmVzc2lvbjtcblxuICBleHBvcnQgdHlwZSBPcGVuQ29tcG9uZW50RWxlbWVudCAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLk9wZW5Db21wb25lbnRFbGVtZW50LCBzdHJpbmddO1xuICBleHBvcnQgdHlwZSBEaWRDcmVhdGVFbGVtZW50ICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLkRpZENyZWF0ZUVsZW1lbnRdO1xuICBleHBvcnQgdHlwZSBEaWRSZW5kZXJMYXlvdXQgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLkRpZFJlbmRlckxheW91dF07XG4gIGV4cG9ydCB0eXBlIE9wdGltaXplZEFwcGVuZCAgICAgICA9IFtDbGllbnRTaWRlU3RhdGVtZW50LCBPcHMuT3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBVbm9wdGltaXplZEFwcGVuZCAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlVub3B0aW1pemVkQXBwZW5kLCBXaXJlRm9ybWF0LkV4cHJlc3Npb24sIGJvb2xlYW5dO1xuICBleHBvcnQgdHlwZSBTdGF0aWNQYXJ0aWFsICAgICAgICAgPSBbQ2xpZW50U2lkZVN0YXRlbWVudCwgT3BzLlN0YXRpY1BhcnRpYWwsIHN0cmluZywgV2lyZUZvcm1hdC5Db3JlLkV2YWxJbmZvXTtcbiAgZXhwb3J0IHR5cGUgRHluYW1pY1BhcnRpYWwgICAgICAgID0gW0NsaWVudFNpZGVTdGF0ZW1lbnQsIE9wcy5EeW5hbWljUGFydGlhbCwgV2lyZUZvcm1hdC5FeHByZXNzaW9uLCBXaXJlRm9ybWF0LkNvcmUuRXZhbEluZm9dO1xuXG4gIGV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbiAgICA9IFtDbGllbnRTaWRlRXhwcmVzc2lvbiwgT3BzLkZ1bmN0aW9uRXhwcmVzc2lvbiwgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8T3BhcXVlPl07XG5cbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uQ2FsbGJhY2s8VD4gPSAoVk06IFB1YmxpY1ZNLCBzeW1ib2xUYWJsZTogU3ltYm9sVGFibGUpID0+IFZlcnNpb25lZFBhdGhSZWZlcmVuY2U8VD47XG5cbiAgZXhwb3J0IHR5cGUgQ2xpZW50U2lkZVN0YXRlbWVudCA9XG4gICAgfCBPcGVuQ29tcG9uZW50RWxlbWVudFxuICAgIHwgRGlkQ3JlYXRlRWxlbWVudFxuICAgIHwgRGlkUmVuZGVyTGF5b3V0XG4gICAgfCBPcHRpbWl6ZWRBcHBlbmRcbiAgICB8IFVub3B0aW1pemVkQXBwZW5kXG4gICAgfCBTdGF0aWNQYXJ0aWFsXG4gICAgfCBEeW5hbWljUGFydGlhbFxuICAgIDtcblxuICBleHBvcnQgdHlwZSBDbGllbnRTaWRlRXhwcmVzc2lvbiA9XG4gICAgfCBGdW5jdGlvbkV4cHJlc3Npb25cbiAgICA7XG59XG5cbmNvbnN0IHsgT3BzIH0gPSBXaXJlRm9ybWF0O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmF3QmxvY2s8UyBleHRlbmRzIFN5bWJvbFRhYmxlPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbnY6IEVudmlyb25tZW50LCBwcm90ZWN0ZWQgbWV0YTogQ29tcGlsYXRpb25NZXRhLCBwcml2YXRlIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10pIHt9XG5cbiAgc2NhblN0YXRlbWVudHMoKTogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSB7XG4gICAgbGV0IGJ1ZmZlcjogV2lyZUZvcm1hdC5TdGF0ZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zdGF0ZW1lbnRzO1xuICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICBidWZmZXIucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBjaGlsZChibG9jazogT3B0aW9uPFdpcmVGb3JtYXQuU2VyaWFsaXplZElubGluZUJsb2NrPik6IE9wdGlvbjxSYXdJbmxpbmVCbG9jaz4ge1xuICAgIGlmICghYmxvY2spIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgUmF3SW5saW5lQmxvY2sodGhpcy5lbnYsIHRoaXMubWV0YSwgYmxvY2suc3RhdGVtZW50cywgYmxvY2sucGFyYW1ldGVycyk7XG4gIH1cblxuICBhYnN0cmFjdCBzY2FuKCk6IENvbXBpbGFibGVUZW1wbGF0ZTxTPjtcbn1cblxuZXhwb3J0IGNsYXNzIFJhd0lubGluZUJsb2NrIGV4dGVuZHMgUmF3QmxvY2s8QmxvY2tTeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHByaXZhdGUgcGFyYW1ldGVyczogbnVtYmVyW10pIHtcbiAgICBzdXBlcihlbnYsIG1ldGEsIHN0YXRlbWVudHMpO1xuICB9XG5cbiAgc2NhbigpOiBCbG9jayB7XG4gICAgbGV0IHN0YXRlbWVudHMgPSB0aGlzLnNjYW5TdGF0ZW1lbnRzKCk7XG4gICAgcmV0dXJuIG5ldyBDb21waWxhYmxlVGVtcGxhdGUoc3RhdGVtZW50cywgeyBwYXJhbWV0ZXJzOiB0aGlzLnBhcmFtZXRlcnMsIG1ldGE6IHRoaXMubWV0YSB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmF3UHJvZ3JhbSBleHRlbmRzIFJhd0Jsb2NrPFByb2dyYW1TeW1ib2xUYWJsZT4ge1xuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCBtZXRhOiBDb21waWxhdGlvbk1ldGEsIHN0YXRlbWVudHM6IFdpcmVGb3JtYXQuU3RhdGVtZW50W10sIHByaXZhdGUgc3ltYm9sczogc3RyaW5nW10sIHByaXZhdGUgaGFzRXZhbDogYm9vbGVhbikge1xuICAgIHN1cGVyKGVudiwgbWV0YSwgc3RhdGVtZW50cyk7XG4gIH1cblxuICBzY2FuKCk6IFByb2dyYW0ge1xuICAgIGxldCBzdGF0ZW1lbnRzID0gdGhpcy5zY2FuU3RhdGVtZW50cygpO1xuICAgIHJldHVybiBuZXcgQ29tcGlsYWJsZVRlbXBsYXRlKHN0YXRlbWVudHMsIHsgc3ltYm9sczogdGhpcy5zeW1ib2xzLCBoYXNFdmFsOiB0aGlzLmhhc0V2YWwsIG1ldGE6IHRoaXMubWV0YSB9KTtcbiAgfVxufVxuIl19

@@ -5,2 +5,3 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

import { Register } from '../opcodes';
import { Scope } from '../environment';

@@ -14,63 +15,66 @@ import { Stack, LinkedList, ListSlice, expect } from '@glimmer/util';

export var EvaluationStack = function () {
function EvaluationStack() {
var stack = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
function EvaluationStack(stack, fp, sp) {
_classCallCheck(this, EvaluationStack);
this.stack = stack;
this.fp = fp;
this.sp = sp;
Object.seal(this);
}
EvaluationStack.prototype.snapshot = function snapshot() {
var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return new EvaluationStack(this.stack.slice(-args));
EvaluationStack.empty = function empty() {
return new this([], 0, -1);
};
EvaluationStack.prototype.restore = function restore(bp) {
this.stack.length = bp;
return this.pop();
EvaluationStack.restore = function restore(snapshot) {
return new this(snapshot.slice(), 0, snapshot.length - 1);
};
EvaluationStack.prototype.set = function set(pos, value) {
this.stack[pos] = value;
EvaluationStack.prototype.isEmpty = function isEmpty() {
return this.sp === -1;
};
EvaluationStack.prototype.get = function get(pos) {
return this.stack[pos];
};
EvaluationStack.prototype.push = function push(value) {
this.stack.push(value);
this.stack[++this.sp] = value;
};
EvaluationStack.prototype.dup = function dup() {
this.push(this.fromTop(0));
var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.sp;
this.push(this.stack[position]);
};
EvaluationStack.prototype.pop = function pop() {
return this.stack.pop();
var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
var top = this.stack[this.sp];
this.sp -= n;
return top;
};
EvaluationStack.prototype.top = function top() {
return this.stack[this.stack.length - 1];
EvaluationStack.prototype.peek = function peek() {
return this.stack[this.sp];
};
EvaluationStack.prototype.fromTop = function fromTop(pos) {
return this.stack[this.stack.length - 1 - pos];
EvaluationStack.prototype.fromBase = function fromBase(offset) {
return this.stack[this.fp - offset];
};
EvaluationStack.prototype.slice = function slice(count) {
return this.stack.slice(this.stack.length - count);
EvaluationStack.prototype.fromTop = function fromTop(offset) {
return this.stack[this.sp - offset];
};
_createClass(EvaluationStack, [{
key: 'pos',
get: function () {
return this.stack.length;
}
}]);
EvaluationStack.prototype.capture = function capture(items) {
var end = this.sp + 1;
var start = end - items;
return this.stack.slice(start, end);
};
EvaluationStack.prototype.toArray = function toArray() {
return this.stack.slice(this.fp, this.sp + 1);
};
return EvaluationStack;
}();
var i = 0;

@@ -85,8 +89,13 @@ var VM = function () {

this.scopeStack = new Stack();
this.bp = 0;
this.updatingOpcodeStack = new Stack();
this.cacheGroups = new Stack();
this.listBlockStack = new Stack();
this.frames = [];
this.evalStack = new EvaluationStack();
this.stack = EvaluationStack.empty();
/** Registers **/
this.pc = -1;
this.ra = -1;
this.s0 = null;
this.s1 = null;
this.t0 = null;
this.t1 = null;
this.env = env;

@@ -99,49 +108,87 @@ this.constants = env.constants;

VM.initial = function initial(env, self, dynamicScope, elementStack, program) {
var scope = Scope.root(self, program.symbolTable.symbols.length);
var vm = new VM(env, scope, dynamicScope, elementStack);
vm.prepare(program.start);
return vm;
// Fetch a value from a register onto the stack
VM.prototype.fetch = function fetch(register) {
this.stack.push(this[Register[register]]);
};
// Load a value from the stack into a register
VM.prototype.capture = function capture(args) {
return {
env: this.env,
scope: this.scope(),
dynamicScope: this.dynamicScope(),
stack: this.evalStack.snapshot(args),
bp: this.bp
};
VM.prototype.load = function load(register) {
this[Register[register]] = this.stack.pop();
};
// Fetch a value from a register
VM.prototype.reserveLocals = function reserveLocals(size) {
var stack = this.evalStack,
bp = this.bp;
stack.push(bp);
this.bp = stack.pos;
for (var i = 0; i < size; i++) {
stack.push(null);
}
VM.prototype.fetchValue = function fetchValue(register) {
return this[Register[register]];
};
// Load a value into a register
VM.prototype.releaseLocals = function releaseLocals() {
var stack = this.evalStack,
bp = this.bp;
this.bp = stack.restore(bp);
VM.prototype.loadValue = function loadValue(register, value) {
this[Register[register]] = value;
};
// Start a new frame and save $ra and $fp on the stack
VM.prototype.setLocal = function setLocal(position, value) {
this.evalStack.set(this.bp + position, value);
VM.prototype.pushFrame = function pushFrame() {
this.stack.push(this.ra);
this.stack.push(this.fp);
this.fp = this.sp - 1;
// this.fp = this.sp + 1;
};
// Restore $ra, $sp and $fp
VM.prototype.getLocal = function getLocal(position) {
return this.evalStack.get(this.bp + position);
VM.prototype.popFrame = function popFrame() {
this.sp = this.fp - 1;
this.ra = this.stack.fromBase(0);
this.fp = this.stack.fromBase(-1);
};
// Jump to an address in `program`
VM.prototype.goto = function goto(ip) {
this.ip = ip;
VM.prototype.goto = function goto(pc) {
this.pc = pc;
};
// Save $pc into $ra, then jump to a new address in `program` (jal in MIPS)
VM.prototype.call = function call(pc) {
this.ra = this.pc;
this.pc = pc;
};
// Put a specific `program` address in $ra
VM.prototype.returnTo = function returnTo(ra) {
this.ra = ra;
};
// Return to the `program` address stored in $ra
VM.prototype.return = function _return() {
if (this.pc === this.ra + 4) {
throw "ZOMG";
}
this.pc = this.ra;
};
VM.initial = function initial(env, self, dynamicScope, elementStack, program) {
var scope = Scope.root(self, program.symbolTable.symbols.length);
var vm = new VM(env, scope, dynamicScope, elementStack);
vm.pc = program.start;
vm.updatingOpcodeStack.push(new LinkedList());
return vm;
};
VM.prototype.capture = function capture(args) {
return {
env: this.env,
scope: this.scope(),
dynamicScope: this.dynamicScope(),
stack: this.stack.capture(args)
};
};
VM.prototype.beginCacheGroup = function beginCacheGroup() {

@@ -170,25 +217,22 @@ this.cacheGroups.push(this.updating().tail());

VM.prototype.enter = function enter(args, start, end) {
VM.prototype.enter = function enter(args) {
var updating = new LinkedList();
var state = this.capture(args);
var tracker = this.stack().pushUpdatableBlock();
var tryOpcode = new TryOpcode(start, end, state, tracker, updating);
var ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
var tracker = this.elements().pushUpdatableBlock();
var tryOpcode = new TryOpcode(this.pc, state, tracker, updating);
this.didEnter(tryOpcode);
};
VM.prototype.iterate = function iterate(start, end, memo, value) {
var updating = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new LinkedList();
VM.prototype.iterate = function iterate(memo, value) {
var updating = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new LinkedList();
var stack = this.evalStack;
var stack = this.stack;
stack.push(value);
stack.push(memo);
var state = this.capture(2);
var tracker = this.stack().pushUpdatableBlock();
var ip = this.ip;
this.ip = end + 4;
this.frames.push(ip);
return new TryOpcode(start, end, state, tracker, updating);
var tracker = this.elements().pushUpdatableBlock();
// let ip = this.ip;
// this.ip = end + 4;
// this.frames.push(ip);
return new TryOpcode(this.pc, state, tracker, updating);
};

@@ -201,8 +245,8 @@

VM.prototype.enterList = function enterList(start, end) {
VM.prototype.enterList = function enterList(start) {
var updating = new LinkedList();
var state = this.capture(1);
var tracker = this.stack().pushBlockList(updating);
var artifacts = this.evalStack.top().artifacts;
var opcode = new ListBlockOpcode(start, end, state, tracker, updating, artifacts);
var state = this.capture(0);
var tracker = this.elements().pushBlockList(updating);
var artifacts = this.stack.peek().artifacts;
var opcode = new ListBlockOpcode(start, state, tracker, updating, artifacts);
this.listBlockStack.push(opcode);

@@ -218,18 +262,10 @@ this.didEnter(opcode);

VM.prototype.exit = function exit() {
this.frames.pop();
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
var parent = this.updating().tail();
parent.didInitializeChildren();
}
this.elements().popBlock();
this.updatingOpcodeStack.pop();
var parent = this.updating().tail();
parent.didInitializeChildren();
};
VM.prototype.exitList = function exitList() {
if (this.frames.length) {
this.stack().popBlock();
this.updatingOpcodeStack.pop();
var parent = this.updating().tail();
parent.didInitializeChildren();
}
this.exit();
this.listBlockStack.pop();

@@ -250,3 +286,3 @@ };

VM.prototype.stack = function stack() {
VM.prototype.elements = function elements() {
return this.elementStack;

@@ -263,10 +299,2 @@ };

VM.prototype.pushFrame = function pushFrame(block) {
this.frames.push(block.start);
};
VM.prototype.pushEvalFrame = function pushEvalFrame(start) {
this.frames.push(start);
};
VM.prototype.pushChildScope = function pushChildScope() {

@@ -305,3 +333,3 @@ this.scopeStack.push(this.scope().child());

VM.prototype.newDestroyable = function newDestroyable(d) {
this.stack().newDestroyable(d);
this.elements().newDestroyable(d);
};

@@ -321,11 +349,5 @@ /// SCOPE HELPERS

VM.prototype.resume = function resume(start, stack, bp) {
return this.execute(start, function (vm) {
vm.evalStack = stack;
vm.bp = bp;
});
};
VM.prototype.execute = function execute(start, initialize) {
this.prepare(start, initialize);
this.pc = start;
if (initialize) initialize(this);
var result = void 0;

@@ -339,13 +361,2 @@ while (true) {

VM.prototype.prepare = function prepare(start, initialize) {
var elementStack = this.elementStack,
frames = this.frames,
updatingOpcodeStack = this.updatingOpcodeStack;
elementStack.pushSimpleBlock();
updatingOpcodeStack.push(new LinkedList());
frames.push(start);
if (initialize) initialize(this);
};
VM.prototype.next = function next() {

@@ -357,2 +368,5 @@ var env = this.env,

var opcode = void 0;
if (i++ > 100000) {
throw "zomg";
}
if (opcode = this.nextStatement(env)) {

@@ -368,15 +382,11 @@ APPEND_OPCODES.evaluate(this, opcode, opcode.type);

VM.prototype.return = function _return() {
this.frames.pop();
};
VM.prototype.nextStatement = function nextStatement(env) {
var pc = this.pc;
VM.prototype.nextStatement = function nextStatement(env) {
if (this.frames.length === 0) {
if (pc === -1) {
return null;
}
var ip = this.ip;
var program = env.program;
this.ip += 4;
return program.opcode(ip);
this.pc += 4;
return program.opcode(pc);
};

@@ -388,19 +398,7 @@

VM.prototype.invoke = function invoke(compiled) {
this.pushFrame(compiled);
};
// Make sure you have opcodes that push and pop a scope around this opcode
// if you need to change the scope.
VM.prototype.invokeBlock = function invokeBlock(block) {
var compiled = block.compileStatic(this.env);
this.invoke(compiled);
};
VM.prototype.bindDynamicScope = function bindDynamicScope(names) {
var scope = this.dynamicScope();
for (var i = names.length - 1; i >= 0; i--) {
var name = this.constants.getString(names[i]);
scope.set(name, this.evalStack.pop());
for (var _i = names.length - 1; _i >= 0; _i--) {
var name = this.constants.getString(names[_i]);
scope.set(name, this.stack.pop());
}

@@ -410,9 +408,17 @@ };

_createClass(VM, [{
key: 'ip',
key: 'fp',
get: function () {
return this.frames[this.frames.length - 1];
return this.stack.fp;
},
set: function (val) {
this.frames[this.frames.length - 1] = val;
set: function (fp) {
this.stack.fp = fp;
}
}, {
key: 'sp',
get: function () {
return this.stack.sp;
},
set: function (sp) {
this.stack.sp = sp;
}
}]);

@@ -424,2 +430,2 @@

export default VM;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxBQUFPLFNBQUUsQUFBSyxBQUFxQyxhQUFNLEFBQWdCLEFBQUM7QUFFMUUsQUFBTyxTQUF1QixBQUFLLE9BQUUsQUFBVSxZQUFFLEFBQVMsV0FBVSxBQUFNLEFBQUUsY0FBTSxBQUFlLEFBQUM7QUFDbEcsQUFBTyxTQUE0RCxBQUFZLEFBQUUsb0JBQU0sQUFBb0IsQUFBQztBQUc1RyxBQUFPLFNBQUUsQUFBVyxhQUFFLEFBQXVCLHlCQUFFLEFBQWUsQUFBRSx1QkFBTSxBQUF3QixBQUFDO0FBQy9GLEFBQU8sU0FBVyxBQUFlLGlCQUFFLEFBQVMsQUFBZSxpQkFBTSxBQUFVLEFBQUM7QUFDNUUsT0FBTyxBQUFZLGtCQUFNLEFBQWlCLEFBQUM7QUFFM0MsQUFBTyxTQUNMLEFBQWMsQUFFZixzQkFBTSxBQUFZLEFBQUM7QUFjcEIsQUFBTTtBQUNKO1lBQW9CLDRFQUFrQixBQUFFOzs7O0FBQXBCLGFBQUssUUFBTCxBQUFLLEFBQWU7QUFDdEMsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFJLEFBQUMsQUFBQyxBQUNwQjtBQUFDLEFBRUQsQUFBSSxBQUFHOzs4QkFJUCxBQUFRO1lBQUMsQUFBSSwyRUFBRyxBQUFDOztBQUNmLEFBQU0sZUFBQyxJQUFJLEFBQWUsZ0JBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLE1BQUMsQ0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3REO0FBQUM7OzhCQUVELEFBQU8sMkJBQUMsQUFBVTtBQUNoQixBQUFJLGFBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFFLEFBQUM7QUFDdkIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFHLEFBQVUsQUFBQyxBQUM1QjtBQUFDOzs4QkFFRCxBQUFHLG1CQUFDLEFBQVcsS0FBRSxBQUFhO0FBQzVCLEFBQUksYUFBQyxBQUFLLE1BQUMsQUFBRyxBQUFD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QUFNLE9BQUMsQUFBUSxBQUFDLEFBQUMsQUFDeEI7QUFBQzs7aUJBRUQsQUFBZ0IsNkNBQUMsQUFBdUI7QUFDdEMsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQVksQUFBRSxBQUFDO0FBRWhDLEFBQUcsYUFBQyxJQUFJLEFBQUMsSUFBQyxBQUFLLE1BQUMsQUFBTSxTQUFHLEFBQUMsR0FBRSxBQUFDLEtBQUUsQUFBQyxHQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUM7QUFDdEMsZ0JBQUksQUFBSSxPQUFHLEFBQUksS0FBQyxBQUFTLFVBQUMsQUFBUyxVQUFDLEFBQUssTUFBQyxBQUFDLEFBQUMsQUFBQyxBQUFDO0FBQzlDLEFBQUssa0JBQUMsQUFBRyxJQUFDLEFBQUksTUFBRSxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQUcsQUFBa0MsQUFBQyxBQUFDLEFBQ3hFO0FBQUMsQUFDSDtBQUFDLEFBQ0Y7Ozs7O0FBOVRHLEFBQU0sbUJBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUUsQUFBQyxBQUM5QztBQUFDLEFBRUQsQUFBWSxBQUFFO3VCQUFDLEFBQVc7QUFDeEIsQUFBSSxpQkFBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFNLFNBQUcsQUFBQyxBQUFDLEtBQUcsQUFBRyxBQUFDLEFBQzVDO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCwgT3Bjb2RlIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgRWxlbWVudFN0YWNrIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPcHRpb24sIERlc3Ryb3lhYmxlLCBTdGFjaywgTGlua2VkTGlzdCwgTGlzdFNsaWNlLCBPcGFxdWUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlSXRlcmF0b3IsIFBhdGhSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsIGNvbWJpbmVTbGljZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBDb21waWxlZER5bmFtaWNQcm9ncmFtLCBPcFNsaWNlIH0gZnJvbSAnLi4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vc2Nhbm5lcic7XG5pbXBvcnQgeyBMYWJlbE9wY29kZSwgSnVtcElmTm90TW9kaWZpZWRPcGNvZGUsIERpZE1vZGlmeU9wY29kZSB9IGZyb20gJy4uL2NvbXBpbGVkL29wY29kZXMvdm0nO1xuaW1wb3J0IHsgVk1TdGF0ZSwgTGlzdEJsb2NrT3Bjb2RlLCBUcnlPcGNvZGUsIEJsb2NrT3Bjb2RlIH0gZnJvbSAnLi91cGRhdGUnO1xuaW1wb3J0IFJlbmRlclJlc3VsdCBmcm9tICcuL3JlbmRlci1yZXN1bHQnO1xuXG5pbXBvcnQge1xuICBBUFBFTkRfT1BDT0RFUyxcbiAgVXBkYXRpbmdPcGNvZGVcbn0gZnJvbSAnLi4vb3Bjb2Rlcyc7XG5cbmltcG9ydCB7XG4gIENvbnN0YW50cyxcbiAgQ29uc3RhbnRTdHJpbmdcbn0gZnJvbSAnLi4vZW52aXJvbm1lbnQvY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNWTSB7XG4gIGVudjogRW52aXJvbm1lbnQ7XG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGU7XG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+O1xuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmFsdWF0aW9uU3RhY2sge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YWNrOiBPcGFxdWVbXSA9IFtdKSB7XG4gICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gIH1cblxuICBnZXQgcG9zKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLmxlbmd0aDtcbiAgfVxuXG4gIHNuYXBzaG90KGFyZ3MgPSAwKTogRXZhbHVhdGlvblN0YWNrIHtcbiAgICByZXR1cm4gbmV3IEV2YWx1YXRpb25TdGFjayh0aGlzLnN0YWNrLnNsaWNlKC1hcmdzKSk7XG4gIH1cblxuICByZXN0b3JlKGJwOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMuc3RhY2subGVuZ3RoID0gYnA7XG4gICAgcmV0dXJuIHRoaXMucG9wPG51bWJlcj4oKTtcbiAgfVxuXG4gIHNldChwb3M6IG51bWJlciwgdmFsdWU6IE9wYXF1ZSkge1xuICAgIHRoaXMuc3RhY2tbcG9zXSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0KHBvczogbnVtYmVyKTogT3BhcXVlIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1twb3NdO1xuICB9XG5cbiAgcHVzaCh2YWx1ZTogT3BhcXVlKTogdm9pZCB7XG4gICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIGR1cCgpOiB2b2lkIHtcbiAgICB0aGlzLnB1c2godGhpcy5mcm9tVG9wKDApKTtcbiAgfVxuXG4gIHBvcDxUPigpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKSBhcyBUO1xuICB9XG5cbiAgdG9wPFQ+KCk6IFQge1xuICAgIHJldHVybiB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV0gYXMgVDtcbiAgfVxuXG4gIGZyb21Ub3A8VD4ocG9zOiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDEgLSBwb3NdIGFzIFQ7XG4gIH1cblxuICBzbGljZTxUIGV4dGVuZHMgT3BhcXVlW10+KGNvdW50OiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZSh0aGlzLnN0YWNrLmxlbmd0aCAtIGNvdW50KSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEl0ZXJhdG9yUmVzdWx0PFQ+ID0ge1xuICBkb25lOiBmYWxzZTtcbiAgdmFsdWU6IG51bGw7XG59IHwge1xuICBkb25lOiB0cnVlO1xuICB2YWx1ZTogVDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZNIGltcGxlbWVudHMgUHVibGljVk0ge1xuICBwcml2YXRlIGR5bmFtaWNTY29wZVN0YWNrID0gbmV3IFN0YWNrPER5bmFtaWNTY29wZT4oKTtcbiAgcHJpdmF0ZSBzY29wZVN0YWNrID0gbmV3IFN0YWNrPFNjb3BlPigpO1xuICBwcml2YXRlIGJwID0gMDtcbiAgcHVibGljIHVwZGF0aW5nT3Bjb2RlU3RhY2sgPSBuZXcgU3RhY2s8TGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4+KCk7XG4gIHB1YmxpYyBjYWNoZUdyb3VwcyA9IG5ldyBTdGFjazxPcHRpb248VXBkYXRpbmdPcGNvZGU+PigpO1xuICBwdWJsaWMgbGlzdEJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8TGlzdEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgZnJhbWVzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG4gIHB1YmxpYyBldmFsU3RhY2sgPSBuZXcgRXZhbHVhdGlvblN0YWNrKCk7XG5cbiAgc3RhdGljIGluaXRpYWwoXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzZWxmOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sXG4gICAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICAgZWxlbWVudFN0YWNrOiBFbGVtZW50U3RhY2ssXG4gICAgcHJvZ3JhbTogQ29tcGlsZWREeW5hbWljUHJvZ3JhbVxuICApIHtcbiAgICBsZXQgc2NvcGUgPSBTY29wZS5yb290KHNlbGYsIHByb2dyYW0uc3ltYm9sVGFibGUuc3ltYm9scy5sZW5ndGgpO1xuICAgIGxldCB2bSA9IG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gICAgdm0ucHJlcGFyZShwcm9ncmFtLnN0YXJ0KTtcbiAgICByZXR1cm4gdm07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzY29wZTogU2NvcGUsXG4gICAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICAgcHJpdmF0ZSBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjayxcbiAgKSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZWxlbWVudFN0YWNrID0gZWxlbWVudFN0YWNrO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzW3RoaXMuZnJhbWVzLmxlbmd0aCAtIDFdITtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGlwKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5mcmFtZXNbdGhpcy5mcmFtZXMubGVuZ3RoIC0gMV0gPSB2YWw7XG4gIH1cblxuICBjYXB0dXJlKGFyZ3M6IG51bWJlcik6IFZNU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUoKSxcbiAgICAgIGR5bmFtaWNTY29wZTogdGhpcy5keW5hbWljU2NvcGUoKSxcbiAgICAgIHN0YWNrOiB0aGlzLmV2YWxTdGFjay5zbmFwc2hvdChhcmdzKSxcbiAgICAgIGJwOiB0aGlzLmJwXG4gICAgfTtcbiAgfVxuXG4gIHJlc2VydmVMb2NhbHMoc2l6ZTogbnVtYmVyKSB7XG4gICAgbGV0IHsgZXZhbFN0YWNrOiBzdGFjaywgYnAgfSA9IHRoaXM7XG5cbiAgICBzdGFjay5wdXNoKGJwKTtcbiAgICB0aGlzLmJwID0gc3RhY2sucG9zO1xuXG4gICAgZm9yIChsZXQgaT0wOyBpPHNpemU7IGkrKykge1xuICAgICAgc3RhY2sucHVzaChudWxsKTtcbiAgICB9XG4gIH1cblxuICByZWxlYXNlTG9jYWxzKCkge1xuICAgIGxldCB7IGV2YWxTdGFjazogc3RhY2ssIGJwIH0gPSB0aGlzO1xuICAgIHRoaXMuYnAgPSBzdGFjay5yZXN0b3JlKGJwKTtcbiAgfVxuXG4gIHNldExvY2FsKHBvc2l0aW9uOiBudW1iZXIsIHZhbHVlOiBPcGFxdWUpIHtcbiAgICB0aGlzLmV2YWxTdGFjay5zZXQodGhpcy5icCArIHBvc2l0aW9uLCB2YWx1ZSk7XG4gIH1cblxuICBnZXRMb2NhbDxUPihwb3NpdGlvbjogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuZXZhbFN0YWNrLmdldCh0aGlzLmJwICsgcG9zaXRpb24pIGFzIFQ7XG4gIH1cblxuICBnb3RvKGlwOiBudW1iZXIpIHtcbiAgICB0aGlzLmlwID0gaXA7XG4gIH1cblxuICBiZWdpbkNhY2hlR3JvdXAoKSB7XG4gICAgdGhpcy5jYWNoZUdyb3Vwcy5wdXNoKHRoaXMudXBkYXRpbmcoKS50YWlsKCkpO1xuICB9XG5cbiAgY29tbWl0Q2FjaGVHcm91cCgpIHtcbiAgICAvLyAgICAgICAgSnVtcElmTm90TW9kaWZpZWQoRU5EKVxuICAgIC8vICAgICAgICAoaGVhZClcbiAgICAvLyAgICAgICAgKC4uLi4pXG4gICAgLy8gICAgICAgICh0YWlsKVxuICAgIC8vICAgICAgICBEaWRNb2RpZnlcbiAgICAvLyBFTkQ6ICAgTm9vcFxuXG4gICAgbGV0IEVORCA9IG5ldyBMYWJlbE9wY29kZShcIkVORFwiKTtcblxuICAgIGxldCBvcGNvZGVzID0gdGhpcy51cGRhdGluZygpO1xuICAgIGxldCBtYXJrZXIgPSB0aGlzLmNhY2hlR3JvdXBzLnBvcCgpO1xuICAgIGxldCBoZWFkID0gbWFya2VyID8gb3Bjb2Rlcy5uZXh0Tm9kZShtYXJrZXIpIDogb3Bjb2Rlcy5oZWFkKCk7XG4gICAgbGV0IHRhaWwgPSBvcGNvZGVzLnRhaWwoKTtcbiAgICBsZXQgdGFnID0gY29tYmluZVNsaWNlKG5ldyBMaXN0U2xpY2UoaGVhZCwgdGFpbCkpO1xuXG4gICAgbGV0IGd1YXJkID0gbmV3IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKHRhZywgRU5EKTtcblxuICAgIG9wY29kZXMuaW5zZXJ0QmVmb3JlKGd1YXJkLCBoZWFkKTtcbiAgICBvcGNvZGVzLmFwcGVuZChuZXcgRGlkTW9kaWZ5T3Bjb2RlKGd1YXJkKSk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQoRU5EKTtcbiAgfVxuXG4gIGVudGVyKGFyZ3M6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4oKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZShhcmdzKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuc3RhY2soKS5wdXNoVXBkYXRhYmxlQmxvY2soKTtcblxuICAgIGxldCB0cnlPcGNvZGUgPSBuZXcgVHJ5T3Bjb2RlKHN0YXJ0LCBlbmQsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG5cbiAgICBsZXQgaXAgPSB0aGlzLmlwO1xuICAgIHRoaXMuaXAgPSBlbmQgKyA0O1xuICAgIHRoaXMuZnJhbWVzLnB1c2goaXApO1xuXG4gICAgdGhpcy5kaWRFbnRlcih0cnlPcGNvZGUpO1xuICB9XG5cbiAgaXRlcmF0ZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgbWVtbzogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB2YWx1ZTogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTogVHJ5T3Bjb2RlIHtcbiAgICBsZXQgc3RhY2sgPSB0aGlzLmV2YWxTdGFjaztcbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcbiAgICBzdGFjay5wdXNoKG1lbW8pO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKDIpO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuXG4gICAgbGV0IGlwID0gdGhpcy5pcDtcbiAgICB0aGlzLmlwID0gZW5kICsgNDtcbiAgICB0aGlzLmZyYW1lcy5wdXNoKGlwKTtcblxuICAgIHJldHVybiBuZXcgVHJ5T3Bjb2RlKHN0YXJ0LCBlbmQsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZyk7XG4gIH1cblxuICBlbnRlckl0ZW0oa2V5OiBzdHJpbmcsIG9wY29kZTogVHJ5T3Bjb2RlKSB7XG4gICAgdGhpcy5saXN0QmxvY2soKS5tYXBba2V5XSA9IG9wY29kZTtcbiAgICB0aGlzLmRpZEVudGVyKG9wY29kZSk7XG4gIH1cblxuICBlbnRlckxpc3Qoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBsZXQgdXBkYXRpbmcgPSBuZXcgTGlua2VkTGlzdDxCbG9ja09wY29kZT4oKTtcblxuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2FwdHVyZSgxKTtcbiAgICBsZXQgdHJhY2tlciA9IHRoaXMuc3RhY2soKS5wdXNoQmxvY2tMaXN0KHVwZGF0aW5nKTtcbiAgICBsZXQgYXJ0aWZhY3RzID0gdGhpcy5ldmFsU3RhY2sudG9wPFJlZmVyZW5jZUl0ZXJhdG9yPigpLmFydGlmYWN0cztcblxuICAgIGxldCBvcGNvZGUgPSBuZXcgTGlzdEJsb2NrT3Bjb2RlKHN0YXJ0LCBlbmQsIHN0YXRlLCB0cmFja2VyLCB1cGRhdGluZywgYXJ0aWZhY3RzKTtcblxuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucHVzaChvcGNvZGUpO1xuXG4gICAgdGhpcy5kaWRFbnRlcihvcGNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaWRFbnRlcihvcGNvZGU6IEJsb2NrT3Bjb2RlKSB7XG4gICAgdGhpcy51cGRhdGVXaXRoKG9wY29kZSk7XG4gICAgdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnB1c2gob3Bjb2RlLmNoaWxkcmVuKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5mcmFtZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy5mcmFtZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrKCkucG9wQmxvY2soKTtcbiAgICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKTtcblxuICAgICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmcoKS50YWlsKCkgYXMgQmxvY2tPcGNvZGU7XG5cbiAgICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICB9XG4gIH1cblxuICBleGl0TGlzdCgpIHtcbiAgICBpZiAodGhpcy5mcmFtZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrKCkucG9wQmxvY2soKTtcbiAgICAgIHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5wb3AoKTtcblxuICAgICAgbGV0IHBhcmVudCA9IHRoaXMudXBkYXRpbmcoKS50YWlsKCkgYXMgQmxvY2tPcGNvZGU7XG5cbiAgICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RCbG9ja1N0YWNrLnBvcCgpO1xuICB9XG5cbiAgdXBkYXRlV2l0aChvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy51cGRhdGluZygpLmFwcGVuZChvcGNvZGUpO1xuICB9XG5cbiAgbGlzdEJsb2NrKCk6IExpc3RCbG9ja09wY29kZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBhIGxpc3QgYmxvY2snKTtcbiAgfVxuXG4gIHVwZGF0aW5nKCk6IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+IHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMudXBkYXRpbmdPcGNvZGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgdXBkYXRpbmcgb3Bjb2RlIG9uIHRoZSB1cGRhdGluZyBvcGNvZGUgc3RhY2snKTtcbiAgfVxuXG4gIHN0YWNrKCk6IEVsZW1lbnRTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFN0YWNrO1xuICB9XG5cbiAgc2NvcGUoKTogU2NvcGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5zY29wZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBzY29wZSBvbiB0aGUgc2NvcGUgc3RhY2snKTtcbiAgfVxuXG4gIGR5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5keW5hbWljU2NvcGVTdGFjay5jdXJyZW50LCAnZXhwZWN0ZWQgZHluYW1pYyBzY29wZSBvbiB0aGUgZHluYW1pYyBzY29wZSBzdGFjaycpO1xuICB9XG5cbiAgcHVzaEZyYW1lKGJsb2NrOiBPcFNsaWNlKSB7XG4gICAgdGhpcy5mcmFtZXMucHVzaChibG9jay5zdGFydCk7XG4gIH1cblxuICBwdXNoRXZhbEZyYW1lKHN0YXJ0OiBudW1iZXIpIHtcbiAgICB0aGlzLmZyYW1lcy5wdXNoKHN0YXJ0KTtcbiAgfVxuXG4gIHB1c2hDaGlsZFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHRoaXMuc2NvcGUoKS5jaGlsZCgpKTtcbiAgfVxuXG4gIHB1c2hDYWxsZXJTY29wZShjaGlsZFNjb3BlID0gZmFsc2UpIHtcbiAgICBsZXQgY2FsbGVyU2NvcGUgPSBleHBlY3QodGhpcy5zY29wZSgpLmdldENhbGxlclNjb3BlKCksICdwdXNoQ2FsbGVyU2NvcGUgaXMgY2FsbGVkIHdoZW4gYSBjYWxsZXIgc2NvcGUgaXMgcHJlc2VudCcpO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKGNoaWxkU2NvcGUgPyBjYWxsZXJTY29wZS5jaGlsZCgpIDogY2FsbGVyU2NvcGUpO1xuICB9XG5cbiAgcHVzaER5bmFtaWNTY29wZSgpOiBEeW5hbWljU2NvcGUge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZHluYW1pY1Njb3BlKCkuY2hpbGQoKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHB1c2hSb290U2NvcGUoc2l6ZTogbnVtYmVyLCBiaW5kQ2FsbGVyOiBib29sZWFuKTogU2NvcGUge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnNpemVkKHNpemUpO1xuICAgIGlmIChiaW5kQ2FsbGVyKSBzY29wZS5iaW5kQ2FsbGVyU2NvcGUodGhpcy5zY29wZSgpKTtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChzY29wZSk7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgcG9wU2NvcGUoKSB7XG4gICAgdGhpcy5zY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgcG9wRHluYW1pY1Njb3BlKCkge1xuICAgIHRoaXMuZHluYW1pY1Njb3BlU3RhY2sucG9wKCk7XG4gIH1cblxuICBuZXdEZXN0cm95YWJsZShkOiBEZXN0cm95YWJsZSkge1xuICAgIHRoaXMuc3RhY2soKS5uZXdEZXN0cm95YWJsZShkKTtcbiAgfVxuXG4gIC8vLyBTQ09QRSBIRUxQRVJTXG5cbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNjb3BlKCkuZ2V0U2VsZigpO1xuICB9XG5cbiAgcmVmZXJlbmNlRm9yU3ltYm9sKHN5bWJvbDogbnVtYmVyKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFN5bWJvbChzeW1ib2wpO1xuICB9XG5cbiAgLy8vIEVYRUNVVElPTlxuXG4gIHJlc3VtZShzdGFydDogbnVtYmVyLCBzdGFjazogRXZhbHVhdGlvblN0YWNrLCBicDogbnVtYmVyKTogUmVuZGVyUmVzdWx0IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICB2bS5ldmFsU3RhY2sgPSBzdGFjaztcbiAgICAgIHZtLmJwID0gYnA7XG4gICAgfSk7XG4gIH1cblxuICBleGVjdXRlKHN0YXJ0OiBudW1iZXIsIGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTogUmVuZGVyUmVzdWx0IHtcbiAgICB0aGlzLnByZXBhcmUoc3RhcnQsIGluaXRpYWxpemUpO1xuICAgIGxldCByZXN1bHQ6IEl0ZXJhdG9yUmVzdWx0PFJlbmRlclJlc3VsdD47XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5uZXh0KCk7XG4gICAgICBpZiAocmVzdWx0LmRvbmUpIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQudmFsdWUgYXMgUmVuZGVyUmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlKHN0YXJ0OiBudW1iZXIsIGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IHsgZWxlbWVudFN0YWNrLCBmcmFtZXMsIHVwZGF0aW5nT3Bjb2RlU3RhY2sgfSA9IHRoaXM7XG5cbiAgICBlbGVtZW50U3RhY2sucHVzaFNpbXBsZUJsb2NrKCk7XG5cbiAgICB1cGRhdGluZ09wY29kZVN0YWNrLnB1c2gobmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpO1xuXG4gICAgZnJhbWVzLnB1c2goc3RhcnQpO1xuXG4gICAgaWYgKGluaXRpYWxpemUpIGluaXRpYWxpemUodGhpcyk7XG4gIH1cblxuICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PFJlbmRlclJlc3VsdD4ge1xuICAgIGxldCB7IGVudiwgdXBkYXRpbmdPcGNvZGVTdGFjaywgZWxlbWVudFN0YWNrIH0gPSB0aGlzO1xuICAgIGxldCBvcGNvZGU6IE9wdGlvbjxPcGNvZGU+O1xuXG4gICAgaWYgKG9wY29kZSA9IHRoaXMubmV4dFN0YXRlbWVudChlbnYpKSB7XG4gICAgICBBUFBFTkRfT1BDT0RFUy5ldmFsdWF0ZSh0aGlzLCBvcGNvZGUsIG9wY29kZS50eXBlKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogbnVsbCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkb25lOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ldyBSZW5kZXJSZXN1bHQoXG4gICAgICAgIGVudixcbiAgICAgICAgZXhwZWN0KHVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCksICd0aGVyZSBzaG91bGQgYmUgYSBmaW5hbCB1cGRhdGluZyBvcGNvZGUgc3RhY2snKSxcbiAgICAgICAgZWxlbWVudFN0YWNrLnBvcEJsb2NrKClcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuKCk6IHZvaWQge1xuICAgIHRoaXMuZnJhbWVzLnBvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0U3RhdGVtZW50KGVudjogRW52aXJvbm1lbnQpOiBPcHRpb248T3Bjb2RlPiB7XG4gICAgaWYgKHRoaXMuZnJhbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHsgaXAgfSA9IHRoaXM7XG4gICAgbGV0IHByb2dyYW0gPSBlbnYucHJvZ3JhbTtcbiAgICB0aGlzLmlwICs9IDQ7XG4gICAgcmV0dXJuIHByb2dyYW0ub3Bjb2RlKGlwKTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogT3Bjb2RlKSB7XG4gICAgQVBQRU5EX09QQ09ERVMuZXZhbHVhdGUodGhpcywgb3Bjb2RlLCBvcGNvZGUudHlwZSk7XG4gIH1cblxuICBpbnZva2UoY29tcGlsZWQ6IE9wU2xpY2UpIHtcbiAgICB0aGlzLnB1c2hGcmFtZShjb21waWxlZCk7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgeW91IGhhdmUgb3Bjb2RlcyB0aGF0IHB1c2ggYW5kIHBvcCBhIHNjb3BlIGFyb3VuZCB0aGlzIG9wY29kZVxuICAvLyBpZiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIHNjb3BlLlxuICBpbnZva2VCbG9jayhibG9jazogVGVtcGxhdGUpIHtcbiAgICBsZXQgY29tcGlsZWQgPSBibG9jay5jb21waWxlU3RhdGljKHRoaXMuZW52KTtcbiAgICB0aGlzLmludm9rZShjb21waWxlZCk7XG4gIH1cblxuICBiaW5kRHluYW1pY1Njb3BlKG5hbWVzOiBDb25zdGFudFN0cmluZ1tdKSB7XG4gICAgbGV0IHNjb3BlID0gdGhpcy5keW5hbWljU2NvcGUoKTtcblxuICAgIGZvcihsZXQgaT1uYW1lcy5sZW5ndGggLSAxOyBpPj0wOyBpLS0pIHtcbiAgICAgIGxldCBuYW1lID0gdGhpcy5jb25zdGFudHMuZ2V0U3RyaW5nKG5hbWVzW2ldKTtcbiAgICAgIHNjb3BlLnNldChuYW1lLCB0aGlzLmV2YWxTdGFjay5wb3A8VmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+PigpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwZW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxBQUFPLFNBQUUsQUFBUSxBQUFFLGdCQUFNLEFBQVksQUFBQztBQUN0QyxBQUFPLFNBQUUsQUFBSyxBQUFxQyxhQUFNLEFBQWdCLEFBQUM7QUFFMUUsQUFBTyxTQUF1QixBQUFLLE9BQUUsQUFBVSxZQUFFLEFBQVMsV0FBa0IsQUFBTSxBQUFFLGNBQU0sQUFBZSxBQUFDO0FBQzFHLEFBQU8sU0FBNEQsQUFBWSxBQUFFLG9CQUFNLEFBQW9CLEFBQUM7QUFFNUcsQUFBTyxTQUFFLEFBQVcsYUFBRSxBQUF1Qix5QkFBRSxBQUFlLEFBQUUsdUJBQU0sQUFBd0IsQUFBQztBQUMvRixBQUFPLFNBQVcsQUFBZSxpQkFBRSxBQUFTLEFBQWUsaUJBQU0sQUFBVSxBQUFDO0FBQzVFLE9BQU8sQUFBWSxrQkFBTSxBQUFpQixBQUFDO0FBRTNDLEFBQU8sU0FDTCxBQUFjLEFBRWYsc0JBQU0sQUFBWSxBQUFDO0FBZ0JwQixBQUFNO0FBU0osNkJBQW9CLEFBQWUsT0FBUyxBQUFVLElBQVMsQUFBVTs7O0FBQXJELGFBQUssUUFBTCxBQUFLLEFBQVU7QUFBUyxhQUFFLEtBQUYsQUFBRSxBQUFRO0FBQVMsYUFBRSxLQUFGLEFBQUUsQUFBUTtBQUN2RSxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3BCO0FBVkEsQUFBTSxBQVVMOztvQkFWTSxBQUFLO0FBQ1YsQUFBTSxlQUFDLElBQUksQUFBSSxLQUFDLEFBQUUsSUFBRSxBQUFDLEdBQUUsQ0FBQyxBQUFDLEFBQUMsQUFBQyxBQUM3QjtBQUFDLEFBRUQsQUFBTTs7b0JBQUMsQUFBTywyQkFBQyxBQUF1QjtBQUNwQyxBQUFNLGVBQUMsSUFBSSxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUssQUFBRSxTQUFFLEFBQUMsR0FBRSxBQUFRLFNBQUMsQUFBTSxTQUFHLEFBQUMsQUFBQyxBQUFDLEFBQzVEO0FBQUM7OzhCQU1ELEFBQU87QUFDTCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUUsT0FBSyxDQUFDLEFBQUMsQUFBQyxBQUN4QjtBQUFDOzs4QkFFRCxBQUFJLHFCQUFDLEFBQWE7QUFDaEIsQUFBSSxhQUFDLEFBQUssTUFBQyxFQUFFLEFBQUksS0FBQyxBQUFFLEFBQUMsTUFBRyxBQUFLLEFBQUMsQUFDaEM7QUFBQzs7OEJBRUQsQUFBRztZQUFDLEFBQVEsK0VBQUcsQUFBSSxLQUFDLEFBQUU7O0FBQ3BCLEFBQUksYUFBQyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFRLEFBQUMsQUFBQyxBQUFDLEFBQ2xDO0FBQUM7OzhCQUVELEFBQUc7WUFBSSxBQUFDLHdFQUFHLEFBQUM7O0FBQ1YsWUFBSSxBQUFHLE1BQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBRSxBQUFNLEFBQUM7QUFDbkMsQUFBSSxhQUFDLEFBQUUsTUFBSSxBQUFDLEFBQUM7QUFDYixBQUFNLGVBQUMsQUFBRyxBQUFDLEFBQ2I7QUFBQzs7OEJBRUQsQUFBSTtBQUNGLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFFLEFBQU0sQUFBQyxBQUNsQztBQUFDOzs4QkFFRCxBQUFRLDZCQUFJLEFBQWM7QUFDeEIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUUsS0FBRyxBQUFNLEFBQU0sQUFBQyxBQUMzQztBQUFDOzs4QkFFRCxBQUFPLDJCQUFJLEFBQWM7QUFDdkIsQUFBTSxlQUFDLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUUsS0FBRyxBQUFNLEFBQU0sQUFBQyxBQUMzQztBQUFDOzs4QkFFRCxBQUFPLDJCQUFDLEFBQWE7QUFDbkIsWUFBSSxBQUFHLE1BQUcsQUFBSSxLQUFDLEFBQUUsS0FBRyxBQUFDLEFBQUM7QUFDdEIsWUFBSSxBQUFLLFFBQUcsQUFBRyxNQUFHLEFBQUssQUFBQztBQUN4QixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLE1BQUMsQUFBSyxPQUFFLEFBQUcsQUFBQyxBQUFDLEFBQ3RDO0FBQUM7OzhCQUVELEFBQU87QUFDTCxBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUUsSUFBRSxBQUFJLEtBQUMsQUFBRSxLQUFHLEFBQUMsQUFBQyxBQUFDLEFBQ2hEO0FBQUMsQUFDRjs7OztBQVVELElBQUksQUFBQyxJQUFHLEFBQUMsQUFBQyxBQUVWLEFBQU0sQUFBQyxBQUFPOzs7QUE4R1osZ0JBQ1MsQUFBZ0IsS0FDdkIsQUFBWSxPQUNaLEFBQTBCLGNBQ2xCLEFBQTBCOzs7QUFIM0IsYUFBRyxNQUFILEFBQUcsQUFBYTtBQUdmLGFBQVksZUFBWixBQUFZLEFBQWM7QUFqSDVCLGFBQWlCLG9CQUFHLElBQUksQUFBSyxBQUFnQixBQUFDO0FBQzlDLGFBQVUsYUFBRyxJQUFJLEFBQUssQUFBUyxBQUFDO0FBQ2pDLGFBQW1CLHNCQUFHLElBQUksQUFBSyxBQUE4QixBQUFDO0FBQzlELGFBQVcsY0FBRyxJQUFJLEFBQUssQUFBMEIsQUFBQztBQUNsRCxhQUFjLGlCQUFHLElBQUksQUFBSyxBQUFtQixBQUFDO0FBRzlDLGFBQUssUUFBRyxBQUFlLGdCQUFDLEFBQUssQUFBRSxBQUFDO0FBRXZDLEFBQWlCO0FBRVQsYUFBRSxLQUFHLENBQUMsQUFBQyxBQUFDO0FBQ1IsYUFBRSxLQUFHLENBQUMsQUFBQyxBQUFDO0FBa0JULGFBQUUsS0FBUSxBQUFJLEFBQUM7QUFDZixhQUFFLEtBQVEsQUFBSSxBQUFDO0FBQ2YsYUFBRSxLQUFRLEFBQUksQUFBQztBQUNmLGFBQUUsS0FBUSxBQUFJLEFBQUM7QUFrRnBCLEFBQUksYUFBQyxBQUFHLE1BQUcsQUFBRyxBQUFDO0FBQ2YsQUFBSSxhQUFDLEFBQVMsWUFBRyxBQUFHLElBQUMsQUFBUyxBQUFDO0FBQy9CLEFBQUksYUFBQyxBQUFZLGVBQUcsQUFBWSxBQUFDO0FBQ2pDLEFBQUksYUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDO0FBQzVCLEFBQUksYUFBQyxBQUFpQixrQkFBQyxBQUFJLEtBQUMsQUFBWSxBQUFDLEFBQUMsQUFDNUM7QUExR0EsQUFBWSxBQUFFLEFBMEdiOztBQXJGRCxBQUErQztpQkFDL0MsQUFBSyx1QkFBQyxBQUFrQjtBQUN0QixBQUFJLGFBQUMsQUFBSyxNQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQVEsQUFBQyxBQUFDLEFBQUMsQUFBQyxBQUM1QztBQUFDO0FBRUQsQUFBOEM7OztpQkFDOUMsQUFBSSxxQkFBQyxBQUFrQjtBQUNyQixBQUFJLGFBQUMsQUFBUSxTQUFDLEFBQVEsQUFBQyxBQUFDLGFBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFHLEFBQUUsQUFBQyxBQUM5QztBQUFDO0FBRUQsQUFBZ0M7OztpQkFDaEMsQUFBVSxpQ0FBSSxBQUFrQjtBQUM5QixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQVEsU0FBQyxBQUFRLEFBQUMsQUFBQyxBQUFDLEFBQ2xDO0FBQUM7QUFFRCxBQUErQjs7O2lCQUMvQixBQUFTLCtCQUFJLEFBQWtCLFVBQUUsQUFBUTtBQUN2QyxBQUFJLGFBQUMsQUFBUSxTQUFDLEFBQVEsQUFBQyxBQUFDLGFBQUcsQUFBSyxBQUFDLEFBQ25DO0FBQUM7QUFFRCxBQUFzRDs7O2lCQUN0RCxBQUFTO0FBQ1AsQUFBSSxhQUFDLEFBQUssTUFBQyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQUUsQUFBQyxBQUFDO0FBQ3pCLEFBQUksYUFBQyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFFLEFBQUMsQUFBQztBQUN6QixBQUFJLGFBQUMsQUFBRSxLQUFHLEFBQUksS0FBQyxBQUFFLEtBQUcsQUFBQyxBQUFDO0FBQ3RCLEFBQXlCLEFBQzNCO0FBQUM7QUFFRCxBQUEyQjs7O2lCQUMzQixBQUFRO0FBQ04sQUFBSSxhQUFDLEFBQUUsS0FBRyxBQUFJLEtBQUMsQUFBRSxLQUFHLEFBQUMsQUFBQztBQUN0QixBQUFJLGFBQUMsQUFBRSxLQUFHLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBUSxTQUFTLEFBQUMsQUFBQyxBQUFDO0FBQ3pDLEFBQUksYUFBQyxBQUFFLEtBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFRLFNBQVMsQ0FBQyxBQUFDLEFBQUMsQUFBQyxBQUM1QztBQUFDO0FBRUQsQUFBa0M7OztpQkFDbEMsQUFBSSxxQkFBQyxBQUFVO0FBQ2IsQUFBSSxhQUFDLEFBQUUsS0FBRyxBQUFFLEFBQUMsQUFDZjtBQUFDO0FBRUQsQUFBMkU7OztpQkFDM0UsQUFBSSxxQkFBQyxBQUFVO0FBQ2IsQUFBSSxhQUFDLEFBQUUsS0FBRyxBQUFJLEtBQUMsQUFBRSxBQUFDO0FBQ2xCLEFBQUksYUFBQyxBQUFFLEtBQUcsQUFBRSxBQUFDLEFBQ2Y7QUFBQztBQUVELEFBQTBDOzs7aUJBQzFDLEFBQVEsNkJBQUMsQUFBVTtBQUNqQixBQUFJLGFBQUMsQUFBRSxLQUFHLEFBQUUsQUFBQyxBQUNmO0FBQUM7QUFFRCxBQUFnRDs7O2lCQUNoRCxBQUFNO0FBQ0osQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQUUsQUFBSyxPQUFDLEFBQUksS0FBQyxBQUFFLEtBQUcsQUFBQyxBQUFDLEFBQUMsR0FBQyxBQUFDO0FBQzlCLGtCQUFNLEFBQU0sQUFBQyxBQUNmO0FBQUM7QUFFRCxBQUFJLGFBQUMsQUFBRSxLQUFHLEFBQUksS0FBQyxBQUFFLEFBQUMsQUFDcEI7QUFBQyxBQUVELEFBQU07O09BQUMsQUFBTywyQkFDWixBQUFnQixLQUNoQixBQUEyQixNQUMzQixBQUEwQixjQUMxQixBQUEwQixjQUMxQixBQUErQjtBQUUvQixZQUFJLEFBQUssUUFBRyxBQUFLLE1BQUMsQUFBSSxLQUFDLEFBQUksTUFBRSxBQUFPLFFBQUMsQUFBVyxZQUFDLEFBQU8sUUFBQyxBQUFNLEFBQUMsQUFBQztBQUNqRSxZQUFJLEFBQUUsS0FBRyxJQUFJLEFBQUUsR0FBQyxBQUFHLEtBQUUsQUFBSyxPQUFFLEFBQVksY0FBRSxBQUFZLEFBQUMsQUFBQztBQUN4RCxBQUFFLFdBQUMsQUFBRSxLQUFHLEFBQU8sUUFBQyxBQUFLLEFBQUM7QUFDdEIsQUFBRSxXQUFDLEFBQW1CLG9CQUFDLEFBQUksS0FBQyxJQUFJLEFBQVUsQUFBa0IsQUFBQyxBQUFDO0FBQzlELEFBQU0sZUFBQyxBQUFFLEFBQUMsQUFDWjtBQUFDOztpQkFlRCxBQUFPLDJCQUFDLEFBQVk7QUFDbEIsQUFBTTtBQUNKLEFBQUcsaUJBQUUsQUFBSSxLQUFDLEFBQUc7QUFDYixBQUFLLG1CQUFFLEFBQUksS0FBQyxBQUFLLEFBQUU7QUFDbkIsQUFBWSwwQkFBRSxBQUFJLEtBQUMsQUFBWSxBQUFFO0FBQ2pDLEFBQUssbUJBQUUsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFPLFFBQUMsQUFBSSxBQUFDLEFBQ2hDLEFBQUMsQUFDSjtBQU5TO0FBTVI7O2lCQUVELEFBQWU7QUFDYixBQUFJLGFBQUMsQUFBVyxZQUFDLEFBQUksS0FBQyxBQUFJLEtBQUMsQUFBUSxBQUFFLFdBQUMsQUFBSSxBQUFFLEFBQUMsQUFBQyxBQUNoRDtBQUFDOztpQkFFRCxBQUFnQjtBQUNkLEFBQWdDO0FBQ2hDLEFBQWdCO0FBQ2hCLEFBQWdCO0FBQ2hCLEFBQWdCO0FBQ2hCLEFBQW1CO0FBQ25CLEFBQWM7QUFFZCxZQUFJLEFBQUcsTUFBRyxJQUFJLEFBQVcsWUFBQyxBQUFLLEFBQUMsQUFBQztBQUVqQyxZQUFJLEFBQU8sVUFBRyxBQUFJLEtBQUMsQUFBUSxBQUFFLEFBQUM7QUFDOUIsWUFBSSxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQVcsWUFBQyxBQUFHLEFBQUUsQUFBQztBQUNwQyxZQUFJLEFBQUksT0FBRyxBQUFNLFNBQUcsQUFBTyxRQUFDLEFBQVEsU0FBQyxBQUFNLEFBQUMsVUFBRyxBQUFPLFFBQUMsQUFBSSxBQUFFLEFBQUM7QUFDOUQsWUFBSSxBQUFJLE9BQUcsQUFBTyxRQUFDLEFBQUksQUFBRSxBQUFDO0FBQzFCLFlBQUksQUFBRyxNQUFHLEFBQVksYUFBQyxJQUFJLEFBQVMsVUFBQyxBQUFJLE1BQUUsQUFBSSxBQUFDLEFBQUMsQUFBQztBQUVsRCxZQUFJLEFBQUssUUFBRyxJQUFJLEFBQXVCLHdCQUFDLEFBQUcsS0FBRSxBQUFHLEFBQUMsQUFBQztBQUVsRCxBQUFPLGdCQUFDLEFBQVksYUFBQyxBQUFLLE9BQUUsQUFBSSxBQUFDLEFBQUM7QUFDbEMsQUFBTyxnQkFBQyxBQUFNLE9BQUMsSUFBSSxBQUFlLGdCQUFDLEFBQUssQUFBQyxBQUFDLEFBQUM7QUFDM0MsQUFBTyxnQkFBQyxBQUFNLE9BQUMsQUFBRyxBQUFDLEFBQUMsQUFDdEI7QUFBQzs7aUJBRUQsQUFBSyx1QkFBQyxBQUFZO0FBQ2hCLFlBQUksQUFBUSxXQUFHLElBQUksQUFBVSxBQUFrQixBQUFDO0FBRWhELFlBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFPLFFBQUMsQUFBSSxBQUFDLEFBQUM7QUFDL0IsWUFBSSxBQUFPLFVBQUcsQUFBSSxLQUFDLEFBQVEsQUFBRSxXQUFDLEFBQWtCLEFBQUUsQUFBQztBQUVuRCxZQUFJLEFBQVMsWUFBRyxJQUFJLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBRSxJQUFFLEFBQUssT0FBRSxBQUFPLFNBQUUsQUFBUSxBQUFDLEFBQUM7QUFFakUsQUFBSSxhQUFDLEFBQVEsU0FBQyxBQUFTLEFBQUMsQUFBQyxBQUMzQjtBQUFDOztpQkFFRCxBQUFPLDJCQUFDLEFBQW9DLE1BQUUsQUFBcUM7WUFBRSxBQUFRLCtFQUFHLElBQUksQUFBVSxBQUFrQjs7QUFDOUgsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQUssQUFBQztBQUN2QixBQUFLLGNBQUMsQUFBSSxLQUFDLEFBQUssQUFBQyxBQUFDO0FBQ2xCLEFBQUssY0FBQyxBQUFJLEtBQUMsQUFBSSxBQUFDLEFBQUM7QUFFakIsWUFBSSxBQUFLLFFBQUcsQUFBSSxLQUFDLEFBQU8sUUFBQyxBQUFDLEFBQUMsQUFBQztBQUM1QixZQUFJLEFBQU8sVUFBRyxBQUFJLEtBQUMsQUFBUSxBQUFFLFdBQUMsQUFBa0IsQUFBRSxBQUFDO0FBRW5ELEFBQW9CO0FBQ3BCLEFBQXFCO0FBQ3JCLEFBQXdCO0FBRXhCLEFBQU0sZUFBQyxJQUFJLEFBQVMsVUFBQyxBQUFJLEtBQUMsQUFBRSxJQUFFLEFBQUssT0FBRSxBQUFPLFNBQUUsQUFBUSxBQUFDLEFBQUMsQUFDMUQ7QUFBQzs7aUJBRUQsQUFBUywrQkFBQyxBQUFXLEtBQUUsQUFBaUI7QUFDdEMsQUFBSSxhQUFDLEFBQVMsQUFBRSxZQUFDLEFBQUcsSUFBQyxBQUFHLEFBQUMsT0FBRyxBQUFNLEFBQUM7QUFDbkMsQUFBSSxhQUFDLEFBQVEsU0FBQyxBQUFNLEFBQUMsQUFBQyxBQUN4QjtBQUFDOztpQkFFRCxBQUFTLCtCQUFDLEFBQWE7QUFDckIsWUFBSSxBQUFRLFdBQUcsSUFBSSxBQUFVLEFBQWUsQUFBQztBQUU3QyxZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBTyxRQUFDLEFBQUMsQUFBQyxBQUFDO0FBQzVCLFlBQUksQUFBTyxVQUFHLEFBQUksS0FBQyxBQUFRLEFBQUUsV0FBQyxBQUFhLGNBQUMsQUFBUSxBQUFDLEFBQUM7QUFDdEQsWUFBSSxBQUFTLFlBQUcsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFJLEFBQXFCLE9BQUMsQUFBUyxBQUFDO0FBRS9ELFlBQUksQUFBTSxTQUFHLElBQUksQUFBZSxnQkFBQyxBQUFLLE9BQUUsQUFBSyxPQUFFLEFBQU8sU0FBRSxBQUFRLFVBQUUsQUFBUyxBQUFDLEFBQUM7QUFFN0UsQUFBSSxhQUFDLEFBQWMsZUFBQyxBQUFJLEtBQUMsQUFBTSxBQUFDLEFBQUM7QUFFakMsQUFBSSxhQUFDLEFBQVEsU0FBQyxBQUFNLEFBQUMsQUFBQyxBQUN4QjtBQUFDOztpQkFFTyxBQUFRLDZCQUFDLEFBQW1CO0FBQ2xDLEFBQUksYUFBQyxBQUFVLFdBQUMsQUFBTSxBQUFDLEFBQUM7QUFDeEIsQUFBSSxhQUFDLEFBQW1CLG9CQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBUSxBQUFDLEFBQUMsQUFDakQ7QUFBQzs7aUJBRUQsQUFBSTtBQUNGLEFBQUksYUFBQyxBQUFRLEFBQUUsV0FBQyxBQUFRLEFBQUUsQUFBQztBQUMzQixBQUFJLGFBQUMsQUFBbUIsb0JBQUMsQUFBRyxBQUFFLEFBQUM7QUFFL0IsWUFBSSxBQUFNLFNBQUcsQUFBSSxLQUFDLEFBQVEsQUFBRSxXQUFDLEFBQUksQUFBaUIsQUFBQztBQUVuRCxBQUFNLGVBQUMsQUFBcUIsQUFBRSxBQUFDLEFBQ2pDO0FBQUM7O2lCQUVELEFBQVE7QUFDTixBQUFJLGFBQUMsQUFBSSxBQUFFLEFBQUM7QUFDWixBQUFJLGFBQUMsQUFBYyxlQUFDLEFBQUcsQUFBRSxBQUFDLEFBQzVCO0FBQUM7O2lCQUVELEFBQVUsaUNBQUMsQUFBc0I7QUFDL0IsQUFBSSxhQUFDLEFBQVEsQUFBRSxXQUFDLEFBQU0sT0FBQyxBQUFNLEFBQUMsQUFBQyxBQUNqQztBQUFDOztpQkFFRCxBQUFTO0FBQ1AsQUFBTSxlQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBYyxlQUFDLEFBQU8sU0FBRSxBQUF1QixBQUFDLEFBQUMsQUFDdEU7QUFBQzs7aUJBRUQsQUFBUTtBQUNOLEFBQU0sZUFBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQW1CLG9CQUFDLEFBQU8sU0FBRSxBQUF1RCxBQUFDLEFBQUMsQUFDM0c7QUFBQzs7aUJBRUQsQUFBUTtBQUNOLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBWSxBQUFDLEFBQzNCO0FBQUM7O2lCQUVELEFBQUs7QUFDSCxBQUFNLGVBQUMsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFVLFdBQUMsQUFBTyxTQUFFLEFBQW1DLEFBQUMsQUFBQyxBQUM5RTtBQUFDOztpQkFFRCxBQUFZO0FBQ1YsQUFBTSxlQUFDLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBaUIsa0JBQUMsQUFBTyxTQUFFLEFBQW1ELEFBQUMsQUFBQyxBQUNyRztBQUFDOztpQkFFRCxBQUFjO0FBQ1osQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBSSxLQUFDLEFBQUssQUFBRSxRQUFDLEFBQUssQUFBRSxBQUFDLEFBQUMsQUFDN0M7QUFBQzs7aUJBRUQsQUFBZTtZQUFDLEFBQVUsaUZBQUcsQUFBSzs7QUFDaEMsWUFBSSxBQUFXLGNBQUcsQUFBTSxPQUFDLEFBQUksS0FBQyxBQUFLLEFBQUUsUUFBQyxBQUFjLEFBQUUsa0JBQUUsQUFBMEQsQUFBQyxBQUFDO0FBQ3BILEFBQUksYUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQVUsYUFBRyxBQUFXLFlBQUMsQUFBSyxBQUFFLFVBQUcsQUFBVyxBQUFDLEFBQUMsQUFDdkU7QUFBQzs7aUJBRUQsQUFBZ0I7QUFDZCxZQUFJLEFBQUssUUFBRyxBQUFJLEtBQUMsQUFBWSxBQUFFLGVBQUMsQUFBSyxBQUFFLEFBQUM7QUFDeEMsQUFBSSxhQUFDLEFBQWlCLGtCQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQztBQUNuQyxBQUFNLGVBQUMsQUFBSyxBQUFDLEFBQ2Y7QUFBQzs7aUJBRUQsQUFBYSx1Q0FBQyxBQUFZLE1BQUUsQUFBbUI7QUFDN0MsWUFBSSxBQUFLLFFBQUcsQUFBSyxNQUFDLEFBQUssTUFBQyxBQUFJLEFBQUMsQUFBQztBQUM5QixBQUFFLEFBQUMsWUFBQyxBQUFVLEFBQUMsWUFBQyxBQUFLLE1BQUMsQUFBZSxnQkFBQyxBQUFJLEtBQUMsQUFBSyxBQUFFLEFBQUMsQUFBQztBQUNwRCxBQUFJLGFBQUMsQUFBVSxXQUFDLEFBQUksS0FBQyxBQUFLLEFBQUMsQUFBQztBQUM1QixBQUFNLGVBQUMsQUFBSyxBQUFDLEFBQ2Y7QUFBQzs7aUJBRUQsQUFBUTtBQUNOLEFBQUksYUFBQyxBQUFVLFdBQUMsQUFBRyxBQUFFLEFBQUMsQUFDeEI7QUFBQzs7aUJBRUQsQUFBZTtBQUNiLEFBQUksYUFBQyxBQUFpQixrQkFBQyxBQUFHLEFBQUUsQUFBQyxBQUMvQjtBQUFDOztpQkFFRCxBQUFjLHlDQUFDLEFBQWM7QUFDM0IsQUFBSSxhQUFDLEFBQVEsQUFBRSxXQUFDLEFBQWMsZUFBQyxBQUFDLEFBQUMsQUFBQyxBQUNwQztBQUFDO0FBRUQsQUFBaUI7OztpQkFFakIsQUFBTztBQUNMLEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBSyxBQUFFLFFBQUMsQUFBTyxBQUFFLEFBQUMsQUFDaEM7QUFBQzs7aUJBRUQsQUFBa0IsaURBQUMsQUFBYztBQUMvQixBQUFNLGVBQUMsQUFBSSxLQUFDLEFBQUssQUFBRSxRQUFDLEFBQVMsVUFBQyxBQUFNLEFBQUMsQUFBQyxBQUN4QztBQUFDO0FBRUQsQUFBYTs7O2lCQUViLEFBQU8sMkJBQUMsQUFBYSxPQUFFLEFBQTZCO0FBQ2xELEFBQUksYUFBQyxBQUFFLEtBQUcsQUFBSyxBQUFDO0FBRWhCLEFBQUUsQUFBQyxZQUFDLEFBQVUsQUFBQyxZQUFDLEFBQVUsV0FBQyxBQUFJLEFBQUMsQUFBQztBQUVqQyxZQUFJLEFBQW9DLEFBQUM7QUFFekMsZUFBTyxBQUFJLE1BQUUsQUFBQztBQUNaLEFBQU0scUJBQUcsQUFBSSxLQUFDLEFBQUksQUFBRSxBQUFDO0FBQ3JCLEFBQUUsQUFBQyxnQkFBQyxBQUFNLE9BQUMsQUFBSSxBQUFDLE1BQUMsQUFBSyxBQUFDLEFBQ3pCO0FBQUM7QUFFRCxBQUFNLGVBQUMsQUFBTSxPQUFDLEFBQXFCLEFBQUMsQUFDdEM7QUFBQzs7aUJBRUQsQUFBSTtBQUNGLEFBQUksWUFBRSxBQUFHLE1BQXdDLEFBQUksQUFBQztZQUEzQyxBQUFtQjtZQUFFLEFBQVksQUFBRTs7QUFDOUMsWUFBSSxBQUFzQixBQUFDO0FBRTNCLEFBQUUsQUFBQyxZQUFDLEFBQUMsQUFBRSxNQUFHLEFBQU0sQUFBQyxRQUFDLEFBQUM7QUFDakIsa0JBQU0sQUFBTSxBQUFDLEFBQ2Y7QUFBQztBQUVELEFBQUUsQUFBQyxZQUFDLEFBQU0sU0FBRyxBQUFJLEtBQUMsQUFBYSxjQUFDLEFBQUcsQUFBQyxBQUFDLE1BQUMsQUFBQztBQUNyQyxBQUFjLDJCQUFDLEFBQVEsU0FBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU0sT0FBQyxBQUFJLEFBQUMsQUFBQztBQUNuRCxBQUFNLG1CQUFDLEVBQUUsQUFBSSxNQUFFLEFBQUssT0FBRSxBQUFLLE9BQUUsQUFBSSxBQUFFLEFBQUMsQUFDdEM7QUFBQztBQUVELEFBQU07QUFDSixBQUFJLGtCQUFFLEFBQUk7QUFDVixBQUFLLG1CQUFFLElBQUksQUFBWSxhQUNyQixBQUFHLEtBQ0gsQUFBTSxPQUFDLEFBQW1CLG9CQUFDLEFBQUcsQUFBRSxPQUFFLEFBQStDLEFBQUMsa0RBQ2xGLEFBQVksYUFBQyxBQUFRLEFBQUUsQUFDeEIsQUFDRixBQUFDLEFBQ0o7QUFSUztBQVFSOztpQkFFTyxBQUFhLHVDQUFDLEFBQWdCO0FBQ3BDLEFBQUksWUFBRSxBQUFFLEFBQUUsS0FBRyxBQUFJLEFBQUM7O0FBRWxCLEFBQUUsQUFBQyxZQUFDLEFBQUUsT0FBSyxDQUFDLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDZCxBQUFNLG1CQUFDLEFBQUksQUFBQyxBQUNkO0FBQUM7QUFFRCxZQUFJLEFBQU8sVUFBRyxBQUFHLElBQUMsQUFBTyxBQUFDO0FBQzFCLEFBQUksYUFBQyxBQUFFLE1BQUksQUFBQyxBQUFDO0FBQ2IsQUFBTSxlQUFDLEFBQU8sUUFBQyxBQUFNLE9BQUMsQUFBRSxBQUFDLEFBQUMsQUFDNUI7QUFBQzs7aUJBRUQsQUFBYyx5Q0FBQyxBQUFjO0FBQzNCLEFBQWMsdUJBQUMsQUFBUSxTQUFDLEFBQUksTUFBRSxBQUFNLFFBQUUsQUFBTSxPQUFDLEFBQUksQUFBQyxBQUFDLEFBQ3JEO0FBQUM7O2lCQUVELEFBQWdCLDZDQUFDLEFBQXVCO0FBQ3RDLFlBQUksQUFBSyxRQUFHLEFBQUksS0FBQyxBQUFZLEFBQUUsQUFBQztBQUVoQyxBQUFHLGFBQUMsSUFBSSxBQUFDLEtBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFDLEdBQUUsQUFBQyxNQUFFLEFBQUMsR0FBRSxBQUFDLEFBQUUsTUFBRSxBQUFDO0FBQ3RDLGdCQUFJLEFBQUksT0FBRyxBQUFJLEtBQUMsQUFBUyxVQUFDLEFBQVMsVUFBQyxBQUFLLE1BQUMsQUFBQyxBQUFDLEFBQUMsQUFBQztBQUM5QyxBQUFLLGtCQUFDLEFBQUcsSUFBQyxBQUFJLE1BQUUsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFHLEFBQWtDLEFBQUMsQUFBQyxBQUNwRTtBQUFDLEFBQ0g7QUFBQyxBQUNGOzs7OztBQW5WRyxBQUFNLG1CQUFDLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBRSxBQUFDLEFBQ3ZCO0FBQUMsQUFFRCxBQUFZLEFBQUU7dUJBQUMsQUFBVTtBQUN2QixBQUFJLGlCQUFDLEFBQUssTUFBQyxBQUFFLEtBQUcsQUFBRSxBQUFDLEFBQ3JCO0FBQUMsQUFFRCxBQUFZLEFBQUU7Ozs7QUFDWixBQUFNLG1CQUFDLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBRSxBQUFDLEFBQ3ZCO0FBQUMsQUFFRCxBQUFZLEFBQUU7dUJBQUMsQUFBVTtBQUN2QixBQUFJLGlCQUFDLEFBQUssTUFBQyxBQUFFLEtBQUcsQUFBRSxBQUFDLEFBQ3JCO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWdpc3RlciB9IGZyb20gJy4uL29wY29kZXMnO1xuaW1wb3J0IHsgU2NvcGUsIER5bmFtaWNTY29wZSwgRW52aXJvbm1lbnQsIE9wY29kZSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVsZW1lbnRTdGFjayB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgT3B0aW9uLCBEZXN0cm95YWJsZSwgU3RhY2ssIExpbmtlZExpc3QsIExpc3RTbGljZSwgT3BhcXVlLCBhc3NlcnQsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlSXRlcmF0b3IsIFBhdGhSZWZlcmVuY2UsIFZlcnNpb25lZFBhdGhSZWZlcmVuY2UsIGNvbWJpbmVTbGljZSB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5pbXBvcnQgeyBDb21waWxlZER5bmFtaWNQcm9ncmFtIH0gZnJvbSAnLi4vY29tcGlsZWQvYmxvY2tzJztcbmltcG9ydCB7IExhYmVsT3Bjb2RlLCBKdW1wSWZOb3RNb2RpZmllZE9wY29kZSwgRGlkTW9kaWZ5T3Bjb2RlIH0gZnJvbSAnLi4vY29tcGlsZWQvb3Bjb2Rlcy92bSc7XG5pbXBvcnQgeyBWTVN0YXRlLCBMaXN0QmxvY2tPcGNvZGUsIFRyeU9wY29kZSwgQmxvY2tPcGNvZGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5pbXBvcnQgUmVuZGVyUmVzdWx0IGZyb20gJy4vcmVuZGVyLXJlc3VsdCc7XG5cbmltcG9ydCB7XG4gIEFQUEVORF9PUENPREVTLFxuICBVcGRhdGluZ09wY29kZVxufSBmcm9tICcuLi9vcGNvZGVzJztcblxuaW1wb3J0IHtcbiAgQ29uc3RhbnRzLFxuICBDb25zdGFudFN0cmluZ1xufSBmcm9tICcuLi9lbnZpcm9ubWVudC9jb25zdGFudHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1ZNIHtcbiAgZW52OiBFbnZpcm9ubWVudDtcbiAgZHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZTtcbiAgZ2V0U2VsZigpOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT47XG4gIG5ld0Rlc3Ryb3lhYmxlKGQ6IERlc3Ryb3lhYmxlKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgQ2FwdHVyZWRTdGFjayA9IE9wYXF1ZVtdO1xuXG5leHBvcnQgY2xhc3MgRXZhbHVhdGlvblN0YWNrIHtcbiAgc3RhdGljIGVtcHR5KCk6IEV2YWx1YXRpb25TdGFjayB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKFtdLCAwLCAtMSk7XG4gIH1cblxuICBzdGF0aWMgcmVzdG9yZShzbmFwc2hvdDogQ2FwdHVyZWRTdGFjayk6IEV2YWx1YXRpb25TdGFjayB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHNuYXBzaG90LnNsaWNlKCksIDAsIHNuYXBzaG90Lmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGFjazogT3BhcXVlW10sIHB1YmxpYyBmcDogbnVtYmVyLCBwdWJsaWMgc3A6IG51bWJlcikge1xuICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5zcCA9PT0gLTE7XG4gIH1cblxuICBwdXNoKHZhbHVlOiBPcGFxdWUpOiB2b2lkIHtcbiAgICB0aGlzLnN0YWNrWysrdGhpcy5zcF0gPSB2YWx1ZTtcbiAgfVxuXG4gIGR1cChwb3NpdGlvbiA9IHRoaXMuc3ApOiB2b2lkIHtcbiAgICB0aGlzLnB1c2godGhpcy5zdGFja1twb3NpdGlvbl0pO1xuICB9XG5cbiAgcG9wPFQ+KG4gPSAxKTogVCB7XG4gICAgbGV0IHRvcCA9IHRoaXMuc3RhY2tbdGhpcy5zcF0gYXMgVDtcbiAgICB0aGlzLnNwIC09IG47XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuXG4gIHBlZWs8VD4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zcF0gYXMgVDtcbiAgfVxuXG4gIGZyb21CYXNlPFQ+KG9mZnNldDogbnVtYmVyKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5mcCAtIG9mZnNldF0gYXMgVDtcbiAgfVxuXG4gIGZyb21Ub3A8VD4ob2Zmc2V0OiBudW1iZXIpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja1t0aGlzLnNwIC0gb2Zmc2V0XSBhcyBUO1xuICB9XG5cbiAgY2FwdHVyZShpdGVtczogbnVtYmVyKTogQ2FwdHVyZWRTdGFjayB7XG4gICAgbGV0IGVuZCA9IHRoaXMuc3AgKyAxO1xuICAgIGxldCBzdGFydCA9IGVuZCAtIGl0ZW1zO1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zbGljZSh0aGlzLmZwLCB0aGlzLnNwICsgMSk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSXRlcmF0b3JSZXN1bHQ8VD4gPSB7XG4gIGRvbmU6IGZhbHNlO1xuICB2YWx1ZTogbnVsbDtcbn0gfCB7XG4gIGRvbmU6IHRydWU7XG4gIHZhbHVlOiBUO1xufTtcblxubGV0IGkgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWTSBpbXBsZW1lbnRzIFB1YmxpY1ZNIHtcbiAgcHJpdmF0ZSBkeW5hbWljU2NvcGVTdGFjayA9IG5ldyBTdGFjazxEeW5hbWljU2NvcGU+KCk7XG4gIHByaXZhdGUgc2NvcGVTdGFjayA9IG5ldyBTdGFjazxTY29wZT4oKTtcbiAgcHVibGljIHVwZGF0aW5nT3Bjb2RlU3RhY2sgPSBuZXcgU3RhY2s8TGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4+KCk7XG4gIHB1YmxpYyBjYWNoZUdyb3VwcyA9IG5ldyBTdGFjazxPcHRpb248VXBkYXRpbmdPcGNvZGU+PigpO1xuICBwdWJsaWMgbGlzdEJsb2NrU3RhY2sgPSBuZXcgU3RhY2s8TGlzdEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG5cbiAgcHVibGljIHN0YWNrID0gRXZhbHVhdGlvblN0YWNrLmVtcHR5KCk7XG5cbiAgLyoqIFJlZ2lzdGVycyAqKi9cblxuICBwcml2YXRlIHBjID0gLTE7XG4gIHByaXZhdGUgcmEgPSAtMTtcblxuICBwcml2YXRlIGdldCBmcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLmZwO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgZnAoZnA6IG51bWJlcikge1xuICAgIHRoaXMuc3RhY2suZnAgPSBmcDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suc3A7XG4gIH1cblxuICBwcml2YXRlIHNldCBzcChzcDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdGFjay5zcCA9IHNwO1xuICB9XG5cbiAgcHVibGljIHMwOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgczE6IGFueSA9IG51bGw7XG4gIHB1YmxpYyB0MDogYW55ID0gbnVsbDtcbiAgcHVibGljIHQxOiBhbnkgPSBudWxsO1xuXG4gIC8vIEZldGNoIGEgdmFsdWUgZnJvbSBhIHJlZ2lzdGVyIG9udG8gdGhlIHN0YWNrXG4gIGZldGNoKHJlZ2lzdGVyOiBSZWdpc3Rlcikge1xuICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzW1JlZ2lzdGVyW3JlZ2lzdGVyXV0pO1xuICB9XG5cbiAgLy8gTG9hZCBhIHZhbHVlIGZyb20gdGhlIHN0YWNrIGludG8gYSByZWdpc3RlclxuICBsb2FkKHJlZ2lzdGVyOiBSZWdpc3Rlcikge1xuICAgIHRoaXNbUmVnaXN0ZXJbcmVnaXN0ZXJdXSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gIH1cblxuICAvLyBGZXRjaCBhIHZhbHVlIGZyb20gYSByZWdpc3RlclxuICBmZXRjaFZhbHVlPFQ+KHJlZ2lzdGVyOiBSZWdpc3Rlcik6IFQge1xuICAgIHJldHVybiB0aGlzW1JlZ2lzdGVyW3JlZ2lzdGVyXV07XG4gIH1cblxuICAvLyBMb2FkIGEgdmFsdWUgaW50byBhIHJlZ2lzdGVyXG4gIGxvYWRWYWx1ZTxUPihyZWdpc3RlcjogUmVnaXN0ZXIsIHZhbHVlOiBUKSB7XG4gICAgdGhpc1tSZWdpc3RlcltyZWdpc3Rlcl1dID0gdmFsdWU7XG4gIH1cblxuICAvLyBTdGFydCBhIG5ldyBmcmFtZSBhbmQgc2F2ZSAkcmEgYW5kICRmcCBvbiB0aGUgc3RhY2tcbiAgcHVzaEZyYW1lKCkge1xuICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLnJhKTtcbiAgICB0aGlzLnN0YWNrLnB1c2godGhpcy5mcCk7XG4gICAgdGhpcy5mcCA9IHRoaXMuc3AgLSAxO1xuICAgIC8vIHRoaXMuZnAgPSB0aGlzLnNwICsgMTtcbiAgfVxuXG4gIC8vIFJlc3RvcmUgJHJhLCAkc3AgYW5kICRmcFxuICBwb3BGcmFtZSgpIHtcbiAgICB0aGlzLnNwID0gdGhpcy5mcCAtIDE7XG4gICAgdGhpcy5yYSA9IHRoaXMuc3RhY2suZnJvbUJhc2U8bnVtYmVyPigwKTtcbiAgICB0aGlzLmZwID0gdGhpcy5zdGFjay5mcm9tQmFzZTxudW1iZXI+KC0xKTtcbiAgfVxuXG4gIC8vIEp1bXAgdG8gYW4gYWRkcmVzcyBpbiBgcHJvZ3JhbWBcbiAgZ290byhwYzogbnVtYmVyKSB7XG4gICAgdGhpcy5wYyA9IHBjO1xuICB9XG5cbiAgLy8gU2F2ZSAkcGMgaW50byAkcmEsIHRoZW4ganVtcCB0byBhIG5ldyBhZGRyZXNzIGluIGBwcm9ncmFtYCAoamFsIGluIE1JUFMpXG4gIGNhbGwocGM6IG51bWJlcikge1xuICAgIHRoaXMucmEgPSB0aGlzLnBjO1xuICAgIHRoaXMucGMgPSBwYztcbiAgfVxuXG4gIC8vIFB1dCBhIHNwZWNpZmljIGBwcm9ncmFtYCBhZGRyZXNzIGluICRyYVxuICByZXR1cm5UbyhyYTogbnVtYmVyKSB7XG4gICAgdGhpcy5yYSA9IHJhO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRvIHRoZSBgcHJvZ3JhbWAgYWRkcmVzcyBzdG9yZWQgaW4gJHJhXG4gIHJldHVybigpIHtcbiAgICBpZiAodGhpcy5wYyA9PT0gKHRoaXMucmEgKyA0KSkge1xuICAgICAgdGhyb3cgXCJaT01HXCI7XG4gICAgfVxuXG4gICAgdGhpcy5wYyA9IHRoaXMucmE7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhbChcbiAgICBlbnY6IEVudmlyb25tZW50LFxuICAgIHNlbGY6IFBhdGhSZWZlcmVuY2U8T3BhcXVlPixcbiAgICBkeW5hbWljU2NvcGU6IER5bmFtaWNTY29wZSxcbiAgICBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjayxcbiAgICBwcm9ncmFtOiBDb21waWxlZER5bmFtaWNQcm9ncmFtXG4gICkge1xuICAgIGxldCBzY29wZSA9IFNjb3BlLnJvb3Qoc2VsZiwgcHJvZ3JhbS5zeW1ib2xUYWJsZS5zeW1ib2xzLmxlbmd0aCk7XG4gICAgbGV0IHZtID0gbmV3IFZNKGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSwgZWxlbWVudFN0YWNrKTtcbiAgICB2bS5wYyA9IHByb2dyYW0uc3RhcnQ7XG4gICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTtcbiAgICByZXR1cm4gdm07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzY29wZTogU2NvcGUsXG4gICAgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGUsXG4gICAgcHJpdmF0ZSBlbGVtZW50U3RhY2s6IEVsZW1lbnRTdGFjayxcbiAgKSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZWxlbWVudFN0YWNrID0gZWxlbWVudFN0YWNrO1xuICAgIHRoaXMuc2NvcGVTdGFjay5wdXNoKHNjb3BlKTtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnB1c2goZHluYW1pY1Njb3BlKTtcbiAgfVxuXG4gIGNhcHR1cmUoYXJnczogbnVtYmVyKTogVk1TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICBzY29wZTogdGhpcy5zY29wZSgpLFxuICAgICAgZHluYW1pY1Njb3BlOiB0aGlzLmR5bmFtaWNTY29wZSgpLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2suY2FwdHVyZShhcmdzKVxuICAgIH07XG4gIH1cblxuICBiZWdpbkNhY2hlR3JvdXAoKSB7XG4gICAgdGhpcy5jYWNoZUdyb3Vwcy5wdXNoKHRoaXMudXBkYXRpbmcoKS50YWlsKCkpO1xuICB9XG5cbiAgY29tbWl0Q2FjaGVHcm91cCgpIHtcbiAgICAvLyAgICAgICAgSnVtcElmTm90TW9kaWZpZWQoRU5EKVxuICAgIC8vICAgICAgICAoaGVhZClcbiAgICAvLyAgICAgICAgKC4uLi4pXG4gICAgLy8gICAgICAgICh0YWlsKVxuICAgIC8vICAgICAgICBEaWRNb2RpZnlcbiAgICAvLyBFTkQ6ICAgTm9vcFxuXG4gICAgbGV0IEVORCA9IG5ldyBMYWJlbE9wY29kZShcIkVORFwiKTtcblxuICAgIGxldCBvcGNvZGVzID0gdGhpcy51cGRhdGluZygpO1xuICAgIGxldCBtYXJrZXIgPSB0aGlzLmNhY2hlR3JvdXBzLnBvcCgpO1xuICAgIGxldCBoZWFkID0gbWFya2VyID8gb3Bjb2Rlcy5uZXh0Tm9kZShtYXJrZXIpIDogb3Bjb2Rlcy5oZWFkKCk7XG4gICAgbGV0IHRhaWwgPSBvcGNvZGVzLnRhaWwoKTtcbiAgICBsZXQgdGFnID0gY29tYmluZVNsaWNlKG5ldyBMaXN0U2xpY2UoaGVhZCwgdGFpbCkpO1xuXG4gICAgbGV0IGd1YXJkID0gbmV3IEp1bXBJZk5vdE1vZGlmaWVkT3Bjb2RlKHRhZywgRU5EKTtcblxuICAgIG9wY29kZXMuaW5zZXJ0QmVmb3JlKGd1YXJkLCBoZWFkKTtcbiAgICBvcGNvZGVzLmFwcGVuZChuZXcgRGlkTW9kaWZ5T3Bjb2RlKGd1YXJkKSk7XG4gICAgb3Bjb2Rlcy5hcHBlbmQoRU5EKTtcbiAgfVxuXG4gIGVudGVyKGFyZ3M6IG51bWJlcikge1xuICAgIGxldCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpO1xuXG4gICAgbGV0IHN0YXRlID0gdGhpcy5jYXB0dXJlKGFyZ3MpO1xuICAgIGxldCB0cmFja2VyID0gdGhpcy5lbGVtZW50cygpLnB1c2hVcGRhdGFibGVCbG9jaygpO1xuXG4gICAgbGV0IHRyeU9wY29kZSA9IG5ldyBUcnlPcGNvZGUodGhpcy5wYywgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nKTtcblxuICAgIHRoaXMuZGlkRW50ZXIodHJ5T3Bjb2RlKTtcbiAgfVxuXG4gIGl0ZXJhdGUobWVtbzogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB2YWx1ZTogVmVyc2lvbmVkUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCB1cGRhdGluZyA9IG5ldyBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPigpKTogVHJ5T3Bjb2RlIHtcbiAgICBsZXQgc3RhY2sgPSB0aGlzLnN0YWNrO1xuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgIHN0YWNrLnB1c2gobWVtbyk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoMik7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLmVsZW1lbnRzKCkucHVzaFVwZGF0YWJsZUJsb2NrKCk7XG5cbiAgICAvLyBsZXQgaXAgPSB0aGlzLmlwO1xuICAgIC8vIHRoaXMuaXAgPSBlbmQgKyA0O1xuICAgIC8vIHRoaXMuZnJhbWVzLnB1c2goaXApO1xuXG4gICAgcmV0dXJuIG5ldyBUcnlPcGNvZGUodGhpcy5wYywgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nKTtcbiAgfVxuXG4gIGVudGVySXRlbShrZXk6IHN0cmluZywgb3Bjb2RlOiBUcnlPcGNvZGUpIHtcbiAgICB0aGlzLmxpc3RCbG9jaygpLm1hcFtrZXldID0gb3Bjb2RlO1xuICAgIHRoaXMuZGlkRW50ZXIob3Bjb2RlKTtcbiAgfVxuXG4gIGVudGVyTGlzdChzdGFydDogbnVtYmVyKSB7XG4gICAgbGV0IHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8QmxvY2tPcGNvZGU+KCk7XG5cbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNhcHR1cmUoMCk7XG4gICAgbGV0IHRyYWNrZXIgPSB0aGlzLmVsZW1lbnRzKCkucHVzaEJsb2NrTGlzdCh1cGRhdGluZyk7XG4gICAgbGV0IGFydGlmYWN0cyA9IHRoaXMuc3RhY2sucGVlazxSZWZlcmVuY2VJdGVyYXRvcj4oKS5hcnRpZmFjdHM7XG5cbiAgICBsZXQgb3Bjb2RlID0gbmV3IExpc3RCbG9ja09wY29kZShzdGFydCwgc3RhdGUsIHRyYWNrZXIsIHVwZGF0aW5nLCBhcnRpZmFjdHMpO1xuXG4gICAgdGhpcy5saXN0QmxvY2tTdGFjay5wdXNoKG9wY29kZSk7XG5cbiAgICB0aGlzLmRpZEVudGVyKG9wY29kZSk7XG4gIH1cblxuICBwcml2YXRlIGRpZEVudGVyKG9wY29kZTogQmxvY2tPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0ZVdpdGgob3Bjb2RlKTtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaChvcGNvZGUuY2hpbGRyZW4pO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmVsZW1lbnRzKCkucG9wQmxvY2soKTtcbiAgICB0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCk7XG5cbiAgICBsZXQgcGFyZW50ID0gdGhpcy51cGRhdGluZygpLnRhaWwoKSBhcyBCbG9ja09wY29kZTtcblxuICAgIHBhcmVudC5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGV4aXRMaXN0KCkge1xuICAgIHRoaXMuZXhpdCgpO1xuICAgIHRoaXMubGlzdEJsb2NrU3RhY2sucG9wKCk7XG4gIH1cblxuICB1cGRhdGVXaXRoKG9wY29kZTogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nKCkuYXBwZW5kKG9wY29kZSk7XG4gIH1cblxuICBsaXN0QmxvY2soKTogTGlzdEJsb2NrT3Bjb2RlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMubGlzdEJsb2NrU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIGEgbGlzdCBibG9jaycpO1xuICB9XG5cbiAgdXBkYXRpbmcoKTogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4ge1xuICAgIHJldHVybiBleHBlY3QodGhpcy51cGRhdGluZ09wY29kZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCB1cGRhdGluZyBvcGNvZGUgb24gdGhlIHVwZGF0aW5nIG9wY29kZSBzdGFjaycpO1xuICB9XG5cbiAgZWxlbWVudHMoKTogRWxlbWVudFN0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U3RhY2s7XG4gIH1cblxuICBzY29wZSgpOiBTY29wZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLnNjb3BlU3RhY2suY3VycmVudCwgJ2V4cGVjdGVkIHNjb3BlIG9uIHRoZSBzY29wZSBzdGFjaycpO1xuICB9XG5cbiAgZHluYW1pY1Njb3BlKCk6IER5bmFtaWNTY29wZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQsICdleHBlY3RlZCBkeW5hbWljIHNjb3BlIG9uIHRoZSBkeW5hbWljIHNjb3BlIHN0YWNrJyk7XG4gIH1cblxuICBwdXNoQ2hpbGRTY29wZSgpIHtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaCh0aGlzLnNjb3BlKCkuY2hpbGQoKSk7XG4gIH1cblxuICBwdXNoQ2FsbGVyU2NvcGUoY2hpbGRTY29wZSA9IGZhbHNlKSB7XG4gICAgbGV0IGNhbGxlclNjb3BlID0gZXhwZWN0KHRoaXMuc2NvcGUoKS5nZXRDYWxsZXJTY29wZSgpLCAncHVzaENhbGxlclNjb3BlIGlzIGNhbGxlZCB3aGVuIGEgY2FsbGVyIHNjb3BlIGlzIHByZXNlbnQnKTtcbiAgICB0aGlzLnNjb3BlU3RhY2sucHVzaChjaGlsZFNjb3BlID8gY2FsbGVyU2NvcGUuY2hpbGQoKSA6IGNhbGxlclNjb3BlKTtcbiAgfVxuXG4gIHB1c2hEeW5hbWljU2NvcGUoKTogRHluYW1pY1Njb3BlIHtcbiAgICBsZXQgY2hpbGQgPSB0aGlzLmR5bmFtaWNTY29wZSgpLmNoaWxkKCk7XG4gICAgdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKGNoaWxkKTtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICBwdXNoUm9vdFNjb3BlKHNpemU6IG51bWJlciwgYmluZENhbGxlcjogYm9vbGVhbik6IFNjb3BlIHtcbiAgICBsZXQgc2NvcGUgPSBTY29wZS5zaXplZChzaXplKTtcbiAgICBpZiAoYmluZENhbGxlcikgc2NvcGUuYmluZENhbGxlclNjb3BlKHRoaXMuc2NvcGUoKSk7XG4gICAgdGhpcy5zY29wZVN0YWNrLnB1c2goc2NvcGUpO1xuICAgIHJldHVybiBzY29wZTtcbiAgfVxuXG4gIHBvcFNjb3BlKCkge1xuICAgIHRoaXMuc2NvcGVTdGFjay5wb3AoKTtcbiAgfVxuXG4gIHBvcER5bmFtaWNTY29wZSgpIHtcbiAgICB0aGlzLmR5bmFtaWNTY29wZVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgbmV3RGVzdHJveWFibGUoZDogRGVzdHJveWFibGUpIHtcbiAgICB0aGlzLmVsZW1lbnRzKCkubmV3RGVzdHJveWFibGUoZCk7XG4gIH1cblxuICAvLy8gU0NPUEUgSEVMUEVSU1xuXG4gIGdldFNlbGYoKTogUGF0aFJlZmVyZW5jZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zY29wZSgpLmdldFNlbGYoKTtcbiAgfVxuXG4gIHJlZmVyZW5jZUZvclN5bWJvbChzeW1ib2w6IG51bWJlcik6IFBhdGhSZWZlcmVuY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIC8vLyBFWEVDVVRJT05cblxuICBleGVjdXRlKHN0YXJ0OiBudW1iZXIsIGluaXRpYWxpemU/OiAodm06IFZNKSA9PiB2b2lkKTogUmVuZGVyUmVzdWx0IHtcbiAgICB0aGlzLnBjID0gc3RhcnQ7XG5cbiAgICBpZiAoaW5pdGlhbGl6ZSkgaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGxldCByZXN1bHQ6IEl0ZXJhdG9yUmVzdWx0PFJlbmRlclJlc3VsdD47XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5uZXh0KCk7XG4gICAgICBpZiAocmVzdWx0LmRvbmUpIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQudmFsdWUgYXMgUmVuZGVyUmVzdWx0O1xuICB9XG5cbiAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxSZW5kZXJSZXN1bHQ+IHtcbiAgICBsZXQgeyBlbnYsIHVwZGF0aW5nT3Bjb2RlU3RhY2ssIGVsZW1lbnRTdGFjayB9ID0gdGhpcztcbiAgICBsZXQgb3Bjb2RlOiBPcHRpb248T3Bjb2RlPjtcblxuICAgIGlmIChpKysgPiAxMDAwMDApIHtcbiAgICAgIHRocm93IFwiem9tZ1wiO1xuICAgIH1cblxuICAgIGlmIChvcGNvZGUgPSB0aGlzLm5leHRTdGF0ZW1lbnQoZW52KSkge1xuICAgICAgQVBQRU5EX09QQ09ERVMuZXZhbHVhdGUodGhpcywgb3Bjb2RlLCBvcGNvZGUudHlwZSk7XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG51bGwgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXcgUmVuZGVyUmVzdWx0KFxuICAgICAgICBlbnYsXG4gICAgICAgIGV4cGVjdCh1cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpLCAndGhlcmUgc2hvdWxkIGJlIGEgZmluYWwgdXBkYXRpbmcgb3Bjb2RlIHN0YWNrJyksXG4gICAgICAgIGVsZW1lbnRTdGFjay5wb3BCbG9jaygpXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dFN0YXRlbWVudChlbnY6IEVudmlyb25tZW50KTogT3B0aW9uPE9wY29kZT4ge1xuICAgIGxldCB7IHBjIH0gPSB0aGlzO1xuXG4gICAgaWYgKHBjID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHByb2dyYW0gPSBlbnYucHJvZ3JhbTtcbiAgICB0aGlzLnBjICs9IDQ7XG4gICAgcmV0dXJuIHByb2dyYW0ub3Bjb2RlKHBjKTtcbiAgfVxuXG4gIGV2YWx1YXRlT3Bjb2RlKG9wY29kZTogT3Bjb2RlKSB7XG4gICAgQVBQRU5EX09QQ09ERVMuZXZhbHVhdGUodGhpcywgb3Bjb2RlLCBvcGNvZGUudHlwZSk7XG4gIH1cblxuICBiaW5kRHluYW1pY1Njb3BlKG5hbWVzOiBDb25zdGFudFN0cmluZ1tdKSB7XG4gICAgbGV0IHNjb3BlID0gdGhpcy5keW5hbWljU2NvcGUoKTtcblxuICAgIGZvcihsZXQgaT1uYW1lcy5sZW5ndGggLSAxOyBpPj0wOyBpLS0pIHtcbiAgICAgIGxldCBuYW1lID0gdGhpcy5jb25zdGFudHMuZ2V0U3RyaW5nKG5hbWVzW2ldKTtcbiAgICAgIHNjb3BlLnNldChuYW1lLCB0aGlzLnN0YWNrLnBvcDxWZXJzaW9uZWRQYXRoUmVmZXJlbmNlPE9wYXF1ZT4+KCkpO1xuICAgIH1cbiAgfVxufVxuIl19

@@ -13,3 +13,3 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }

import { ElementStack } from '../builder';
import { Stack, dict, expect } from '@glimmer/util';
import { Stack, LinkedList, dict, expect } from '@glimmer/util';
import { IteratorSynchronizer,

@@ -19,3 +19,3 @@ // Tags

import { UpdatingOpcode } from '../opcodes';
import VM from './append';
import VM, { EvaluationStack } from './append';

@@ -83,3 +83,3 @@ var UpdatingVM = function () {

function BlockOpcode(start, end, state, bounds, children) {
function BlockOpcode(start, state, bounds, children) {
_classCallCheck(this, BlockOpcode);

@@ -90,3 +90,2 @@

_this.start = start;
_this.end = end;
_this.type = "block";

@@ -98,4 +97,3 @@ _this.next = null;

dynamicScope = state.dynamicScope,
stack = state.stack,
bp = state.bp;
stack = state.stack;

@@ -107,3 +105,2 @@ _this.children = children;

_this.stack = stack;
_this.bp = bp;
_this.bounds = bounds;

@@ -155,6 +152,6 @@ return _this;

function TryOpcode(start, end, state, bounds, children) {
function TryOpcode(start, state, bounds, children) {
_classCallCheck(this, TryOpcode);
var _this2 = _possibleConstructorReturn(this, _BlockOpcode.call(this, start, end, state, bounds, children));
var _this2 = _possibleConstructorReturn(this, _BlockOpcode.call(this, start, state, bounds, children));

@@ -175,14 +172,26 @@ _this2.type = "try";

TryOpcode.prototype.handleException = function handleException() {
var _this3 = this;
var env = this.env,
bounds = this.bounds,
children = this.children,
scope = this.scope,
dynamicScope = this.dynamicScope,
start = this.start,
dynamicScope = this.dynamicScope,
stack = this.stack,
bp = this.bp;
prev = this.prev,
next = this.next;
var elementStack = ElementStack.resume(this.env, this.bounds, this.bounds.reset(env));
children.clear();
var elementStack = ElementStack.resume(env, bounds, bounds.reset(env));
var vm = new VM(env, scope, dynamicScope, elementStack);
var result = vm.resume(start, stack.snapshot(), bp);
this.children = result.opcodes();
this.didInitializeChildren();
var updating = new LinkedList();
vm.execute(start, function (vm) {
vm.stack = EvaluationStack.restore(stack);
vm.updatingOpcodeStack.push(updating);
vm.updateWith(_this3);
vm.updatingOpcodeStack.push(children);
});
this.prev = prev;
this.next = next;
};

@@ -229,9 +238,10 @@

var tryOpcode = null;
var start = opcode.start,
end = opcode.end;
var start = opcode.start;
vm.execute(start, function (vm) {
map[key] = tryOpcode = vm.iterate(start, end, memo, item, vm.updating());
map[key] = tryOpcode = vm.iterate(memo, item);
vm.updatingOpcodeStack.push(new LinkedList());
vm.updateWith(tryOpcode);
vm.updatingOpcodeStack.push(tryOpcode.children);
});
tryOpcode.didInitializeChildren();
updating.insertBefore(tryOpcode, reference);

@@ -279,14 +289,14 @@ this.didInsert = true;

function ListBlockOpcode(start, end, state, bounds, children, artifacts) {
function ListBlockOpcode(start, state, bounds, children, artifacts) {
_classCallCheck(this, ListBlockOpcode);
var _this3 = _possibleConstructorReturn(this, _BlockOpcode2.call(this, start, end, state, bounds, children));
var _this4 = _possibleConstructorReturn(this, _BlockOpcode2.call(this, start, state, bounds, children));
_this3.type = "list-block";
_this3.map = dict();
_this3.lastIterated = INITIAL;
_this3.artifacts = artifacts;
var _tag = _this3._tag = UpdatableTag.create(CONSTANT_TAG);
_this3.tag = combine([artifacts.tag, _tag]);
return _this3;
_this4.type = "list-block";
_this4.map = dict();
_this4.lastIterated = INITIAL;
_this4.artifacts = artifacts;
var _tag = _this4._tag = UpdatableTag.create(CONSTANT_TAG);
_this4.tag = combine([artifacts.tag, _tag]);
return _this4;
}

@@ -380,2 +390,2 @@

}();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxBQUFPLFNBQXFCLEFBQUssT0FBRSxBQUFJLFFBQUksQUFBVSxBQUFFLGtCQUFNLEFBQVcsQUFBQztBQUN6RSxBQUFPLFNBQUUsQUFBWSxBQUE2QixvQkFBTSxBQUFZLEFBQUM7QUFDckUsQUFBTyxTQUFrQixBQUFLLE9BQW9CLEFBQUksTUFBRSxBQUFNLEFBQUUsY0FBTSxBQUFlLEFBQUM7QUFDdEYsQUFBTyxTQUdMLEFBQW9CO0FBR3BCLEFBQU87QUFDUCxBQUFPLFNBRVAsQUFBWSxjQUVaLEFBQVksY0FDWixBQUFZLGNBQ1osQUFBTyxBQUNSLGVBQU0sQUFBb0IsQUFBQztBQUM1QixBQUFPLFNBQWMsQUFBYyxBQUFpQixzQkFBTSxBQUFZLEFBQUM7QUFLdkUsT0FBTyxBQUF1QixRQUFNLEFBQVUsQUFBQyxBQUUvQyxBQUFNLEFBQUMsQUFBTzs7O0FBUVosd0JBQVksQUFBZ0IsQUFBRTs7WUFBRSxBQUFnQix5REFBRyxBQUFLLEFBQUU7Ozs7QUFGbEQsYUFBVSxhQUEyQixJQUFJLEFBQUssQUFBbUIsQUFBQztBQUd4RSxBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQUcsQUFBQztBQUNmLEFBQUksYUFBQyxBQUFTLFlBQUcsQUFBRyxJQUFDLEFBQVMsQUFBQztBQUMvQixBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQUcsSUFBQyxBQUFNLEFBQUUsQUFBQztBQUN4QixBQUFJLGFBQUMsQUFBZ0IsbUJBQUcsQUFBZ0IsQUFBQyxBQUMzQztBQUFDOzt5QkFFRCxBQUFPLDJCQUFDLEFBQXNCLFNBQUUsQUFBeUI7QUFDdkQsQUFBSSxZQUFFLEFBQVUsQUFBRSxhQUFHLEFBQUksQUFBQzs7QUFFMUIsQUFBSSxhQUFDLEFBQUcsSUFBQyxBQUFPLFNBQUUsQUFBTyxBQUFDLEFBQUM7QUFFM0IsZUFBTyxBQUFJLE1BQUUsQUFB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O0FBQUM7OzhCQUVELEFBQUkscUJBQUMsQUFBa0I7QUFDckIsQUFBSSxhQUFDLEFBQU8sVUFBRyxBQUFFLEFBQUMsQUFDcEI7QUFBQzs7OEJBRUQsQUFBYTtBQUNYLEFBQUksWUFBRSxBQUFPO1lBQUUsQUFBRyxBQUFFLE1BQUcsQUFBSSxBQUFDOztBQUM1QixBQUFFLEFBQUMsWUFBQyxBQUFPLEFBQUMsU0FBQyxBQUFJLEtBQUMsQUFBTyxVQUFHLEFBQUcsSUFBQyxBQUFRLFNBQUMsQUFBTyxBQUFDLEFBQUM7QUFDbEQsQUFBTSxlQUFDLEFBQU8sQUFBQyxBQUNqQjtBQUFDOzs4QkFFRCxBQUFlO0FBQ2IsQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQWdCLEFBQUMsa0JBQUMsQUFBQztBQUMxQixBQUFJLGlCQUFDLEFBQWdCLGlCQUFDLEFBQWUsQUFBRSxBQUFDLEFBQzFDO0FBQUMsQUFDSDtBQUFDLEFBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciwgbW92ZSBhcyBtb3ZlQm91bmRzIH0gZnJvbSAnLi4vYm91bmRzJztcbmltcG9ydCB7IEVsZW1lbnRTdGFjaywgVHJhY2tlciwgVXBkYXRhYmxlVHJhY2tlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUsIFN0YWNrLCBMaW5rZWRMaXN0LCBEaWN0LCBkaWN0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIFBhdGhSZWZlcmVuY2UsXG4gIEl0ZXJhdGlvbkFydGlmYWN0cyxcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXIsXG4gIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUsXG5cbiAgLy8gVGFnc1xuICBjb21iaW5lLFxuICBSZXZpc2lvbixcbiAgVXBkYXRhYmxlVGFnLFxuICBUYWdXcmFwcGVyLFxuICBjb21iaW5lU2xpY2UsXG4gIENPTlNUQU5UX1RBRyxcbiAgSU5JVElBTFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUsIFVwZGF0aW5nT3BTZXEgfSBmcm9tICcuLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2Vudmlyb25tZW50L2NvbnN0YW50cyc7XG5pbXBvcnQgeyBET01DaGFuZ2VzIH0gZnJvbSAnLi4vZG9tL2hlbHBlcic7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vZG9tL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgVk0sIHsgRXZhbHVhdGlvblN0YWNrIH0gZnJvbSAnLi9hcHBlbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGRhdGluZ1ZNIHtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG4gIHB1YmxpYyBkb206IERPTUNoYW5nZXM7XG4gIHB1YmxpYyBhbHdheXNSZXZhbGlkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG5cbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBTdGFjazxVcGRhdGluZ1ZNRnJhbWU+ID0gbmV3IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4oKTtcblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCB7IGFsd2F5c1JldmFsaWRhdGUgPSBmYWxzZSB9KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZG9tID0gZW52LmdldERPTSgpO1xuICAgIHRoaXMuYWx3YXlzUmV2YWxpZGF0ZSA9IGFsd2F5c1JldmFsaWRhdGU7XG4gIH1cblxuICBleGVjdXRlKG9wY29kZXM6IFVwZGF0aW5nT3BTZXEsIGhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICBsZXQgeyBmcmFtZVN0YWNrIH0gPSB0aGlzO1xuXG4gICAgdGhpcy50cnkob3Bjb2RlcywgaGFuZGxlcik7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGZyYW1lU3RhY2suaXNFbXB0eSgpKSBicmVhaztcblxuICAgICAgbGV0IG9wY29kZSA9IHRoaXMuZnJhbWUubmV4dFN0YXRlbWVudCgpO1xuXG4gICAgICBpZiAob3Bjb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBmcmFtZSgpIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZnJhbWVTdGFjay5jdXJyZW50LCAnYnVnOiBleHBlY3RlZCBhIGZyYW1lJyk7XG4gIH1cblxuICBnb3RvKG9wOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMuZnJhbWUuZ290byhvcCk7XG4gIH1cblxuICB0cnkob3BzOiBVcGRhdGluZ09wU2VxLCBoYW5kbGVyOiBPcHRpb248RXhjZXB0aW9uSGFuZGxlcj4pIHtcbiAgICB0aGlzLmZyYW1lU3RhY2sucHVzaChuZXcgVXBkYXRpbmdWTUZyYW1lKHRoaXMsIG9wcywgaGFuZGxlcikpO1xuICB9XG5cbiAgdGhyb3coKSB7XG4gICAgdGhpcy5mcmFtZS5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uSGFuZGxlciB7XG4gIGhhbmRsZUV4Y2VwdGlvbigpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZNU3RhdGUge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBzY29wZTogU2NvcGU7XG4gIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBzdGFjazogRXZhbHVhdGlvblN0YWNrO1xuICBicDogbnVtYmVyO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tPcGNvZGUgZXh0ZW5kcyBVcGRhdGluZ09wY29kZSBpbXBsZW1lbnRzIERlc3Ryb3lhYmxlQm91bmRzIHtcbiAgcHVibGljIHR5cGUgPSBcImJsb2NrXCI7XG4gIHB1YmxpYyBuZXh0ID0gbnVsbDtcbiAgcHVibGljIHByZXYgPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+O1xuXG4gIHByb3RlY3RlZCBlbnY6IEVudmlyb25tZW50O1xuICBwcm90ZWN0ZWQgc2NvcGU6IFNjb3BlO1xuICBwcm90ZWN0ZWQgZHluYW1pY1Njb3BlOiBEeW5hbWljU2NvcGU7XG4gIHByb3RlY3RlZCBzdGFjazogRXZhbHVhdGlvblN0YWNrO1xuICBwcm90ZWN0ZWQgYnA6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGJvdW5kczogRGVzdHJveWFibGVCb3VuZHM7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHN0YXJ0OiBudW1iZXIsIHB1YmxpYyBlbmQ6IG51bWJlciwgc3RhdGU6IFZNU3RhdGUsIGJvdW5kczogRGVzdHJveWFibGVCb3VuZHMsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHN1cGVyKCk7XG4gICAgbGV0IHsgZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBzdGFjaywgYnAgfSA9IHN0YXRlO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmVudiA9IGVudjtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5keW5hbWljU2NvcGUgPSBkeW5hbWljU2NvcGU7XG4gICAgdGhpcy5zdGFjayA9IHN0YWNrO1xuICAgIHRoaXMuYnAgPSBicDtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIGFic3RyYWN0IGRpZEluaXRpYWxpemVDaGlsZHJlbigpOiB2b2lkO1xuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdm0udHJ5KHRoaXMuY2hpbGRyZW4sIG51bGwpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmJvdW5kcy5kZXN0cm95KCk7XG4gIH1cblxuICBkaWREZXN0cm95KCkge1xuICAgIHRoaXMuZW52LmRpZERlc3Ryb3kodGhpcy5ib3VuZHMpO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgZGV0YWlscyA9IGRpY3Q8c3RyaW5nPigpO1xuXG4gICAgZGV0YWlsc1tcImd1aWRcIl0gPSBgJHt0aGlzLl9ndWlkfWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGRldGFpbHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbi50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyeU9wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIGltcGxlbWVudHMgRXhjZXB0aW9uSGFuZGxlciB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0cnlcIjtcblxuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBwcm90ZWN0ZWQgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyLCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4pIHtcbiAgICBzdXBlcihzdGFydCwgZW5kLCBzdGF0ZSwgYm91bmRzLCBjaGlsZHJlbik7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKENPTlNUQU5UX1RBRyk7XG4gIH1cblxuICBkaWRJbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB2bS50cnkodGhpcy5jaGlsZHJlbiwgdGhpcyk7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgbGV0IHsgZW52LCBzY29wZSwgc3RhcnQsIGR5bmFtaWNTY29wZSwgc3RhY2ssIGJwIH0gPSB0aGlzO1xuXG4gICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5yZXN1bWUoXG4gICAgICB0aGlzLmVudixcbiAgICAgIHRoaXMuYm91bmRzLFxuICAgICAgdGhpcy5ib3VuZHMucmVzZXQoZW52KVxuICAgICk7XG5cbiAgICBsZXQgdm0gPSBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICAgIGxldCByZXN1bHQgPSB2bS5yZXN1bWUoc3RhcnQsIHN0YWNrLnNuYXBzaG90KCksIGJwKTtcblxuICAgIHRoaXMuY2hpbGRyZW4gPSByZXN1bHQub3Bjb2RlcygpO1xuICAgIHRoaXMuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG5cbiAgICBsZXQgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdO1xuICAgIGlmICghZGV0YWlscykge1xuICAgICAgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLnRvSlNPTigpO1xuICB9XG59XG5cbmNsYXNzIExpc3RSZXZhbGlkYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRzIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUge1xuICBwcml2YXRlIG1hcDogRGljdDxCbG9ja09wY29kZT47XG4gIHByaXZhdGUgdXBkYXRpbmc6IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+O1xuXG4gIHByaXZhdGUgZGlkSW5zZXJ0ID0gZmFsc2U7XG4gIHByaXZhdGUgZGlkRGVsZXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcGNvZGU6IExpc3RCbG9ja09wY29kZSwgcHJpdmF0ZSBtYXJrZXI6IFNpbXBsZS5Db21tZW50KSB7XG4gICAgdGhpcy5tYXAgPSBvcGNvZGUubWFwO1xuICAgIHRoaXMudXBkYXRpbmcgPSBvcGNvZGVbJ2NoaWxkcmVuJ107XG4gIH1cblxuICBpbnNlcnQoa2V5OiBzdHJpbmcsIGl0ZW06IFBhdGhSZWZlcmVuY2U8T3BhcXVlPiwgbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBiZWZvcmU6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCwgb3Bjb2RlLCB1cGRhdGluZyB9ID0gdGhpcztcbiAgICBsZXQgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGUuTm9kZT4gPSBudWxsO1xuICAgIGxldCByZWZlcmVuY2U6IE9wdGlvbjxCbG9ja09wY29kZT4gPSBudWxsO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgcmVmZXJlbmNlID0gbWFwW2JlZm9yZV07XG4gICAgICBuZXh0U2libGluZyA9IHJlZmVyZW5jZVsnYm91bmRzJ10uZmlyc3ROb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRTaWJsaW5nID0gdGhpcy5tYXJrZXI7XG4gICAgfVxuXG4gICAgbGV0IHZtID0gb3Bjb2RlLnZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nKTtcbiAgICBsZXQgdHJ5T3Bjb2RlOiBPcHRpb248VHJ5T3Bjb2RlPiA9IG51bGw7XG5cbiAgICBsZXQgeyBzdGFydCwgZW5kIH0gPSBvcGNvZGU7XG5cbiAgICB2bS5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICBtYXBba2V5XSA9IHRyeU9wY29kZSA9IHZtLml0ZXJhdGUoc3RhcnQsIGVuZCwgbWVtbywgaXRlbSwgdm0udXBkYXRpbmcoKSk7XG4gICAgfSk7XG5cbiAgICB0cnlPcGNvZGUhLmRpZEluaXRpYWxpemVDaGlsZHJlbigpO1xuXG4gICAgdXBkYXRpbmcuaW5zZXJ0QmVmb3JlKHRyeU9wY29kZSEsIHJlZmVyZW5jZSk7XG5cbiAgICB0aGlzLmRpZEluc2VydCA9IHRydWU7XG4gIH1cblxuICByZXRhaW4oX2tleTogc3RyaW5nLCBfaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBfbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+KSB7XG4gIH1cblxuICBtb3ZlKGtleTogc3RyaW5nLCBfaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBfbWVtbzogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBiZWZvcmU6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCwgdXBkYXRpbmcgfSA9IHRoaXM7XG5cbiAgICBsZXQgZW50cnkgPSBtYXBba2V5XTtcbiAgICBsZXQgcmVmZXJlbmNlID0gbWFwW2JlZm9yZV0gfHwgbnVsbDtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIG1vdmVCb3VuZHMoZW50cnksIHJlZmVyZW5jZS5maXJzdE5vZGUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vdmVCb3VuZHMoZW50cnksIHRoaXMubWFya2VyKTtcbiAgICB9XG5cbiAgICB1cGRhdGluZy5yZW1vdmUoZW50cnkpO1xuICAgIHVwZGF0aW5nLmluc2VydEJlZm9yZShlbnRyeSwgcmVmZXJlbmNlKTtcbiAgfVxuXG4gIGRlbGV0ZShrZXk6IHN0cmluZykge1xuICAgIGxldCB7IG1hcCB9ID0gdGhpcztcbiAgICBsZXQgb3Bjb2RlID0gbWFwW2tleV07XG4gICAgb3Bjb2RlLmRpZERlc3Ryb3koKTtcbiAgICBjbGVhcihvcGNvZGUpO1xuICAgIHRoaXMudXBkYXRpbmcucmVtb3ZlKG9wY29kZSk7XG4gICAgZGVsZXRlIG1hcFtrZXldO1xuXG4gICAgdGhpcy5kaWREZWxldGUgPSB0cnVlO1xuICB9XG5cbiAgZG9uZSgpIHtcbiAgICB0aGlzLm9wY29kZS5kaWRJbml0aWFsaXplQ2hpbGRyZW4odGhpcy5kaWRJbnNlcnQgfHwgdGhpcy5kaWREZWxldGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QmxvY2tPcGNvZGUgZXh0ZW5kcyBCbG9ja09wY29kZSB7XG4gIHB1YmxpYyB0eXBlID0gXCJsaXN0LWJsb2NrXCI7XG4gIHB1YmxpYyBtYXAgPSBkaWN0PEJsb2NrT3Bjb2RlPigpO1xuICBwdWJsaWMgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHM7XG5cbiAgcHJpdmF0ZSBsYXN0SXRlcmF0ZWQ6IFJldmlzaW9uID0gSU5JVElBTDtcbiAgcHJpdmF0ZSBfdGFnOiBUYWdXcmFwcGVyPFVwZGF0YWJsZVRhZz47XG5cbiAgY29uc3RydWN0b3Ioc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPiwgYXJ0aWZhY3RzOiBJdGVyYXRpb25BcnRpZmFjdHMpIHtcbiAgICBzdXBlcihzdGFydCwgZW5kLCBzdGF0ZSwgYm91bmRzLCBjaGlsZHJlbik7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgbGV0IF90YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKENPTlNUQU5UX1RBRyk7XG4gICAgdGhpcy50YWcgPSBjb21iaW5lKFthcnRpZmFjdHMudGFnLCBfdGFnXSk7XG4gIH1cblxuICBkaWRJbml0aWFsaXplQ2hpbGRyZW4obGlzdERpZENoYW5nZSA9IHRydWUpIHtcbiAgICB0aGlzLmxhc3RJdGVyYXRlZCA9IHRoaXMuYXJ0aWZhY3RzLnRhZy52YWx1ZSgpO1xuXG4gICAgaWYgKGxpc3REaWRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX3RhZy5pbm5lci51cGRhdGUoY29tYmluZVNsaWNlKHRoaXMuY2hpbGRyZW4pKTtcbiAgICB9XG4gIH1cblxuICBldmFsdWF0ZSh2bTogVXBkYXRpbmdWTSkge1xuICAgIGxldCB7IGFydGlmYWN0cywgbGFzdEl0ZXJhdGVkIH0gPSB0aGlzO1xuXG4gICAgaWYgKCFhcnRpZmFjdHMudGFnLnZhbGlkYXRlKGxhc3RJdGVyYXRlZCkpIHtcbiAgICAgIGxldCB7IGJvdW5kcyB9ID0gdGhpcztcbiAgICAgIGxldCB7IGRvbSB9ID0gdm07XG5cbiAgICAgIGxldCBtYXJrZXIgPSBkb20uY3JlYXRlQ29tbWVudCgnJyk7XG4gICAgICBkb20uaW5zZXJ0QWZ0ZXIoYm91bmRzLnBhcmVudEVsZW1lbnQoKSwgbWFya2VyLCBleHBlY3QoYm91bmRzLmxhc3ROb2RlKCksIFwiY2FuJ3QgaW5zZXJ0IGFmdGVyIGFuIGVtcHR5IGJvdW5kc1wiKSk7XG5cbiAgICAgIGxldCB0YXJnZXQgPSBuZXcgTGlzdFJldmFsaWRhdGlvbkRlbGVnYXRlKHRoaXMsIG1hcmtlcik7XG4gICAgICBsZXQgc3luY2hyb25pemVyID0gbmV3IEl0ZXJhdG9yU3luY2hyb25pemVyKHsgdGFyZ2V0LCBhcnRpZmFjdHMgfSk7XG5cbiAgICAgIHN5bmNocm9uaXplci5zeW5jKCk7XG5cbiAgICAgIHRoaXMucGFyZW50RWxlbWVudCgpLnJlbW92ZUNoaWxkKG1hcmtlcik7XG4gICAgfVxuXG4gICAgLy8gUnVuIG5vdy11cGRhdGVkIHVwZGF0aW5nIG9wY29kZXNcbiAgICBzdXBlci5ldmFsdWF0ZSh2bSk7XG4gIH1cblxuICB2bUZvckluc2VydGlvbihuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPik6IFZNIHtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUgfSA9IHRoaXM7XG5cbiAgICBsZXQgZWxlbWVudFN0YWNrID0gRWxlbWVudFN0YWNrLmZvckluaXRpYWxSZW5kZXIoXG4gICAgICB0aGlzLmVudixcbiAgICAgIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKSxcbiAgICAgIG5leHRTaWJsaW5nXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQganNvbiA9IHN1cGVyLnRvSlNPTigpO1xuICAgIGxldCBtYXAgPSB0aGlzLm1hcDtcblxuICAgIGxldCBpbm5lciA9IE9iamVjdC5rZXlzKG1hcCkubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06ICR7bWFwW2tleV0uX2d1aWR9YDtcbiAgICB9KS5qb2luKFwiLCBcIik7XG5cbiAgICBsZXQgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdO1xuICAgIGlmICghZGV0YWlscykge1xuICAgICAgZGV0YWlscyA9IGpzb25bXCJkZXRhaWxzXCJdID0ge307XG4gICAgfVxuXG4gICAgZGV0YWlsc1tcIm1hcFwiXSA9IGB7JHtpbm5lcn19YDtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG59XG5cbmNsYXNzIFVwZGF0aW5nVk1GcmFtZSB7XG4gIHByaXZhdGUgY3VycmVudDogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZtOiBVcGRhdGluZ1ZNLCBwcml2YXRlIG9wczogVXBkYXRpbmdPcFNlcSwgcHJpdmF0ZSBleGNlcHRpb25IYW5kbGVyOiBPcHRpb248RXhjZXB0aW9uSGFuZGxlcj4pIHtcbiAgICB0aGlzLnZtID0gdm07XG4gICAgdGhpcy5vcHMgPSBvcHM7XG4gICAgdGhpcy5jdXJyZW50ID0gb3BzLmhlYWQoKTtcbiAgfVxuXG4gIGdvdG8ob3A6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgdGhpcy5jdXJyZW50ID0gb3A7XG4gIH1cblxuICBuZXh0U3RhdGVtZW50KCk6IE9wdGlvbjxVcGRhdGluZ09wY29kZT4ge1xuICAgIGxldCB7IGN1cnJlbnQsIG9wcyB9ID0gdGhpcztcbiAgICBpZiAoY3VycmVudCkgdGhpcy5jdXJyZW50ID0gb3BzLm5leHROb2RlKGN1cnJlbnQpO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgaGFuZGxlRXhjZXB0aW9uKCkge1xuICAgIGlmICh0aGlzLmV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRoaXMuZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxBQUFPLFNBQXFCLEFBQUssT0FBRSxBQUFJLFFBQUksQUFBVSxBQUFFLGtCQUFNLEFBQVcsQUFBQztBQUN6RSxBQUFPLFNBQUUsQUFBWSxBQUE2QixvQkFBTSxBQUFZLEFBQUM7QUFDckUsQUFBTyxTQUFrQixBQUFLLE9BQUUsQUFBVSxZQUFRLEFBQUksTUFBRSxBQUFNLEFBQUUsY0FBTSxBQUFlLEFBQUM7QUFDdEYsQUFBTyxTQUdMLEFBQW9CO0FBR3BCLEFBQU87QUFDUCxBQUFPLFNBRVAsQUFBWSxjQUVaLEFBQVksY0FDWixBQUFZLGNBQ1osQUFBTyxBQUNSLGVBQU0sQUFBb0IsQUFBQztBQUM1QixBQUFPLFNBQWMsQUFBYyxBQUFpQixzQkFBTSxBQUFZLEFBQUM7QUFLdkUsT0FBTyxBQUFFLEFBQUUsTUFBaUIsQUFBZSxBQUFFLHVCQUFNLEFBQVUsQUFBQyxBQUU5RCxBQUFNLEFBQUMsQUFBTzs7O0FBUVosd0JBQVksQUFBZ0IsQUFBRTs7WUFBRSxBQUFnQix5REFBRyxBQUFLLEFBQUU7Ozs7QUFGbEQsYUFBVSxhQUEyQixJQUFJLEFBQUssQUFBbUIsQUFBQztBQUd4RSxBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQUcsQUFBQztBQUNmLEFBQUksYUFBQyxBQUFTLFlBQUcsQUFBRyxJQUFDLEFBQVMsQUFBQztBQUMvQixBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQUcsSUFBQyxBQUFNLEFBQUUsQUFBQztBQUN4QixBQUFJLGFBQUMsQUFBZ0IsbUJBQUcsQUFBZ0IsQUFBQyxBQUMzQztBQUFDOzt5QkFFRCxBQUFPLDJCQUFDLEFBQXNCLFNBQUUsQUFBeUI7QUFDdkQsQUFBSSxZQUFFLEFBQVUsQUFBRSxhQUFHLEFBQUksQUFBQzs7QUFFMUIsQUFBSSxhQUFDLEFBQUcsSUFBQyxBQUFPLFNBQUUsQUFBTyxBQUFD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LEFBQWMsSUFBVSxBQUFrQixLQUFVLEFBQTBDOzs7QUFBOUYsYUFBRSxLQUFGLEFBQUUsQUFBWTtBQUFVLGFBQUcsTUFBSCxBQUFHLEFBQWU7QUFBVSxhQUFnQixtQkFBaEIsQUFBZ0IsQUFBMEI7QUFDaEgsQUFBSSxhQUFDLEFBQUUsS0FBRyxBQUFFLEFBQUM7QUFDYixBQUFJLGFBQUMsQUFBRyxNQUFHLEFBQUcsQUFBQztBQUNmLEFBQUksYUFBQyxBQUFPLFVBQUcsQUFBRyxJQUFDLEFBQUksQUFBRSxBQUFDLEFBQzVCO0FBQUM7OzhCQUVELEFBQUkscUJBQUMsQUFBa0I7QUFDckIsQUFBSSxhQUFDLEFBQU8sVUFBRyxBQUFFLEFBQUMsQUFDcEI7QUFBQzs7OEJBRUQsQUFBYTtBQUNYLEFBQUksWUFBRSxBQUFPO1lBQUUsQUFBRyxBQUFFLE1BQUcsQUFBSSxBQUFDOztBQUM1QixBQUFFLEFBQUMsWUFBQyxBQUFPLEFBQUMsU0FBQyxBQUFJLEtBQUMsQUFBTyxVQUFHLEFBQUcsSUFBQyxBQUFRLFNBQUMsQUFBTyxBQUFDLEFBQUM7QUFDbEQsQUFBTSxlQUFDLEFBQU8sQUFBQyxBQUNqQjtBQUFDOzs4QkFFRCxBQUFlO0FBQ2IsQUFBRSxBQUFDLFlBQUMsQUFBSSxLQUFDLEFBQWdCLEFBQUMsa0JBQUMsQUFBQztBQUMxQixBQUFJLGlCQUFDLEFBQWdCLGlCQUFDLEFBQWUsQUFBRSxBQUFDLEFBQzFDO0FBQUMsQUFDSDtBQUFDLEFBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY29wZSwgRHluYW1pY1Njb3BlLCBFbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7IERlc3Ryb3lhYmxlQm91bmRzLCBjbGVhciwgbW92ZSBhcyBtb3ZlQm91bmRzIH0gZnJvbSAnLi4vYm91bmRzJztcbmltcG9ydCB7IEVsZW1lbnRTdGFjaywgVHJhY2tlciwgVXBkYXRhYmxlVHJhY2tlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgT3B0aW9uLCBPcGFxdWUsIFN0YWNrLCBMaW5rZWRMaXN0LCBEaWN0LCBkaWN0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7XG4gIFBhdGhSZWZlcmVuY2UsXG4gIEl0ZXJhdGlvbkFydGlmYWN0cyxcbiAgSXRlcmF0b3JTeW5jaHJvbml6ZXIsXG4gIEl0ZXJhdG9yU3luY2hyb25pemVyRGVsZWdhdGUsXG5cbiAgLy8gVGFnc1xuICBjb21iaW5lLFxuICBSZXZpc2lvbixcbiAgVXBkYXRhYmxlVGFnLFxuICBUYWdXcmFwcGVyLFxuICBjb21iaW5lU2xpY2UsXG4gIENPTlNUQU5UX1RBRyxcbiAgSU5JVElBTFxufSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgT3Bjb2RlSlNPTiwgVXBkYXRpbmdPcGNvZGUsIFVwZGF0aW5nT3BTZXEgfSBmcm9tICcuLi9vcGNvZGVzJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2Vudmlyb25tZW50L2NvbnN0YW50cyc7XG5pbXBvcnQgeyBET01DaGFuZ2VzIH0gZnJvbSAnLi4vZG9tL2hlbHBlcic7XG5pbXBvcnQgKiBhcyBTaW1wbGUgZnJvbSAnLi4vZG9tL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgVk0sIHsgQ2FwdHVyZWRTdGFjaywgRXZhbHVhdGlvblN0YWNrIH0gZnJvbSAnLi9hcHBlbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGRhdGluZ1ZNIHtcbiAgcHVibGljIGVudjogRW52aXJvbm1lbnQ7XG4gIHB1YmxpYyBkb206IERPTUNoYW5nZXM7XG4gIHB1YmxpYyBhbHdheXNSZXZhbGlkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgY29uc3RhbnRzOiBDb25zdGFudHM7XG5cbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBTdGFjazxVcGRhdGluZ1ZNRnJhbWU+ID0gbmV3IFN0YWNrPFVwZGF0aW5nVk1GcmFtZT4oKTtcblxuICBjb25zdHJ1Y3RvcihlbnY6IEVudmlyb25tZW50LCB7IGFsd2F5c1JldmFsaWRhdGUgPSBmYWxzZSB9KSB7XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5jb25zdGFudHMgPSBlbnYuY29uc3RhbnRzO1xuICAgIHRoaXMuZG9tID0gZW52LmdldERPTSgpO1xuICAgIHRoaXMuYWx3YXlzUmV2YWxpZGF0ZSA9IGFsd2F5c1JldmFsaWRhdGU7XG4gIH1cblxuICBleGVjdXRlKG9wY29kZXM6IFVwZGF0aW5nT3BTZXEsIGhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXIpIHtcbiAgICBsZXQgeyBmcmFtZVN0YWNrIH0gPSB0aGlzO1xuXG4gICAgdGhpcy50cnkob3Bjb2RlcywgaGFuZGxlcik7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGZyYW1lU3RhY2suaXNFbXB0eSgpKSBicmVhaztcblxuICAgICAgbGV0IG9wY29kZSA9IHRoaXMuZnJhbWUubmV4dFN0YXRlbWVudCgpO1xuXG4gICAgICBpZiAob3Bjb2RlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG9wY29kZS5ldmFsdWF0ZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBmcmFtZSgpIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZnJhbWVTdGFjay5jdXJyZW50LCAnYnVnOiBleHBlY3RlZCBhIGZyYW1lJyk7XG4gIH1cblxuICBnb3RvKG9wOiBVcGRhdGluZ09wY29kZSkge1xuICAgIHRoaXMuZnJhbWUuZ290byhvcCk7XG4gIH1cblxuICB0cnkob3BzOiBVcGRhdGluZ09wU2VxLCBoYW5kbGVyOiBPcHRpb248RXhjZXB0aW9uSGFuZGxlcj4pIHtcbiAgICB0aGlzLmZyYW1lU3RhY2sucHVzaChuZXcgVXBkYXRpbmdWTUZyYW1lKHRoaXMsIG9wcywgaGFuZGxlcikpO1xuICB9XG5cbiAgdGhyb3coKSB7XG4gICAgdGhpcy5mcmFtZS5oYW5kbGVFeGNlcHRpb24oKTtcbiAgICB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cblxuICBldmFsdWF0ZU9wY29kZShvcGNvZGU6IFVwZGF0aW5nT3Bjb2RlKSB7XG4gICAgb3Bjb2RlLmV2YWx1YXRlKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uSGFuZGxlciB7XG4gIGhhbmRsZUV4Y2VwdGlvbigpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZNU3RhdGUge1xuICBlbnY6IEVudmlyb25tZW50O1xuICBzY29wZTogU2NvcGU7XG4gIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBzdGFjazogQ2FwdHVyZWRTdGFjaztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrT3Bjb2RlIGV4dGVuZHMgVXBkYXRpbmdPcGNvZGUgaW1wbGVtZW50cyBEZXN0cm95YWJsZUJvdW5kcyB7XG4gIHB1YmxpYyB0eXBlID0gXCJibG9ja1wiO1xuICBwdWJsaWMgbmV4dCA9IG51bGw7XG4gIHB1YmxpYyBwcmV2ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPjtcblxuICBwcm90ZWN0ZWQgZW52OiBFbnZpcm9ubWVudDtcbiAgcHJvdGVjdGVkIHNjb3BlOiBTY29wZTtcbiAgcHJvdGVjdGVkIGR5bmFtaWNTY29wZTogRHluYW1pY1Njb3BlO1xuICBwcm90ZWN0ZWQgc3RhY2s6IENhcHR1cmVkU3RhY2s7XG4gIHByb3RlY3RlZCBib3VuZHM6IERlc3Ryb3lhYmxlQm91bmRzO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFydDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBEZXN0cm95YWJsZUJvdW5kcywgY2hpbGRyZW46IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KSB7XG4gICAgc3VwZXIoKTtcbiAgICBsZXQgeyBlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIHN0YWNrIH0gPSBzdGF0ZTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5lbnYgPSBlbnY7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMuZHluYW1pY1Njb3BlID0gZHluYW1pY1Njb3BlO1xuICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxuXG4gIGFic3RyYWN0IGRpZEluaXRpYWxpemVDaGlsZHJlbigpOiB2b2lkO1xuXG4gIHBhcmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2RlKCk7XG4gIH1cblxuICBsYXN0Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKTtcbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgdm0udHJ5KHRoaXMuY2hpbGRyZW4sIG51bGwpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmJvdW5kcy5kZXN0cm95KCk7XG4gIH1cblxuICBkaWREZXN0cm95KCkge1xuICAgIHRoaXMuZW52LmRpZERlc3Ryb3kodGhpcy5ib3VuZHMpO1xuICB9XG5cbiAgdG9KU09OKCkgOiBPcGNvZGVKU09OIHtcbiAgICBsZXQgZGV0YWlscyA9IGRpY3Q8c3RyaW5nPigpO1xuXG4gICAgZGV0YWlsc1tcImd1aWRcIl0gPSBgJHt0aGlzLl9ndWlkfWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3VpZDogdGhpcy5fZ3VpZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGRldGFpbHMsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbi50b0FycmF5KCkubWFwKG9wID0+IG9wLnRvSlNPTigpKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyeU9wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIGltcGxlbWVudHMgRXhjZXB0aW9uSGFuZGxlciB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0cnlcIjtcblxuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBwcm90ZWN0ZWQgYm91bmRzOiBVcGRhdGFibGVUcmFja2VyO1xuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0OiBudW1iZXIsIHN0YXRlOiBWTVN0YXRlLCBib3VuZHM6IFVwZGF0YWJsZVRyYWNrZXIsIGNoaWxkcmVuOiBMaW5rZWRMaXN0PFVwZGF0aW5nT3Bjb2RlPikge1xuICAgIHN1cGVyKHN0YXJ0LCBzdGF0ZSwgYm91bmRzLCBjaGlsZHJlbik7XG4gICAgdGhpcy50YWcgPSB0aGlzLl90YWcgPSBVcGRhdGFibGVUYWcuY3JlYXRlKENPTlNUQU5UX1RBRyk7XG4gIH1cblxuICBkaWRJbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICB9XG5cbiAgZXZhbHVhdGUodm06IFVwZGF0aW5nVk0pIHtcbiAgICB2bS50cnkodGhpcy5jaGlsZHJlbiwgdGhpcyk7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgbGV0IHsgZW52LCBib3VuZHMsIGNoaWxkcmVuLCBzY29wZSwgZHluYW1pY1Njb3BlLCBzdGFydCwgc3RhY2ssIHByZXYsIG5leHQgfSA9IHRoaXM7XG5cbiAgICBjaGlsZHJlbi5jbGVhcigpO1xuXG4gICAgbGV0IGVsZW1lbnRTdGFjayA9IEVsZW1lbnRTdGFjay5yZXN1bWUoXG4gICAgICBlbnYsXG4gICAgICBib3VuZHMsXG4gICAgICBib3VuZHMucmVzZXQoZW52KVxuICAgICk7XG5cbiAgICBsZXQgdm0gPSBuZXcgVk0oZW52LCBzY29wZSwgZHluYW1pY1Njb3BlLCBlbGVtZW50U3RhY2spO1xuXG4gICAgbGV0IHVwZGF0aW5nID0gbmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCk7XG5cbiAgICB2bS5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICB2bS5zdGFjayA9IEV2YWx1YXRpb25TdGFjay5yZXN0b3JlKHN0YWNrKTtcbiAgICAgIHZtLnVwZGF0aW5nT3Bjb2RlU3RhY2sucHVzaCh1cGRhdGluZyk7XG4gICAgICB2bS51cGRhdGVXaXRoKHRoaXMpO1xuICAgICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKGNoaWxkcmVuKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJldiA9IHByZXY7XG4gICAgdGhpcy5uZXh0ID0gbmV4dDtcbiAgfVxuXG4gIHRvSlNPTigpIDogT3Bjb2RlSlNPTiB7XG4gICAgbGV0IGpzb24gPSBzdXBlci50b0pTT04oKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIudG9KU09OKCk7XG4gIH1cbn1cblxuY2xhc3MgTGlzdFJldmFsaWRhdGlvbkRlbGVnYXRlIGltcGxlbWVudHMgSXRlcmF0b3JTeW5jaHJvbml6ZXJEZWxlZ2F0ZSB7XG4gIHByaXZhdGUgbWFwOiBEaWN0PEJsb2NrT3Bjb2RlPjtcbiAgcHJpdmF0ZSB1cGRhdGluZzogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT47XG5cbiAgcHJpdmF0ZSBkaWRJbnNlcnQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkaWREZWxldGUgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wY29kZTogTGlzdEJsb2NrT3Bjb2RlLCBwcml2YXRlIG1hcmtlcjogU2ltcGxlLkNvbW1lbnQpIHtcbiAgICB0aGlzLm1hcCA9IG9wY29kZS5tYXA7XG4gICAgdGhpcy51cGRhdGluZyA9IG9wY29kZVsnY2hpbGRyZW4nXTtcbiAgfVxuXG4gIGluc2VydChrZXk6IHN0cmluZywgaXRlbTogUGF0aFJlZmVyZW5jZTxPcGFxdWU+LCBtZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCBvcGNvZGUsIHVwZGF0aW5nIH0gPSB0aGlzO1xuICAgIGxldCBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZS5Ob2RlPiA9IG51bGw7XG4gICAgbGV0IHJlZmVyZW5jZTogT3B0aW9uPEJsb2NrT3Bjb2RlPiA9IG51bGw7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXTtcbiAgICAgIG5leHRTaWJsaW5nID0gcmVmZXJlbmNlWydib3VuZHMnXS5maXJzdE5vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dFNpYmxpbmcgPSB0aGlzLm1hcmtlcjtcbiAgICB9XG5cbiAgICBsZXQgdm0gPSBvcGNvZGUudm1Gb3JJbnNlcnRpb24obmV4dFNpYmxpbmcpO1xuICAgIGxldCB0cnlPcGNvZGU6IE9wdGlvbjxUcnlPcGNvZGU+ID0gbnVsbDtcblxuICAgIGxldCB7IHN0YXJ0IH0gPSBvcGNvZGU7XG5cbiAgICB2bS5leGVjdXRlKHN0YXJ0LCB2bSA9PiB7XG4gICAgICBtYXBba2V5XSA9IHRyeU9wY29kZSA9IHZtLml0ZXJhdGUobWVtbywgaXRlbSk7XG4gICAgICB2bS51cGRhdGluZ09wY29kZVN0YWNrLnB1c2gobmV3IExpbmtlZExpc3Q8VXBkYXRpbmdPcGNvZGU+KCkpO1xuICAgICAgdm0udXBkYXRlV2l0aCh0cnlPcGNvZGUpO1xuICAgICAgdm0udXBkYXRpbmdPcGNvZGVTdGFjay5wdXNoKHRyeU9wY29kZS5jaGlsZHJlbik7XG4gICAgfSk7XG5cbiAgICB1cGRhdGluZy5pbnNlcnRCZWZvcmUodHJ5T3Bjb2RlISwgcmVmZXJlbmNlKTtcblxuICAgIHRoaXMuZGlkSW5zZXJ0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldGFpbihfa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4pIHtcbiAgfVxuXG4gIG1vdmUoa2V5OiBzdHJpbmcsIF9pdGVtOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIF9tZW1vOiBQYXRoUmVmZXJlbmNlPE9wYXF1ZT4sIGJlZm9yZTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwLCB1cGRhdGluZyB9ID0gdGhpcztcblxuICAgIGxldCBlbnRyeSA9IG1hcFtrZXldO1xuICAgIGxldCByZWZlcmVuY2UgPSBtYXBbYmVmb3JlXSB8fCBudWxsO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgcmVmZXJlbmNlLmZpcnN0Tm9kZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW92ZUJvdW5kcyhlbnRyeSwgdGhpcy5tYXJrZXIpO1xuICAgIH1cblxuICAgIHVwZGF0aW5nLnJlbW92ZShlbnRyeSk7XG4gICAgdXBkYXRpbmcuaW5zZXJ0QmVmb3JlKGVudHJ5LCByZWZlcmVuY2UpO1xuICB9XG5cbiAgZGVsZXRlKGtleTogc3RyaW5nKSB7XG4gICAgbGV0IHsgbWFwIH0gPSB0aGlzO1xuICAgIGxldCBvcGNvZGUgPSBtYXBba2V5XTtcbiAgICBvcGNvZGUuZGlkRGVzdHJveSgpO1xuICAgIGNsZWFyKG9wY29kZSk7XG4gICAgdGhpcy51cGRhdGluZy5yZW1vdmUob3Bjb2RlKTtcbiAgICBkZWxldGUgbWFwW2tleV07XG5cbiAgICB0aGlzLmRpZERlbGV0ZSA9IHRydWU7XG4gIH1cblxuICBkb25lKCkge1xuICAgIHRoaXMub3Bjb2RlLmRpZEluaXRpYWxpemVDaGlsZHJlbih0aGlzLmRpZEluc2VydCB8fCB0aGlzLmRpZERlbGV0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RCbG9ja09wY29kZSBleHRlbmRzIEJsb2NrT3Bjb2RlIHtcbiAgcHVibGljIHR5cGUgPSBcImxpc3QtYmxvY2tcIjtcbiAgcHVibGljIG1hcCA9IGRpY3Q8QmxvY2tPcGNvZGU+KCk7XG4gIHB1YmxpYyBhcnRpZmFjdHM6IEl0ZXJhdGlvbkFydGlmYWN0cztcblxuICBwcml2YXRlIGxhc3RJdGVyYXRlZDogUmV2aXNpb24gPSBJTklUSUFMO1xuICBwcml2YXRlIF90YWc6IFRhZ1dyYXBwZXI8VXBkYXRhYmxlVGFnPjtcblxuICBjb25zdHJ1Y3RvcihzdGFydDogbnVtYmVyLCBzdGF0ZTogVk1TdGF0ZSwgYm91bmRzOiBUcmFja2VyLCBjaGlsZHJlbjogTGlua2VkTGlzdDxVcGRhdGluZ09wY29kZT4sIGFydGlmYWN0czogSXRlcmF0aW9uQXJ0aWZhY3RzKSB7XG4gICAgc3VwZXIoc3RhcnQsIHN0YXRlLCBib3VuZHMsIGNoaWxkcmVuKTtcbiAgICB0aGlzLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgICBsZXQgX3RhZyA9IHRoaXMuX3RhZyA9IFVwZGF0YWJsZVRhZy5jcmVhdGUoQ09OU1RBTlRfVEFHKTtcbiAgICB0aGlzLnRhZyA9IGNvbWJpbmUoW2FydGlmYWN0cy50YWcsIF90YWddKTtcbiAgfVxuXG4gIGRpZEluaXRpYWxpemVDaGlsZHJlbihsaXN0RGlkQ2hhbmdlID0gdHJ1ZSkge1xuICAgIHRoaXMubGFzdEl0ZXJhdGVkID0gdGhpcy5hcnRpZmFjdHMudGFnLnZhbHVlKCk7XG5cbiAgICBpZiAobGlzdERpZENoYW5nZSkge1xuICAgICAgdGhpcy5fdGFnLmlubmVyLnVwZGF0ZShjb21iaW5lU2xpY2UodGhpcy5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuXG4gIGV2YWx1YXRlKHZtOiBVcGRhdGluZ1ZNKSB7XG4gICAgbGV0IHsgYXJ0aWZhY3RzLCBsYXN0SXRlcmF0ZWQgfSA9IHRoaXM7XG5cbiAgICBpZiAoIWFydGlmYWN0cy50YWcudmFsaWRhdGUobGFzdEl0ZXJhdGVkKSkge1xuICAgICAgbGV0IHsgYm91bmRzIH0gPSB0aGlzO1xuICAgICAgbGV0IHsgZG9tIH0gPSB2bTtcblxuICAgICAgbGV0IG1hcmtlciA9IGRvbS5jcmVhdGVDb21tZW50KCcnKTtcbiAgICAgIGRvbS5pbnNlcnRBZnRlcihib3VuZHMucGFyZW50RWxlbWVudCgpLCBtYXJrZXIsIGV4cGVjdChib3VuZHMubGFzdE5vZGUoKSwgXCJjYW4ndCBpbnNlcnQgYWZ0ZXIgYW4gZW1wdHkgYm91bmRzXCIpKTtcblxuICAgICAgbGV0IHRhcmdldCA9IG5ldyBMaXN0UmV2YWxpZGF0aW9uRGVsZWdhdGUodGhpcywgbWFya2VyKTtcbiAgICAgIGxldCBzeW5jaHJvbml6ZXIgPSBuZXcgSXRlcmF0b3JTeW5jaHJvbml6ZXIoeyB0YXJnZXQsIGFydGlmYWN0cyB9KTtcblxuICAgICAgc3luY2hyb25pemVyLnN5bmMoKTtcblxuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50KCkucmVtb3ZlQ2hpbGQobWFya2VyKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gbm93LXVwZGF0ZWQgdXBkYXRpbmcgb3Bjb2Rlc1xuICAgIHN1cGVyLmV2YWx1YXRlKHZtKTtcbiAgfVxuXG4gIHZtRm9ySW5zZXJ0aW9uKG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlLk5vZGU+KTogVk0ge1xuICAgIGxldCB7IGVudiwgc2NvcGUsIGR5bmFtaWNTY29wZSB9ID0gdGhpcztcblxuICAgIGxldCBlbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2suZm9ySW5pdGlhbFJlbmRlcihcbiAgICAgIHRoaXMuZW52LFxuICAgICAgdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpLFxuICAgICAgbmV4dFNpYmxpbmdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBWTShlbnYsIHNjb3BlLCBkeW5hbWljU2NvcGUsIGVsZW1lbnRTdGFjayk7XG4gIH1cblxuICB0b0pTT04oKSA6IE9wY29kZUpTT04ge1xuICAgIGxldCBqc29uID0gc3VwZXIudG9KU09OKCk7XG4gICAgbGV0IG1hcCA9IHRoaXMubWFwO1xuXG4gICAgbGV0IGlubmVyID0gT2JqZWN0LmtleXMobWFwKS5tYXAoa2V5ID0+IHtcbiAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfTogJHttYXBba2V5XS5fZ3VpZH1gO1xuICAgIH0pLmpvaW4oXCIsIFwiKTtcblxuICAgIGxldCBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl07XG4gICAgaWYgKCFkZXRhaWxzKSB7XG4gICAgICBkZXRhaWxzID0ganNvbltcImRldGFpbHNcIl0gPSB7fTtcbiAgICB9XG5cbiAgICBkZXRhaWxzW1wibWFwXCJdID0gYHske2lubmVyfX1gO1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuY2xhc3MgVXBkYXRpbmdWTUZyYW1lIHtcbiAgcHJpdmF0ZSBjdXJyZW50OiBPcHRpb248VXBkYXRpbmdPcGNvZGU+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdm06IFVwZGF0aW5nVk0sIHByaXZhdGUgb3BzOiBVcGRhdGluZ09wU2VxLCBwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IE9wdGlvbjxFeGNlcHRpb25IYW5kbGVyPikge1xuICAgIHRoaXMudm0gPSB2bTtcbiAgICB0aGlzLm9wcyA9IG9wcztcbiAgICB0aGlzLmN1cnJlbnQgPSBvcHMuaGVhZCgpO1xuICB9XG5cbiAgZ290byhvcDogVXBkYXRpbmdPcGNvZGUpIHtcbiAgICB0aGlzLmN1cnJlbnQgPSBvcDtcbiAgfVxuXG4gIG5leHRTdGF0ZW1lbnQoKTogT3B0aW9uPFVwZGF0aW5nT3Bjb2RlPiB7XG4gICAgbGV0IHsgY3VycmVudCwgb3BzIH0gPSB0aGlzO1xuICAgIGlmIChjdXJyZW50KSB0aGlzLmN1cnJlbnQgPSBvcHMubmV4dE5vZGUoY3VycmVudCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBoYW5kbGVFeGNlcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuZXhjZXB0aW9uSGFuZGxlcikge1xuICAgICAgdGhpcy5leGNlcHRpb25IYW5kbGVyLmhhbmRsZUV4Y2VwdGlvbigpO1xuICAgIH1cbiAgfVxufVxuIl19

@@ -9,3 +9,3 @@ import './lib/bootstrap';

export { AttributeManager as IAttributeManager, AttributeManager, PropertyManager, INPUT_VALUE_PROPERTY_MANAGER, defaultManagers, defaultAttributeManagers, defaultPropertyManagers, readDOMAttr } from './lib/dom/attribute-managers';
export { debugSlice } from './lib/opcodes';
export { Register, debugSlice } from './lib/opcodes';
export { normalizeTextValue } from './lib/compiled/opcodes/content';

@@ -12,0 +12,0 @@ export { setDebuggerCallback, resetDebuggerCallback, DebugCallback } from './lib/compiled/opcodes/debugger';

import * as content from './content';
import * as vm from './vm';
import { Insertion } from '../../upsert';
import { Register } from '../../opcodes';
import * as WireFormat from '@glimmer/wire-format';

@@ -26,4 +27,2 @@ import { Option, Opaque } from '@glimmer/util';

start: number;
private locals;
private _localsSize;
constructor(env: Environment, meta: CompilationMeta, program: Program);

@@ -34,5 +33,2 @@ abstract compile<E>(expr: Represents<E>): E;

upvars<T extends [Opaque]>(count: number): T;
local(): number;
releaseLocal(): void;
readonly localsSize: number;
reserve(name: Op): void;

@@ -47,13 +43,13 @@ push(name: Op, op1?: number, op2?: number, op3?: number): number;

pushDynamicComponentManager(): void;
setComponentState(local: number): void;
prepareArgs(state: number): void;
createComponent(state: number, hasDefault: boolean, hasInverse: boolean): void;
registerComponentDestructor(state: number): void;
initializeComponentState(): void;
prepareArgs(state: Register): void;
createComponent(state: Register, hasDefault: boolean, hasInverse: boolean): void;
registerComponentDestructor(state: Register): void;
beginComponentTransaction(): void;
commitComponentTransaction(): void;
pushComponentOperations(): void;
getComponentSelf(state: number): void;
getComponentLayout(state: number): void;
didCreateElement(state: number): void;
didRenderLayout(state: number): void;
getComponentSelf(state: Register): void;
getComponentLayout(state: Register): void;
didCreateElement(state: Register): void;
didRenderLayout(state: Register): void;
getPartialTemplate(): void;

@@ -77,5 +73,5 @@ resolveMaybeLocal(name: string): void;

putIterator(): void;
enterList(start: string, end: string): void;
enterList(start: string): void;
exitList(): void;
iterate(breaks: string, start: string, end: string): void;
iterate(breaks: string): void;
setVariable(symbol: number): void;

@@ -89,6 +85,6 @@ getVariable(symbol: number): void;

function(f: ClientSide.FunctionExpressionCallback<Opaque>): void;
setLocal(pos: number): void;
getLocal(pos: number): void;
dup(): number;
pop(): number;
load(register: Register): void;
fetch(register: Register): void;
dup(register?: Register, offset?: number): number;
pop(count?: number): number;
pushRemoteElement(): void;

@@ -100,2 +96,3 @@ popRemoteElement(): void;

popScope(): void;
returnTo(label: string): void;
pushDynamicScope(): void;

@@ -107,10 +104,11 @@ popDynamicScope(): void;

pushBlock(block: Option<Block>): void;
pushBlocks(_default: Option<Block>, inverse: Option<Block>): void;
bindDynamicScope(_names: string[]): void;
enter(args: number, enter: string, exit: string): void;
enter(args: number): void;
exit(): void;
return(): void;
pushFrame(): void;
popFrame(): void;
compileDynamicBlock(): void;
invokeDynamic(invoker: vm.DynamicInvoker<SymbolTable>): void;
invokeStatic(_block: Block, ...args: ((builder: BasicOpcodeBuilder) => void)[]): void;
invokeStatic(_block: Block, numArgs: number): void;
invokeStatic(block: Block, callerCount?: number): void;
test(testFunc: 'const' | 'simple' | 'environment' | vm.TestFunction): void;

@@ -136,6 +134,3 @@ jump(target: string): void;

template(block: Option<WireFormat.SerializedInlineBlock>): Option<RawInlineBlock>;
closure(args: number, callback: BlockCallback): void;
iter(callback: BlockCallback): void;
unit(callback: (builder: OpcodeBuilder) => void): void;
}
export declare type BlockCallback = (dsl: OpcodeBuilder, BEGIN: Label, END: Label) => void;

@@ -13,2 +13,18 @@ import { Option, Dict, Slice as ListSlice } from '@glimmer/util';

}
/**
* Registers
*
* For the most part, these follows MIPS naming conventions, however the
* register numbers are different.
*/
export declare enum Register {
'pc' = 0,
'ra' = 1,
'fp' = 2,
'sp' = 3,
's0' = 4,
's1' = 5,
't0' = 6,
't1' = 7,
}
export declare const enum Op {

@@ -39,2 +55,13 @@ /**

* Operation:
* Bind a variable represented by a symbol from
* a caller supplied argument.
* Format:
* (SetVariable symbol:u32 offsetFromBase:u32)
* Operand Stack:
* ... →
* ...
*/
BindVariable = 3,
/**
* Operation:
* Bind the variable represented by a symbol from

@@ -48,3 +75,3 @@ * the value at the top of the stack.

*/
SetVariable = 3,
SetVariable = 4,
/**

@@ -61,3 +88,3 @@ * Operation:

*/
GetVariable = 4,
GetVariable = 5,
/**

@@ -74,3 +101,3 @@ * Operation:

*/
GetProperty = 5,
GetProperty = 6,
/**

@@ -84,17 +111,4 @@ * Operation: Push the specified constant block onto the stack.

*/
PushBlock = 6,
PushBlock = 7,
/**
* Operation: Push the specified constant blocks onto the stack.
* Format:
* (PushBlocks default:Option<#InlineBlock> inverse:Option<#InlineBlock>)
* Operand Stack:
* Form 1:
* ... →
* ..., InlineBlock
* Form 2:
* ... →
* ..., InlineBlock, InlineBlock
*/
PushBlocks = 7,
/**
* Operation: Push the specified bound block onto the stack.

@@ -145,2 +159,12 @@ * Format:

* Operation:
* Push a number onto the stack.
* Format:
* (Immediate number:u32)
* Operand Stack:
* ... →
* ..., number
*/
Immediate = 12,
/**
* Operation:
* Push an Object constant onto the stack that is not

@@ -154,5 +178,7 @@ * a JavaScript primitive.

*/
Constant = 12,
Constant = 13,
/**
* Operation: Push a JavaScript primitive onto the stack.
* Operation:
* Wrap a JavaScript primitive in a reference and push it
* onto the stack.
* Format:

@@ -171,59 +197,39 @@ * (PushPrimitive constant:#Primitive)

*/
Primitive = 13,
PrimitiveReference = 14,
/**
* Operation:
* Set the value at the top of the stack as a local.
* Operation: Duplicate and push item from an offset in the stack.
* Format:
* (SetLocal offset:u32)
* (Dup register:u32, offset:u32)
* Operand Stack:
* ..., Opaque →
* ...
*/
SetLocal = 14,
/**
* Operation:
* Push the local at `offset` onto the stack.
* Format:
* (GetLocal offset:u32)
* Operand Stack:
* ... →
* ..., Opaque
*/
GetLocal = 15,
/**
* Operation: Duplicate the top item on the stack.
* Format:
* (Dup)
* Operand Stack:
* ..., Opaque →
* ..., Opaque, Opaque
*/
Dup = 16,
Dup = 15,
/**
* Operation: Pop the stack and throw away the value.
* Operation: Pop N items off the stack and throw away the value.
* Format:
* (Pop)
* Operand Stack:
* ..., Opaque →
* ..., Opaque, ..., Opaque →
* ...
*/
Pop = 17,
Pop = 16,
/**
* Operation: Reserve space for `count` locals
* Operation: Load a value into a register
* Format:
* (ReserveLocals count:u32)
* (Load register:u32)
* Operand Stack:
* ... →
* ..., Opaque →
* ...
*/
ReserveLocals = 18,
Load = 17,
/**
* Operation: Release any reserved locals
* Operation: Fetch a value from a register
* Format:
* (ReleaseLocals)
* (Fetch register:u32)
* Operand Stack:
* ... →
* ...
* ..., Opaque
*/
ReleaseLocals = 19,
Fetch = 18,
/**

@@ -242,3 +248,3 @@ * Operation: Push a new root scope onto the scope stack.

*/
RootScope = 20,
RootScope = 19,
/**

@@ -256,3 +262,3 @@ * Operation: Push a new child scope onto the scope stack.

*/
ChildScope = 21,
ChildScope = 20,
/**

@@ -266,3 +272,3 @@ * Operation: Pop the current scope from the scope stack.

*/
PopScope = 22,
PopScope = 21,
/**

@@ -273,6 +279,6 @@ * Operation: Return to the previous frame.

* Operand Stack:
* ... →
* ..., address:number →
* ...
*/
Return = 23,
Return = 22,
/**

@@ -286,3 +292,3 @@ * Operation: Append a Text node with value `contents`

*/
Text = 24,
Text = 23,
/**

@@ -296,3 +302,3 @@ * Operation: Append a Comment node with value `contents`

*/
Comment = 25,
Comment = 24,
/**

@@ -315,3 +321,3 @@ * Operation: Append a Dynamic node based on .

*/
DynamicContent = 26,
DynamicContent = 25,
/**

@@ -325,3 +331,3 @@ * Operation: Open a new Element named `tag`.

*/
OpenElement = 27,
OpenElement = 26,
/**

@@ -337,3 +343,3 @@ * Operation:

*/
OpenElementWithOperations = 28,
OpenElementWithOperations = 27,
/**

@@ -349,3 +355,3 @@ * Operation:

*/
OpenDynamicElement = 29,
OpenDynamicElement = 28,
/**

@@ -359,3 +365,3 @@ * Operation: Add an attribute to the current Element.

*/
StaticAttr = 30,
StaticAttr = 29,
/**

@@ -375,3 +381,3 @@ * Operation:

*/
DynamicAttr = 31,
DynamicAttr = 30,
/**

@@ -391,3 +397,3 @@ * Operation:

*/
DynamicAttrNS = 32,
DynamicAttrNS = 31,
/**

@@ -402,3 +408,3 @@ * Operation: Finish setting attributes on the current element.

*/
FlushElement = 33,
FlushElement = 32,
/**

@@ -413,6 +419,6 @@ * Operation: Close the current element.

*/
CloseElement = 34,
Modifier = 35,
PushRemoteElement = 36,
PopRemoteElement = 37,
CloseElement = 33,
Modifier = 34,
PushRemoteElement = 35,
PopRemoteElement = 36,
/**

@@ -429,5 +435,5 @@ * Operation: Bind stack values as dynamic variables.

*/
BindDynamicScope = 38,
PushDynamicScope = 39,
PopDynamicScope = 40,
BindDynamicScope = 37,
PushDynamicScope = 38,
PopDynamicScope = 39,
/**

@@ -441,7 +447,7 @@ * Operation: Compile the InlineBlock at the top of the stack.

*/
CompileDynamicBlock = 41,
CompileDynamicBlock = 40,
/**
* Operation: Evaluate the specified block.
* Format:
* (InvokeStatic #InlineBlock)
* (InvokeStatic block:#InlineBlock)
* Operand Stack:

@@ -451,3 +457,3 @@ * ... →

*/
InvokeStatic = 42,
InvokeStatic = 41,
/**

@@ -461,3 +467,3 @@ * Operation: Evaluate the block at the top of the stack.

*/
InvokeDynamic = 43,
InvokeDynamic = 42,
/**

@@ -472,3 +478,3 @@ * Operation: Jump to the specified offset.

*/
Jump = 44,
Jump = 43,
/**

@@ -485,3 +491,3 @@ * Operation:

*/
JumpIf = 45,
JumpIf = 44,
/**

@@ -498,4 +504,24 @@ * Operation:

*/
JumpUnless = 46,
JumpUnless = 45,
/**
* Operation: Push a stack frame
*
* Format:
* (PushFrame)
* Operand Stack:
* ... →
* $ra, $fp
*/
PushFrame = 46,
/**
* Operation: Pop a stack frame
*
* Format:
* (PushFrame)
* Operand Stack:
* $ra, $fp →
* ...
*/
PopFrame = 47,
/**
* Operation:

@@ -506,3 +532,3 @@ * Start tracking a new output block that could change

* Format:
* (Enter args:u32 from:u32 to:u32)
* (Enter args:u32)
* Operand Stack:

@@ -520,3 +546,3 @@ * ... →

*/
Enter = 47,
Enter = 48,
/**

@@ -536,3 +562,3 @@ * Operation:

*/
Exit = 48,
Exit = 49,
/**

@@ -549,3 +575,3 @@ * Operation: Convert the top of the stack into a boolean reference.

*/
Test = 49,
Test = 50,
/**

@@ -555,3 +581,3 @@ * Operation: Enter a list.

* Format:
* (EnterList unused:u32 from:u32 to:u32)
* (EnterList address:u32)
* Operand Stack:

@@ -561,3 +587,3 @@ * ..., Iterator →

*/
EnterList = 50,
EnterList = 51,
/**

@@ -572,3 +598,3 @@ * Operation: Exit the current list.

*/
ExitList = 51,
ExitList = 52,
/**

@@ -585,3 +611,3 @@ * Operation:

*/
PutIterator = 52,
PutIterator = 53,
/**

@@ -609,16 +635,4 @@ * Operation:

*/
Iterate = 53,
Iterate = 54,
/**
* Operation: Start iterating for a given key.
*
* Format:
* (StartIterate from:u32 to:u32)
* Operand Stack:
* ..., VersionedPathReference →
* ...
* Description:
* TODO: Merge with Iterate?
*/
StartIterate = 54,
/**
* Operation: Push an appropriate component manager onto the stack.

@@ -646,11 +660,11 @@ *

/**
* Operation: Set component metadata into a local.
* Operation: push component metadata onto the stack.
*
* Format:
* (SetComponentState local:u32)
* (InitializeComponentState)
* Operand Stack:
* ..., ComponentDefinition<T>, ComponentManager<T>, T →
* ...
* ..., ComponentDefinition<T>, ComponentManager<T> →
* ..., ComponentState
*/
SetComponentState = 57,
InitializeComponentState = 57,
/**

@@ -677,3 +691,3 @@ * Operation: Push a user representation of args onto the stack.

* Format:
* (CreateComponent state:u32)
* (PrepareArgs state:u32)
* Operand Stack:

@@ -688,6 +702,6 @@ * ... →

* (CreateComponent flags:u32 state:u32)
* Operand Stack:
* ... →
* ...
* Description:
* Operand Stack:
* Flags:

@@ -770,14 +784,2 @@ *

/**
* Operation:
* Push the layout for the current component onto
* the stack.
*
* Format:
* (ComponentLayoutScope state:u32)
* Operand Stack:
* ... →
* ..., InlineBlock
*/
ComponentLayoutScope = 68,
/**
* Operation: Invoke didRenderLayout on the current component manager

@@ -791,3 +793,3 @@ *

*/
DidRenderLayout = 69,
DidRenderLayout = 68,
/**

@@ -802,3 +804,3 @@ * Operation: Extract the template from a partial definition

*/
GetPartialTemplate = 70,
GetPartialTemplate = 69,
/**

@@ -815,3 +817,3 @@ * Operation:

*/
ResolveMaybeLocal = 71,
ResolveMaybeLocal = 70,
/**

@@ -826,5 +828,5 @@ * Operation: Activate the debugger

*/
Debugger = 72,
Debugger = 71,
/** The size of the opcode list */
Size = 73,
Size = 72,
}

@@ -831,0 +833,0 @@ export declare function debugSlice(env: Environment, start: number, end: number): void;

@@ -47,9 +47,11 @@ import { CompiledDynamicTemplate, CompiledStaticTemplate } from './compiled/blocks';

OpenComponentElement = 0,
OptimizedAppend = 1,
UnoptimizedAppend = 2,
StaticPartial = 3,
DynamicPartial = 4,
NestedBlock = 5,
ScannedBlock = 6,
FunctionExpression = 7,
DidCreateElement = 1,
DidRenderLayout = 2,
OptimizedAppend = 3,
UnoptimizedAppend = 4,
StaticPartial = 5,
DynamicPartial = 6,
NestedBlock = 7,
ScannedBlock = 8,
FunctionExpression = 9,
}

@@ -60,2 +62,4 @@ function is<T extends any[]>(variant: Ops): (value: any[]) => value is T;

type OpenComponentElement = [ClientSideStatement, Ops.OpenComponentElement, string];
type DidCreateElement = [ClientSideStatement, Ops.DidCreateElement];
type DidRenderLayout = [ClientSideStatement, Ops.DidRenderLayout];
type OptimizedAppend = [ClientSideStatement, Ops.OptimizedAppend, WireFormat.Expression, boolean];

@@ -67,3 +71,3 @@ type UnoptimizedAppend = [ClientSideStatement, Ops.UnoptimizedAppend, WireFormat.Expression, boolean];

type FunctionExpressionCallback<T> = (VM: PublicVM, symbolTable: SymbolTable) => VersionedPathReference<T>;
type ClientSideStatement = OpenComponentElement | OptimizedAppend | UnoptimizedAppend | StaticPartial | DynamicPartial;
type ClientSideStatement = OpenComponentElement | DidCreateElement | DidRenderLayout | OptimizedAppend | UnoptimizedAppend | StaticPartial | DynamicPartial;
type ClientSideExpression = FunctionExpression;

@@ -70,0 +74,0 @@ }

@@ -35,3 +35,3 @@ import { CompiledDynamicProgram } from '../compiled/blocks';

constructor(outerSymbols: string[], evalInfo: WireFormat.Core.EvalInfo);
invoke(vm: VM, partial: Option<CompiledDynamicProgram>): void;
invoke(vm: VM, _partial: Option<CompiledDynamicProgram>): void;
}

@@ -41,6 +41,2 @@ import C = WireFormat.Core;

export declare function compileList(params: Option<WireFormat.Expression[]>, builder: OpcodeBuilder): number;
export declare function compileBlocks(block: Option<Block>, inverse: Option<Block>, builder: OpcodeBuilder): {
default: boolean;
inverse: boolean;
};
export declare type BlockMacro = (params: C.Params, hash: C.Hash, template: Option<Block>, inverse: Option<Block>, builder: OpcodeBuilder) => void;

@@ -47,0 +43,0 @@ export declare type MissingBlockMacro = (name: string, params: C.Params, hash: C.Hash, template: Option<Block>, inverse: Option<Block>, builder: OpcodeBuilder) => void;

@@ -0,1 +1,2 @@

import { Register } from '../opcodes';
import { Scope, DynamicScope, Environment, Opcode } from '../environment';

@@ -5,4 +6,3 @@ import { ElementStack } from '../builder';

import { PathReference, VersionedPathReference } from '@glimmer/reference';
import { CompiledDynamicProgram, OpSlice } from '../compiled/blocks';
import { Template } from '../scanner';
import { CompiledDynamicProgram } from '../compiled/blocks';
import { VMState, ListBlockOpcode, TryOpcode } from './update';

@@ -18,16 +18,19 @@ import RenderResult from './render-result';

}
export declare type CapturedStack = Opaque[];
export declare class EvaluationStack {
private stack;
constructor(stack?: Opaque[]);
readonly pos: number;
snapshot(args?: number): EvaluationStack;
restore(bp: number): number;
set(pos: number, value: Opaque): void;
get(pos: number): Opaque;
fp: number;
sp: number;
static empty(): EvaluationStack;
static restore(snapshot: CapturedStack): EvaluationStack;
constructor(stack: Opaque[], fp: number, sp: number);
isEmpty(): boolean;
push(value: Opaque): void;
dup(): void;
pop<T>(): T;
top<T>(): T;
fromTop<T>(pos: number): T;
slice<T extends Opaque[]>(count: number): T;
dup(position?: number): void;
pop<T>(n?: number): T;
peek<T>(): T;
fromBase<T>(offset: number): T;
fromTop<T>(offset: number): T;
capture(items: number): CapturedStack;
toArray(): any[];
}

@@ -46,24 +49,35 @@ export declare type IteratorResult<T> = {

private scopeStack;
private bp;
updatingOpcodeStack: any;
cacheGroups: any;
listBlockStack: any;
frames: number[];
constants: Constants;
evalStack: EvaluationStack;
stack: EvaluationStack;
/** Registers **/
private pc;
private ra;
private fp;
private sp;
s0: any;
s1: any;
t0: any;
t1: any;
fetch(register: Register): void;
load(register: Register): void;
fetchValue<T>(register: Register): T;
loadValue<T>(register: Register, value: T): void;
pushFrame(): void;
popFrame(): void;
goto(pc: number): void;
call(pc: number): void;
returnTo(ra: number): void;
return(): void;
static initial(env: Environment, self: PathReference<Opaque>, dynamicScope: DynamicScope, elementStack: ElementStack, program: CompiledDynamicProgram): VM;
constructor(env: Environment, scope: Scope, dynamicScope: DynamicScope, elementStack: ElementStack);
private ip;
capture(args: number): VMState;
reserveLocals(size: number): void;
releaseLocals(): void;
setLocal(position: number, value: Opaque): void;
getLocal<T>(position: number): T;
goto(ip: number): void;
beginCacheGroup(): void;
commitCacheGroup(): void;
enter(args: number, start: number, end: number): void;
iterate(start: number, end: number, memo: VersionedPathReference<Opaque>, value: VersionedPathReference<Opaque>, updating?: any): TryOpcode;
enter(args: number): void;
iterate(memo: VersionedPathReference<Opaque>, value: VersionedPathReference<Opaque>, updating?: any): TryOpcode;
enterItem(key: string, opcode: TryOpcode): void;
enterList(start: number, end: number): void;
enterList(start: number): void;
private didEnter(opcode);

@@ -75,7 +89,5 @@ exit(): void;

updating(): LinkedList<UpdatingOpcode>;
stack(): ElementStack;
elements(): ElementStack;
scope(): Scope;
dynamicScope(): DynamicScope;
pushFrame(block: OpSlice): void;
pushEvalFrame(start: number): void;
pushChildScope(): void;

@@ -90,12 +102,7 @@ pushCallerScope(childScope?: boolean): void;

referenceForSymbol(symbol: number): PathReference<any>;
resume(start: number, stack: EvaluationStack, bp: number): RenderResult;
execute(start: number, initialize?: (vm: VM) => void): RenderResult;
private prepare(start, initialize?);
next(): IteratorResult<RenderResult>;
return(): void;
private nextStatement(env);
evaluateOpcode(opcode: Opcode): void;
invoke(compiled: OpSlice): void;
invokeBlock(block: Template): void;
bindDynamicScope(names: ConstantString[]): void;
}

@@ -10,3 +10,3 @@ import { Scope, DynamicScope, Environment } from '../environment';

import * as Simple from '../dom/interfaces';
import VM, { EvaluationStack } from './append';
import VM, { CapturedStack } from './append';
export default class UpdatingVM {

@@ -35,8 +35,6 @@ env: Environment;

dynamicScope: DynamicScope;
stack: EvaluationStack;
bp: number;
stack: CapturedStack;
}
export declare abstract class BlockOpcode extends UpdatingOpcode implements DestroyableBounds {
start: number;
end: number;
type: string;

@@ -49,6 +47,5 @@ next: any;

protected dynamicScope: DynamicScope;
protected stack: EvaluationStack;
protected bp: number;
protected stack: CapturedStack;
protected bounds: DestroyableBounds;
constructor(start: number, end: number, state: VMState, bounds: DestroyableBounds, children: LinkedList<UpdatingOpcode>);
constructor(start: number, state: VMState, bounds: DestroyableBounds, children: LinkedList<UpdatingOpcode>);
abstract didInitializeChildren(): void;

@@ -67,3 +64,3 @@ parentElement(): Simple.Element;

protected bounds: UpdatableTracker;
constructor(start: number, end: number, state: VMState, bounds: UpdatableTracker, children: LinkedList<UpdatingOpcode>);
constructor(start: number, state: VMState, bounds: UpdatableTracker, children: LinkedList<UpdatingOpcode>);
didInitializeChildren(): void;

@@ -80,3 +77,3 @@ evaluate(vm: UpdatingVM): void;

private _tag;
constructor(start: number, end: number, state: VMState, bounds: Tracker, children: LinkedList<UpdatingOpcode>, artifacts: IterationArtifacts);
constructor(start: number, state: VMState, bounds: Tracker, children: LinkedList<UpdatingOpcode>, artifacts: IterationArtifacts);
didInitializeChildren(listDidChange?: boolean): void;

@@ -83,0 +80,0 @@ evaluate(vm: UpdatingVM): void;

{
"name": "@glimmer/runtime",
"version": "0.23.0-alpha.8",
"version": "0.23.0-alpha.9",
"description": "Minimal runtime needed to render Glimmer templates",

@@ -8,8 +8,8 @@ "repository": "https://github.com/tildeio/glimmer/tree/master/packages/@glimmer/runtime",

"dependencies": {
"@glimmer/util": "^0.23.0-alpha.8",
"@glimmer/reference": "^0.23.0-alpha.8",
"@glimmer/object": "^0.23.0-alpha.8",
"@glimmer/object-reference": "^0.23.0-alpha.8",
"@glimmer/wire-format": "^0.23.0-alpha.8",
"@glimmer/interfaces": "^0.23.0-alpha.8"
"@glimmer/util": "^0.23.0-alpha.9",
"@glimmer/reference": "^0.23.0-alpha.9",
"@glimmer/object": "^0.23.0-alpha.9",
"@glimmer/object-reference": "^0.23.0-alpha.9",
"@glimmer/wire-format": "^0.23.0-alpha.9",
"@glimmer/interfaces": "^0.23.0-alpha.9"
},

@@ -16,0 +16,0 @@ "devDependencies": {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc