@skyux/text-editor 7.0.0-beta.12 → 7.0.0-beta.13

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.
Files changed (30) hide show
  1. package/documentation.json +598 -279
  2. package/esm2020/lib/modules/rich-text-display/rich-text-display.component.mjs +23 -13
  3. package/esm2020/lib/modules/text-editor/menubar/text-editor-menubar.component.mjs +90 -82
  4. package/esm2020/lib/modules/text-editor/services/text-editor-adapter.service.mjs +261 -311
  5. package/esm2020/lib/modules/text-editor/services/text-editor-selection.service.mjs +14 -20
  6. package/esm2020/lib/modules/text-editor/services/text-editor.service.mjs +29 -29
  7. package/esm2020/lib/modules/text-editor/services/text-sanitization.service.mjs +8 -3
  8. package/esm2020/lib/modules/text-editor/text-editor.component.mjs +226 -170
  9. package/esm2020/lib/modules/text-editor/toolbar/text-editor-toolbar.component.mjs +84 -57
  10. package/esm2020/lib/modules/text-editor/types/editor-command.mjs +1 -1
  11. package/esm2020/lib/modules/text-editor/types/editor-setting.mjs +1 -1
  12. package/esm2020/lib/modules/text-editor/url-modal/text-editor-url-modal-context.mjs +1 -1
  13. package/esm2020/lib/modules/text-editor/url-modal/text-editor-url-modal.component.mjs +33 -30
  14. package/fesm2015/skyux-text-editor.mjs +759 -708
  15. package/fesm2015/skyux-text-editor.mjs.map +1 -1
  16. package/fesm2020/skyux-text-editor.mjs +761 -717
  17. package/fesm2020/skyux-text-editor.mjs.map +1 -1
  18. package/lib/modules/rich-text-display/rich-text-display.component.d.ts +2 -4
  19. package/lib/modules/text-editor/menubar/text-editor-menubar.component.d.ts +6 -13
  20. package/lib/modules/text-editor/services/text-editor-adapter.service.d.ts +17 -34
  21. package/lib/modules/text-editor/services/text-editor-selection.service.d.ts +3 -3
  22. package/lib/modules/text-editor/services/text-editor.service.d.ts +8 -12
  23. package/lib/modules/text-editor/services/text-sanitization.service.d.ts +1 -1
  24. package/lib/modules/text-editor/text-editor.component.d.ts +23 -33
  25. package/lib/modules/text-editor/toolbar/text-editor-toolbar.component.d.ts +7 -13
  26. package/lib/modules/text-editor/types/editor-command.d.ts +1 -1
  27. package/lib/modules/text-editor/types/editor-setting.d.ts +4 -4
  28. package/lib/modules/text-editor/url-modal/text-editor-url-modal-context.d.ts +1 -1
  29. package/lib/modules/text-editor/url-modal/text-editor-url-modal.component.d.ts +2 -7
  30. package/package.json +13 -12
@@ -1,3 +1,5 @@
1
+ var _SkyTextEditorUrlModalComponent_instances, _SkyTextEditorUrlModalComponent_modalInstance, _SkyTextEditorUrlModalComponent__activeTab, _SkyTextEditorUrlModalComponent__emailAddress, _SkyTextEditorUrlModalComponent__url, _SkyTextEditorUrlModalComponent_getEmailUrl, _SkyTextEditorUrlModalComponent_isValid;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
1
3
  import { Component } from '@angular/core';
2
4
  import { SkyModalInstance } from '@skyux/modals';
3
5
  import { SkyValidation } from '@skyux/validation';
@@ -18,14 +20,16 @@ const queryStringParamKey = '?Subject=';
18
20
  */
19
21
  export class SkyTextEditorUrlModalComponent {
20
22
  constructor(modalInstance, modalContext) {
21
- this.modalInstance = modalInstance;
23
+ _SkyTextEditorUrlModalComponent_instances.add(this);
22
24
  this.emailAddressValid = false;
23
25
  this.subject = '';
24
26
  this.target = 0;
25
27
  this.valid = false;
26
- this._activeTab = 0;
27
- this._emailAddress = '';
28
- this._url = 'https://';
28
+ _SkyTextEditorUrlModalComponent_modalInstance.set(this, void 0);
29
+ _SkyTextEditorUrlModalComponent__activeTab.set(this, 0);
30
+ _SkyTextEditorUrlModalComponent__emailAddress.set(this, '');
31
+ _SkyTextEditorUrlModalComponent__url.set(this, 'https://');
32
+ __classPrivateFieldSet(this, _SkyTextEditorUrlModalComponent_modalInstance, modalInstance, "f");
29
33
  if (modalContext.urlResult) {
30
34
  if (modalContext.urlResult.url.startsWith(emailKey)) {
31
35
  this.emailAddress = modalContext.urlResult.url.replace(emailKey, '');
@@ -51,34 +55,34 @@ export class SkyTextEditorUrlModalComponent {
51
55
  }
52
56
  }
53
57
  set activeTab(value) {
54
- this._activeTab = value;
55
- this.valid = this.isValid();
58
+ __classPrivateFieldSet(this, _SkyTextEditorUrlModalComponent__activeTab, value, "f");
59
+ this.valid = __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_instances, "m", _SkyTextEditorUrlModalComponent_isValid).call(this);
56
60
  }
57
61
  get activeTab() {
58
- return this._activeTab;
62
+ return __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent__activeTab, "f");
59
63
  }
60
64
  set emailAddress(value) {
61
- this._emailAddress = value;
62
- this.valid = this.isValid();
65
+ __classPrivateFieldSet(this, _SkyTextEditorUrlModalComponent__emailAddress, value, "f");
66
+ this.valid = __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_instances, "m", _SkyTextEditorUrlModalComponent_isValid).call(this);
63
67
  }
64
68
  get emailAddress() {
65
- return this._emailAddress;
69
+ return __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent__emailAddress, "f");
66
70
  }
67
71
  set url(value) {
68
- this._url = value;
69
- this.valid = this.isValid();
72
+ __classPrivateFieldSet(this, _SkyTextEditorUrlModalComponent__url, value, "f");
73
+ this.valid = __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_instances, "m", _SkyTextEditorUrlModalComponent_isValid).call(this);
70
74
  }
71
75
  get url() {
72
- return this._url;
76
+ return __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent__url, "f");
73
77
  }
74
78
  activeTabChanged(value) {
75
79
  this.activeTab = Number(value);
76
80
  }
77
81
  save() {
78
82
  /* istanbul ignore else */
79
- if (this.isValid()) {
83
+ if (__classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_instances, "m", _SkyTextEditorUrlModalComponent_isValid).call(this)) {
80
84
  if (this.activeTab === 0) {
81
- this.modalInstance.save({
85
+ __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_modalInstance, "f").save({
82
86
  url: this.url,
83
87
  target: this.target
84
88
  ? parseInt(this.target, undefined)
@@ -86,32 +90,31 @@ export class SkyTextEditorUrlModalComponent {
86
90
  });
87
91
  }
88
92
  else {
89
- this.modalInstance.save({
90
- url: this.getEmailUrl(),
93
+ __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_modalInstance, "f").save({
94
+ url: __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_instances, "m", _SkyTextEditorUrlModalComponent_getEmailUrl).call(this),
91
95
  target: UrlTarget.None,
92
96
  });
93
97
  }
94
98
  }
95
99
  }
96
100
  cancel() {
97
- this.modalInstance.cancel();
98
- }
99
- getEmailUrl() {
100
- return (emailKey +
101
- this.emailAddress +
102
- (this.subject ? '?Subject=' + encodeURI(this.subject) : ''));
103
- }
104
- isValid() {
105
- if (this.activeTab === 0) {
106
- return !!this.url && SkyValidation.isUrl(this.url);
107
- }
108
- return !!this.emailAddress && SkyValidation.isEmail(this.emailAddress);
101
+ __classPrivateFieldGet(this, _SkyTextEditorUrlModalComponent_modalInstance, "f").cancel();
109
102
  }
110
103
  }
104
+ _SkyTextEditorUrlModalComponent_modalInstance = new WeakMap(), _SkyTextEditorUrlModalComponent__activeTab = new WeakMap(), _SkyTextEditorUrlModalComponent__emailAddress = new WeakMap(), _SkyTextEditorUrlModalComponent__url = new WeakMap(), _SkyTextEditorUrlModalComponent_instances = new WeakSet(), _SkyTextEditorUrlModalComponent_getEmailUrl = function _SkyTextEditorUrlModalComponent_getEmailUrl() {
105
+ return (emailKey +
106
+ this.emailAddress +
107
+ (this.subject ? '?Subject=' + encodeURI(this.subject) : ''));
108
+ }, _SkyTextEditorUrlModalComponent_isValid = function _SkyTextEditorUrlModalComponent_isValid() {
109
+ if (this.activeTab === 0) {
110
+ return !!this.url && SkyValidation.isUrl(this.url);
111
+ }
112
+ return !!this.emailAddress && SkyValidation.isEmail(this.emailAddress);
113
+ };
111
114
  SkyTextEditorUrlModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyTextEditorUrlModalComponent, deps: [{ token: i1.SkyModalInstance }, { token: i2.SkyUrlModalContext }], target: i0.ɵɵFactoryTarget.Component });
112
115
  SkyTextEditorUrlModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: SkyTextEditorUrlModalComponent, selector: "sky-text-editor-url-modal", ngImport: i0, template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_text_editor_url_modal_header_label' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content>\n <sky-tabset\n data-sky-id=\"test-tabset\"\n [active]=\"activeTab\"\n (activeChange)=\"activeTabChanged($event)\"\n >\n <sky-tab tabHeading=\"Web page\">\n <div class=\"sky-form-group sky-text-editor-url-modal-first-field\">\n <sky-input-box>\n <label\n class=\"sky-control-label sky-control-label-required\"\n [for]=\"urlInput.id\"\n >\n {{ 'skyux_text_editor_url_modal_url_label' | skyLibResources }}\n </label>\n <input\n class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"url\"\n skyId\n #urlInput=\"skyId\"\n />\n </sky-input-box>\n </div>\n <sky-input-box class=\"sky-form-group\">\n <label class=\"sky-control-label\" [for]=\"targetInput.id\">\n {{ 'skyux_text_editor_url_modal_open_label' | skyLibResources }}\n </label>\n <select\n class=\"sky-form-control\"\n [(ngModel)]=\"target\"\n skyId\n #targetInput=\"skyId\"\n >\n <option value=\"0\">\n {{\n 'skyux_text_editor_url_modal_current_option_label'\n | skyLibResources\n }}\n </option>\n <option value=\"1\">\n {{\n 'skyux_text_editor_url_modal_new_option_label' | skyLibResources\n }}\n </option>\n </select>\n </sky-input-box>\n </sky-tab>\n <sky-tab tabHeading=\"Email address\">\n <div class=\"sky-form-group first-field\">\n <sky-input-box>\n <label\n class=\"sky-control-label sky-control-label-required\"\n [for]=\"emailAddressInput.id\"\n >\n {{ 'skyux_text_editor_url_modal_email_label' | skyLibResources }}\n </label>\n <input\n class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"emailAddress\"\n skyId\n #emailAddressInput=\"skyId\"\n />\n </sky-input-box>\n </div>\n <sky-input-box class=\"sky-form-group\">\n <label class=\"sky-control-label\" [for]=\"subjectInput.id\">\n {{ 'skyux_text_editor_url_modal_subject_label' | skyLibResources }}\n </label>\n <input\n class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"subject\"\n skyId\n #subjectInput=\"skyId\"\n />\n </sky-input-box>\n </sky-tab>\n </sky-tabset>\n </sky-modal-content>\n <sky-modal-footer>\n <button\n type=\"submit\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!valid\"\n (click)=\"save()\"\n >\n {{ 'skyux_text_editor_url_modal_save_button_label' | skyLibResources }}\n </button>\n <button type=\"button\" class=\"sky-btn sky-btn-link\" (click)=\"cancel()\">\n {{ 'skyux_text_editor_url_modal_cancel_button_label' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-text-editor-url-modal-first-field{margin-top:15px}\n"], dependencies: [{ kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "component", type: i5.λ10, selector: "sky-input-box", inputs: ["hasErrors", "disabled"] }, { kind: "component", type: i1.λ5, selector: "sky-modal", inputs: ["ariaRole", "tiledBody"] }, { kind: "component", type: i1.λ2, selector: "sky-modal-content" }, { kind: "component", type: i1.λ3, selector: "sky-modal-footer" }, { kind: "component", type: i1.λ4, selector: "sky-modal-header" }, { kind: "component", type: i6.λ1, selector: "sky-tab", inputs: ["active", "disabled", "permalinkValue", "tabHeaderCount", "tabHeading", "tabIndex"], outputs: ["close"] }, { kind: "component", type: i6.λ2, selector: "sky-tabset", inputs: ["active", "ariaLabel", "ariaLabelledBy", "permalinkId", "tabStyle"], outputs: ["activeChange", "newTab", "openTab", "tabIndexesChange"] }, { kind: "pipe", type: i7.SkyLibResourcesPipe, name: "skyLibResources" }] });
113
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyTextEditorUrlModalComponent, decorators: [{
114
117
  type: Component,
115
118
  args: [{ selector: 'sky-text-editor-url-modal', template: "<sky-modal>\n <sky-modal-header>\n {{ 'skyux_text_editor_url_modal_header_label' | skyLibResources }}\n </sky-modal-header>\n <sky-modal-content>\n <sky-tabset\n data-sky-id=\"test-tabset\"\n [active]=\"activeTab\"\n (activeChange)=\"activeTabChanged($event)\"\n >\n <sky-tab tabHeading=\"Web page\">\n <div class=\"sky-form-group sky-text-editor-url-modal-first-field\">\n <sky-input-box>\n <label\n class=\"sky-control-label sky-control-label-required\"\n [for]=\"urlInput.id\"\n >\n {{ 'skyux_text_editor_url_modal_url_label' | skyLibResources }}\n </label>\n <input\n class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"url\"\n skyId\n #urlInput=\"skyId\"\n />\n </sky-input-box>\n </div>\n <sky-input-box class=\"sky-form-group\">\n <label class=\"sky-control-label\" [for]=\"targetInput.id\">\n {{ 'skyux_text_editor_url_modal_open_label' | skyLibResources }}\n </label>\n <select\n class=\"sky-form-control\"\n [(ngModel)]=\"target\"\n skyId\n #targetInput=\"skyId\"\n >\n <option value=\"0\">\n {{\n 'skyux_text_editor_url_modal_current_option_label'\n | skyLibResources\n }}\n </option>\n <option value=\"1\">\n {{\n 'skyux_text_editor_url_modal_new_option_label' | skyLibResources\n }}\n </option>\n </select>\n </sky-input-box>\n </sky-tab>\n <sky-tab tabHeading=\"Email address\">\n <div class=\"sky-form-group first-field\">\n <sky-input-box>\n <label\n class=\"sky-control-label sky-control-label-required\"\n [for]=\"emailAddressInput.id\"\n >\n {{ 'skyux_text_editor_url_modal_email_label' | skyLibResources }}\n </label>\n <input\n class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"emailAddress\"\n skyId\n #emailAddressInput=\"skyId\"\n />\n </sky-input-box>\n </div>\n <sky-input-box class=\"sky-form-group\">\n <label class=\"sky-control-label\" [for]=\"subjectInput.id\">\n {{ 'skyux_text_editor_url_modal_subject_label' | skyLibResources }}\n </label>\n <input\n class=\"sky-form-control\"\n type=\"text\"\n [(ngModel)]=\"subject\"\n skyId\n #subjectInput=\"skyId\"\n />\n </sky-input-box>\n </sky-tab>\n </sky-tabset>\n </sky-modal-content>\n <sky-modal-footer>\n <button\n type=\"submit\"\n class=\"sky-btn sky-btn-primary\"\n [disabled]=\"!valid\"\n (click)=\"save()\"\n >\n {{ 'skyux_text_editor_url_modal_save_button_label' | skyLibResources }}\n </button>\n <button type=\"button\" class=\"sky-btn sky-btn-link\" (click)=\"cancel()\">\n {{ 'skyux_text_editor_url_modal_cancel_button_label' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n", styles: [".sky-text-editor-url-modal-first-field{margin-top:15px}\n"] }]
116
119
  }], ctorParameters: function () { return [{ type: i1.SkyModalInstance }, { type: i2.SkyUrlModalContext }]; } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBRXJELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUMzQixNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQztBQUV4Qzs7R0FFRztBQU1ILE1BQU0sT0FBTyw4QkFBOEI7SUFzQ3pDLFlBQ21CLGFBQStCLEVBQ2hELFlBQWdDO1FBRGYsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBZjNDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVYLFVBQUssR0FBRyxLQUFLLENBQUM7UUFFZCxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRWQsa0JBQWEsR0FBRyxFQUFFLENB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QUFDLElBQUksQ0FBQyxNQUFhLEVBQUUsU0FBUyxDQUFDO3dCQUN6QyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUk7aUJBQ0QsQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO29CQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDdkIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2lCQUNMLENBQUMsQ0FBQzthQUN0QjtTQUNGO0lBQ0gsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE9BQU8sQ0FDTCxRQUFRO1lBQ1IsSUFBSSxDQUFDLFlBQVk7WUFDakIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQzVELENBQUM7SUFDSixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekUsQ0FBQzs7MkhBaEhVLDhCQUE4QjsrR0FBOUIsOEJBQThCLGlFQ3BCM0MsK3hHQW1HQTsyRkQvRWEsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TW9kYWxJbnN0YW5jZSB9IGZyb20gJ0Bza3l1eC9tb2RhbHMnO1xuaW1wb3J0IHsgU2t5VGFiSW5kZXggfSBmcm9tICdAc2t5dXgvdGFicyc7XG5pbXBvcnQgeyBTa3lWYWxpZGF0aW9uIH0gZnJvbSAnQHNreXV4L3ZhbGlkYXRpb24nO1xuXG5pbXBvcnQgeyBTa3lVcmxNb2RhbENvbnRleHQgfSBmcm9tICcuL3RleHQtZWRpdG9yLXVybC1tb2RhbC1jb250ZXh0JztcbmltcG9ydCB7IFVybE1vZGFsUmVzdWx0IH0gZnJvbSAnLi90ZXh0LWVkaXRvci11cmwtbW9kYWwtcmVzdWx0JztcbmltcG9ydCB7IFVybFRhcmdldCB9IGZyb20gJy4vdGV4dC1lZGl0b3ItdXJsLXRhcmdldCc7XG5cbmNvbnN0IGVtYWlsS2V5ID0gJ21haWx0bzonO1xuY29uc3QgcXVlcnlTdHJpbmdQYXJhbUtleSA9ICc/U3ViamVjdD0nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktdGV4dC1lZGl0b3ItdXJsLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtZWRpdG9yLXVybC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtZWRpdG9yLXVybC1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yVXJsTW9kYWxDb21wb25lbnQge1xuICBwdWJsaWMgc2V0IGFjdGl2ZVRhYih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fYWN0aXZlVGFiID0gdmFsdWU7XG4gICAgdGhpcy52YWxpZCA9IHRoaXMuaXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVRhYjtcbiAgfVxuICBwdWJsaWMgc2V0IGVtYWlsQWRkcmVzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW1haWxBZGRyZXNzID0gdmFsdWU7XG4gICAgdGhpcy52YWxpZCA9IHRoaXMuaXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgZW1haWxBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2VtYWlsQWRkcmVzcztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdXJsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl91cmwgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbGlkID0gdGhpcy5pc1ZhbGlkKCk7XG4gIH1cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgcHVibGljIGVtYWlsQWRkcmVzc1ZhbGlkID0gZmFsc2U7XG5cbiAgcHVibGljIHN1YmplY3QgPSAnJztcblxuICBwdWJsaWMgdGFyZ2V0ID0gMDtcblxuICBwdWJsaWMgdmFsaWQgPSBmYWxzZTtcblxuICBwdWJsaWMgX2FjdGl2ZVRhYiA9IDA7XG5cbiAgcHJpdmF0ZSBfZW1haWxBZGRyZXNzID0gJyc7XG5cbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsSW5zdGFuY2U6IFNreU1vZGFsSW5zdGFuY2UsXG4gICAgbW9kYWxDb250ZXh0OiBTa3lVcmxNb2RhbENvbnRleHRcbiAgKSB7XG4gICAgaWYgKG1vZGFsQ29udGV4dC51cmxSZXN1bHQpIHtcbiAgICAgIGlmIChtb2RhbENvbnRleHQudXJsUmVzdWx0LnVybC5zdGFydHNXaXRoKGVtYWlsS2V5KSkge1xuICAgICAgICB0aGlzLmVtYWlsQWRkcmVzcyA9IG1vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsLnJlcGxhY2UoZW1haWxLZXksICcnKTtcblxuICAgICAgICBsZXQgcXVlcnlTdHJpbmdJbmRleCA9IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleSk7XG4gICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPVxuICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPiAtMVxuICAgICAgICAgICAgPyBxdWVyeVN0cmluZ0luZGV4XG4gICAgICAgICAgICA6IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5zdWJqZWN0ID0gZGVjb2RlVVJJKHRoaXMuZW1haWxBZGRyZXNzKS5zbGljZShcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggKyBxdWVyeVN0cmluZ1BhcmFtS2V5Lmxlbmd0aFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5lbWFpbEFkZHJlc3MgPSB0aGlzLmVtYWlsQWRkcmVzcy5zbGljZSgwLCBxdWVyeVN0cmluZ0luZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBhY3RpdmUgdGFiIHRvIGVtYWlsXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICh0aGlzLnVybCA9IG1vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsKSxcbiAgICAgICAgICAodGhpcy50YXJnZXQgPSBtb2RhbENvbnRleHQudXJsUmVzdWx0LnRhcmdldCBhcyBhbnkpO1xuXG4gICAgICAgIC8vIHNldCBhY3RpdmUgdGFiIHRvIHdlYiBwYWdlXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWN0aXZlVGFiQ2hhbmdlZCh2YWx1ZTogU2t5VGFiSW5kZXgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IE51bWJlcih2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiID09PSAwKSB7XG4gICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5zYXZlKHtcbiAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgIHRhcmdldDogdGhpcy50YXJnZXRcbiAgICAgICAgICAgID8gcGFyc2VJbnQodGhpcy50YXJnZXQgYXMgYW55LCB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IFVybFRhcmdldC5Ob25lLFxuICAgICAgICB9IGFzIFVybE1vZGFsUmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5zYXZlKHtcbiAgICAgICAgICB1cmw6IHRoaXMuZ2V0RW1haWxVcmwoKSxcbiAgICAgICAgICB0YXJnZXQ6IFVybFRhcmdldC5Ob25lLFxuICAgICAgICB9IGFzIFVybE1vZGFsUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxJbnN0YW5jZS5jYW5jZWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW1haWxVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgZW1haWxLZXkgK1xuICAgICAgdGhpcy5lbWFpbEFkZHJlc3MgK1xuICAgICAgKHRoaXMuc3ViamVjdCA/ICc/U3ViamVjdD0nICsgZW5jb2RlVVJJKHRoaXMuc3ViamVjdCkgOiAnJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYiA9PT0gMCkge1xuICAgICAgcmV0dXJuICEhdGhpcy51cmwgJiYgU2t5VmFsaWRhdGlvbi5pc1VybCh0aGlzLnVybCk7XG4gICAgfVxuICAgIHJldHVybiAhIXRoaXMuZW1haWxBZGRyZXNzICYmIFNreVZhbGlkYXRpb24uaXNFbWFpbCh0aGlzLmVtYWlsQWRkcmVzcyk7XG4gIH1cbn1cbiIsIjxza3ktbW9kYWw+XG4gIDxza3ktbW9kYWwtaGVhZGVyPlxuICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfaGVhZGVyX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICA8L3NreS1tb2RhbC1oZWFkZXI+XG4gIDxza3ktbW9kYWwtY29udGVudD5cbiAgICA8c2t5LXRhYnNldFxuICAgICAgZGF0YS1za3ktaWQ9XCJ0ZXN0LXRhYnNldFwiXG4gICAgICBbYWN0aXZlXT1cImFjdGl2ZVRhYlwiXG4gICAgICAoYWN0aXZlQ2hhbmdlKT1cImFjdGl2ZVRhYkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNreS10YWIgdGFiSGVhZGluZz1cIldlYiBwYWdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZm9ybS1ncm91cCBza3ktdGV4dC1lZGl0b3ItdXJsLW1vZGFsLWZpcnN0LWZpZWxkXCI+XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3g+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbCBza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZFwiXG4gICAgICAgICAgICAgIFtmb3JdPVwidXJsSW5wdXQuaWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3VybF9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVybFwiXG4gICAgICAgICAgICAgIHNreUlkXG4gICAgICAgICAgICAgICN1cmxJbnB1dD1cInNreUlkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9za3ktaW5wdXQtYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNreS1pbnB1dC1ib3ggY2xhc3M9XCJza3ktZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsXCIgW2Zvcl09XCJ0YXJnZXRJbnB1dC5pZFwiPlxuICAgICAgICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9vcGVuX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFyZ2V0XCJcbiAgICAgICAgICAgIHNreUlkXG4gICAgICAgICAgICAjdGFyZ2V0SW5wdXQ9XCJza3lJZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjBcIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2N1cnJlbnRfb3B0aW9uX2xhYmVsJ1xuICAgICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX25ld19vcHRpb25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9za3ktaW5wdXQtYm94PlxuICAgICAgPC9za3ktdGFiPlxuICAgICAgPHNreS10YWIgdGFiSGVhZGluZz1cIkVtYWlsIGFkZHJlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1mb3JtLWdyb3VwIGZpcnN0LWZpZWxkXCI+XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3g+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbCBza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZFwiXG4gICAgICAgICAgICAgIFtmb3JdPVwiZW1haWxBZGRyZXNzSW5wdXQuaWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2VtYWlsX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxBZGRyZXNzXCJcbiAgICAgICAgICAgICAgc2t5SWRcbiAgICAgICAgICAgICAgI2VtYWlsQWRkcmVzc0lucHV0PVwic2t5SWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NreS1pbnB1dC1ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2t5LWlucHV0LWJveCBjbGFzcz1cInNreS1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2t5LWNvbnRyb2wtbGFiZWxcIiBbZm9yXT1cInN1YmplY3RJbnB1dC5pZFwiPlxuICAgICAgICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9zdWJqZWN0X2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdWJqZWN0XCJcbiAgICAgICAgICAgIHNreUlkXG4gICAgICAgICAgICAjc3ViamVjdElucHV0PVwic2t5SWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc2t5LWlucHV0LWJveD5cbiAgICAgIDwvc2t5LXRhYj5cbiAgICA8L3NreS10YWJzZXQ+XG4gIDwvc2t5LW1vZGFsLWNvbnRlbnQ+XG4gIDxza3ktbW9kYWwtZm9vdGVyPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tcHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZhbGlkXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc2F2ZV9idXR0b25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGlua1wiIChjbGljayk9XCJjYW5jZWwoKVwiPlxuICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9jYW5jZWxfYnV0dG9uX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L3NreS1tb2RhbC1mb290ZXI+XG48L3NreS1tb2RhbD5cbiJdfQ==
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90ZXh0LWVkaXRvci9zcmMvbGliL21vZHVsZXMvdGV4dC1lZGl0b3IvdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7QUFFckQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQzNCLE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDO0FBRXhDOztHQUVHO0FBTUgsTUFBTSxPQUFPLDhCQUE4QjtJQXVDekMsWUFDRSxhQUErQixFQUMvQixZQUFnQzs7UUFiM0Isc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixXQUFNLEdBQW9CLENBQUMsQ0FBQztRQUM1QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGdFQUFpQztRQUVqQyxxREFBYyxDQUFDLEVBQUM7UUFDaEIsd0RBQWlCLEVBQUUsRUFBQztRQUNwQiwrQ0FBUSxV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b3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lNb2RhbEluc3RhbmNlIH0gZnJvbSAnQHNreXV4L21vZGFscyc7XG5pbXBvcnQgeyBTa3lUYWJJbmRleCB9IGZyb20gJ0Bza3l1eC90YWJzJztcbmltcG9ydCB7IFNreVZhbGlkYXRpb24gfSBmcm9tICdAc2t5dXgvdmFsaWRhdGlvbic7XG5cbmltcG9ydCB7IFNreVVybE1vZGFsQ29udGV4dCB9IGZyb20gJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLWNvbnRleHQnO1xuaW1wb3J0IHsgVXJsTW9kYWxSZXN1bHQgfSBmcm9tICcuL3RleHQtZWRpdG9yLXVybC1tb2RhbC1yZXN1bHQnO1xuaW1wb3J0IHsgVXJsVGFyZ2V0IH0gZnJvbSAnLi90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuY29uc3QgZW1haWxLZXkgPSAnbWFpbHRvOic7XG5jb25zdCBxdWVyeVN0cmluZ1BhcmFtS2V5ID0gJz9TdWJqZWN0PSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10ZXh0LWVkaXRvci11cmwtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGV4dC1lZGl0b3ItdXJsLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JVcmxNb2RhbENvbXBvbmVudCB7XG4gIHB1YmxpYyBzZXQgYWN0aXZlVGFiKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLiNfYWN0aXZlVGFiID0gdmFsdWU7XG4gICAgdGhpcy52YWxpZCA9IHRoaXMuI2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19hY3RpdmVUYWI7XG4gIH1cblxuICBwdWJsaWMgc2V0IGVtYWlsQWRkcmVzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy4jX2VtYWlsQWRkcmVzcyA9IHZhbHVlO1xuICAgIHRoaXMudmFsaWQgPSB0aGlzLiNpc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVtYWlsQWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNfZW1haWxBZGRyZXNzO1xuICB9XG5cbiAgcHVibGljIHNldCB1cmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuI191cmwgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbGlkID0gdGhpcy4jaXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX3VybDtcbiAgfVxuXG4gIHB1YmxpYyBlbWFpbEFkZHJlc3NWYWxpZCA9IGZhbHNlO1xuICBwdWJsaWMgc3ViamVjdCA9ICcnO1xuICBwdWJsaWMgdGFyZ2V0OiBudW1iZXIgfCBzdHJpbmcgPSAwO1xuICBwdWJsaWMgdmFsaWQgPSBmYWxzZTtcblxuICAjbW9kYWxJbnN0YW5jZTogU2t5TW9kYWxJbnN0YW5jZTtcblxuICAjX2FjdGl2ZVRhYiA9IDA7XG4gICNfZW1haWxBZGRyZXNzID0gJyc7XG4gICNfdXJsID0gJ2h0dHBzOi8vJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtb2RhbEluc3RhbmNlOiBTa3lNb2RhbEluc3RhbmNlLFxuICAgIG1vZGFsQ29udGV4dDogU2t5VXJsTW9kYWxDb250ZXh0XG4gICkge1xuICAgIHRoaXMuI21vZGFsSW5zdGFuY2UgPSBtb2RhbEluc3RhbmNlO1xuXG4gICAgaWYgKG1vZGFsQ29udGV4dC51cmxSZXN1bHQpIHtcbiAgICAgIGlmIChtb2RhbENvbnRleHQudXJsUmVzdWx0LnVybC5zdGFydHNXaXRoKGVtYWlsS2V5KSkge1xuICAgICAgICB0aGlzLmVtYWlsQWRkcmVzcyA9IG1vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsLnJlcGxhY2UoZW1haWxLZXksICcnKTtcblxuICAgICAgICBsZXQgcXVlcnlTdHJpbmdJbmRleCA9IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleSk7XG4gICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPVxuICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggPiAtMVxuICAgICAgICAgICAgPyBxdWVyeVN0cmluZ0luZGV4XG4gICAgICAgICAgICA6IHRoaXMuZW1haWxBZGRyZXNzLmluZGV4T2YocXVlcnlTdHJpbmdQYXJhbUtleS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocXVlcnlTdHJpbmdJbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5zdWJqZWN0ID0gZGVjb2RlVVJJKHRoaXMuZW1haWxBZGRyZXNzKS5zbGljZShcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nSW5kZXggKyBxdWVyeVN0cmluZ1BhcmFtS2V5Lmxlbmd0aFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5lbWFpbEFkZHJlc3MgPSB0aGlzLmVtYWlsQWRkcmVzcy5zbGljZSgwLCBxdWVyeVN0cmluZ0luZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBhY3RpdmUgdGFiIHRvIGVtYWlsXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICh0aGlzLnVybCA9IG1vZGFsQ29udGV4dC51cmxSZXN1bHQudXJsKSxcbiAgICAgICAgICAodGhpcy50YXJnZXQgPSBtb2RhbENvbnRleHQudXJsUmVzdWx0LnRhcmdldCBhcyBhbnkpO1xuXG4gICAgICAgIC8vIHNldCBhY3RpdmUgdGFiIHRvIHdlYiBwYWdlXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWN0aXZlVGFiQ2hhbmdlZCh2YWx1ZTogU2t5VGFiSW5kZXgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IE51bWJlcih2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiNpc1ZhbGlkKCkpIHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYiA9PT0gMCkge1xuICAgICAgICB0aGlzLiNtb2RhbEluc3RhbmNlLnNhdmUoe1xuICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldFxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnRhcmdldCBhcyBzdHJpbmcsIHVuZGVmaW5lZClcbiAgICAgICAgICAgIDogVXJsVGFyZ2V0Lk5vbmUsXG4gICAgICAgIH0gYXMgVXJsTW9kYWxSZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jbW9kYWxJbnN0YW5jZS5zYXZlKHtcbiAgICAgICAgICB1cmw6IHRoaXMuI2dldEVtYWlsVXJsKCksXG4gICAgICAgICAgdGFyZ2V0OiBVcmxUYXJnZXQuTm9uZSxcbiAgICAgICAgfSBhcyBVcmxNb2RhbFJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLiNtb2RhbEluc3RhbmNlLmNhbmNlbCgpO1xuICB9XG5cbiAgI2dldEVtYWlsVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVtYWlsS2V5ICtcbiAgICAgIHRoaXMuZW1haWxBZGRyZXNzICtcbiAgICAgICh0aGlzLnN1YmplY3QgPyAnP1N1YmplY3Q9JyArIGVuY29kZVVSSSh0aGlzLnN1YmplY3QpIDogJycpXG4gICAgKTtcbiAgfVxuXG4gICNpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYiA9PT0gMCkge1xuICAgICAgcmV0dXJuICEhdGhpcy51cmwgJiYgU2t5VmFsaWRhdGlvbi5pc1VybCh0aGlzLnVybCk7XG4gICAgfVxuICAgIHJldHVybiAhIXRoaXMuZW1haWxBZGRyZXNzICYmIFNreVZhbGlkYXRpb24uaXNFbWFpbCh0aGlzLmVtYWlsQWRkcmVzcyk7XG4gIH1cbn1cbiIsIjxza3ktbW9kYWw+XG4gIDxza3ktbW9kYWwtaGVhZGVyPlxuICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfaGVhZGVyX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICA8L3NreS1tb2RhbC1oZWFkZXI+XG4gIDxza3ktbW9kYWwtY29udGVudD5cbiAgICA8c2t5LXRhYnNldFxuICAgICAgZGF0YS1za3ktaWQ9XCJ0ZXN0LXRhYnNldFwiXG4gICAgICBbYWN0aXZlXT1cImFjdGl2ZVRhYlwiXG4gICAgICAoYWN0aXZlQ2hhbmdlKT1cImFjdGl2ZVRhYkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNreS10YWIgdGFiSGVhZGluZz1cIldlYiBwYWdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza3ktZm9ybS1ncm91cCBza3ktdGV4dC1lZGl0b3ItdXJsLW1vZGFsLWZpcnN0LWZpZWxkXCI+XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3g+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbCBza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZFwiXG4gICAgICAgICAgICAgIFtmb3JdPVwidXJsSW5wdXQuaWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3VybF9sYWJlbCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVybFwiXG4gICAgICAgICAgICAgIHNreUlkXG4gICAgICAgICAgICAgICN1cmxJbnB1dD1cInNreUlkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9za3ktaW5wdXQtYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNreS1pbnB1dC1ib3ggY2xhc3M9XCJza3ktZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNreS1jb250cm9sLWxhYmVsXCIgW2Zvcl09XCJ0YXJnZXRJbnB1dC5pZFwiPlxuICAgICAgICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9vcGVuX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJza3ktZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFyZ2V0XCJcbiAgICAgICAgICAgIHNreUlkXG4gICAgICAgICAgICAjdGFyZ2V0SW5wdXQ9XCJza3lJZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjBcIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2N1cnJlbnRfb3B0aW9uX2xhYmVsJ1xuICAgICAgICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXNcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjFcIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX25ld19vcHRpb25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9za3ktaW5wdXQtYm94PlxuICAgICAgPC9za3ktdGFiPlxuICAgICAgPHNreS10YWIgdGFiSGVhZGluZz1cIkVtYWlsIGFkZHJlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNreS1mb3JtLWdyb3VwIGZpcnN0LWZpZWxkXCI+XG4gICAgICAgICAgPHNreS1pbnB1dC1ib3g+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJza3ktY29udHJvbC1sYWJlbCBza3ktY29udHJvbC1sYWJlbC1yZXF1aXJlZFwiXG4gICAgICAgICAgICAgIFtmb3JdPVwiZW1haWxBZGRyZXNzSW5wdXQuaWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2VtYWlsX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxBZGRyZXNzXCJcbiAgICAgICAgICAgICAgc2t5SWRcbiAgICAgICAgICAgICAgI2VtYWlsQWRkcmVzc0lucHV0PVwic2t5SWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NreS1pbnB1dC1ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2t5LWlucHV0LWJveCBjbGFzcz1cInNreS1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2t5LWNvbnRyb2wtbGFiZWxcIiBbZm9yXT1cInN1YmplY3RJbnB1dC5pZFwiPlxuICAgICAgICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9zdWJqZWN0X2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdWJqZWN0XCJcbiAgICAgICAgICAgIHNreUlkXG4gICAgICAgICAgICAjc3ViamVjdElucHV0PVwic2t5SWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc2t5LWlucHV0LWJveD5cbiAgICAgIDwvc2t5LXRhYj5cbiAgICA8L3NreS10YWJzZXQ+XG4gIDwvc2t5LW1vZGFsLWNvbnRlbnQ+XG4gIDxza3ktbW9kYWwtZm9vdGVyPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tcHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZhbGlkXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfc2F2ZV9idXR0b25fbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGlua1wiIChjbGljayk9XCJjYW5jZWwoKVwiPlxuICAgICAge3sgJ3NreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9jYW5jZWxfYnV0dG9uX2xhYmVsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L3NreS1tb2RhbC1mb290ZXI+XG48L3NreS1tb2RhbD5cbiJdfQ==