@covalent/flavored-markdown 4.0.0-alpha.0 → 4.0.0-beta.1

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 (35) hide show
  1. package/README.md +1 -1
  2. package/_flavored-markdown-theme.scss +1 -0
  3. package/cfm-list/cfm-list.component.d.ts +3 -0
  4. package/covalent-flavored-markdown.d.ts +1 -1
  5. package/esm2020/cfm-list/cfm-list.component.mjs +60 -0
  6. package/esm2020/covalent-flavored-markdown.mjs +5 -0
  7. package/esm2020/flavored-markdown-loader/flavored-markdown-loader.component.mjs +102 -0
  8. package/esm2020/flavored-markdown.component.mjs +476 -0
  9. package/esm2020/flavored-markdown.module.mjs +69 -0
  10. package/esm2020/index.mjs +2 -0
  11. package/esm2020/public_api.mjs +4 -0
  12. package/fesm2015/covalent-flavored-markdown.mjs +763 -0
  13. package/fesm2015/covalent-flavored-markdown.mjs.map +1 -0
  14. package/fesm2020/covalent-flavored-markdown.mjs +695 -0
  15. package/fesm2020/covalent-flavored-markdown.mjs.map +1 -0
  16. package/flavored-markdown-loader/flavored-markdown-loader.component.d.ts +3 -0
  17. package/flavored-markdown-loader/flavored-markdown-loader.component.scss +4 -2
  18. package/flavored-markdown.component.d.ts +9 -0
  19. package/flavored-markdown.component.scss +2 -0
  20. package/flavored-markdown.module.d.ts +16 -0
  21. package/package.json +35 -20
  22. package/bundles/covalent-flavored-markdown.umd.js +0 -1310
  23. package/bundles/covalent-flavored-markdown.umd.js.map +0 -1
  24. package/bundles/covalent-flavored-markdown.umd.min.js +0 -16
  25. package/bundles/covalent-flavored-markdown.umd.min.js.map +0 -1
  26. package/covalent-flavored-markdown.metadata.json +0 -1
  27. package/esm2015/cfm-list/cfm-list.component.js +0 -39
  28. package/esm2015/covalent-flavored-markdown.js +0 -11
  29. package/esm2015/flavored-markdown-loader/flavored-markdown-loader.component.js +0 -159
  30. package/esm2015/flavored-markdown.component.js +0 -754
  31. package/esm2015/flavored-markdown.module.js +0 -45
  32. package/esm2015/index.js +0 -7
  33. package/esm2015/public_api.js +0 -9
  34. package/fesm2015/covalent-flavored-markdown.js +0 -1005
  35. package/fesm2015/covalent-flavored-markdown.js.map +0 -1
package/README.md CHANGED
@@ -92,7 +92,7 @@ $warn: mat-palette($mat-red, 600);
92
92
 
93
93
  $theme: mat-light-theme($primary, $accent, $warn);
94
94
 
95
- @include angular-material-theme($theme);
95
+ @include mat.all-component-themes($theme);
96
96
  @include covalent-theme($theme);
97
97
  @include covalent-markdown-theme($theme);
98
98
  @include covalent-highlight-theme();
@@ -4,6 +4,7 @@
4
4
  $warn: map-get($theme, warn);
5
5
  $foreground: map-get($theme, foreground);
6
6
  $background: map-get($theme, background);
7
+
7
8
  td-flavored-markdown {
8
9
  :not(pre) > code {
9
10
  background: #1e1e21;
@@ -1,3 +1,4 @@
1
+ import * as i0 from "@angular/core";
1
2
  export interface IFlavoredListItem {
2
3
  line: string;
3
4
  sublines?: string[];
@@ -5,4 +6,6 @@ export interface IFlavoredListItem {
5
6
  export declare class TdFlavoredListComponent {
6
7
  lines: IFlavoredListItem[];
7
8
  dense: boolean;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdFlavoredListComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdFlavoredListComponent, "cfm-list", never, { "lines": "lines"; "dense": "dense"; }, {}, never, never>;
8
11
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
+ /// <amd-module name="@covalent/flavored-markdown" />
4
5
  export * from './index';
5
- export { TdFlavoredListComponent as ɵa } from './cfm-list/cfm-list.component';
@@ -0,0 +1,60 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/list";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/material/core";
6
+ import * as i4 from "@angular/material/divider";
7
+ function TdFlavoredListComponent_ng_template_1_p_3_Template(rf, ctx) { if (rf & 1) {
8
+ i0.ɵɵelementStart(0, "p", 1);
9
+ i0.ɵɵtext(1);
10
+ i0.ɵɵelementEnd();
11
+ } if (rf & 2) {
12
+ const subline_r5 = ctx.$implicit;
13
+ i0.ɵɵadvance(1);
14
+ i0.ɵɵtextInterpolate1(" ", subline_r5, " ");
15
+ } }
16
+ function TdFlavoredListComponent_ng_template_1_mat_divider_4_Template(rf, ctx) { if (rf & 1) {
17
+ i0.ɵɵelement(0, "mat-divider");
18
+ } }
19
+ function TdFlavoredListComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelementStart(0, "mat-list-item");
21
+ i0.ɵɵelementStart(1, "h4", 1);
22
+ i0.ɵɵtext(2);
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵtemplate(3, TdFlavoredListComponent_ng_template_1_p_3_Template, 2, 1, "p", 2);
25
+ i0.ɵɵtemplate(4, TdFlavoredListComponent_ng_template_1_mat_divider_4_Template, 1, 0, "mat-divider", 3);
26
+ i0.ɵɵelementEnd();
27
+ } if (rf & 2) {
28
+ const line_r1 = ctx.$implicit;
29
+ const last_r2 = ctx.last;
30
+ i0.ɵɵadvance(2);
31
+ i0.ɵɵtextInterpolate1(" ", line_r1.line, " ");
32
+ i0.ɵɵadvance(1);
33
+ i0.ɵɵproperty("ngForOf", line_r1.sublines);
34
+ i0.ɵɵadvance(1);
35
+ i0.ɵɵproperty("ngIf", !last_r2);
36
+ } }
37
+ export class TdFlavoredListComponent {
38
+ constructor() {
39
+ this.dense = false;
40
+ }
41
+ }
42
+ /** @nocollapse */ /** @nocollapse */ TdFlavoredListComponent.ɵfac = function TdFlavoredListComponent_Factory(t) { return new (t || TdFlavoredListComponent)(); };
43
+ /** @nocollapse */ /** @nocollapse */ TdFlavoredListComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TdFlavoredListComponent, selectors: [["cfm-list"]], inputs: { lines: "lines", dense: "dense" }, decls: 2, vars: 2, consts: [["ngFor", "", 3, "ngForOf"], ["matLine", ""], ["matLine", "", 4, "ngFor", "ngForOf"], [4, "ngIf"]], template: function TdFlavoredListComponent_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "mat-list");
45
+ i0.ɵɵtemplate(1, TdFlavoredListComponent_ng_template_1_Template, 5, 3, "ng-template", 0);
46
+ i0.ɵɵelementEnd();
47
+ } if (rf & 2) {
48
+ i0.ɵɵattribute("dense", ctx.dense ? true : null);
49
+ i0.ɵɵadvance(1);
50
+ i0.ɵɵproperty("ngForOf", ctx.lines);
51
+ } }, directives: [i1.MatList, i2.NgForOf, i1.MatListItem, i3.MatLine, i2.NgIf, i4.MatDivider], styles: [""] });
52
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredListComponent, [{
53
+ type: Component,
54
+ args: [{ selector: 'cfm-list', template: "<mat-list [attr.dense]=\"dense ? true : null\">\n <ng-template let-line let-last=\"last\" ngFor [ngForOf]=\"lines\">\n <mat-list-item>\n <h4 matLine>\n {{ line.line }}\n </h4>\n <p *ngFor=\"let subline of line.sublines\" matLine>\n {{ subline }}\n </p>\n <mat-divider *ngIf=\"!last\"></mat-divider>\n </mat-list-item>\n </ng-template>\n</mat-list>\n", styles: [""] }]
55
+ }], null, { lines: [{
56
+ type: Input
57
+ }], dense: [{
58
+ type: Input
59
+ }] }); })();
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZtLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3BsYXRmb3JtL2ZsYXZvcmVkLW1hcmtkb3duL2NmbS1saXN0L2NmbS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybS9mbGF2b3JlZC1tYXJrZG93bi9jZm0tbGlzdC9jZm0tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztJQ00zQyw0QkFBaUQ7SUFDL0MsWUFDRjtJQUFBLGlCQUFJOzs7SUFERixlQUNGO0lBREUsMkNBQ0Y7OztJQUNBLDhCQUF5Qzs7O0lBUDNDLHFDQUFlO0lBQ2IsNkJBQVk7SUFDVixZQUNGO0lBQUEsaUJBQUs7SUFDTCxrRkFFSTtJQUNKLHNHQUF5QztJQUMzQyxpQkFBZ0I7Ozs7SUFOWixlQUNGO0lBREUsNkNBQ0Y7SUFDdUIsZUFBZ0I7SUFBaEIsMENBQWdCO0lBR3pCLGVBQVc7SUFBWCwrQkFBVzs7QURHL0IsTUFBTSxPQUFPLHVCQUF1QjtJQUxwQztRQU9XLFVBQUssR0FBWSxLQUFLLENBQUM7S0FDakM7O29JQUhZLHVCQUF1Qjs0SEFBdkIsdUJBQXVCO1FDWnBDLGdDQUE2QztRQUMzQyx3RkFVYztRQUNoQixpQkFBVzs7UUFaRCxnREFBa0M7UUFDRSxlQUFpQjtRQUFqQixtQ0FBaUI7O3VGRFdsRCx1QkFBdUI7Y0FMbkMsU0FBUzsyQkFDRSxVQUFVO2dCQUtYLEtBQUs7a0JBQWIsS0FBSztZQUNHLEtBQUs7a0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRmxhdm9yZWRMaXN0SXRlbSB7XG4gIGxpbmU6IHN0cmluZztcbiAgc3VibGluZXM/OiBzdHJpbmdbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2ZtLWxpc3QnLFxuICBzdHlsZVVybHM6IFsnLi9jZm0tbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vY2ZtLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZEZsYXZvcmVkTGlzdENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGxpbmVzOiBJRmxhdm9yZWRMaXN0SXRlbVtdO1xuICBASW5wdXQoKSBkZW5zZTogYm9vbGVhbiA9IGZhbHNlO1xufVxuIiwiPG1hdC1saXN0IFthdHRyLmRlbnNlXT1cImRlbnNlID8gdHJ1ZSA6IG51bGxcIj5cbiAgPG5nLXRlbXBsYXRlIGxldC1saW5lIGxldC1sYXN0PVwibGFzdFwiIG5nRm9yIFtuZ0Zvck9mXT1cImxpbmVzXCI+XG4gICAgPG1hdC1saXN0LWl0ZW0+XG4gICAgICA8aDQgbWF0TGluZT5cbiAgICAgICAge3sgbGluZS5saW5lIH19XG4gICAgICA8L2g0PlxuICAgICAgPHAgKm5nRm9yPVwibGV0IHN1YmxpbmUgb2YgbGluZS5zdWJsaW5lc1wiIG1hdExpbmU+XG4gICAgICAgIHt7IHN1YmxpbmUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cIiFsYXN0XCI+PC9tYXQtZGl2aWRlcj5cbiAgICA8L21hdC1saXN0LWl0ZW0+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1saXN0PlxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtZmxhdm9yZWQtbWFya2Rvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZmxhdm9yZWQtbWFya2Rvd24vY292YWxlbnQtZmxhdm9yZWQtbWFya2Rvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,102 @@
1
+ import { Component, Input, ChangeDetectorRef, Output, EventEmitter, ChangeDetectionStrategy, } from '@angular/core';
2
+ import { TdMarkdownLoaderService } from '@covalent/markdown';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@covalent/markdown";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/material/progress-bar";
7
+ import * as i4 from "../flavored-markdown.component";
8
+ function TdFlavoredMarkdownLoaderComponent_mat_progress_bar_0_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelement(0, "mat-progress-bar", 2);
10
+ } if (rf & 2) {
11
+ i0.ɵɵproperty("ngClass", "delay");
12
+ } }
13
+ function TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template(rf, ctx) { if (rf & 1) {
14
+ const _r3 = i0.ɵɵgetCurrentView();
15
+ i0.ɵɵelementStart(0, "td-flavored-markdown", 3);
16
+ i0.ɵɵlistener("contentReady", function TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template_td_flavored_markdown_contentReady_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r2 = i0.ɵɵnextContext(); return ctx_r2.contentReady.emit(); })("buttonClicked", function TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template_td_flavored_markdown_buttonClicked_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.buttonClicked.emit($event); });
17
+ i0.ɵɵelementEnd();
18
+ } if (rf & 2) {
19
+ const ctx_r1 = i0.ɵɵnextContext();
20
+ i0.ɵɵproperty("content", ctx_r1.content)("hostedUrl", ctx_r1.url)("anchor", ctx_r1.anchor)("copyCodeToClipboard", ctx_r1.copyCodeToClipboard)("copyCodeTooltips", ctx_r1.copyCodeTooltips);
21
+ } }
22
+ // TODO: make a td-markdown-loader component
23
+ export class TdFlavoredMarkdownLoaderComponent {
24
+ constructor(_changeDetectorRef, _markdownUrlLoaderService) {
25
+ this._changeDetectorRef = _changeDetectorRef;
26
+ this._markdownUrlLoaderService = _markdownUrlLoaderService;
27
+ /**
28
+ * copyCodeToClipboard?: boolean
29
+ *
30
+ * Display copy button on code snippets to copy code to clipboard.
31
+ *
32
+ */
33
+ this.copyCodeToClipboard = false;
34
+ /**
35
+ * copyCodeTooltips?: ICopyCodeTooltips
36
+ *
37
+ * Tooltips for copy button to copy and upon copying.
38
+ */
39
+ this.copyCodeTooltips = {};
40
+ /**
41
+ * contentReady: void
42
+ * Emitted when markdown rendering is finished.
43
+ */
44
+ this.contentReady = new EventEmitter();
45
+ /**
46
+ * loadFailed: Error
47
+ * Emitted when loading of markdown file fails.
48
+ */
49
+ this.loadFailed = new EventEmitter();
50
+ this.buttonClicked = new EventEmitter();
51
+ this.loading = true;
52
+ }
53
+ ngOnChanges(changes) {
54
+ if (changes.url || changes.httpOptions) {
55
+ this.loadMarkdown();
56
+ }
57
+ }
58
+ async loadMarkdown() {
59
+ this.loading = true;
60
+ this._changeDetectorRef.markForCheck();
61
+ try {
62
+ this.content = await this._markdownUrlLoaderService.load(this.url, this.httpOptions);
63
+ }
64
+ catch (error) {
65
+ this.loadFailed.emit(error);
66
+ }
67
+ finally {
68
+ this.loading = false;
69
+ this._changeDetectorRef.markForCheck();
70
+ }
71
+ }
72
+ }
73
+ /** @nocollapse */ /** @nocollapse */ TdFlavoredMarkdownLoaderComponent.ɵfac = function TdFlavoredMarkdownLoaderComponent_Factory(t) { return new (t || TdFlavoredMarkdownLoaderComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.TdMarkdownLoaderService)); };
74
+ /** @nocollapse */ /** @nocollapse */ TdFlavoredMarkdownLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: TdFlavoredMarkdownLoaderComponent, selectors: [["td-flavored-markdown-loader"]], inputs: { url: "url", httpOptions: "httpOptions", anchor: "anchor", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, outputs: { contentReady: "contentReady", loadFailed: "loadFailed", buttonClicked: "buttonClicked" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["mode", "indeterminate", "color", "accent", "class", "sticky", 3, "ngClass", 4, "ngIf"], [3, "content", "hostedUrl", "anchor", "copyCodeToClipboard", "copyCodeTooltips", "contentReady", "buttonClicked", 4, "ngIf"], ["mode", "indeterminate", "color", "accent", 1, "sticky", 3, "ngClass"], [3, "content", "hostedUrl", "anchor", "copyCodeToClipboard", "copyCodeTooltips", "contentReady", "buttonClicked"]], template: function TdFlavoredMarkdownLoaderComponent_Template(rf, ctx) { if (rf & 1) {
75
+ i0.ɵɵtemplate(0, TdFlavoredMarkdownLoaderComponent_mat_progress_bar_0_Template, 1, 1, "mat-progress-bar", 0);
76
+ i0.ɵɵtemplate(1, TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template, 1, 5, "td-flavored-markdown", 1);
77
+ } if (rf & 2) {
78
+ i0.ɵɵproperty("ngIf", ctx.loading);
79
+ i0.ɵɵadvance(1);
80
+ i0.ɵɵproperty("ngIf", !ctx.loading);
81
+ } }, directives: [i2.NgIf, i3.MatProgressBar, i2.NgClass, i4.TdFlavoredMarkdownComponent], styles: ["[_nghost-%COMP%]{display:block}.sticky[_ngcontent-%COMP%]{position:absolute;top:0}.delay[_ngcontent-%COMP%]{-webkit-animation:delay-animation;animation:delay-animation;-webkit-animation-duration:.6s;animation-duration:.6s}@-webkit-keyframes delay-animation{0%{opacity:0}99%{opacity:0}to{opacity:1}}@keyframes delay-animation{0%{opacity:0}99%{opacity:0}to{opacity:1}}"], changeDetection: 0 });
82
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredMarkdownLoaderComponent, [{
83
+ type: Component,
84
+ args: [{ selector: 'td-flavored-markdown-loader', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-progress-bar\n [ngClass]=\"'delay'\"\n *ngIf=\"loading\"\n mode=\"indeterminate\"\n color=\"accent\"\n class=\"sticky\"\n></mat-progress-bar>\n<td-flavored-markdown\n *ngIf=\"!loading\"\n [content]=\"content\"\n [hostedUrl]=\"url\"\n [anchor]=\"anchor\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n (contentReady)=\"contentReady.emit()\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n></td-flavored-markdown>\n", styles: [":host{display:block}.sticky{position:absolute;top:0}.delay{-webkit-animation:delay-animation;animation:delay-animation;-webkit-animation-duration:.6s;animation-duration:.6s}@-webkit-keyframes delay-animation{0%{opacity:0}99%{opacity:0}to{opacity:1}}@keyframes delay-animation{0%{opacity:0}99%{opacity:0}to{opacity:1}}\n"] }]
85
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TdMarkdownLoaderService }]; }, { url: [{
86
+ type: Input
87
+ }], httpOptions: [{
88
+ type: Input
89
+ }], anchor: [{
90
+ type: Input
91
+ }], copyCodeToClipboard: [{
92
+ type: Input
93
+ }], copyCodeTooltips: [{
94
+ type: Input
95
+ }], contentReady: [{
96
+ type: Output
97
+ }], loadFailed: [{
98
+ type: Output
99
+ }], buttonClicked: [{
100
+ type: Output
101
+ }] }); })();
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdm9yZWQtbWFya2Rvd24tbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybS9mbGF2b3JlZC1tYXJrZG93bi9mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXIvZmxhdm9yZWQtbWFya2Rvd24tbG9hZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybS9mbGF2b3JlZC1tYXJrZG93bi9mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXIvZmxhdm9yZWQtbWFya2Rvd24tbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGlCQUFpQixFQUdqQixNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztJQ1Y3RCxzQ0FNb0I7O0lBTGxCLGlDQUFtQjs7OztJQU1yQiwrQ0FTQztJQUZDLDJOQUFnQiwwQkFBbUIsSUFBQyxzTkFDbkIsaUNBQTBCLElBRFA7SUFFckMsaUJBQXVCOzs7SUFQdEIsd0NBQW1CLHlCQUFBLHlCQUFBLG1EQUFBLDZDQUFBOztBREtyQiw0Q0FBNEM7QUFRNUMsTUFBTSxPQUFPLGlDQUFpQztJQW1ENUMsWUFDVSxrQkFBcUMsRUFDckMseUJBQWtEO1FBRGxELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUF5QjtRQWxDNUQ7Ozs7O1dBS0c7UUFDTSx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFFOUM7Ozs7V0FJRztRQUNNLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFbEQ7OztXQUdHO1FBQ08saUJBQVksR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRTs7O1dBR0c7UUFDTyxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFckQsa0JBQWEsR0FBc0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdoRyxZQUFPLEdBQVksSUFBSSxDQUFDO0lBS3JCLENBQUM7SUFFSixXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxJQUFJO1lBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdEY7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7d0pBekVVLGlDQUFpQztzSUFBakMsaUNBQWlDO1FDdEI5Qyw0R0FNb0I7UUFDcEIsb0hBU3dCOztRQWRyQixrQ0FBYTtRQU1iLGVBQWM7UUFBZCxtQ0FBYzs7dUZEY0osaUNBQWlDO2NBTjdDLFNBQVM7MkJBQ0UsNkJBQTZCLG1CQUd0Qix1QkFBdUIsQ0FBQyxNQUFNOzBHQU90QyxHQUFHO2tCQUFYLEtBQUs7WUFNRyxXQUFXO2tCQUFuQixLQUFLO1lBTUcsTUFBTTtrQkFBZCxLQUFLO1lBUUcsbUJBQW1CO2tCQUEzQixLQUFLO1lBT0csZ0JBQWdCO2tCQUF4QixLQUFLO1lBTUksWUFBWTtrQkFBckIsTUFBTTtZQU1HLFVBQVU7a0JBQW5CLE1BQU07WUFFRyxhQUFhO2tCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRkTWFya2Rvd25Mb2FkZXJTZXJ2aWNlIH0gZnJvbSAnQGNvdmFsZW50L21hcmtkb3duJztcbmltcG9ydCB7IElUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25DbGlja0V2ZW50IH0gZnJvbSAnLi4vZmxhdm9yZWQtbWFya2Rvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElDb3B5Q29kZVRvb2x0aXBzIH0gZnJvbSAnQGNvdmFsZW50L2hpZ2hsaWdodCc7XG5cbi8vIFRPRE86IG1ha2UgYSB0ZC1tYXJrZG93bi1sb2FkZXIgY29tcG9uZW50XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RkLWZsYXZvcmVkLW1hcmtkb3duLWxvYWRlcicsXG4gIHN0eWxlVXJsczogWycuL2ZsYXZvcmVkLW1hcmtkb3duLWxvYWRlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZmxhdm9yZWQtbWFya2Rvd24tbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRkRmxhdm9yZWRNYXJrZG93bkxvYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiB1cmw6IHN0cmluZ1xuICAgKiBUaGUgdXJsIG9mIHRoZSBtYXJrZG93biBmaWxlLlxuICAgKi9cbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGh0dHBPcHRpb25zOiBvYmplY3RcbiAgICogSFRUUCBvcHRpb25zIHRoYXQgY2FuIGJlIHBhcnQgb2YgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBASW5wdXQoKSBodHRwT3B0aW9uczogb2JqZWN0O1xuXG4gIC8qKlxuICAgKiBhbmNob3I6IHN0cmluZ1xuICAgKiBBbmNob3IgdG8ganVtcCB0by5cbiAgICovXG4gIEBJbnB1dCgpIGFuY2hvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBjb3B5Q29kZVRvQ2xpcGJvYXJkPzogYm9vbGVhblxuICAgKlxuICAgKiBEaXNwbGF5IGNvcHkgYnV0dG9uIG9uIGNvZGUgc25pcHBldHMgdG8gY29weSBjb2RlIHRvIGNsaXBib2FyZC5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9DbGlwYm9hcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogY29weUNvZGVUb29sdGlwcz86IElDb3B5Q29kZVRvb2x0aXBzXG4gICAqXG4gICAqIFRvb2x0aXBzIGZvciBjb3B5IGJ1dHRvbiB0byBjb3B5IGFuZCB1cG9uIGNvcHlpbmcuXG4gICAqL1xuICBASW5wdXQoKSBjb3B5Q29kZVRvb2x0aXBzOiBJQ29weUNvZGVUb29sdGlwcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBjb250ZW50UmVhZHk6IHZvaWRcbiAgICogRW1pdHRlZCB3aGVuIG1hcmtkb3duIHJlbmRlcmluZyBpcyBmaW5pc2hlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBjb250ZW50UmVhZHk6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogbG9hZEZhaWxlZDogRXJyb3JcbiAgICogRW1pdHRlZCB3aGVuIGxvYWRpbmcgb2YgbWFya2Rvd24gZmlsZSBmYWlscy5cbiAgICovXG4gIEBPdXRwdXQoKSBsb2FkRmFpbGVkOiBFdmVudEVtaXR0ZXI8RXJyb3I+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBidXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8SVRkRmxhdm9yZWRNYXJrZG93bkJ1dHRvbkNsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX21hcmtkb3duVXJsTG9hZGVyU2VydmljZTogVGRNYXJrZG93bkxvYWRlclNlcnZpY2UsXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMudXJsIHx8IGNoYW5nZXMuaHR0cE9wdGlvbnMpIHtcbiAgICAgIHRoaXMubG9hZE1hcmtkb3duKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZE1hcmtkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY29udGVudCA9IGF3YWl0IHRoaXMuX21hcmtkb3duVXJsTG9hZGVyU2VydmljZS5sb2FkKHRoaXMudXJsLCB0aGlzLmh0dHBPcHRpb25zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2FkRmFpbGVkLmVtaXQoZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1wcm9ncmVzcy1iYXJcbiAgW25nQ2xhc3NdPVwiJ2RlbGF5J1wiXG4gICpuZ0lmPVwibG9hZGluZ1wiXG4gIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgY29sb3I9XCJhY2NlbnRcIlxuICBjbGFzcz1cInN0aWNreVwiXG4+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuPHRkLWZsYXZvcmVkLW1hcmtkb3duXG4gICpuZ0lmPVwiIWxvYWRpbmdcIlxuICBbY29udGVudF09XCJjb250ZW50XCJcbiAgW2hvc3RlZFVybF09XCJ1cmxcIlxuICBbYW5jaG9yXT1cImFuY2hvclwiXG4gIFtjb3B5Q29kZVRvQ2xpcGJvYXJkXT1cImNvcHlDb2RlVG9DbGlwYm9hcmRcIlxuICBbY29weUNvZGVUb29sdGlwc109XCJjb3B5Q29kZVRvb2x0aXBzXCJcbiAgKGNvbnRlbnRSZWFkeSk9XCJjb250ZW50UmVhZHkuZW1pdCgpXCJcbiAgKGJ1dHRvbkNsaWNrZWQpPVwiYnV0dG9uQ2xpY2tlZC5lbWl0KCRldmVudClcIlxuPjwvdGQtZmxhdm9yZWQtbWFya2Rvd24+XG4iXX0=