@mnemonica/tactica 0.4.4 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIlNlY29uZFR5cGVcIikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogRnVsbCBwYXRoIChlLmcuLCBcIkZpcnN0VHlwZS5TZWNvbmRUeXBlXCIpICovXG5cdGZ1bGxQYXRoOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhpcyB0eXBlJ3MgY29uc3RydWN0b3IgKi9cblx0cHJvcGVydGllczogTWFwPHN0cmluZywgUHJvcGVydHlJbmZvPjtcblx0LyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgKGZvciBUeXBlUmVnaXN0cnkgY29uc3RydWN0b3Igc2lnbmF0dXJlKSAqL1xuXHRjb25zdHJ1Y3RvclBhcmFtcz86IENvbnN0cnVjdG9yUGFyYW1JbmZvW107XG5cdC8qKlxuXHQgKiBUcnVlIHdoZW4gdGhlIGNvbnN0cnVjdCBoYW5kbGVyIGlzIGFuIGFzeW5jIGZ1bmN0aW9uL2Fycm93IChkZXRlY3RlZFxuXHQgKiBzeW50YWN0aWNhbGx5IGJ5IHRoZSBhc3luYyBtb2RpZmllcikuIEVtaXR0ZWQgY29uc3RydWN0b3Igc2hhcGVzIHRoZW5cblx0ICogcmVzb2x2ZSB0byBQcm9taXNlPEluc3RhbmNlVHlwZT4uIEFzeW5jIENMQVNTRVMgYXJlIG5ldmVyIGZsYWdnZWQg4oCUXG5cdCAqIHRoZXkgYXJlIHR5cGVkIGJ5IHRoZSB1c2VyIGluIHVzZXJsYW5kIChkb2N1bWVudGVkIGluIEFHRU5UUy5tZCkuXG5cdCAqL1xuXHRpc0FzeW5jPzogYm9vbGVhbjtcblx0LyoqIFBhcmVudCB0eXBlIG5vZGUgKi9cblx0cGFyZW50PzogVHlwZU5vZGU7XG5cdC8qKiBDaGlsZCB0eXBlcyAqL1xuXHRjaGlsZHJlbjogTWFwPHN0cmluZywgVHlwZU5vZGU+O1xuXHQvKiogU291cmNlIGZpbGUgcGF0aCAqL1xuXHRzb3VyY2VGaWxlOiBzdHJpbmc7XG5cdC8qKiBMaW5lIG51bWJlciBpbiBzb3VyY2UgKi9cblx0bGluZTogbnVtYmVyO1xuXHQvKiogQ29sdW1uIG51bWJlciBpbiBzb3VyY2UgKi9cblx0Y29sdW1uOiBudW1iZXI7XG5cdC8qKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBuYW1lIG9yIGNsYXNzIG5hbWUgKi9cblx0Y29uc3RydWN0b3JOYW1lPzogc3RyaW5nO1xuXHQvKiogQ29sbGVjdGlvbiBpZGVudGlmaWVyIGlmIHRoZSB0eXBlIGJlbG9uZ3MgdG8gYSBjdXN0b20gY29sbGVjdGlvbiAodW5kZWZpbmVkID0gZGVmYXVsdC9nbG9iYWwgcmVnaXN0cnkpICovXG5cdGNvbGxlY3Rpb25JZD86IHN0cmluZztcblx0LyoqIFJlZ2lzdHJ5IGludGVyZmFjZSBuYW1lIGZvciBjdXN0b20gY29sbGVjdGlvbnMgdXNpbmcgT3B0aW9uIEIgKHVzZXItcHJvdmlkZWQgcmVnaXN0cnkgaW50ZXJmYWNlKSAqL1xuXHRyZWdpc3RyeUludGVyZmFjZU5hbWU/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTb3VyY2UgZmlsZSBvZiB0aGUgY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgY2FsbCDigJQgdGhlIG1vZHVsZSB0aGVcblx0ICogT3B0aW9uIEIgcmVnaXN0cnkgYXVnbWVudGF0aW9uIG11c3QgdGFyZ2V0ICh0aGUgaW50ZXJmYWNlIGlzXG5cdCAqIGNvbmZpcm1lZCBkZWNsYXJlZCB0aGVyZSlcblx0ICovXG5cdGNvbGxlY3Rpb25Tb3VyY2VGaWxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVHcmFwaCB7XG5cdC8qKiBSb290IHR5cGVzLCBrZXllZCBieSBmdWxsIHBhdGggKGN1c3RvbS1jb2xsZWN0aW9uIHJvb3RzIGNhcnJ5IHRoZSBgY29sbGVjdGlvbklkOjpgIHByZWZpeCkgKi9cblx0cm9vdHM6IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIEFsbCB0eXBlcyBieSBmdWxsIHBhdGggKi9cblx0YWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIEFkZCBhIHJvb3QgdHlwZSAqL1xuXHRhZGRSb290KG5vZGU6IFR5cGVOb2RlKTogdm9pZDtcblx0LyoqIEZpbmQgYSB0eXBlIGJ5IGZ1bGwgcGF0aCAqL1xuXHRmaW5kVHlwZShmdWxsUGF0aDogc3RyaW5nKTogVHlwZU5vZGUgfCB1bmRlZmluZWQ7XG5cdC8qKiBHZXQgYWxsIHR5cGVzIGFzIGFycmF5ICovXG5cdGdldEFsbFR5cGVzKCk6IFR5cGVOb2RlW107XG5cdC8qKiBDbGVhciB0aGUgZ3JhcGggKi9cblx0Y2xlYXIoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplUmVzdWx0IHtcblx0LyoqIFR5cGVzIGZvdW5kIGluIHRoZSBhbmFseXNpcyAqL1xuXHR0eXBlczogVHlwZU5vZGVbXTtcblx0LyoqIEVycm9ycyBlbmNvdW50ZXJlZCAqL1xuXHRlcnJvcnM6IEFuYWx5emVFcnJvcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5emVFcnJvciB7XG5cdG1lc3NhZ2U6IHN0cmluZztcblx0ZmlsZTogc3RyaW5nO1xuXHRsaW5lOiBudW1iZXI7XG5cdGNvbHVtbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZFR5cGVzIHtcblx0LyoqIENvbnRlbnQgb2YgdGhlIC5kLnRzIGZpbGUgKi9cblx0Y29udGVudDogc3RyaW5nO1xuXHQvKiogVHlwZXMgdGhhdCB3ZXJlIGdlbmVyYXRlZCAqL1xuXHR0eXBlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uSW5mbyB7XG5cdC8qKiBUeXBlIG5hbWUgKGUuZy4sIFwiQWRtaW5UeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogSG93IHR5cGUgd2FzIGNyZWF0ZWQ6ICdkZWZpbmUnIG9yICdkZWNvcmF0ZScgKi9cblx0a2luZDogJ2RlZmluZScgfCAnZGVjb3JhdGUnO1xuXHQvKiogUGFyZW50IHR5cGUgZnVsbCBwYXRoLCBudWxsIGlmIHJvb3QgKi9cblx0cGFyZW50OiBzdHJpbmcgfCBudWxsO1xuXHQvKiogc3RyaWN0Q2hhaW4gY29uZmlnIG9wdGlvbiAqL1xuXHRzdHJpY3RDaGFpbjogYm9vbGVhbjtcblx0LyoqIGJsb2NrRXJyb3JzIGNvbmZpZyBvcHRpb24gKi9cblx0YmxvY2tFcnJvcnM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVXNhZ2UgaW5mbyBmb3IgY29kZSBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VJbmZvIHtcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogS2luZCBvZiB1c2FnZTogaW5zdGFudGlhdGlvbiwgdHlwZUFubm90YXRpb24sIHByb3BlcnR5QWNjZXNzLCBsb29rdXAsIHJlZmVyZW5jZSAqL1xuXHRraW5kOiAnaW5zdGFudGlhdGlvbicgfCAndHlwZUFubm90YXRpb24nIHwgJ3Byb3BlcnR5QWNjZXNzJyB8ICdsb29rdXAnIHwgJ3JlZmVyZW5jZSc7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKipcblx0ICogU2NvcGUgaG9sZGluZyB0aGlzIHVzYWdlIChMb2NhbFNjb3BlV2Fsa2VyIHNjb3BlSWQ6IG1vZHVsZSBzY29wZSBpcyB0aGVcblx0ICogZmlsZSBwYXRoLCBmdW5jdGlvbiBzY29wZXMgYXJlIGZpbGU6bGluZTpjb2wpLiBBZGRpdGl2ZTsgYWJzZW50IHdoZW4gdGhlXG5cdCAqIHVzYWdlIHNpdHMgb3V0c2lkZSB0cmFja2VkIGZpbGVzLlxuXHQgKi9cblx0aG9sZGVyU2NvcGVJZD86IHN0cmluZztcblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yIGV4cHJlc3Npb24gdGV4dCBhdCBhbiBpbnN0YW50aWF0aW9uIHNpdGUgKCdUaGluZycsXG5cdCAqICd1c2VyLkFkbWluRW50aXR5JywgJ1QyJyBmb3IgYSBsb29rdXAgYWxpYXMpLiBBZGRpdGl2ZTsgc2V0IG9ubHkgb25cblx0ICoga2luZCAnaW5zdGFudGlhdGlvbicuIEZlZWRzIENyZWF0aW9uQW5jaG9yLmNvbnN0cnVjdG9yVGV4dCAoUGhhc2UgMykuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvclRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGRlZmluaXRpb25zLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uc0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBEZWZpbml0aW9uSW5mbz47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHVzYWdlcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0dXNhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBVc2FnZUluZm9bXT47XG59XG5cbi8qKlxuICogRURTIChFeGVjdXRpb24gRGF0YSBTdG9yYWdlKSBraW5kIGZvciB0cmFja2luZyBleGVjdXRpb24gZmxvdyBwYXR0ZXJuc1xuICovXG5leHBvcnQgdHlwZSBFRFNLaW5kID1cblx0fCAnd3JhcCdcblx0fCAnY29udGV4dENvbnN1bWUnXG5cdHwgJ2hvb2tBdHRhY2gnO1xuXG4vKipcbiAqIEVEUyBpbmZvIGZvciBleGVjdXRpb24gZGF0YSBmbG93IHRyYWNraW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRURTSW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgRURTIHVzYWdlICovXG5cdGtpbmQ6IEVEU0tpbmQ7XG5cdC8qKiBDb2RlIHNuaXBwZXQgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYgZGV0ZWN0YWJsZSAqL1xuXHR0YXJnZXRUeXBlPzogc3RyaW5nO1xuXHQvKipcblx0ICogRW5jbG9zaW5nIG1uZW1vbmljYSB0eXBlIHBhdGggKGRlZmluZS9sYXp5IGhhbmRsZXIgb3IgZGVjb3JhdGVkIGNsYXNzKTtcblx0ICogZm9yIHdyYXAgc2l0ZXMgb3V0c2lkZSBhbnkgaGFuZGxlciwgYXR0cmlidXRlZCB0aHJvdWdoIHRoZSBpbnN0YW5jZS9jb250ZXh0XG5cdCAqIGFyZ3VtZW50ICh0cmFja2VkIGFzc2lnbm1lbnQgb3IgcGFyYW1ldGVyIGFubm90YXRpb24pLCB0aGVuIGluaGVyaXRlZCBkb3duXG5cdCAqIHRoZSB3cmFwIGdlbmVyYXRpb24gY2hhaW4gKGB2aWFgKVxuXHQgKi9cblx0c2NvcGU/OiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBvZiB0aGUgZW5jbG9zaW5nIHdyYXAgc2l0ZSB3aG9zZSBydW50aW1lIHdyYXBwaW5nIGNhdXNlZCB0aGlzIGVudHJ5ICovXG5cdHZpYT86IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRocyBpbnN0YW50aWF0ZWQgaW5zaWRlIHRoZSB3cmFwcGVkIGJvZHkg4oCUIGd1YXJhbnRlZWQgcGF0aCBoaXRzICovXG5cdGNyZWF0ZXNUeXBlcz86IHN0cmluZ1tdO1xuXHQvKiogTGFiZWwgc3RyaW5nIGxpdGVyYWwgcGFzc2VkIHRvIHdyYXAoZm4sIOKApiwgJ2xhYmVsJykgd2hlbiBzdGF0aWNhbGx5IHZpc2libGUgKi9cblx0bGFiZWw/OiBzdHJpbmc7XG5cdC8qKiBzY29wZUlkIChzY29wZXMuanNvbikgb2YgdGhlIHdyYXBwZWQgY2FsbGJhY2sncyBvd24gc2NvcGUg4oCUIGpvaW5zIHRvIHRoZSBjcmVhdGlvbiBncmFwaCAqL1xuXHRjYWxsYmFja1Njb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBJZGVudGlmaWVyIHBhc3NlZCBhcyB0aGUgaW5zdGFuY2UvY29udGV4dCBhcmd1bWVudCAoJ3VzZXInKSwgd2hlbiBpdCBpcyBvbmUgKi9cblx0aW5zdGFuY2VBcmc/OiBzdHJpbmc7XG5cdC8qKiBzY29wZUlkIG9mIHRoZSBzY29wZSBob2xkaW5nIHRoZSB3cmFwIGNhbGwgc2l0ZSDigJQgam9pbnMgdG8gdGhlIGNyZWF0aW9uIGdyYXBoICovXG5cdHNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgZnVsbFBhdGggb2YgdGhlIGluc3RhbmNlIGFyZ3VtZW50LCByZXNvbHZlZCB0aHJvdWdoIHNjb3BlIHZhcmlhYmxlcyAqL1xuXHR3cmFwc1R5cGVQYXRoPzogc3RyaW5nO1xuXHQvKiogV3JhcC1mYW1pbHkgZnVuY3Rpb24gbmFtZSAoJ3dyYXAnIHwgJ3dyYXBDb25zdHJ1Y3RvckFyZycgfCDigKYpIOKAlCBqb2lucyB0aGVcblx0ICogIGNhbGwgc2l0ZSB0byBkaXZlJ3MgZW5naW5lIGtub3QgaW4gZ3JhcGggY29uc3VtZXJzICovXG5cdGZuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBlZHMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVEU0pzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdGVkczogUmVjb3JkPHN0cmluZywgRURTSW5mb1tdPjtcbn1cblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24ga2luZCBmb3IgZnJhbWV3b3JrIGxpZmVjeWNsZSBjcm9zc3JvYWRzXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvbktpbmQgPVxuXHR8ICdpbnRlcmNlcHRvcidcblx0fCAnZ3VhcmQnXG5cdHwgJ3BpcGUnXG5cdHwgJ2ZpbHRlcidcblx0fCAnbWlkZGxld2FyZSc7XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9uIHNjb3BlOiB3aGVyZSB0aGUgcG9pbnQgYXR0YWNoZXMuXG4gKiAnZ2xvYmFsJyBmb3IgcHJvdmlkZXItdG9rZW4gcmVnaXN0cmF0aW9ucywgJ21vZHVsZScgZm9yIG1pZGRsZXdhcmUgd2lyZWRcbiAqIHZpYSBjb25zdW1lci5hcHBseSgpIEFORCBmb3IgYmFyZSBoZXJpdGFnZSBkZWNsYXJhdGlvbnMgd2hvc2UgYXR0YWNobWVudFxuICogaXMgc3RhdGljYWxseSB1bmtub3duLCBgY29udHJvbGxlcjpOYW1lYCAvIGBtZXRob2Q6Q2xhc3MubWV0aG9kYCBmb3JcbiAqIGRlY29yYXRvci1zY29wZWQgYXR0YWNobWVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvblNjb3BlID1cblx0fCAnZ2xvYmFsJ1xuXHR8ICdtb2R1bGUnXG5cdHwgYGNvbnRyb2xsZXI6JHtzdHJpbmd9YFxuXHR8IGBtZXRob2Q6JHtzdHJpbmd9YDtcblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24gcG9pbnQ6IGEgZnJhbWV3b3JrIGxpZmVjeWNsZSBjcm9zc3JvYWQgKGludGVyY2VwdG9yLFxuICogZ3VhcmQsIHBpcGUsIGZpbHRlciwgbWlkZGxld2FyZSkgZGV0ZWN0ZWQgc3ludGFjdGljYWxseS4gVGhlIHZvY2FidWxhcnlcbiAqIHRoYXQgdHVybnMgYSBzeW50YWN0aWMgc2hhcGUgaW50byBhIHBvaW50IGNvbWVzIGZyb20gcGx1Z2lucyDigJQgd2l0aCBub1xuICogcGx1Z2luIGxvYWRlZCwgbm8gcG9pbnRzIGFyZSBjb2xsZWN0ZWQuXG4gKlxuICogRGVkdXBlL3Njb3BlIGRlY2lzaW9uOiBwb2ludHMgYXJlIGtleWVkIGJ5IChraW5kLCBjbGFzc05hbWUsIGxvY2F0aW9uLFxuICogc2NvcGUpIGFuZCBkdXBsaWNhdGVzIG1lcmdlIHRoZWlyIGB0YXJnZXRzYC4gQSBjbGFzcyBkZXRlY3RlZCBib3RoIGJ5XG4gKiBoZXJpdGFnZSAoYSBwbHVnaW4tbGlzdGVkIGBpbXBsZW1lbnRzYCBpbnRlcmZhY2UpIGFuZCBieSBhIGRlY29yYXRvclxuICogc2l0ZSB5aWVsZHMgU0VQQVJBVEUgZW50cmllcyDigJQgdGhlIGNsYXNzLWRlY2xhcmF0aW9uIHBvaW50IGtlZXBzIHNjb3BlXG4gKiAnbW9kdWxlJyAoYXR0YWNobWVudCB1bmtub3duKSB3aGlsZSBlYWNoIHJlZ2lzdHJhdGlvbiBzaXRlIGNhcnJpZXMgaXRzXG4gKiBvd24gc2NvcGUuIE9uZSBwb2ludCBzZXJ2aW5nIG11bHRpcGxlIHNjb3BlcyB2aWEgbWVyZ2VkIHNjb3BlIGxpc3RzIHdhc1xuICogcmVqZWN0ZWQ6IGNvbnN1bWVycyAobW5lbW9ncmFwaGljYSBkaWFtb25kcykga2V5IG9mZiBhIHNpbmdsZSBzY29wZSBwZXJcbiAqIHBvaW50LCBhbmQgc2VwYXJhdGUgZW50cmllcyBrZWVwIHRoYXQgY29udHJhY3Qgc2ltcGxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RydW1lbnRhdGlvblBvaW50IHtcblx0LyoqIEtpbmQgb2YgbGlmZWN5Y2xlIGNyb3Nzcm9hZCAqL1xuXHRraW5kOiBJbnN0cnVtZW50YXRpb25LaW5kO1xuXHQvKiogQ2xhc3MgcHJvdmlkaW5nIHRoZSBpbnN0cnVtZW50YXRpb24gKGUuZy4sIFwiQXV0aEd1YXJkXCIpICovXG5cdGNsYXNzTmFtZTogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sIChjbGFzcyBkZWNsYXJhdGlvbiB3aGVuIGRlY2xhcmVkIGluLXByb2plY3QsIGVsc2UgdGhlIHJlZ2lzdHJhdGlvbiBzaXRlKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogQ29kZSBzbmlwcGV0OiBzaWduYXR1cmUgLyBmaXJzdCBsaW5lLCBsaWtlIEVEUyBgY29kZWAgKi9cblx0Y29kZTogc3RyaW5nO1xuXHQvKiogV2hlcmUgdGhlIHBvaW50IGF0dGFjaGVzICovXG5cdHNjb3BlOiBJbnN0cnVtZW50YXRpb25TY29wZTtcblx0LyoqIENvbnRyb2xsZXIvcHJvdmlkZXIgbmFtZXMgdGhlIHBvaW50IGF0dGFjaGVzIHRvOyBlbXB0eSBmb3IgZ2xvYmFsIHBvaW50cyAqL1xuXHR0YXJnZXRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgaW5zdHJ1bWVudGF0aW9uLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0cnVtZW50YXRpb25Kc29uIHtcblx0LyoqIFNjaGVtYSB2ZXJzaW9uOiAyIGFkZHMgdGhlIG9wdGlvbmFsIGNyZWF0aW9uR3JhcGgga2V5IChQaGFzZSAzKSAqL1xuXHR2ZXJzaW9uOiBudW1iZXI7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHBvaW50czogSW5zdHJ1bWVudGF0aW9uUG9pbnRbXTtcblx0LyoqXG5cdCAqIEluc2lkZS1vdXQgY3JlYXRpb24gd2FsayAoaW5zdHJ1bWVudGF0aW9uIHdhbGtlciBwbGFuLCBQaGFzZSAzKTogd2hpY2hcblx0ICogc2NvcGVzIGNyZWF0ZSBtbmVtb25pY2EgaW5zdGFuY2VzIGFuZCB3aG8gY2FsbHMgdGhlbSwgd2Fsa2VkIG91dHdhcmQgdG9cblx0ICogdGhlIHN0YXJ0ZXJzLiBBYnNlbnQgd2hlbiB0aGUgd3JpdGVyIGlzIGNhbGxlZCB3aXRob3V0IGNyZWF0aW9uLWdyYXBoXG5cdCAqIGRhdGEgKGRpcmVjdCBsaWJyYXJ5IHVzZSk7IGFsd2F5cyBwcmVzZW50IGZyb20gdGhlIENMSS5cblx0ICovXG5cdGNyZWF0aW9uR3JhcGg/OiBDcmVhdGlvbkdyYXBoO1xufVxuXG4vKipcbiAqIEZsb3cga2luZCBmb3IgdHJhY2tpbmcgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHBhdHRlcm5zIOKAlCBXSEFUIEZMT1dTIFdIRVJFXG4gKiBpbiBwbGFpbiBzb3VyY2Ugc2hhcGVzLiBFYWNoIGtpbmQgbmFtZXMgb25lIHN5bnRhY3RpYyBwYXR0ZXJuIHRoYXQgbW92ZXNcbiAqIGEgdHlwZWQgdmFsdWUsIHdpdGggdGhlIHNoYXBlIHRoYXQgcHJvZHVjZXMgaXQ6XG4gKlxuICogICAncHJvcGVydHlSZWFkJyAgICAgIHJlYWRpbmcgYSBmaWVsZCBvZmYgdGhlIGluc3RhbmNlIOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGB1c2VyLm5hbWVgIChhbHNvIGB1c2VyPy5uYW1lYCDigJQgb3B0aW9uYWwgY2hhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzIGFzIGEgcGxhaW4gcHJvcGVydHlSZWFkKVxuICogICAncHJvcGVydHlXcml0ZScgICAgIGFzc2lnbmluZyBhIGZpZWxkIOKAlCBgdXNlci5uYW1lID0gJ3gnYFxuICogICAnbWV0aG9kQ2FsbCcgICAgICAgIGNhbGxpbmcgYSBtZXRob2Qgb24gaXQg4oCUIGB1c2VyLnZhbGlkYXRlKClgXG4gKiAgICdlbGVtZW50QWNjZXNzJyAgICAgYnJhY2tldCByZWFkIOKAlCBgdXNlclsnbmFtZSddYFxuICogICAnZGVzdHJ1Y3R1cmVSZWFkJyAgIGRlc3RydWN0dXJpbmcgcHVsbHMgdGhlIGZpZWxkcyBhcGFydCDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgY29uc3QgeyBuYW1lIH0gPSB1c2VyYFxuICogICAncGFzc0FzQXJnJyAgICAgICAgIHRoZSB2YWx1ZSBjcm9zc2VzIGludG8gYSBjYWxsIGFzIGFuIGFyZ3VtZW50IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGBwcm9jZXNzVXNlcih1c2VyKWAgKGNvbnRleHQgbmFtZXMgY2FsbGVlICsgc2xvdClcbiAqICAgJ3JldHVybicgICAgICAgICAgICB0aGUgdmFsdWUgbGVhdmVzIHRoZSBmdW5jdGlvbiBhcyBpdHMgcmVzdWx0IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGByZXR1cm4gdXNlcmBcbiAqICAgJ3NwcmVhZCcgICAgICAgICAgICB0aGUgZmllbGRzIHNjYXR0ZXIgaW50byBhIGxpdGVyYWwg4oCUIGAoeyAuLi51c2VyIH0pYFxuICogICAncmVhc3NpZ25tZW50JyAgICAgIHRoZSBiaW5kaW5nIGlzIHJlLXBvaW50ZWQg4oCUIGB1c2VyID0gb3RoZXJgXG4gKiAgICdpbnN0YW50aWF0aW9uJyAgICAgYSBjb25zdHJ1Y3Rpb24tc2hhcGVkIGNhbGwg4oCUIGBuZXcgVXNlcigpYCAoYWxzb1xuICogICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkIGZvciBjaGFpbiB0aXBzIGFuZCBjYWxsL2FwcGx5L2ZvcmsvbWVyZ2UpXG4gKlxuICogJ2FycmF5RWxlbWVudCcgYW5kICdjb25kaXRpb25hbEFjY2VzcycgYXJlIHJlc2VydmVkIG1lbWJlcnMgb2YgdGhlXG4gKiB1bmlvbiDigJQgZGVjbGFyZWQsIG5vdCB5ZXQgZW1pdHRlZCBieSB0aGUgYW5hbHl6ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEZsb3dLaW5kID1cblx0fCAncHJvcGVydHlSZWFkJ1xuXHR8ICdwcm9wZXJ0eVdyaXRlJ1xuXHR8ICdtZXRob2RDYWxsJ1xuXHR8ICdkZXN0cnVjdHVyZVJlYWQnXG5cdHwgJ3Bhc3NBc0FyZydcblx0fCAncmV0dXJuJ1xuXHR8ICdzcHJlYWQnXG5cdHwgJ2FycmF5RWxlbWVudCdcblx0fCAnY29uZGl0aW9uYWxBY2Nlc3MnXG5cdHwgJ2VsZW1lbnRBY2Nlc3MnXG5cdHwgJ3JlYXNzaWdubWVudCdcblx0fCAnaW5zdGFudGlhdGlvbic7XG5cbi8qKlxuICogRmxvdyBpbmZvIGZvciBuYXRpdmUgaW5zdGFuY2UgdXNhZ2UgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgZmxvdyAqL1xuXHRraW5kOiBGbG93S2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0eSBuYW1lIGlmIGFwcGxpY2FibGUgKi9cblx0cHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYga25vd24gKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqIENvbnRleHQgKGZ1bmN0aW9uIG5hbWUsIHBhcmFtIHBvc2l0aW9uLCBldGMuKSAqL1xuXHRjb250ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBmbG93Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZmxvdzogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT47XG59XG5cbi8qKlxuICogV2hhdCBhIG1vZHVsZS1sZXZlbCBiaW5kaW5nIGlzLiBWYXJpYWJsZXMgYXJlIGNsYXNzaWZpZWQgYXMgJ2NvbnN0J1xuICogcmVnYXJkbGVzcyBvZiBsZXQvdmFyIOKAlCBtdXRhYmlsaXR5IChyZWFzc2lnbm1lbnQgdHJhY2tpbmcpIGlzIHRoZVxuICogbG9jYWwtc2NvcGUgd2Fsa2VyJ3MgY29uY2VybiAoUGhhc2UgMiksIG5vdCB0aGUgbW9kdWxlIGdyYXBoJ3MuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUJpbmRpbmdLaW5kID1cblx0fCAnZnVuY3Rpb24nXG5cdHwgJ2NsYXNzJ1xuXHR8ICdjb25zdCdcblx0fCAndHlwZSdcblx0fCAndW5rbm93bic7XG5cbi8qKlxuICogSG93IGEgYmluZGluZyBlbnRlcnMgYSBtb2R1bGVcbiAqL1xuZXhwb3J0IHR5cGUgTW9kdWxlSW1wb3J0S2luZCA9XG5cdHwgJ25hbWVkJ1xuXHR8ICdkZWZhdWx0J1xuXHR8ICduYW1lc3BhY2UnXG5cdHwgJ3JlcXVpcmUnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBtb2R1bGUtbGV2ZWwgYmluZGluZyAoZXhwb3J0LCBpbXBvcnQsIG9yIHJlLWV4cG9ydCkuXG4gKlxuICogYG5hbWVgIGlzIGFsd2F5cyB0aGUgbmFtZSB0aGlzIG1vZHVsZSBwcmVzZW50czogdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yXG4gKiBpbXBvcnRzLCB0aGUgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cy4gYGltcG9ydEFsaWFzYCBjYXJyaWVzIHRoZSBvcmlnaW5hbFxuICogbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGl0IGRpZmZlcnMgKGBpbXBvcnQgeyBYIGFzIFkgfWAg4oaSIG5hbWUgJ1knLFxuICogaW1wb3J0QWxpYXMgJ1gnOyBgZXhwb3J0IHsgWCBhcyBZIH0gZnJvbSDigKZgIOKGkiBuYW1lICdZJywgaW1wb3J0QWxpYXMgJ1gnKS5cbiAqIEZvciBkZWZhdWx0IGltcG9ydHMgbmFtZSBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQgdGhlIHNvdXJjZSBsb29rdXAga2V5XG4gKiBpcyAnZGVmYXVsdCcgKGltcGxpZWQgYnkgaW1wb3J0S2luZCk7IGZvciBuYW1lc3BhY2UgaW1wb3J0cy9leHBvcnRzIG5hbWUgaXNcbiAqIHRoZSBuYW1lc3BhY2UgYWxpYXMgKCcqJyBmb3IgYmFyZSBgZXhwb3J0ICogZnJvbSDigKZgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVCaW5kaW5nIHtcblx0LyoqIE5hbWUgYXMgcHJlc2VudGVkIGluIHRoaXMgbW9kdWxlIChsb2NhbCBuYW1lIGZvciBpbXBvcnRzLCBleHBvcnRlZCBuYW1lIGZvciBleHBvcnRzKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBXaGF0IHRoZSBiaW5kaW5nIGlzOyBiYWNrZmlsbGVkIGZyb20gdGhlIG9yaWdpbiBtb2R1bGUgd2hlbiByZXNvbHZhYmxlICovXG5cdGtpbmQ6IE1vZHVsZUJpbmRpbmdLaW5kO1xuXHQvKipcblx0ICogUmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoIG9mIHRoZSBzb3VyY2UgbW9kdWxlICh0aGUgbW9kdWxlIGl0c2VsZiBmb3Jcblx0ICogbG9jYWwgZGVjbGFyYXRpb25zOyB0aGUgcmF3IHNwZWNpZmllciB3aGVuIHJlc29sdXRpb24gZmFpbHMpXG5cdCAqL1xuXHRzb3VyY2VNb2R1bGU6IHN0cmluZztcblx0LyoqIEhvdyB0aGUgYmluZGluZyBlbnRlcnMgdGhlIG1vZHVsZSAoYWJzZW50IG9uIHBsYWluIGxvY2FsIGV4cG9ydHMpICovXG5cdGltcG9ydEtpbmQ/OiBNb2R1bGVJbXBvcnRLaW5kO1xuXHQvKiogT3JpZ2luYWwgbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGFsaWFzZWQgKi9cblx0aW1wb3J0QWxpYXM/OiBzdHJpbmc7XG5cdC8qKiBUcnVlIGZvciBgZXhwb3J0IHsgWCB9IGZyb20gJy4veSdgIC8gYGV4cG9ydCAqIGZyb20gJy4veSdgIChiYXJyZWxzKSAqL1xuXHRpc1JlRXhwb3J0OiBib29sZWFuO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZWQgaW50byBub2RlX21vZHVsZXNcblx0ICogKHRzLnJlc29sdmVNb2R1bGVOYW1lJ3MgaXNFeHRlcm5hbExpYnJhcnlJbXBvcnQpLiBFeHRlcm5hbCBiaW5kaW5ncyBhcmVcblx0ICogcmVjb3JkZWQgZm9yIHJlZmVyZW5jZSBidXQgbmV2ZXIgZW50ZXIgYGRlcGVuZGVuY2llc2AgYW5kIGFyZSBuZXZlciB3YWxrZWQuXG5cdCAqIE5vZGUuanMgYnVpbHRpbnMgYXJlIG5vdCByZWNvcmRlZCBhcyBiaW5kaW5ncyBhdCBhbGwg4oCUIHNlZVxuXHQgKiBNb2R1bGVJbmZvLmJ1aWx0aW5TcGVjaWZpZXJzLlxuXHQgKi9cblx0ZXh0ZXJuYWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBlci1tb2R1bGUgcmVjb3JkIG9mIHRoZSBjcm9zcy1maWxlIGdyYXBoIChtb2R1bGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlSW5mbyB7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKG1hcCBrZXkpICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSAqL1xuXHRkZWZpbmVkVHlwZXM6IHN0cmluZ1tdO1xuXHQvKiogRXZlcnl0aGluZyB0aGlzIG1vZHVsZSBleHBvcnRzIChsb2NhbCBkZWNsYXJhdGlvbnMgYW5kIHJlLWV4cG9ydHMpICovXG5cdGV4cG9ydGVkQmluZGluZ3M6IE1vZHVsZUJpbmRpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgaW1wb3J0cyAocmUtZXhwb3J0cyBhcHBlYXIgaGVyZSB0b28sIG1hcmtlZCBpc1JlRXhwb3J0KSAqL1xuXHRpbXBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBBYnNvbHV0ZSBwYXRocyBvZiBhbmFseXplZCBwcm9qZWN0IG1vZHVsZXMgdGhpcyBtb2R1bGUgaW1wb3J0cyBmcm9tICovXG5cdGRlcGVuZGVuY2llczogc3RyaW5nW107XG5cdC8qKiBJbXBvcnQgc3BlY2lmaWVycyB0aGF0IG1vZHVsZSByZXNvbHV0aW9uIGNvdWxkIG5vdCByZXNvbHZlIChub2RlIGJ1aWx0aW5zIGV4Y2x1ZGVkIOKAlCBzZWUgYnVpbHRpblNwZWNpZmllcnMpICovXG5cdHVucmVzb2x2ZWRTcGVjaWZpZXJzOiBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIE5vZGUuanMgYnVpbHRpbiBzcGVjaWZpZXJzIHRoaXMgbW9kdWxlIGltcG9ydHMgKCdwYXRoJywgJ25vZGU6ZnMnLCDigKYpLFxuXHQgKiBtYXRjaGVkIGFnYWluc3Qgbm9kZTptb2R1bGUncyBidWlsdGluTW9kdWxlcyBpbiBib3RoIGJhcmUgYW5kXG5cdCAqIGBub2RlOmAtcHJlZml4ZWQgZm9ybXMuIFJlY29yZGVkIGZvciBob25lc3R5IG9ubHk6IGJ1aWx0aW5zIHByb2R1Y2Ugbm9cblx0ICogYmluZGluZ3MsIG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgL2B1bnJlc29sdmVkU3BlY2lmaWVyc2AsIGFuZCBuZXZlclxuXHQgKiBwcm9kdWNlIGVkZ2VzLlxuXHQgKi9cblx0YnVpbHRpblNwZWNpZmllcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY3Jvc3MtbW9kdWxlIHVzYWdlIG9mIGEgbW5lbW9uaWNhIHR5cGU6IHVzYWdlTW9kdWxlIGltcG9ydHMgYSBiaW5kaW5nXG4gKiB3aG9zZSBvcmlnaW4gbW9kdWxlIGRlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NNb2R1bGVVc2FnZSB7XG5cdC8qKiBNYXRjaGVkIG1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIChvciB0aGUgaW1wb3J0ZWQgbmFtZSB3aGVuIHVubWF0Y2hlZCkgKi9cblx0dHlwZVBhdGg6IHN0cmluZztcblx0LyoqIEFic29sdXRlIHBhdGggb2YgdGhlIG1vZHVsZSB3aGVyZSB0aGUgdHlwZSBpcyBkZWZpbmVkIChyZS1leHBvcnQgY2hhaW5zIGNoYXNlZCB0byB0aGUgb3JpZ2luKSAqL1xuXHRkZWZpbml0aW9uTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBpbXBvcnRpbmcgbW9kdWxlICovXG5cdHVzYWdlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBJbXBvcnQgc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR1c2FnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZ1bGwgbW9kdWxlIGdyYXBoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlR3JhcGgge1xuXHQvKiogS2V5ZWQgYnkgYWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdG1vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZUluZm8+O1xuXHRlZGdlczogQ3Jvc3NNb2R1bGVVc2FnZVtdO1xuXHQvKipcblx0ICogQ2lyY3VsYXIgaW1wb3J0IGNoYWlucyAoZWFjaCBhbiBhcnJheSBvZiBhYnNvbHV0ZSBwYXRocykuIFJlY29yZGVkLCBub3Rcblx0ICogYW4gZXJyb3Ig4oCUIG1uZW1vbmljYSBzdHJpY3RDaGFpbjpmYWxzZSBwZXJtaXRzIG5vbi1saW5lYXIgY29uc3RydWN0aW9uXG5cdCAqL1xuXHRjeWNsZXM6IHN0cmluZ1tdW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIG1vZHVsZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIFdoYXQgYSB0cmFja2VkIHNjb3BlIGlzLiBEZWNpc2lvbiA1IChyZXNvbHZlZCAyMDI2LTA5LTAzKTogZnVuY3Rpb24sXG4gKiBtZXRob2QsIGFuZCBhcnJvdyBzY29wZXMgT05MWSDigJQgbm8gYmxvY2sgc2NvcGVzLiAnbW9kdWxlJyBpcyB0aGUgc3ludGhldGljXG4gKiBwZXItZmlsZSByb290IHNjb3BlIHNvIG1vZHVsZS1sZXZlbCBpbnN0YW5jZSBjcmVhdGlvbnMgYXJlIGxhYmVsZWQsIG5vdFxuICogZHJvcHBlZCAod2Fsa2VyIHBsYW46IFwicmVjb3JkZWQgYXMgYSByb290ZWQgaW5zdGFuY2VcIikuXG4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlS2luZCA9XG5cdHwgJ21vZHVsZSdcblx0fCAnZnVuY3Rpb24nXG5cdHwgJ21ldGhvZCdcblx0fCAnYXJyb3cnO1xuXG4vKipcbiAqIE9uZSB0cmFja2VkIHNjb3BlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZUluZm8ge1xuXHQvKiogVW5pcXVlIGlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlIGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sIG9mIHRoZSBzY29wZSBub2RlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIERlY2lzaW9uIDggbGFiZWxpbmc6IGZ1bmN0aW9uL21ldGhvZCBuYW1lICgnQ2xhc3MubWV0aG9kJyBmb3IgbWV0aG9kcyksIGZpbGU6bGluZSBmb3IgYW5vbnltb3VzIGhvbGRlcnMgKi9cblx0bmFtZTogc3RyaW5nO1xuXHRraW5kOiBTY29wZUtpbmQ7XG5cdC8qKiBOZWFyZXN0IGVuY2xvc2luZyBzY29wZSAodW5kZWZpbmVkIG9uIG1vZHVsZSBzY29wZXMpICovXG5cdHBhcmVudFNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKi9cblx0ZmlsZVBhdGg6IHN0cmluZztcblx0LyoqIFNjb3BlIHN0YXJ0OiBmaWxlLnRzOkxpbmU6Q29sIChtb2R1bGUgc2NvcGU6IGZpbGU6MToxKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSB0cmFja2VkIHZhcmlhYmxlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZVZhcmlhYmxlIHtcblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3duaW5nIHNjb3BlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIHdoZW4ga25vd24gKG5ldyBYKCkgb24gYSBrbm93biB0eXBlLCBuZXcgaW5zdC5TdWIoKSBjaGFpbmluZywgb3IgYSBrbm93biBhbm5vdGF0aW9uKSAqL1xuXHR0eXBlUGF0aD86IHN0cmluZztcblx0LyoqIENoZWFwIHRleHR1YWwgdHlwZTogYW5ub3RhdGlvbiB0ZXh0IG9yIHRpbnkgaW5pdGlhbGl6ZXIgY2xhc3NpZmljYXRpb24gKi9cblx0aW5mZXJyZWRUeXBlPzogc3RyaW5nO1xuXHQvKiogRGVjbGFyYXRpb24gc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRkZWNsYXJhdGlvbjogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcjogYm9vbGVhbjtcblx0LyoqIGNvbnN0ID0gZmFsc2U7IGxldC92YXIgYW5kIHBhcmFtZXRlcnMgPSB0cnVlIChwYXJhbWV0ZXJzIGFyZSByZWFzc2lnbmFibGUpICovXG5cdGlzTXV0YWJsZTogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFJlYXNzaWdubWVudCBzaXRlcyAoZmlsZS50czpMaW5lOkNvbCkgb2YgdGhpcyBiaW5kaW5nIOKAlCBmbG93LXRlcm1pbmF0aW9uXG5cdCAqIHBvaW50cyAoZGVjaXNpb24gNik6IHRoZSBQaGFzZSAzIHdhbGtlciBzdG9wcyBmb2xsb3dpbmcgdGhlIGJpbmRpbmcgdGhlcmVcblx0ICovXG5cdHJlYXNzaWdubWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIGxvY2FsLXNjb3BlIGFuYWx5c2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVBbmFseXNpcyB7XG5cdC8qKiBLZXllZCBieSBzY29wZUlkICovXG5cdHNjb3BlczogTWFwPHN0cmluZywgU2NvcGVJbmZvPjtcblx0LyoqIEtleWVkIGJ5IGAke3Njb3BlSWR9IyR7bmFtZX1gICovXG5cdHZhcmlhYmxlczogTWFwPHN0cmluZywgU2NvcGVWYXJpYWJsZT47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHNjb3Blcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0c2NvcGVzOiBSZWNvcmQ8c3RyaW5nLCBTY29wZUluZm8+O1xuXHR2YXJpYWJsZXM6IFNjb3BlVmFyaWFibGVbXTtcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvZiB0aGUgY3JlYXRpb24gZ3JhcGggKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6XG4gKiBhIHNjb3BlIHRoYXQgY3JlYXRlcyBtbmVtb25pY2EgaW5zdGFuY2VzLCBvciBvbmUgc2l0dGluZyBvbiBhIGNhbGwgcGF0aFxuICogdG8gYSBjcmVhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhOb2RlIHtcblx0LyoqIExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZCAobW9kdWxlIHNjb3BlID0gZmlsZSBwYXRoOyBmdW5jdGlvbiBzY29wZXMgPSBmaWxlOmxpbmU6Y29sKSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogVHJ1ZSB3aGVuIHRoZSB3YWxrIGZvdW5kIG5vIGNhbGxlcnMg4oCUIGFuIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50ICovXG5cdHN0YXJ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT25lIGVkZ2Ugb2YgdGhlIGNyZWF0aW9uIGdyYXBoOiB0aGUgY2FsbGVyIHNjb3BlIGludm9rZXMgb3IgcmVmZXJlbmNlcyB0aGVcbiAqIGNhbGxlZSBzY29wZS4gRGlyZWN0aW9uIGlzIGluc2lkZS1vdXQ6IGNhbGxlciDihpIgY2FsbGVlLCB3aGVyZSB0aGUgY2FsbGVlIGlzXG4gKiBjbG9zZXIgdG8gdGhlIGNyZWF0aW9uIHNpdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaEVkZ2Uge1xuXHQvKiogQ2FsbGluZyBzY29wZSdzIHNjb3BlSWQgKi9cblx0Y2FsbGVyOiBzdHJpbmc7XG5cdC8qKiBDYWxsZWQgKGhvbGRlcikgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGluc3RhbnRpYXRpb24gYW5jaG9yOiBvbmUgbW5lbW9uaWNhIGNyZWF0aW9uIHNpdGUgcGlubmVkIHRvIGl0cyBob2xkZXJcbiAqIHNjb3BlLlxuICpcbiAqIGB2YXJpYWJsZWAvYHRlcm1pbmF0ZWRBdGAgYXJlIGEgZG9jdW1lbnRlZCBoZXVyaXN0aWM6IHRoZSB2YXJpYWJsZSBkZWNsYXJlZFxuICogaW4gdGhlIGhvbGRlciBzY29wZSBvbiB0aGUgU0FNRSBsaW5lIGFzIHRoZSBjcmVhdGlvbiwgd2hvc2UgdHlwZVBhdGggKHdoZW5cbiAqIGtub3duKSBtYXRjaGVzIHRoZSBjcmVhdGVkIHR5cGUuIGB0ZXJtaW5hdGVkQXRgIGlzIHRoYXQgdmFyaWFibGUncyBmaXJzdFxuICogcmVhc3NpZ25tZW50IHNpdGUg4oCUIHRoZSBkZWNpc2lvbiA2IGZsb3ctdGVybWluYXRpb24gcG9pbnQgd2hlcmUgdGhlIHdhbGtlclxuICogc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uQW5jaG9yIHtcblx0LyoqIENyZWF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKHRoZSB1c2FnZXMuanNvbiBsb2NhdGlvbikgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFNjb3BlIGhvbGRpbmcgdGhlIGNyZWF0aW9uIChzY29wZXMuanNvbiBzY29wZUlkKSAqL1xuXHRob2xkZXJTY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCBiZWluZyBjcmVhdGVkICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgKCdUaGluZycsICd1c2VyLkFkbWluRW50aXR5JywgYSBsb29rdXAgYWxpYXMgbmFtZSkgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBob2xkZXIgaXMgdGhlIG1vZHVsZSBzY29wZSDigJQgYSByb290ZWQgaW5zdGFuY2UgKHBsYW46XG5cdCAqIGxlZ2l0aW1hdGUgcm9vdCBvciBkZXZlbG9wZXIgZXJyb3I7IGxhYmVsZWQsIG5vdCBwb2xpY2VkKVxuXHQgKi9cblx0cm9vdGVkPzogYm9vbGVhbjtcblx0LyoqIFZhcmlhYmxlIHRoZSBmcmVzaCBpbnN0YW5jZSB3YXMgYm91bmQgdG8gKHNhbWUtbGluZSBoZXVyaXN0aWMpICovXG5cdHZhcmlhYmxlPzogc3RyaW5nO1xuXHQvKiogRmlyc3QgcmVhc3NpZ25tZW50IHNpdGUgb2YgdGhhdCB2YXJpYWJsZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR0ZXJtaW5hdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNyZWF0aW9uIGdyYXBoOiBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gbW5lbW9uaWNhIGluc3RhbmNlcyBiZWluZ1xuICogY3JlYXRlZC4gRW1pdHRlZCBhcyB0aGUgYGNyZWF0aW9uR3JhcGhgIGtleSBvZiBpbnN0cnVtZW50YXRpb24uanNvbiB2Mi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoIHtcblx0bm9kZXM6IENyZWF0aW9uR3JhcGhOb2RlW107XG5cdGVkZ2VzOiBDcmVhdGlvbkdyYXBoRWRnZVtdO1xuXHRhbmNob3JzOiBDcmVhdGlvbkFuY2hvcltdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBoaWVyYXJjaHkuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeUpzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHJvb3RzOiBIaWVyYXJjaHlOb2RlW107XG59XG5cbi8qKlxuICogT25lIGVudHJ5IG9mIHRoZSBjb2xsZWN0aW9ucy5qc29uIG1hbmlmZXN0LiBUaGUgZGVmYXVsdCBjb2xsZWN0aW9uIGlzXG4gKiBlbWl0dGVkIGZpcnN0IHdoZW5ldmVyIGRlZmF1bHQtY29sbGVjdGlvbiB0eXBlcyBleGlzdDogaXQgaGFzIG5vIGNhbGxcbiAqIHNpdGUsIHNvIGBpZGAgYW5kIGBsb2NhdGlvbmAgc3RheSBudWxsICh1bnByZWZpeGVkIGZ1bGxQYXRocyBBUkUgaXRzXG4gKiBpZGVudGl0eSkgYW5kIGl0cyByZWdpc3RyeSBpbnRlcmZhY2UgaXMgdGhlIGdsb2JhbCBgVHlwZVJlZ2lzdHJ5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uTWFuaWZlc3RFbnRyeSB7XG5cdC8qKiBNaW50ZWQgaWQgdXNlZCBpbiBgY29sbGVjdGlvbklkOjpgIGZ1bGxQYXRoIHByZWZpeGVzOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGlkOiBzdHJpbmcgfCBudWxsO1xuXHQvKiogVmFyaWFibGUgaG9sZGluZyB0aGUgY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgcmVzdWx0ICgnZGVmYXVsdFR5cGVzJyBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3B0aW9uLUIgcmVnaXN0cnkgaW50ZXJmYWNlIG5hbWU7IGFic2VudCB3aGVuIHRoZSBjb2xsZWN0aW9uIGRlY2xhcmVzIG5vbmUgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2U/OiBzdHJpbmc7XG5cdC8qKiBjcmVhdGVUeXBlc0NvbGxlY3Rpb24oKSBjYWxsIHNpdGUgKGZpbGU6bGluZTpjb2wpOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGxvY2F0aW9uOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBjb2xsZWN0aW9ucy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbnNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hbmlmZXN0RW50cnlbXTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIGhpZXJhcmNoeSBub2RlIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIkFkbWluVHlwZVwiKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBGdWxsIGRvdHRlZCBwYXRoIChlLmcuLCBcIlVzZXJUeXBlLkFkbWluVHlwZVwiKSAqL1xuXHRmdWxsUGF0aDogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBDaGlsZCB0eXBlcyBpbiB0aGUgVHJpZSAqL1xuXHRjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdO1xufVxuXG4vKipcbiAqIEEgZmF0YWwgcmVzb2x1dGlvbiBmYWlsdXJlOiBzYW1lLW5hbWVzcGFjZSBkdXBsaWNhdGUgbW5lbW9uaWNhXG4gKiBkZWZpbml0aW9ucywgb3IgYSBtbmVtb25pY2EtZ3JhcGggdHlwZSByZWZlcmVuY2UgdGhhdCBzdGF5cyBhbWJpZ3VvdXNcbiAqIGFmdGVyIHBhdGgtYXdhcmUgcmVzb2x1dGlvbiAob3IgcmVzb2x2ZXMgdG8gbm90aGluZykuIFRoZSBDTEkgcHJpbnRzXG4gKiBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIC50YWN0aWNhIG91dHB1dCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x1dGlvbkVycm9yIHtcblx0LyoqIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBmYWlsdXJlICovXG5cdG1lc3NhZ2U6IHN0cmluZztcblx0LyoqIGV2ZXJ5IGludm9sdmVkIHNvdXJjZSBsb2NhdGlvbiwgYGZpbGU6bGluZTpjb2x1bW5gICovXG5cdGxvY2F0aW9uczogc3RyaW5nW107XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFRhY3RpY2FcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhY3RpY2FDb25maWcge1xuXHQvKiogT3V0cHV0IGRpcmVjdG9yeSBmb3IgZ2VuZXJhdGVkIHR5cGVzIChkZWZhdWx0OiAudGFjdGljYSkgKi9cblx0b3V0cHV0RGlyPzogc3RyaW5nO1xuXHQvKiogRmlsZXMgdG8gaW5jbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0aW5jbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRmlsZXMgdG8gZXhjbHVkZSAoZ2xvYiBwYXR0ZXJucykgKi9cblx0ZXhjbHVkZT86IHN0cmluZ1tdO1xuXHQvKiogRW5hYmxlIHZlcmJvc2UgbG9nZ2luZyAqL1xuXHR2ZXJib3NlPzogYm9vbGVhbjtcblx0LyoqIEdlbmVyYXRlIGdsb2JhbCBhdWdtZW50YXRpb24gaW5zdGVhZCBvZiBtb2R1bGUgYXVnbWVudGF0aW9uIChkZWZhdWx0OiB0cnVlKSAqL1xuXHRnbG9iYWxBdWdtZW50YXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5SW5mbyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbDogYm9vbGVhbjtcblx0LyoqIFRydWUgaWYgdGhpcyBpcyBhIGdldHRlciBwcm9wZXJ0eSAocmVhZG9ubHkpICovXG5cdHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnN0cnVjdG9yIHBhcmFtZXRlciBpbmZvIGZvciBUeXBlUmVnaXN0cnkgc2lnbmF0dXJlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zdHJ1Y3RvclBhcmFtSW5mbyB7XG5cdC8qKiBQYXJhbWV0ZXIgbmFtZSAoZS5nLiwgXCJ1c2FnZXNcIiwgXCJkYXRhXCIsIFwiY29uZmlnXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlIHN0cmluZyAtIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG9yIGV4cGFuZGVkIG9iamVjdCBsaXRlcmFsICovXG5cdHR5cGU6IHN0cmluZztcblx0b3B0aW9uYWw6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBIb3cgdGhlIHBhcmFtZXRlciByZWNlaXZlcyBpdHMgdmFsdWUuIE9ubHkgJ3Jlc3QnIGlzIGVtaXR0ZWQgKFRTXG5cdCAqIGAuLi54c2ApOyBhYnNlbnQgbWVhbnMgYW4gb3JkaW5hcnkgcGFyYW1ldGVyLiBNaXJyb3JzIHRoZSBga2luZGBcblx0ICogdm9jYWJ1bGFyeSBvZiB0aGUgbGV0aGUgZGVmaW5pdGlvbnMgY29udHJhY3QgKGRlZmluaXRpb25zLmpzb24gYXJncykuXG5cdCAqL1xuXHRraW5kPzogJ3Jlc3QnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVOb2RlIHtcblx0LyoqIFR5cGUgbmFtZSAoZS5nLiwgXCJTZWNvbmRUeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIEZ1bGwgcGF0aCAoZS5nLiwgXCJGaXJzdFR5cGUuU2Vjb25kVHlwZVwiKSAqL1xuXHRmdWxsUGF0aDogc3RyaW5nO1xuXHQvKiogUHJvcGVydGllcyBkZWZpbmVkIGluIHRoaXMgdHlwZSdzIGNvbnN0cnVjdG9yICovXG5cdHByb3BlcnRpZXM6IE1hcDxzdHJpbmcsIFByb3BlcnR5SW5mbz47XG5cdC8qKiBDb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIChmb3IgVHlwZVJlZ2lzdHJ5IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSkgKi9cblx0Y29uc3RydWN0b3JQYXJhbXM/OiBDb25zdHJ1Y3RvclBhcmFtSW5mb1tdO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBjb25zdHJ1Y3QgaGFuZGxlciBpcyBhbiBhc3luYyBmdW5jdGlvbi9hcnJvdyAoZGV0ZWN0ZWRcblx0ICogc3ludGFjdGljYWxseSBieSB0aGUgYXN5bmMgbW9kaWZpZXIpLiBFbWl0dGVkIGNvbnN0cnVjdG9yIHNoYXBlcyB0aGVuXG5cdCAqIHJlc29sdmUgdG8gUHJvbWlzZTxJbnN0YW5jZVR5cGU+LiBBc3luYyBDTEFTU0VTIGFyZSBuZXZlciBmbGFnZ2VkIOKAlFxuXHQgKiB0aGV5IGFyZSB0eXBlZCBieSB0aGUgdXNlciBpbiB1c2VybGFuZCAoZG9jdW1lbnRlZCBpbiBBR0VOVFMubWQpLlxuXHQgKi9cblx0aXNBc3luYz86IGJvb2xlYW47XG5cdC8qKiBQYXJlbnQgdHlwZSBub2RlICovXG5cdHBhcmVudD86IFR5cGVOb2RlO1xuXHQvKiogQ2hpbGQgdHlwZXMgKi9cblx0Y2hpbGRyZW46IE1hcDxzdHJpbmcsIFR5cGVOb2RlPjtcblx0LyoqIFNvdXJjZSBmaWxlIHBhdGggKi9cblx0c291cmNlRmlsZTogc3RyaW5nO1xuXHQvKiogTGluZSBudW1iZXIgaW4gc291cmNlICovXG5cdGxpbmU6IG51bWJlcjtcblx0LyoqIENvbHVtbiBudW1iZXIgaW4gc291cmNlICovXG5cdGNvbHVtbjogbnVtYmVyO1xuXHQvKiogQ29uc3RydWN0b3IgZnVuY3Rpb24gbmFtZSBvciBjbGFzcyBuYW1lICovXG5cdGNvbnN0cnVjdG9yTmFtZT86IHN0cmluZztcblx0LyoqIENvbGxlY3Rpb24gaWRlbnRpZmllciBpZiB0aGUgdHlwZSBiZWxvbmdzIHRvIGEgY3VzdG9tIGNvbGxlY3Rpb24gKHVuZGVmaW5lZCA9IGRlZmF1bHQvZ2xvYmFsIHJlZ2lzdHJ5KSAqL1xuXHRjb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG5cdC8qKiBSZWdpc3RyeSBpbnRlcmZhY2UgbmFtZSBmb3IgY3VzdG9tIGNvbGxlY3Rpb25zIHVzaW5nIE9wdGlvbiBCICh1c2VyLXByb3ZpZGVkIHJlZ2lzdHJ5IGludGVyZmFjZSkgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2VOYW1lPzogc3RyaW5nO1xuXHQvKipcblx0ICogU291cmNlIGZpbGUgb2YgdGhlIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbigpIGNhbGwg4oCUIHRoZSBtb2R1bGUgdGhlXG5cdCAqIE9wdGlvbiBCIHJlZ2lzdHJ5IGF1Z21lbnRhdGlvbiBtdXN0IHRhcmdldCAodGhlIGludGVyZmFjZSBpc1xuXHQgKiBjb25maXJtZWQgZGVjbGFyZWQgdGhlcmUpXG5cdCAqL1xuXHRjb2xsZWN0aW9uU291cmNlRmlsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3JhcGgge1xuXHQvKiogUm9vdCB0eXBlcywga2V5ZWQgYnkgZnVsbCBwYXRoIChjdXN0b20tY29sbGVjdGlvbiByb290cyBjYXJyeSB0aGUgYGNvbGxlY3Rpb25JZDo6YCBwcmVmaXgpICovXG5cdHJvb3RzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBbGwgdHlwZXMgYnkgZnVsbCBwYXRoICovXG5cdGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlTm9kZT47XG5cdC8qKiBBZGQgYSByb290IHR5cGUgKi9cblx0YWRkUm9vdChub2RlOiBUeXBlTm9kZSk6IHZvaWQ7XG5cdC8qKiBGaW5kIGEgdHlwZSBieSBmdWxsIHBhdGggKi9cblx0ZmluZFR5cGUoZnVsbFBhdGg6IHN0cmluZyk6IFR5cGVOb2RlIHwgdW5kZWZpbmVkO1xuXHQvKiogR2V0IGFsbCB0eXBlcyBhcyBhcnJheSAqL1xuXHRnZXRBbGxUeXBlcygpOiBUeXBlTm9kZVtdO1xuXHQvKiogQ2xlYXIgdGhlIGdyYXBoICovXG5cdGNsZWFyKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZVJlc3VsdCB7XG5cdC8qKiBUeXBlcyBmb3VuZCBpbiB0aGUgYW5hbHlzaXMgKi9cblx0dHlwZXM6IFR5cGVOb2RlW107XG5cdC8qKiBFcnJvcnMgZW5jb3VudGVyZWQgKi9cblx0ZXJyb3JzOiBBbmFseXplRXJyb3JbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXplRXJyb3Ige1xuXHRtZXNzYWdlOiBzdHJpbmc7XG5cdGZpbGU6IHN0cmluZztcblx0bGluZTogbnVtYmVyO1xuXHRjb2x1bW46IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRUeXBlcyB7XG5cdC8qKiBDb250ZW50IG9mIHRoZSAuZC50cyBmaWxlICovXG5cdGNvbnRlbnQ6IHN0cmluZztcblx0LyoqIFR5cGVzIHRoYXQgd2VyZSBnZW5lcmF0ZWQgKi9cblx0dHlwZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBvd24gZmllbGQgb2YgYSB0eXBlLCBpbiBkZWNsYXJhdGlvbiBvcmRlciAoZGVmaW5pdGlvbnMuanNvbiBgZmllbGRzYCxcbiAqIGxldGhlIGNvbnRyYWN0KS4gYHR5cGVgIGlzIHNvdXJjZS1sYW5ndWFnZSB0ZXh0IGZvciBkaXNwbGF5IG9ubHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkZpZWxkIHtcblx0bmFtZTogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdG9wdGlvbmFsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9uZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIsIGluIGRlY2xhcmF0aW9uIG9yZGVyIChkZWZpbml0aW9ucy5qc29uIGBhcmdzYCxcbiAqIGxldGhlIGNvbnRyYWN0KS4gVGhlIHJlY2VpdmVyIChgdGhpc2ApIGlzIG5ldmVyIGxpc3RlZC4gYG9wdGlvbmFsYCBhYnNlbnRcbiAqIG1lYW5zIGZhbHNlOyBhIHJlc3QgcGFyYW1ldGVyIGNhcnJpZXMgYGtpbmQ6ICdyZXN0J2AgYW5kIG5vIGBvcHRpb25hbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVmaW5pdGlvbkFyZyB7XG5cdG5hbWU6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRvcHRpb25hbD86IGJvb2xlYW47XG5cdGtpbmQ/OiAncmVzdCc7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uSW5mbyB7XG5cdC8qKiBUeXBlIG5hbWUgKGUuZy4sIFwiQWRtaW5UeXBlXCIpICovXG5cdG5hbWU6IHN0cmluZztcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogSG93IHR5cGUgd2FzIGNyZWF0ZWQ6ICdkZWZpbmUnIG9yICdkZWNvcmF0ZScgKi9cblx0a2luZDogJ2RlZmluZScgfCAnZGVjb3JhdGUnO1xuXHQvKiogUGFyZW50IHR5cGUgZnVsbCBwYXRoLCBudWxsIGlmIHJvb3QgKi9cblx0cGFyZW50OiBzdHJpbmcgfCBudWxsO1xuXHQvKiogc3RyaWN0Q2hhaW4gY29uZmlnIG9wdGlvbiAqL1xuXHRzdHJpY3RDaGFpbjogYm9vbGVhbjtcblx0LyoqIGJsb2NrRXJyb3JzIGNvbmZpZyBvcHRpb24gKi9cblx0YmxvY2tFcnJvcnM6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSdzIG93biBmaWVsZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIgKGRlZmluaXRpb25zLmpzb24gY29udHJhY3QsXG5cdCAqIGxldGhlIGBmaWVsZGApLiBBYnNlbnQgbWVhbnMgbm90IHJlY29yZGVkOyBhbiBlbXB0eSBhcnJheSBtZWFucyB0aGVcblx0ICogdHlwZSBoYXMgbm8gZmllbGRzLlxuXHQgKi9cblx0ZmllbGRzPzogRGVmaW5pdGlvbkZpZWxkW107XG5cdC8qKlxuXHQgKiBUaGUgY29uc3RydWN0b3IncyBwYXJhbWV0ZXJzIGluIGRlY2xhcmF0aW9uIG9yZGVyIChkZWZpbml0aW9ucy5qc29uXG5cdCAqIGNvbnRyYWN0LCBsZXRoZSBgYXJnYCkuIEFic2VudCBtZWFucyBub3QgcmVjb3JkZWQ7IGFuIGVtcHR5IGFycmF5XG5cdCAqIG1lYW5zIHRoZSBjb25zdHJ1Y3RvciB0YWtlcyBub25lLlxuXHQgKi9cblx0YXJncz86IERlZmluaXRpb25BcmdbXTtcbn1cblxuLyoqXG4gKiBVc2FnZSBpbmZvIGZvciBjb2RlIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2FnZUluZm8ge1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBLaW5kIG9mIHVzYWdlOiBpbnN0YW50aWF0aW9uLCB0eXBlQW5ub3RhdGlvbiwgcHJvcGVydHlBY2Nlc3MsIGxvb2t1cCwgcmVmZXJlbmNlICovXG5cdGtpbmQ6ICdpbnN0YW50aWF0aW9uJyB8ICd0eXBlQW5ub3RhdGlvbicgfCAncHJvcGVydHlBY2Nlc3MnIHwgJ2xvb2t1cCcgfCAncmVmZXJlbmNlJztcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTY29wZSBob2xkaW5nIHRoaXMgdXNhZ2UgKExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZDogbW9kdWxlIHNjb3BlIGlzIHRoZVxuXHQgKiBmaWxlIHBhdGgsIGZ1bmN0aW9uIHNjb3BlcyBhcmUgZmlsZTpsaW5lOmNvbCkuIEFkZGl0aXZlOyBhYnNlbnQgd2hlbiB0aGVcblx0ICogdXNhZ2Ugc2l0cyBvdXRzaWRlIHRyYWNrZWQgZmlsZXMuXG5cdCAqL1xuXHRob2xkZXJTY29wZUlkPzogc3RyaW5nO1xuXHQvKipcblx0ICogQ29uc3RydWN0b3IgZXhwcmVzc2lvbiB0ZXh0IGF0IGFuIGluc3RhbnRpYXRpb24gc2l0ZSAoJ1RoaW5nJyxcblx0ICogJ3VzZXIuQWRtaW5FbnRpdHknLCAnVDInIGZvciBhIGxvb2t1cCBhbGlhcykuIEFkZGl0aXZlOyBzZXQgb25seSBvblxuXHQgKiBraW5kICdpbnN0YW50aWF0aW9uJy4gRmVlZHMgQ3JlYXRpb25BbmNob3IuY29uc3RydWN0b3JUZXh0IChQaGFzZSAzKS5cblx0ICovXG5cdGNvbnN0cnVjdG9yVGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgZGVmaW5pdGlvbnMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluaXRpb25zSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIERlZmluaXRpb25JbmZvPjtcbn1cblxuLyoqXG4gKiBKU09OIG91dHB1dCBmb3IgdXNhZ2VzLmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2FnZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHR1c2FnZXM6IFJlY29yZDxzdHJpbmcsIFVzYWdlSW5mb1tdPjtcbn1cblxuLyoqXG4gKiBFRFMgKEV4ZWN1dGlvbiBEYXRhIFN0b3JhZ2UpIGtpbmQgZm9yIHRyYWNraW5nIGV4ZWN1dGlvbiBmbG93IHBhdHRlcm5zXG4gKi9cbmV4cG9ydCB0eXBlIEVEU0tpbmQgPVxuXHR8ICd3cmFwJ1xuXHR8ICdjb250ZXh0Q29uc3VtZSdcblx0fCAnaG9va0F0dGFjaCc7XG5cbi8qKlxuICogRURTIGluZm8gZm9yIGV4ZWN1dGlvbiBkYXRhIGZsb3cgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFRFNJbmZvIHtcblx0LyoqIExvY2F0aW9uIGluIHNvdXJjZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogS2luZCBvZiBFRFMgdXNhZ2UgKi9cblx0a2luZDogRURTS2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBSZXNvbHZlZCB0YXJnZXQgdHlwZSBpZiBkZXRlY3RhYmxlICovXG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBFbmNsb3NpbmcgbW5lbW9uaWNhIHR5cGUgcGF0aCAoZGVmaW5lL2xhenkgaGFuZGxlciBvciBkZWNvcmF0ZWQgY2xhc3MpO1xuXHQgKiBmb3Igd3JhcCBzaXRlcyBvdXRzaWRlIGFueSBoYW5kbGVyLCBhdHRyaWJ1dGVkIHRocm91Z2ggdGhlIGluc3RhbmNlL2NvbnRleHRcblx0ICogYXJndW1lbnQgKHRyYWNrZWQgYXNzaWdubWVudCBvciBwYXJhbWV0ZXIgYW5ub3RhdGlvbiksIHRoZW4gaW5oZXJpdGVkIGRvd25cblx0ICogdGhlIHdyYXAgZ2VuZXJhdGlvbiBjaGFpbiAoYHZpYWApXG5cdCAqL1xuXHRzY29wZT86IHN0cmluZztcblx0LyoqIExvY2F0aW9uIG9mIHRoZSBlbmNsb3Npbmcgd3JhcCBzaXRlIHdob3NlIHJ1bnRpbWUgd3JhcHBpbmcgY2F1c2VkIHRoaXMgZW50cnkgKi9cblx0dmlhPzogc3RyaW5nO1xuXHQvKiogTW5lbW9uaWNhIHR5cGUgZnVsbFBhdGhzIGluc3RhbnRpYXRlZCBpbnNpZGUgdGhlIHdyYXBwZWQgYm9keSDigJQgZ3VhcmFudGVlZCBwYXRoIGhpdHMgKi9cblx0Y3JlYXRlc1R5cGVzPzogc3RyaW5nW107XG5cdC8qKiBMYWJlbCBzdHJpbmcgbGl0ZXJhbCBwYXNzZWQgdG8gd3JhcChmbiwg4oCmLCAnbGFiZWwnKSB3aGVuIHN0YXRpY2FsbHkgdmlzaWJsZSAqL1xuXHRsYWJlbD86IHN0cmluZztcblx0LyoqIHNjb3BlSWQgKHNjb3Blcy5qc29uKSBvZiB0aGUgd3JhcHBlZCBjYWxsYmFjaydzIG93biBzY29wZSDigJQgam9pbnMgdG8gdGhlIGNyZWF0aW9uIGdyYXBoICovXG5cdGNhbGxiYWNrU2NvcGVJZD86IHN0cmluZztcblx0LyoqIElkZW50aWZpZXIgcGFzc2VkIGFzIHRoZSBpbnN0YW5jZS9jb250ZXh0IGFyZ3VtZW50ICgndXNlcicpLCB3aGVuIGl0IGlzIG9uZSAqL1xuXHRpbnN0YW5jZUFyZz86IHN0cmluZztcblx0LyoqIHNjb3BlSWQgb2YgdGhlIHNjb3BlIGhvbGRpbmcgdGhlIHdyYXAgY2FsbCBzaXRlIOKAlCBqb2lucyB0byB0aGUgY3JlYXRpb24gZ3JhcGggKi9cblx0c2NvcGVJZD86IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSBmdWxsUGF0aCBvZiB0aGUgaW5zdGFuY2UgYXJndW1lbnQsIHJlc29sdmVkIHRocm91Z2ggc2NvcGUgdmFyaWFibGVzICovXG5cdHdyYXBzVHlwZVBhdGg/OiBzdHJpbmc7XG5cdC8qKiBXcmFwLWZhbWlseSBmdW5jdGlvbiBuYW1lICgnd3JhcCcgfCAnd3JhcENvbnN0cnVjdG9yQXJnJyB8IOKApikg4oCUIGpvaW5zIHRoZVxuXHQgKiAgY2FsbCBzaXRlIHRvIGRpdmUncyBlbmdpbmUga25vdCBpbiBncmFwaCBjb25zdW1lcnMgKi9cblx0Zm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGVkcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRURTSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZWRzOiBSZWNvcmQ8c3RyaW5nLCBFRFNJbmZvW10+O1xufVxuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBraW5kIGZvciBmcmFtZXdvcmsgbGlmZWN5Y2xlIGNyb3Nzcm9hZHNcbiAqL1xuZXhwb3J0IHR5cGUgSW5zdHJ1bWVudGF0aW9uS2luZCA9XG5cdHwgJ2ludGVyY2VwdG9yJ1xuXHR8ICdndWFyZCdcblx0fCAncGlwZSdcblx0fCAnZmlsdGVyJ1xuXHR8ICdtaWRkbGV3YXJlJztcblxuLyoqXG4gKiBJbnN0cnVtZW50YXRpb24gc2NvcGU6IHdoZXJlIHRoZSBwb2ludCBhdHRhY2hlcy5cbiAqICdnbG9iYWwnIGZvciBwcm92aWRlci10b2tlbiByZWdpc3RyYXRpb25zLCAnbW9kdWxlJyBmb3IgbWlkZGxld2FyZSB3aXJlZFxuICogdmlhIGNvbnN1bWVyLmFwcGx5KCkgQU5EIGZvciBiYXJlIGhlcml0YWdlIGRlY2xhcmF0aW9ucyB3aG9zZSBhdHRhY2htZW50XG4gKiBpcyBzdGF0aWNhbGx5IHVua25vd24sIGBjb250cm9sbGVyOk5hbWVgIC8gYG1ldGhvZDpDbGFzcy5tZXRob2RgIGZvclxuICogZGVjb3JhdG9yLXNjb3BlZCBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdHJ1bWVudGF0aW9uU2NvcGUgPVxuXHR8ICdnbG9iYWwnXG5cdHwgJ21vZHVsZSdcblx0fCBgY29udHJvbGxlcjoke3N0cmluZ31gXG5cdHwgYG1ldGhvZDoke3N0cmluZ31gO1xuXG4vKipcbiAqIEluc3RydW1lbnRhdGlvbiBwb2ludDogYSBmcmFtZXdvcmsgbGlmZWN5Y2xlIGNyb3Nzcm9hZCAoaW50ZXJjZXB0b3IsXG4gKiBndWFyZCwgcGlwZSwgZmlsdGVyLCBtaWRkbGV3YXJlKSBkZXRlY3RlZCBzeW50YWN0aWNhbGx5LiBUaGUgdm9jYWJ1bGFyeVxuICogdGhhdCB0dXJucyBhIHN5bnRhY3RpYyBzaGFwZSBpbnRvIGEgcG9pbnQgY29tZXMgZnJvbSBwbHVnaW5zIOKAlCB3aXRoIG5vXG4gKiBwbHVnaW4gbG9hZGVkLCBubyBwb2ludHMgYXJlIGNvbGxlY3RlZC5cbiAqXG4gKiBEZWR1cGUvc2NvcGUgZGVjaXNpb246IHBvaW50cyBhcmUga2V5ZWQgYnkgKGtpbmQsIGNsYXNzTmFtZSwgbG9jYXRpb24sXG4gKiBzY29wZSkgYW5kIGR1cGxpY2F0ZXMgbWVyZ2UgdGhlaXIgYHRhcmdldHNgLiBBIGNsYXNzIGRldGVjdGVkIGJvdGggYnlcbiAqIGhlcml0YWdlIChhIHBsdWdpbi1saXN0ZWQgYGltcGxlbWVudHNgIGludGVyZmFjZSkgYW5kIGJ5IGEgZGVjb3JhdG9yXG4gKiBzaXRlIHlpZWxkcyBTRVBBUkFURSBlbnRyaWVzIOKAlCB0aGUgY2xhc3MtZGVjbGFyYXRpb24gcG9pbnQga2VlcHMgc2NvcGVcbiAqICdtb2R1bGUnIChhdHRhY2htZW50IHVua25vd24pIHdoaWxlIGVhY2ggcmVnaXN0cmF0aW9uIHNpdGUgY2FycmllcyBpdHNcbiAqIG93biBzY29wZS4gT25lIHBvaW50IHNlcnZpbmcgbXVsdGlwbGUgc2NvcGVzIHZpYSBtZXJnZWQgc2NvcGUgbGlzdHMgd2FzXG4gKiByZWplY3RlZDogY29uc3VtZXJzIChtbmVtb2dyYXBoaWNhIGRpYW1vbmRzKSBrZXkgb2ZmIGEgc2luZ2xlIHNjb3BlIHBlclxuICogcG9pbnQsIGFuZCBzZXBhcmF0ZSBlbnRyaWVzIGtlZXAgdGhhdCBjb250cmFjdCBzaW1wbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdHJ1bWVudGF0aW9uUG9pbnQge1xuXHQvKiogS2luZCBvZiBsaWZlY3ljbGUgY3Jvc3Nyb2FkICovXG5cdGtpbmQ6IEluc3RydW1lbnRhdGlvbktpbmQ7XG5cdC8qKiBDbGFzcyBwcm92aWRpbmcgdGhlIGluc3RydW1lbnRhdGlvbiAoZS5nLiwgXCJBdXRoR3VhcmRcIikgKi9cblx0Y2xhc3NOYW1lOiBzdHJpbmc7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKGNsYXNzIGRlY2xhcmF0aW9uIHdoZW4gZGVjbGFyZWQgaW4tcHJvamVjdCwgZWxzZSB0aGUgcmVnaXN0cmF0aW9uIHNpdGUpICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBDb2RlIHNuaXBwZXQ6IHNpZ25hdHVyZSAvIGZpcnN0IGxpbmUsIGxpa2UgRURTIGBjb2RlYCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBXaGVyZSB0aGUgcG9pbnQgYXR0YWNoZXMgKi9cblx0c2NvcGU6IEluc3RydW1lbnRhdGlvblNjb3BlO1xuXHQvKiogQ29udHJvbGxlci9wcm92aWRlciBuYW1lcyB0aGUgcG9pbnQgYXR0YWNoZXMgdG87IGVtcHR5IGZvciBnbG9iYWwgcG9pbnRzICovXG5cdHRhcmdldHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBpbnN0cnVtZW50YXRpb24uanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RydW1lbnRhdGlvbkpzb24ge1xuXHQvKiogU2NoZW1hIHZlcnNpb246IDIgYWRkcyB0aGUgb3B0aW9uYWwgY3JlYXRpb25HcmFwaCBrZXkgKFBoYXNlIDMpICovXG5cdHZlcnNpb246IG51bWJlcjtcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0cG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdO1xuXHQvKipcblx0ICogSW5zaWRlLW91dCBjcmVhdGlvbiB3YWxrIChpbnN0cnVtZW50YXRpb24gd2Fsa2VyIHBsYW4sIFBoYXNlIDMpOiB3aGljaFxuXHQgKiBzY29wZXMgY3JlYXRlIG1uZW1vbmljYSBpbnN0YW5jZXMgYW5kIHdobyBjYWxscyB0aGVtLCB3YWxrZWQgb3V0d2FyZCB0b1xuXHQgKiB0aGUgc3RhcnRlcnMuIEFic2VudCB3aGVuIHRoZSB3cml0ZXIgaXMgY2FsbGVkIHdpdGhvdXQgY3JlYXRpb24tZ3JhcGhcblx0ICogZGF0YSAoZGlyZWN0IGxpYnJhcnkgdXNlKTsgYWx3YXlzIHByZXNlbnQgZnJvbSB0aGUgQ0xJLlxuXHQgKi9cblx0Y3JlYXRpb25HcmFwaD86IENyZWF0aW9uR3JhcGg7XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIGNvbnRyb2wuanNvbiAobGV0aGUgY29udHJhY3QsIGZvcm1hdCAxLjEpOiBgY2FsbGVyc2BcbiAqIGNhcnJpZXMgdGhlIHNhbWUgY3JlYXRpb24gZ3JhcGggaW5zdHJ1bWVudGF0aW9uLmpzb24gdjIgY2FycmllcyB1bmRlclxuICogYGNyZWF0aW9uR3JhcGhgLCBgcG9pbnRzYCB0aGUgc2FtZSBwbHVnaW4tc3VwcGxpZWQgaW5zdHJ1bWVudGF0aW9uIHBvaW50cy5cbiAqIGluc3RydW1lbnRhdGlvbi5qc29uIHN0YXlzIHVuY2hhbmdlZCBmb3IgbW5lbW9ncmFwaGljYTsgY29udHJvbC5qc29uIGlzXG4gKiB0aGUgY3Jvc3MtbGFuZ3VhZ2UgY29udHJhY3QgcmVuZGVyaW5nIG9mIHRoZSBzYW1lIGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbEpzb24ge1xuXHR2ZXJzaW9uOiAnMS4xJztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0Y2FsbGVyczogQ3JlYXRpb25HcmFwaDtcblx0cG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdO1xufVxuXG4vKipcbiAqIEZsb3cga2luZCBmb3IgdHJhY2tpbmcgbmF0aXZlIGluc3RhbmNlIHVzYWdlIHBhdHRlcm5zIOKAlCBXSEFUIEZMT1dTIFdIRVJFXG4gKiBpbiBwbGFpbiBzb3VyY2Ugc2hhcGVzLiBFYWNoIGtpbmQgbmFtZXMgb25lIHN5bnRhY3RpYyBwYXR0ZXJuIHRoYXQgbW92ZXNcbiAqIGEgdHlwZWQgdmFsdWUsIHdpdGggdGhlIHNoYXBlIHRoYXQgcHJvZHVjZXMgaXQ6XG4gKlxuICogICAncHJvcGVydHlSZWFkJyAgICAgIHJlYWRpbmcgYSBmaWVsZCBvZmYgdGhlIGluc3RhbmNlIOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGB1c2VyLm5hbWVgIChhbHNvIGB1c2VyPy5uYW1lYCDigJQgb3B0aW9uYWwgY2hhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzIGFzIGEgcGxhaW4gcHJvcGVydHlSZWFkKVxuICogICAncHJvcGVydHlXcml0ZScgICAgIGFzc2lnbmluZyBhIGZpZWxkIOKAlCBgdXNlci5uYW1lID0gJ3gnYFxuICogICAnbWV0aG9kQ2FsbCcgICAgICAgIGNhbGxpbmcgYSBtZXRob2Qgb24gaXQg4oCUIGB1c2VyLnZhbGlkYXRlKClgXG4gKiAgICdlbGVtZW50QWNjZXNzJyAgICAgYnJhY2tldCByZWFkIOKAlCBgdXNlclsnbmFtZSddYFxuICogICAnZGVzdHJ1Y3R1cmVSZWFkJyAgIGRlc3RydWN0dXJpbmcgcHVsbHMgdGhlIGZpZWxkcyBhcGFydCDigJRcbiAqICAgICAgICAgICAgICAgICAgICAgICBgY29uc3QgeyBuYW1lIH0gPSB1c2VyYFxuICogICAncGFzc0FzQXJnJyAgICAgICAgIHRoZSB2YWx1ZSBjcm9zc2VzIGludG8gYSBjYWxsIGFzIGFuIGFyZ3VtZW50IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGBwcm9jZXNzVXNlcih1c2VyKWAgKGNvbnRleHQgbmFtZXMgY2FsbGVlICsgc2xvdClcbiAqICAgJ3JldHVybicgICAgICAgICAgICB0aGUgdmFsdWUgbGVhdmVzIHRoZSBmdW5jdGlvbiBhcyBpdHMgcmVzdWx0IOKAlFxuICogICAgICAgICAgICAgICAgICAgICAgIGByZXR1cm4gdXNlcmBcbiAqICAgJ3NwcmVhZCcgICAgICAgICAgICB0aGUgZmllbGRzIHNjYXR0ZXIgaW50byBhIGxpdGVyYWwg4oCUIGAoeyAuLi51c2VyIH0pYFxuICogICAncmVhc3NpZ25tZW50JyAgICAgIHRoZSBiaW5kaW5nIGlzIHJlLXBvaW50ZWQg4oCUIGB1c2VyID0gb3RoZXJgXG4gKiAgICdpbnN0YW50aWF0aW9uJyAgICAgYSBjb25zdHJ1Y3Rpb24tc2hhcGVkIGNhbGwg4oCUIGBuZXcgVXNlcigpYCAoYWxzb1xuICogICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkIGZvciBjaGFpbiB0aXBzIGFuZCBjYWxsL2FwcGx5L2ZvcmsvbWVyZ2UpXG4gKlxuICogJ2FycmF5RWxlbWVudCcgYW5kICdjb25kaXRpb25hbEFjY2VzcycgYXJlIHJlc2VydmVkIG1lbWJlcnMgb2YgdGhlXG4gKiB1bmlvbiDigJQgZGVjbGFyZWQsIG5vdCB5ZXQgZW1pdHRlZCBieSB0aGUgYW5hbHl6ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEZsb3dLaW5kID1cblx0fCAncHJvcGVydHlSZWFkJ1xuXHR8ICdwcm9wZXJ0eVdyaXRlJ1xuXHR8ICdtZXRob2RDYWxsJ1xuXHR8ICdkZXN0cnVjdHVyZVJlYWQnXG5cdHwgJ3Bhc3NBc0FyZydcblx0fCAncmV0dXJuJ1xuXHR8ICdzcHJlYWQnXG5cdHwgJ2FycmF5RWxlbWVudCdcblx0fCAnY29uZGl0aW9uYWxBY2Nlc3MnXG5cdHwgJ2VsZW1lbnRBY2Nlc3MnXG5cdHwgJ3JlYXNzaWdubWVudCdcblx0fCAnaW5zdGFudGlhdGlvbic7XG5cbi8qKlxuICogRmxvdyBpbmZvIGZvciBuYXRpdmUgaW5zdGFuY2UgdXNhZ2UgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SW5mbyB7XG5cdC8qKiBMb2NhdGlvbiBpbiBzb3VyY2U6IGZpbGUudHM6TGluZTpDb2wgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIEtpbmQgb2YgZmxvdyAqL1xuXHRraW5kOiBGbG93S2luZDtcblx0LyoqIENvZGUgc25pcHBldCAqL1xuXHRjb2RlOiBzdHJpbmc7XG5cdC8qKiBQcm9wZXJ0eSBuYW1lIGlmIGFwcGxpY2FibGUgKi9cblx0cHJvcGVydHlOYW1lPzogc3RyaW5nO1xuXHQvKiogUmVzb2x2ZWQgdGFyZ2V0IHR5cGUgaWYga25vd24gKi9cblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0LyoqIENvbnRleHQgKGZ1bmN0aW9uIG5hbWUsIHBhcmFtIHBvc2l0aW9uLCBldGMuKSAqL1xuXHRjb250ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBmbG93Lmpzb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93SnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0ZmxvdzogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT47XG59XG5cbi8qKlxuICogV2hhdCBhIG1vZHVsZS1sZXZlbCBiaW5kaW5nIGlzLiBWYXJpYWJsZXMgYXJlIGNsYXNzaWZpZWQgYXMgJ2NvbnN0J1xuICogcmVnYXJkbGVzcyBvZiBsZXQvdmFyIOKAlCBtdXRhYmlsaXR5IChyZWFzc2lnbm1lbnQgdHJhY2tpbmcpIGlzIHRoZVxuICogbG9jYWwtc2NvcGUgd2Fsa2VyJ3MgY29uY2VybiAoUGhhc2UgMiksIG5vdCB0aGUgbW9kdWxlIGdyYXBoJ3MuXG4gKi9cbmV4cG9ydCB0eXBlIE1vZHVsZUJpbmRpbmdLaW5kID1cblx0fCAnZnVuY3Rpb24nXG5cdHwgJ2NsYXNzJ1xuXHR8ICdjb25zdCdcblx0fCAndHlwZSdcblx0fCAndW5rbm93bic7XG5cbi8qKlxuICogSG93IGEgYmluZGluZyBlbnRlcnMgYSBtb2R1bGVcbiAqL1xuZXhwb3J0IHR5cGUgTW9kdWxlSW1wb3J0S2luZCA9XG5cdHwgJ25hbWVkJ1xuXHR8ICdkZWZhdWx0J1xuXHR8ICduYW1lc3BhY2UnXG5cdHwgJ3JlcXVpcmUnO1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBtb2R1bGUtbGV2ZWwgYmluZGluZyAoZXhwb3J0LCBpbXBvcnQsIG9yIHJlLWV4cG9ydCkuXG4gKlxuICogYG5hbWVgIGlzIGFsd2F5cyB0aGUgbmFtZSB0aGlzIG1vZHVsZSBwcmVzZW50czogdGhlIGxvY2FsIGlkZW50aWZpZXIgZm9yXG4gKiBpbXBvcnRzLCB0aGUgZXhwb3J0ZWQgbmFtZSBmb3IgZXhwb3J0cy4gYGltcG9ydEFsaWFzYCBjYXJyaWVzIHRoZSBvcmlnaW5hbFxuICogbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGl0IGRpZmZlcnMgKGBpbXBvcnQgeyBYIGFzIFkgfWAg4oaSIG5hbWUgJ1knLFxuICogaW1wb3J0QWxpYXMgJ1gnOyBgZXhwb3J0IHsgWCBhcyBZIH0gZnJvbSDigKZgIOKGkiBuYW1lICdZJywgaW1wb3J0QWxpYXMgJ1gnKS5cbiAqIEZvciBkZWZhdWx0IGltcG9ydHMgbmFtZSBpcyB0aGUgbG9jYWwgaWRlbnRpZmllciBhbmQgdGhlIHNvdXJjZSBsb29rdXAga2V5XG4gKiBpcyAnZGVmYXVsdCcgKGltcGxpZWQgYnkgaW1wb3J0S2luZCk7IGZvciBuYW1lc3BhY2UgaW1wb3J0cy9leHBvcnRzIG5hbWUgaXNcbiAqIHRoZSBuYW1lc3BhY2UgYWxpYXMgKCcqJyBmb3IgYmFyZSBgZXhwb3J0ICogZnJvbSDigKZgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVCaW5kaW5nIHtcblx0LyoqIE5hbWUgYXMgcHJlc2VudGVkIGluIHRoaXMgbW9kdWxlIChsb2NhbCBuYW1lIGZvciBpbXBvcnRzLCBleHBvcnRlZCBuYW1lIGZvciBleHBvcnRzKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBXaGF0IHRoZSBiaW5kaW5nIGlzOyBiYWNrZmlsbGVkIGZyb20gdGhlIG9yaWdpbiBtb2R1bGUgd2hlbiByZXNvbHZhYmxlICovXG5cdGtpbmQ6IE1vZHVsZUJpbmRpbmdLaW5kO1xuXHQvKipcblx0ICogUmVzb2x2ZWQgYWJzb2x1dGUgZmlsZSBwYXRoIG9mIHRoZSBzb3VyY2UgbW9kdWxlICh0aGUgbW9kdWxlIGl0c2VsZiBmb3Jcblx0ICogbG9jYWwgZGVjbGFyYXRpb25zOyB0aGUgcmF3IHNwZWNpZmllciB3aGVuIHJlc29sdXRpb24gZmFpbHMpXG5cdCAqL1xuXHRzb3VyY2VNb2R1bGU6IHN0cmluZztcblx0LyoqIEhvdyB0aGUgYmluZGluZyBlbnRlcnMgdGhlIG1vZHVsZSAoYWJzZW50IG9uIHBsYWluIGxvY2FsIGV4cG9ydHMpICovXG5cdGltcG9ydEtpbmQ/OiBNb2R1bGVJbXBvcnRLaW5kO1xuXHQvKiogT3JpZ2luYWwgbmFtZSBpbiB0aGUgc291cmNlIG1vZHVsZSB3aGVuIGFsaWFzZWQgKi9cblx0aW1wb3J0QWxpYXM/OiBzdHJpbmc7XG5cdC8qKiBUcnVlIGZvciBgZXhwb3J0IHsgWCB9IGZyb20gJy4veSdgIC8gYGV4cG9ydCAqIGZyb20gJy4veSdgIChiYXJyZWxzKSAqL1xuXHRpc1JlRXhwb3J0OiBib29sZWFuO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZWQgaW50byBub2RlX21vZHVsZXNcblx0ICogKHRzLnJlc29sdmVNb2R1bGVOYW1lJ3MgaXNFeHRlcm5hbExpYnJhcnlJbXBvcnQpLiBFeHRlcm5hbCBiaW5kaW5ncyBhcmVcblx0ICogcmVjb3JkZWQgZm9yIHJlZmVyZW5jZSBidXQgbmV2ZXIgZW50ZXIgYGRlcGVuZGVuY2llc2AgYW5kIGFyZSBuZXZlciB3YWxrZWQuXG5cdCAqIE5vZGUuanMgYnVpbHRpbnMgYXJlIG5vdCByZWNvcmRlZCBhcyBiaW5kaW5ncyBhdCBhbGwg4oCUIHNlZVxuXHQgKiBNb2R1bGVJbmZvLmJ1aWx0aW5TcGVjaWZpZXJzLlxuXHQgKi9cblx0ZXh0ZXJuYWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBlci1tb2R1bGUgcmVjb3JkIG9mIHRoZSBjcm9zcy1maWxlIGdyYXBoIChtb2R1bGVzLmpzb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlSW5mbyB7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKG1hcCBrZXkpICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSAqL1xuXHRkZWZpbmVkVHlwZXM6IHN0cmluZ1tdO1xuXHQvKiogRXZlcnl0aGluZyB0aGlzIG1vZHVsZSBleHBvcnRzIChsb2NhbCBkZWNsYXJhdGlvbnMgYW5kIHJlLWV4cG9ydHMpICovXG5cdGV4cG9ydGVkQmluZGluZ3M6IE1vZHVsZUJpbmRpbmdbXTtcblx0LyoqIEV2ZXJ5dGhpbmcgdGhpcyBtb2R1bGUgaW1wb3J0cyAocmUtZXhwb3J0cyBhcHBlYXIgaGVyZSB0b28sIG1hcmtlZCBpc1JlRXhwb3J0KSAqL1xuXHRpbXBvcnRlZEJpbmRpbmdzOiBNb2R1bGVCaW5kaW5nW107XG5cdC8qKiBBYnNvbHV0ZSBwYXRocyBvZiBhbmFseXplZCBwcm9qZWN0IG1vZHVsZXMgdGhpcyBtb2R1bGUgaW1wb3J0cyBmcm9tICovXG5cdGRlcGVuZGVuY2llczogc3RyaW5nW107XG5cdC8qKiBJbXBvcnQgc3BlY2lmaWVycyB0aGF0IG1vZHVsZSByZXNvbHV0aW9uIGNvdWxkIG5vdCByZXNvbHZlIChub2RlIGJ1aWx0aW5zIGV4Y2x1ZGVkIOKAlCBzZWUgYnVpbHRpblNwZWNpZmllcnMpICovXG5cdHVucmVzb2x2ZWRTcGVjaWZpZXJzOiBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIE5vZGUuanMgYnVpbHRpbiBzcGVjaWZpZXJzIHRoaXMgbW9kdWxlIGltcG9ydHMgKCdwYXRoJywgJ25vZGU6ZnMnLCDigKYpLFxuXHQgKiBtYXRjaGVkIGFnYWluc3Qgbm9kZTptb2R1bGUncyBidWlsdGluTW9kdWxlcyBpbiBib3RoIGJhcmUgYW5kXG5cdCAqIGBub2RlOmAtcHJlZml4ZWQgZm9ybXMuIFJlY29yZGVkIGZvciBob25lc3R5IG9ubHk6IGJ1aWx0aW5zIHByb2R1Y2Ugbm9cblx0ICogYmluZGluZ3MsIG5ldmVyIGVudGVyIGBkZXBlbmRlbmNpZXNgL2B1bnJlc29sdmVkU3BlY2lmaWVyc2AsIGFuZCBuZXZlclxuXHQgKiBwcm9kdWNlIGVkZ2VzLlxuXHQgKi9cblx0YnVpbHRpblNwZWNpZmllcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY3Jvc3MtbW9kdWxlIHVzYWdlIG9mIGEgbW5lbW9uaWNhIHR5cGU6IHVzYWdlTW9kdWxlIGltcG9ydHMgYSBiaW5kaW5nXG4gKiB3aG9zZSBvcmlnaW4gbW9kdWxlIGRlZmluZXMgdGhlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvc3NNb2R1bGVVc2FnZSB7XG5cdC8qKiBNYXRjaGVkIG1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIChvciB0aGUgaW1wb3J0ZWQgbmFtZSB3aGVuIHVubWF0Y2hlZCkgKi9cblx0dHlwZVBhdGg6IHN0cmluZztcblx0LyoqIEFic29sdXRlIHBhdGggb2YgdGhlIG1vZHVsZSB3aGVyZSB0aGUgdHlwZSBpcyBkZWZpbmVkIChyZS1leHBvcnQgY2hhaW5zIGNoYXNlZCB0byB0aGUgb3JpZ2luKSAqL1xuXHRkZWZpbml0aW9uTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSBpbXBvcnRpbmcgbW9kdWxlICovXG5cdHVzYWdlTW9kdWxlOiBzdHJpbmc7XG5cdC8qKiBJbXBvcnQgc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR1c2FnZUxvY2F0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZ1bGwgbW9kdWxlIGdyYXBoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlR3JhcGgge1xuXHQvKiogS2V5ZWQgYnkgYWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdG1vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZUluZm8+O1xuXHRlZGdlczogQ3Jvc3NNb2R1bGVVc2FnZVtdO1xuXHQvKipcblx0ICogQ2lyY3VsYXIgaW1wb3J0IGNoYWlucyAoZWFjaCBhbiBhcnJheSBvZiBhYnNvbHV0ZSBwYXRocykuIFJlY29yZGVkLCBub3Rcblx0ICogYW4gZXJyb3Ig4oCUIG1uZW1vbmljYSBzdHJpY3RDaGFpbjpmYWxzZSBwZXJtaXRzIG5vbi1saW5lYXIgY29uc3RydWN0aW9uXG5cdCAqL1xuXHRjeWNsZXM6IHN0cmluZ1tdW107XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIG1vZHVsZXMuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZXNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRtb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVJbmZvPjtcblx0ZWRnZXM6IENyb3NzTW9kdWxlVXNhZ2VbXTtcblx0Y3ljbGVzOiBzdHJpbmdbXVtdO1xufVxuXG4vKipcbiAqIFdoYXQgYSB0cmFja2VkIHNjb3BlIGlzLiBEZWNpc2lvbiA1IChyZXNvbHZlZCAyMDI2LTA5LTAzKTogZnVuY3Rpb24sXG4gKiBtZXRob2QsIGFuZCBhcnJvdyBzY29wZXMgT05MWSDigJQgbm8gYmxvY2sgc2NvcGVzLiAnbW9kdWxlJyBpcyB0aGUgc3ludGhldGljXG4gKiBwZXItZmlsZSByb290IHNjb3BlIHNvIG1vZHVsZS1sZXZlbCBpbnN0YW5jZSBjcmVhdGlvbnMgYXJlIGxhYmVsZWQsIG5vdFxuICogZHJvcHBlZCAod2Fsa2VyIHBsYW46IFwicmVjb3JkZWQgYXMgYSByb290ZWQgaW5zdGFuY2VcIikuXG4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlS2luZCA9XG5cdHwgJ21vZHVsZSdcblx0fCAnZnVuY3Rpb24nXG5cdHwgJ21ldGhvZCdcblx0fCAnYXJyb3cnO1xuXG4vKipcbiAqIE9uZSB0cmFja2VkIHNjb3BlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZUluZm8ge1xuXHQvKiogVW5pcXVlIGlkOiBtb2R1bGUgc2NvcGUgaXMgdGhlIGZpbGUgcGF0aDsgZnVuY3Rpb24gc2NvcGVzIGFyZSBmaWxlOmxpbmU6Y29sIG9mIHRoZSBzY29wZSBub2RlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIERlY2lzaW9uIDggbGFiZWxpbmc6IGZ1bmN0aW9uL21ldGhvZCBuYW1lICgnQ2xhc3MubWV0aG9kJyBmb3IgbWV0aG9kcyksIGZpbGU6bGluZSBmb3IgYW5vbnltb3VzIGhvbGRlcnMgKi9cblx0bmFtZTogc3RyaW5nO1xuXHRraW5kOiBTY29wZUtpbmQ7XG5cdC8qKiBOZWFyZXN0IGVuY2xvc2luZyBzY29wZSAodW5kZWZpbmVkIG9uIG1vZHVsZSBzY29wZXMpICovXG5cdHBhcmVudFNjb3BlSWQ/OiBzdHJpbmc7XG5cdC8qKiBBYnNvbHV0ZSBmaWxlIHBhdGggKi9cblx0ZmlsZVBhdGg6IHN0cmluZztcblx0LyoqIFNjb3BlIHN0YXJ0OiBmaWxlLnRzOkxpbmU6Q29sIChtb2R1bGUgc2NvcGU6IGZpbGU6MToxKSAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSB0cmFja2VkIHZhcmlhYmxlIChzY29wZXMuanNvbilcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY29wZVZhcmlhYmxlIHtcblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3duaW5nIHNjb3BlICovXG5cdHNjb3BlSWQ6IHN0cmluZztcblx0LyoqIE1uZW1vbmljYSB0eXBlIGZ1bGxQYXRoIHdoZW4ga25vd24gKG5ldyBYKCkgb24gYSBrbm93biB0eXBlLCBuZXcgaW5zdC5TdWIoKSBjaGFpbmluZywgb3IgYSBrbm93biBhbm5vdGF0aW9uKSAqL1xuXHR0eXBlUGF0aD86IHN0cmluZztcblx0LyoqIENoZWFwIHRleHR1YWwgdHlwZTogYW5ub3RhdGlvbiB0ZXh0IG9yIHRpbnkgaW5pdGlhbGl6ZXIgY2xhc3NpZmljYXRpb24gKi9cblx0aW5mZXJyZWRUeXBlPzogc3RyaW5nO1xuXHQvKiogRGVjbGFyYXRpb24gc2l0ZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRkZWNsYXJhdGlvbjogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcjogYm9vbGVhbjtcblx0LyoqIGNvbnN0ID0gZmFsc2U7IGxldC92YXIgYW5kIHBhcmFtZXRlcnMgPSB0cnVlIChwYXJhbWV0ZXJzIGFyZSByZWFzc2lnbmFibGUpICovXG5cdGlzTXV0YWJsZTogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFJlYXNzaWdubWVudCBzaXRlcyAoZmlsZS50czpMaW5lOkNvbCkgb2YgdGhpcyBiaW5kaW5nIOKAlCBmbG93LXRlcm1pbmF0aW9uXG5cdCAqIHBvaW50cyAoZGVjaXNpb24gNik6IHRoZSBQaGFzZSAzIHdhbGtlciBzdG9wcyBmb2xsb3dpbmcgdGhlIGJpbmRpbmcgdGhlcmVcblx0ICovXG5cdHJlYXNzaWdubWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmdWxsIGxvY2FsLXNjb3BlIGFuYWx5c2lzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVBbmFseXNpcyB7XG5cdC8qKiBLZXllZCBieSBzY29wZUlkICovXG5cdHNjb3BlczogTWFwPHN0cmluZywgU2NvcGVJbmZvPjtcblx0LyoqIEtleWVkIGJ5IGAke3Njb3BlSWR9IyR7bmFtZX1gICovXG5cdHZhcmlhYmxlczogTWFwPHN0cmluZywgU2NvcGVWYXJpYWJsZT47XG59XG5cbi8qKlxuICogSlNPTiBvdXRwdXQgZm9yIHNjb3Blcy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcGVzSnNvbiB7XG5cdHZlcnNpb246IHN0cmluZztcblx0Z2VuZXJhdGVkQXQ6IHN0cmluZztcblx0c2NvcGVzOiBSZWNvcmQ8c3RyaW5nLCBTY29wZUluZm8+O1xuXHR2YXJpYWJsZXM6IFNjb3BlVmFyaWFibGVbXTtcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvZiB0aGUgY3JlYXRpb24gZ3JhcGggKGluc3RydW1lbnRhdGlvbiB3YWxrZXIgcGxhbiwgUGhhc2UgMyk6XG4gKiBhIHNjb3BlIHRoYXQgY3JlYXRlcyBtbmVtb25pY2EgaW5zdGFuY2VzLCBvciBvbmUgc2l0dGluZyBvbiBhIGNhbGwgcGF0aFxuICogdG8gYSBjcmVhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uR3JhcGhOb2RlIHtcblx0LyoqIExvY2FsU2NvcGVXYWxrZXIgc2NvcGVJZCAobW9kdWxlIHNjb3BlID0gZmlsZSBwYXRoOyBmdW5jdGlvbiBzY29wZXMgPSBmaWxlOmxpbmU6Y29sKSAqL1xuXHRzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBEZWNpc2lvbiA4IGxhYmVsOiBmdW5jdGlvbi9tZXRob2QgbmFtZSAoJ0NsYXNzLm1ldGhvZCcpLCBmaWxlOmxpbmUgZm9yIGFub255bW91cyBob2xkZXJzICovXG5cdG5hbWU6IHN0cmluZztcblx0a2luZDogU2NvcGVLaW5kO1xuXHQvKiogQWJzb2x1dGUgZmlsZSBwYXRoICovXG5cdGZpbGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBTY29wZSBzdGFydDogZmlsZS50czpMaW5lOkNvbCAqL1xuXHRsb2NhdGlvbjogc3RyaW5nO1xuXHQvKiogVHJ1ZSB3aGVuIHRoZSB3YWxrIGZvdW5kIG5vIGNhbGxlcnMg4oCUIGFuIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50ICovXG5cdHN0YXJ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT25lIGVkZ2Ugb2YgdGhlIGNyZWF0aW9uIGdyYXBoOiB0aGUgY2FsbGVyIHNjb3BlIGludm9rZXMgb3IgcmVmZXJlbmNlcyB0aGVcbiAqIGNhbGxlZSBzY29wZS4gRGlyZWN0aW9uIGlzIGluc2lkZS1vdXQ6IGNhbGxlciDihpIgY2FsbGVlLCB3aGVyZSB0aGUgY2FsbGVlIGlzXG4gKiBjbG9zZXIgdG8gdGhlIGNyZWF0aW9uIHNpdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRpb25HcmFwaEVkZ2Uge1xuXHQvKiogQ2FsbGluZyBzY29wZSdzIHNjb3BlSWQgKi9cblx0Y2FsbGVyOiBzdHJpbmc7XG5cdC8qKiBDYWxsZWQgKGhvbGRlcikgc2NvcGUncyBzY29wZUlkICovXG5cdGNhbGxlZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGluc3RhbnRpYXRpb24gYW5jaG9yOiBvbmUgbW5lbW9uaWNhIGNyZWF0aW9uIHNpdGUgcGlubmVkIHRvIGl0cyBob2xkZXJcbiAqIHNjb3BlLlxuICpcbiAqIGB2YXJpYWJsZWAvYHRlcm1pbmF0ZWRBdGAgYXJlIGEgZG9jdW1lbnRlZCBoZXVyaXN0aWM6IHRoZSB2YXJpYWJsZSBkZWNsYXJlZFxuICogaW4gdGhlIGhvbGRlciBzY29wZSBvbiB0aGUgU0FNRSBsaW5lIGFzIHRoZSBjcmVhdGlvbiwgd2hvc2UgdHlwZVBhdGggKHdoZW5cbiAqIGtub3duKSBtYXRjaGVzIHRoZSBjcmVhdGVkIHR5cGUuIGB0ZXJtaW5hdGVkQXRgIGlzIHRoYXQgdmFyaWFibGUncyBmaXJzdFxuICogcmVhc3NpZ25tZW50IHNpdGUg4oCUIHRoZSBkZWNpc2lvbiA2IGZsb3ctdGVybWluYXRpb24gcG9pbnQgd2hlcmUgdGhlIHdhbGtlclxuICogc3RvcHMgZm9sbG93aW5nIHRoZSBiaW5kaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0aW9uQW5jaG9yIHtcblx0LyoqIENyZWF0aW9uIHNpdGU6IGZpbGUudHM6TGluZTpDb2wgKHRoZSB1c2FnZXMuanNvbiBsb2NhdGlvbikgKi9cblx0bG9jYXRpb246IHN0cmluZztcblx0LyoqIFNjb3BlIGhvbGRpbmcgdGhlIGNyZWF0aW9uIChzY29wZXMuanNvbiBzY29wZUlkKSAqL1xuXHRob2xkZXJTY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBNbmVtb25pY2EgdHlwZSBmdWxsUGF0aCBiZWluZyBjcmVhdGVkICovXG5cdHR5cGVQYXRoOiBzdHJpbmc7XG5cdC8qKiBDb25zdHJ1Y3RvciBleHByZXNzaW9uIHRleHQgKCdUaGluZycsICd1c2VyLkFkbWluRW50aXR5JywgYSBsb29rdXAgYWxpYXMgbmFtZSkgKi9cblx0Y29uc3RydWN0b3JUZXh0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogVHJ1ZSB3aGVuIHRoZSBob2xkZXIgaXMgdGhlIG1vZHVsZSBzY29wZSDigJQgYSByb290ZWQgaW5zdGFuY2UgKHBsYW46XG5cdCAqIGxlZ2l0aW1hdGUgcm9vdCBvciBkZXZlbG9wZXIgZXJyb3I7IGxhYmVsZWQsIG5vdCBwb2xpY2VkKVxuXHQgKi9cblx0cm9vdGVkPzogYm9vbGVhbjtcblx0LyoqIFZhcmlhYmxlIHRoZSBmcmVzaCBpbnN0YW5jZSB3YXMgYm91bmQgdG8gKHNhbWUtbGluZSBoZXVyaXN0aWMpICovXG5cdHZhcmlhYmxlPzogc3RyaW5nO1xuXHQvKiogRmlyc3QgcmVhc3NpZ25tZW50IHNpdGUgb2YgdGhhdCB2YXJpYWJsZTogZmlsZS50czpMaW5lOkNvbCAqL1xuXHR0ZXJtaW5hdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGNyZWF0aW9uIGdyYXBoOiBldmVyeXRoaW5nIHRoYXQgbGVhZHMgdG8gbW5lbW9uaWNhIGluc3RhbmNlcyBiZWluZ1xuICogY3JlYXRlZC4gRW1pdHRlZCBhcyB0aGUgYGNyZWF0aW9uR3JhcGhgIGtleSBvZiBpbnN0cnVtZW50YXRpb24uanNvbiB2Mi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGlvbkdyYXBoIHtcblx0bm9kZXM6IENyZWF0aW9uR3JhcGhOb2RlW107XG5cdGVkZ2VzOiBDcmVhdGlvbkdyYXBoRWRnZVtdO1xuXHRhbmNob3JzOiBDcmVhdGlvbkFuY2hvcltdO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBoaWVyYXJjaHkuanNvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeUpzb24ge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdGdlbmVyYXRlZEF0OiBzdHJpbmc7XG5cdHJvb3RzOiBIaWVyYXJjaHlOb2RlW107XG59XG5cbi8qKlxuICogT25lIGVudHJ5IG9mIHRoZSBjb2xsZWN0aW9ucy5qc29uIG1hbmlmZXN0LiBUaGUgZGVmYXVsdCBjb2xsZWN0aW9uIGlzXG4gKiBlbWl0dGVkIGZpcnN0IHdoZW5ldmVyIGRlZmF1bHQtY29sbGVjdGlvbiB0eXBlcyBleGlzdDogaXQgaGFzIG5vIGNhbGxcbiAqIHNpdGUsIHNvIGBpZGAgYW5kIGBsb2NhdGlvbmAgc3RheSBudWxsICh1bnByZWZpeGVkIGZ1bGxQYXRocyBBUkUgaXRzXG4gKiBpZGVudGl0eSkgYW5kIGl0cyByZWdpc3RyeSBpbnRlcmZhY2UgaXMgdGhlIGdsb2JhbCBgVHlwZVJlZ2lzdHJ5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uTWFuaWZlc3RFbnRyeSB7XG5cdC8qKiBNaW50ZWQgaWQgdXNlZCBpbiBgY29sbGVjdGlvbklkOjpgIGZ1bGxQYXRoIHByZWZpeGVzOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGlkOiBzdHJpbmcgfCBudWxsO1xuXHQvKiogVmFyaWFibGUgaG9sZGluZyB0aGUgY3JlYXRlVHlwZXNDb2xsZWN0aW9uKCkgcmVzdWx0ICgnZGVmYXVsdFR5cGVzJyBmb3IgdGhlIGRlZmF1bHQgY29sbGVjdGlvbikgKi9cblx0bmFtZTogc3RyaW5nO1xuXHQvKiogT3B0aW9uLUIgcmVnaXN0cnkgaW50ZXJmYWNlIG5hbWU7IGFic2VudCB3aGVuIHRoZSBjb2xsZWN0aW9uIGRlY2xhcmVzIG5vbmUgKi9cblx0cmVnaXN0cnlJbnRlcmZhY2U/OiBzdHJpbmc7XG5cdC8qKiBjcmVhdGVUeXBlc0NvbGxlY3Rpb24oKSBjYWxsIHNpdGUgKGZpbGU6bGluZTpjb2wpOyBudWxsIGZvciB0aGUgZGVmYXVsdCBjb2xsZWN0aW9uICovXG5cdGxvY2F0aW9uOiBzdHJpbmcgfCBudWxsO1xuXHQvKipcblx0ICogU291cmNlIGxhbmd1YWdlIG9mIHRoaXMgY29sbGVjdGlvbidzIGNvZGViYXNlIChmb3JtYXQgMS4xOyBhYnNlbnQgaW5cblx0ICogMS4wIG91dHB1dCwgd2hlcmUgcmVhZGVycyBkZWZhdWx0IGl0IHRvIFwidHlwZXNjcmlwdFwiKS4gdGFjdGljYSBpcyB0aGVcblx0ICogVHlwZVNjcmlwdCBnZW5lcmF0b3IsIHNvIGV2ZXJ5IGVudHJ5IGl0IHdyaXRlcyBpcyBcInR5cGVzY3JpcHRcIi5cblx0ICovXG5cdGxhbmd1YWdlPzogJ3R5cGVzY3JpcHQnO1xufVxuXG4vKipcbiAqIEpTT04gb3V0cHV0IGZvciBjb2xsZWN0aW9ucy5qc29uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbnNKc29uIHtcblx0dmVyc2lvbjogc3RyaW5nO1xuXHRnZW5lcmF0ZWRBdDogc3RyaW5nO1xuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hbmlmZXN0RW50cnlbXTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIGhpZXJhcmNoeSBub2RlIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhpZXJhcmNoeU5vZGUge1xuXHQvKiogVHlwZSBuYW1lIChlLmcuLCBcIkFkbWluVHlwZVwiKSAqL1xuXHRuYW1lOiBzdHJpbmc7XG5cdC8qKiBGdWxsIGRvdHRlZCBwYXRoIChlLmcuLCBcIlVzZXJUeXBlLkFkbWluVHlwZVwiKSAqL1xuXHRmdWxsUGF0aDogc3RyaW5nO1xuXHQvKiogTG9jYXRpb24gaW4gc291cmNlOiBmaWxlLnRzOkxpbmU6Q29sICovXG5cdGxvY2F0aW9uOiBzdHJpbmc7XG5cdC8qKiBDaGlsZCB0eXBlcyBpbiB0aGUgVHJpZSAqL1xuXHRjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdO1xufVxuXG4vKipcbiAqIEEgZmF0YWwgcmVzb2x1dGlvbiBmYWlsdXJlOiBzYW1lLW5hbWVzcGFjZSBkdXBsaWNhdGUgbW5lbW9uaWNhXG4gKiBkZWZpbml0aW9ucywgb3IgYSBtbmVtb25pY2EtZ3JhcGggdHlwZSByZWZlcmVuY2UgdGhhdCBzdGF5cyBhbWJpZ3VvdXNcbiAqIGFmdGVyIHBhdGgtYXdhcmUgcmVzb2x1dGlvbiAob3IgcmVzb2x2ZXMgdG8gbm90aGluZykuIFRoZSBDTEkgcHJpbnRzXG4gKiBldmVyeSBsb2NhdGlvbiBhbmQgd3JpdGVzIG5vIC50YWN0aWNhIG91dHB1dCBhdCBhbGwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x1dGlvbkVycm9yIHtcblx0LyoqIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBmYWlsdXJlICovXG5cdG1lc3NhZ2U6IHN0cmluZztcblx0LyoqIGV2ZXJ5IGludm9sdmVkIHNvdXJjZSBsb2NhdGlvbiwgYGZpbGU6bGluZTpjb2x1bW5gICovXG5cdGxvY2F0aW9uczogc3RyaW5nW107XG59XG4iXX0=
package/lib/writer.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { GeneratedTypes, DefinitionInfo, UsageInfo, EDSInfo, FlowInfo, HierarchyNode, InstrumentationPoint, ModuleGraph, ScopeAnalysis, CreationGraph, CollectionManifestEntry } from './types';
1
+ import { GeneratedTypes, DefinitionInfo, UsageInfo, EDSInfo, FlowInfo, HierarchyNode, InstrumentationPoint, ModuleGraph, ScopeAnalysis, CreationGraph, CollectionManifestEntry, TypeGraph } from './types';
2
2
  /**
3
3
  * Writes generated types to file system
4
4
  */
@@ -44,9 +44,15 @@ export declare class TypesWriter {
44
44
  */
45
45
  getOutputDir(): string;
46
46
  /**
47
- * Write definitions.json file
47
+ * Write definitions.json file. When the type graph is passed (the CLI
48
+ * always passes it), each entry gains `fields` (the type's own fields in
49
+ * declaration order, from TypeNode.properties) and `args` (the
50
+ * constructor's parameters, from TypeNode.constructorParams) — the same
51
+ * source of truth types.ts renders. A rest parameter is emitted with
52
+ * `kind: 'rest'` and no `optional` (lethe definitions contract); `args`
53
+ * is omitted only when constructorParams was never extracted.
48
54
  */
49
- writeDefinitionsFile(definitions: Map<string, DefinitionInfo>): string;
55
+ writeDefinitionsFile(definitions: Map<string, DefinitionInfo>, graph?: TypeGraph): string;
50
56
  /**
51
57
  * Write usages.json file
52
58
  */
@@ -60,6 +66,14 @@ export declare class TypesWriter {
60
66
  * the caller passes creation-graph data — the CLI always does)
61
67
  */
62
68
  writeInstrumentationFile(points: InstrumentationPoint[], creationGraph?: CreationGraph): string;
69
+ /**
70
+ * Write control.json file (lethe contract, format 1.1): `callers` is the
71
+ * creation graph instrumentation.json v2 carries, `points` the same
72
+ * plugin-supplied instrumentation points. instrumentation.json keeps its
73
+ * shape for mnemographica; control.json is the cross-language contract
74
+ * rendering of the same data.
75
+ */
76
+ writeControlFile(points: InstrumentationPoint[], callers: CreationGraph): string;
63
77
  /**
64
78
  * Write flow.json file
65
79
  */
package/lib/writer.js CHANGED
@@ -144,9 +144,15 @@ class TypesWriter {
144
144
  return this.outputDir;
145
145
  }
146
146
  /**
147
- * Write definitions.json file
147
+ * Write definitions.json file. When the type graph is passed (the CLI
148
+ * always passes it), each entry gains `fields` (the type's own fields in
149
+ * declaration order, from TypeNode.properties) and `args` (the
150
+ * constructor's parameters, from TypeNode.constructorParams) — the same
151
+ * source of truth types.ts renders. A rest parameter is emitted with
152
+ * `kind: 'rest'` and no `optional` (lethe definitions contract); `args`
153
+ * is omitted only when constructorParams was never extracted.
148
154
  */
149
- writeDefinitionsFile(definitions) {
155
+ writeDefinitionsFile(definitions, graph) {
150
156
  this.ensureDirectory();
151
157
  const filePath = path.join(this.outputDir, 'definitions.json');
152
158
  // Convert Map to plain object
@@ -154,8 +160,47 @@ class TypesWriter {
154
160
  for (const [key, value] of definitions) {
155
161
  definitionsObj[key] = value;
156
162
  }
163
+ if (graph) {
164
+ for (const [key, value] of definitions) {
165
+ const node = graph.findType(key);
166
+ if (!node) {
167
+ continue;
168
+ }
169
+ // enrich a copy — the analyzer's definitions map stays untouched
170
+ const entry = { ...value };
171
+ const fields = [];
172
+ for (const propInfo of node.properties.values()) {
173
+ fields.push({
174
+ name: propInfo.name,
175
+ type: propInfo.type,
176
+ optional: propInfo.optional
177
+ });
178
+ }
179
+ entry.fields = fields;
180
+ if (node.constructorParams !== undefined) {
181
+ const args = node.constructorParams.map((param) => {
182
+ // a rest parameter may always receive nothing:
183
+ // the contract gives it `kind` and no `optional`
184
+ const arg = param.kind === 'rest'
185
+ ? {
186
+ name: param.name,
187
+ type: param.type,
188
+ kind: 'rest'
189
+ }
190
+ : {
191
+ name: param.name,
192
+ type: param.type,
193
+ optional: param.optional
194
+ };
195
+ return arg;
196
+ });
197
+ entry.args = args;
198
+ }
199
+ definitionsObj[key] = entry;
200
+ }
201
+ }
157
202
  const json = this.relativize({
158
- version: '1.0',
203
+ version: '1.1',
159
204
  generatedAt: new Date().toISOString(),
160
205
  definitions: definitionsObj,
161
206
  });
@@ -174,7 +219,7 @@ class TypesWriter {
174
219
  usagesObj[key] = value;
175
220
  }
176
221
  const json = this.relativize({
177
- version: '1.0',
222
+ version: '1.1',
178
223
  generatedAt: new Date().toISOString(),
179
224
  usages: usagesObj,
180
225
  });
@@ -193,7 +238,7 @@ class TypesWriter {
193
238
  edsObj[key] = value;
194
239
  }
195
240
  const json = this.relativize({
196
- version: '1.0',
241
+ version: '1.1',
197
242
  generatedAt: new Date().toISOString(),
198
243
  eds: edsObj,
199
244
  });
@@ -219,6 +264,26 @@ class TypesWriter {
219
264
  fs.writeFileSync(filePath, JSON.stringify(relativized, null, 2), 'utf-8');
220
265
  return filePath;
221
266
  }
267
+ /**
268
+ * Write control.json file (lethe contract, format 1.1): `callers` is the
269
+ * creation graph instrumentation.json v2 carries, `points` the same
270
+ * plugin-supplied instrumentation points. instrumentation.json keeps its
271
+ * shape for mnemographica; control.json is the cross-language contract
272
+ * rendering of the same data.
273
+ */
274
+ writeControlFile(points, callers) {
275
+ this.ensureDirectory();
276
+ const filePath = path.join(this.outputDir, 'control.json');
277
+ const json = {
278
+ version: '1.1',
279
+ generatedAt: new Date().toISOString(),
280
+ callers,
281
+ points,
282
+ };
283
+ const relativized = this.relativize(json);
284
+ fs.writeFileSync(filePath, JSON.stringify(relativized, null, 2), 'utf-8');
285
+ return filePath;
286
+ }
222
287
  /**
223
288
  * Write flow.json file
224
289
  */
@@ -231,7 +296,7 @@ class TypesWriter {
231
296
  flowObj[key] = value;
232
297
  }
233
298
  const json = this.relativize({
234
- version: '1.0',
299
+ version: '1.1',
235
300
  generatedAt: new Date().toISOString(),
236
301
  flow: flowObj,
237
302
  });
@@ -287,7 +352,7 @@ class TypesWriter {
287
352
  this.ensureDirectory();
288
353
  const filePath = path.join(this.outputDir, 'hierarchy.json');
289
354
  const json = this.relativize({
290
- version: '1.0',
355
+ version: '1.1',
291
356
  generatedAt: new Date().toISOString(),
292
357
  roots,
293
358
  });
@@ -305,7 +370,7 @@ class TypesWriter {
305
370
  this.ensureDirectory();
306
371
  const filePath = path.join(this.outputDir, 'collections.json');
307
372
  const json = this.relativize({
308
- version: '1.0',
373
+ version: '1.1',
309
374
  generatedAt: new Date().toISOString(),
310
375
  collections,
311
376
  });
@@ -314,4 +379,4 @@ class TypesWriter {
314
379
  }
315
380
  }
316
381
  exports.TypesWriter = TypesWriter;
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFPN0I7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFJdkIsWUFBYSxTQUFTLEdBQUcsVUFBVSxFQUFFLFdBQW9CO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxLQUFLLFNBQVM7WUFDM0MsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLFVBQVUsQ0FBSyxPQUFVO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxPQUFPLE9BQU8sQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUU7WUFDeEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxD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QUMsQ0FBQztRQUU3RCxNQUFNLElBQUksR0FBa0IsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUMzQyxPQUFPLEVBQU8sS0FBSztZQUNuQixXQUFXLEVBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsS0FBSztTQUNMLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0JBQW9CLENBQUUsV0FBc0M7UUFDM0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sSUFBSSxHQUFvQixJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzdDLE9BQU8sRUFBTyxLQUFLO1lBQ25CLFdBQVcsRUFBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN0QyxXQUFXO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7Q0FDRDtBQTdURCxrQ0E2VEMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuXHRHZW5lcmF0ZWRUeXBlcywgRGVmaW5pdGlvbkluZm8sIFVzYWdlSW5mbywgRURTSW5mbywgRmxvd0luZm8sIEZsb3dKc29uLCBIaWVyYXJjaHlOb2RlLCBIaWVyYXJjaHlKc29uLFxuXHRJbnN0cnVtZW50YXRpb25Qb2ludCwgSW5zdHJ1bWVudGF0aW9uSnNvbiwgTW9kdWxlR3JhcGgsIE1vZHVsZXNKc29uLCBTY29wZUFuYWx5c2lzLCBTY29wZXNKc29uLCBDcmVhdGlvbkdyYXBoLFxuXHRDb2xsZWN0aW9uTWFuaWZlc3RFbnRyeSwgQ29sbGVjdGlvbnNKc29uXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFdyaXRlcyBnZW5lcmF0ZWQgdHlwZXMgdG8gZmlsZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVzV3JpdGVyIHtcblx0cHJpdmF0ZSBvdXRwdXREaXI6IHN0cmluZztcblx0cHJpdmF0ZSBwcm9qZWN0Um9vdD86IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAob3V0cHV0RGlyID0gJy50YWN0aWNhJywgcHJvamVjdFJvb3Q/OiBzdHJpbmcpIHtcblx0XHR0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjtcblx0XHR0aGlzLnByb2plY3RSb290ID0gcHJvamVjdFJvb3QgPT09IHVuZGVmaW5lZFxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogcGF0aC5yZXNvbHZlKHByb2plY3RSb290KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXdyaXRlIGV2ZXJ5IHByb2plY3Qtcm9vdGVkIGFic29sdXRlIHBhdGggaW4gdGhlIHBheWxvYWQgdG8gYVxuXHQgKiBwcm9qZWN0LXJlbGF0aXZlIG9uZSAodmFsdWVzIEFORCBvYmplY3Qga2V5cyksIHNvIC50YWN0aWNhIG91dHB1dFxuXHQgKiBzdGF5cyBwb3J0YWJsZSBhY3Jvc3MgbWFjaGluZXMgYW5kIGNoZWNrb3V0cy4gUGF0aHMgb3V0c2lkZSB0aGVcblx0ICogcHJvamVjdCByb290IGtlZXAgdGhlaXIgYWJzb2x1dGUgZm9ybSDigJQgdGhleSBnZW51aW5lbHkgYXJlXG5cdCAqIG1hY2hpbmUtc3BlY2lmaWMuIENvbnN1bWVycyByZXNvbHZlIHJlbGF0aXZlIGVudHJpZXMgYWdhaW5zdCB0aGVcblx0ICogZGlyZWN0b3J5IHRoYXQgaG9sZHMgLnRhY3RpY2EuXG5cdCAqL1xuXHRwcml2YXRlIHJlbGF0aXZpemU8VD4gKHBheWxvYWQ6IFQpOiBUIHtcblx0XHRpZiAodGhpcy5wcm9qZWN0Um9vdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gcGF5bG9hZDtcblx0XHR9XG5cdFx0Y29uc3QgcHJlZml4ID0gdGhpcy5wcm9qZWN0Um9vdCArIHBhdGguc2VwO1xuXHRcdGNvbnN0IHdhbGsgPSAoaW5wdXQ6IHVua25vd24pOiB1bmtub3duID0+IHtcblx0XHRcdGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmICghaW5wdXQuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGlucHV0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlbGF0aXZlID0gaW5wdXQuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG5cdFx0XHRcdGNvbnN0IHdhbGtlZCA9IHJlbGF0aXZlLnNwbGl0KHBhdGguc2VwKS5qb2luKCcvJyk7XG5cdFx0XHRcdHJldHVybiB3YWxrZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcblx0XHRcdFx0Y29uc3Qgd2Fsa2VkID0gaW5wdXQubWFwKHdhbGspO1xuXHRcdFx0XHRyZXR1cm4gd2Fsa2VkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Y29uc3Qgd2Fsa2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuXHRcdFx0XHRcdGNvbnN0IHdhbGtlZEtleSA9IHdhbGsoa2V5KSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0d2Fsa2VkWyB3YWxrZWRLZXkgXSA9IHdhbGsodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB3YWxrZWQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaW5wdXQ7XG5cdFx0fTtcblx0XHRjb25zdCByZXN1bHQgPSB3YWxrKHBheWxvYWQpO1xuXHRcdHJldHVybiByZXN1bHQgYXMgVDtcblx0fVxuXG5cdC8qKlxuXHQgKiBMZWdhY3kgd3JpdGUgbWV0aG9kIC0gZGVsZWdhdGVzIHRvIHdyaXRlVHlwZXNGaWxlXG5cdCAqL1xuXHR3cml0ZSAoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRUeXBlcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMud3JpdGVUeXBlc0ZpbGUoZ2VuZXJhdGVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSB0eXBlcy50cyBmaWxlIChleHBvcnRhYmxlIHR5cGUgYWxpYXNlcyAtIGRlZmF1bHQgbW9kZSlcblx0ICovXG5cdHdyaXRlVHlwZXNGaWxlIChnZW5lcmF0ZWQ6IEdlbmVyYXRlZFR5cGVzKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAndHlwZXMudHMnKTtcblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBnZW5lcmF0ZWQuY29udGVudCwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGdsb2JhbCBhdWdtZW50YXRpb24gZmlsZSAoaW5kZXguZC50cyAtIG1vZHVsZSBhdWdtZW50YXRpb24gbW9kZSlcblx0ICovXG5cdHdyaXRlR2xvYmFsQXVnbWVudGF0aW9uIChnZW5lcmF0ZWQ6IEdlbmVyYXRlZFR5cGVzKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnaW5kZXguZC50cycpO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGdlbmVyYXRlZC5jb250ZW50LCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgdG8gYSBjdXN0b20gZmlsZW5hbWVcblx0ICovXG5cdHdyaXRlVG8gKGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgZmlsZW5hbWUpO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgZW5zdXJlRGlyZWN0b3J5ICgpOiB2b2lkIHtcblx0XHRpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5vdXRwdXREaXIpKSB7XG5cdFx0XHRmcy5ta2RpclN5bmModGhpcy5vdXRwdXREaXIsIHsgcmVjdXJzaXZlIDogdHJ1ZSB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW4gdGhlIG91dHB1dCBkaXJlY3Rvcnlcblx0ICovXG5cdGNsZWFuICgpOiB2b2lkIHtcblx0XHRpZiAoZnMuZXhpc3RzU3luYyh0aGlzLm91dHB1dERpcikpIHtcblx0XHRcdGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5vdXRwdXREaXIpO1xuXHRcdFx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG5cdFx0XHRcdGZzLnVubGlua1N5bmMocGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCBmaWxlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBvdXRwdXQgZGlyZWN0b3J5XG5cdCAqL1xuXHRnZXRPdXRwdXREaXIgKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub3V0cHV0RGlyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGRlZmluaXRpb25zLmpzb24gZmlsZVxuXHQgKi9cblx0d3JpdGVEZWZpbml0aW9uc0ZpbGUgKGRlZmluaXRpb25zOiBNYXA8c3RyaW5nLCBEZWZpbml0aW9uSW5mbz4pOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdkZWZpbml0aW9ucy5qc29uJyk7XG5cblx0XHQvLyBDb252ZXJ0IE1hcCB0byBwbGFpbiBvYmplY3Rcblx0XHRjb25zdCBkZWZpbml0aW9uc09iajogUmVjb3JkPHN0cmluZywgRGVmaW5pdGlvbkluZm8+ID0ge307XG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBkZWZpbml0aW9ucykge1xuXHRcdFx0ZGVmaW5pdGlvbnNPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjAnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRkZWZpbml0aW9ucyA6IGRlZmluaXRpb25zT2JqLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSB1c2FnZXMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZVVzYWdlc0ZpbGUgKHVzYWdlczogTWFwPHN0cmluZywgVXNhZ2VJbmZvW10+KTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAndXNhZ2VzLmpzb24nKTtcblxuXHRcdC8vIENvbnZlcnQgTWFwIHRvIHBsYWluIG9iamVjdFxuXHRcdGNvbnN0IHVzYWdlc09iajogUmVjb3JkPHN0cmluZywgVXNhZ2VJbmZvW10+ID0ge307XG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiB1c2FnZXMpIHtcblx0XHRcdHVzYWdlc09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uID0gdGhpcy5yZWxhdGl2aXplKHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMCcsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHVzYWdlcyAgICAgIDogdXNhZ2VzT2JqLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBlZHMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUVEU0ZpbGUgKGVkczogTWFwPHN0cmluZywgRURTSW5mb1tdPik6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2Vkcy5qc29uJyk7XG5cblx0XHQvLyBDb252ZXJ0IE1hcCB0byBwbGFpbiBvYmplY3Rcblx0XHRjb25zdCBlZHNPYmo6IFJlY29yZDxzdHJpbmcsIEVEU0luZm9bXT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGVkcykge1xuXHRcdFx0ZWRzT2JqWyBrZXkgXSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGpzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0ZWRzICAgICAgICAgOiBlZHNPYmosXG5cdFx0fSk7XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGluc3RydW1lbnRhdGlvbi5qc29uIGZpbGUgKHYyOiBhZGRzIHRoZSBjcmVhdGlvbkdyYXBoIGtleSB3aGVuXG5cdCAqIHRoZSBjYWxsZXIgcGFzc2VzIGNyZWF0aW9uLWdyYXBoIGRhdGEg4oCUIHRoZSBDTEkgYWx3YXlzIGRvZXMpXG5cdCAqL1xuXHR3cml0ZUluc3RydW1lbnRhdGlvbkZpbGUgKHBvaW50czogSW5zdHJ1bWVudGF0aW9uUG9pbnRbXSwgY3JlYXRpb25HcmFwaD86IENyZWF0aW9uR3JhcGgpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdpbnN0cnVtZW50YXRpb24uanNvbicpO1xuXG5cdFx0Y29uc3QganNvbjogSW5zdHJ1bWVudGF0aW9uSnNvbiA9IHtcblx0XHRcdHZlcnNpb24gICAgIDogMixcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0cG9pbnRzLFxuXHRcdH07XG5cdFx0aWYgKGNyZWF0aW9uR3JhcGgpIHtcblx0XHRcdGpzb24uY3JlYXRpb25HcmFwaCA9IGNyZWF0aW9uR3JhcGg7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVsYXRpdml6ZWQgPSB0aGlzLnJlbGF0aXZpemUoanNvbik7XG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkocmVsYXRpdml6ZWQsIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgZmxvdy5qc29uIGZpbGVcblx0ICovXG5cdHdyaXRlRmxvd0ZpbGUgKGZsb3c6IE1hcDxzdHJpbmcsIEZsb3dJbmZvW10+KTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnZmxvdy5qc29uJyk7XG5cblx0XHQvLyBDb252ZXJ0IE1hcCB0byBwbGFpbiBvYmplY3Rcblx0XHRjb25zdCBmbG93T2JqOiBSZWNvcmQ8c3RyaW5nLCBGbG93SW5mb1tdPiA9IHt9O1xuXHRcdGZvciAoY29uc3QgWyBrZXksIHZhbHVlIF0gb2YgZmxvdykge1xuXHRcdFx0Zmxvd09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uOiBGbG93SnNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjAnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRmbG93ICAgICAgICA6IGZsb3dPYmosXG5cdFx0fSk7XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIG1vZHVsZXMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZU1vZHVsZXNGaWxlIChncmFwaDogTW9kdWxlR3JhcGgpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdtb2R1bGVzLmpzb24nKTtcblxuXHRcdC8vIENvbnZlcnQgTWFwIHRvIHBsYWluIG9iamVjdFxuXHRcdGNvbnN0IG1vZHVsZXNPYmo6IE1vZHVsZXNKc29uWyAnbW9kdWxlcycgXSA9IHt9O1xuXHRcdGZvciAoY29uc3QgWyBrZXksIHZhbHVlIF0gb2YgZ3JhcGgubW9kdWxlcykge1xuXHRcdFx0bW9kdWxlc09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uOiBNb2R1bGVzSnNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjAnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRtb2R1bGVzICAgICA6IG1vZHVsZXNPYmosXG5cdFx0XHRlZGdlcyAgICAgICA6IGdyYXBoLmVkZ2VzLFxuXHRcdFx0Y3ljbGVzICAgICAgOiBncmFwaC5jeWNsZXMsXG5cdFx0fSk7XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIHNjb3Blcy5qc29uIGZpbGVcblx0ICovXG5cdHdyaXRlU2NvcGVzRmlsZSAoYW5hbHlzaXM6IFNjb3BlQW5hbHlzaXMpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdzY29wZXMuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXBzIHRvIHBsYWluIHNoYXBlc1xuXHRcdGNvbnN0IHNjb3Blc09iajogU2NvcGVzSnNvblsgJ3Njb3BlcycgXSA9IHt9O1xuXHRcdGZvciAoY29uc3QgWyBrZXksIHZhbHVlIF0gb2YgYW5hbHlzaXMuc2NvcGVzKSB7XG5cdFx0XHRzY29wZXNPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhYmxlcyA9IEFycmF5LmZyb20oYW5hbHlzaXMudmFyaWFibGVzLnZhbHVlcygpKTtcblxuXHRcdGNvbnN0IGpzb246IFNjb3Blc0pzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0c2NvcGVzICAgICAgOiBzY29wZXNPYmosXG5cdFx0XHR2YXJpYWJsZXMsXG5cdFx0fSk7XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGhpZXJhcmNoeS5qc29uIGZpbGVcblx0ICovXG5cdHdyaXRlSGllcmFyY2h5RmlsZSAocm9vdHM6IEhpZXJhcmNoeU5vZGVbXSk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2hpZXJhcmNoeS5qc29uJyk7XG5cblx0XHRjb25zdCBqc29uOiBIaWVyYXJjaHlKc29uID0gdGhpcy5yZWxhdGl2aXplKHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMCcsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHJvb3RzLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSB0aGUgY29sbGVjdGlvbiBtYW5pZmVzdDogb25lIGVudHJ5IHBlciBjb2xsZWN0aW9uIChkZWZhdWx0XG5cdCAqIGZpcnN0IHdoZW4gZGVmYXVsdC1jb2xsZWN0aW9uIHR5cGVzIGV4aXN0KSwgaWRzICsgZGlzcGxheSBuYW1lcyArXG5cdCAqIE9wdGlvbi1CIHJlZ2lzdHJ5IGludGVyZmFjZXMgKyBjYWxsIHNpdGVzLiBUaGUgaWTihpRpbnRlcmZhY2UgbWFwcGluZ1xuXHQgKiBpcyB0aGUgam9pbiBrZXkgYmV0d2VlbiB0aGUgYGNvbGxlY3Rpb25JZDo6YC1wcmVmaXhlZCBncmFwaCBvdXRwdXRzXG5cdCAqIGFuZCB0aGUgcmVnaXN0cnktcHJlZml4ZWQgYWxpYXNlcyBpbiB0eXBlcy50cyAvIHJlZ2lzdHJ5LnRzLlxuXHQgKi9cblx0d3JpdGVDb2xsZWN0aW9uc0ZpbGUgKGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uTWFuaWZlc3RFbnRyeVtdKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnY29sbGVjdGlvbnMuanNvbicpO1xuXG5cdFx0Y29uc3QganNvbjogQ29sbGVjdGlvbnNKc29uID0gdGhpcy5yZWxhdGl2aXplKHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMCcsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdGNvbGxlY3Rpb25zLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxufVxuIl19
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFPN0I7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFJdkIsWUFBYSxTQUFTLEdBQUcsVUFBVSxFQUFFLFdBQW9CO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxLQUFLLFNBQVM7WUFDM0MsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLFVBQVUsQ0FBSyxPQUFVO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxPQUFPLE9BQU8sQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUU7WUFDeEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLE1BQU0sQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxNQUFNLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO2dCQUMzQyxLQUFLLE1BQU0sQ0FBRSxHQUFHLEVBQUUsS0FBSyxDQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFXLENBQUM7b0JBQ3RDLE1BQU0sQ0FBRSxTQUFTLENBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsT0FBTyxNQUFXLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFFLFNBQXlCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUUsU0FBeUI7UUFDeEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFFLFNBQXlCO1FBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDekQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RCxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUUsUUFBZ0IsRUFBRSxPQUFlO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFHLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0YsQ0FBQztJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsb0JBQW9CLENBQUUsV0FBd0MsRUFBRSxLQUFpQjtRQUNoRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFL0QsOEJBQThCO1FBQzlCLE1BQU0sY0FBYyxHQUFtQyxFQUFFLENBQUM7UUFDMUQsS0FBSyxNQUFNLENBQUUsR0FBRyxFQUFFLEtBQUssQ0FBRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzFDLGNBQWMsQ0FBRSxHQUFHLENBQUUsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksS0FBSyxFQUFFLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBRSxHQUFHLEVBQUUsS0FBSyxDQUFFLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDWCxTQUFTO2dCQUNWLENBQUM7Z0JBQ0QsaUVBQWlFO2dCQUNqRSxNQUFNLEtBQUssR0FBbUIsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUMzQyxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO2dCQUNyQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztvQkFDakQsTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDWCxJQUFJLEVBQU8sUUFBUSxDQUFDLElBQUk7d0JBQ3hCLElBQUksRUFBTyxRQUFRLENBQUMsSUFBSTt3QkFDeEIsUUFBUSxFQUFHLFFBQVEsQ0FBQyxRQUFRO3FCQUM1QixDQUFDLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDdEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzFDLE1BQU0sSUFBSSxHQUFvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2xFLCtDQUErQzt3QkFDL0MsaURBQWlEO3dCQUNqRCxNQUFNLEdBQUcsR0FBa0IsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNOzRCQUMvQyxDQUFDLENBQUM7Z0NBQ0QsSUFBSSxFQUFHLEtBQUssQ0FBQyxJQUFJO2dDQUNqQixJQUFJLEVBQUcsS0FBSyxDQUFDLElBQUk7Z0NBQ2pCLElBQUksRUFBRyxNQUFNOzZCQUNiOzRCQUNELENBQUMsQ0FBQztnQ0FDRCxJQUFJLEVBQU8sS0FBSyxDQUFDLElBQUk7Z0NBQ3JCLElBQUksRUFBTyxLQUFLLENBQUMsSUFBSTtnQ0FDckIsUUFBUSxFQUFHLEtBQUssQ0FBQyxRQUFROzZCQUN6QixDQUFDO3dCQUNILE9BQU8sR0FBRyxDQUFDO29CQUNaLENBQUMsQ0FBQyxDQUFDO29CQUNILEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixDQUFDO2dCQUNELGNBQWMsQ0FBRSxHQUFHLENBQUUsR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQztRQUNGLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzVCLE9BQU8sRUFBTyxLQUFLO1lBQ25CLFdBQVcsRUFBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN0QyxXQUFXLEVBQUcsY0FBYztTQUM1QixDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFFLE1BQWdDO1FBQ2hELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFMUQsOEJBQThCO1FBQzlCLE1BQU0sU0FBUyxHQUFnQyxFQUFFLENBQUM7UUFDbEQsS0FBSyxNQUFNLENBQUUsR0FBRyxFQUFFLEtBQUssQ0FBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBRSxHQUFHLENBQUUsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDNUIsT0FBTyxFQUFPLEtBQUs7WUFDbkIsV0FBVyxFQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLE1BQU0sRUFBUSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUUsR0FBMkI7UUFDeEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2RCw4QkFBOEI7UUFDOUIsTUFBTSxNQUFNLEdBQThCLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sQ0FBRSxHQUFHLEVBQUUsS0FBSyxDQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFFLEdBQUcsQ0FBRSxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM1QixPQUFPLEVBQU8sS0FBSztZQUNuQixXQUFXLEVBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsR0FBRyxFQUFXLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsQ0FBRSxNQUE4QixFQUFFLGFBQTZCO1FBQ3RGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUVuRSxNQUFNLElBQUksR0FBd0I7WUFDakMsT0FBTyxFQUFPLENBQUM7WUFDZixXQUFXLEVBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsTUFBTTtTQUNOLENBQUM7UUFDRixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRSxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0JBQWdCLENBQUUsTUFBOEIsRUFBRSxPQUFzQjtRQUN2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTNELE1BQU0sSUFBSSxHQUFnQjtZQUN6QixPQUFPLEVBQU8sS0FBSztZQUNuQixXQUFXLEVBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsT0FBTztZQUNQLE1BQU07U0FDTixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUUsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFFLElBQTZCO1FBQzNDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFeEQsOEJBQThCO1FBQzlCLE1BQU0sT0FBTyxHQUErQixFQUFFLENBQUM7UUFDL0MsS0FBSyxNQUFNLENBQUUsR0FBRyxFQUFFLEtBQUssQ0FBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25DLE9BQU8sQ0FBRSxHQUFHLENBQUUsR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdEMsT0FBTyxFQUFPLEtBQUs7WUFDbkIsV0FBVyxFQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLElBQUksRUFBVSxPQUFPO1NBQ3JCLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBRSxLQUFrQjtRQUNuQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTNELDhCQUE4QjtRQUM5QixNQUFNLFVBQVUsR0FBNkIsRUFBRSxDQUFDO1FBQ2hELEtBQUssTUFBTSxDQUFFLEdBQUcsRUFBRSxLQUFLLENBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUMsVUFBVSxDQUFFLEdBQUcsQ0FBRSxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQWdCLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDekMsT0FBTyxFQUFPLEtBQUs7WUFDbkIsV0FBVyxFQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLE9BQU8sRUFBTyxVQUFVO1lBQ3hCLEtBQUssRUFBUyxLQUFLLENBQUMsS0FBSztZQUN6QixNQUFNLEVBQVEsS0FBSyxDQUFDLE1BQU07U0FDMUIsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBRSxRQUF1QjtRQUN2QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTFELCtCQUErQjtRQUMvQixNQUFNLFNBQVMsR0FBMkIsRUFBRSxDQUFDO1FBQzdDLEtBQUssTUFBTSxDQUFFLEdBQUcsRUFBRSxLQUFLLENBQUUsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUMsU0FBUyxDQUFFLEdBQUcsQ0FBRSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFMUQsTUFBTSxJQUFJLEdBQWUsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxPQUFPLEVBQU8sS0FBSztZQUNuQixXQUFXLEVBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsTUFBTSxFQUFRLFNBQVM7WUFDdkIsU0FBUztTQUNULENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBRSxLQUFzQjtRQUN6QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFN0QsTUFBTSxJQUFJLEdBQWtCLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDM0MsT0FBTyxFQUFPLEtBQUs7WUFDbkIsV0FBVyxFQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLEtBQUs7U0FDTCxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG9CQUFvQixDQUFFLFdBQXNDO1FBQzNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUUvRCxNQUFNLElBQUksR0FBb0IsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3QyxPQUFPLEVBQU8sS0FBSztZQUNuQixXQUFXLEVBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsV0FBVztTQUNYLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0NBQ0Q7QUFsWUQsa0NBa1lDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcblx0R2VuZXJhdGVkVHlwZXMsIERlZmluaXRpb25JbmZvLCBVc2FnZUluZm8sIEVEU0luZm8sIEZsb3dJbmZvLCBGbG93SnNvbiwgSGllcmFyY2h5Tm9kZSwgSGllcmFyY2h5SnNvbixcblx0SW5zdHJ1bWVudGF0aW9uUG9pbnQsIEluc3RydW1lbnRhdGlvbkpzb24sIE1vZHVsZUdyYXBoLCBNb2R1bGVzSnNvbiwgU2NvcGVBbmFseXNpcywgU2NvcGVzSnNvbiwgQ3JlYXRpb25HcmFwaCxcblx0Q29sbGVjdGlvbk1hbmlmZXN0RW50cnksIENvbGxlY3Rpb25zSnNvbiwgQ29udHJvbEpzb24sIFR5cGVHcmFwaCwgRGVmaW5pdGlvbkZpZWxkLCBEZWZpbml0aW9uQXJnXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFdyaXRlcyBnZW5lcmF0ZWQgdHlwZXMgdG8gZmlsZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVzV3JpdGVyIHtcblx0cHJpdmF0ZSBvdXRwdXREaXI6IHN0cmluZztcblx0cHJpdmF0ZSBwcm9qZWN0Um9vdD86IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAob3V0cHV0RGlyID0gJy50YWN0aWNhJywgcHJvamVjdFJvb3Q/OiBzdHJpbmcpIHtcblx0XHR0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjtcblx0XHR0aGlzLnByb2plY3RSb290ID0gcHJvamVjdFJvb3QgPT09IHVuZGVmaW5lZFxuXHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdDogcGF0aC5yZXNvbHZlKHByb2plY3RSb290KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXdyaXRlIGV2ZXJ5IHByb2plY3Qtcm9vdGVkIGFic29sdXRlIHBhdGggaW4gdGhlIHBheWxvYWQgdG8gYVxuXHQgKiBwcm9qZWN0LXJlbGF0aXZlIG9uZSAodmFsdWVzIEFORCBvYmplY3Qga2V5cyksIHNvIC50YWN0aWNhIG91dHB1dFxuXHQgKiBzdGF5cyBwb3J0YWJsZSBhY3Jvc3MgbWFjaGluZXMgYW5kIGNoZWNrb3V0cy4gUGF0aHMgb3V0c2lkZSB0aGVcblx0ICogcHJvamVjdCByb290IGtlZXAgdGhlaXIgYWJzb2x1dGUgZm9ybSDigJQgdGhleSBnZW51aW5lbHkgYXJlXG5cdCAqIG1hY2hpbmUtc3BlY2lmaWMuIENvbnN1bWVycyByZXNvbHZlIHJlbGF0aXZlIGVudHJpZXMgYWdhaW5zdCB0aGVcblx0ICogZGlyZWN0b3J5IHRoYXQgaG9sZHMgLnRhY3RpY2EuXG5cdCAqL1xuXHRwcml2YXRlIHJlbGF0aXZpemU8VD4gKHBheWxvYWQ6IFQpOiBUIHtcblx0XHRpZiAodGhpcy5wcm9qZWN0Um9vdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gcGF5bG9hZDtcblx0XHR9XG5cdFx0Y29uc3QgcHJlZml4ID0gdGhpcy5wcm9qZWN0Um9vdCArIHBhdGguc2VwO1xuXHRcdGNvbnN0IHdhbGsgPSAoaW5wdXQ6IHVua25vd24pOiB1bmtub3duID0+IHtcblx0XHRcdGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmICghaW5wdXQuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGlucHV0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlbGF0aXZlID0gaW5wdXQuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG5cdFx0XHRcdGNvbnN0IHdhbGtlZCA9IHJlbGF0aXZlLnNwbGl0KHBhdGguc2VwKS5qb2luKCcvJyk7XG5cdFx0XHRcdHJldHVybiB3YWxrZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcblx0XHRcdFx0Y29uc3Qgd2Fsa2VkID0gaW5wdXQubWFwKHdhbGspO1xuXHRcdFx0XHRyZXR1cm4gd2Fsa2VkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Y29uc3Qgd2Fsa2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuXHRcdFx0XHRcdGNvbnN0IHdhbGtlZEtleSA9IHdhbGsoa2V5KSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0d2Fsa2VkWyB3YWxrZWRLZXkgXSA9IHdhbGsodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB3YWxrZWQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaW5wdXQ7XG5cdFx0fTtcblx0XHRjb25zdCByZXN1bHQgPSB3YWxrKHBheWxvYWQpO1xuXHRcdHJldHVybiByZXN1bHQgYXMgVDtcblx0fVxuXG5cdC8qKlxuXHQgKiBMZWdhY3kgd3JpdGUgbWV0aG9kIC0gZGVsZWdhdGVzIHRvIHdyaXRlVHlwZXNGaWxlXG5cdCAqL1xuXHR3cml0ZSAoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRUeXBlcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMud3JpdGVUeXBlc0ZpbGUoZ2VuZXJhdGVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSB0eXBlcy50cyBmaWxlIChleHBvcnRhYmxlIHR5cGUgYWxpYXNlcyAtIGRlZmF1bHQgbW9kZSlcblx0ICovXG5cdHdyaXRlVHlwZXNGaWxlIChnZW5lcmF0ZWQ6IEdlbmVyYXRlZFR5cGVzKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAndHlwZXMudHMnKTtcblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBnZW5lcmF0ZWQuY29udGVudCwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGdsb2JhbCBhdWdtZW50YXRpb24gZmlsZSAoaW5kZXguZC50cyAtIG1vZHVsZSBhdWdtZW50YXRpb24gbW9kZSlcblx0ICovXG5cdHdyaXRlR2xvYmFsQXVnbWVudGF0aW9uIChnZW5lcmF0ZWQ6IEdlbmVyYXRlZFR5cGVzKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnaW5kZXguZC50cycpO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGdlbmVyYXRlZC5jb250ZW50LCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgdG8gYSBjdXN0b20gZmlsZW5hbWVcblx0ICovXG5cdHdyaXRlVG8gKGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgZmlsZW5hbWUpO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbnN1cmUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgZW5zdXJlRGlyZWN0b3J5ICgpOiB2b2lkIHtcblx0XHRpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5vdXRwdXREaXIpKSB7XG5cdFx0XHRmcy5ta2RpclN5bmModGhpcy5vdXRwdXREaXIsIHsgcmVjdXJzaXZlIDogdHJ1ZSB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW4gdGhlIG91dHB1dCBkaXJlY3Rvcnlcblx0ICovXG5cdGNsZWFuICgpOiB2b2lkIHtcblx0XHRpZiAoZnMuZXhpc3RzU3luYyh0aGlzLm91dHB1dERpcikpIHtcblx0XHRcdGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5vdXRwdXREaXIpO1xuXHRcdFx0Zm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG5cdFx0XHRcdGZzLnVubGlua1N5bmMocGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCBmaWxlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBvdXRwdXQgZGlyZWN0b3J5XG5cdCAqL1xuXHRnZXRPdXRwdXREaXIgKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub3V0cHV0RGlyO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGRlZmluaXRpb25zLmpzb24gZmlsZS4gV2hlbiB0aGUgdHlwZSBncmFwaCBpcyBwYXNzZWQgKHRoZSBDTElcblx0ICogYWx3YXlzIHBhc3NlcyBpdCksIGVhY2ggZW50cnkgZ2FpbnMgYGZpZWxkc2AgKHRoZSB0eXBlJ3Mgb3duIGZpZWxkcyBpblxuXHQgKiBkZWNsYXJhdGlvbiBvcmRlciwgZnJvbSBUeXBlTm9kZS5wcm9wZXJ0aWVzKSBhbmQgYGFyZ3NgICh0aGVcblx0ICogY29uc3RydWN0b3IncyBwYXJhbWV0ZXJzLCBmcm9tIFR5cGVOb2RlLmNvbnN0cnVjdG9yUGFyYW1zKSDigJQgdGhlIHNhbWVcblx0ICogc291cmNlIG9mIHRydXRoIHR5cGVzLnRzIHJlbmRlcnMuIEEgcmVzdCBwYXJhbWV0ZXIgaXMgZW1pdHRlZCB3aXRoXG5cdCAqIGBraW5kOiAncmVzdCdgIGFuZCBubyBgb3B0aW9uYWxgIChsZXRoZSBkZWZpbml0aW9ucyBjb250cmFjdCk7IGBhcmdzYFxuXHQgKiBpcyBvbWl0dGVkIG9ubHkgd2hlbiBjb25zdHJ1Y3RvclBhcmFtcyB3YXMgbmV2ZXIgZXh0cmFjdGVkLlxuXHQgKi9cblx0d3JpdGVEZWZpbml0aW9uc0ZpbGUgKGRlZmluaXRpb25zOiBNYXA8c3RyaW5nLCBEZWZpbml0aW9uSW5mbz4sIGdyYXBoPzogVHlwZUdyYXBoKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnZGVmaW5pdGlvbnMuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgZGVmaW5pdGlvbnNPYmo6IFJlY29yZDxzdHJpbmcsIERlZmluaXRpb25JbmZvPiA9IHt9O1xuXHRcdGZvciAoY29uc3QgWyBrZXksIHZhbHVlIF0gb2YgZGVmaW5pdGlvbnMpIHtcblx0XHRcdGRlZmluaXRpb25zT2JqWyBrZXkgXSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmIChncmFwaCkge1xuXHRcdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBkZWZpbml0aW9ucykge1xuXHRcdFx0XHRjb25zdCBub2RlID0gZ3JhcGguZmluZFR5cGUoa2V5KTtcblx0XHRcdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZW5yaWNoIGEgY29weSDigJQgdGhlIGFuYWx5emVyJ3MgZGVmaW5pdGlvbnMgbWFwIHN0YXlzIHVudG91Y2hlZFxuXHRcdFx0XHRjb25zdCBlbnRyeTogRGVmaW5pdGlvbkluZm8gPSB7IC4uLnZhbHVlIH07XG5cdFx0XHRcdGNvbnN0IGZpZWxkczogRGVmaW5pdGlvbkZpZWxkW10gPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wSW5mbyBvZiBub2RlLnByb3BlcnRpZXMudmFsdWVzKCkpIHtcblx0XHRcdFx0XHRmaWVsZHMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lICAgICA6IHByb3BJbmZvLm5hbWUsXG5cdFx0XHRcdFx0XHR0eXBlICAgICA6IHByb3BJbmZvLnR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25hbCA6IHByb3BJbmZvLm9wdGlvbmFsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZW50cnkuZmllbGRzID0gZmllbGRzO1xuXHRcdFx0XHRpZiAobm9kZS5jb25zdHJ1Y3RvclBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXJnczogRGVmaW5pdGlvbkFyZ1tdID0gbm9kZS5jb25zdHJ1Y3RvclBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBhIHJlc3QgcGFyYW1ldGVyIG1heSBhbHdheXMgcmVjZWl2ZSBub3RoaW5nOlxuXHRcdFx0XHRcdFx0Ly8gdGhlIGNvbnRyYWN0IGdpdmVzIGl0IGBraW5kYCBhbmQgbm8gYG9wdGlvbmFsYFxuXHRcdFx0XHRcdFx0Y29uc3QgYXJnOiBEZWZpbml0aW9uQXJnID0gcGFyYW0ua2luZCA9PT0gJ3Jlc3QnXG5cdFx0XHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgOiBwYXJhbS5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGUgOiBwYXJhbS50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdGtpbmQgOiAncmVzdCdcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lICAgICA6IHBhcmFtLm5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZSAgICAgOiBwYXJhbS50eXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbmFsIDogcGFyYW0ub3B0aW9uYWxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHJldHVybiBhcmc7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0ZW50cnkuYXJncyA9IGFyZ3M7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVmaW5pdGlvbnNPYmpbIGtleSBdID0gZW50cnk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjEnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRkZWZpbml0aW9ucyA6IGRlZmluaXRpb25zT2JqLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSB1c2FnZXMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZVVzYWdlc0ZpbGUgKHVzYWdlczogTWFwPHN0cmluZywgVXNhZ2VJbmZvW10+KTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAndXNhZ2VzLmpzb24nKTtcblxuXHRcdC8vIENvbnZlcnQgTWFwIHRvIHBsYWluIG9iamVjdFxuXHRcdGNvbnN0IHVzYWdlc09iajogUmVjb3JkPHN0cmluZywgVXNhZ2VJbmZvW10+ID0ge307XG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiB1c2FnZXMpIHtcblx0XHRcdHVzYWdlc09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uID0gdGhpcy5yZWxhdGl2aXplKHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMScsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHVzYWdlcyAgICAgIDogdXNhZ2VzT2JqLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBlZHMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUVEU0ZpbGUgKGVkczogTWFwPHN0cmluZywgRURTSW5mb1tdPik6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2Vkcy5qc29uJyk7XG5cblx0XHQvLyBDb252ZXJ0IE1hcCB0byBwbGFpbiBvYmplY3Rcblx0XHRjb25zdCBlZHNPYmo6IFJlY29yZDxzdHJpbmcsIEVEU0luZm9bXT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGVkcykge1xuXHRcdFx0ZWRzT2JqWyBrZXkgXSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGpzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4xJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0ZWRzICAgICAgICAgOiBlZHNPYmosXG5cdFx0fSk7XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGluc3RydW1lbnRhdGlvbi5qc29uIGZpbGUgKHYyOiBhZGRzIHRoZSBjcmVhdGlvbkdyYXBoIGtleSB3aGVuXG5cdCAqIHRoZSBjYWxsZXIgcGFzc2VzIGNyZWF0aW9uLWdyYXBoIGRhdGEg4oCUIHRoZSBDTEkgYWx3YXlzIGRvZXMpXG5cdCAqL1xuXHR3cml0ZUluc3RydW1lbnRhdGlvbkZpbGUgKHBvaW50czogSW5zdHJ1bWVudGF0aW9uUG9pbnRbXSwgY3JlYXRpb25HcmFwaD86IENyZWF0aW9uR3JhcGgpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdpbnN0cnVtZW50YXRpb24uanNvbicpO1xuXG5cdFx0Y29uc3QganNvbjogSW5zdHJ1bWVudGF0aW9uSnNvbiA9IHtcblx0XHRcdHZlcnNpb24gICAgIDogMixcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0cG9pbnRzLFxuXHRcdH07XG5cdFx0aWYgKGNyZWF0aW9uR3JhcGgpIHtcblx0XHRcdGpzb24uY3JlYXRpb25HcmFwaCA9IGNyZWF0aW9uR3JhcGg7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVsYXRpdml6ZWQgPSB0aGlzLnJlbGF0aXZpemUoanNvbik7XG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkocmVsYXRpdml6ZWQsIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgY29udHJvbC5qc29uIGZpbGUgKGxldGhlIGNvbnRyYWN0LCBmb3JtYXQgMS4xKTogYGNhbGxlcnNgIGlzIHRoZVxuXHQgKiBjcmVhdGlvbiBncmFwaCBpbnN0cnVtZW50YXRpb24uanNvbiB2MiBjYXJyaWVzLCBgcG9pbnRzYCB0aGUgc2FtZVxuXHQgKiBwbHVnaW4tc3VwcGxpZWQgaW5zdHJ1bWVudGF0aW9uIHBvaW50cy4gaW5zdHJ1bWVudGF0aW9uLmpzb24ga2VlcHMgaXRzXG5cdCAqIHNoYXBlIGZvciBtbmVtb2dyYXBoaWNhOyBjb250cm9sLmpzb24gaXMgdGhlIGNyb3NzLWxhbmd1YWdlIGNvbnRyYWN0XG5cdCAqIHJlbmRlcmluZyBvZiB0aGUgc2FtZSBkYXRhLlxuXHQgKi9cblx0d3JpdGVDb250cm9sRmlsZSAocG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdLCBjYWxsZXJzOiBDcmVhdGlvbkdyYXBoKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnY29udHJvbC5qc29uJyk7XG5cblx0XHRjb25zdCBqc29uOiBDb250cm9sSnNvbiA9IHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMScsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdGNhbGxlcnMsXG5cdFx0XHRwb2ludHMsXG5cdFx0fTtcblxuXHRcdGNvbnN0IHJlbGF0aXZpemVkID0gdGhpcy5yZWxhdGl2aXplKGpzb24pO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHJlbGF0aXZpemVkLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGZsb3cuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUZsb3dGaWxlIChmbG93OiBNYXA8c3RyaW5nLCBGbG93SW5mb1tdPik6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2Zsb3cuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgZmxvd09iajogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGZsb3cpIHtcblx0XHRcdGZsb3dPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbjogRmxvd0pzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4xJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0ZmxvdyAgICAgICAgOiBmbG93T2JqLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBtb2R1bGVzLmpzb24gZmlsZVxuXHQgKi9cblx0d3JpdGVNb2R1bGVzRmlsZSAoZ3JhcGg6IE1vZHVsZUdyYXBoKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnbW9kdWxlcy5qc29uJyk7XG5cblx0XHQvLyBDb252ZXJ0IE1hcCB0byBwbGFpbiBvYmplY3Rcblx0XHRjb25zdCBtb2R1bGVzT2JqOiBNb2R1bGVzSnNvblsgJ21vZHVsZXMnIF0gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGdyYXBoLm1vZHVsZXMpIHtcblx0XHRcdG1vZHVsZXNPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbjogTW9kdWxlc0pzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0bW9kdWxlcyAgICAgOiBtb2R1bGVzT2JqLFxuXHRcdFx0ZWRnZXMgICAgICAgOiBncmFwaC5lZGdlcyxcblx0XHRcdGN5Y2xlcyAgICAgIDogZ3JhcGguY3ljbGVzLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBzY29wZXMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZVNjb3Blc0ZpbGUgKGFuYWx5c2lzOiBTY29wZUFuYWx5c2lzKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnc2NvcGVzLmpzb24nKTtcblxuXHRcdC8vIENvbnZlcnQgTWFwcyB0byBwbGFpbiBzaGFwZXNcblx0XHRjb25zdCBzY29wZXNPYmo6IFNjb3Blc0pzb25bICdzY29wZXMnIF0gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGFuYWx5c2lzLnNjb3Blcykge1xuXHRcdFx0c2NvcGVzT2JqWyBrZXkgXSA9IHZhbHVlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYWJsZXMgPSBBcnJheS5mcm9tKGFuYWx5c2lzLnZhcmlhYmxlcy52YWx1ZXMoKSk7XG5cblx0XHRjb25zdCBqc29uOiBTY29wZXNKc29uID0gdGhpcy5yZWxhdGl2aXplKHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMCcsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHNjb3BlcyAgICAgIDogc2NvcGVzT2JqLFxuXHRcdFx0dmFyaWFibGVzLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBoaWVyYXJjaHkuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUhpZXJhcmNoeUZpbGUgKHJvb3RzOiBIaWVyYXJjaHlOb2RlW10pOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdoaWVyYXJjaHkuanNvbicpO1xuXG5cdFx0Y29uc3QganNvbjogSGllcmFyY2h5SnNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjEnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRyb290cyxcblx0XHR9KTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgdGhlIGNvbGxlY3Rpb24gbWFuaWZlc3Q6IG9uZSBlbnRyeSBwZXIgY29sbGVjdGlvbiAoZGVmYXVsdFxuXHQgKiBmaXJzdCB3aGVuIGRlZmF1bHQtY29sbGVjdGlvbiB0eXBlcyBleGlzdCksIGlkcyArIGRpc3BsYXkgbmFtZXMgK1xuXHQgKiBPcHRpb24tQiByZWdpc3RyeSBpbnRlcmZhY2VzICsgY2FsbCBzaXRlcy4gVGhlIGlk4oaUaW50ZXJmYWNlIG1hcHBpbmdcblx0ICogaXMgdGhlIGpvaW4ga2V5IGJldHdlZW4gdGhlIGBjb2xsZWN0aW9uSWQ6OmAtcHJlZml4ZWQgZ3JhcGggb3V0cHV0c1xuXHQgKiBhbmQgdGhlIHJlZ2lzdHJ5LXByZWZpeGVkIGFsaWFzZXMgaW4gdHlwZXMudHMgLyByZWdpc3RyeS50cy5cblx0ICovXG5cdHdyaXRlQ29sbGVjdGlvbnNGaWxlIChjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hbmlmZXN0RW50cnlbXSk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2NvbGxlY3Rpb25zLmpzb24nKTtcblxuXHRcdGNvbnN0IGpzb246IENvbGxlY3Rpb25zSnNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjEnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRjb2xsZWN0aW9ucyxcblx0XHR9KTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mnemonica/tactica",
3
- "version": "0.4.4",
4
- "description": "Type definition generator for Mnemonica — statically analyzes define() calls and emits .tactica/ types, registry, and metadata",
3
+ "version": "0.4.6",
4
+ "description": "Type definition generator for Mnemonica: statically analyzes define() calls and emits .tactica types, registry, and metadata",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
7
7
  "bin": {
@@ -46,27 +46,29 @@
46
46
  "homepage": "https://github.com/mythographica/tactica#readme",
47
47
  "license": "MIT",
48
48
  "peerDependencies": {
49
- "mnemonica": "^1.3.5"
49
+ "mnemonica": "^1.3.9"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@istanbuljs/nyc-config-typescript": "^1.0.2",
53
+ "@mnemonica/lethe": "^0.2.0",
53
54
  "@types/chai": "^4.3.20",
54
55
  "@types/mocha": "^10.0.10",
55
56
  "@types/node": "^20.19.43",
56
- "@typescript-eslint/eslint-plugin": "^8.70.1",
57
- "@typescript-eslint/parser": "^8.70.1",
57
+ "@typescript-eslint/eslint-plugin": "^8.71.1",
58
+ "@typescript-eslint/parser": "^8.71.1",
59
+ "ajv": "^8.20.0",
58
60
  "chai": "^4.5.0",
59
61
  "eslint": "^9.39.5",
60
62
  "eslint-plugin-mocha": "^10.5.0",
61
63
  "eslint-plugin-no-arrow-this": "^1.3.0",
62
64
  "globals": "^15.15.0",
63
65
  "husky": "^9.1.7",
66
+ "mnemonica": "1.3.9",
64
67
  "mocha": "^8.4.0",
65
68
  "nyc": "^18.0.0",
66
69
  "ts-node": "^10.9.2",
67
70
  "typeomatica": "^0.3.63",
68
- "typescript": "^6.0.3",
69
- "mnemonica": "^1.3.5"
71
+ "typescript": "^6.0.3"
70
72
  },
71
73
  "dependencies": {
72
74
  "@types/chokidar": "^2.1.7",