@c8y/ngx-components 1018.0.82 → 1018.0.83

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 (44) hide show
  1. package/core/common/files.service.d.ts +1 -1
  2. package/core/drop-area/drop-area.component.d.ts +3 -1
  3. package/esm2020/core/common/bytes.pipe.mjs +3 -3
  4. package/esm2020/core/common/files.service.mjs +4 -4
  5. package/esm2020/core/drop-area/drop-area.component.mjs +16 -5
  6. package/esm2020/core/dynamic-forms/file/file.type.component.mjs +4 -3
  7. package/esm2020/core/dynamic-forms/json-schema/c8y-json-schema.service.mjs +12 -1
  8. package/esm2020/core/file-picker/file-picker.component.mjs +1 -1
  9. package/esm2020/ecosystem/shared/add-application.component.mjs +1 -1
  10. package/esm2020/ecosystem/shared/upload-archive.component.mjs +1 -1
  11. package/esm2020/protocol-opcua/opcua-server-config.component.mjs +1 -1
  12. package/esm2020/sub-assets/asset-properties-item.component.mjs +3 -3
  13. package/esm2020/trusted-certificates/add-trusted-certificate.component.mjs +1 -1
  14. package/esm2020/widgets/implementations/image/image-widget-config/image-widget-config.component.mjs +2 -2
  15. package/esm2020/widgets/implementations/markdown/markdown-widget-config/markdown-widget-config.component.mjs +1 -1
  16. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  17. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  18. package/fesm2015/c8y-ngx-components-protocol-opcua.mjs +1 -1
  19. package/fesm2015/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  20. package/fesm2015/c8y-ngx-components-sub-assets.mjs +2 -2
  21. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  22. package/fesm2015/c8y-ngx-components-trusted-certificates.mjs +1 -1
  23. package/fesm2015/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  24. package/fesm2015/c8y-ngx-components-widgets-implementations-image.mjs +1 -1
  25. package/fesm2015/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  26. package/fesm2015/c8y-ngx-components-widgets-implementations-markdown.mjs +1 -1
  27. package/fesm2015/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  28. package/fesm2015/c8y-ngx-components.mjs +27 -11
  29. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  30. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  31. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  32. package/fesm2020/c8y-ngx-components-protocol-opcua.mjs +1 -1
  33. package/fesm2020/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  34. package/fesm2020/c8y-ngx-components-sub-assets.mjs +2 -2
  35. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  36. package/fesm2020/c8y-ngx-components-trusted-certificates.mjs +1 -1
  37. package/fesm2020/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  38. package/fesm2020/c8y-ngx-components-widgets-implementations-image.mjs +1 -1
  39. package/fesm2020/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  40. package/fesm2020/c8y-ngx-components-widgets-implementations-markdown.mjs +1 -1
  41. package/fesm2020/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  42. package/fesm2020/c8y-ngx-components.mjs +34 -11
  43. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  44. package/package.json +1 -1
@@ -38,7 +38,7 @@ export declare class FilesService {
38
38
  * @param files Files to check.
39
39
  * @returns Returns true if each file has the correct size.
40
40
  */
41
- haveValidSizes(files: FileList): Promise<boolean>;
41
+ haveValidSizes(files: FileList, maxFileSizeInBytes?: number): Promise<boolean>;
42
42
  /**
43
43
  * Checks the system file size limit, if not available returns the default value.
44
44
  * Default limit: [DEFAULT_BYTES_LIMIT]{@link DEFAULT_BYTES_LIMIT}
@@ -42,6 +42,7 @@ export declare class DropAreaComponent implements OnInit, ControlValueAccessor {
42
42
  dropped: EventEmitter<DroppedFile[]>;
43
43
  maxAllowedFiles: number;
44
44
  files: FileList;
45
+ maxFileSizeInMegaBytes: number;
45
46
  /** Specifies a filter for what file types the user can pick from the file input dialog box.
46
47
  * ## Example:
47
48
  *
@@ -122,6 +123,7 @@ export declare class DropAreaComponent implements OnInit, ControlValueAccessor {
122
123
  private onFileInvalidNameLength;
123
124
  private onFileInvalidType;
124
125
  private onFileInvalidSize;
126
+ private convertMegaBytesToBytes;
125
127
  private getFilesNamesAsString;
126
128
  private isFilesArrayEmpty;
127
129
  private isTooManyFiles;
@@ -134,7 +136,7 @@ export declare class DropAreaComponent implements OnInit, ControlValueAccessor {
134
136
  private read;
135
137
  private onLoad;
136
138
  static ɵfac: i0.ɵɵFactoryDeclaration<DropAreaComponent, never>;
137
- static ɵcmp: i0.ɵɵComponentDeclaration<DropAreaComponent, "c8y-drop-area", never, { "formControl": "formControl"; "title": "title"; "message": "message"; "icon": "icon"; "loadingMessage": "loadingMessage"; "forceHideList": "forceHideList"; "alwaysShow": "alwaysShow"; "clickToOpen": "clickToOpen"; "loading": "loading"; "progress": "progress"; "maxAllowedFiles": "maxAllowedFiles"; "files": "files"; "accept": "accept"; }, { "dropped": "dropped"; }, never, ["*"], false>;
139
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropAreaComponent, "c8y-drop-area", never, { "formControl": "formControl"; "title": "title"; "message": "message"; "icon": "icon"; "loadingMessage": "loadingMessage"; "forceHideList": "forceHideList"; "alwaysShow": "alwaysShow"; "clickToOpen": "clickToOpen"; "loading": "loading"; "progress": "progress"; "maxAllowedFiles": "maxAllowedFiles"; "files": "files"; "maxFileSizeInMegaBytes": "maxFileSizeInMegaBytes"; "accept": "accept"; }, { "dropped": "dropped"; }, never, ["*"], false>;
138
140
  }
139
141
  export interface DroppedFile {
140
142
  file: File;
@@ -26,9 +26,9 @@ export class BytesPipe {
26
26
  return 0;
27
27
  }
28
28
  const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];
29
- const num = Math.floor(Math.log(bytes) / Math.log(1000));
29
+ const num = Math.floor(Math.log(bytes) / Math.log(1024));
30
30
  // eslint-disable-next-line no-mixed-operators
31
- const result = (bytes / 1000 ** Math.floor(num)).toFixed(precision);
31
+ const result = (bytes / 1024 ** Math.floor(num)).toFixed(precision);
32
32
  return `${result} ${units[num]}`;
33
33
  }
34
34
  transform(value, precision = 1) {
@@ -41,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
41
41
  type: Pipe,
42
42
  args: [{ name: 'bytes' }]
43
43
  }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnl0ZXMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2J5dGVzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYSxFQUFFLFNBQWlCO1FBQzNDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsOENBQThDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLE9BQU8sR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBUyxHQUFHLENBQUM7UUFDcEMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDOztzR0FsQlUsU0FBUztvR0FBVCxTQUFTOzJGQUFULFNBQVM7a0JBRHJCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNOYU4sIGlzRmluaXRlIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuLypcbiAqIENvbnZlcnRzIHRoZSBmaWxlIHNpemUgdG8gYSByZWFkYWJsZSBmb3JtYXQuXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAge3sgbXlEYXRhIHwgYnl0ZXMgfX0gPCEtLSBlLmcuIDEwMC4xIE1CIC0tPlxuICpcbiAqIGBgYFxuICogRGVmYXVsdCBwcmVjaXNpb24gaXMgc2V0IHRvIDEgZGVjaW1hbCBwbGFjZS5cbiAqIFRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uLCBwYXNzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGlwZS5cblxuICogYGBgaHRtbFxuICoge3sgbXlEYXRhIHwgYnl0ZXM6IDUgfX0gPCEtLSBlLmcuIDEwMC4xMjM0NSBNQiAtLT5cbiAqIGBgYFxuICpcbiAqL1xuQFBpcGUoeyBuYW1lOiAnYnl0ZXMnIH0pXG5leHBvcnQgY2xhc3MgQnl0ZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHN0YXRpYyBieXRlcyhieXRlczogbnVtYmVyLCBwcmVjaXNpb246IG51bWJlcik6IHN0cmluZyB8IG51bWJlciB7XG4gICAgaWYgKGlzTmFOKGJ5dGVzKSB8fCAhaXNGaW5pdGUoYnl0ZXMpKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCB1bml0cyA9IFsnYnl0ZXMnLCAna0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInXTtcbiAgICBjb25zdCBudW0gPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMDApKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWl4ZWQtb3BlcmF0b3JzXG4gICAgY29uc3QgcmVzdWx0ID0gKGJ5dGVzIC8gMTAwMCAqKiBNYXRoLmZsb29yKG51bSkpLnRvRml4ZWQocHJlY2lzaW9uKTtcblxuICAgIHJldHVybiBgJHtyZXN1bHR9ICR7dW5pdHNbbnVtXX1gO1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbiA9IDEpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBCeXRlc1BpcGUuYnl0ZXModmFsdWUsIHByZWNpc2lvbik7XG4gIH1cbn1cbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnl0ZXMucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2J5dGVzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYSxFQUFFLFNBQWlCO1FBQzNDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsOENBQThDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLE9BQU8sR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBUyxHQUFHLENBQUM7UUFDcEMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDOztzR0FsQlUsU0FBUztvR0FBVCxTQUFTOzJGQUFULFNBQVM7a0JBRHJCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNOYU4sIGlzRmluaXRlIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuLypcbiAqIENvbnZlcnRzIHRoZSBmaWxlIHNpemUgdG8gYSByZWFkYWJsZSBmb3JtYXQuXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAge3sgbXlEYXRhIHwgYnl0ZXMgfX0gPCEtLSBlLmcuIDEwMC4xIE1CIC0tPlxuICpcbiAqIGBgYFxuICogRGVmYXVsdCBwcmVjaXNpb24gaXMgc2V0IHRvIDEgZGVjaW1hbCBwbGFjZS5cbiAqIFRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uLCBwYXNzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGlwZS5cblxuICogYGBgaHRtbFxuICoge3sgbXlEYXRhIHwgYnl0ZXM6IDUgfX0gPCEtLSBlLmcuIDEwMC4xMjM0NSBNQiAtLT5cbiAqIGBgYFxuICpcbiAqL1xuQFBpcGUoeyBuYW1lOiAnYnl0ZXMnIH0pXG5leHBvcnQgY2xhc3MgQnl0ZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHN0YXRpYyBieXRlcyhieXRlczogbnVtYmVyLCBwcmVjaXNpb246IG51bWJlcik6IHN0cmluZyB8IG51bWJlciB7XG4gICAgaWYgKGlzTmFOKGJ5dGVzKSB8fCAhaXNGaW5pdGUoYnl0ZXMpKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCB1bml0cyA9IFsnYnl0ZXMnLCAna0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInXTtcbiAgICBjb25zdCBudW0gPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWl4ZWQtb3BlcmF0b3JzXG4gICAgY29uc3QgcmVzdWx0ID0gKGJ5dGVzIC8gMTAyNCAqKiBNYXRoLmZsb29yKG51bSkpLnRvRml4ZWQocHJlY2lzaW9uKTtcblxuICAgIHJldHVybiBgJHtyZXN1bHR9ICR7dW5pdHNbbnVtXX1gO1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbiA9IDEpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBCeXRlc1BpcGUuYnl0ZXModmFsdWUsIHByZWNpc2lvbik7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { InventoryBinaryService, SystemOptionsService } from '@c8y/client';
3
- import { every, first, flatten, get, isNaN, isUndefined, keys, map, uniq } from 'lodash-es';
3
+ import { every, first, flatten, get, isNaN, isUndefined, keys, map, uniq, min } from 'lodash-es';
4
4
  import { saveAs } from 'file-saver';
5
5
  import { Observable, of, throwError } from 'rxjs';
6
6
  import { catchError, switchMap, startWith, share } from 'rxjs/operators';
@@ -75,8 +75,8 @@ export class FilesService {
75
75
  * @param files Files to check.
76
76
  * @returns Returns true if each file has the correct size.
77
77
  */
78
- async haveValidSizes(files) {
79
- const limit = await this.loadBytesSizeLimit();
78
+ async haveValidSizes(files, maxFileSizeInBytes) {
79
+ const limit = min([maxFileSizeInBytes, await this.loadBytesSizeLimit()]);
80
80
  return every(files, (f) => {
81
81
  return this.size(f) <= limit;
82
82
  });
@@ -327,4 +327,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
327
327
  type: Injectable,
328
328
  args: [{ providedIn: 'root' }]
329
329
  }], ctorParameters: function () { return [{ type: i1.SystemOptionsService }, { type: i1.InventoryBinaryService }]; } });
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2ZpbGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNyQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFVekUsTUFBTSxDQUFOLElBQVksaUJBWVg7QUFaRCxXQUFZLGlCQUFpQjtJQUMzQix3Q0FBbUIsQ0FBQTtJQUNuQixvQ0FBZSxDQUFBO0lBQ2Ysa0NBQWEsQ0FBQTtJQUNiLG9DQUFlLENBQUE7SUFDZixvQ0FBZSxDQUFBO0lBQ2YsZ0NBQVcsQ0FBQTtJQUNYLDhDQUF5QixDQUFBO0lBQ3pCLGtDQUFhLENBQUE7SUFDYixvQ0FBZSxDQUFBO0lBQ2Ysa0NBQWEsQ0FBQTtJQUNiLGdDQUFXLENBQUE7QUFDYixDQUFDLEVBWlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQVk1QjtBQUVELE1BQU0sT0FBTyxZQUFZO0lBaUR2QixZQUNVLG9CQUEwQyxFQUMxQyxzQkFBOEM7UUFEOUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBbEQvQyx3QkFBbUIsR0FBRyxRQUFRLENBQUM7UUFDL0Isd0JBQW1CLEdBQUcsR0FBRyxDQUFDO1FBRW5DLDBCQUFxQixHQUEwQztZQUM3RCxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQixJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUNwRTtZQUNELENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO2FBQzVGO1lBQ0QsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO2FBQy9FO1lBQ0QsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQzthQUN0QjtZQUNELENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzthQUNqRjtZQUNELENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQzthQUNkO1lBQ0QsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQzthQUN0QjtZQUNELENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQzthQUNkO1lBQ0QsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUNuRjtZQUNELENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7YUFDdEI7WUFDRCxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDZDtTQUNGLENBQUM7UUFFTSxxQkFBZ0IsR0FBRztZQUN6QixZQUFZLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLEdBQUcsRUFBRSxVQUFVO2FBQ2hCO1lBQ0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUMzQyxnQkFBZ0IsRUFBRSxTQUFTO1NBQzVCLENBQUM7SUFLQyxDQUFDO0lBRUo7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBZTtRQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTlDLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQU8sRUFBRSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFO1lBQzFDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO1NBQy9DO1FBQ0QsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUUvQyxJQUFJO1lBQ0YsTUFBTSxFQUNKLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxFQUNsQyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUV6RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLE9BQU8sVUFBVSxDQUFDO2FBQ25CO1lBRUQsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUQsSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsRUFBRTtnQkFDakMsT0FBTyxVQUFVLENBQUM7YUFDbkI7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUM7WUFDaEUsVUFBVSxHQUFHLHNCQUFzQixDQUFDO1NBQ3JDO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxhQUFhO1NBQ2Q7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxJQUFpQztRQUNwQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1CQUFtQixDQUFDLEtBQStCLEVBQUUsTUFBYztRQUNqRSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sVUFBVSxHQUFJLEtBQWtCLENBQUMsSUFBSTtZQUN6QyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFpQixDQUFDO1lBQy9CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFWixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM3RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLEtBQWU7UUFDNUIsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBTyxFQUFFLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixDQUFDLElBQVU7UUFDekIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkMsY0FBYztZQUNkLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUF3QixDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNILCtCQUErQixDQUFDLG1CQUF3QyxFQUFFO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN6QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0Q7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxxQkFBcUIsQ0FBQyxHQUFXO1FBQy9CLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU5RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUUsTUFBTSxRQUFRLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFtQyxDQUFDO1lBQzVFLEdBQUcsZUFBZTtTQUNuQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFDLElBQVU7UUFDakIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQTRCO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBVTtRQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUE0QjtRQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxzQkFBc0IsQ0FBQyxNQUE0QjtRQUNqRCxNQUFNLFFBQVEsR0FBdUI7WUFDbkMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsYUFBYSxFQUFFLENBQUM7WUFDaEIsVUFBVSxFQUFFLENBQUM7WUFDYixjQUFjLEVBQUUsQ0FBQztTQUNsQixDQUFDO1FBRUYsT0FBTyxFQUFFLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLEtBQUssRUFBQyxlQUFlLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsZUFBZTtZQUNmLGNBQWMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRTtZQUNwQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQzlELE1BQU0sRUFBRSxlQUFlLENBQUMsTUFBTTthQUMvQixDQUFDO1NBQ0gsQ0FBQyxDQUFDLEVBQ0gsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ3hGLEVBQ0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUNuQixLQUFLLEVBQUUsRUFDUCxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FDdEIsZUFBZ0MsRUFDaEMsUUFBd0IsRUFDeEIsY0FBc0IsRUFDdEIsUUFBNEIsRUFDNUIsVUFBa0I7UUFFbEIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUVsQixNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDNUIsSUFBSTtvQkFDRixPQUFPLElBQUksRUFBRTt3QkFDWCxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUU1QyxJQUFJLElBQUksRUFBRTs0QkFDUixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDOzRCQUN2RCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDOzRCQUMxQixHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQ2YsTUFBTTt5QkFDUDt3QkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUVuQixRQUFRLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7d0JBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDOUMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO3dCQUN4RCxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ2xDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQzFELENBQUM7d0JBQ0YsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQ3ZGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7cUJBQzNCO2lCQUNGO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDZDtZQUNILENBQUMsQ0FBQztZQUNGLFVBQVUsRUFBRSxDQUFDO1lBRWIsT0FBTztnQkFDTCxXQUFXO29CQUNULGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFZO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUF5QixDQUFDLENBQUM7SUFDOUUsQ0FBQzs7eUdBOVZVLFlBQVk7NkdBQVosWUFBWSxjQURDLE1BQU07MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSUZldGNoUmVzcG9uc2UsXG4gIElNYW5hZ2VkT2JqZWN0QmluYXJ5LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBTeXN0ZW1PcHRpb25zU2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBldmVyeSwgZmlyc3QsIGZsYXR0ZW4sIGdldCwgaXNOYU4sIGlzVW5kZWZpbmVkLCBrZXlzLCBtYXAsIHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCBzdGFydFdpdGgsIHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGZXRjaFdpdGhQcm9ncmVzcyB7XG4gIHRvdGFsQnl0ZXM6IG51bWJlcjtcbiAgYnVmZmVyZWRCeXRlczogbnVtYmVyO1xuICBwZXJjZW50YWdlOiBudW1iZXI7XG4gIGJ5dGVzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJsb2I/OiBCbG9iO1xufVxuXG5leHBvcnQgZW51bSBHRU5FUklDX0ZJTEVfVFlQRSB7XG4gIEFSQ0hJVkUgPSAnYXJjaGl2ZScsXG4gIEFVRElPID0gJ2F1ZGlvJyxcbiAgQ09ERSA9ICdjb2RlJyxcbiAgRVhDRUwgPSAnZXhjZWwnLFxuICBJTUFHRSA9ICdpbWFnZScsXG4gIFBERiA9ICdwZGYnLFxuICBQT1dFUlBPSU5UID0gJ3Bvd2VycG9pbnQnLFxuICBURVhUID0gJ3RleHQnLFxuICBWSURFTyA9ICd2aWRlbycsXG4gIFdPUkQgPSAnd29yZCcsXG4gIEVQTCA9ICdlcGwnXG59XG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZpbGVzU2VydmljZSB7XG4gIHJlYWRvbmx5IERFRkFVTFRfQllURVNfTElNSVQgPSA1MjQyODgwMDtcbiAgcmVhZG9ubHkgRklMRU5BTUVfTUFYX0xFTkdUSCA9IDEyODtcblxuICBmaWxlVHlwZUV4dGVuc2lvbnNNYXA6IHsgW2tleTogc3RyaW5nXTogeyBleHRzOiBzdHJpbmdbXSB9IH0gPSB7XG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLkFSQ0hJVkVdOiB7XG4gICAgICBleHRzOiBbJzd6JywgJ2FwaycsICdjYWInLCAnZ3onLCAnaXNvJywgJ2phcicsICdyYXInLCAndGFyJywgJ3ppcCddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuQVVESU9dOiB7XG4gICAgICBleHRzOiBbJzNncCcsICdhaWZmJywgJ2FhYycsICdhbXInLCAnbTRhJywgJ200cCcsICdtcDMnLCAnb2dhJywgJ29nZycsICdyYXcnLCAnd2F2JywgJ3dtYSddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuQ09ERV06IHtcbiAgICAgIGV4dHM6IFsnYXNweCcsICdleGUnLCAnaHRtJywgJ2h0bWwnLCAnamFkJywgJ2pzJywgJ2pzb24nLCAnanNwJywgJ3BocCcsICd4bWwnXVxuICAgIH0sXG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLkVYQ0VMXToge1xuICAgICAgZXh0czogWyd4bHMnLCAneGxzeCddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuSU1BR0VdOiB7XG4gICAgICBleHRzOiBbJ2JtcCcsICdnaWYnLCAnanBlZycsICdqcGcnLCAncG5nJywgJ3RpZmYnLCAnc3ZnJywgJ2ljbycsICdhcG5nJywgJ3dlYnAnXVxuICAgIH0sXG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLlBERl06IHtcbiAgICAgIGV4dHM6IFsncGRmJ11cbiAgICB9LFxuICAgIFtHRU5FUklDX0ZJTEVfVFlQRS5QT1dFUlBPSU5UXToge1xuICAgICAgZXh0czogWydwcHQnLCAncHB0eCddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuVEVYVF06IHtcbiAgICAgIGV4dHM6IFsndHh0J11cbiAgICB9LFxuICAgIFtHRU5FUklDX0ZJTEVfVFlQRS5WSURFT106IHtcbiAgICAgIGV4dHM6IFsnYXNmJywgJ2F2aScsICdmbHYnLCAnbW92JywgJ21wNCcsICdvZ3YnLCAncXQnLCAncm0nLCAncm12YicsICd3bXYnLCAnM2dwJ11cbiAgICB9LFxuICAgIFtHRU5FUklDX0ZJTEVfVFlQRS5XT1JEXToge1xuICAgICAgZXh0czogWydkb2MnLCAnZG9jeCddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuRVBMXToge1xuICAgICAgZXh0czogWydtb24nXVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZpbGVTaXplTGltaXRDZmcgPSB7XG4gICAgc3lzdGVtT3B0aW9uOiB7XG4gICAgICBjYXRlZ29yeTogJ2ZpbGVzJyxcbiAgICAgIGtleTogJ21heC5zaXplJ1xuICAgIH0sXG4gICAgZGVmYXVsdEJ5dGVzTGltaXQ6IHRoaXMuREVGQVVMVF9CWVRFU19MSU1JVCxcbiAgICBhY3R1YWxCeXRlc0xpbWl0OiB1bmRlZmluZWRcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN5c3RlbU9wdGlvbnNTZXJ2aWNlOiBTeXN0ZW1PcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeUJpbmFyeVNlcnZpY2U6IEludmVudG9yeUJpbmFyeVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZmlsZXMgaGF2ZSB2YWxpZCBzaXplLlxuICAgKiBAcGFyYW0gZmlsZXMgRmlsZXMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBlYWNoIGZpbGUgaGFzIHRoZSBjb3JyZWN0IHNpemUuXG4gICAqL1xuICBhc3luYyBoYXZlVmFsaWRTaXplcyhmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsaW1pdCA9IGF3YWl0IHRoaXMubG9hZEJ5dGVzU2l6ZUxpbWl0KCk7XG5cbiAgICByZXR1cm4gZXZlcnkoZmlsZXMsIChmOiBGaWxlKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplKGYpIDw9IGxpbWl0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgc3lzdGVtIGZpbGUgc2l6ZSBsaW1pdCwgaWYgbm90IGF2YWlsYWJsZSByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlLlxuICAgKiBEZWZhdWx0IGxpbWl0OiBbREVGQVVMVF9CWVRFU19MSU1JVF17QGxpbmsgREVGQVVMVF9CWVRFU19MSU1JVH1cbiAgICogQHJldHVybnMgUmV0dXJucyBwcm9taXNlIHdpdGggdGhlIGxpbWl0IHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgbG9hZEJ5dGVzU2l6ZUxpbWl0KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGJ5dGVzTGltaXQgPSB0aGlzLkRFRkFVTFRfQllURVNfTElNSVQ7XG4gICAgaWYgKHRoaXMuZmlsZVNpemVMaW1pdENmZy5hY3R1YWxCeXRlc0xpbWl0KSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlU2l6ZUxpbWl0Q2ZnLmFjdHVhbEJ5dGVzTGltaXQ7XG4gICAgfVxuICAgIGNvbnN0IHsgc3lzdGVtT3B0aW9uIH0gPSB0aGlzLmZpbGVTaXplTGltaXRDZmc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhOiB7IHZhbHVlOiBhY3R1YWxCeXRlc0xpbWl0IH1cbiAgICAgIH0gPSBhd2FpdCB0aGlzLnN5c3RlbU9wdGlvbnNTZXJ2aWNlLmRldGFpbChzeXN0ZW1PcHRpb24pO1xuXG4gICAgICBpZiAoIWFjdHVhbEJ5dGVzTGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGJ5dGVzTGltaXQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcnNlZEFjdHVhbEJ5dGVzTGltaXQgPSBwYXJzZUludChhY3R1YWxCeXRlc0xpbWl0LCAxMCk7XG4gICAgICBpZiAoaXNOYU4ocGFyc2VkQWN0dWFsQnl0ZXNMaW1pdCkpIHtcbiAgICAgICAgcmV0dXJuIGJ5dGVzTGltaXQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmlsZVNpemVMaW1pdENmZy5hY3R1YWxCeXRlc0xpbWl0ID0gcGFyc2VkQWN0dWFsQnl0ZXNMaW1pdDtcbiAgICAgIGJ5dGVzTGltaXQgPSBwYXJzZWRBY3R1YWxCeXRlc0xpbWl0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIHJldHVybiBieXRlc0xpbWl0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgc2l6ZSBvZiB0aGUgZmlsZVxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHNpemUgb2YgdGhlIGZpbGUgaW4gYnl0ZXMuXG4gICAqL1xuICBzaXplKGZpbGU6IEZpbGUgfCBJTWFuYWdlZE9iamVjdEJpbmFyeSk6IG51bWJlciB7XG4gICAgY29uc3QgZmlsZUxlbmd0aCA9IGdldChmaWxlLCAnbGVuZ3RoJykgfHwgZ2V0KGZpbGUsICdzaXplJyk7XG4gICAgY29uc3QgYXR0YWNobWVudHMgPSBnZXQoZmlsZSwgJ19hdHRhY2htZW50cycpO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzT2JqID0gZ2V0KGF0dGFjaG1lbnRzLCBmaXJzdChrZXlzKGF0dGFjaG1lbnRzKSkpO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZChmaWxlTGVuZ3RoKSA/IGdldChhdHRhY2htZW50c09iaiwgJ2xlbmd0aCcpIDogZmlsZUxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBmaWxlcyBoYXZlIGFsbG93ZWQgZXh0ZW5zaW9ucy5cbiAgICogSWYgdGhlIGFjY2VwdCBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgYWxsIGV4dGVuc2lvbnMgYXJlIGFjY2VwdGVkLlxuICAgKiBAcGFyYW0gZmlsZXMgRmlsZXMgdG8gY2hlY2suXG4gICAqIEBwYXJhbSBhY2NlcHQgU3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBmaWxlIGV4dGVuc2lvbnMgYW5kIGdlbmVyaWMgdHlwZXMgKFtHRU5FUklDX0ZJTEVfVFlQRV17QGxpbmsgR0VORVJJQ19GSUxFX1RZUEV9KSwgZS5nLiAuemlwLC43eixleGNlbC5cbiAgICogQHJldHVybnMgIFJldHVybnMgdHJ1ZSBpZiBlYWNoIGZpbGUgaGFzIGFsbG93ZWQgZXh0ZW5zaW9uLlxuICAgKi9cbiAgaGF2ZVZhbGlkRXh0ZW5zaW9ucyhmaWxlczogRmlsZUxpc3QgfCBGaWxlIHwgRmlsZVtdLCBhY2NlcHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghYWNjZXB0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZXNBcnJheSA9IChmaWxlcyBhcyBGaWxlTGlzdCkuaXRlbVxuICAgICAgPyBBcnJheS5mcm9tKGZpbGVzIGFzIEZpbGVMaXN0KVxuICAgICAgOiBBcnJheS5pc0FycmF5KGZpbGVzKVxuICAgICAgPyBmaWxlc1xuICAgICAgOiBbZmlsZXNdO1xuXG4gICAgY29uc3QgZmlsZXNFeHRzID0gZmlsZXNBcnJheS5tYXAoKGZpbGU6IEZpbGUpID0+IHRoaXMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgYWxsb3dlZEV4dHMgPSB0aGlzLmV4dHJhY3RGaWxlRXh0ZW5zaW9ucyhhY2NlcHQpO1xuICAgIHJldHVybiBmaWxlc0V4dHMuZXZlcnkoZXh0ID0+IGFsbG93ZWRFeHRzLmluY2x1ZGVzKGV4dCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBlYWNoIGZpbGUgaGFzIGEgdmFsaWQgZmlsZW5hbWUgbGVuZ3RoLlxuICAgKiBAcGFyYW0gZmlsZXMgRmlsZXMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBlYWNoIGZpbGUgaGFzIGEgdmFsaWQgZmlsZW5hbWUgbGVuZ3RoLlxuICAgKi9cbiAgY2hlY2tNYXhMZW5ndGgoZmlsZXM6IEZpbGVMaXN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZXJ5KGZpbGVzLCAoZjogRmlsZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuRklMRU5BTUVfTUFYX0xFTkdUSCA+IGYubmFtZS5sZW5ndGg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGZpbGUgZXh0ZW5zaW9uLlxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIGZyb20gd2hpY2ggdGhlIGV4dGVuc2lvbiBzaG91bGQgYmUgZXh0cmFjdGVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBmaWxlIGV4dGVuc2lvbiBvciB1bmRlZmluZWQgaWYgdGhlIGZpbGUgaGFzIG5vIGV4dGVuc2lvbi5cbiAgICovXG4gIGdldEZpbGVFeHRlbnNpb24oZmlsZTogRmlsZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsZU5hbWVBbmRGaWxlRXh0ID0gZmlsZS5uYW1lLnNwbGl0KCcuJyk7XG4gICAgaWYgKGZpbGVOYW1lQW5kRmlsZUV4dC5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIG5vIGZpbGUgZXh0XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZU5hbWVBbmRGaWxlRXh0LnBvcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZmlsZSBleHRlbnNpb25zLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zLlxuICAgKi9cbiAgZ2V0RmlsZUV4dGVuc2lvbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB1bmlxKGZsYXR0ZW4obWFwKHRoaXMuZmlsZVR5cGVFeHRlbnNpb25zTWFwLCAoeyBleHRzIH0pID0+IGV4dHMpKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZ2VuZXJpYyBmaWxlIHR5cGVzLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBsaXN0IG9mIGdlbmVyaWMgZmlsZSB0eXBlcy5cbiAgICovXG4gIGdldEdlbmVyaWNGaWxlVHlwZXMoKTogR0VORVJJQ19GSUxFX1RZUEVbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmlsZVR5cGVFeHRlbnNpb25zTWFwKSBhcyBHRU5FUklDX0ZJTEVfVFlQRVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG1hcEdlbmVyaWNGaWxlVHlwZXNUb0V4dGVuc2lvbnMoZ2VuZXJpY0ZpbGVUeXBlczogR0VORVJJQ19GSUxFX1RZUEVbXSA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGZpbGVFeHRzID0gZ2VuZXJpY0ZpbGVUeXBlcy5tYXAoZ1QgPT4ge1xuICAgICAgY29uc3QgeyBleHRzIH0gPSB0aGlzLmZpbGVUeXBlRXh0ZW5zaW9uc01hcFtnVF07XG4gICAgICByZXR1cm4gZXh0cztcbiAgICB9KTtcblxuICAgIHJldHVybiB1bmlxKGZsYXR0ZW4oZmlsZUV4dHMpKTtcbiAgfVxuICAvKipcbiAgICogRXh0cmFjdHMgYSBsaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucyBmcm9tIGEgc3RyaW5nLlxuICAgKiBDYW4gYWNjZXB0IGdlbmVyaWMgZmlsZSB0eXBlcyBjaGVjazogW0dFTkVSSUNfRklMRV9UWVBFXXtAbGluayBHRU5FUklDX0ZJTEVfVFlQRX0uXG4gICAqXG4gICAqIEBwYXJhbSBzdHIgU3RyaW5nIGZyb20gd2hpY2ggdGhlIGZpbGUgZXh0ZW5zaW9ucyBhcmUgZXh0cmFjdGVkIChjb21tYSBzZXBhcmF0ZWQgdmFsdWVzKS5cbiAgICogQWNjZXB0ZWQgc3RyaW5nIGZvcm1hdDpcbiAgICogKiBcIi56aXAsLmlzb1wiLFxuICAgKiAqIFwiemlwLElTT1wiLFxuICAgKiAqIFwiYXJjaGl2ZVwiLlxuICAgKiBJbXBvcnRhbnQ6IGdlbmVyaWMgdHlwZXMgY2Fubm90IGNvbnRhaW4gYSBkb3QuIEFsbCB2YWx1ZXMgd2l0aCBhIGRvdCBhcmUgdHJlYXRlZCBhcyBhIG5vcm1hbCBleHRlbnNpb24uXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBsaXN0IG9mIHRoZSBmaWxlIGV4dGVuc2lvbnMuXG4gICAqL1xuICBleHRyYWN0RmlsZUV4dGVuc2lvbnMoc3RyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgdHlwZXMgPSBzdHIuc3BsaXQoJywnKS5tYXAodCA9PiB0LnRvTG93ZXJDYXNlKCkudHJpbSgpKTtcblxuICAgIGNvbnN0IGdlbmVyaWNUeXBlcyA9IHR5cGVzLmZpbHRlcigodDogc3RyaW5nKSA9PiB0aGlzLmlzR2VuZXJpY1R5cGUodCkpO1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlRXh0cyA9IHR5cGVzLmZpbHRlcigodDogc3RyaW5nKSA9PiAhdGhpcy5pc0dlbmVyaWNUeXBlKHQpKTtcblxuICAgIGNvbnN0IGFsbFR5cGVzID0gW1xuICAgICAgLi4udGhpcy5tYXBHZW5lcmljRmlsZVR5cGVzVG9FeHRlbnNpb25zKGdlbmVyaWNUeXBlcyBhcyBHRU5FUklDX0ZJTEVfVFlQRVtdKSxcbiAgICAgIC4uLmRlZmF1bHRGaWxlRXh0c1xuICAgIF0ubWFwKHQgPT4gdC5yZXBsYWNlKCcuJywgJycpKTtcblxuICAgIHJldHVybiB1bmlxKGFsbFR5cGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGZpbGUgdG8gYSBiYXNlNjQgaW1hZ2Ugc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byBjb252ZXJ0IHRvIGJhc2UgNjQuXG4gICAqIEByZXR1cm5zIFRoZSBpbWFnZSBzdHJpbmcgaW4gYmFzZTY0IGZvcm1hdC5cbiAgICovXG4gIHRvQmFzZTY0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShTdHJpbmcocmVhZGVyLnJlc3VsdCkpO1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0byBnZXQgYSBGaWxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIG1hbmFnZWQgb2JqZWN0IGJpbmFyeS4gQ2FuIGJlIHVzZWRcbiAgICogdG8gY29udmVydCB0aGlzIGZpbGUgdG9CYXNlNjQgdG8gc2hvdyBpdCB0byB0aGUgZW5kLXVzZXIuXG4gICAqIEBwYXJhbSBiaW5hcnkgVGhlIGJpbmFyeSBtYW5hZ2VkIG9iamVjdFxuICAgKiBAcmV0dXJucyBUaGUgZmlsZSByZXByZXNlbnRhdGlvbi5cbiAgICovXG4gIGFzeW5jIGdldEZpbGUoYmluYXJ5OiBJTWFuYWdlZE9iamVjdEJpbmFyeSk6IFByb21pc2U8RmlsZT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5U2VydmljZS5kb3dubG9hZChiaW5hcnkuaWQpO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKCk7XG4gICAgcmV0dXJuIG5ldyBGaWxlKFthcnJheUJ1ZmZlcl0sIGJpbmFyeS5uYW1lLCB7IHR5cGU6IGJpbmFyeS5jb250ZW50VHlwZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdG8gY2FsY3VsYXRlIHRoZSBoYXNoIHN1bSBvZiB0aGUgcHJvdmlkZWQgZmlsZS5cbiAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gaGFzaC5cbiAgICogQHJldHVybnMgVGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIGFzeW5jIGdldEhhc2hTdW1PZkZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpO1xuICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGJ1ZmZlcik7XG4gICAgY29uc3QgaGFzaEFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSk7XG4gICAgY29uc3QgaGFzaEhleCA9IGhhc2hBcnJheS5tYXAoYnl0ZXMgPT4gYnl0ZXMudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIHJldHVybiBoYXNoSGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0byBkb3dubG9hZCBhIGZpbGUgKG9wZW5zIHRoZSBicm93c2VyIGRvd25sb2FkIHByb21wdCkuXG4gICAqIEBwYXJhbSBiaW5hcnkgVGhlIGJpbmFyeSBtYW5hZ2VkIG9iamVjdC5cbiAgICovXG4gIGFzeW5jIGRvd25sb2FkKGJpbmFyeTogSU1hbmFnZWRPYmplY3RCaW5hcnkpIHtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5nZXRGaWxlKGJpbmFyeSk7XG4gICAgc2F2ZUFzKGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBmaWxlIHRvIEphdmFTY3JpcHQgbWVtb3J5LlxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyBwcm9ncmVzc2lvbiBzdGF0dXMgb2JqZWN0LFxuICAgKiBhbmQgYWZ0ZXIgZG93bmxvYWQgaXMgY29tcGxldGVkLCBibG9iIHByb3BlcnR5IGlzIHBvcHVsYXRlZCB3aXRoIEJsb2IgcmVzdWx0IG9iamVjdC5cbiAgICogVW5zdWJzY3JpYmluZyBmcm9tIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlIGFib3J0cyB0aGUgZmlsZSBmZXRjaCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYmluYXJ5IFRoZSBiaW5hcnkgbWFuYWdlZCBvYmplY3QuXG4gICAqL1xuICBmZXRjaEZpbGVXaXRoUHJvZ3Jlc3MkKGJpbmFyeTogSU1hbmFnZWRPYmplY3RCaW5hcnkpOiBPYnNlcnZhYmxlPElGZXRjaFdpdGhQcm9ncmVzcz4ge1xuICAgIGNvbnN0IHByb2dyZXNzOiBJRmV0Y2hXaXRoUHJvZ3Jlc3MgPSB7XG4gICAgICB0b3RhbEJ5dGVzOiArYmluYXJ5Lmxlbmd0aCxcbiAgICAgIGJ1ZmZlcmVkQnl0ZXM6IDAsXG4gICAgICBwZXJjZW50YWdlOiAwLFxuICAgICAgYnl0ZXNQZXJTZWNvbmQ6IDBcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9mKG5ldyBBYm9ydENvbnRyb2xsZXIoKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcChhc3luYyBhYm9ydENvbnRyb2xsZXIgPT4gKHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgIHJlc3BvbnNlOiBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeVNlcnZpY2UuZG93bmxvYWQoYmluYXJ5LmlkLCB7XG4gICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgIH0pXG4gICAgICB9KSksXG4gICAgICBzd2l0Y2hNYXAoKHsgcmVzcG9uc2UsIGFib3J0Q29udHJvbGxlciwgc3RhcnRUaW1lc3RhbXAgfSkgPT5cbiAgICAgICAgdGhpcy5wcm9jZXNzUmVzcG9uc2UkKGFib3J0Q29udHJvbGxlciwgcmVzcG9uc2UsIHN0YXJ0VGltZXN0YW1wLCBwcm9ncmVzcywgYmluYXJ5LnR5cGUpXG4gICAgICApLFxuICAgICAgc3RhcnRXaXRoKHByb2dyZXNzKSxcbiAgICAgIHNoYXJlKCksXG4gICAgICBjYXRjaEVycm9yKGVyciA9PiB0aHJvd0Vycm9yKGVycikpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlJChcbiAgICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcbiAgICByZXNwb25zZTogSUZldGNoUmVzcG9uc2UsXG4gICAgc3RhcnRUaW1lc3RhbXA6IG51bWJlcixcbiAgICBwcm9ncmVzczogSUZldGNoV2l0aFByb2dyZXNzLFxuICAgIGJpbmFyeVR5cGU6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPElGZXRjaFdpdGhQcm9ncmVzcz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWIgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuXG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICBwcm9ncmVzcy5ibG9iID0gbmV3IEJsb2IoY2h1bmtzLCB7IHR5cGU6IGJpbmFyeVR5cGUgfSk7XG4gICAgICAgICAgICAgIHN1Yi5uZXh0KHsgLi4ucHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2h1bmtzLnB1c2godmFsdWUpO1xuXG4gICAgICAgICAgICBwcm9ncmVzcy5idWZmZXJlZEJ5dGVzICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVzdGFtcERpZmYgPSBjdXJyZW50VGltZXN0YW1wIC0gc3RhcnRUaW1lc3RhbXA7XG4gICAgICAgICAgICBwcm9ncmVzcy5ieXRlc1BlclNlY29uZCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgIHByb2dyZXNzLmJ1ZmZlcmVkQnl0ZXMgLyBNYXRoLnJvdW5kKHRpbWVzdGFtcERpZmYgLyAxMDAwKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2dyZXNzLnBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKChwcm9ncmVzcy5idWZmZXJlZEJ5dGVzIC8gcHJvZ3Jlc3MudG90YWxCeXRlcykgKiAxMDApO1xuICAgICAgICAgICAgc3ViLm5leHQoeyAuLi5wcm9ncmVzcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICBzdWIuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZWFkU3RyZWFtKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgIHN1Yi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0dlbmVyaWNUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKEdFTkVSSUNfRklMRV9UWVBFKS5pbmNsdWRlcyh0eXBlIGFzIEdFTkVSSUNfRklMRV9UWVBFKTtcbiAgfVxufVxuIl19
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2ZpbGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNyQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBVXpFLE1BQU0sQ0FBTixJQUFZLGlCQVlYO0FBWkQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsb0NBQWUsQ0FBQTtJQUNmLGtDQUFhLENBQUE7SUFDYixvQ0FBZSxDQUFBO0lBQ2Ysb0NBQWUsQ0FBQTtJQUNmLGdDQUFXLENBQUE7SUFDWCw4Q0FBeUIsQ0FBQTtJQUN6QixrQ0FBYSxDQUFBO0lBQ2Isb0NBQWUsQ0FBQTtJQUNmLGtDQUFhLENBQUE7SUFDYixnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQVpXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFZNUI7QUFFRCxNQUFNLE9BQU8sWUFBWTtJQWlEdkIsWUFDVSxvQkFBMEMsRUFDMUMsc0JBQThDO1FBRDlDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsMkJBQXNC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USxFQUFFLENBQUMsQ0FBQztxQkFDM0I7aUJBQ0Y7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN4QixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNkO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsVUFBVSxFQUFFLENBQUM7WUFFYixPQUFPO2dCQUNMLFdBQVc7b0JBQ1QsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN4QixHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQVk7UUFDaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQXlCLENBQUMsQ0FBQztJQUM5RSxDQUFDOzt5R0E3VlUsWUFBWTs2R0FBWixZQUFZLGNBREMsTUFBTTsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJRmV0Y2hSZXNwb25zZSxcbiAgSU1hbmFnZWRPYmplY3RCaW5hcnksXG4gIEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gIFN5c3RlbU9wdGlvbnNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGV2ZXJ5LCBmaXJzdCwgZmxhdHRlbiwgZ2V0LCBpc05hTiwgaXNVbmRlZmluZWQsIGtleXMsIG1hcCwgdW5pcSwgbWluIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCwgc3RhcnRXaXRoLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRmV0Y2hXaXRoUHJvZ3Jlc3Mge1xuICB0b3RhbEJ5dGVzOiBudW1iZXI7XG4gIGJ1ZmZlcmVkQnl0ZXM6IG51bWJlcjtcbiAgcGVyY2VudGFnZTogbnVtYmVyO1xuICBieXRlc1BlclNlY29uZDogbnVtYmVyO1xuICBibG9iPzogQmxvYjtcbn1cblxuZXhwb3J0IGVudW0gR0VORVJJQ19GSUxFX1RZUEUge1xuICBBUkNISVZFID0gJ2FyY2hpdmUnLFxuICBBVURJTyA9ICdhdWRpbycsXG4gIENPREUgPSAnY29kZScsXG4gIEVYQ0VMID0gJ2V4Y2VsJyxcbiAgSU1BR0UgPSAnaW1hZ2UnLFxuICBQREYgPSAncGRmJyxcbiAgUE9XRVJQT0lOVCA9ICdwb3dlcnBvaW50JyxcbiAgVEVYVCA9ICd0ZXh0JyxcbiAgVklERU8gPSAndmlkZW8nLFxuICBXT1JEID0gJ3dvcmQnLFxuICBFUEwgPSAnZXBsJ1xufVxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGaWxlc1NlcnZpY2Uge1xuICByZWFkb25seSBERUZBVUxUX0JZVEVTX0xJTUlUID0gNTI0Mjg4MDA7XG4gIHJlYWRvbmx5IEZJTEVOQU1FX01BWF9MRU5HVEggPSAxMjg7XG5cbiAgZmlsZVR5cGVFeHRlbnNpb25zTWFwOiB7IFtrZXk6IHN0cmluZ106IHsgZXh0czogc3RyaW5nW10gfSB9ID0ge1xuICAgIFtHRU5FUklDX0ZJTEVfVFlQRS5BUkNISVZFXToge1xuICAgICAgZXh0czogWyc3eicsICdhcGsnLCAnY2FiJywgJ2d6JywgJ2lzbycsICdqYXInLCAncmFyJywgJ3RhcicsICd6aXAnXVxuICAgIH0sXG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLkFVRElPXToge1xuICAgICAgZXh0czogWyczZ3AnLCAnYWlmZicsICdhYWMnLCAnYW1yJywgJ200YScsICdtNHAnLCAnbXAzJywgJ29nYScsICdvZ2cnLCAncmF3JywgJ3dhdicsICd3bWEnXVxuICAgIH0sXG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLkNPREVdOiB7XG4gICAgICBleHRzOiBbJ2FzcHgnLCAnZXhlJywgJ2h0bScsICdodG1sJywgJ2phZCcsICdqcycsICdqc29uJywgJ2pzcCcsICdwaHAnLCAneG1sJ11cbiAgICB9LFxuICAgIFtHRU5FUklDX0ZJTEVfVFlQRS5FWENFTF06IHtcbiAgICAgIGV4dHM6IFsneGxzJywgJ3hsc3gnXVxuICAgIH0sXG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLklNQUdFXToge1xuICAgICAgZXh0czogWydibXAnLCAnZ2lmJywgJ2pwZWcnLCAnanBnJywgJ3BuZycsICd0aWZmJywgJ3N2ZycsICdpY28nLCAnYXBuZycsICd3ZWJwJ11cbiAgICB9LFxuICAgIFtHRU5FUklDX0ZJTEVfVFlQRS5QREZdOiB7XG4gICAgICBleHRzOiBbJ3BkZiddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuUE9XRVJQT0lOVF06IHtcbiAgICAgIGV4dHM6IFsncHB0JywgJ3BwdHgnXVxuICAgIH0sXG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLlRFWFRdOiB7XG4gICAgICBleHRzOiBbJ3R4dCddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuVklERU9dOiB7XG4gICAgICBleHRzOiBbJ2FzZicsICdhdmknLCAnZmx2JywgJ21vdicsICdtcDQnLCAnb2d2JywgJ3F0JywgJ3JtJywgJ3JtdmInLCAnd212JywgJzNncCddXG4gICAgfSxcbiAgICBbR0VORVJJQ19GSUxFX1RZUEUuV09SRF06IHtcbiAgICAgIGV4dHM6IFsnZG9jJywgJ2RvY3gnXVxuICAgIH0sXG4gICAgW0dFTkVSSUNfRklMRV9UWVBFLkVQTF06IHtcbiAgICAgIGV4dHM6IFsnbW9uJ11cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBmaWxlU2l6ZUxpbWl0Q2ZnID0ge1xuICAgIHN5c3RlbU9wdGlvbjoge1xuICAgICAgY2F0ZWdvcnk6ICdmaWxlcycsXG4gICAgICBrZXk6ICdtYXguc2l6ZSdcbiAgICB9LFxuICAgIGRlZmF1bHRCeXRlc0xpbWl0OiB0aGlzLkRFRkFVTFRfQllURVNfTElNSVQsXG4gICAgYWN0dWFsQnl0ZXNMaW1pdDogdW5kZWZpbmVkXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzeXN0ZW1PcHRpb25zU2VydmljZTogU3lzdGVtT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnlTZXJ2aWNlOiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZpbGVzIGhhdmUgdmFsaWQgc2l6ZS5cbiAgICogQHBhcmFtIGZpbGVzIEZpbGVzIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZWFjaCBmaWxlIGhhcyB0aGUgY29ycmVjdCBzaXplLlxuICAgKi9cbiAgYXN5bmMgaGF2ZVZhbGlkU2l6ZXMoZmlsZXM6IEZpbGVMaXN0LCBtYXhGaWxlU2l6ZUluQnl0ZXM/OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsaW1pdCA9IG1pbihbbWF4RmlsZVNpemVJbkJ5dGVzLCBhd2FpdCB0aGlzLmxvYWRCeXRlc1NpemVMaW1pdCgpXSk7XG4gICAgcmV0dXJuIGV2ZXJ5KGZpbGVzLCAoZjogRmlsZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZShmKSA8PSBsaW1pdDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIHN5c3RlbSBmaWxlIHNpemUgbGltaXQsIGlmIG5vdCBhdmFpbGFibGUgcmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgICogRGVmYXVsdCBsaW1pdDogW0RFRkFVTFRfQllURVNfTElNSVRde0BsaW5rIERFRkFVTFRfQllURVNfTElNSVR9XG4gICAqIEByZXR1cm5zIFJldHVybnMgcHJvbWlzZSB3aXRoIHRoZSBsaW1pdCB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIGxvYWRCeXRlc1NpemVMaW1pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBieXRlc0xpbWl0ID0gdGhpcy5ERUZBVUxUX0JZVEVTX0xJTUlUO1xuICAgIGlmICh0aGlzLmZpbGVTaXplTGltaXRDZmcuYWN0dWFsQnl0ZXNMaW1pdCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZVNpemVMaW1pdENmZy5hY3R1YWxCeXRlc0xpbWl0O1xuICAgIH1cbiAgICBjb25zdCB7IHN5c3RlbU9wdGlvbiB9ID0gdGhpcy5maWxlU2l6ZUxpbWl0Q2ZnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogeyB2YWx1ZTogYWN0dWFsQnl0ZXNMaW1pdCB9XG4gICAgICB9ID0gYXdhaXQgdGhpcy5zeXN0ZW1PcHRpb25zU2VydmljZS5kZXRhaWwoc3lzdGVtT3B0aW9uKTtcblxuICAgICAgaWYgKCFhY3R1YWxCeXRlc0xpbWl0KSB7XG4gICAgICAgIHJldHVybiBieXRlc0xpbWl0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZWRBY3R1YWxCeXRlc0xpbWl0ID0gcGFyc2VJbnQoYWN0dWFsQnl0ZXNMaW1pdCwgMTApO1xuICAgICAgaWYgKGlzTmFOKHBhcnNlZEFjdHVhbEJ5dGVzTGltaXQpKSB7XG4gICAgICAgIHJldHVybiBieXRlc0xpbWl0O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbGVTaXplTGltaXRDZmcuYWN0dWFsQnl0ZXNMaW1pdCA9IHBhcnNlZEFjdHVhbEJ5dGVzTGltaXQ7XG4gICAgICBieXRlc0xpbWl0ID0gcGFyc2VkQWN0dWFsQnl0ZXNMaW1pdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXNMaW1pdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIHNpemUgb2YgdGhlIGZpbGVcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgUmV0dXJucyBzaXplIG9mIHRoZSBmaWxlIGluIGJ5dGVzLlxuICAgKi9cbiAgc2l6ZShmaWxlOiBGaWxlIHwgSU1hbmFnZWRPYmplY3RCaW5hcnkpOiBudW1iZXIge1xuICAgIGNvbnN0IGZpbGVMZW5ndGggPSBnZXQoZmlsZSwgJ2xlbmd0aCcpIHx8IGdldChmaWxlLCAnc2l6ZScpO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gZ2V0KGZpbGUsICdfYXR0YWNobWVudHMnKTtcbiAgICBjb25zdCBhdHRhY2htZW50c09iaiA9IGdldChhdHRhY2htZW50cywgZmlyc3Qoa2V5cyhhdHRhY2htZW50cykpKTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQoZmlsZUxlbmd0aCkgPyBnZXQoYXR0YWNobWVudHNPYmosICdsZW5ndGgnKSA6IGZpbGVMZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgZmlsZXMgaGF2ZSBhbGxvd2VkIGV4dGVuc2lvbnMuXG4gICAqIElmIHRoZSBhY2NlcHQgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIGFsbCBleHRlbnNpb25zIGFyZSBhY2NlcHRlZC5cbiAgICogQHBhcmFtIGZpbGVzIEZpbGVzIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gYWNjZXB0IFN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgZmlsZSBleHRlbnNpb25zIGFuZCBnZW5lcmljIHR5cGVzIChbR0VORVJJQ19GSUxFX1RZUEVde0BsaW5rIEdFTkVSSUNfRklMRV9UWVBFfSksIGUuZy4gLnppcCwuN3osZXhjZWwuXG4gICAqIEByZXR1cm5zICBSZXR1cm5zIHRydWUgaWYgZWFjaCBmaWxlIGhhcyBhbGxvd2VkIGV4dGVuc2lvbi5cbiAgICovXG4gIGhhdmVWYWxpZEV4dGVuc2lvbnMoZmlsZXM6IEZpbGVMaXN0IHwgRmlsZSB8IEZpbGVbXSwgYWNjZXB0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWFjY2VwdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzQXJyYXkgPSAoZmlsZXMgYXMgRmlsZUxpc3QpLml0ZW1cbiAgICAgID8gQXJyYXkuZnJvbShmaWxlcyBhcyBGaWxlTGlzdClcbiAgICAgIDogQXJyYXkuaXNBcnJheShmaWxlcylcbiAgICAgID8gZmlsZXNcbiAgICAgIDogW2ZpbGVzXTtcblxuICAgIGNvbnN0IGZpbGVzRXh0cyA9IGZpbGVzQXJyYXkubWFwKChmaWxlOiBGaWxlKSA9PiB0aGlzLmdldEZpbGVFeHRlbnNpb24oZmlsZSk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIGNvbnN0IGFsbG93ZWRFeHRzID0gdGhpcy5leHRyYWN0RmlsZUV4dGVuc2lvbnMoYWNjZXB0KTtcbiAgICByZXR1cm4gZmlsZXNFeHRzLmV2ZXJ5KGV4dCA9PiBhbGxvd2VkRXh0cy5pbmNsdWRlcyhleHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZWFjaCBmaWxlIGhhcyBhIHZhbGlkIGZpbGVuYW1lIGxlbmd0aC5cbiAgICogQHBhcmFtIGZpbGVzIEZpbGVzIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZWFjaCBmaWxlIGhhcyBhIHZhbGlkIGZpbGVuYW1lIGxlbmd0aC5cbiAgICovXG4gIGNoZWNrTWF4TGVuZ3RoKGZpbGVzOiBGaWxlTGlzdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmVyeShmaWxlcywgKGY6IEZpbGUpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLkZJTEVOQU1FX01BWF9MRU5HVEggPiBmLm5hbWUubGVuZ3RoO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBmaWxlIGV4dGVuc2lvbi5cbiAgICogQHBhcmFtIGZpbGUgRmlsZSBmcm9tIHdoaWNoIHRoZSBleHRlbnNpb24gc2hvdWxkIGJlIGV4dHJhY3RlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgZmlsZSBleHRlbnNpb24gb3IgdW5kZWZpbmVkIGlmIHRoZSBmaWxlIGhhcyBubyBleHRlbnNpb24uXG4gICAqL1xuICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGU6IEZpbGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZpbGVOYW1lQW5kRmlsZUV4dCA9IGZpbGUubmFtZS5zcGxpdCgnLicpO1xuICAgIGlmIChmaWxlTmFtZUFuZEZpbGVFeHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBubyBmaWxlIGV4dFxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGVOYW1lQW5kRmlsZUV4dC5wb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucy5cbiAgICogQHJldHVybnMgUmV0dXJucyBsaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucy5cbiAgICovXG4gIGdldEZpbGVFeHRlbnNpb25zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdW5pcShmbGF0dGVuKG1hcCh0aGlzLmZpbGVUeXBlRXh0ZW5zaW9uc01hcCwgKHsgZXh0cyB9KSA9PiBleHRzKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGdlbmVyaWMgZmlsZSB0eXBlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbGlzdCBvZiBnZW5lcmljIGZpbGUgdHlwZXMuXG4gICAqL1xuICBnZXRHZW5lcmljRmlsZVR5cGVzKCk6IEdFTkVSSUNfRklMRV9UWVBFW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZpbGVUeXBlRXh0ZW5zaW9uc01hcCkgYXMgR0VORVJJQ19GSUxFX1RZUEVbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBtYXBHZW5lcmljRmlsZVR5cGVzVG9FeHRlbnNpb25zKGdlbmVyaWNGaWxlVHlwZXM6IEdFTkVSSUNfRklMRV9UWVBFW10gPSBbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmaWxlRXh0cyA9IGdlbmVyaWNGaWxlVHlwZXMubWFwKGdUID0+IHtcbiAgICAgIGNvbnN0IHsgZXh0cyB9ID0gdGhpcy5maWxlVHlwZUV4dGVuc2lvbnNNYXBbZ1RdO1xuICAgICAgcmV0dXJuIGV4dHM7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5pcShmbGF0dGVuKGZpbGVFeHRzKSk7XG4gIH1cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGEgbGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMgZnJvbSBhIHN0cmluZy5cbiAgICogQ2FuIGFjY2VwdCBnZW5lcmljIGZpbGUgdHlwZXMgY2hlY2s6IFtHRU5FUklDX0ZJTEVfVFlQRV17QGxpbmsgR0VORVJJQ19GSUxFX1RZUEV9LlxuICAgKlxuICAgKiBAcGFyYW0gc3RyIFN0cmluZyBmcm9tIHdoaWNoIHRoZSBmaWxlIGV4dGVuc2lvbnMgYXJlIGV4dHJhY3RlZCAoY29tbWEgc2VwYXJhdGVkIHZhbHVlcykuXG4gICAqIEFjY2VwdGVkIHN0cmluZyBmb3JtYXQ6XG4gICAqICogXCIuemlwLC5pc29cIixcbiAgICogKiBcInppcCxJU09cIixcbiAgICogKiBcImFyY2hpdmVcIi5cbiAgICogSW1wb3J0YW50OiBnZW5lcmljIHR5cGVzIGNhbm5vdCBjb250YWluIGEgZG90LiBBbGwgdmFsdWVzIHdpdGggYSBkb3QgYXJlIHRyZWF0ZWQgYXMgYSBub3JtYWwgZXh0ZW5zaW9uLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgZmlsZSBleHRlbnNpb25zLlxuICAgKi9cbiAgZXh0cmFjdEZpbGVFeHRlbnNpb25zKHN0cjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHR5cGVzID0gc3RyLnNwbGl0KCcsJykubWFwKHQgPT4gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XG5cbiAgICBjb25zdCBnZW5lcmljVHlwZXMgPSB0eXBlcy5maWx0ZXIoKHQ6IHN0cmluZykgPT4gdGhpcy5pc0dlbmVyaWNUeXBlKHQpKTtcbiAgICBjb25zdCBkZWZhdWx0RmlsZUV4dHMgPSB0eXBlcy5maWx0ZXIoKHQ6IHN0cmluZykgPT4gIXRoaXMuaXNHZW5lcmljVHlwZSh0KSk7XG5cbiAgICBjb25zdCBhbGxUeXBlcyA9IFtcbiAgICAgIC4uLnRoaXMubWFwR2VuZXJpY0ZpbGVUeXBlc1RvRXh0ZW5zaW9ucyhnZW5lcmljVHlwZXMgYXMgR0VORVJJQ19GSUxFX1RZUEVbXSksXG4gICAgICAuLi5kZWZhdWx0RmlsZUV4dHNcbiAgICBdLm1hcCh0ID0+IHQucmVwbGFjZSgnLicsICcnKSk7XG5cbiAgICByZXR1cm4gdW5pcShhbGxUeXBlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBmaWxlIHRvIGEgYmFzZTY0IGltYWdlIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdG8gY29udmVydCB0byBiYXNlIDY0LlxuICAgKiBAcmV0dXJucyBUaGUgaW1hZ2Ugc3RyaW5nIGluIGJhc2U2NCBmb3JtYXQuXG4gICAqL1xuICB0b0Jhc2U2NChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoU3RyaW5nKHJlYWRlci5yZXN1bHQpKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdG8gZ2V0IGEgRmlsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBtYW5hZ2VkIG9iamVjdCBiaW5hcnkuIENhbiBiZSB1c2VkXG4gICAqIHRvIGNvbnZlcnQgdGhpcyBmaWxlIHRvQmFzZTY0IHRvIHNob3cgaXQgdG8gdGhlIGVuZC11c2VyLlxuICAgKiBAcGFyYW0gYmluYXJ5IFRoZSBiaW5hcnkgbWFuYWdlZCBvYmplY3RcbiAgICogQHJldHVybnMgVGhlIGZpbGUgcmVwcmVzZW50YXRpb24uXG4gICAqL1xuICBhc3luYyBnZXRGaWxlKGJpbmFyeTogSU1hbmFnZWRPYmplY3RCaW5hcnkpOiBQcm9taXNlPEZpbGU+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeVNlcnZpY2UuZG93bmxvYWQoYmluYXJ5LmlkKTtcbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIHJldHVybiBuZXcgRmlsZShbYXJyYXlCdWZmZXJdLCBiaW5hcnkubmFtZSwgeyB0eXBlOiBiaW5hcnkuY29udGVudFR5cGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaCBzdW0gb2YgdGhlIHByb3ZpZGVkIGZpbGUuXG4gICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIGhhc2guXG4gICAqIEByZXR1cm5zIFRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGZpbGUuXG4gICAqL1xuICBhc3luYyBnZXRIYXNoU3VtT2ZGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKTtcbiAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBidWZmZXIpO1xuICAgIGNvbnN0IGhhc2hBcnJheSA9IEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpO1xuICAgIGNvbnN0IGhhc2hIZXggPSBoYXNoQXJyYXkubWFwKGJ5dGVzID0+IGJ5dGVzLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICByZXR1cm4gaGFzaEhleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgdG8gZG93bmxvYWQgYSBmaWxlIChvcGVucyB0aGUgYnJvd3NlciBkb3dubG9hZCBwcm9tcHQpLlxuICAgKiBAcGFyYW0gYmluYXJ5IFRoZSBiaW5hcnkgbWFuYWdlZCBvYmplY3QuXG4gICAqL1xuICBhc3luYyBkb3dubG9hZChiaW5hcnk6IElNYW5hZ2VkT2JqZWN0QmluYXJ5KSB7XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHRoaXMuZ2V0RmlsZShiaW5hcnkpO1xuICAgIHNhdmVBcyhmaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgZmlsZSB0byBKYXZhU2NyaXB0IG1lbW9yeS5cbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgcHJvZ3Jlc3Npb24gc3RhdHVzIG9iamVjdCxcbiAgICogYW5kIGFmdGVyIGRvd25sb2FkIGlzIGNvbXBsZXRlZCwgYmxvYiBwcm9wZXJ0eSBpcyBwb3B1bGF0ZWQgd2l0aCBCbG9iIHJlc3VsdCBvYmplY3QuXG4gICAqIFVuc3Vic2NyaWJpbmcgZnJvbSB0aGUgcmV0dXJuZWQgb2JzZXJ2YWJsZSBhYm9ydHMgdGhlIGZpbGUgZmV0Y2ggcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJpbmFyeSBUaGUgYmluYXJ5IG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgZmV0Y2hGaWxlV2l0aFByb2dyZXNzJChiaW5hcnk6IElNYW5hZ2VkT2JqZWN0QmluYXJ5KTogT2JzZXJ2YWJsZTxJRmV0Y2hXaXRoUHJvZ3Jlc3M+IHtcbiAgICBjb25zdCBwcm9ncmVzczogSUZldGNoV2l0aFByb2dyZXNzID0ge1xuICAgICAgdG90YWxCeXRlczogK2JpbmFyeS5sZW5ndGgsXG4gICAgICBidWZmZXJlZEJ5dGVzOiAwLFxuICAgICAgcGVyY2VudGFnZTogMCxcbiAgICAgIGJ5dGVzUGVyU2Vjb25kOiAwXG4gICAgfTtcblxuICAgIHJldHVybiBvZihuZXcgQWJvcnRDb250cm9sbGVyKCkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoYXN5bmMgYWJvcnRDb250cm9sbGVyID0+ICh7XG4gICAgICAgIGFib3J0Q29udHJvbGxlcixcbiAgICAgICAgc3RhcnRUaW1lc3RhbXA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuICAgICAgICByZXNwb25zZTogYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLmRvd25sb2FkKGJpbmFyeS5pZCwge1xuICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgICAgICB9KVxuICAgICAgfSkpLFxuICAgICAgc3dpdGNoTWFwKCh7IHJlc3BvbnNlLCBhYm9ydENvbnRyb2xsZXIsIHN0YXJ0VGltZXN0YW1wIH0pID0+XG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3BvbnNlJChhYm9ydENvbnRyb2xsZXIsIHJlc3BvbnNlLCBzdGFydFRpbWVzdGFtcCwgcHJvZ3Jlc3MsIGJpbmFyeS50eXBlKVxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aChwcm9ncmVzcyksXG4gICAgICBzaGFyZSgpLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4gdGhyb3dFcnJvcihlcnIpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NSZXNwb25zZSQoXG4gICAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gICAgcmVzcG9uc2U6IElGZXRjaFJlc3BvbnNlLFxuICAgIHN0YXJ0VGltZXN0YW1wOiBudW1iZXIsXG4gICAgcHJvZ3Jlc3M6IElGZXRjaFdpdGhQcm9ncmVzcyxcbiAgICBiaW5hcnlUeXBlOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxJRmV0Y2hXaXRoUHJvZ3Jlc3M+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3ViID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICBjb25zdCBjaHVua3MgPSBbXTtcblxuICAgICAgY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcblxuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuYmxvYiA9IG5ldyBCbG9iKGNodW5rcywgeyB0eXBlOiBiaW5hcnlUeXBlIH0pO1xuICAgICAgICAgICAgICBzdWIubmV4dCh7IC4uLnByb2dyZXNzIH0pO1xuICAgICAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNodW5rcy5wdXNoKHZhbHVlKTtcblxuICAgICAgICAgICAgcHJvZ3Jlc3MuYnVmZmVyZWRCeXRlcyArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXBEaWZmID0gY3VycmVudFRpbWVzdGFtcCAtIHN0YXJ0VGltZXN0YW1wO1xuICAgICAgICAgICAgcHJvZ3Jlc3MuYnl0ZXNQZXJTZWNvbmQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICBwcm9ncmVzcy5idWZmZXJlZEJ5dGVzIC8gTWF0aC5yb3VuZCh0aW1lc3RhbXBEaWZmIC8gMTAwMClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcm9ncmVzcy5wZXJjZW50YWdlID0gTWF0aC5yb3VuZCgocHJvZ3Jlc3MuYnVmZmVyZWRCeXRlcyAvIHByb2dyZXNzLnRvdGFsQnl0ZXMpICogMTAwKTtcbiAgICAgICAgICAgIHN1Yi5uZXh0KHsgLi4ucHJvZ3Jlc3MgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgc3ViLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmVhZFN0cmVhbSgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICBzdWIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNHZW5lcmljVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhHRU5FUklDX0ZJTEVfVFlQRSkuaW5jbHVkZXModHlwZSBhcyBHRU5FUklDX0ZJTEVfVFlQRSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR, AbstractControl } from '@angular/forms';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
- import { get, map, some } from 'lodash-es';
4
+ import { get, map, some, min } from 'lodash-es';
5
5
  import { BytesPipe } from '../common/bytes.pipe';
6
6
  import { FilesService } from '../common/files.service';
7
7
  import { gettext } from '../i18n/gettext';
@@ -169,7 +169,10 @@ export class DropAreaComponent {
169
169
  this.onFileInvalidType();
170
170
  return;
171
171
  }
172
- const haveValidSizes = await this.filesService.haveValidSizes(files);
172
+ const maxFileSizeInBytes = this.maxFileSizeInMegaBytes
173
+ ? this.convertMegaBytesToBytes(this.maxFileSizeInMegaBytes)
174
+ : null;
175
+ const haveValidSizes = await this.filesService.haveValidSizes(files, maxFileSizeInBytes);
173
176
  if (!haveValidSizes) {
174
177
  await this.onFileInvalidSize();
175
178
  return;
@@ -205,12 +208,18 @@ export class DropAreaComponent {
205
208
  this.errorMessage = gettext('The selected file is not supported.');
206
209
  }
207
210
  async onFileInvalidSize() {
211
+ const maxFileSizeInBytes = this.maxFileSizeInMegaBytes
212
+ ? this.convertMegaBytesToBytes(this.maxFileSizeInMegaBytes)
213
+ : null;
208
214
  const msg = gettext('The selected file is too large. The size limit is {{ limit }}.');
209
- const limit = this.bytes.transform(await this.filesService.loadBytesSizeLimit());
215
+ const limit = this.bytes.transform(min([maxFileSizeInBytes, await this.filesService.loadBytesSizeLimit()]));
210
216
  this.errors = true;
211
217
  this.formControl?.setErrors({ invalidSize: true });
212
218
  this.errorMessage = this.translate.instant(msg, { limit });
213
219
  }
220
+ convertMegaBytesToBytes(maxFileSizeInMegaBytes) {
221
+ return maxFileSizeInMegaBytes * 1048576;
222
+ }
214
223
  getFilesNamesAsString(files) {
215
224
  return map(files, ({ name }) => name).join(', ');
216
225
  }
@@ -288,7 +297,7 @@ export class DropAreaComponent {
288
297
  }
289
298
  }
290
299
  DropAreaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DropAreaComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FilesService }, { token: i2.TranslateService }, { token: i3.BytesPipe }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
291
- DropAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DropAreaComponent, selector: "c8y-drop-area", inputs: { formControl: "formControl", title: "title", message: "message", icon: "icon", loadingMessage: "loadingMessage", forceHideList: "forceHideList", alwaysShow: "alwaysShow", clickToOpen: "clickToOpen", loading: "loading", progress: "progress", maxAllowedFiles: "maxAllowedFiles", files: "files", accept: "accept" }, outputs: { dropped: "dropped" }, host: { listeners: { "keyup": "onkeyup($event)" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: DropAreaComponent, multi: true }], viewQueries: [{ propertyName: "area", first: true, predicate: ["area"], descendants: true, static: true }, { propertyName: "zone", first: true, predicate: ["zone"], descendants: true }, { propertyName: "picker", first: true, predicate: ["picker"], descendants: true }], ngImport: i0, template: "<div\n class=\"drop-zone\"\n *ngIf=\"!shouldShowFilesList()\"\n [ngClass]=\"{ 'has-errors': errors }\"\n [style.pointerEvents]=\"loading ? 'none' : 'auto'\"\n #zone\n (dragleave)=\"stopDragging()\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onOver()\"\n [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n (click)=\"showPicker($event)\"\n tabindex=\"0\"\n>\n <div class=\"file-placeholder\" [ngClass]=\"{ 'drag-over': isOver }\">\n <div *ngIf=\"loading\" class=\"d-flex d-col p-4 flex-center\">\n <div\n class=\"progress progress-striped active m-0\"\n *ngIf=\"progress !== -1\"\n style=\"min-width: 50%\"\n >\n <div\n [attr.aria-label]=\"progress + '%'\"\n class=\"progress-bar\"\n role=\"progressbar\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width]=\"progress + '%'\"\n ></div>\n </div>\n <div class=\"spinner-snake\" *ngIf=\"progress === -1\"></div>\n <p *ngIf=\"!hasDropAreaSmallClass\" class=\"m-t-auto m-b-auto m-r-8\">\n {{ loadingMessage | translate }}\n </p>\n </div>\n\n <div *ngIf=\"!loading\" class=\"hint-placeholder pointer\">\n <i class=\"dlt-c8y-icon-{{ icon }}\"></i>\n <p *ngIf=\"!errors\">\n <b>{{ message | translate }}</b>\n <br />\n <span *ngIf=\"alwaysShow && clickToOpen\" translate></span>\n </p>\n <div *ngIf=\"errors\" class=\"has-errors\">\n <p class=\"form-control-feedback-message\">\n {{ errorMessage | translate }}\n </p>\n </div>\n </div>\n </div>\n</div>\n\n<div\n class=\"drop-zone\"\n *ngIf=\"shouldShowFilesList()\"\n [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n tabindex=\"0\"\n>\n <div *ngIf=\"loading\" class=\"p-absolute p-4 fit-w fit-h d-flex d-col j-c-center a-i-center\">\n <div\n class=\"progress progress-striped active m-0\"\n *ngIf=\"progress !== -1\"\n style=\"min-width: 80%\"\n >\n <div\n [attr.aria-label]=\"progress + '%'\"\n class=\"progress-bar\"\n role=\"progressbar\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width]=\"progress + '%'\"\n ></div>\n </div>\n <div *ngIf=\"progress === -1\">\n <c8y-loading></c8y-loading>\n </div>\n <p *ngIf=\"!hasDropAreaSmallClass\" class=\"m-b-8\">\n <strong>\n {{ loadingMessage | translate }}\n </strong>\n </p>\n </div>\n <div *ngIf=\"!loading\" class=\"file-placeholder p-4\">\n <div class=\"d-flex p-4 a-i-center\">\n <i c8yIcon=\"file-o\" class=\"icon-20 m-r-8\"></i>\n <span title=\"{{ filesNameString }}\" class=\"text-truncate\">\n {{ filesNameString }}\n </span>\n <button\n title=\"{{ 'Remove' | translate }}\"\n [attr.aria-label]=\"'Remove' | translate\"\n type=\"button\"\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n >\n <i c8yIcon=\"minus-circle\" (click)=\"onDelete()\"></i>\n </button>\n </div>\n </div>\n</div>\n<label for=\"file\" class=\"sr-only\">{{ 'Select file' | translate }}</label>\n<input\n #picker\n *ngIf=\"clickToOpen\"\n (change)=\"onPick($event)\"\n (click)=\"picker.focus()\"\n (blur)=\"onTouched()\"\n [accept]=\"acceptedExts\"\n [multiple]=\"maxAllowedFiles > 1\"\n type=\"file\"\n class=\"hidden\"\n id=\"file\"\n/>\n<div #area [hidden]=\"isOver || loading\" (dragover)=\"toggle()\">\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "c8y-loading" }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] });
300
+ DropAreaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DropAreaComponent, selector: "c8y-drop-area", inputs: { formControl: "formControl", title: "title", message: "message", icon: "icon", loadingMessage: "loadingMessage", forceHideList: "forceHideList", alwaysShow: "alwaysShow", clickToOpen: "clickToOpen", loading: "loading", progress: "progress", maxAllowedFiles: "maxAllowedFiles", files: "files", maxFileSizeInMegaBytes: "maxFileSizeInMegaBytes", accept: "accept" }, outputs: { dropped: "dropped" }, host: { listeners: { "keyup": "onkeyup($event)" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: DropAreaComponent, multi: true }], viewQueries: [{ propertyName: "area", first: true, predicate: ["area"], descendants: true, static: true }, { propertyName: "zone", first: true, predicate: ["zone"], descendants: true }, { propertyName: "picker", first: true, predicate: ["picker"], descendants: true }], ngImport: i0, template: "<div\n class=\"drop-zone\"\n *ngIf=\"!shouldShowFilesList()\"\n [ngClass]=\"{ 'has-errors': errors }\"\n [style.pointerEvents]=\"loading ? 'none' : 'auto'\"\n #zone\n (dragleave)=\"stopDragging()\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onOver()\"\n [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n (click)=\"showPicker($event)\"\n tabindex=\"0\"\n>\n <div class=\"file-placeholder\" [ngClass]=\"{ 'drag-over': isOver }\">\n <div *ngIf=\"loading\" class=\"d-flex d-col p-4 flex-center\">\n <div\n class=\"progress progress-striped active m-0\"\n *ngIf=\"progress !== -1\"\n style=\"min-width: 50%\"\n >\n <div\n [attr.aria-label]=\"progress + '%'\"\n class=\"progress-bar\"\n role=\"progressbar\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width]=\"progress + '%'\"\n ></div>\n </div>\n <div class=\"spinner-snake\" *ngIf=\"progress === -1\"></div>\n <p *ngIf=\"!hasDropAreaSmallClass\" class=\"m-t-auto m-b-auto m-r-8\">\n {{ loadingMessage | translate }}\n </p>\n </div>\n\n <div *ngIf=\"!loading\" class=\"hint-placeholder pointer\">\n <i class=\"dlt-c8y-icon-{{ icon }}\"></i>\n <p *ngIf=\"!errors\">\n <b>{{ message | translate }}</b>\n <br />\n <span *ngIf=\"alwaysShow && clickToOpen\" translate></span>\n </p>\n <div *ngIf=\"errors\" class=\"has-errors\">\n <p class=\"form-control-feedback-message\">\n {{ errorMessage | translate }}\n </p>\n </div>\n </div>\n </div>\n</div>\n\n<div\n class=\"drop-zone\"\n *ngIf=\"shouldShowFilesList()\"\n [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n tabindex=\"0\"\n>\n <div *ngIf=\"loading\" class=\"p-absolute p-4 fit-w fit-h d-flex d-col j-c-center a-i-center\">\n <div\n class=\"progress progress-striped active m-0\"\n *ngIf=\"progress !== -1\"\n style=\"min-width: 80%\"\n >\n <div\n [attr.aria-label]=\"progress + '%'\"\n class=\"progress-bar\"\n role=\"progressbar\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width]=\"progress + '%'\"\n ></div>\n </div>\n <div *ngIf=\"progress === -1\">\n <c8y-loading></c8y-loading>\n </div>\n <p *ngIf=\"!hasDropAreaSmallClass\" class=\"m-b-8\">\n <strong>\n {{ loadingMessage | translate }}\n </strong>\n </p>\n </div>\n <div *ngIf=\"!loading\" class=\"file-placeholder p-4\">\n <div class=\"d-flex p-4 a-i-center\">\n <i c8yIcon=\"file-o\" class=\"icon-20 m-r-8\"></i>\n <span title=\"{{ filesNameString }}\" class=\"text-truncate\">\n {{ filesNameString }}\n </span>\n <button\n title=\"{{ 'Remove' | translate }}\"\n [attr.aria-label]=\"'Remove' | translate\"\n type=\"button\"\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n >\n <i c8yIcon=\"minus-circle\" (click)=\"onDelete()\"></i>\n </button>\n </div>\n </div>\n</div>\n<label for=\"file\" class=\"sr-only\">{{ 'Select file' | translate }}</label>\n<input\n #picker\n *ngIf=\"clickToOpen\"\n (change)=\"onPick($event)\"\n (click)=\"picker.focus()\"\n (blur)=\"onTouched()\"\n [accept]=\"acceptedExts\"\n [multiple]=\"maxAllowedFiles > 1\"\n type=\"file\"\n class=\"hidden\"\n id=\"file\"\n/>\n<div #area [hidden]=\"isOver || loading\" (dragover)=\"toggle()\">\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "c8y-loading" }, { kind: "pipe", type: i8.C8yTranslatePipe, name: "translate" }] });
292
301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DropAreaComponent, decorators: [{
293
302
  type: Component,
294
303
  args: [{ selector: 'c8y-drop-area', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: DropAreaComponent, multi: true }], template: "<div\n class=\"drop-zone\"\n *ngIf=\"!shouldShowFilesList()\"\n [ngClass]=\"{ 'has-errors': errors }\"\n [style.pointerEvents]=\"loading ? 'none' : 'auto'\"\n #zone\n (dragleave)=\"stopDragging()\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"onOver()\"\n [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n (click)=\"showPicker($event)\"\n tabindex=\"0\"\n>\n <div class=\"file-placeholder\" [ngClass]=\"{ 'drag-over': isOver }\">\n <div *ngIf=\"loading\" class=\"d-flex d-col p-4 flex-center\">\n <div\n class=\"progress progress-striped active m-0\"\n *ngIf=\"progress !== -1\"\n style=\"min-width: 50%\"\n >\n <div\n [attr.aria-label]=\"progress + '%'\"\n class=\"progress-bar\"\n role=\"progressbar\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width]=\"progress + '%'\"\n ></div>\n </div>\n <div class=\"spinner-snake\" *ngIf=\"progress === -1\"></div>\n <p *ngIf=\"!hasDropAreaSmallClass\" class=\"m-t-auto m-b-auto m-r-8\">\n {{ loadingMessage | translate }}\n </p>\n </div>\n\n <div *ngIf=\"!loading\" class=\"hint-placeholder pointer\">\n <i class=\"dlt-c8y-icon-{{ icon }}\"></i>\n <p *ngIf=\"!errors\">\n <b>{{ message | translate }}</b>\n <br />\n <span *ngIf=\"alwaysShow && clickToOpen\" translate></span>\n </p>\n <div *ngIf=\"errors\" class=\"has-errors\">\n <p class=\"form-control-feedback-message\">\n {{ errorMessage | translate }}\n </p>\n </div>\n </div>\n </div>\n</div>\n\n<div\n class=\"drop-zone\"\n *ngIf=\"shouldShowFilesList()\"\n [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n tabindex=\"0\"\n>\n <div *ngIf=\"loading\" class=\"p-absolute p-4 fit-w fit-h d-flex d-col j-c-center a-i-center\">\n <div\n class=\"progress progress-striped active m-0\"\n *ngIf=\"progress !== -1\"\n style=\"min-width: 80%\"\n >\n <div\n [attr.aria-label]=\"progress + '%'\"\n class=\"progress-bar\"\n role=\"progressbar\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width]=\"progress + '%'\"\n ></div>\n </div>\n <div *ngIf=\"progress === -1\">\n <c8y-loading></c8y-loading>\n </div>\n <p *ngIf=\"!hasDropAreaSmallClass\" class=\"m-b-8\">\n <strong>\n {{ loadingMessage | translate }}\n </strong>\n </p>\n </div>\n <div *ngIf=\"!loading\" class=\"file-placeholder p-4\">\n <div class=\"d-flex p-4 a-i-center\">\n <i c8yIcon=\"file-o\" class=\"icon-20 m-r-8\"></i>\n <span title=\"{{ filesNameString }}\" class=\"text-truncate\">\n {{ filesNameString }}\n </span>\n <button\n title=\"{{ 'Remove' | translate }}\"\n [attr.aria-label]=\"'Remove' | translate\"\n type=\"button\"\n class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n >\n <i c8yIcon=\"minus-circle\" (click)=\"onDelete()\"></i>\n </button>\n </div>\n </div>\n</div>\n<label for=\"file\" class=\"sr-only\">{{ 'Select file' | translate }}</label>\n<input\n #picker\n *ngIf=\"clickToOpen\"\n (change)=\"onPick($event)\"\n (click)=\"picker.focus()\"\n (blur)=\"onTouched()\"\n [accept]=\"acceptedExts\"\n [multiple]=\"maxAllowedFiles > 1\"\n type=\"file\"\n class=\"hidden\"\n id=\"file\"\n/>\n<div #area [hidden]=\"isOver || loading\" (dragover)=\"toggle()\">\n <ng-content></ng-content>\n</div>\n" }]
@@ -318,6 +327,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
318
327
  type: Input
319
328
  }], files: [{
320
329
  type: Input
330
+ }], maxFileSizeInMegaBytes: [{
331
+ type: Input
321
332
  }], accept: [{
322
333
  type: Input
323
334
  }], area: [{
@@ -340,4 +351,4 @@ var ReadAsType;
340
351
  ReadAsType[ReadAsType["ARRAY_BUFFER"] = 2] = "ARRAY_BUFFER";
341
352
  ReadAsType[ReadAsType["BINARY_STRING"] = 3] = "BINARY_STRING";
342
353
  })(ReadAsType || (ReadAsType = {}));
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1hcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHJvcC1hcmVhL2Ryb3AtYXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Ryb3AtYXJlYS9kcm9wLWFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFFMUM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFPSCxNQUFNLE9BQU8saUJBQWlCO0lBdUQ1QixZQUNVLEVBQXFCLEVBQ3JCLFlBQTBCLEVBQzFCLFNBQTJCLEVBQzNCLEtBQWdCLEVBQ2hCLEdBQWU7UUFKZixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixVQUFLLEdBQUwsS0FBSyxDQUFXO1FBQ2hCLFFBQUcsR0FBSCxHQUFHLENBQVk7UUExRGhCLFVBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7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QUs7Z0JBMEJHLE1BQU07c0JBQWQsS0FBSztnQkFRK0IsSUFBSTtzQkFBeEMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLElBQUk7c0JBQXpDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDSSxNQUFNO3NCQUE3QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBV3RDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBMFJuQyxJQUFLLFVBS0o7QUFMRCxXQUFLLFVBQVU7SUFDYiwyQ0FBSSxDQUFBO0lBQ0osbURBQVEsQ0FBQTtJQUNSLDJEQUFZLENBQUE7SUFDWiw2REFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLFVBQVUsS0FBVixVQUFVLFFBS2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZ2V0LCBtYXAsIHNvbWUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnl0ZXNQaXBlIH0gZnJvbSAnLi4vY29tbW9uL2J5dGVzLnBpcGUnO1xuaW1wb3J0IHsgRmlsZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2ZpbGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbi8qKlxuICogQSBkcm9wLXpvbmUgd2hpY2ggaXMgYSBmaWxlIHNlbGVjdG9yIGFsbG93aW5nIHVzZXJzIHRvIHNlbGVjdCBmaWxlKHMpIGZyb20gdGhlaXIgZmlsZSBzeXN0ZW0sIGVpdGhlciBuYXRpdmVseSBvciBieSBkcmFnIGFuZCBkcm9wLlxuICpcbiAqICMjIEV4YW1wbGU6XG4gKlxuICogYGBgaHRtbFxuICogIDxkaXY+XG4gKiAgICA8Yzh5LWRyb3AtYXJlYVxuICogICAgICAoZHJvcHBlZCk9XCJ1cGxvYWRGaWxlKCRldmVudClcIlxuICogICAgICBbaWNvbl09XCIndXBsb2FkJ1wiXG4gKiAgICAgIFthY2NlcHRdPVwiJy56aXAsLjd6LHZpZGVvJ1wiPlxuICogICAgPC9jOHktZHJvcC1hcmVhPlxuICogIDwvZGl2PlxuICogYGBgXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRyb3AtYXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wLWFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogRHJvcEFyZWFDb21wb25lbnQsIG11bHRpOiB0cnVlIH1dXG59KVxuZXhwb3J0IGNsYXNzIERyb3BBcmVhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICBASW5wdXQoKSB0aXRsZSA9IGdldHRleHQoJ1VwbG9hZCBmaWxlJyk7XG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSBnZXR0ZXh0KCdEcm9wIGZpbGUgaGVyZScpO1xuICBASW5wdXQoKSBpY29uID0gJ3BsdXMtc3F1YXJlJztcbiAgQElucHV0KCkgbG9hZGluZ01lc3NhZ2UgPSBnZXR0ZXh0KCdVcGxvYWRpbmfigKYnKTtcbiAgQElucHV0KCkgZm9yY2VIaWRlTGlzdCA9IGZhbHNlO1xuICAvKiogQWZmZWN0cyBkaXNwbGF5aW5nIGJvdGggdGhlIGRyb3Agem9uZSBhbmQgdGhlIGxpc3Qgb2YgZHJvcHBlZCBmaWxlcy4gKi9cbiAgQElucHV0KCkgYWx3YXlzU2hvdyA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGlja1RvT3BlbiA9IHRydWU7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIHVwbG9hZCBhcyBhIHBlcmNlbnRhZ2UuIElmIG5vdCBnaXZlbiBhIHNwaW5uZXIgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBwcm9ncmVzcyA9IC0xOyAvLyAtMSA9IHNwaW5uZXJcbiAgQE91dHB1dCgpIGRyb3BwZWQ6IEV2ZW50RW1pdHRlcjxEcm9wcGVkRmlsZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgbWF4QWxsb3dlZEZpbGVzID0gSW5maW5pdHk7XG4gIEBJbnB1dCgpIGZpbGVzOiBGaWxlTGlzdDtcbiAgLyoqIFNwZWNpZmllcyBhIGZpbHRlciBmb3Igd2hhdCBmaWxlIHR5cGVzIHRoZSB1c2VyIGNhbiBwaWNrIGZyb20gdGhlIGZpbGUgaW5wdXQgZGlhbG9nIGJveC5cbiAgICogIyMgRXhhbXBsZTpcbiAgICpcbiAgICogU3BlY2lmeSBmaWxlIHR5cGVzIGJ5IGV4dGVuc2lvbnM6XG4gICAqIGBgYGh0bWxcbiAgICogIC4uLlxuICAgKiAgW2FjY2VwdF09XCInLnppcCwuN3onXCJcbiAgICogIC4uLlxuICAgKiBgYGBcbiAgICpcbiAgICogU3BlY2lmeSBmaWxlIHR5cGVzIGJ5IGV4dGVuc2lvbnMgYW5kIGdlbmVyaWMgdHlwZXMgW0dFTkVSSUNfRklMRV9UWVBFXXtAbGluayBHRU5FUklDX0ZJTEVfVFlQRX06XG4gICAqIGBgYGh0bWxcbiAgICogIC4uLlxuICAgKiAgW2FjY2VwdF09XCInLnBkZixhcmNoaXZlJ1wiXG4gICAqICAuLi5cbiAgICogYGBgXG4gICAqXG4gICAqIFNwZWNpZnkgZmlsZSB0eXBlcyBieSBnZW5lcmljIHR5cGVzIFtHRU5FUklDX0ZJTEVfVFlQRV17QGxpbmsgR0VORVJJQ19GSUxFX1RZUEV9OlxuICAgKiAgYGBgaHRtbFxuICAgKiAgLi4uXG4gICAqICBbYWNjZXB0XT1cIidhcmNoaXZlLHZpZGVvJ1wiXG4gICAqICAuLi5cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZztcbiAgaXNPdmVyID0gZmFsc2U7XG4gIGVycm9ycyA9IGZhbHNlO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgZmlsZXNOYW1lU3RyaW5nOiBzdHJpbmc7XG4gIGFjY2VwdGVkRXh0czogc3RyaW5nW107XG4gIGhhc0Ryb3BBcmVhU21hbGxDbGFzczogYm9vbGVhbjtcblxuICBAVmlld0NoaWxkKCdhcmVhJywgeyBzdGF0aWM6IHRydWUgfSkgYXJlYTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnem9uZScsIHsgc3RhdGljOiBmYWxzZSB9KSB6b25lOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwaWNrZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgcGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmlsZXNTZXJ2aWNlOiBGaWxlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBieXRlczogQnl0ZXNQaXBlLFxuICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmXG4gICkge31cblxuICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gIG9ua2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICB0aGlzLnBpY2tlci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY2NlcHRlZEV4dHMgPSB0aGlzLmZpbGVzU2VydmljZS5leHRyYWN0RmlsZUV4dGVuc2lvbnModGhpcy5hY2NlcHQpLm1hcCh0ID0+IGAuJHt0fWApO1xuICAgIHRoaXMuYWx3YXlzU2hvdyA9IHRoaXMuYWx3YXlzU2hvdyB8fCB0aGlzLmFyZWEubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDA7XG5cbiAgICBpZiAodGhpcy5maWxlcyAmJiB0aGlzLmlzRmlsZXNBbk9iamVjdE9yQXJyYXkoKSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub25GaWxlc1NlbGVjdGVkKHRoaXMuZmlsZXMpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICB0aGlzLmhhc0Ryb3BBcmVhU21hbGxDbGFzcyA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkcm9wLWFyZWEtc20nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBzdHlsZSBvZiB0aGUgZHJvcCB6b25lIGVsZW1lbnQgd2hlbiBhIGZpbGUgaXMgZHJhZ2dlZCBvdmVyIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy56b25lLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5hcmVhLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgJ3B4JztcbiAgICB0aGlzLm9uT3ZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGNvbXB1dGVyIGJyb3dzZXIgd2l0aCBmaWxlcyB0byBkcm9wIGludG8gZHJvcC1hcmVhIHpvbmUuXG4gICAqL1xuICBzaG93UGlja2VyKCRldmVudD8pOiB2b2lkIHtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0KCRldmVudCk7XG4gICAgdGhpcy5waWNrZXIubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgIHRoaXMucGlja2VyLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiBmaWxlIGlzIG9uIG92ZXIgZHJvcCBhcmVhLCBidXQgbm90IGRyb3BwZWQuXG4gICAqL1xuICBvbk92ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3Zlcikge1xuICAgICAgdGhpcy5pc092ZXIgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLnByZXZlbnREZWZhdWx0KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLnByZXZlbnREZWZhdWx0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcmVkIHdoZW4gZmlsZSBpcyBkcm9wcGVkLlxuICAgKi9cbiAgb25QaWNrKCRldmVudCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JzID0gZmFsc2U7XG4gICAgdGhpcy5wcmV2ZW50RGVmYXVsdCgkZXZlbnQpO1xuICAgIHRoaXMub25GaWxlc1NlbGVjdGVkKCRldmVudC50YXJnZXQuZmlsZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBmaWxlIHdoZW4gaXQgaXMgZHJvcHBlZCBpbnRvIGRyb3AtYXJlYS5cbiAgICovXG4gIG9uRHJvcCgkZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0KCRldmVudCk7XG4gICAgdGhpcy5vbkZpbGVzU2VsZWN0ZWQoJGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgdGhpcy5zdG9wRHJhZ2dpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgY29uZGl0aW9uIHdoYXQgc2hvdWxkIGJlIGRpc3BsYXllZDogZHJvcC1hcmVhIHpvbmUgb3IgbGlzdCBvZiBkcm9wcGVkIGZpbGVzLlxuICAgKi9cbiAgc2hvdWxkU2hvd0ZpbGVzTGlzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0ZpbGVzQW5PYmplY3RPckFycmF5KCkgJiZcbiAgICAgICF0aGlzLmZvcmNlSGlkZUxpc3QgJiZcbiAgICAgIHRoaXMuYWx3YXlzU2hvdyAmJlxuICAgICAgIXRoaXMuaXNGaWxlc0FycmF5RW1wdHkoKSAmJlxuICAgICAgIXRoaXMuaGFzRW1wdHlGaWxlcygpICYmXG4gICAgICAhdGhpcy5pc1Rvb01hbnlGaWxlcygpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiBmaWxlIGlzIHBpY2tlZCBvdmVyIHdlYiBhcHBsaWNhdGlvbi5cbiAgICovXG4gIHN0b3BEcmFnZ2luZygpOiB2b2lkIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMucHJldmVudERlZmF1bHQpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLnByZXZlbnREZWZhdWx0KTtcbiAgICB0aGlzLmlzT3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBmaWxlcyBhbHJlYWR5IGRyb3BwZWQgZmlsZXMuXG4gICAqL1xuICBvbkRlbGV0ZSgpIHtcbiAgICBkZWxldGUgdGhpcy5maWxlcztcbiAgICBkZWxldGUgdGhpcy5maWxlc05hbWVTdHJpbmc7XG4gICAgdGhpcy5jbGVhckVycm9ycygpO1xuICAgIHRoaXMuZHJvcHBlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9IF8gPT4gdW5kZWZpbmVkO1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5maWxlcyA9IHZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMub25EZWxldGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlc05hbWVTdHJpbmcgPSB0aGlzLmdldEZpbGVzTmFtZXNBc1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uRmlsZXNTZWxlY3RlZChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBoYXNWYWxpZE5hbWVMZW5ndGggPSB0aGlzLmZpbGVzU2VydmljZS5jaGVja01heExlbmd0aChmaWxlcyk7XG4gICAgaWYgKCFoYXNWYWxpZE5hbWVMZW5ndGgpIHtcbiAgICAgIHRoaXMub25GaWxlSW52YWxpZE5hbWVMZW5ndGgoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXZlVmFsaWRUeXBlcyA9IHRoaXMuZmlsZXNTZXJ2aWNlLmhhdmVWYWxpZEV4dGVuc2lvbnMoZmlsZXMsIHRoaXMuYWNjZXB0KTtcbiAgICBpZiAoIWhhdmVWYWxpZFR5cGVzKSB7XG4gICAgICB0aGlzLm9uRmlsZUludmFsaWRUeXBlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGF2ZVZhbGlkU2l6ZXMgPSBhd2FpdCB0aGlzLmZpbGVzU2VydmljZS5oYXZlVmFsaWRTaXplcyhmaWxlcyk7XG4gICAgaWYgKCFoYXZlVmFsaWRTaXplcykge1xuICAgICAgYXdhaXQgdGhpcy5vbkZpbGVJbnZhbGlkU2l6ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZXMgPSBmaWxlcztcbiAgICB0aGlzLmZpbGVzTmFtZVN0cmluZyA9IHRoaXMuZ2V0RmlsZXNOYW1lc0FzU3RyaW5nKGZpbGVzKTtcbiAgICB0aGlzLmVycm9ycyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuaXNUb29NYW55RmlsZXMoKSkge1xuICAgICAgdGhpcy5lcnJvcnMgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0RXJyb3JzKHsgdG9vTWFueUZpbGVzOiB0cnVlIH0pO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBnZXR0ZXh0KCdUb28gbWFueSBmaWxlcyBzZWxlY3RlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNFbXB0eUZpbGVzKCkpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldEVycm9ycyh7IGVtcHR5RmlsZXM6IHRydWUgfSk7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGdldHRleHQoJ0ZpbGUgbXVzdCBub3QgYmUgZW1wdHksIHNlbGVjdCBhbm90aGVyIG9uZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkcm9wcGVkRmlsZXM6IERyb3BwZWRGaWxlW10gPSB0aGlzLmNvbXBvc2UoZmlsZXMpO1xuICAgIHRoaXMuZHJvcHBlZC5lbWl0KGRyb3BwZWRGaWxlcyk7XG4gICAgdGhpcy5vbkNoYW5nZShkcm9wcGVkRmlsZXMpO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUludmFsaWROYW1lTGVuZ3RoKCkge1xuICAgIHRoaXMuZXJyb3JzID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkTmFtZUxlbmd0aDogdHJ1ZSB9KTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGdldHRleHQoJ1RoZSBmaWxlbmFtZSBpcyB0b28gbG9uZy4nKTtcbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlSW52YWxpZFR5cGUoKSB7XG4gICAgdGhpcy5lcnJvcnMgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWRUeXBlOiB0cnVlIH0pO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZ2V0dGV4dCgnVGhlIHNlbGVjdGVkIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25GaWxlSW52YWxpZFNpemUoKSB7XG4gICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnVGhlIHNlbGVjdGVkIGZpbGUgaXMgdG9vIGxhcmdlLiBUaGUgc2l6ZSBsaW1pdCBpcyB7eyBsaW1pdCB9fS4nKTtcbiAgICBjb25zdCBsaW1pdCA9IHRoaXMuYnl0ZXMudHJhbnNmb3JtKGF3YWl0IHRoaXMuZmlsZXNTZXJ2aWNlLmxvYWRCeXRlc1NpemVMaW1pdCgpKTtcbiAgICB0aGlzLmVycm9ycyA9IHRydWU7XG4gICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZFNpemU6IHRydWUgfSk7XG5cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobXNnLCB7IGxpbWl0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlc05hbWVzQXNTdHJpbmcoZmlsZXM6IEZpbGVMaXN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbWFwKGZpbGVzLCAoeyBuYW1lIH0pID0+IG5hbWUpLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRmlsZXNBcnJheUVtcHR5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2ZpbGVzLmxlbmd0aCcsIDApID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Rvb01hbnlGaWxlcygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmaWxlcy5sZW5ndGgnLCAwKSA+IHRoaXMubWF4QWxsb3dlZEZpbGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVzQW5PYmplY3RPckFycmF5KCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5maWxlcyA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwcml2YXRlIGhhc0VtcHR5RmlsZXMoKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmlzRmlsZXNBcnJheUVtcHR5KCkpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuaXNBbnlGaWxlRW1wdHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbnlGaWxlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoQXJyYXkuZnJvbSh0aGlzLmZpbGVzKSwgWydzaXplJywgMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVycm9ycygpIHtcbiAgICBkZWxldGUgdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgdGhpcy5lcnJvcnMgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnREZWZhdWx0KCRldmVudD8pIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXBvc2UoZmlsZXM6IEZpbGVMaXN0KTogRHJvcHBlZEZpbGVbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmlsZXMpLm1hcChmaWxlID0+ICh7XG4gICAgICBmaWxlLFxuICAgICAgcmVhZEFzSnNvbjogYXN5bmMgKCkgPT4gSlNPTi5wYXJzZShhd2FpdCB0aGlzLnJlYWQoZmlsZSwgUmVhZEFzVHlwZS5URVhUKSksXG4gICAgICByZWFkQXNUZXh0OiBhc3luYyAoKSA9PiB0aGlzLnJlYWQoZmlsZSwgUmVhZEFzVHlwZS5URVhUKSxcbiAgICAgIHJlYWRBc0FycmF5QnVmZmVyOiBhc3luYyAoKSA9PiB0aGlzLnJlYWQoZmlsZSwgUmVhZEFzVHlwZS5BUlJBWV9CVUZGRVIpLFxuICAgICAgcmVhZEFzQmluYXJ5U3RyaW5nOiBhc3luYyAoKSA9PiB0aGlzLnJlYWQoZmlsZSwgUmVhZEFzVHlwZS5CSU5BUllfU1RSSU5HKSxcbiAgICAgIHJlYWRBc0RhdGFVUkw6IGFzeW5jICgpID0+IHRoaXMucmVhZChmaWxlLCBSZWFkQXNUeXBlLkRBVEFfVVJMKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZChmaWxlLCB0eXBlOiBSZWFkQXNUeXBlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUmVhZEFzVHlwZS5URVhUOiB7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBSZWFkQXNUeXBlLkFSUkFZX0JVRkZFUjoge1xuICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFJlYWRBc1R5cGUuQklOQVJZX1NUUklORzoge1xuICAgICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBSZWFkQXNUeXBlLkRBVEFfVVJMOiB7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB0aGlzLm9uTG9hZChyZWFkZXIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uTG9hZChyZWFkZXIsIHJlc29sdmUsIHJlamVjdCkge1xuICAgIGlmIChyZWFkZXIucmVhZHlTdGF0ZSAhPT0gMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVhZGVyLmVycm9yKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICB9XG4gICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BwZWRGaWxlIHtcbiAgZmlsZTogRmlsZTtcbiAgcmVhZEFzVGV4dCgpO1xuICByZWFkQXNBcnJheUJ1ZmZlcigpO1xuICByZWFkQXNCaW5hcnlTdHJpbmcoKTtcbiAgcmVhZEFzRGF0YVVSTCgpO1xuICByZWFkQXNKc29uKCk7XG59XG5cbmVudW0gUmVhZEFzVHlwZSB7XG4gIFRFWFQsXG4gIERBVEFfVVJMLFxuICBBUlJBWV9CVUZGRVIsXG4gIEJJTkFSWV9TVFJJTkdcbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJkcm9wLXpvbmVcIlxuICAqbmdJZj1cIiFzaG91bGRTaG93RmlsZXNMaXN0KClcIlxuICBbbmdDbGFzc109XCJ7ICdoYXMtZXJyb3JzJzogZXJyb3JzIH1cIlxuICBbc3R5bGUucG9pbnRlckV2ZW50c109XCJsb2FkaW5nID8gJ25vbmUnIDogJ2F1dG8nXCJcbiAgI3pvbmVcbiAgKGRyYWdsZWF2ZSk9XCJzdG9wRHJhZ2dpbmcoKVwiXG4gIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgKGRyYWdvdmVyKT1cIm9uT3ZlcigpXCJcbiAgW3N0eWxlLmRpc3BsYXldPVwiaXNPdmVyIHx8IGFsd2F5c1Nob3cgfHwgbG9hZGluZyA/ICdibG9jaycgOiAnbm9uZSdcIlxuICAoY2xpY2spPVwic2hvd1BpY2tlcigkZXZlbnQpXCJcbiAgdGFiaW5kZXg9XCIwXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpbGUtcGxhY2Vob2xkZXJcIiBbbmdDbGFzc109XCJ7ICdkcmFnLW92ZXInOiBpc092ZXIgfVwiPlxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJkLWZsZXggZC1jb2wgcC00IGZsZXgtY2VudGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MgcHJvZ3Jlc3Mtc3RyaXBlZCBhY3RpdmUgbS0wXCJcbiAgICAgICAgKm5nSWY9XCJwcm9ncmVzcyAhPT0gLTFcIlxuICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogNTAlXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJvZ3Jlc3MgKyAnJSdcIlxuICAgICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCJcbiAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAgIGFyaWEtdmFsdWVub3c9XCIwXCJcbiAgICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiXG4gICAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cInByb2dyZXNzICsgJyUnXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1zbmFrZVwiICpuZ0lmPVwicHJvZ3Jlc3MgPT09IC0xXCI+PC9kaXY+XG4gICAgICA8cCAqbmdJZj1cIiFoYXNEcm9wQXJlYVNtYWxsQ2xhc3NcIiBjbGFzcz1cIm0tdC1hdXRvIG0tYi1hdXRvIG0tci04XCI+XG4gICAgICAgIHt7IGxvYWRpbmdNZXNzYWdlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdcIiBjbGFzcz1cImhpbnQtcGxhY2Vob2xkZXIgcG9pbnRlclwiPlxuICAgICAgPGkgY2xhc3M9XCJkbHQtYzh5LWljb24te3sgaWNvbiB9fVwiPjwvaT5cbiAgICAgIDxwICpuZ0lmPVwiIWVycm9yc1wiPlxuICAgICAgICA8Yj57eyBtZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9iPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJhbHdheXNTaG93ICYmIGNsaWNrVG9PcGVuXCIgdHJhbnNsYXRlPjwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgKm5nSWY9XCJlcnJvcnNcIiBjbGFzcz1cImhhcy1lcnJvcnNcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZmVlZGJhY2stbWVzc2FnZVwiPlxuICAgICAgICAgIHt7IGVycm9yTWVzc2FnZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cImRyb3Atem9uZVwiXG4gICpuZ0lmPVwic2hvdWxkU2hvd0ZpbGVzTGlzdCgpXCJcbiAgW3N0eWxlLmRpc3BsYXldPVwiaXNPdmVyIHx8IGFsd2F5c1Nob3cgfHwgbG9hZGluZyA/ICdibG9jaycgOiAnbm9uZSdcIlxuICB0YWJpbmRleD1cIjBcIlxuPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwicC1hYnNvbHV0ZSBwLTQgZml0LXcgZml0LWggZC1mbGV4IGQtY29sIGotYy1jZW50ZXIgYS1pLWNlbnRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicHJvZ3Jlc3MgcHJvZ3Jlc3Mtc3RyaXBlZCBhY3RpdmUgbS0wXCJcbiAgICAgICpuZ0lmPVwicHJvZ3Jlc3MgIT09IC0xXCJcbiAgICAgIHN0eWxlPVwibWluLXdpZHRoOiA4MCVcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwcm9ncmVzcyArICclJ1wiXG4gICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCJcbiAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgYXJpYS12YWx1ZW5vdz1cIjBcIlxuICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiXG4gICAgICAgIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwicHJvZ3Jlc3MgKyAnJSdcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJwcm9ncmVzcyA9PT0gLTFcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuICAgIDxwICpuZ0lmPVwiIWhhc0Ryb3BBcmVhU21hbGxDbGFzc1wiIGNsYXNzPVwibS1iLThcIj5cbiAgICAgIDxzdHJvbmc+XG4gICAgICAgIHt7IGxvYWRpbmdNZXNzYWdlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3N0cm9uZz5cbiAgICA8L3A+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdcIiBjbGFzcz1cImZpbGUtcGxhY2Vob2xkZXIgcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBwLTQgYS1pLWNlbnRlclwiPlxuICAgICAgPGkgYzh5SWNvbj1cImZpbGUtb1wiIGNsYXNzPVwiaWNvbi0yMCBtLXItOFwiPjwvaT5cbiAgICAgIDxzcGFuIHRpdGxlPVwie3sgZmlsZXNOYW1lU3RyaW5nIH19XCIgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgIHt7IGZpbGVzTmFtZVN0cmluZyB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IGJ0bi1kb3QtLWRhbmdlciBzaG93T25Ib3ZlciBtLWwtYXV0b1wiXG4gICAgICA+XG4gICAgICAgIDxpIGM4eUljb249XCJtaW51cy1jaXJjbGVcIiAoY2xpY2spPVwib25EZWxldGUoKVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGxhYmVsIGZvcj1cImZpbGVcIiBjbGFzcz1cInNyLW9ubHlcIj57eyAnU2VsZWN0IGZpbGUnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbjxpbnB1dFxuICAjcGlja2VyXG4gICpuZ0lmPVwiY2xpY2tUb09wZW5cIlxuICAoY2hhbmdlKT1cIm9uUGljaygkZXZlbnQpXCJcbiAgKGNsaWNrKT1cInBpY2tlci5mb2N1cygpXCJcbiAgKGJsdXIpPVwib25Ub3VjaGVkKClcIlxuICBbYWNjZXB0XT1cImFjY2VwdGVkRXh0c1wiXG4gIFttdWx0aXBsZV09XCJtYXhBbGxvd2VkRmlsZXMgPiAxXCJcbiAgdHlwZT1cImZpbGVcIlxuICBjbGFzcz1cImhpZGRlblwiXG4gIGlkPVwiZmlsZVwiXG4vPlxuPGRpdiAjYXJlYSBbaGlkZGVuXT1cImlzT3ZlciB8fCBsb2FkaW5nXCIgKGRyYWdvdmVyKT1cInRvZ2dsZSgpXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1hcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHJvcC1hcmVhL2Ryb3AtYXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Ryb3AtYXJlYS9kcm9wLWFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7O0FBRTFDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQXdENUIsWUFDVSxFQUFxQixFQUNyQixZQUEwQixFQUMxQixTQUEyQixFQUMzQixLQUFnQixFQUNoQixHQUFlO1FBSmYsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsVUFBSyxHQUFMLEtBQUssQ0FBVztRQUNoQixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBM0RoQixVQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEs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RSxlQUFlLGFBRWQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLG1CQUFtQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzttTkFHL0UsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0UsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQTBCRyxNQUFNO3NCQUFkLEtBQUs7Z0JBUStCLElBQUk7c0JBQXhDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRyxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0ksTUFBTTtzQkFBN0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQVd0QyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQXFTbkMsSUFBSyxVQUtKO0FBTEQsV0FBSyxVQUFVO0lBQ2IsMkNBQUksQ0FBQTtJQUNKLG1EQUFRLENBQUE7SUFDUiwyREFBWSxDQUFBO0lBQ1osNkRBQWEsQ0FBQTtBQUNmLENBQUMsRUFMSSxVQUFVLEtBQVYsVUFBVSxRQUtkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGdldCwgbWFwLCBzb21lLCBtaW4gfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnl0ZXNQaXBlIH0gZnJvbSAnLi4vY29tbW9uL2J5dGVzLnBpcGUnO1xuaW1wb3J0IHsgRmlsZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2ZpbGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbi8qKlxuICogQSBkcm9wLXpvbmUgd2hpY2ggaXMgYSBmaWxlIHNlbGVjdG9yIGFsbG93aW5nIHVzZXJzIHRvIHNlbGVjdCBmaWxlKHMpIGZyb20gdGhlaXIgZmlsZSBzeXN0ZW0sIGVpdGhlciBuYXRpdmVseSBvciBieSBkcmFnIGFuZCBkcm9wLlxuICpcbiAqICMjIEV4YW1wbGU6XG4gKlxuICogYGBgaHRtbFxuICogIDxkaXY+XG4gKiAgICA8Yzh5LWRyb3AtYXJlYVxuICogICAgICAoZHJvcHBlZCk9XCJ1cGxvYWRGaWxlKCRldmVudClcIlxuICogICAgICBbaWNvbl09XCIndXBsb2FkJ1wiXG4gKiAgICAgIFthY2NlcHRdPVwiJy56aXAsLjd6LHZpZGVvJ1wiPlxuICogICAgPC9jOHktZHJvcC1hcmVhPlxuICogIDwvZGl2PlxuICogYGBgXG4gKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRyb3AtYXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wLWFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogRHJvcEFyZWFDb21wb25lbnQsIG11bHRpOiB0cnVlIH1dXG59KVxuZXhwb3J0IGNsYXNzIERyb3BBcmVhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICBASW5wdXQoKSB0aXRsZSA9IGdldHRleHQoJ1VwbG9hZCBmaWxlJyk7XG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSBnZXR0ZXh0KCdEcm9wIGZpbGUgaGVyZScpO1xuICBASW5wdXQoKSBpY29uID0gJ3BsdXMtc3F1YXJlJztcbiAgQElucHV0KCkgbG9hZGluZ01lc3NhZ2UgPSBnZXR0ZXh0KCdVcGxvYWRpbmfigKYnKTtcbiAgQElucHV0KCkgZm9yY2VIaWRlTGlzdCA9IGZhbHNlO1xuICAvKiogQWZmZWN0cyBkaXNwbGF5aW5nIGJvdGggdGhlIGRyb3Agem9uZSBhbmQgdGhlIGxpc3Qgb2YgZHJvcHBlZCBmaWxlcy4gKi9cbiAgQElucHV0KCkgYWx3YXlzU2hvdyA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGlja1RvT3BlbiA9IHRydWU7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIHVwbG9hZCBhcyBhIHBlcmNlbnRhZ2UuIElmIG5vdCBnaXZlbiBhIHNwaW5uZXIgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBwcm9ncmVzcyA9IC0xOyAvLyAtMSA9IHNwaW5uZXJcbiAgQE91dHB1dCgpIGRyb3BwZWQ6IEV2ZW50RW1pdHRlcjxEcm9wcGVkRmlsZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgbWF4QWxsb3dlZEZpbGVzID0gSW5maW5pdHk7XG4gIEBJbnB1dCgpIGZpbGVzOiBGaWxlTGlzdDtcbiAgQElucHV0KCkgbWF4RmlsZVNpemVJbk1lZ2FCeXRlczogbnVtYmVyO1xuICAvKiogU3BlY2lmaWVzIGEgZmlsdGVyIGZvciB3aGF0IGZpbGUgdHlwZXMgdGhlIHVzZXIgY2FuIHBpY2sgZnJvbSB0aGUgZmlsZSBpbnB1dCBkaWFsb2cgYm94LlxuICAgKiAjIyBFeGFtcGxlOlxuICAgKlxuICAgKiBTcGVjaWZ5IGZpbGUgdHlwZXMgYnkgZXh0ZW5zaW9uczpcbiAgICogYGBgaHRtbFxuICAgKiAgLi4uXG4gICAqICBbYWNjZXB0XT1cIicuemlwLC43eidcIlxuICAgKiAgLi4uXG4gICAqIGBgYFxuICAgKlxuICAgKiBTcGVjaWZ5IGZpbGUgdHlwZXMgYnkgZXh0ZW5zaW9ucyBhbmQgZ2VuZXJpYyB0eXBlcyBbR0VORVJJQ19GSUxFX1RZUEVde0BsaW5rIEdFTkVSSUNfRklMRV9UWVBFfTpcbiAgICogYGBgaHRtbFxuICAgKiAgLi4uXG4gICAqICBbYWNjZXB0XT1cIicucGRmLGFyY2hpdmUnXCJcbiAgICogIC4uLlxuICAgKiBgYGBcbiAgICpcbiAgICogU3BlY2lmeSBmaWxlIHR5cGVzIGJ5IGdlbmVyaWMgdHlwZXMgW0dFTkVSSUNfRklMRV9UWVBFXXtAbGluayBHRU5FUklDX0ZJTEVfVFlQRX06XG4gICAqICBgYGBodG1sXG4gICAqICAuLi5cbiAgICogIFthY2NlcHRdPVwiJ2FyY2hpdmUsdmlkZW8nXCJcbiAgICogIC4uLlxuICAgKlxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpIGFjY2VwdDogc3RyaW5nO1xuICBpc092ZXIgPSBmYWxzZTtcbiAgZXJyb3JzID0gZmFsc2U7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBmaWxlc05hbWVTdHJpbmc6IHN0cmluZztcbiAgYWNjZXB0ZWRFeHRzOiBzdHJpbmdbXTtcbiAgaGFzRHJvcEFyZWFTbWFsbENsYXNzOiBib29sZWFuO1xuXG4gIEBWaWV3Q2hpbGQoJ2FyZWEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBhcmVhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd6b25lJywgeyBzdGF0aWM6IGZhbHNlIH0pIHpvbmU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwaWNrZXI6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmaWxlc1NlcnZpY2U6IEZpbGVzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJ5dGVzOiBCeXRlc1BpcGUsXG4gICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgb25rZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMucGlja2VyLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY2VwdGVkRXh0cyA9IHRoaXMuZmlsZXNTZXJ2aWNlLmV4dHJhY3RGaWxlRXh0ZW5zaW9ucyh0aGlzLmFjY2VwdCkubWFwKHQgPT4gYC4ke3R9YCk7XG4gICAgdGhpcy5hbHdheXNTaG93ID0gdGhpcy5hbHdheXNTaG93IHx8IHRoaXMuYXJlYS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMDtcblxuICAgIGlmICh0aGlzLmZpbGVzICYmIHRoaXMuaXNGaWxlc0FuT2JqZWN0T3JBcnJheSgpICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vbkZpbGVzU2VsZWN0ZWQodGhpcy5maWxlcyk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuaGFzRHJvcEFyZWFTbWFsbENsYXNzID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Ryb3AtYXJlYS1zbScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHN0eWxlIG9mIHRoZSBkcm9wIHpvbmUgZWxlbWVudCB3aGVuIGEgZmlsZSBpcyBkcmFnZ2VkIG92ZXIgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmFyZWEubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAncHgnO1xuICAgIHRoaXMub25PdmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgY29tcHV0ZXIgYnJvd3NlciB3aXRoIGZpbGVzIHRvIGRyb3AgaW50byBkcm9wLWFyZWEgem9uZS5cbiAgICovXG4gIHNob3dQaWNrZXIoJGV2ZW50Pyk6IHZvaWQge1xuICAgIHRoaXMucHJldmVudERlZmF1bHQoJGV2ZW50KTtcbiAgICB0aGlzLnBpY2tlci5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5waWNrZXIubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIGZpbGUgaXMgb24gb3ZlciBkcm9wIGFyZWEsIGJ1dCBub3QgZHJvcHBlZC5cbiAgICovXG4gIG9uT3ZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNPdmVyKSB7XG4gICAgICB0aGlzLmlzT3ZlciA9IHRydWU7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMucHJldmVudERlZmF1bHQpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMucHJldmVudERlZmF1bHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiBmaWxlIGlzIGRyb3BwZWQuXG4gICAqL1xuICBvblBpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lcnJvcnMgPSBmYWxzZTtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0KCRldmVudCk7XG4gICAgdGhpcy5vbkZpbGVzU2VsZWN0ZWQoJGV2ZW50LnRhcmdldC5maWxlcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGZpbGUgd2hlbiBpdCBpcyBkcm9wcGVkIGludG8gZHJvcC1hcmVhLlxuICAgKi9cbiAgb25Ecm9wKCRldmVudCk6IHZvaWQge1xuICAgIHRoaXMucHJldmVudERlZmF1bHQoJGV2ZW50KTtcbiAgICB0aGlzLm9uRmlsZXNTZWxlY3RlZCgkZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTtcbiAgICB0aGlzLnN0b3BEcmFnZ2luZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBjb25kaXRpb24gd2hhdCBzaG91bGQgYmUgZGlzcGxheWVkOiBkcm9wLWFyZWEgem9uZSBvciBsaXN0IG9mIGRyb3BwZWQgZmlsZXMuXG4gICAqL1xuICBzaG91bGRTaG93RmlsZXNMaXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzRmlsZXNBbk9iamVjdE9yQXJyYXkoKSAmJlxuICAgICAgIXRoaXMuZm9yY2VIaWRlTGlzdCAmJlxuICAgICAgdGhpcy5hbHdheXNTaG93ICYmXG4gICAgICAhdGhpcy5pc0ZpbGVzQXJyYXlFbXB0eSgpICYmXG4gICAgICAhdGhpcy5oYXNFbXB0eUZpbGVzKCkgJiZcbiAgICAgICF0aGlzLmlzVG9vTWFueUZpbGVzKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIGZpbGUgaXMgcGlja2VkIG92ZXIgd2ViIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgc3RvcERyYWdnaW5nKCk6IHZvaWQge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5wcmV2ZW50RGVmYXVsdCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMucHJldmVudERlZmF1bHQpO1xuICAgIHRoaXMuaXNPdmVyID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGZpbGVzIGFscmVhZHkgZHJvcHBlZCBmaWxlcy5cbiAgICovXG4gIG9uRGVsZXRlKCkge1xuICAgIGRlbGV0ZSB0aGlzLmZpbGVzO1xuICAgIGRlbGV0ZSB0aGlzLmZpbGVzTmFtZVN0cmluZztcbiAgICB0aGlzLmNsZWFyRXJyb3JzKCk7XG4gICAgdGhpcy5kcm9wcGVkLmVtaXQobnVsbCk7XG4gICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gXyA9PiB1bmRlZmluZWQ7XG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZpbGVzID0gdmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5vbkRlbGV0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbGVzTmFtZVN0cmluZyA9IHRoaXMuZ2V0RmlsZXNOYW1lc0FzU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25GaWxlc1NlbGVjdGVkKGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGhhc1ZhbGlkTmFtZUxlbmd0aCA9IHRoaXMuZmlsZXNTZXJ2aWNlLmNoZWNrTWF4TGVuZ3RoKGZpbGVzKTtcbiAgICBpZiAoIWhhc1ZhbGlkTmFtZUxlbmd0aCkge1xuICAgICAgdGhpcy5vbkZpbGVJbnZhbGlkTmFtZUxlbmd0aCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhdmVWYWxpZFR5cGVzID0gdGhpcy5maWxlc1NlcnZpY2UuaGF2ZVZhbGlkRXh0ZW5zaW9ucyhmaWxlcywgdGhpcy5hY2NlcHQpO1xuICAgIGlmICghaGF2ZVZhbGlkVHlwZXMpIHtcbiAgICAgIHRoaXMub25GaWxlSW52YWxpZFR5cGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhGaWxlU2l6ZUluQnl0ZXMgPSB0aGlzLm1heEZpbGVTaXplSW5NZWdhQnl0ZXNcbiAgICAgID8gdGhpcy5jb252ZXJ0TWVnYUJ5dGVzVG9CeXRlcyh0aGlzLm1heEZpbGVTaXplSW5NZWdhQnl0ZXMpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgaGF2ZVZhbGlkU2l6ZXMgPSBhd2FpdCB0aGlzLmZpbGVzU2VydmljZS5oYXZlVmFsaWRTaXplcyhmaWxlcywgbWF4RmlsZVNpemVJbkJ5dGVzKTtcbiAgICBpZiAoIWhhdmVWYWxpZFNpemVzKSB7XG4gICAgICBhd2FpdCB0aGlzLm9uRmlsZUludmFsaWRTaXplKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWxlcyA9IGZpbGVzO1xuICAgIHRoaXMuZmlsZXNOYW1lU3RyaW5nID0gdGhpcy5nZXRGaWxlc05hbWVzQXNTdHJpbmcoZmlsZXMpO1xuICAgIHRoaXMuZXJyb3JzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc1Rvb01hbnlGaWxlcygpKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IHRydWU7XG4gICAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRFcnJvcnMoeyB0b29NYW55RmlsZXM6IHRydWUgfSk7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGdldHRleHQoJ1RvbyBtYW55IGZpbGVzIHNlbGVjdGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0VtcHR5RmlsZXMoKSkge1xuICAgICAgdGhpcy5lcnJvcnMgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0RXJyb3JzKHsgZW1wdHlGaWxlczogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZ2V0dGV4dCgnRmlsZSBtdXN0IG5vdCBiZSBlbXB0eSwgc2VsZWN0IGFub3RoZXIgb25lLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRyb3BwZWRGaWxlczogRHJvcHBlZEZpbGVbXSA9IHRoaXMuY29tcG9zZShmaWxlcyk7XG4gICAgdGhpcy5kcm9wcGVkLmVtaXQoZHJvcHBlZEZpbGVzKTtcbiAgICB0aGlzLm9uQ2hhbmdlKGRyb3BwZWRGaWxlcyk7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlSW52YWxpZE5hbWVMZW5ndGgoKSB7XG4gICAgdGhpcy5lcnJvcnMgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWROYW1lTGVuZ3RoOiB0cnVlIH0pO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZ2V0dGV4dCgnVGhlIGZpbGVuYW1lIGlzIHRvbyBsb25nLicpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbGVJbnZhbGlkVHlwZSgpIHtcbiAgICB0aGlzLmVycm9ycyA9IHRydWU7XG4gICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZFR5cGU6IHRydWUgfSk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBnZXR0ZXh0KCdUaGUgc2VsZWN0ZWQgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkZpbGVJbnZhbGlkU2l6ZSgpIHtcbiAgICBjb25zdCBtYXhGaWxlU2l6ZUluQnl0ZXMgPSB0aGlzLm1heEZpbGVTaXplSW5NZWdhQnl0ZXNcbiAgICAgID8gdGhpcy5jb252ZXJ0TWVnYUJ5dGVzVG9CeXRlcyh0aGlzLm1heEZpbGVTaXplSW5NZWdhQnl0ZXMpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnVGhlIHNlbGVjdGVkIGZpbGUgaXMgdG9vIGxhcmdlLiBUaGUgc2l6ZSBsaW1pdCBpcyB7eyBsaW1pdCB9fS4nKTtcbiAgICBjb25zdCBsaW1pdCA9IHRoaXMuYnl0ZXMudHJhbnNmb3JtKFxuICAgICAgbWluKFttYXhGaWxlU2l6ZUluQnl0ZXMsIGF3YWl0IHRoaXMuZmlsZXNTZXJ2aWNlLmxvYWRCeXRlc1NpemVMaW1pdCgpXSlcbiAgICApO1xuICAgIHRoaXMuZXJyb3JzID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkU2l6ZTogdHJ1ZSB9KTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobXNnLCB7IGxpbWl0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0TWVnYUJ5dGVzVG9CeXRlcyhtYXhGaWxlU2l6ZUluTWVnYUJ5dGVzOiBTaXplSW5NZWdhQnl0ZXMpOiBTaXplSW5CeXRlcyB7XG4gICAgcmV0dXJuIG1heEZpbGVTaXplSW5NZWdhQnl0ZXMgKiAxXzA0OF81NzY7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVzTmFtZXNBc1N0cmluZyhmaWxlczogRmlsZUxpc3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBtYXAoZmlsZXMsICh7IG5hbWUgfSkgPT4gbmFtZSkuam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWxlc0FycmF5RW1wdHkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZmlsZXMubGVuZ3RoJywgMCkgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzVG9vTWFueUZpbGVzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2ZpbGVzLmxlbmd0aCcsIDApID4gdGhpcy5tYXhBbGxvd2VkRmlsZXM7XG4gIH1cblxuICBwcml2YXRlIGlzRmlsZXNBbk9iamVjdE9yQXJyYXkoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLmZpbGVzID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgaGFzRW1wdHlGaWxlcygpIHtcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuaXNGaWxlc0FycmF5RW1wdHkoKSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5pc0FueUZpbGVFbXB0eSgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FueUZpbGVFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShBcnJheS5mcm9tKHRoaXMuZmlsZXMpLCBbJ3NpemUnLCAwXSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRXJyb3JzKCkge1xuICAgIGRlbGV0ZSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICB0aGlzLmVycm9ycyA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybUNvbnRyb2w/LnNldEVycm9ycyhudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJldmVudERlZmF1bHQoJGV2ZW50Pykge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZShmaWxlczogRmlsZUxpc3QpOiBEcm9wcGVkRmlsZVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShmaWxlcykubWFwKGZpbGUgPT4gKHtcbiAgICAgIGZpbGUsXG4gICAgICByZWFkQXNKc29uOiBhc3luYyAoKSA9PiBKU09OLnBhcnNlKGF3YWl0IHRoaXMucmVhZChmaWxlLCBSZWFkQXNUeXBlLlRFWFQpKSxcbiAgICAgIHJlYWRBc1RleHQ6IGFzeW5jICgpID0+IHRoaXMucmVhZChmaWxlLCBSZWFkQXNUeXBlLlRFWFQpLFxuICAgICAgcmVhZEFzQXJyYXlCdWZmZXI6IGFzeW5jICgpID0+IHRoaXMucmVhZChmaWxlLCBSZWFkQXNUeXBlLkFSUkFZX0JVRkZFUiksXG4gICAgICByZWFkQXNCaW5hcnlTdHJpbmc6IGFzeW5jICgpID0+IHRoaXMucmVhZChmaWxlLCBSZWFkQXNUeXBlLkJJTkFSWV9TVFJJTkcpLFxuICAgICAgcmVhZEFzRGF0YVVSTDogYXN5bmMgKCkgPT4gdGhpcy5yZWFkKGZpbGUsIFJlYWRBc1R5cGUuREFUQV9VUkwpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkKGZpbGUsIHR5cGU6IFJlYWRBc1R5cGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSZWFkQXNUeXBlLlRFWFQ6IHtcbiAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFJlYWRBc1R5cGUuQVJSQVlfQlVGRkVSOiB7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUmVhZEFzVHlwZS5CSU5BUllfU1RSSU5HOiB7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFJlYWRBc1R5cGUuREFUQV9VUkw6IHtcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHRoaXMub25Mb2FkKHJlYWRlciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25Mb2FkKHJlYWRlciwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKHJlYWRlci5yZWFkeVN0YXRlICE9PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZWFkZXIuZXJyb3IpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgIH1cbiAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcHBlZEZpbGUge1xuICBmaWxlOiBGaWxlO1xuICByZWFkQXNUZXh0KCk7XG4gIHJlYWRBc0FycmF5QnVmZmVyKCk7XG4gIHJlYWRBc0JpbmFyeVN0cmluZygpO1xuICByZWFkQXNEYXRhVVJMKCk7XG4gIHJlYWRBc0pzb24oKTtcbn1cblxuZW51bSBSZWFkQXNUeXBlIHtcbiAgVEVYVCxcbiAgREFUQV9VUkwsXG4gIEFSUkFZX0JVRkZFUixcbiAgQklOQVJZX1NUUklOR1xufVxuXG50eXBlIFNpemVJbk1lZ2FCeXRlcyA9IG51bWJlcjtcbnR5cGUgU2l6ZUluQnl0ZXMgPSBudW1iZXI7XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZHJvcC16b25lXCJcbiAgKm5nSWY9XCIhc2hvdWxkU2hvd0ZpbGVzTGlzdCgpXCJcbiAgW25nQ2xhc3NdPVwieyAnaGFzLWVycm9ycyc6IGVycm9ycyB9XCJcbiAgW3N0eWxlLnBvaW50ZXJFdmVudHNdPVwibG9hZGluZyA/ICdub25lJyA6ICdhdXRvJ1wiXG4gICN6b25lXG4gIChkcmFnbGVhdmUpPVwic3RvcERyYWdnaW5nKClcIlxuICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gIChkcmFnb3Zlcik9XCJvbk92ZXIoKVwiXG4gIFtzdHlsZS5kaXNwbGF5XT1cImlzT3ZlciB8fCBhbHdheXNTaG93IHx8IGxvYWRpbmcgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgKGNsaWNrKT1cInNob3dQaWNrZXIoJGV2ZW50KVwiXG4gIHRhYmluZGV4PVwiMFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmaWxlLXBsYWNlaG9sZGVyXCIgW25nQ2xhc3NdPVwieyAnZHJhZy1vdmVyJzogaXNPdmVyIH1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwiZC1mbGV4IGQtY29sIHAtNCBmbGV4LWNlbnRlclwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInByb2dyZXNzIHByb2dyZXNzLXN0cmlwZWQgYWN0aXZlIG0tMFwiXG4gICAgICAgICpuZ0lmPVwicHJvZ3Jlc3MgIT09IC0xXCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDUwJVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByb2dyZXNzICsgJyUnXCJcbiAgICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhclwiXG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICBhcmlhLXZhbHVlbm93PVwiMFwiXG4gICAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgICAgICAgIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJwcm9ncmVzcyArICclJ1wiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItc25ha2VcIiAqbmdJZj1cInByb2dyZXNzID09PSAtMVwiPjwvZGl2PlxuICAgICAgPHAgKm5nSWY9XCIhaGFzRHJvcEFyZWFTbWFsbENsYXNzXCIgY2xhc3M9XCJtLXQtYXV0byBtLWItYXV0byBtLXItOFwiPlxuICAgICAgICB7eyBsb2FkaW5nTWVzc2FnZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nXCIgY2xhc3M9XCJoaW50LXBsYWNlaG9sZGVyIHBvaW50ZXJcIj5cbiAgICAgIDxpIGNsYXNzPVwiZGx0LWM4eS1pY29uLXt7IGljb24gfX1cIj48L2k+XG4gICAgICA8cCAqbmdJZj1cIiFlcnJvcnNcIj5cbiAgICAgICAgPGI+e3sgbWVzc2FnZSB8IHRyYW5zbGF0ZSB9fTwvYj5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWx3YXlzU2hvdyAmJiBjbGlja1RvT3BlblwiIHRyYW5zbGF0ZT48L3NwYW4+XG4gICAgICA8L3A+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JzXCIgY2xhc3M9XCJoYXMtZXJyb3JzXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLWZlZWRiYWNrLW1lc3NhZ2VcIj5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJkcm9wLXpvbmVcIlxuICAqbmdJZj1cInNob3VsZFNob3dGaWxlc0xpc3QoKVwiXG4gIFtzdHlsZS5kaXNwbGF5XT1cImlzT3ZlciB8fCBhbHdheXNTaG93IHx8IGxvYWRpbmcgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgdGFiaW5kZXg9XCIwXCJcbj5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInAtYWJzb2x1dGUgcC00IGZpdC13IGZpdC1oIGQtZmxleCBkLWNvbCBqLWMtY2VudGVyIGEtaS1jZW50ZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInByb2dyZXNzIHByb2dyZXNzLXN0cmlwZWQgYWN0aXZlIG0tMFwiXG4gICAgICAqbmdJZj1cInByb2dyZXNzICE9PSAtMVwiXG4gICAgICBzdHlsZT1cIm1pbi13aWR0aDogODAlXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJvZ3Jlc3MgKyAnJSdcIlxuICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhclwiXG4gICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgIGFyaWEtdmFsdWVub3c9XCIwXCJcbiAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgICAgICBhcmlhLXZhbHVlbWF4PVwiMTAwXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cInByb2dyZXNzICsgJyUnXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicHJvZ3Jlc3MgPT09IC0xXCI+XG4gICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICA8L2Rpdj5cbiAgICA8cCAqbmdJZj1cIiFoYXNEcm9wQXJlYVNtYWxsQ2xhc3NcIiBjbGFzcz1cIm0tYi04XCI+XG4gICAgICA8c3Ryb25nPlxuICAgICAgICB7eyBsb2FkaW5nTWVzc2FnZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zdHJvbmc+XG4gICAgPC9wPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nXCIgY2xhc3M9XCJmaWxlLXBsYWNlaG9sZGVyIHAtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcC00IGEtaS1jZW50ZXJcIj5cbiAgICAgIDxpIGM4eUljb249XCJmaWxlLW9cIiBjbGFzcz1cImljb24tMjAgbS1yLThcIj48L2k+XG4gICAgICA8c3BhbiB0aXRsZT1cInt7IGZpbGVzTmFtZVN0cmluZyB9fVwiIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICB7eyBmaWxlc05hbWVTdHJpbmcgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgc2hvd09uSG92ZXIgbS1sLWF1dG9cIlxuICAgICAgPlxuICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCIgKGNsaWNrKT1cIm9uRGVsZXRlKClcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxsYWJlbCBmb3I9XCJmaWxlXCIgY2xhc3M9XCJzci1vbmx5XCI+e3sgJ1NlbGVjdCBmaWxlJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG48aW5wdXRcbiAgI3BpY2tlclxuICAqbmdJZj1cImNsaWNrVG9PcGVuXCJcbiAgKGNoYW5nZSk9XCJvblBpY2soJGV2ZW50KVwiXG4gIChjbGljayk9XCJwaWNrZXIuZm9jdXMoKVwiXG4gIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgW2FjY2VwdF09XCJhY2NlcHRlZEV4dHNcIlxuICBbbXVsdGlwbGVdPVwibWF4QWxsb3dlZEZpbGVzID4gMVwiXG4gIHR5cGU9XCJmaWxlXCJcbiAgY2xhc3M9XCJoaWRkZW5cIlxuICBpZD1cImZpbGVcIlxuLz5cbjxkaXYgI2FyZWEgW2hpZGRlbl09XCJpc092ZXIgfHwgbG9hZGluZ1wiIChkcmFnb3Zlcik9XCJ0b2dnbGUoKVwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
@@ -23,7 +23,8 @@ export class FieldFile extends FieldType {
23
23
  'progress',
24
24
  'maxAllowedFiles',
25
25
  'files',
26
- 'accept'
26
+ 'accept',
27
+ 'maxFileSizeInMegaBytes'
27
28
  ];
28
29
  }
29
30
  ngOnInit() {
@@ -44,7 +45,7 @@ FieldFile.CONFIG = {
44
45
  ]
45
46
  };
46
47
  FieldFile.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: FieldFile, deps: null, target: i0.ɵɵFactoryTarget.Component });
47
- FieldFile.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: FieldFile, selector: "c8y-field-file", viewQueries: [{ propertyName: "dropArea", first: true, predicate: ["dropArea"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\" role=\"group\" [attr.aria-labelledby]=\"id + '-fieldset'\">\n <label id=\"{{ id + '-fieldset' }}\" *ngIf=\"to.label || to.description\">\n {{ to.label | humanize }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"to.description\"\n placement=\"right\"\n triggers=\"focus\"\n *ngIf=\"to.description\"\n ></button>\n </label>\n\n <c8y-drop-area #dropArea class=\"drop-area-sm\" [formControl]=\"formControl\"></c8y-drop-area>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "accept"], outputs: ["dropped"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.HumanizePipe, name: "humanize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
48
+ FieldFile.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: FieldFile, selector: "c8y-field-file", viewQueries: [{ propertyName: "dropArea", first: true, predicate: ["dropArea"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\" role=\"group\" [attr.aria-labelledby]=\"id + '-fieldset'\">\n <label id=\"{{ id + '-fieldset' }}\" *ngIf=\"to.label || to.description\">\n {{ to.label | humanize }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"to.description\"\n placement=\"right\"\n triggers=\"focus\"\n *ngIf=\"to.description\"\n ></button>\n </label>\n\n <c8y-drop-area #dropArea class=\"drop-area-sm\" [formControl]=\"formControl\"></c8y-drop-area>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.DropAreaComponent, selector: "c8y-drop-area", inputs: ["formControl", "title", "message", "icon", "loadingMessage", "forceHideList", "alwaysShow", "clickToOpen", "loading", "progress", "maxAllowedFiles", "files", "maxFileSizeInMegaBytes", "accept"], outputs: ["dropped"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.HumanizePipe, name: "humanize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
48
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: FieldFile, decorators: [{
49
50
  type: Component,
50
51
  args: [{ selector: 'c8y-field-file', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group\" role=\"group\" [attr.aria-labelledby]=\"id + '-fieldset'\">\n <label id=\"{{ id + '-fieldset' }}\" *ngIf=\"to.label || to.description\">\n {{ to.label | humanize }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"to.description\"\n placement=\"right\"\n triggers=\"focus\"\n *ngIf=\"to.description\"\n ></button>\n </label>\n\n <c8y-drop-area #dropArea class=\"drop-area-sm\" [formControl]=\"formControl\"></c8y-drop-area>\n</div>\n" }]
@@ -52,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
52
53
  type: ViewChild,
53
54
  args: ['dropArea', { static: true }]
54
55
  }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS50eXBlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1mb3Jtcy9maWxlL2ZpbGUudHlwZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtZm9ybXMvZmlsZS9maWxlLnR5cGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQU9wRCxNQUFNLE9BQU8sU0FBVSxTQUFRLFNBQVM7SUFMeEM7O1FBZVcsbUJBQWMsR0FBYTtZQUNsQyxPQUFPO1lBQ1AsU0FBUztZQUNULE1BQU07WUFDTixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLGFBQWE7WUFDYixTQUFTO1lBQ1QsVUFBVTtZQUNWLGlCQUFpQjtZQUNqQixPQUFPO1lBQ1AsUUFBUTtTQUNULENBQUM7S0FhSDtJQVRDLFFBQVE7UUFDTixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsY0FBYzthQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQzthQUM3QyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7QUFqQ2UsZ0JBQU0sR0FBaUI7SUFDckMsS0FBSyxFQUFFO1FBQ0w7WUFDRSxJQUFJLEVBQUUsTUFBTTtZQUNaLFNBQVMsRUFBRSxTQUFTO1NBQ3JCO0tBQ0Y7Q0FDRCxDQUFBO3NHQVJTLFNBQVM7MEZBQVQsU0FBUyxpTUNWdEIsa2tCQWdCQTsyRkROYSxTQUFTO2tCQUxyQixTQUFTOytCQUNFLGdCQUFnQixtQkFFVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQTBCTixRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnT3B0aW9uLCBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEcm9wQXJlYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3AtYXJlYSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1maWVsZC1maWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUudHlwZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkRmlsZSBleHRlbmRzIEZpZWxkVHlwZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHN0YXRpYyByZWFkb25seSBDT05GSUc6IENvbmZpZ09wdGlvbiA9IHtcbiAgICB0eXBlczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnZmlsZScsXG4gICAgICAgIGNvbXBvbmVudDogRmllbGRGaWxlXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJlYWRvbmx5IGRyb3BBcmVhSW5wdXRzOiBzdHJpbmdbXSA9IFtcbiAgICAndGl0bGUnLFxuICAgICdtZXNzYWdlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvYWRpbmdNZXNzYWdlJyxcbiAgICAnYWx3YXlzU2hvdycsXG4gICAgJ2NsaWNrVG9PcGVuJyxcbiAgICAnbG9hZGluZycsXG4gICAgJ3Byb2dyZXNzJyxcbiAgICAnbWF4QWxsb3dlZEZpbGVzJyxcbiAgICAnZmlsZXMnLFxuICAgICdhY2NlcHQnXG4gIF07XG5cbiAgQFZpZXdDaGlsZCgnZHJvcEFyZWEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wQXJlYTogRHJvcEFyZWFDb21wb25lbnQ7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3Qga2V5cyA9IEFycmF5LmlzQXJyYXkodGhpcy5rZXkpID8gdGhpcy5rZXkgOiBbdGhpcy5rZXldO1xuICAgIGNvbnN0IHBhdGggPSBrZXlzLmpvaW4oJy4nKTtcbiAgICB0aGlzLmRyb3BBcmVhLmZpbGVzID0gZ2V0KHRoaXMubW9kZWwsIHBhdGgpO1xuXG4gICAgdGhpcy5kcm9wQXJlYUlucHV0c1xuICAgICAgLmZpbHRlcihpbnB1dCA9PiB0aGlzLnRvW2lucHV0XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZvckVhY2goaW5wdXQgPT4gKHRoaXMuZHJvcEFyZWFbaW5wdXRdID0gdGhpcy50b1tpbnB1dF0pKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaWQgKyAnLWZpZWxkc2V0J1wiPlxuICA8bGFiZWwgaWQ9XCJ7eyBpZCArICctZmllbGRzZXQnIH19XCIgKm5nSWY9XCJ0by5sYWJlbCB8fCB0by5kZXNjcmlwdGlvblwiPlxuICAgIHt7IHRvLmxhYmVsIHwgaHVtYW5pemUgfX1cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtwb3BvdmVyXT1cInRvLmRlc2NyaXB0aW9uXCJcbiAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgKm5nSWY9XCJ0by5kZXNjcmlwdGlvblwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2xhYmVsPlxuXG4gIDxjOHktZHJvcC1hcmVhICNkcm9wQXJlYSBjbGFzcz1cImRyb3AtYXJlYS1zbVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiPjwvYzh5LWRyb3AtYXJlYT5cbjwvZGl2PlxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS50eXBlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1mb3Jtcy9maWxlL2ZpbGUudHlwZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtZm9ybXMvZmlsZS9maWxlLnR5cGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7OztBQU9wRCxNQUFNLE9BQU8sU0FBVSxTQUFRLFNBQVM7SUFMeEM7O1FBZVcsbUJBQWMsR0FBYTtZQUNsQyxPQUFPO1lBQ1AsU0FBUztZQUNULE1BQU07WUFDTixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLGFBQWE7WUFDYixTQUFTO1lBQ1QsVUFBVTtZQUNWLGlCQUFpQjtZQUNqQixPQUFPO1lBQ1AsUUFBUTtZQUNSLHdCQUF3QjtTQUN6QixDQUFDO0tBYUg7SUFUQyxRQUFRO1FBQ04sTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLGNBQWM7YUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUM7YUFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7O0FBbENlLGdCQUFNLEdBQWlCO0lBQ3JDLEtBQUssRUFBRTtRQUNMO1lBQ0UsSUFBSSxFQUFFLE1BQU07WUFDWixTQUFTLEVBQUUsU0FBUztTQUNyQjtLQUNGO0NBQ0QsQ0FBQTtzR0FSUyxTQUFTOzBGQUFULFNBQVMsaU1DVnRCLGtrQkFnQkE7MkZETmEsU0FBUztrQkFMckIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTTs4QkEyQk4sUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ09wdGlvbiwgRmllbGRUeXBlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRHJvcEFyZWFDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wLWFyZWEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZmllbGQtZmlsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLnR5cGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZEZpbGUgZXh0ZW5kcyBGaWVsZFR5cGUgaW1wbGVtZW50cyBPbkluaXQge1xuICBzdGF0aWMgcmVhZG9ubHkgQ09ORklHOiBDb25maWdPcHRpb24gPSB7XG4gICAgdHlwZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2ZpbGUnLFxuICAgICAgICBjb21wb25lbnQ6IEZpZWxkRmlsZVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICByZWFkb25seSBkcm9wQXJlYUlucHV0czogc3RyaW5nW10gPSBbXG4gICAgJ3RpdGxlJyxcbiAgICAnbWVzc2FnZScsXG4gICAgJ2ljb24nLFxuICAgICdsb2FkaW5nTWVzc2FnZScsXG4gICAgJ2Fsd2F5c1Nob3cnLFxuICAgICdjbGlja1RvT3BlbicsXG4gICAgJ2xvYWRpbmcnLFxuICAgICdwcm9ncmVzcycsXG4gICAgJ21heEFsbG93ZWRGaWxlcycsXG4gICAgJ2ZpbGVzJyxcbiAgICAnYWNjZXB0JyxcbiAgICAnbWF4RmlsZVNpemVJbk1lZ2FCeXRlcydcbiAgXTtcblxuICBAVmlld0NoaWxkKCdkcm9wQXJlYScsIHsgc3RhdGljOiB0cnVlIH0pIGRyb3BBcmVhOiBEcm9wQXJlYUNvbXBvbmVudDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlzID0gQXJyYXkuaXNBcnJheSh0aGlzLmtleSkgPyB0aGlzLmtleSA6IFt0aGlzLmtleV07XG4gICAgY29uc3QgcGF0aCA9IGtleXMuam9pbignLicpO1xuICAgIHRoaXMuZHJvcEFyZWEuZmlsZXMgPSBnZXQodGhpcy5tb2RlbCwgcGF0aCk7XG5cbiAgICB0aGlzLmRyb3BBcmVhSW5wdXRzXG4gICAgICAuZmlsdGVyKGlucHV0ID0+IHRoaXMudG9baW5wdXRdICE9PSB1bmRlZmluZWQpXG4gICAgICAuZm9yRWFjaChpbnB1dCA9PiAodGhpcy5kcm9wQXJlYVtpbnB1dF0gPSB0aGlzLnRvW2lucHV0XSkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIHJvbGU9XCJncm91cFwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCArICctZmllbGRzZXQnXCI+XG4gIDxsYWJlbCBpZD1cInt7IGlkICsgJy1maWVsZHNldCcgfX1cIiAqbmdJZj1cInRvLmxhYmVsIHx8IHRvLmRlc2NyaXB0aW9uXCI+XG4gICAge3sgdG8ubGFiZWwgfCBodW1hbml6ZSB9fVxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgW3BvcG92ZXJdPVwidG8uZGVzY3JpcHRpb25cIlxuICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAqbmdJZj1cInRvLmRlc2NyaXB0aW9uXCJcbiAgICA+PC9idXR0b24+XG4gIDwvbGFiZWw+XG5cbiAgPGM4eS1kcm9wLWFyZWEgI2Ryb3BBcmVhIGNsYXNzPVwiZHJvcC1hcmVhLXNtXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCI+PC9jOHktZHJvcC1hcmVhPlxuPC9kaXY+XG4iXX0=
@@ -81,6 +81,17 @@ export class C8yJSONSchema extends FormlyJsonschema {
81
81
  }
82
82
  };
83
83
  }
84
+ /** max size file validation` */
85
+ if (mapSource.maxSize) {
86
+ result = {
87
+ ...result,
88
+ type: 'file',
89
+ props: {
90
+ ...(result.props || {}),
91
+ maxFileSizeInMegaBytes: mapSource.maxSize
92
+ }
93
+ };
94
+ }
84
95
  /** Provides a way to use templateOptions in JSONSchema forms */
85
96
  if (mapSource.templateOptions) {
86
97
  result = {
@@ -104,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
104
115
  providedIn: 'root'
105
116
  }]
106
117
  }] });
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LWpzb24tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtZm9ybXMvanNvbi1zY2hlbWEvYzh5LWpzb24tc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUtqQyxNQUFNLE9BQU8sYUFBYyxTQUFRLGdCQUFnQjtJQUNqRCxhQUFhLENBQUMsTUFBbUIsRUFBRSxPQUFhO1FBQzlDLE1BQU0sTUFBTSxHQUFzQixLQUFLLENBQUMsYUFBYSxDQUNuRCxNQUFNLEVBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDckMsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxVQUFVLENBQ2hCLEdBQWtGO1FBRWxGLE9BQU87WUFDTCxHQUFHLENBQ0QsV0FBOEIsRUFDOUIsU0FHQztnQkFFRCxJQUFJLE1BQU0sR0FBc0IsV0FBVyxDQUFDO2dCQUU1QyxrREFBa0Q7Z0JBQ2xELElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtvQkFDbkIsTUFBTSxHQUFHO3dCQUNQLEdBQUcsTUFBTTt3QkFDVCxZQUFZLEVBQUUsU0FBUyxDQUFDLEtBQUs7d0JBQzdCLElBQUksRUFBRSxPQUFPO3dCQUNiLEtBQUssRUFBRTs0QkFDTCxHQUFHLE1BQU0sQ0FBQyxLQUFLOzRCQUNmLElBQUksRUFBRSxRQUFRO3lCQUNmO3FCQUNGLENBQUM7aUJBQ0g7Z0JBRUQsc0RBQXNEO2dCQUN0RCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7b0JBQ3ZCLE1BQU0sR0FBRzt3QkFDUCxHQUFHLE1BQU07d0JBQ1QsS0FBSyxFQUFFOzRCQUNMLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDdkIsVUFBVSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7eUJBQ25GO3FCQUNGLENBQUM7aUJBQ0g7Z0JBRUQsNENBQTRDO2dCQUM1QyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7b0JBQ3RCLE1BQU0sR0FBRzt3QkFDUCxHQUFHLE1BQU07d0JBQ1QsS0FBSyxFQUFFOzRCQUNMLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDdkIsV0FBVyxFQUFHLFNBQVMsQ0FBQyxRQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7eUJBQ3pEO3FCQUNGLENBQUM7aUJBQ0g7Z0JBRUQscURBQXFEO2dCQUNyRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0JBQ2xCLE1BQU0sR0FBRzt3QkFDUCxHQUFHLE1BQU07d0JBQ1QsSUFBSSxFQUFFLE9BQU87cUJBQ2QsQ0FBQztpQkFDSDtnQkFFRCx5RkFBeUY7Z0JBQ3pGLElBQUksU0FBUyxDQUFDLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUU7b0JBQzNELE1BQU0sR0FBRzt3QkFDUCxHQUFHLE1BQU07d0JBQ1QsSUFBSSxFQUFFLE1BQU07d0JBQ1osS0FBSyxFQUFFOzRCQUNMLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDdkIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0I7NEJBQ2xDLGVBQWUsRUFBRSxDQUFDOzRCQUNsQixlQUFlLEVBQUUsU0FBUyxDQUFDLGVBQWU7eUJBQzNDO3FCQUNGLENBQUM7b0JBRUYsNkVBQTZFO29CQUM3RSwwREFBMEQ7b0JBQzFELElBQUksU0FBUyxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7d0JBQzFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUN2RDtpQkFDRjtnQkFFRCxtRUFBbUU7Z0JBQ25FLElBQUssU0FBaUIsQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDdkMsTUFBTSxHQUFHO3dCQUNQLEdBQUcsTUFBTTt3QkFDVCxJQUFJLEVBQUUsTUFBTTt3QkFDWixLQUFLLEVBQUU7NEJBQ0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUN2QixHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixJQUFJO2dDQUNoQyxNQUFNLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7NkJBQzdDLENBQUM7eUJBQ0g7cUJBQ0YsQ0FBQztpQkFDSDtnQkFFRCxnRUFBZ0U7Z0JBQ2hFLElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRTtvQkFDN0IsTUFBTSxHQUFHO3dCQUNQLEdBQUcsTUFBTTt3QkFDVCxLQUFLLEVBQUU7NEJBQ0wsR0FBRyxTQUFTLENBQUMsZUFBZTs0QkFDNUIsR0FBRyxNQUFNLENBQUMsS0FBSzt5QkFDaEI7cUJBQ0YsQ0FBQztpQkFDSDtnQkFFRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQy9DLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQzs7MEdBakhVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5VGVtcGxhdGVPcHRpb25zIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlKc29uc2NoZW1hIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZS9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNyB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IG9taXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDOHlKU09OU2NoZW1hIGV4dGVuZHMgRm9ybWx5SnNvbnNjaGVtYSB7XG4gIHRvRmllbGRDb25maWcoc2NoZW1hOiBKU09OU2NoZW1hNywgb3B0aW9ucz86IGFueSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICBjb25zdCBjb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0gc3VwZXIudG9GaWVsZENvbmZpZyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIHRoaXMuYzh5T3B0aW9ucygob3B0aW9ucyB8fCB7fSkubWFwKVxuICAgICk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgYzh5T3B0aW9ucyhcbiAgICBtYXA6IChtYXBwZWRGaWVsZDogRm9ybWx5RmllbGRDb25maWcsIG1hcFNvdXJjZTogSlNPTlNjaGVtYTcpID0+IEZvcm1seUZpZWxkQ29uZmlnXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXAoXG4gICAgICAgIG1hcHBlZEZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICAgICAgbWFwU291cmNlOiBKU09OU2NoZW1hNyAmIHtcbiAgICAgICAgICBhbGxvd2VkRmlsZVR5cGVzOiBzdHJpbmdbXTtcbiAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IEZvcm1seVRlbXBsYXRlT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgKSB7XG4gICAgICAgIGxldCByZXN1bHQ6IEZvcm1seUZpZWxkQ29uZmlnID0gbWFwcGVkRmllbGQ7XG5cbiAgICAgICAgLyoqIGBjb25zdGAgdHlwZSBpcyByZXByZXNlbnRlZCBhcyBoaWRkZW4gaW5wdXQgKi9cbiAgICAgICAgaWYgKG1hcFNvdXJjZS5jb25zdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogbWFwU291cmNlLmNvbnN0LFxuICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLnJlc3VsdC5wcm9wcyxcbiAgICAgICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIGB3cml0ZU9ubHlgIGZpZWxkIHJlcHJlc2VudGVkIGFzIHBhc3N3b3JkIGlucHV0ICovXG4gICAgICAgIGlmIChtYXBTb3VyY2Uud3JpdGVPbmx5KSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4uKHJlc3VsdC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgLi4ucmVzdWx0LnByb3BzPy5hdHRyaWJ1dGVzLCB0eXBlOiAncGFzc3dvcmQnLCBhdXRvY29tcGxldGU6ICdvZmYnIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIGBleGFtcGxlc2AgdmFsdWVzIHVzZWQgYXMgcGxhY2Vob2xkZXIgKi9cbiAgICAgICAgaWYgKG1hcFNvdXJjZS5leGFtcGxlcykge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLihyZXN1bHQucHJvcHMgfHwge30pLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogKG1hcFNvdXJjZS5leGFtcGxlcyBhcyBzdHJpbmdbXSkuam9pbignLCAnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiogYGVudW1gIGZpZWxkIHJlcHJlc2VudGVkIGFzIHJhZGlvIGJ1dHRvbiBncm91cCAqL1xuICAgICAgICBpZiAobWFwU291cmNlLmVudW0pIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICB0eXBlOiAncmFkaW8nXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBmaWVsZHMgd2l0aCBgY29udGVudE1lZGlhVHlwZWAgb3IgYGNvbnRlbnRFbmNvZGluZ2AgYXJlIHJlcHJlc2VudGVkIGFzIGZpbGUgaW5wdXRzICovXG4gICAgICAgIGlmIChtYXBTb3VyY2UuY29udGVudE1lZGlhVHlwZSB8fCBtYXBTb3VyY2UuY29udGVudEVuY29kaW5nKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4uKHJlc3VsdC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgICAgIGFjY2VwdDogbWFwU291cmNlLmNvbnRlbnRNZWRpYVR5cGUsXG4gICAgICAgICAgICAgIG1heEFsbG93ZWRGaWxlczogMSxcbiAgICAgICAgICAgICAgY29udGVudEVuY29kaW5nOiBtYXBTb3VyY2UuY29udGVudEVuY29kaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIGxpbmUgd2hlbiBiYXNlNjQgZW5jb2RpbmcgaXMgZG9uZSBieSBmaWxlLnR5cGUuY29tcG9uZW50XG4gICAgICAgICAgLy8gYW5kIGNvbnRyb2wncyB2YWx1ZSB3b3VsZCBwYXNzICdzdHJpbmcnIHR5cGUgdmFsaWRhdG9yLlxuICAgICAgICAgIGlmIChtYXBTb3VyY2UuY29udGVudEVuY29kaW5nID09PSAnYmFzZTY0Jykge1xuICAgICAgICAgICAgcmVzdWx0LnZhbGlkYXRvcnMgPSBvbWl0KHJlc3VsdC52YWxpZGF0b3JzLCBbJ3R5cGUnXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqIGZpbGUgZXh0ZW5zaW9uIHZhbGlkYXRpb24gZm9yIGZpZWxkcyB3aXRoIGBhbGxvd2VkRmlsZVR5cGVzYCAqL1xuICAgICAgICBpZiAoKG1hcFNvdXJjZSBhcyBhbnkpLmFsbG93ZWRGaWxlVHlwZXMpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAuLi4ocmVzdWx0LnByb3BzIHx8IHt9KSxcbiAgICAgICAgICAgICAgLi4uKG1hcFNvdXJjZS5hbGxvd2VkRmlsZVR5cGVzICYmIHtcbiAgICAgICAgICAgICAgICBhY2NlcHQ6IG1hcFNvdXJjZS5hbGxvd2VkRmlsZVR5cGVzLmpvaW4oJywnKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiogUHJvdmlkZXMgYSB3YXkgdG8gdXNlIHRlbXBsYXRlT3B0aW9ucyBpbiBKU09OU2NoZW1hIGZvcm1zICovXG4gICAgICAgIGlmIChtYXBTb3VyY2UudGVtcGxhdGVPcHRpb25zKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4ubWFwU291cmNlLnRlbXBsYXRlT3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4ucmVzdWx0LnByb3BzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXAgPyBtYXAocmVzdWx0LCBtYXBTb3VyY2UpIDogcmVzdWx0O1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LWpzb24tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtZm9ybXMvanNvbi1zY2hlbWEvYzh5LWpzb24tc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUtqQyxNQUFNLE9BQU8sYUFBYyxTQUFRLGdCQUFnQjtJQUNqRCxhQUFhLENBQUMsTUFBbUIsRUFBRSxPQUFhO1FBQzlDLE1BQU0sTUFBTSxHQUFzQixLQUFLLENBQUMsYUFBYSxDQUNuRCxNQUFNLEVBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDckMsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxVQUFVLENBQ2hCLEdBQWtGO1FBRWxGLE9BQU87WUFDTCxHQUFHLENBQ0QsV0FBOEIsRUFDOUIsU0FHQztnQkFFRCxJQUFJLE1BQU0sR0FBc0IsV0FBVyxDQUFDO2dCQUU1QyxrREFBa0Q7Z0JBQ2xELElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtvQkFDbkIsTUFBTSxHQUFHO3dCQUNQLEdBQUcsTUFBTTt3QkFDVCxZQUFZLEVBQUUsU0FBUyxDQUFDLEtBQUs7d0JBQzdCLElBQUksRUFBRSxPQUFPO3dCQUNiLEtBQUssRUFBRTs0QkFDTCxHQUFHLE1BQU0sQ0FBQyxLQUFLOzRCQUNmLElBQUksRUFBRSxRQUFRO3lCQUNmO3FCQUNGLENBQUM7aUJBQ0g7Z0JBRUQsc0RBQXNEO2dCQUN0RCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7b0JBQ3ZCLE1BQU0sR0FBRzt3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SFUsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1seUpzb25zY2hlbWEgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IEpTT05TY2hlbWE3IH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEM4eUpTT05TY2hlbWEgZXh0ZW5kcyBGb3JtbHlKc29uc2NoZW1hIHtcbiAgdG9GaWVsZENvbmZpZyhzY2hlbWE6IEpTT05TY2hlbWE3LCBvcHRpb25zPzogYW55KTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGNvbnN0IGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSBzdXBlci50b0ZpZWxkQ29uZmlnKFxuICAgICAgc2NoZW1hLFxuICAgICAgdGhpcy5jOHlPcHRpb25zKChvcHRpb25zIHx8IHt9KS5tYXApXG4gICAgKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBjOHlPcHRpb25zKFxuICAgIG1hcDogKG1hcHBlZEZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgbWFwU291cmNlOiBKU09OU2NoZW1hNykgPT4gRm9ybWx5RmllbGRDb25maWdcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcChcbiAgICAgICAgbWFwcGVkRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgICAgICBtYXBTb3VyY2U6IEpTT05TY2hlbWE3ICYge1xuICAgICAgICAgIGFsbG93ZWRGaWxlVHlwZXM6IHN0cmluZ1tdO1xuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczogRm9ybWx5VGVtcGxhdGVPcHRpb25zO1xuICAgICAgICB9XG4gICAgICApIHtcbiAgICAgICAgbGV0IHJlc3VsdDogRm9ybWx5RmllbGRDb25maWcgPSBtYXBwZWRGaWVsZDtcblxuICAgICAgICAvKiogYGNvbnN0YCB0eXBlIGlzIHJlcHJlc2VudGVkIGFzIGhpZGRlbiBpbnB1dCAqL1xuICAgICAgICBpZiAobWFwU291cmNlLmNvbnN0KSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBtYXBTb3VyY2UuY29uc3QsXG4gICAgICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdWx0LnByb3BzLFxuICAgICAgICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiogYHdyaXRlT25seWAgZmllbGQgcmVwcmVzZW50ZWQgYXMgcGFzc3dvcmQgaW5wdXQgKi9cbiAgICAgICAgaWYgKG1hcFNvdXJjZS53cml0ZU9ubHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAuLi4ocmVzdWx0LnByb3BzIHx8IHt9KSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogeyAuLi5yZXN1bHQucHJvcHM/LmF0dHJpYnV0ZXMsIHR5cGU6ICdwYXNzd29yZCcsIGF1dG9jb21wbGV0ZTogJ29mZicgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiogYGV4YW1wbGVzYCB2YWx1ZXMgdXNlZCBhcyBwbGFjZWhvbGRlciAqL1xuICAgICAgICBpZiAobWFwU291cmNlLmV4YW1wbGVzKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4uKHJlc3VsdC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAobWFwU291cmNlLmV4YW1wbGVzIGFzIHN0cmluZ1tdKS5qb2luKCcsICcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBgZW51bWAgZmllbGQgcmVwcmVzZW50ZWQgYXMgcmFkaW8gYnV0dG9uIGdyb3VwICovXG4gICAgICAgIGlmIChtYXBTb3VyY2UuZW51bSkge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHR5cGU6ICdyYWRpbydcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIGZpZWxkcyB3aXRoIGBjb250ZW50TWVkaWFUeXBlYCBvciBgY29udGVudEVuY29kaW5nYCBhcmUgcmVwcmVzZW50ZWQgYXMgZmlsZSBpbnB1dHMgKi9cbiAgICAgICAgaWYgKG1hcFNvdXJjZS5jb250ZW50TWVkaWFUeXBlIHx8IG1hcFNvdXJjZS5jb250ZW50RW5jb2RpbmcpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAuLi4ocmVzdWx0LnByb3BzIHx8IHt9KSxcbiAgICAgICAgICAgICAgYWNjZXB0OiBtYXBTb3VyY2UuY29udGVudE1lZGlhVHlwZSxcbiAgICAgICAgICAgICAgbWF4QWxsb3dlZEZpbGVzOiAxLFxuICAgICAgICAgICAgICBjb250ZW50RW5jb2Rpbmc6IG1hcFNvdXJjZS5jb250ZW50RW5jb2RpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgbGluZSB3aGVuIGJhc2U2NCBlbmNvZGluZyBpcyBkb25lIGJ5IGZpbGUudHlwZS5jb21wb25lbnRcbiAgICAgICAgICAvLyBhbmQgY29udHJvbCdzIHZhbHVlIHdvdWxkIHBhc3MgJ3N0cmluZycgdHlwZSB2YWxpZGF0b3IuXG4gICAgICAgICAgaWYgKG1hcFNvdXJjZS5jb250ZW50RW5jb2RpbmcgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICByZXN1bHQudmFsaWRhdG9ycyA9IG9taXQocmVzdWx0LnZhbGlkYXRvcnMsIFsndHlwZSddKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiogZmlsZSBleHRlbnNpb24gdmFsaWRhdGlvbiBmb3IgZmllbGRzIHdpdGggYGFsbG93ZWRGaWxlVHlwZXNgICovXG4gICAgICAgIGlmICgobWFwU291cmNlIGFzIGFueSkuYWxsb3dlZEZpbGVUeXBlcykge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLihyZXN1bHQucHJvcHMgfHwge30pLFxuICAgICAgICAgICAgICAuLi4obWFwU291cmNlLmFsbG93ZWRGaWxlVHlwZXMgJiYge1xuICAgICAgICAgICAgICAgIGFjY2VwdDogbWFwU291cmNlLmFsbG93ZWRGaWxlVHlwZXMuam9pbignLCcpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiogbWF4IHNpemUgZmlsZSB2YWxpZGF0aW9uYCAqL1xuICAgICAgICBpZiAoKG1hcFNvdXJjZSBhcyBhbnkpLm1heFNpemUpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAuLi4ocmVzdWx0LnByb3BzIHx8IHt9KSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemVJbk1lZ2FCeXRlczogKG1hcFNvdXJjZSBhcyBhbnkpLm1heFNpemVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFByb3ZpZGVzIGEgd2F5IHRvIHVzZSB0ZW1wbGF0ZU9wdGlvbnMgaW4gSlNPTlNjaGVtYSBmb3JtcyAqL1xuICAgICAgICBpZiAobWFwU291cmNlLnRlbXBsYXRlT3B0aW9ucykge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLm1hcFNvdXJjZS50ZW1wbGF0ZU9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLnJlc3VsdC5wcm9wc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWFwID8gbWFwKHJlc3VsdCwgbWFwU291cmNlKSA6IHJlc3VsdDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iXX0=