@po-ui/ng-components 18.21.0 → 18.23.0

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 (76) hide show
  1. package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
  2. package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +19 -19
  3. package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.mjs +18 -2
  4. package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +4 -4
  5. package/esm2022/lib/components/po-field/po-combo/po-combo-base.component.mjs +22 -2
  6. package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +4 -4
  7. package/esm2022/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +22 -2
  8. package/esm2022/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +4 -4
  9. package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +18 -2
  10. package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +4 -4
  11. package/esm2022/lib/components/po-field/po-decimal/po-decimal.component.mjs +4 -4
  12. package/esm2022/lib/components/po-field/po-email/po-email.component.mjs +4 -4
  13. package/esm2022/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.mjs +27 -10
  14. package/esm2022/lib/components/po-field/po-field-container/po-field-container.module.mjs +5 -4
  15. package/esm2022/lib/components/po-field/po-field-validate.model.mjs +22 -2
  16. package/esm2022/lib/components/po-field/po-input/po-input-base.component.mjs +22 -2
  17. package/esm2022/lib/components/po-field/po-input/po-input.component.mjs +4 -4
  18. package/esm2022/lib/components/po-field/po-login/po-login.component.mjs +4 -4
  19. package/esm2022/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +22 -2
  20. package/esm2022/lib/components/po-field/po-lookup/po-lookup.component.mjs +4 -4
  21. package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +22 -2
  22. package/esm2022/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +4 -4
  23. package/esm2022/lib/components/po-field/po-number/po-number.component.mjs +4 -4
  24. package/esm2022/lib/components/po-field/po-password/po-password.component.mjs +4 -4
  25. package/esm2022/lib/components/po-field/po-radio-group/po-radio-group-base.component.mjs +18 -2
  26. package/esm2022/lib/components/po-field/po-radio-group/po-radio-group.component.mjs +4 -4
  27. package/esm2022/lib/components/po-field/po-rich-text/po-rich-text-base.component.mjs +18 -2
  28. package/esm2022/lib/components/po-field/po-rich-text/po-rich-text.component.mjs +4 -4
  29. package/esm2022/lib/components/po-field/po-select/po-select.component.mjs +4 -4
  30. package/esm2022/lib/components/po-field/po-textarea/po-textarea-base.component.mjs +18 -2
  31. package/esm2022/lib/components/po-field/po-textarea/po-textarea.component.mjs +4 -4
  32. package/esm2022/lib/components/po-field/po-upload/po-upload-base.component.mjs +86 -2
  33. package/esm2022/lib/components/po-field/po-upload/po-upload.component.mjs +17 -7
  34. package/esm2022/lib/components/po-field/po-url/po-url.component.mjs +4 -4
  35. package/esm2022/lib/components/po-progress/index.mjs +2 -1
  36. package/esm2022/lib/components/po-progress/interfaces/index.mjs +2 -0
  37. package/esm2022/lib/components/po-progress/interfaces/po-progress-actions.interface.mjs +2 -0
  38. package/esm2022/lib/components/po-progress/po-progress-base.component.mjs +87 -2
  39. package/esm2022/lib/components/po-progress/po-progress.component.mjs +44 -15
  40. package/fesm2022/po-ui-ng-components.mjs +553 -132
  41. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  42. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +57 -1
  43. package/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.d.ts +14 -1
  44. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +16 -1
  45. package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +16 -1
  46. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +14 -1
  47. package/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.d.ts +7 -1
  48. package/lib/components/po-field/po-field-container/po-field-container.module.d.ts +2 -1
  49. package/lib/components/po-field/po-field-validate.model.d.ts +16 -1
  50. package/lib/components/po-field/po-input/po-input-base.component.d.ts +16 -1
  51. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +16 -1
  52. package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +16 -1
  53. package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +14 -1
  54. package/lib/components/po-field/po-rich-text/po-rich-text-base.component.d.ts +14 -1
  55. package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +14 -1
  56. package/lib/components/po-field/po-upload/po-upload-base.component.d.ts +80 -1
  57. package/lib/components/po-field/po-upload/po-upload.component.d.ts +6 -0
  58. package/lib/components/po-progress/index.d.ts +1 -0
  59. package/lib/components/po-progress/interfaces/index.d.ts +1 -0
  60. package/lib/components/po-progress/interfaces/po-progress-actions.interface.d.ts +83 -0
  61. package/lib/components/po-progress/po-progress-base.component.d.ts +81 -1
  62. package/lib/components/po-progress/po-progress.component.d.ts +4 -0
  63. package/package.json +4 -4
  64. package/po-ui-ng-components-18.23.0.tgz +0 -0
  65. package/schematics/ng-add/index.js +1 -1
  66. package/schematics/ng-update/v14/index.js +1 -1
  67. package/schematics/ng-update/v15/index.js +1 -1
  68. package/schematics/ng-update/v16/index.js +1 -1
  69. package/schematics/ng-update/v17/index.js +1 -1
  70. package/schematics/ng-update/v18/index.js +2 -2
  71. package/schematics/ng-update/v2/index.js +1 -1
  72. package/schematics/ng-update/v3/index.js +1 -1
  73. package/schematics/ng-update/v4/index.js +1 -1
  74. package/schematics/ng-update/v5/index.js +1 -1
  75. package/schematics/ng-update/v6/index.js +1 -1
  76. package/po-ui-ng-components-18.21.0.tgz +0 -0
@@ -292,6 +292,20 @@ export class PoLookupBaseComponent {
292
292
  *
293
293
  */
294
294
  fieldErrorMessage;
295
+ /**
296
+ * @optional
297
+ *
298
+ * @description
299
+ *
300
+ * Limita a exibição da mensagem de erro a duas linhas e exibe um tooltip com o texto completo.
301
+ *
302
+ * > Caso essa propriedade seja definida como `true`, a mensagem de erro será limitada a duas linhas
303
+ * e um tooltip será exibido ao passar o mouse sobre a mensagem para mostrar o conteúdo completo.
304
+ *
305
+ * @default `false`
306
+ */
307
+ errorLimit = false;
308
+ errorAppendBox = false;
295
309
  /**
296
310
  * @optional
297
311
  *
@@ -706,7 +720,7 @@ export class PoLookupBaseComponent {
706
720
  }
707
721
  }
708
722
  static ɵfac = function PoLookupBaseComponent_Factory(t) { return new (t || PoLookupBaseComponent)(i0.ɵɵdirectiveInject(i1.PoLookupFilterService), i0.ɵɵdirectiveInject(Injector), i0.ɵɵdirectiveInject(i2.PoLookupModalService), i0.ɵɵdirectiveInject(i3.PoLanguageService)); };
709
- static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoLookupBaseComponent, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], label: [0, "p-label", "label"], literals: [0, "p-literals", "literals"], help: [0, "p-help", "help"], placeholder: [0, "p-placeholder", "placeholder"], name: "name", fieldValue: [0, "p-field-value", "fieldValue"], fieldLabel: [0, "p-field-label", "fieldLabel"], filterParams: [0, "p-filter-params", "filterParams"], fieldFormat: [0, "p-field-format", "fieldFormat"], columns: [0, "p-columns", "columns"], optional: [0, "p-optional", "optional"], advancedFilters: [0, "p-advanced-filters", "advancedFilters"], hideColumnsManager: [2, "p-hide-columns-manager", "hideColumnsManager", convertToBoolean], infiniteScroll: [2, "p-infinite-scroll", "infiniteScroll", convertToBoolean], clean: [2, "p-clean", "clean", convertToBoolean], multiple: [2, "p-multiple", "multiple", convertToBoolean], autoHeight: [2, "p-auto-height", "autoHeight", convertToBoolean], fieldErrorMessage: [0, "p-field-error-message", "fieldErrorMessage"], spacing: [0, "p-spacing", "spacing"], textWrap: [2, "p-text-wrap", "textWrap", convertToBoolean], virtualScroll: [2, "p-virtual-scroll", "virtualScroll", convertToBoolean], filterService: [0, "p-filter-service", "filterService"], noAutocomplete: [0, "p-no-autocomplete", "noAutocomplete"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"], disabled: [0, "p-disabled", "disabled"] }, outputs: { onError: "p-error", selected: "p-selected", change: "p-change", changeVisibleColumns: "p-change-visible-columns", columnRestoreManager: "p-restore-column-manager" }, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature] });
723
+ static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoLookupBaseComponent, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], label: [0, "p-label", "label"], literals: [0, "p-literals", "literals"], help: [0, "p-help", "help"], placeholder: [0, "p-placeholder", "placeholder"], name: "name", fieldValue: [0, "p-field-value", "fieldValue"], fieldLabel: [0, "p-field-label", "fieldLabel"], filterParams: [0, "p-filter-params", "filterParams"], fieldFormat: [0, "p-field-format", "fieldFormat"], columns: [0, "p-columns", "columns"], optional: [0, "p-optional", "optional"], advancedFilters: [0, "p-advanced-filters", "advancedFilters"], hideColumnsManager: [2, "p-hide-columns-manager", "hideColumnsManager", convertToBoolean], infiniteScroll: [2, "p-infinite-scroll", "infiniteScroll", convertToBoolean], clean: [2, "p-clean", "clean", convertToBoolean], multiple: [2, "p-multiple", "multiple", convertToBoolean], autoHeight: [2, "p-auto-height", "autoHeight", convertToBoolean], fieldErrorMessage: [0, "p-field-error-message", "fieldErrorMessage"], errorLimit: [0, "p-error-limit", "errorLimit"], errorAppendBox: [2, "p-error-append-in-body", "errorAppendBox", convertToBoolean], spacing: [0, "p-spacing", "spacing"], textWrap: [2, "p-text-wrap", "textWrap", convertToBoolean], virtualScroll: [2, "p-virtual-scroll", "virtualScroll", convertToBoolean], filterService: [0, "p-filter-service", "filterService"], noAutocomplete: [0, "p-no-autocomplete", "noAutocomplete"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"], disabled: [0, "p-disabled", "disabled"] }, outputs: { onError: "p-error", selected: "p-selected", change: "p-change", changeVisibleColumns: "p-change-visible-columns", columnRestoreManager: "p-restore-column-manager" }, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵNgOnChangesFeature] });
710
724
  }
711
725
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoLookupBaseComponent, [{
712
726
  type: Directive
@@ -770,6 +784,12 @@ export class PoLookupBaseComponent {
770
784
  }], fieldErrorMessage: [{
771
785
  type: Input,
772
786
  args: ['p-field-error-message']
787
+ }], errorLimit: [{
788
+ type: Input,
789
+ args: ['p-error-limit']
790
+ }], errorAppendBox: [{
791
+ type: Input,
792
+ args: [{ alias: 'p-error-append-in-body', transform: convertToBoolean }]
773
793
  }], spacing: [{
774
794
  type: Input,
775
795
  args: ['p-spacing']
@@ -810,4 +830,4 @@ export class PoLookupBaseComponent {
810
830
  type: Input,
811
831
  args: ['p-disabled']
812
832
  }] }); })();
813
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9va3VwLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWxvb2t1cC9wby1sb29rdXAtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3JGLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFFTixRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsU0FBUyxFQUlWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7OztBQUVsRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxFQUFFLEVBQW9CO1FBQ3BCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLEtBQUssRUFBRSxPQUFPO0tBQ2Y7SUFDRCxFQUFFLEVBQW9CO1FBQ3BCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLEtBQUssRUFBRSxTQUFTO0tBQ2pCO0lBQ0QsRUFBRSxFQUFvQjtRQUNwQixNQUFNLEVBQUUsV0FBVztRQUNuQixLQUFLLEVBQUUsUUFBUTtLQUNoQjtJQUNELEVBQUUsRUFBb0I7UUFDcEIsTUFBTSxFQUFFLE9BQU87UUFDZixLQUFLLEVBQUUsUUFBUTtLQUNoQjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLE9B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QUMsaUJBQWlCO1lBVUMsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdE9wdGlvbnMsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTmdDb250cm9sLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4sIGlzVHlwZW9mIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyByZXF1aXJlZEZhaWxlZCB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgUG9Mb29rdXBBZHZhbmNlZEZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1sb29rdXAtYWR2YW5jZWQtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0xvb2t1cENvbHVtbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1sb29rdXAtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0xvb2t1cEZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1sb29rdXAtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0xvb2t1cExpdGVyYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Mb29rdXBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1sb29rdXAtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9Mb29rdXBNb2RhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLWxvb2t1cC1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5TcGFjaW5nIH0gZnJvbSAnLi4vLi4vcG8tdGFibGUvZW51bXMvcG8tdGFibGUtc3BhY2luZy5lbnVtJztcblxuZXhwb3J0IGNvbnN0IHBvTG9va3VwTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvTG9va3VwTGl0ZXJhbHM+e1xuICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgY2xlYW46ICdDbGVhbidcbiAgfSxcbiAgZXM6IDxQb0xvb2t1cExpdGVyYWxzPntcbiAgICBzZWFyY2g6ICdCdXNjYXInLFxuICAgIGNsZWFuOiAnTGltcGlhcidcbiAgfSxcbiAgcHQ6IDxQb0xvb2t1cExpdGVyYWxzPntcbiAgICBzZWFyY2g6ICdQZXNxdWlzYXInLFxuICAgIGNsZWFuOiAnQXBhZ2FyJ1xuICB9LFxuICBydTogPFBvTG9va3VwTGl0ZXJhbHM+e1xuICAgIHNlYXJjaDogJ9Cf0L7QuNGB0LonLFxuICAgIGNsZWFuOiAn0YfQuNGB0YLRi9C5J1xuICB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIENvbXBvbmVudGUgdXRpbGl6YWRvIHBhcmEgYWJyaXIgdW1hIGphbmVsYSBkZSBidXNjYSBjb20gdW1hIHRhYmVsYSBxdWUgbGlzdGEgZGFkb3MgZGUgdW0gc2VydmnDp28uIE5lc3RhIGphbmVsYSDDqSBwb3Nzw612ZWwgYnVzY2FyIGVcbiAqIHNlbGVjaW9uYXIgdW0gb3UgbWFpcyByZWdpc3Ryb3MgcXVlIHNlcsOjbyBlbnZpYWRvcyBwYXJhIG8gY2FtcG8uIE8gYHBvLWxvb2t1cGAgcGVybWl0ZSBxdWUgbyB1c3XDoXJpbyBkaWdpdGUgdW0gdmFsb3IgZSBwcmVzc2lvbmUgYSB0ZWNsYSAqVEFCKiBwYXJhXG4gKiBidXNjYXIgdW0gcmVnaXN0cm8uXG4gKlxuICogPiBDYXNvIG8gY2FtcG8gc2VqYSBpbmljaWFkbyBvdSBwcmVlbmNoaWRvIGNvbSB1bSB2YWxvciBpbmV4aXN0ZW50ZSBuYSBidXNjYSwgbyBtZXNtbyBzZXLDoSBsaW1wYWRvLlxuICogTm8gc2VndW5kbyBjYXNvIG9jb3JyZXLDoSBhcMOzcyBlc3RlIHBlcmRlciBvIGZvY287IGFtYm9zIG9zIGNhc29zIG8gY2FtcG8gZmljYXLDoSBpbnbDoWxpZG8gcXVhbmRvIHJlcXVlcmlkby5cbiAqXG4gKiA+IEVucXVhbnRvIG8gY29tcG9uZW50ZSByZWFsaXphIGEgcmVxdWlzacOnw6NvIGFvIHNlcnZpZG9yLCBvIGNvbXBvbmVudGUgZmljYXLDoSBkZXNhYmlsaXRhZG8gZSBjb20gbyBzdGF0dXMgaW50ZXJubyBkb1xuICogW21vZGVsb10oaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2Zvcm0tdmFsaWRhdGlvbiNjcmVhdGluZy1hc3luY2hyb25vdXMtdmFsaWRhdG9ycykgY29tbyBgcGVuZGluZ2AuXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIG7Do28gw6kgcmVjb21lbmRhZG8gcXVhbmRvIGEgYnVzY2EgZG9zIGRhZG9zIHBvc3N1aXIgcG91Y2FzIGluZm9ybWHDp8O1ZXMsIHBhcmEgaXNzbyB1dGlsaXplIG91dHJvcyBjb21wb25lbnRlcyBjb21vIG9cbiAqIGBwby1zZWxlY3RgIG91IG8gYHBvLWNvbWJvYC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9Mb29rdXBCYXNlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSwgT25Jbml0LCBWYWxpZGF0b3IsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlc1xue1xuICBwcml2YXRlIF9saXRlcmFscz86IFBvTG9va3VwTGl0ZXJhbHM7XG4gIHByaXZhdGUgbGFuZ3VhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8tZm9jdXMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExhYmVsIGRvIGNhbXBvLlxuICAgKlxuICAgKiA+IFF1YW5kbyB1dGlsaXphciBlc3RhIHByb3ByaWVkYWRlIG8gc2V1IHZhbG9yIHNlcsOhIHV0aWxpemFkbyBjb21vIHTDrXR1bG8gZGEgbW9kYWwgZG8gY29tcG9uZW50ZSBjYXNvIG7Do28gdGVuaGFcbiAgICogc2lkbyBkZWZpbmlkbyB1bSBgbW9kYWxUaXRsZWAgbmEgcHJvcHJpZWRhZGUgYHAtbGl0ZXJhbHNgLlxuICAgKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tbG9va3VwYC5cbiAgICpcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlLCBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpczpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9Mb29rdXBMaXRlcmFscyA9IHtcbiAgICogICAgbW9kYWxQcmltYXJ5QWN0aW9uTGFiZWw6ICdTZWxlY3QnLFxuICAgKiAgICBtb2RhbFNlY29uZGFyeUFjdGlvbkxhYmVsOiAnQ2FuY2VsJyxcbiAgICogICAgbW9kYWxQbGFjZWhvbGRlcjogJ1NlYXJjaCBWYWx1ZScsXG4gICAqICAgIG1vZGFsVGFibGVOb0NvbHVtbnM6ICdObyBjb2x1bW5zJyxcbiAgICogICAgbW9kYWxUYWJsZU5vRGF0YTogJ05vIGRhdGEnLFxuICAgKiAgICBtb2RhbFRhYmxlTG9hZGluZ0RhdGE6ICdMb2FkaW5nIGRhdGEnLFxuICAgKiAgICBtb2RhbFRhYmxlTG9hZE1vcmVEYXRhOiAnTG9hZCBtb3JlJyxcbiAgICogICAgbW9kYWxUaXRsZTogJ1NlbGVjdCBhIHVzZXInLFxuICAgKiAgICBtb2RhbEFkdmFuY2VkU2VhcmNoOiAnQWR2YW5jZWQgc2VhcmNoJyxcbiAgICogICAgbW9kYWxBZHZhbmNlZFNlYXJjaFRpdGxlOiAnQWR2YW5jZWQgc2VhcmNoJyxcbiAgICogICAgbW9kYWxBZHZhbmNlZFNlYXJjaFByaW1hcnlBY3Rpb25MYWJlbDogJ0ZpbHRlcicsXG4gICAqICAgIG1vZGFsQWR2YW5jZWRTZWFyY2hTZWNvbmRhcnlBY3Rpb25MYWJlbDogJ1JldHVybicsXG4gICAqICAgIG1vZGFsRGlzY2xhaW1lckdyb3VwVGl0bGU6ICdQcmVzZW50aW5nIHJlc3VsdHMgZmlsdGVyZWQgYnk6J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvTG9va3VwTGl0ZXJhbHMgPSB7XG4gICAqICAgIG1vZGFsUHJpbWFyeUFjdGlvbkxhYmVsOiAnU2VsZWN0J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tbG9va3VwXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby1sb29rdXA+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9Mb29rdXBMaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9Mb29rdXBMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9Mb29rdXBMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvTG9va3VwTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9Mb29rdXBMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gIH1cblxuICAvKiogVGV4dG8gZGUgYXBvaW8gZG8gY2FtcG8uICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKiogTWVuc2FnZW0gcXVlIGFwYXJlY2Vyw6EgZW5xdWFudG8gbyBjYW1wbyBuw6NvIGVzdGl2ZXIgcHJlZW5jaGlkby4gKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyJykgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKiBOb21lIGUgSWQgZG8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCduYW1lJykgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIGEgY29sdW5hIHF1ZSBzZXLDoSB1dGlsaXphZGEgY29tbyB2YWxvciBkbyBjYW1wby5cbiAgICpcbiAgICogPiBBdGVuw6fDo286IENhc28gbsOjbyBzZWphIHBhc3NhZGEgb3UgdGVuaGEgbyBjb250ZcO6ZG8gaW5jb3JyZXRvLCBuw6NvIGlyw6EgYXR1YWxpemFyIG8gbW9kZWwgZG8gZm9ybXVsw6FyaW8uXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBmaWVsZFZhbHVlOiBzdHJpbmc7XG5cbiAgLyoqIEluZGljYSBhIGNvbHVuYSBxdWUgc2Vyw6EgdXRpbGl6YWRhIGNvbW8gZGVzY3Jpw6fDo28gZG8gY2FtcG8gZSBjb21vIGZpbHRybyBkZW50cm8gZGEgamFuZWxhLiAqL1xuICBASW5wdXQoJ3AtZmllbGQtbGFiZWwnKSBzZXQgZmllbGRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRMYWJlbCA9IHZhbHVlO1xuICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW3RoaXMuZmllbGRMYWJlbF07XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKiBWYWxvciBxdWUgc2Vyw6EgcmVwYXNzYWRvIGNvbW8gcGFyw6JtZXRybyBwYXJhIGEgVVJMIG91IGFvcyBtw6l0b2RvcyBkbyBzZXJ2acOnbyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgYFBvTG9va3VwRmlsdGVyYC4gKi9cbiAgQElucHV0KCdwLWZpbHRlci1wYXJhbXMnKSBmaWx0ZXJQYXJhbXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRm9ybWF0byBkZSBleGliacOnw6NvIGRvIGNhbXBvLlxuICAgKlxuICAgKiBSZWNlYmUgdW1hIGZ1bsOnw6NvIHF1ZSBkZXZlIHJldG9ybmFyIHVtYSAqc3RyaW5nKiBjb20gby9vcyB2YWxvcmVzIGRvIG9iamV0byBmb3JtYXRhZG9zIHBhcmEgZXhpYmnDp8OjbywgcG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBmaWVsZEZvcm1hdChvYmopIHtcbiAgICogICByZXR1cm4gYCR7b2JqLmlkfSAtICR7b2JqLm5hbWV9YDtcbiAgICogfVxuICAgKiBgYGBcbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIHNvYnJlcMO1ZSBvIHZhbG9yIGRhIHByb3ByaWVkYWRlIGBwLWZpZWxkLWxhYmVsYCBuYSBkZXNjcmnDp8OjbyBkbyBjYW1wby5cbiAgICpcbiAgICogUG9kZS1zZSBpbmZvcm1hciB1bWEgbGlzdGEgZGUgcHJvcHJpZWRhZGVzIHF1ZSBkZXNlamEgZXhpYmlyIGNvbW8gZGVzY3Jpw6fDo28gZG8gY2FtcG8sIFBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogPHBvLWxvb2t1cFxuICAgKiAgLi4uXG4gICAqICBbcC1maWVsZC1mb3JtYXRdPVwiWydpZCcsJ25pY2tuYW1lJ11cIlxuICAgKiAgLi4uXG4gICAqID5cbiAgICpcbiAgICogT2JqZXRvIHJldG9ybmFkbzpcbiAgICogICB7XG4gICAqICAgICAgaWQ6MTIzLFxuICAgKiAgICAgIG5hbWU6ICdLYWthcm90bycsXG4gICAqICAgICAgbmlja25hbWU6ICdHb2t1JyxcbiAgICogICB9XG4gICAqIEFwcmVzZW50YcOnw6NvIG5vIGNhbXBvOiAxMjMgLSBHb2t1XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IFNlcsOhIHV0aWxpemFkbyBgIC0gYCBjb21vIHNlcGFyYWRvci5cbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1mb3JtYXQnKSBmaWVsZEZvcm1hdD86ICgodmFsdWUpID0+IHN0cmluZykgfCBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBMaXN0YSBkYXMgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqIEVzc2EgcHJvcHJpZWRhZGUgZGV2ZSByZWNlYmVyIHVtIGFycmF5IGRlIG9iamV0b3MgcXVlIGltcGxlbWVudGFtIGEgaW50ZXJmYWNlIFBvTG9va3VwQ29sdW1uLlxuICAgKi9cbiAgQElucHV0KCdwLWNvbHVtbnMnKSBjb2x1bW5zPzogQXJyYXk8UG9Mb29rdXBDb2x1bW4+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbmFsJykgb3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGUgb2JqZXRvcyBkb3MgY2FtcG9zIHF1ZSBzZXLDo28gY3JpYWRvcyBuYSBidXNjYSBhdmFuw6dhZGEuXG4gICAqXG4gICAqID4gQ2FzbyBuw6NvIHNlamEgcGFzc2FkbyB1bSBvYmpldG8gb3UgZW50w6NvIGVsZSBlc3RlamEgZW0gYnJhbmNvIG8gbGluayBkZSBidXNjYSBhdmFuw6dhZGEgZmljYXLDoSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgVVJMIGNvbSBidXNjYSBhdmFuw6dhZGE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJm5hbWU9VG9ueSUyMFN0YXJrJm5pY2tuYW1lPUhvbWVtJTIwZGUlMjBGZXJyb1xuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyBhbGd1bSBwYXLDom1ldHJvIHNlamEgdW1hIGxpc3RhLCBhIGNvbmNhdGVuYcOnw6NvIMOpIGZlaXRhIHV0aWxpemFuZG8gdsOtcmd1bGEuXG4gICAqIEV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJm5hbWU9VG9ueSUyMFN0YXJrLFBldGVyJTIwUGFya2VyLEdvaGFuXG4gICAqIGBgYFxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWFkdmFuY2VkLWZpbHRlcnMnKSBhZHZhbmNlZEZpbHRlcnM6IEFycmF5PFBvTG9va3VwQWR2YW5jZWRGaWx0ZXI+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgcXVlIG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcywgcmVzcG9uc8OhdmVsIHBlbGEgZGVmaW5pw6fDo28gZGUgcXVhaXMgY29sdW5hcyBzZXLDo28gZXhpYmlkYXMsIHNlamEgZXNjb25kaWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1jb2x1bW5zLW1hbmFnZXInLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSlcbiAgaGlkZUNvbHVtbnNNYW5hZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXRpdmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBzY3JvbGwgaW5maW5pdG8gcGFyYSBhIHRhYmVsYSBleGliaWRhIG5vIHJldG9ybm8gZGEgY29uc3VsdGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1pbmZpbml0ZS1zY3JvbGwnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRXhpYmUgdW0gw61jb25lIHF1ZSBwZXJtaXRlIGxpbXBhciBvIGNhbXBvLiAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtY2xlYW4nLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgY2xlYW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGEgc2VsZcOnw6NvIGRlIG3Dumx0aXBsb3MgaXRlbnMuXG4gICAqXG4gICAqID4gUXVhbmRvIGhhYmlsaXRhZG8gbyB2YWxvciBkbyBjYW1wbyBwYXNzYXLDoSBhIHNlciB1bWEgbGlzdGEgZGUgdmFsb3JlcywgcG9yIGV4ZW1wbG86IGBbIDEyMzQ1LCA2Nzg5MCBdYFxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtbXVsdGlwbGUnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIGEgYWx0dXJhIGRvIGNvbXBvbmVudGUgc2Vyw6EgYXV0byBhanVzdMOhdmVsLCBwb3NzdWluZG8gdW1hIGFsdHVyYSBtaW5pbWEgcG9yw6ltIGEgYWx0dXJhIG3DoXhpbWEgc2Vyw6EgZGUgYWNvcmRvXG4gICAqIGNvbSBvIG7Dum1lcm8gZGUgaXRlbnMgc2VsZWNpb25hZG9zIGUgYSBleHRlbnPDo28gZG9zIG1lc21vcywgbWFudGVuZG8tb3Mgc2VtcHJlIHZpc8OtdmVpcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8taGVpZ2h0JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGF1dG9IZWlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeGliZSBhIG1lbnNhZ2VtIHNldGFkYSBzZSBvIGNhbXBvIGVzdGl2ZXIgdmF6aW8gZSBmb3IgcmVxdWVyaWRvLlxuICAgKlxuICAgKiA+IE5lY2Vzc8OhcmlvIHF1ZSBhIHByb3ByaWVkYWRlIGBwLXJlcXVpcmVkYCBlc3RlamEgaGFiaWxpdGFkYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1lcnJvci1tZXNzYWdlJykgZmllbGRFcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZXNwb25zw6F2ZWwgcG9yIGFwbGljYXIgZXNwYcOnYW1lbnRvIG5hcyBjb2x1bmFzIGRhIHRhYmVsYSBjb250aWRhIG5vIGxvb2t1cC5cbiAgICpcbiAgICogRGV2ZSByZWNlYmVyIHVtIGRvcyB2YWxvcmVzIGRvIGVudW0gYFBvVGFibGVDb2x1bW5TcGFjaW5nYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYG1lZGl1bWBcbiAgICovXG4gIEBJbnB1dCgncC1zcGFjaW5nJykgc3BhY2luZzogUG9UYWJsZUNvbHVtblNwYWNpbmcgPSBQb1RhYmxlQ29sdW1uU3BhY2luZy5NZWRpdW07XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBhIHF1ZWJyYSBhdXRvbcOhdGljYSBkZSB0ZXh0by4gUXVhbmRvIGF0aXZhZGEsIG8gdGV4dG8gcXVlIGV4Y2VkZVxuICAgKiBvIGVzcGHDp28gZGlzcG9uw612ZWwgw6kgdHJhbnNmZXJpZG8gcGFyYSBhIHByw7N4aW1hIGxpbmhhIGVtIHBvbnRvcyBhcHJvcHJpYWRvcyBwYXJhIHVtYVxuICAgKiBsZWl0dXJhIGNsYXJhLlxuICAgKlxuICAgKiBFc3RhIHByb3ByaWVkYWRlIGFwbGljYS1zZSBhbyB0ZXh0byBjb250aWRvIG5hcyBjw6lsdWxhcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqID4gSW5jb21wYXTDrXZlbCBjb20gYHZpcnR1YWwtc2Nyb2xsYCwgcXVlIHJlcXVlciBhbHR1cmEgZml4YSBuYXMgbGluaGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtdGV4dC13cmFwJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHRleHRXcmFwPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG8gYHZpcnR1YWwtc2Nyb2xsYCBuYSB0YWJlbGEgcGFyYSBtZWxob3JhciBhIHBlcmZvcm1hbmNlIGNvbSBncmFuZGVzIHZvbHVtZXMgZGUgZGFkb3MuXG4gICAqIEEgYWx0dXJhIGRhIHRhYmVsYSBqw6Egw6kgcHLDqS1kZWZpbmlkYSwgcG9ydGFudG8gbyBgdmlydHVhbC1zY3JvbGxgIHNlcsOhIGF0aXZhZG8gYXV0b21hdGljYW1lbnRlLlxuICAgKlxuICAgKiA+IEluY29tcGF0w612ZWwgY29tIGBwLXRleHQtd3JhcGAgZSBgbWFzdGVyLWRldGFpbGAsIHBvaXMgbyBgdmlydHVhbC1zY3JvbGxgIGV4aWdlIGFsdHVyYSBmaXhhIG5hcyBsaW5oYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXZpcnR1YWwtc2Nyb2xsJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIHZpcnR1YWxTY3JvbGw/OiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogRXZlbnRvIHNlcsOhIGRpc3BhcmFkbyBxdWFuZG8gb2NvcnJlciBhbGd1bSBlcnJvIG5hIHJlcXVpc2nDp8OjbyBkZSBidXNjYSBkbyBpdGVtLlxuICAgKiBTZXLDoSBwYXNzYWRvIHBvciBwYXLDom1ldHJvIG8gb2JqZXRvIGRlIGVycm8gcmV0b3JuYWRvLlxuICAgKi9cbiAgQE91dHB1dCgncC1lcnJvcicpIG9uRXJyb3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIHNlcsOhIGRpc3BhcmFkbyBxdWFuZG8gb2NvcnJlciBhbGd1bWEgc2VsZcOnw6NvLlxuICAgKiBTZXLDoSBwYXNzYWRvIHBvciBwYXLDom1ldHJvIG8gb2JqZXRvIGNvbSBvIHZhbG9yIHNlbGVjaW9uYWRvLlxuICAgKi9cbiAgQE91dHB1dCgncC1zZWxlY3RlZCcpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqICBFdmVudG8gcXVlIHNlcsOhIGRpc3BhcmFkbyBhbyBhbHRlcmFyIG8gbW9kZWwuXG4gICAqICBQb3IgcGFyw6JtZXRybyBzZXLDoSBwYXNzYWRvIG8gbm92byB2YWxvci5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlJykgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gYW8gZmVjaGFyIG8gcG9wb3ZlciBkbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzIGFww7NzIGFsdGVyYXIgYXMgY29sdW5hcyB2aXPDrXZlaXMuXG4gICAqXG4gICAqIE8gY29tcG9uZW50ZSBlbnZpYSBjb21vIHBhcsOibWV0cm8gdW0gYXJyYXkgZGUgc3RyaW5nIGNvbSBhcyBjb2x1bmFzIHZpc8OtdmVpcyBhdHVhbGl6YWRhcy5cbiAgICogUG9yIGV4ZW1wbG86IFtcImlkQ2FyZFwiLCBcIm5hbWVcIiwgXCJoaXJlU3RhdHVzXCIsIFwiYWdlXCJdLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UtdmlzaWJsZS1jb2x1bW5zJykgY2hhbmdlVmlzaWJsZUNvbHVtbnMgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGRpc3BhcmFkbyBhbyBjbGljYXIgbm8gYm90w6NvIGRlIHJlc3RhdXJhciBwYWRyw6NvIG5vIGdlcmVuY2lhZG9yIGRlIGNvbHVuYXMuXG4gICAqXG4gICAqIE8gY29tcG9uZW50ZSBlbnZpYSBjb21vIHBhcsOibWV0cm8gdW0gYXJyYXkgZGUgc3RyaW5nIGNvbSBhcyBjb2x1bmFzIGNvbmZpZ3VyYWRhcyBpbmljaWFsbWVudGUuXG4gICAqIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgICovXG4gIEBPdXRwdXQoJ3AtcmVzdG9yZS1jb2x1bW4tbWFuYWdlcicpIGNvbHVtblJlc3RvcmVNYW5hZ2VyID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxTdHJpbmc+PigpO1xuXG4gIHNlcnZpY2U6IGFueTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcHRpb25zID0gW107XG4gIHByb3RlY3RlZCBnZXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGtleXNEZXNjcmlwdGlvbjogQXJyYXk8YW55PjtcbiAgcHJvdGVjdGVkIG9sZFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJvdGVjdGVkIHZhbHVlVG9Nb2RlbDtcbiAgcHJvdGVjdGVkIG9sZFZhbHVlVG9Nb2RlbCA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiBhbnkgPSBudWxsO1xuICBwcm90ZWN0ZWQgcmVzaXplTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZpZWxkTGFiZWw6IHN0cmluZztcbiAgcHJpdmF0ZSBfZmlsdGVyU2VydmljZTogUG9Mb29rdXBGaWx0ZXIgfCBzdHJpbmc7XG4gIHByaXZhdGUgX25vQXV0b2NvbXBsZXRlOiBib29sZWFuO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9hdXRvSGVpZ2h0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBhdXRvSGVpZ2h0SW5pdGlhbFZhbHVlOiBib29sZWFuO1xuICBwcml2YXRlIG9uQ2hhbmdlUHJvcGFnYXRlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogYW55O1xuXG4gIHByaXZhdGUgY29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcblxuICBwcml2YXRlIGluamVjdE9wdGlvbnM6IEluamVjdE9wdGlvbnMgPSB7XG4gICAgc2VsZjogdHJ1ZVxuICB9O1xuXG4gIC8qKlxuICAgKiBTZXJ2acOnbyByZXNwb25zw6F2ZWwgcG9yIGJ1c2NhciBvcyBkYWRvcyBkYSB0YWJlbGEgbmEgamFuZWxhLiBQb2RlIHNlciBpbmZvcm1hZG8gdW0gc2VydmnDp28gcXVlIGltcGxlbWVudGUgYSBpbnRlcmZhY2VcbiAgICogYFBvTG9va3VwRmlsdGVyYCBvdSB1bWEgVVJMLlxuICAgKlxuICAgKiBRdWFuZG8gdXRpbGl6YWRhIHVtYSBVUkwgZGUgdW0gc2VydmnDp28sIHNlcsOhIGNvbmNhdGVuYWRhIG5lc3RhIFVSTCBvIHZhbG9yIHF1ZSBkZXNlamEtc2UgZmlsdHJhciwgcG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmZpbHRlcj1QZXRlclxuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyB1dGlsaXphciBvcmRlbmHDp8OjbywgYSBjb2x1bmEgb3JkZW5hZGEgc2Vyw6EgZW52aWFkYSBhdHJhdsOpcyBkbyBwYXLDom1ldHJvIGBvcmRlcmAsIHBvciBleGVtcGxvOlxuICAgKiAtIENvbHVuYSBkZWNyZXNjZW50ZTpcbiAgICogYGBgXG4gICAqICB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmZpbHRlcj1QZXRlciZvcmRlcj0tbmFtZVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBDb2x1bmEgYXNjZW5kZW50ZTpcbiAgICogYGBgXG4gICAqICB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmZpbHRlcj1QZXRlciZvcmRlcj1uYW1lXG4gICAqIGBgYFxuICAgKlxuICAgKiBTZSBmb3IgZGVmaW5pZG8gYSBwcm9wcmllZGFkZSBgcC1maWx0ZXItcGFyYW1zYCwgbyBtZXNtbyB0YW1iw6ltIHNlcsOhIGNvbmNhdGVuYWRvLiBQb3IgZXhlbXBsbywgcGFyYSBvXG4gICAqIHBhcsOibWV0cm8gYHsgYWdlOiAyMyB9YCBhIFVSTCBmaWNhcmlhOlxuICAgKlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0yMCZhZ2U9MjMmZmlsdGVyPVBldGVyXG4gICAqIGBgYFxuICAgKlxuICAgKiBBbyBpbmljaWFyIG8gY2FtcG8gY29tIHZhbG9yLCBvcyByZWdpc3Ryb3Mgc2Vyw6NvIGJ1c2NhZG9zIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKiBgYGBcbiAgICogbW9kZWwgPSAxMjM0O1xuICAgKlxuICAgKiBHRVQgdXJsLzEyMzRcbiAgICogYGBgXG4gICAqXG4gICAqIENhc28gZXN0aXZlciBjb20gbcO6bHRpcGxhIHNlbGXDp8OjbyBoYWJpbGl0YWRhOlxuICAgKiBgYGBcbiAgICogbW9kZWwgPSBbMTIzNCwgNTY3OF1cbiAgICpcbiAgICogR0VUIHVybD8ke2ZpZWxkVmFsdWV9PTEyMzQsNTY3OFxuICAgKiBgYGBcbiAgICpcbiAgICogPiBFc3RhIFVSTCBkZXZlIHJldG9ybmFyIGUgcmVjZWJlciBvcyBkYWRvcyBubyBwYWRyw6NvIGRlIFtBUEkgZG8gUE8gVUldKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2FwaSkgZSB1dGlsaXphIG9zIHZhbG9yZXNcbiAgICogZGVmaW5pZG9zIG5hcyBwcm9wcmllZGFkZXMgYHAtZmllbGQtbGFiZWxgIGUgYHAtZmllbGQtdmFsdWVgIHBhcmEgYSBjb25zdHJ1w6fDo28gZG8gYHBvLWxvb2t1cGAuXG4gICAqXG4gICAqIENhc28gbyB1c3XDoXJpbyBkaWdpdGUgdW0gdmFsb3IgZSBwcmVzc2lvbmUgYSB0ZWNsYSAqVEFCKiBwYXJhIHJlYWxpemFyIGEgYnVzY2EgZGUgdW0gcmVnaXN0cm8gZXNwZWPDrWZpY28sIG8gdmFsb3IgcXVlIHNlXG4gICAqIGRlc2VqYSBmaWx0cmFyIHNlcsOhIGNvZGlmaWNhZG8gdXRpbGl6YW5kbyBhIGZ1bsOnw6NvIFtlbmNvZGVVUklDb21wb25lbnRdKGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZW5jb2RldXJpY29tcG9uZW50LXVyaWNvbXBvbmVudClcbiAgICogZSBjb25jYXRlbmFkbyBuYSBVUkwgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwvdmFsb3IlMjBxdWUlMjBzZSUyMGRlc2VqYSUyMGZpbHRyYXJcbiAgICogYGBgXG4gICAqXG4gICAqID4gUXVhbmRvIGluZm9ybWFkbyB1bSBzZXJ2acOnbyBxdWUgaW1wbGVtZW50ZSBhIGludGVyZmFjZSBgUG9Mb29rdXBGaWx0ZXJgIG8gdHJhdGFtZW50byBkZSBlbmNvZGluZyBkbyB2YWxvciBhIHNlciBmaWx0cmFkbyBmaWNhcsOhIGEgY2FyZ28gZG8gZGVzZW52b2x2ZWRvci5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItc2VydmljZScpIHNldCBmaWx0ZXJTZXJ2aWNlKGZpbHRlclNlcnZpY2U6IFBvTG9va3VwRmlsdGVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5fZmlsdGVyU2VydmljZSA9IGZpbHRlclNlcnZpY2U7XG4gICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuZmlsdGVyU2VydmljZSk7XG4gIH1cblxuICBnZXQgZmlsdGVyU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyU2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhIHByb3ByaWVkYWRlIG5hdGl2YSBgYXV0b2NvbXBsZXRlYCBkbyBjYW1wbyBjb21vIGBvZmZgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atbm8tYXV0b2NvbXBsZXRlJykgc2V0IG5vQXV0b2NvbXBsZXRlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbm9BdXRvY29tcGxldGUgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBub0F1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9BdXRvY29tcGxldGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKiA+IEVzdGEgcHJvcHJpZWRhZGUgw6kgZGVzY29uc2lkZXJhZGEgcXVhbmRvIG8gaW5wdXQgZXN0w6EgZGVzYWJpbGl0YWRvIGAocC1kaXNhYmxlZClgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMudmFsdWVUb01vZGVsKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb2JyaWdhdMOzcmlvIHNlcsOpIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctcmVxdWlyZWQnKSBzaG93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBkZXNhYmlsaXRhZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkJykgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSA8YW55PmRpc2FibGVkID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKGRpc2FibGVkKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlZmF1bHRTZXJ2aWNlOiBQb0xvb2t1cEZpbHRlclNlcnZpY2UsXG4gICAgQEluamVjdChJbmplY3RvcikgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHVibGljIHBvTG9va3VwTW9kYWxTZXJ2aWNlOiBQb0xvb2t1cE1vZGFsU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZ2V0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0Q29udHJvbCgpO1xuICB9XG5cbiAgY2xlYW5Nb2RlbCgpIHtcbiAgICB0aGlzLmNsZWFuVmlld1ZhbHVlKCk7XG4gICAgdGhpcy5jYWxsT25DaGFuZ2UodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5jb2x1bW5zPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IGNoYW5nZXMuY29sdW1ucy5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnBvTG9va3VwTW9kYWxTZXJ2aWNlPy5zZXRDaGFuZ2VDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubXVsdGlwbGUgJiYgaXNUeXBlb2YodGhpcy5maWx0ZXJTZXJ2aWNlLCAnc3RyaW5nJykpIHtcbiAgICAgIHRoaXMuc2VydmljZS5zZXRDb25maWcodGhpcy5maWx0ZXJTZXJ2aWNlLCB0aGlzLmZpZWxkVmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIG9zIGVzdGFkb3MgZGUgaGFiaWxpdGFkbyB2aWEgZm9ybXMgYXBpXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgYXMgbXVkYW7Dp2FzIGUgbsOjbyBhdHVhbGl6YXIgYXV0b21hdGljYW1lbnRlIG8gTW9kZWwuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZnVuYzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZVByb3BhZ2F0ZSA9IGZ1bmM7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgYXMgbXVkYW7Dp2FzIGUgbsOjbyBhdHVhbGl6YXIgYXV0b21hdGljYW1lbnRlIG8gTW9kZWwuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZnVuYztcbiAgfVxuXG4gIC8vIFNlbGVjaW9uYSBvIHZhbG9yIGRvIG1vZGVsLlxuICBzZWxlY3RWYWx1ZSh2YWx1ZVNlbGVjdGVkOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlVG9Nb2RlbCA9IHZhbHVlU2VsZWN0ZWQ7XG4gICAgdGhpcy5tdWx0aXBsZVxuICAgICAgPyB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLnZhbHVlVG9Nb2RlbClcbiAgICAgIDogdGhpcy52YWx1ZVRvTW9kZWxcbiAgICAgICAgPyB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLnZhbHVlVG9Nb2RlbFt0aGlzLmZpZWxkVmFsdWVdKVxuICAgICAgICA6IHRoaXMuY2FsbE9uQ2hhbmdlKHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZWxlY3RlZC5lbWl0KHZhbHVlU2VsZWN0ZWQpO1xuICB9XG5cbiAgY2FsbE9uQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAvLyBRdWFuZG8gbyBpbnB1dCBuw6NvIHBvc3N1aSB1bSBmb3JtdWzDoXJpbywgZW50w6NvIGVzdGEgZnVuw6fDo28gbsOjbyDDqSByZWdpc3RyYWRhLlxuICAgIGlmICh0aGlzLm9uQ2hhbmdlUHJvcGFnYXRlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlUHJvcGFnYXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vbGRWYWx1ZVRvTW9kZWwgIT09IHRoaXMudmFsdWVUb01vZGVsKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBBcm1hemVuYXIgbyB2YWxvciBhbnRpZ28gZG8gbW9kZWxcbiAgICB0aGlzLm9sZFZhbHVlVG9Nb2RlbCA9IHRoaXMudmFsdWVUb01vZGVsO1xuICB9XG5cbiAgc2VhcmNoQnlJZCh2YWx1ZSkge1xuICAgIGxldCBjaGVja2VkVmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgY2hlY2tlZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY2hlY2tlZFZhbHVlID0gY2hlY2tlZFZhbHVlLnRyaW0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tlZFZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3Qgb2xkRGlzYWJsZSA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAvLyA6VE9ETzogUmV0aXJhciBubyBmdXR1cm8gcG9pcyBlc3NlIHNldFRpbWVvdXQgZm9pIGZlaXRvXG4gICAgICAgIC8vIHBvaXMgcXVhbmRvIG8gY2FtcG8gw6kgYWNpb25hZG8gcGVsb3MgbcOpdG9kb3Mgc2V0VmFsdWUgb3UgcGF0Y2hWYWx1ZVxuICAgICAgICAvLyBhIG11ZGFuw6dhIG7Do28gw6kgZGV0ZWN0YWRhXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250cm9sLm1hcmtBc1BlbmRpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAgIC5nZXRPYmplY3RCeVZhbHVlKHZhbHVlLCB0aGlzLmZpbHRlclBhcmFtcylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IG9sZERpc2FibGU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudD8ubGVuZ3RoIHx8ICghQXJyYXkuaXNBcnJheShlbGVtZW50KSAmJiBlbGVtZW50KSkge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSAmJiBlbGVtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc2NsYWltZXJzKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsKHRoaXMubXVsdGlwbGUgPyBlbGVtZW50IDogW2VsZW1lbnRdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYW5Nb2RlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbGVhbk1vZGVsKCk7XG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuTW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChyZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkLCB0aGlzLmRpc2FibGVkLCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXF1aXJlZDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoIHx8ICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUpKSB7XG4gICAgICAvLyBFc3RhIGNvbmRpw6fDo28gw6kgZXhlY3V0YWRhIHNvbWVudGUgcXVhbmRvIMOpIHBhc3NhZG8gbyBJRCBwYXJhIHJlYWxpemFyIGEgYnVzY2EgcGVsbyBJRC5cbiAgICAgIHRoaXMuc2VhcmNoQnlJZCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5WaWV3VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXRvcm5hIG8gU3Vic2NyaWJlciBkYSBwcm9wcmllZGFkZSBnZXRTdWJzY3JpcHRpb24gcXVlIG9jb3JyZVxuICAvLyBubyBldmVudG8gZGUgYmx1ciBxdWUgZXhlY3V0YSBvIG3DqXRvZG8gc2VhcmNoRXZlbnQoKS5cbiAgZ2V0U3Vic2NyaXB0aW9uRnVuY3Rpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdWJzY3JpcHRpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5WaWV3VmFsdWUoKSB7XG4gICAgdGhpcy5zZXREaXNjbGFpbWVycyhbXSk7XG4gICAgdGhpcy5zZXRWaWV3VmFsdWUoJycsIHt9KTtcbiAgICB0aGlzLm9sZFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZVRvTW9kZWwgPSBudWxsO1xuICB9XG5cbiAgLy8gRm9ybWF0YSBhIGxhYmVsIGRvIGNhbXBvLlxuICBwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkTGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy5rZXlzRGVzY3JpcHRpb24ubWFwKGNvbHVtbiA9PiB2YWx1ZVtjb2x1bW5dKS5qb2luKCcgLSAnKSA6ICcnO1xuICB9XG5cbiAgLy8gQ2hhbWEgbyBtw6l0b2RvIHdyaXRlVmFsdWUgZSBwcmVlbmNoZSBvIG1vZGVsLlxuICBwcm90ZWN0ZWQgc2VsZWN0TW9kZWwob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG5cbiAgICAgIGNvbnN0IG5ld01vZGVsID0gdGhpcy5tdWx0aXBsZSA/IG9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSkgOiBvcHRpb25zWzBdO1xuICAgICAgdGhpcy5zZWxlY3RWYWx1ZShuZXdNb2RlbCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aGlzLm9sZFZhbHVlID0gb3B0aW9uc1swXVt0aGlzLmZpZWxkTGFiZWxdO1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmdldEZvcm1hdHRlZExhYmVsKG9wdGlvbnNbMF0pLCBvcHRpb25zWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5jbGVhblZpZXdWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1vZGVsKG1vZGVsOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKG1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNlcnZpY2Uoc2VydmljZTogUG9Mb29rdXBGaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoaXNUeXBlb2Yoc2VydmljZSwgJ29iamVjdCcpKSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSA8UG9Mb29rdXBGaWx0ZXJTZXJ2aWNlPnNlcnZpY2U7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2UgJiYgaXNUeXBlb2Yoc2VydmljZSwgJ3N0cmluZycpKSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLnNldENvbmZpZyhzZXJ2aWNlLCB0aGlzLmZpZWxkVmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29udHJvbCgpIHtcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwgdGhpcy5pbmplY3RPcHRpb25zKTtcblxuICAgIGlmIChuZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb2x1bW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmllbGRMYWJlbCkge1xuICAgICAgdGhpcy5rZXlzRGVzY3JpcHRpb24gPSBbdGhpcy5maWVsZExhYmVsXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rZXlzRGVzY3JpcHRpb24gPSBbXTtcblxuICAgICAgdGhpcy5rZXlzRGVzY3JpcHRpb24gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5maWVsZExhYmVsKS5tYXAoZWxlbWVudCA9PiBlbGVtZW50LnByb3BlcnR5KTtcbiAgICB9XG4gIH1cblxuICAvLyBBdHJpYnVpIHVtIG91IG1haXMgdmFsb3JlcyBhbyBjYW1wby5cbiAgYWJzdHJhY3Qgc2V0Vmlld1ZhbHVlKHZhbHVlOiBhbnksIG9iamVjdDogYW55KTogdm9pZDtcblxuICAvLyBNw6l0b2RvIGNvbSBhIGltcGxlbWVudGHDp8OjbyBwYXJhIGFicmlyIG8gbG9va3VwLlxuICBhYnN0cmFjdCBvcGVuTG9va3VwKCk6IHZvaWQ7XG5cbiAgYWJzdHJhY3Qgc2V0RGlzY2xhaW1lcnMoYSk7XG4gIGFic3RyYWN0IHVwZGF0ZVZpc2libGVJdGVtcygpO1xufVxuIl19
833
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9va3VwLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWxvb2t1cC9wby1sb29rdXAtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3JGLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFFTixRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsU0FBUyxFQUlWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7OztBQUVsRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxFQUFFLEVBQW9CO1FBQ3BCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLEtBQUssRUFBRSxPQUFPO0tBQ2Y7SUFDRCxFQUFFLEVBQW9CO1FBQ3BCLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLEtBQUssRUFBRSxTQUFTO0tBQ2pCO0lBQ0QsRUFBRSxFQUFvQjtRQUNwQixNQUFNLEVBQUUsV0FBVztRQUNuQixLQUFLLEVBQUUsUUFBUTtLQUNoQjtJQUNELEVBQUUsRUFBb0I7UUFDcEIsTUFBTSxFQUFFLE9BQU87UUFDZixLQUFLLEVBQUUsUUFBUTtLQUNoQjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLE9B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QkFBb0I7a0JBQXZELE1BQU07bUJBQUMsMEJBQTBCO1lBV0Usb0JBQW9CO2tCQUF2RCxNQUFNO21CQUFDLDBCQUEwQjtZQXdGSCxhQUFhO2tCQUEzQyxLQUFLO21CQUFDLGtCQUFrQjtZQWtCTyxjQUFjO2tCQUE3QyxLQUFLO21CQUFDLG1CQUFtQjtZQWtCRCxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFnQk8sWUFBWTtrQkFBckMsS0FBSzttQkFBQyxpQkFBaUI7WUFVQyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0T3B0aW9ucyxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOZ0NvbnRyb2wsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgaXNUeXBlb2YgfSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IHJlcXVpcmVkRmFpbGVkIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBQb0xvb2t1cEFkdmFuY2VkRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1hZHZhbmNlZC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tbG9va3VwLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0xvb2t1cEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLWxvb2t1cC1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xvb2t1cE1vZGFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tbG9va3VwLW1vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNwYWNpbmcgfSBmcm9tICcuLi8uLi9wby10YWJsZS9lbnVtcy9wby10YWJsZS1zcGFjaW5nLmVudW0nO1xuXG5leHBvcnQgY29uc3QgcG9Mb29rdXBMaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9Mb29rdXBMaXRlcmFscz57XG4gICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICBjbGVhbjogJ0NsZWFuJ1xuICB9LFxuICBlczogPFBvTG9va3VwTGl0ZXJhbHM+e1xuICAgIHNlYXJjaDogJ0J1c2NhcicsXG4gICAgY2xlYW46ICdMaW1waWFyJ1xuICB9LFxuICBwdDogPFBvTG9va3VwTGl0ZXJhbHM+e1xuICAgIHNlYXJjaDogJ1Blc3F1aXNhcicsXG4gICAgY2xlYW46ICdBcGFnYXInXG4gIH0sXG4gIHJ1OiA8UG9Mb29rdXBMaXRlcmFscz57XG4gICAgc2VhcmNoOiAn0J/QvtC40YHQuicsXG4gICAgY2xlYW46ICfRh9C40YHRgtGL0LknXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQ29tcG9uZW50ZSB1dGlsaXphZG8gcGFyYSBhYnJpciB1bWEgamFuZWxhIGRlIGJ1c2NhIGNvbSB1bWEgdGFiZWxhIHF1ZSBsaXN0YSBkYWRvcyBkZSB1bSBzZXJ2acOnby4gTmVzdGEgamFuZWxhIMOpIHBvc3PDrXZlbCBidXNjYXIgZVxuICogc2VsZWNpb25hciB1bSBvdSBtYWlzIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIGVudmlhZG9zIHBhcmEgbyBjYW1wby4gTyBgcG8tbG9va3VwYCBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGRpZ2l0ZSB1bSB2YWxvciBlIHByZXNzaW9uZSBhIHRlY2xhICpUQUIqIHBhcmFcbiAqIGJ1c2NhciB1bSByZWdpc3Ryby5cbiAqXG4gKiA+IENhc28gbyBjYW1wbyBzZWphIGluaWNpYWRvIG91IHByZWVuY2hpZG8gY29tIHVtIHZhbG9yIGluZXhpc3RlbnRlIG5hIGJ1c2NhLCBvIG1lc21vIHNlcsOhIGxpbXBhZG8uXG4gKiBObyBzZWd1bmRvIGNhc28gb2NvcnJlcsOhIGFww7NzIGVzdGUgcGVyZGVyIG8gZm9jbzsgYW1ib3Mgb3MgY2Fzb3MgbyBjYW1wbyBmaWNhcsOhIGludsOhbGlkbyBxdWFuZG8gcmVxdWVyaWRvLlxuICpcbiAqID4gRW5xdWFudG8gbyBjb21wb25lbnRlIHJlYWxpemEgYSByZXF1aXNpw6fDo28gYW8gc2Vydmlkb3IsIG8gY29tcG9uZW50ZSBmaWNhcsOhIGRlc2FiaWxpdGFkbyBlIGNvbSBvIHN0YXR1cyBpbnRlcm5vIGRvXG4gKiBbbW9kZWxvXShodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvZm9ybS12YWxpZGF0aW9uI2NyZWF0aW5nLWFzeW5jaHJvbm91cy12YWxpZGF0b3JzKSBjb21vIGBwZW5kaW5nYC5cbiAqXG4gKiBFc3RlIGNvbXBvbmVudGUgbsOjbyDDqSByZWNvbWVuZGFkbyBxdWFuZG8gYSBidXNjYSBkb3MgZGFkb3MgcG9zc3VpciBwb3VjYXMgaW5mb3JtYcOnw7VlcywgcGFyYSBpc3NvIHV0aWxpemUgb3V0cm9zIGNvbXBvbmVudGVzIGNvbW8gb1xuICogYHBvLXNlbGVjdGAgb3UgbyBgcG8tY29tYm9gLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb0xvb2t1cEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95LCBPbkluaXQsIFZhbGlkYXRvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXG57XG4gIHByaXZhdGUgX2xpdGVyYWxzPzogUG9Mb29rdXBMaXRlcmFscztcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nO1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYXV0by1mb2N1cycsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogTGFiZWwgZG8gY2FtcG8uXG4gICAqXG4gICAqID4gUXVhbmRvIHV0aWxpemFyIGVzdGEgcHJvcHJpZWRhZGUgbyBzZXUgdmFsb3Igc2Vyw6EgdXRpbGl6YWRvIGNvbW8gdMOtdHVsbyBkYSBtb2RhbCBkbyBjb21wb25lbnRlIGNhc28gbsOjbyB0ZW5oYVxuICAgKiBzaWRvIGRlZmluaWRvIHVtIGBtb2RhbFRpdGxlYCBuYSBwcm9wcmllZGFkZSBgcC1saXRlcmFsc2AuXG4gICAqL1xuICBASW5wdXQoJ3AtbGFiZWwnKSBsYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1sb29rdXBgLlxuICAgKlxuICAgKiBFeGlzdGVtIGR1YXMgbWFuZWlyYXMgZGUgY3VzdG9taXphciBvIGNvbXBvbmVudGUsIHBhc3NhbmRvIHVtIG9iamV0byBjb20gdG9kYXMgYXMgbGl0ZXJhaXMgZGlzcG9uw612ZWlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb0xvb2t1cExpdGVyYWxzID0ge1xuICAgKiAgICBtb2RhbFByaW1hcnlBY3Rpb25MYWJlbDogJ1NlbGVjdCcsXG4gICAqICAgIG1vZGFsU2Vjb25kYXJ5QWN0aW9uTGFiZWw6ICdDYW5jZWwnLFxuICAgKiAgICBtb2RhbFBsYWNlaG9sZGVyOiAnU2VhcmNoIFZhbHVlJyxcbiAgICogICAgbW9kYWxUYWJsZU5vQ29sdW1uczogJ05vIGNvbHVtbnMnLFxuICAgKiAgICBtb2RhbFRhYmxlTm9EYXRhOiAnTm8gZGF0YScsXG4gICAqICAgIG1vZGFsVGFibGVMb2FkaW5nRGF0YTogJ0xvYWRpbmcgZGF0YScsXG4gICAqICAgIG1vZGFsVGFibGVMb2FkTW9yZURhdGE6ICdMb2FkIG1vcmUnLFxuICAgKiAgICBtb2RhbFRpdGxlOiAnU2VsZWN0IGEgdXNlcicsXG4gICAqICAgIG1vZGFsQWR2YW5jZWRTZWFyY2g6ICdBZHZhbmNlZCBzZWFyY2gnLFxuICAgKiAgICBtb2RhbEFkdmFuY2VkU2VhcmNoVGl0bGU6ICdBZHZhbmNlZCBzZWFyY2gnLFxuICAgKiAgICBtb2RhbEFkdmFuY2VkU2VhcmNoUHJpbWFyeUFjdGlvbkxhYmVsOiAnRmlsdGVyJyxcbiAgICogICAgbW9kYWxBZHZhbmNlZFNlYXJjaFNlY29uZGFyeUFjdGlvbkxhYmVsOiAnUmV0dXJuJyxcbiAgICogICAgbW9kYWxEaXNjbGFpbWVyR3JvdXBUaXRsZTogJ1ByZXNlbnRpbmcgcmVzdWx0cyBmaWx0ZXJlZCBieTonXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogT3UgcGFzc2FuZG8gYXBlbmFzIGFzIGxpdGVyYWlzIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9Mb29rdXBMaXRlcmFscyA9IHtcbiAgICogICAgbW9kYWxQcmltYXJ5QWN0aW9uTGFiZWw6ICdTZWxlY3QnXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1sb29rdXBcbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLWxvb2t1cD5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyBvYmpldG8gcGFkcsOjbyBkZSBsaXRlcmFpcyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBkb1xuICAgKiBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSBkbyBicm93c2VyLlxuICAgKi9cbiAgQElucHV0KCdwLWxpdGVyYWxzJykgc2V0IGxpdGVyYWxzKHZhbHVlOiBQb0xvb2t1cExpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb0xvb2t1cExpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgICAuLi5wb0xvb2t1cExpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXSxcbiAgICAgICAgLi4udmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0gcG9Mb29rdXBMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb0xvb2t1cExpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKiBUZXh0byBkZSBhcG9pbyBkbyBjYW1wby4gKi9cbiAgQElucHV0KCdwLWhlbHAnKSBoZWxwPzogc3RyaW5nO1xuXG4gIC8qKiBNZW5zYWdlbSBxdWUgYXBhcmVjZXLDoSBlbnF1YW50byBvIGNhbXBvIG7Do28gZXN0aXZlciBwcmVlbmNoaWRvLiAqL1xuICBASW5wdXQoJ3AtcGxhY2Vob2xkZXInKSBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWUgfHwgJyc7XG4gIH1cblxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG5cbiAgLyoqIE5vbWUgZSBJZCBkbyBjb21wb25lbnRlLiAqL1xuICBASW5wdXQoJ25hbWUnKSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgYSBjb2x1bmEgcXVlIHNlcsOhIHV0aWxpemFkYSBjb21vIHZhbG9yIGRvIGNhbXBvLlxuICAgKlxuICAgKiA+IEF0ZW7Dp8OjbzogQ2FzbyBuw6NvIHNlamEgcGFzc2FkYSBvdSB0ZW5oYSBvIGNvbnRlw7pkbyBpbmNvcnJldG8sIG7Do28gaXLDoSBhdHVhbGl6YXIgbyBtb2RlbCBkbyBmb3JtdWzDoXJpby5cbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC12YWx1ZScpIGZpZWxkVmFsdWU6IHN0cmluZztcblxuICAvKiogSW5kaWNhIGEgY29sdW5hIHF1ZSBzZXLDoSB1dGlsaXphZGEgY29tbyBkZXNjcmnDp8OjbyBkbyBjYW1wbyBlIGNvbW8gZmlsdHJvIGRlbnRybyBkYSBqYW5lbGEuICovXG4gIEBJbnB1dCgncC1maWVsZC1sYWJlbCcpIHNldCBmaWVsZExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWVsZExhYmVsID0gdmFsdWU7XG4gICAgdGhpcy5rZXlzRGVzY3JpcHRpb24gPSBbdGhpcy5maWVsZExhYmVsXTtcbiAgfVxuXG4gIGdldCBmaWVsZExhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZExhYmVsO1xuICB9XG5cbiAgLyoqIFZhbG9yIHF1ZSBzZXLDoSByZXBhc3NhZG8gY29tbyBwYXLDom1ldHJvIHBhcmEgYSBVUkwgb3UgYW9zIG3DqXRvZG9zIGRvIHNlcnZpw6dvIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9Mb29rdXBGaWx0ZXJgLiAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLXBhcmFtcycpIGZpbHRlclBhcmFtcz86IGFueTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGb3JtYXRvIGRlIGV4aWJpw6fDo28gZG8gY2FtcG8uXG4gICAqXG4gICAqIFJlY2ViZSB1bWEgZnVuw6fDo28gcXVlIGRldmUgcmV0b3JuYXIgdW1hICpzdHJpbmcqIGNvbSBvL29zIHZhbG9yZXMgZG8gb2JqZXRvIGZvcm1hdGFkb3MgcGFyYSBleGliacOnw6NvLCBwb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIGZpZWxkRm9ybWF0KG9iaikge1xuICAgKiAgIHJldHVybiBgJHtvYmouaWR9IC0gJHtvYmoubmFtZX1gO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKiA+IEVzdGEgcHJvcHJpZWRhZGUgc29icmVww7VlIG8gdmFsb3IgZGEgcHJvcHJpZWRhZGUgYHAtZmllbGQtbGFiZWxgIG5hIGRlc2NyacOnw6NvIGRvIGNhbXBvLlxuICAgKlxuICAgKiBQb2RlLXNlIGluZm9ybWFyIHVtYSBsaXN0YSBkZSBwcm9wcmllZGFkZXMgcXVlIGRlc2VqYSBleGliaXIgY29tbyBkZXNjcmnDp8OjbyBkbyBjYW1wbywgUG9yIGV4ZW1wbG86XG4gICAqIGBgYFxuICAgKiA8cG8tbG9va3VwXG4gICAqICAuLi5cbiAgICogIFtwLWZpZWxkLWZvcm1hdF09XCJbJ2lkJywnbmlja25hbWUnXVwiXG4gICAqICAuLi5cbiAgICogPlxuICAgKlxuICAgKiBPYmpldG8gcmV0b3JuYWRvOlxuICAgKiAgIHtcbiAgICogICAgICBpZDoxMjMsXG4gICAqICAgICAgbmFtZTogJ0tha2Fyb3RvJyxcbiAgICogICAgICBuaWNrbmFtZTogJ0dva3UnLFxuICAgKiAgIH1cbiAgICogQXByZXNlbnRhw6fDo28gbm8gY2FtcG86IDEyMyAtIEdva3VcbiAgICogYGBgXG4gICAqXG4gICAqID4gU2Vyw6EgdXRpbGl6YWRvIGAgLSBgIGNvbW8gc2VwYXJhZG9yLlxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWZvcm1hdCcpIGZpZWxkRm9ybWF0PzogKCh2YWx1ZSkgPT4gc3RyaW5nKSB8IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIExpc3RhIGRhcyBjb2x1bmFzIGRhIHRhYmVsYS5cbiAgICogRXNzYSBwcm9wcmllZGFkZSBkZXZlIHJlY2ViZXIgdW0gYXJyYXkgZGUgb2JqZXRvcyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgUG9Mb29rdXBDb2x1bW4uXG4gICAqL1xuICBASW5wdXQoJ3AtY29sdW1ucycpIGNvbHVtbnM/OiBBcnJheTxQb0xvb2t1cENvbHVtbj47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogLSBPIGNhbXBvIGNvbnRlciBgcC1yZXF1aXJlZGA7XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKipcbiAgICpcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkZSBvYmpldG9zIGRvcyBjYW1wb3MgcXVlIHNlcsOjbyBjcmlhZG9zIG5hIGJ1c2NhIGF2YW7Dp2FkYS5cbiAgICpcbiAgICogPiBDYXNvIG7Do28gc2VqYSBwYXNzYWRvIHVtIG9iamV0byBvdSBlbnTDo28gZWxlIGVzdGVqYSBlbSBicmFuY28gbyBsaW5rIGRlIGJ1c2NhIGF2YW7Dp2FkYSBmaWNhcsOhIGVzY29uZGlkby5cbiAgICpcbiAgICogRXhlbXBsbyBkZSBVUkwgY29tIGJ1c2NhIGF2YW7Dp2FkYTpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmbmFtZT1Ub255JTIwU3Rhcmsmbmlja25hbWU9SG9tZW0lMjBkZSUyMEZlcnJvXG4gICAqIGBgYFxuICAgKlxuICAgKiBDYXNvIGFsZ3VtIHBhcsOibWV0cm8gc2VqYSB1bWEgbGlzdGEsIGEgY29uY2F0ZW5hw6fDo28gw6kgZmVpdGEgdXRpbGl6YW5kbyB2w61yZ3VsYS5cbiAgICogRXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmbmFtZT1Ub255JTIwU3RhcmssUGV0ZXIlMjBQYXJrZXIsR29oYW5cbiAgICogYGBgXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtYWR2YW5jZWQtZmlsdGVycycpIGFkdmFuY2VkRmlsdGVyczogQXJyYXk8UG9Mb29rdXBBZHZhbmNlZEZpbHRlcj47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLCByZXNwb25zw6F2ZWwgcGVsYSBkZWZpbmnDp8OjbyBkZSBxdWFpcyBjb2x1bmFzIHNlcsOjbyBleGliaWRhcywgc2VqYSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1oaWRlLWNvbHVtbnMtbWFuYWdlcicsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KVxuICBoaWRlQ29sdW1uc01hbmFnZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBdGl2YSBhIGZ1bmNpb25hbGlkYWRlIGRlIHNjcm9sbCBpbmZpbml0byBwYXJhIGEgdGFiZWxhIGV4aWJpZGEgbm8gcmV0b3JubyBkYSBjb25zdWx0YS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWluZmluaXRlLXNjcm9sbCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBpbmZpbml0ZVNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBFeGliZSB1bSDDrWNvbmUgcXVlIHBlcm1pdGUgbGltcGFyIG8gY2FtcG8uICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1jbGVhbicsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBjbGVhbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgYSBzZWxlw6fDo28gZGUgbcO6bHRpcGxvcyBpdGVucy5cbiAgICpcbiAgICogPiBRdWFuZG8gaGFiaWxpdGFkbyBvIHZhbG9yIGRvIGNhbXBvIHBhc3NhcsOhIGEgc2VyIHVtYSBsaXN0YSBkZSB2YWxvcmVzLCBwb3IgZXhlbXBsbzogYFsgMTIzNDUsIDY3ODkwIF1gXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1tdWx0aXBsZScsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgYSBhbHR1cmEgZG8gY29tcG9uZW50ZSBzZXLDoSBhdXRvIGFqdXN0w6F2ZWwsIHBvc3N1aW5kbyB1bWEgYWx0dXJhIG1pbmltYSBwb3LDqW0gYSBhbHR1cmEgbcOheGltYSBzZXLDoSBkZSBhY29yZG9cbiAgICogY29tIG8gbsO6bWVybyBkZSBpdGVucyBzZWxlY2lvbmFkb3MgZSBhIGV4dGVuc8OjbyBkb3MgbWVzbW9zLCBtYW50ZW5kby1vcyBzZW1wcmUgdmlzw612ZWlzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYXV0by1oZWlnaHQnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXV0b0hlaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV4aWJlIGEgbWVuc2FnZW0gc2V0YWRhIHNlIG8gY2FtcG8gZXN0aXZlciB2YXppbyBlIGZvciByZXF1ZXJpZG8uXG4gICAqXG4gICAqID4gTmVjZXNzw6FyaW8gcXVlIGEgcHJvcHJpZWRhZGUgYHAtcmVxdWlyZWRgIGVzdGVqYSBoYWJpbGl0YWRhLlxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWVycm9yLW1lc3NhZ2UnKSBmaWVsZEVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExpbWl0YSBhIGV4aWJpw6fDo28gZGEgbWVuc2FnZW0gZGUgZXJybyBhIGR1YXMgbGluaGFzIGUgZXhpYmUgdW0gdG9vbHRpcCBjb20gbyB0ZXh0byBjb21wbGV0by5cbiAgICpcbiAgICogPiBDYXNvIGVzc2EgcHJvcHJpZWRhZGUgc2VqYSBkZWZpbmlkYSBjb21vIGB0cnVlYCwgYSBtZW5zYWdlbSBkZSBlcnJvIHNlcsOhIGxpbWl0YWRhIGEgZHVhcyBsaW5oYXNcbiAgICogZSB1bSB0b29sdGlwIHNlcsOhIGV4aWJpZG8gYW8gcGFzc2FyIG8gbW91c2Ugc29icmUgYSBtZW5zYWdlbSBwYXJhIG1vc3RyYXIgbyBjb250ZcO6ZG8gY29tcGxldG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1lcnJvci1saW1pdCcpIGVycm9yTGltaXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoeyBhbGlhczogJ3AtZXJyb3ItYXBwZW5kLWluLWJvZHknLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgZXJyb3JBcHBlbmRCb3g/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUmVzcG9uc8OhdmVsIHBvciBhcGxpY2FyIGVzcGHDp2FtZW50byBuYXMgY29sdW5hcyBkYSB0YWJlbGEgY29udGlkYSBubyBsb29rdXAuXG4gICAqXG4gICAqIERldmUgcmVjZWJlciB1bSBkb3MgdmFsb3JlcyBkbyBlbnVtIGBQb1RhYmxlQ29sdW1uU3BhY2luZ2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBtZWRpdW1gXG4gICAqL1xuICBASW5wdXQoJ3Atc3BhY2luZycpIHNwYWNpbmc6IFBvVGFibGVDb2x1bW5TcGFjaW5nID0gUG9UYWJsZUNvbHVtblNwYWNpbmcuTWVkaXVtO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIG91IGRlc2FiaWxpdGEgYSBxdWVicmEgYXV0b23DoXRpY2EgZGUgdGV4dG8uIFF1YW5kbyBhdGl2YWRhLCBvIHRleHRvIHF1ZSBleGNlZGVcbiAgICogbyBlc3Bhw6dvIGRpc3BvbsOtdmVsIMOpIHRyYW5zZmVyaWRvIHBhcmEgYSBwcsOzeGltYSBsaW5oYSBlbSBwb250b3MgYXByb3ByaWFkb3MgcGFyYSB1bWFcbiAgICogbGVpdHVyYSBjbGFyYS5cbiAgICpcbiAgICogRXN0YSBwcm9wcmllZGFkZSBhcGxpY2Etc2UgYW8gdGV4dG8gY29udGlkbyBuYXMgY8OpbHVsYXMgZGEgdGFiZWxhLlxuICAgKlxuICAgKiA+IEluY29tcGF0w612ZWwgY29tIGB2aXJ0dWFsLXNjcm9sbGAsIHF1ZSByZXF1ZXIgYWx0dXJhIGZpeGEgbmFzIGxpbmhhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLXRleHQtd3JhcCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSB0ZXh0V3JhcD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBvIGB2aXJ0dWFsLXNjcm9sbGAgbmEgdGFiZWxhIHBhcmEgbWVsaG9yYXIgYSBwZXJmb3JtYW5jZSBjb20gZ3JhbmRlcyB2b2x1bWVzIGRlIGRhZG9zLlxuICAgKiBBIGFsdHVyYSBkYSB0YWJlbGEgasOhIMOpIHByw6ktZGVmaW5pZGEsIHBvcnRhbnRvIG8gYHZpcnR1YWwtc2Nyb2xsYCBzZXLDoSBhdGl2YWRvIGF1dG9tYXRpY2FtZW50ZS5cbiAgICpcbiAgICogPiBJbmNvbXBhdMOtdmVsIGNvbSBgcC10ZXh0LXdyYXBgIGUgYG1hc3Rlci1kZXRhaWxgLCBwb2lzIG8gYHZpcnR1YWwtc2Nyb2xsYCBleGlnZSBhbHR1cmEgZml4YSBuYXMgbGluaGFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC12aXJ0dWFsLXNjcm9sbCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSB2aXJ0dWFsU2Nyb2xsPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEV2ZW50byBzZXLDoSBkaXNwYXJhZG8gcXVhbmRvIG9jb3JyZXIgYWxndW0gZXJybyBuYSByZXF1aXNpw6fDo28gZGUgYnVzY2EgZG8gaXRlbS5cbiAgICogU2Vyw6EgcGFzc2FkbyBwb3IgcGFyw6JtZXRybyBvIG9iamV0byBkZSBlcnJvIHJldG9ybmFkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtZXJyb3InKSBvbkVycm9yOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBzZXLDoSBkaXNwYXJhZG8gcXVhbmRvIG9jb3JyZXIgYWxndW1hIHNlbGXDp8Ojby5cbiAgICogU2Vyw6EgcGFzc2FkbyBwb3IgcGFyw6JtZXRybyBvIG9iamV0byBjb20gbyB2YWxvciBzZWxlY2lvbmFkby5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc2VsZWN0ZWQnKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiAgRXZlbnRvIHF1ZSBzZXLDoSBkaXNwYXJhZG8gYW8gYWx0ZXJhciBvIG1vZGVsLlxuICAgKiAgUG9yIHBhcsOibWV0cm8gc2Vyw6EgcGFzc2FkbyBvIG5vdm8gdmFsb3IuXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZScpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBvcG92ZXIgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyB2aXPDrXZlaXMgYXR1YWxpemFkYXMuXG4gICAqIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gYW8gY2xpY2FyIG5vIGJvdMOjbyBkZSByZXN0YXVyYXIgcGFkcsOjbyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyBjb25maWd1cmFkYXMgaW5pY2lhbG1lbnRlLlxuICAgKiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gICAqL1xuICBAT3V0cHV0KCdwLXJlc3RvcmUtY29sdW1uLW1hbmFnZXInKSBjb2x1bW5SZXN0b3JlTWFuYWdlciA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U3RyaW5nPj4oKTtcblxuICBzZXJ2aWNlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICBwcm90ZWN0ZWQgZ2V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBrZXlzRGVzY3JpcHRpb246IEFycmF5PGFueT47XG4gIHByb3RlY3RlZCBvbGRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCB2YWx1ZVRvTW9kZWw7XG4gIHByb3RlY3RlZCBvbGRWYWx1ZVRvTW9kZWwgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogYW55ID0gbnVsbDtcbiAgcHJvdGVjdGVkIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9maWVsZExhYmVsOiBzdHJpbmc7XG4gIHByaXZhdGUgX2ZpbHRlclNlcnZpY2U6IFBvTG9va3VwRmlsdGVyIHwgc3RyaW5nO1xuICBwcml2YXRlIF9ub0F1dG9jb21wbGV0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9yZXF1aXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYXV0b0hlaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgYXV0b0hlaWdodEluaXRpYWxWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBvbkNoYW5nZVByb3BhZ2F0ZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JDaGFuZ2U6IGFueTtcblxuICBwcml2YXRlIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgcHJpdmF0ZSBpbmplY3RPcHRpb25zOiBJbmplY3RPcHRpb25zID0ge1xuICAgIHNlbGY6IHRydWVcbiAgfTtcblxuICAvKipcbiAgICogU2VydmnDp28gcmVzcG9uc8OhdmVsIHBvciBidXNjYXIgb3MgZGFkb3MgZGEgdGFiZWxhIG5hIGphbmVsYS4gUG9kZSBzZXIgaW5mb3JtYWRvIHVtIHNlcnZpw6dvIHF1ZSBpbXBsZW1lbnRlIGEgaW50ZXJmYWNlXG4gICAqIGBQb0xvb2t1cEZpbHRlcmAgb3UgdW1hIFVSTC5cbiAgICpcbiAgICogUXVhbmRvIHV0aWxpemFkYSB1bWEgVVJMIGRlIHVtIHNlcnZpw6dvLCBzZXLDoSBjb25jYXRlbmFkYSBuZXN0YSBVUkwgbyB2YWxvciBxdWUgZGVzZWphLXNlIGZpbHRyYXIsIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0yMCZmaWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqXG4gICAqIENhc28gdXRpbGl6YXIgb3JkZW5hw6fDo28sIGEgY29sdW5hIG9yZGVuYWRhIHNlcsOhIGVudmlhZGEgYXRyYXbDqXMgZG8gcGFyw6JtZXRybyBgb3JkZXJgLCBwb3IgZXhlbXBsbzpcbiAgICogLSBDb2x1bmEgZGVjcmVzY2VudGU6XG4gICAqIGBgYFxuICAgKiAgdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0yMCZmaWx0ZXI9UGV0ZXImb3JkZXI9LW5hbWVcbiAgICogYGBgXG4gICAqXG4gICAqIC0gQ29sdW5hIGFzY2VuZGVudGU6XG4gICAqIGBgYFxuICAgKiAgdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0yMCZmaWx0ZXI9UGV0ZXImb3JkZXI9bmFtZVxuICAgKiBgYGBcbiAgICpcbiAgICogU2UgZm9yIGRlZmluaWRvIGEgcHJvcHJpZWRhZGUgYHAtZmlsdGVyLXBhcmFtc2AsIG8gbWVzbW8gdGFtYsOpbSBzZXLDoSBjb25jYXRlbmFkby4gUG9yIGV4ZW1wbG8sIHBhcmEgb1xuICAgKiBwYXLDom1ldHJvIGB7IGFnZTogMjMgfWAgYSBVUkwgZmljYXJpYTpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmYWdlPTIzJmZpbHRlcj1QZXRlclxuICAgKiBgYGBcbiAgICpcbiAgICogQW8gaW5pY2lhciBvIGNhbXBvIGNvbSB2YWxvciwgb3MgcmVnaXN0cm9zIHNlcsOjbyBidXNjYWRvcyBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICogYGBgXG4gICAqIG1vZGVsID0gMTIzNDtcbiAgICpcbiAgICogR0VUIHVybC8xMjM0XG4gICAqIGBgYFxuICAgKlxuICAgKiBDYXNvIGVzdGl2ZXIgY29tIG3Dumx0aXBsYSBzZWxlw6fDo28gaGFiaWxpdGFkYTpcbiAgICogYGBgXG4gICAqIG1vZGVsID0gWzEyMzQsIDU2NzhdXG4gICAqXG4gICAqIEdFVCB1cmw/JHtmaWVsZFZhbHVlfT0xMjM0LDU2NzhcbiAgICogYGBgXG4gICAqXG4gICAqID4gRXN0YSBVUkwgZGV2ZSByZXRvcm5hciBlIHJlY2ViZXIgb3MgZGFkb3Mgbm8gcGFkcsOjbyBkZSBbQVBJIGRvIFBPIFVJXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpIGUgdXRpbGl6YSBvcyB2YWxvcmVzXG4gICAqIGRlZmluaWRvcyBuYXMgcHJvcHJpZWRhZGVzIGBwLWZpZWxkLWxhYmVsYCBlIGBwLWZpZWxkLXZhbHVlYCBwYXJhIGEgY29uc3RydcOnw6NvIGRvIGBwby1sb29rdXBgLlxuICAgKlxuICAgKiBDYXNvIG8gdXN1w6FyaW8gZGlnaXRlIHVtIHZhbG9yIGUgcHJlc3Npb25lIGEgdGVjbGEgKlRBQiogcGFyYSByZWFsaXphciBhIGJ1c2NhIGRlIHVtIHJlZ2lzdHJvIGVzcGVjw61maWNvLCBvIHZhbG9yIHF1ZSBzZVxuICAgKiBkZXNlamEgZmlsdHJhciBzZXLDoSBjb2RpZmljYWRvIHV0aWxpemFuZG8gYSBmdW7Dp8OjbyBbZW5jb2RlVVJJQ29tcG9uZW50XShodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVuY29kZXVyaWNvbXBvbmVudC11cmljb21wb25lbnQpXG4gICAqIGUgY29uY2F0ZW5hZG8gbmEgVVJMIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogdXJsL3ZhbG9yJTIwcXVlJTIwc2UlMjBkZXNlamElMjBmaWx0cmFyXG4gICAqIGBgYFxuICAgKlxuICAgKiA+IFF1YW5kbyBpbmZvcm1hZG8gdW0gc2VydmnDp28gcXVlIGltcGxlbWVudGUgYSBpbnRlcmZhY2UgYFBvTG9va3VwRmlsdGVyYCBvIHRyYXRhbWVudG8gZGUgZW5jb2RpbmcgZG8gdmFsb3IgYSBzZXIgZmlsdHJhZG8gZmljYXLDoSBhIGNhcmdvIGRvIGRlc2Vudm9sdmVkb3IuXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLXNlcnZpY2UnKSBzZXQgZmlsdGVyU2VydmljZShmaWx0ZXJTZXJ2aWNlOiBQb0xvb2t1cEZpbHRlciB8IHN0cmluZykge1xuICAgIHRoaXMuX2ZpbHRlclNlcnZpY2UgPSBmaWx0ZXJTZXJ2aWNlO1xuICAgIHRoaXMuc2V0U2VydmljZSh0aGlzLmZpbHRlclNlcnZpY2UpO1xuICB9XG5cbiAgZ2V0IGZpbHRlclNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBwcm9wcmllZGFkZSBuYXRpdmEgYGF1dG9jb21wbGV0ZWAgZG8gY2FtcG8gY29tbyBgb2ZmYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW5vLWF1dG9jb21wbGV0ZScpIHNldCBub0F1dG9jb21wbGV0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX25vQXV0b2NvbXBsZXRlID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgbm9BdXRvY29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vQXV0b2NvbXBsZXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGNhbXBvIHNlcsOhIG9icmlnYXTDs3Jpby5cbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIMOpIGRlc2NvbnNpZGVyYWRhIHF1YW5kbyBvIGlucHV0IGVzdMOhIGRlc2FiaWxpdGFkbyBgKHAtZGlzYWJsZWQpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLnZhbHVlVG9Nb2RlbCk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9icmlnYXTDs3JpbyBzZXLDqSBleGliaWRhLlxuICAgKlxuICAgKiA+IE7Do28gc2Vyw6EgZXhpYmlkYSBhIGluZGljYcOnw6NvIHNlOlxuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICovXG4gIEBJbnB1dCgncC1zaG93LXJlcXVpcmVkJykgc2hvd1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6EgZGVzYWJpbGl0YWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZCcpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gPGFueT5kaXNhYmxlZCA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbihkaXNhYmxlZCk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VydmljZTogUG9Mb29rdXBGaWx0ZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoSW5qZWN0b3IpIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHB1YmxpYyBwb0xvb2t1cE1vZGFsU2VydmljZTogUG9Mb29rdXBNb2RhbFNlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmdldFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW4oKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbnRyb2woKTtcbiAgfVxuXG4gIGNsZWFuTW9kZWwoKSB7XG4gICAgdGhpcy5jbGVhblZpZXdWYWx1ZSgpO1xuICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHVuZGVmaW5lZCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuY29sdW1ucz8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmNvbHVtbnMgPSBjaGFuZ2VzLmNvbHVtbnMuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5wb0xvb2t1cE1vZGFsU2VydmljZT8uc2V0Q2hhbmdlQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm11bHRpcGxlICYmIGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpKSB7XG4gICAgICB0aGlzLnNlcnZpY2Uuc2V0Q29uZmlnKHRoaXMuZmlsdGVyU2VydmljZSwgdGhpcy5maWVsZFZhbHVlLCB0aGlzLm11bHRpcGxlKTtcbiAgICB9XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsLlxuICByZWdpc3Rlck9uQ2hhbmdlKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VQcm9wYWdhdGUgPSBmdW5jO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsLlxuICByZWdpc3Rlck9uVG91Y2hlZChmdW5jOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZ1bmM7XG4gIH1cblxuICAvLyBTZWxlY2lvbmEgbyB2YWxvciBkbyBtb2RlbC5cbiAgc2VsZWN0VmFsdWUodmFsdWVTZWxlY3RlZDogYW55KSB7XG4gICAgdGhpcy52YWx1ZVRvTW9kZWwgPSB2YWx1ZVNlbGVjdGVkO1xuICAgIHRoaXMubXVsdGlwbGVcbiAgICAgID8gdGhpcy5jYWxsT25DaGFuZ2UodGhpcy52YWx1ZVRvTW9kZWwpXG4gICAgICA6IHRoaXMudmFsdWVUb01vZGVsXG4gICAgICAgID8gdGhpcy5jYWxsT25DaGFuZ2UodGhpcy52YWx1ZVRvTW9kZWxbdGhpcy5maWVsZFZhbHVlXSlcbiAgICAgICAgOiB0aGlzLmNhbGxPbkNoYW5nZSh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh2YWx1ZVNlbGVjdGVkKTtcbiAgfVxuXG4gIGNhbGxPbkNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgLy8gUXVhbmRvIG8gaW5wdXQgbsOjbyBwb3NzdWkgdW0gZm9ybXVsw6FyaW8sIGVudMOjbyBlc3RhIGZ1bsOnw6NvIG7Do28gw6kgcmVnaXN0cmFkYS5cbiAgICBpZiAodGhpcy5vbkNoYW5nZVByb3BhZ2F0ZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZVByb3BhZ2F0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub2xkVmFsdWVUb01vZGVsICE9PSB0aGlzLnZhbHVlVG9Nb2RlbCkge1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQXJtYXplbmFyIG8gdmFsb3IgYW50aWdvIGRvIG1vZGVsXG4gICAgdGhpcy5vbGRWYWx1ZVRvTW9kZWwgPSB0aGlzLnZhbHVlVG9Nb2RlbDtcbiAgfVxuXG4gIHNlYXJjaEJ5SWQodmFsdWUpIHtcbiAgICBsZXQgY2hlY2tlZFZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAodHlwZW9mIGNoZWNrZWRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNoZWNrZWRWYWx1ZSA9IGNoZWNrZWRWYWx1ZS50cmltKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrZWRWYWx1ZSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IG9sZERpc2FibGUgPSB0aGlzLmRpc2FibGVkO1xuICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgLy8gOlRPRE86IFJldGlyYXIgbm8gZnV0dXJvIHBvaXMgZXNzZSBzZXRUaW1lb3V0IGZvaSBmZWl0b1xuICAgICAgICAvLyBwb2lzIHF1YW5kbyBvIGNhbXBvIMOpIGFjaW9uYWRvIHBlbG9zIG3DqXRvZG9zIHNldFZhbHVlIG91IHBhdGNoVmFsdWVcbiAgICAgICAgLy8gYSBtdWRhbsOnYSBuw6NvIMOpIGRldGVjdGFkYVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29udHJvbC5tYXJrQXNQZW5kaW5nKCkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZVxuICAgICAgICAuZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZSwgdGhpcy5maWx0ZXJQYXJhbXMpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSBvbGREaXNhYmxlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQ/Lmxlbmd0aCB8fCAoIUFycmF5LmlzQXJyYXkoZWxlbWVudCkgJiYgZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudCkgJiYgZWxlbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREaXNjbGFpbWVycyhlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbCh0aGlzLm11bHRpcGxlID8gZWxlbWVudCA6IFtlbGVtZW50XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmNsZWFuTW9kZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Nb2RlbCgpO1xuICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhbk1vZGVsKCk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAocmVxdWlyZWRGYWlsZWQodGhpcy5yZXF1aXJlZCwgdGhpcy5kaXNhYmxlZCwgYWJzdHJhY3RDb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCB8fCAoIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlKSkge1xuICAgICAgLy8gRXN0YSBjb25kacOnw6NvIMOpIGV4ZWN1dGFkYSBzb21lbnRlIHF1YW5kbyDDqSBwYXNzYWRvIG8gSUQgcGFyYSByZWFsaXphciBhIGJ1c2NhIHBlbG8gSUQuXG4gICAgICB0aGlzLnNlYXJjaEJ5SWQodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuVmlld1ZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0b3JuYSBvIFN1YnNjcmliZXIgZGEgcHJvcHJpZWRhZGUgZ2V0U3Vic2NyaXB0aW9uIHF1ZSBvY29ycmVcbiAgLy8gbm8gZXZlbnRvIGRlIGJsdXIgcXVlIGV4ZWN1dGEgbyBtw6l0b2RvIHNlYXJjaEV2ZW50KCkuXG4gIGdldFN1YnNjcmlwdGlvbkZ1bmN0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFuVmlld1ZhbHVlKCkge1xuICAgIHRoaXMuc2V0RGlzY2xhaW1lcnMoW10pO1xuICAgIHRoaXMuc2V0Vmlld1ZhbHVlKCcnLCB7fSk7XG4gICAgdGhpcy5vbGRWYWx1ZSA9ICcnO1xuICAgIHRoaXMudmFsdWVUb01vZGVsID0gbnVsbDtcbiAgfVxuXG4gIC8vIEZvcm1hdGEgYSBsYWJlbCBkbyBjYW1wby5cbiAgcHJvdGVjdGVkIGdldEZvcm1hdHRlZExhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMua2V5c0Rlc2NyaXB0aW9uLm1hcChjb2x1bW4gPT4gdmFsdWVbY29sdW1uXSkuam9pbignIC0gJykgOiAnJztcbiAgfVxuXG4gIC8vIENoYW1hIG8gbcOpdG9kbyB3cml0ZVZhbHVlIGUgcHJlZW5jaGUgbyBtb2RlbC5cbiAgcHJvdGVjdGVkIHNlbGVjdE1vZGVsKG9wdGlvbnM6IEFycmF5PGFueT4pIHtcbiAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gWy4uLm9wdGlvbnNdO1xuXG4gICAgICBjb25zdCBuZXdNb2RlbCA9IHRoaXMubXVsdGlwbGUgPyBvcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uW3RoaXMuZmllbGRWYWx1ZV0pIDogb3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc2VsZWN0VmFsdWUobmV3TW9kZWwpO1xuXG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IG9wdGlvbnNbMF1bdGhpcy5maWVsZExhYmVsXTtcbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodGhpcy5nZXRGb3JtYXR0ZWRMYWJlbChvcHRpb25zWzBdKSwgb3B0aW9uc1swXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuY2xlYW5WaWV3VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVNb2RlbChtb2RlbDogYW55KSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yQ2hhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZXJ2aWNlKHNlcnZpY2U6IFBvTG9va3VwRmlsdGVyIHwgc3RyaW5nKSB7XG4gICAgaWYgKGlzVHlwZW9mKHNlcnZpY2UsICdvYmplY3QnKSkge1xuICAgICAgdGhpcy5zZXJ2aWNlID0gPFBvTG9va3VwRmlsdGVyU2VydmljZT5zZXJ2aWNlO1xuICAgIH1cblxuICAgIGlmIChzZXJ2aWNlICYmIGlzVHlwZW9mKHNlcnZpY2UsICdzdHJpbmcnKSkge1xuICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5kZWZhdWx0U2VydmljZTtcbiAgICAgIHRoaXMuc2VydmljZS5zZXRDb25maWcoc2VydmljZSwgdGhpcy5maWVsZFZhbHVlLCB0aGlzLm11bHRpcGxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRyb2woKSB7XG4gICAgY29uc3QgbmdDb250cm9sOiBOZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwsIHRoaXMuaW5qZWN0T3B0aW9ucyk7XG5cbiAgICBpZiAobmdDb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpZWxkTGFiZWwpIHtcbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW3RoaXMuZmllbGRMYWJlbF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW107XG5cbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gdGhpcy5jb2x1bW5zLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQuZmllbGRMYWJlbCkubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5wcm9wZXJ0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXRyaWJ1aSB1bSBvdSBtYWlzIHZhbG9yZXMgYW8gY2FtcG8uXG4gIGFic3RyYWN0IHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55LCBvYmplY3Q6IGFueSk6IHZvaWQ7XG5cbiAgLy8gTcOpdG9kbyBjb20gYSBpbXBsZW1lbnRhw6fDo28gcGFyYSBhYnJpciBvIGxvb2t1cC5cbiAgYWJzdHJhY3Qgb3Blbkxvb2t1cCgpOiB2b2lkO1xuXG4gIGFic3RyYWN0IHNldERpc2NsYWltZXJzKGEpO1xuICBhYnN0cmFjdCB1cGRhdGVWaXNpYmxlSXRlbXMoKTtcbn1cbiJdfQ==
@@ -492,7 +492,7 @@ export class PoLookupComponent extends PoLookupBaseComponent {
492
492
  } if (rf & 2) {
493
493
  let _t;
494
494
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.inputEl = _t.first);
495
- } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 11, consts: [["disclaimersTemplate", ""], ["inp", ""], ["iconLookup", ""], [3, "p-disabled", "p-id", "p-label", "p-optional", "p-required", "p-show-required"], ["class", "po-field-container-content po-lookup", 3, "po-lookup-disabled", 4, "ngIf", "ngIfElse"], [3, "p-help", "p-disabled", "p-error-pattern"], [1, "po-field-container-content", "po-lookup"], [1, "po-search-container-wrapper"], ["type", "text", 1, "po-lookup-input", "po-lookup-input-trigger", 3, "blur", "ngClass", "id", "autocomplete", "disabled", "placeholder", "required"], [1, "po-field-icon-container-right", "po-lookup-buttons"], ["tabindex", "0", "role", "button", "class", "po-lookup-button po-lookup-button-clean", 3, "p-element-ref", "p-change-event", "click", "keydown.enter", 4, "ngIf"], ["tabindex", "0", "role", "button", 1, "po-lookup-button", "po-lookup-button-trigger", "po-field-icon", 3, "p-change-event", "click", "keydown.enter", "ariaLabel"], ["p-icon", "ICON_SEARCH"], ["tabindex", "0", "role", "button", 1, "po-lookup-button", "po-lookup-button-clean", 3, "p-change-event", "click", "keydown.enter", "p-element-ref"], [1, "po-lookup"], [1, "po-lookup-input", "po-input-icon-right", "po-lookup-input", "po-icon-input", 3, "tabindex", "ngClass"], ["class", "po-lookup-input-placeholder", 4, "ngIf"], ["class", "po-lookup-input-disclaimer", 3, "p-label", "p-value", "p-hide-close", "po-clickable", "p-close-action", 4, "ngFor", "ngForOf"], [1, "po-lookup-input-placeholder"], [1, "po-lookup-input-disclaimer", 3, "p-close-action", "p-label", "p-value", "p-hide-close"]], template: function PoLookupComponent_Template(rf, ctx) { if (rf & 1) {
495
+ } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 13, consts: [["disclaimersTemplate", ""], ["inp", ""], ["iconLookup", ""], [3, "p-disabled", "p-id", "p-label", "p-optional", "p-required", "p-show-required"], ["class", "po-field-container-content po-lookup", 3, "po-lookup-disabled", 4, "ngIf", "ngIfElse"], [3, "p-help", "p-disabled", "p-error-pattern", "p-error-limit", "p-append-in-body"], [1, "po-field-container-content", "po-lookup"], [1, "po-search-container-wrapper"], ["type", "text", 1, "po-lookup-input", "po-lookup-input-trigger", 3, "blur", "ngClass", "id", "autocomplete", "disabled", "placeholder", "required"], [1, "po-field-icon-container-right", "po-lookup-buttons"], ["tabindex", "0", "role", "button", "class", "po-lookup-button po-lookup-button-clean", 3, "p-element-ref", "p-change-event", "click", "keydown.enter", 4, "ngIf"], ["tabindex", "0", "role", "button", 1, "po-lookup-button", "po-lookup-button-trigger", "po-field-icon", 3, "p-change-event", "click", "keydown.enter", "ariaLabel"], ["p-icon", "ICON_SEARCH"], ["tabindex", "0", "role", "button", 1, "po-lookup-button", "po-lookup-button-clean", 3, "p-change-event", "click", "keydown.enter", "p-element-ref"], [1, "po-lookup"], [1, "po-lookup-input", "po-input-icon-right", "po-lookup-input", "po-icon-input", 3, "tabindex", "ngClass"], ["class", "po-lookup-input-placeholder", 4, "ngIf"], ["class", "po-lookup-input-disclaimer", 3, "p-label", "p-value", "p-hide-close", "po-clickable", "p-close-action", 4, "ngFor", "ngForOf"], [1, "po-lookup-input-placeholder"], [1, "po-lookup-input-disclaimer", 3, "p-close-action", "p-label", "p-value", "p-hide-close"]], template: function PoLookupComponent_Template(rf, ctx) { if (rf & 1) {
496
496
  i0.ɵɵelementStart(0, "po-field-container", 3);
497
497
  i0.ɵɵtemplate(1, PoLookupComponent_div_1_Template, 9, 14, "div", 4);
498
498
  i0.ɵɵelement(2, "po-field-container-bottom", 5);
@@ -504,15 +504,15 @@ export class PoLookupComponent extends PoLookupBaseComponent {
504
504
  i0.ɵɵadvance();
505
505
  i0.ɵɵproperty("ngIf", !ctx.disclaimers.length)("ngIfElse", disclaimersTemplate_r10);
506
506
  i0.ɵɵadvance();
507
- i0.ɵɵproperty("p-help", ctx.help)("p-disabled", ctx.disabled)("p-error-pattern", ctx.getErrorPattern());
507
+ i0.ɵɵproperty("p-help", ctx.help)("p-disabled", ctx.disabled)("p-error-pattern", ctx.getErrorPattern())("p-error-limit", ctx.errorLimit)("p-append-in-body", ctx.errorAppendBox);
508
508
  } }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i5.PoCleanComponent, i6.PoDisclaimerComponent, i7.PoFieldContainerBottomComponent, i8.PoFieldContainerComponent, i9.PoIconComponent], encapsulation: 2, changeDetection: 0 });
509
509
  }
510
510
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoLookupComponent, [{
511
511
  type: Component,
512
- args: [{ selector: 'po-lookup', changeDetection: ChangeDetectionStrategy.OnPush, providers: providers, template: "<po-field-container\n [p-disabled]=\"disabled\"\n [p-id]=\"id\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n>\n <div\n class=\"po-field-container-content po-lookup\"\n [class.po-lookup-disabled]=\"disabled\"\n *ngIf=\"!disclaimers.length; else disclaimersTemplate\"\n >\n <div class=\"po-search-container-wrapper\">\n <input\n #inp\n class=\"po-lookup-input po-lookup-input-trigger\"\n [ngClass]=\"clean && inp.value ? 'po-input-double-icon-right' : 'po-input-icon-right'\"\n [id]=\"id\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n (blur)=\"searchEvent()\"\n />\n\n <div class=\"po-field-icon-container-right po-lookup-buttons\">\n <po-clean\n *ngIf=\"clean && !disabled && !!inp.value\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"literals.clean\"\n class=\"po-icon-input po-lookup-button po-lookup-button-clean\"\n class=\"po-lookup-button po-lookup-button-clean\"\n [p-element-ref]=\"inp\"\n (p-change-event)=\"cleanModel()\"\n (click)=\"cleanModel(); $event.preventDefault()\"\n (keydown.enter)=\"cleanModel(); $event.preventDefault()\"\n >\n </po-clean>\n <div\n #iconLookup\n tabindex=\"0\"\n role=\"button\"\n class=\"po-lookup-button po-lookup-button-trigger po-field-icon\"\n [class.po-field-icon-disabled]=\"disabled\"\n [ariaLabel]=\"literals.search\"\n (p-change-event)=\"openLookup()\"\n (click)=\"openLookup(); $event.preventDefault()\"\n (keydown.enter)=\"openLookup(); $event.preventDefault()\"\n >\n <po-icon p-icon=\"ICON_SEARCH\" [class.po-field-icon]=\"!disabled\"></po-icon>\n </div>\n </div>\n </div>\n </div>\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorPattern()\"\n ></po-field-container-bottom>\n</po-field-container>\n\n<ng-template #disclaimersTemplate>\n <div class=\"po-lookup\" [class.po-lookup-disabled]=\"disabled\">\n <div\n #inp\n [tabindex]=\"disabled ? -1 : 0\"\n class=\"po-lookup-input po-input-icon-right po-lookup-input po-icon-input\"\n [ngClass]=\"clean && inp.value ? 'po-input-double-icon-right' : 'po-input-icon-right'\"\n [class.po-lookup-input-auto]=\"autoHeight\"\n [class.po-lookup-input-static]=\"!autoHeight\"\n [class.po-lookup-input-padding-button-clean]=\"clean\"\n [class.po-lookup-input-disabled]=\"disabled\"\n >\n <span *ngIf=\"placeholder && !disclaimers?.length\" class=\"po-lookup-input-placeholder\">\n {{ placeholder }}\n </span>\n\n <po-disclaimer\n *ngFor=\"let disclaimer of visibleDisclaimers\"\n class=\"po-lookup-input-disclaimer\"\n [p-label]=\"disclaimer.label\"\n [p-value]=\"disclaimer.value\"\n [p-hide-close]=\"disclaimer.value === '' || disabled\"\n [class.po-clickable]=\"disclaimer.value === '' && !disabled\"\n (p-close-action)=\"closeDisclaimer(disclaimer.value)\"\n >\n </po-disclaimer>\n </div>\n <div class=\"po-field-icon-container-right po-lookup-buttons\">\n <po-clean\n *ngIf=\"clean && !disabled && !!inp.value\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"literals.clean\"\n class=\"po-lookup-button po-lookup-button-clean\"\n [p-element-ref]=\"inp\"\n (p-change-event)=\"cleanModel()\"\n (click)=\"cleanModel(); $event.preventDefault()\"\n (keydown.enter)=\"cleanModel(); $event.preventDefault()\"\n >\n </po-clean>\n <div\n #iconLookup\n tabindex=\"0\"\n role=\"button\"\n class=\"po-lookup-button po-lookup-button-trigger po-field-icon\"\n [class.po-field-icon-disabled]=\"disabled\"\n [ariaLabel]=\"literals.search\"\n (p-change-event)=\"openLookup()\"\n (click)=\"openLookup(); $event.preventDefault()\"\n (keydown.enter)=\"openLookup(); $event.preventDefault()\"\n >\n <po-icon p-icon=\"ICON_SEARCH\" [class.po-field-icon]=\"!disabled\"></po-icon>\n </div>\n </div>\n </div>\n</ng-template>\n" }]
512
+ args: [{ selector: 'po-lookup', changeDetection: ChangeDetectionStrategy.OnPush, providers: providers, template: "<po-field-container\n [p-disabled]=\"disabled\"\n [p-id]=\"id\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n>\n <div\n class=\"po-field-container-content po-lookup\"\n [class.po-lookup-disabled]=\"disabled\"\n *ngIf=\"!disclaimers.length; else disclaimersTemplate\"\n >\n <div class=\"po-search-container-wrapper\">\n <input\n #inp\n class=\"po-lookup-input po-lookup-input-trigger\"\n [ngClass]=\"clean && inp.value ? 'po-input-double-icon-right' : 'po-input-icon-right'\"\n [id]=\"id\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n (blur)=\"searchEvent()\"\n />\n\n <div class=\"po-field-icon-container-right po-lookup-buttons\">\n <po-clean\n *ngIf=\"clean && !disabled && !!inp.value\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"literals.clean\"\n class=\"po-icon-input po-lookup-button po-lookup-button-clean\"\n class=\"po-lookup-button po-lookup-button-clean\"\n [p-element-ref]=\"inp\"\n (p-change-event)=\"cleanModel()\"\n (click)=\"cleanModel(); $event.preventDefault()\"\n (keydown.enter)=\"cleanModel(); $event.preventDefault()\"\n >\n </po-clean>\n <div\n #iconLookup\n tabindex=\"0\"\n role=\"button\"\n class=\"po-lookup-button po-lookup-button-trigger po-field-icon\"\n [class.po-field-icon-disabled]=\"disabled\"\n [ariaLabel]=\"literals.search\"\n (p-change-event)=\"openLookup()\"\n (click)=\"openLookup(); $event.preventDefault()\"\n (keydown.enter)=\"openLookup(); $event.preventDefault()\"\n >\n <po-icon p-icon=\"ICON_SEARCH\" [class.po-field-icon]=\"!disabled\"></po-icon>\n </div>\n </div>\n </div>\n </div>\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorPattern()\"\n [p-error-limit]=\"errorLimit\"\n [p-append-in-body]=\"errorAppendBox\"\n ></po-field-container-bottom>\n</po-field-container>\n\n<ng-template #disclaimersTemplate>\n <div class=\"po-lookup\" [class.po-lookup-disabled]=\"disabled\">\n <div\n #inp\n [tabindex]=\"disabled ? -1 : 0\"\n class=\"po-lookup-input po-input-icon-right po-lookup-input po-icon-input\"\n [ngClass]=\"clean && inp.value ? 'po-input-double-icon-right' : 'po-input-icon-right'\"\n [class.po-lookup-input-auto]=\"autoHeight\"\n [class.po-lookup-input-static]=\"!autoHeight\"\n [class.po-lookup-input-padding-button-clean]=\"clean\"\n [class.po-lookup-input-disabled]=\"disabled\"\n >\n <span *ngIf=\"placeholder && !disclaimers?.length\" class=\"po-lookup-input-placeholder\">\n {{ placeholder }}\n </span>\n\n <po-disclaimer\n *ngFor=\"let disclaimer of visibleDisclaimers\"\n class=\"po-lookup-input-disclaimer\"\n [p-label]=\"disclaimer.label\"\n [p-value]=\"disclaimer.value\"\n [p-hide-close]=\"disclaimer.value === '' || disabled\"\n [class.po-clickable]=\"disclaimer.value === '' && !disabled\"\n (p-close-action)=\"closeDisclaimer(disclaimer.value)\"\n >\n </po-disclaimer>\n </div>\n <div class=\"po-field-icon-container-right po-lookup-buttons\">\n <po-clean\n *ngIf=\"clean && !disabled && !!inp.value\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"literals.clean\"\n class=\"po-lookup-button po-lookup-button-clean\"\n [p-element-ref]=\"inp\"\n (p-change-event)=\"cleanModel()\"\n (click)=\"cleanModel(); $event.preventDefault()\"\n (keydown.enter)=\"cleanModel(); $event.preventDefault()\"\n >\n </po-clean>\n <div\n #iconLookup\n tabindex=\"0\"\n role=\"button\"\n class=\"po-lookup-button po-lookup-button-trigger po-field-icon\"\n [class.po-field-icon-disabled]=\"disabled\"\n [ariaLabel]=\"literals.search\"\n (p-change-event)=\"openLookup()\"\n (click)=\"openLookup(); $event.preventDefault()\"\n (keydown.enter)=\"openLookup(); $event.preventDefault()\"\n >\n <po-icon p-icon=\"ICON_SEARCH\" [class.po-field-icon]=\"!disabled\"></po-icon>\n </div>\n </div>\n </div>\n</ng-template>\n" }]
513
513
  }], () => [{ type: i1.PoLanguageService }, { type: i0.Renderer2 }, { type: i2.PoLookupFilterService }, { type: i3.PoLookupModalService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Injector }], { inputEl: [{
514
514
  type: ViewChild,
515
515
  args: ['inp', { read: ElementRef, static: false }]
516
516
  }] }); })();
517
517
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoLookupComponent, { className: "PoLookupComponent", filePath: "lib/components/po-field/po-lookup/po-lookup.component.ts", lineNumber: 143 }); })();
518
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9va3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1sb29rdXAvcG8tbG9va3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1sb29rdXAvcG8tbG9va3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixVQUFVLEVBS1YsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7OztJQ01sRSxvQ0FXQztJQURDLEFBREEsQUFEQSw2TUFBa0IsbUJBQVksS0FBQyw4SkFDdEIsbUJBQVksd0JBQUUsdUJBQXVCLEtBQUMsOEtBQzlCLG1CQUFZLHdCQUFFLHVCQUF1QixLQUFDO0lBRXpELGlCQUFXOzs7OztJQUxULHNDQUFxQjs7Ozs7SUFyQnpCLEFBREYsQUFMRiw4QkFJQyxhQUMwQyxrQkFZckM7SUFEQSwwS0FBUSxvQkFBYSxLQUFDO0lBVnhCLGlCQVdFO0lBRUYsOEJBQTZEO0lBQzNELG1GQVdDO0lBRUQsa0NBVUM7SUFEQyxBQURBLEFBREEsNExBQWtCLG1CQUFZ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bEUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzJFQXZVVSxpQkFBaUI7NkRBQWpCLGlCQUFpQjttQ0FDRixVQUFVOzs7OzhDQUhwQyxTQUFTO1lDNUlYLDZDQU9DO1lBQ0MsbUVBSUM7WUE2Q0QsK0NBSTZCO1lBQy9CLGlCQUFxQjtZQUVyQixxSEFBa0M7OztZQTFEaEMsQUFEQSxBQURBLEFBREEsQUFEQSxBQURBLHlDQUF1QixnQkFDWixzQkFDTSw0QkFDTSw0QkFDQSxxQ0FDUztZQUs3QixjQUEyQjtZQUFBLEFBQTNCLDhDQUEyQixxQ0FBd0I7WUErQ3BELGNBQWU7WUFFZixBQURBLEFBREEsaUNBQWUsNEJBQ1EsMENBQ2M7OztpRkRrRjVCLGlCQUFpQjtjQU43QixTQUFTOzJCQUNFLFdBQVcsbUJBRUosdUJBQXVCLENBQUMsTUFBTSxhQUMvQyxTQUFTO2lPQUc4QyxPQUFPO2tCQUE3RCxTQUFTO21CQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7a0ZBRDFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xvb2t1cEJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLWxvb2t1cC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0xvb2t1cEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLWxvb2t1cC1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xvb2t1cE1vZGFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tbG9va3VwLW1vZGFsLnNlcnZpY2UnO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgcHJvdmlkZXJzID0gW1xuICBQb0xvb2t1cEZpbHRlclNlcnZpY2UsXG4gIFBvTG9va3VwTW9kYWxTZXJ2aWNlLFxuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9Mb29rdXBDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvTG9va3VwQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9LFxuICB7XG4gICAgcHJvdmlkZTogTmdDb250cm9sLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvTG9va3VwQ29tcG9uZW50KSxcbiAgICBtdWx0aTogZmFsc2VcbiAgfVxuXTtcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9Mb29rdXBCYXNlQ29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogUXVhbmRvIGV4aXN0ZSBtdWl0b3MgZGFkb3MgbyBwby1sb29rdXAgcG9yIHBhZHLDo28gdHJheiBhcGVuYXMgMTAgaXRlbnMgbmEgdGFiZWxhIGUgb3MgZGVtYWlzIHPDo28gY2FycmVnYWRvcyBwb3IgZGVtYW5kYSBhdHJhdsOpcyBkb1xuICogYm90w6NvICdDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MnLiBQYXJhIHF1ZSBmdW5jaW9uZSBjb3JyZXRhbWVudGUsIMOpIGltcG9ydGFudGUgcXVlIG8gc2VydmnDp28gc2lnYSBvXG4gKiBbR3VpYSBkZSBpbXBsZW1lbnRhw6fDo28gZGFzIEFQSXMgVE9UVlNdKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2FwaSkuXG4gKlxuICogSW1wb3J0YW50ZTpcbiAqXG4gKiAtIENhc28gbyBwby1sb29rdXAgY29udGVuaGEgbyBbKG5nTW9kZWwpXSBzZW0gbyBhdHJpYnV0byBuYW1lLCBvY29ycmVyw6EgdW0gZXJybyBkZSBhbmd1bGFyLlxuICogRW50w6NvIHNlcsOhIG5lY2Vzc8OhcmlvIGluZm9ybWFyIG8gYXRyaWJ1dG8gbmFtZSBvdSBvIGF0cmlidXRvIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIi5cbiAqIGBgYFxuICogPHBvLWxvb2t1cFxuICogICBbKG5nTW9kZWwpXT1cInBlc3NvYS5ub21lXCJcbiAqICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICogPC9wby1sb29rdXA+XG4gKiBgYGBcbiAqXG4gKiAjIyMjIFRva2VucyBjdXN0b21pesOhdmVpc1xuICpcbiAqIMOJIHBvc3PDrXZlbCBhbHRlcmFyIG8gZXN0aWxvIGRvIGNvbXBvbmVudGUgdXNhbmRvIG9zIHNlZ3VpbnRlcyB0b2tlbnMgKENTUyk6XG4gKlxuICogPiBQYXJhIG1haW9yZXMgaW5mb3JtYcOnw7VlcywgYWNlc3NlIG8gZ3VpYSBbUGVyc29uYWxpemFuZG8gbyBUZW1hIFBhZHLDo28gY29tIFRva2VucyBDU1NdKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL3RoZW1lLWN1c3RvbWl6YXRpb24pLlxuICpcbiAqIHwgUHJvcHJpZWRhZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGVzY3Jpw6fDo28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVmFsb3IgUGFkcsOjbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAqKkRlZmF1bHQgVmFsdWVzKiogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tZm9udC1mYW1pbHlgICAgICAgICAgICAgICAgICAgICAgICAgfCBGYW3DrWxpYSB0aXBvZ3LDoWZpY2EgdXNhZGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWZvbnQtZmFtaWx5LXRoZW1lKWAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tZm9udC1zaXplYCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUYW1hbmhvIGRhIGZvbnRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1mb250LXNpemUtZGVmYXVsdClgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLXRleHQtY29sb3ItcGxhY2Vob2xkZXJgICAgICAgICAgICAgIHwgQ29yIGRvIHRleHRvIG5vIHBsYWNlaG9sZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0zMClgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgZG8gbG9va3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtZGFyay03MClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYm9yZGVyLXJhZGl1c2AgICAgICAgICAgICAgICAgICAgICAgfCBDb250w6ltIG8gdmFsb3IgZG8gcmFpbyBkb3MgY2FudG9zIGRvIGVsZW1lbnRvJm5ic3A7ICAgfCBgdmFyKC0tYm9yZGVyLXJhZGl1cy1tZClgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1iYWNrZ3JvdW5kYCAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBkZSBiYWNrZ3JvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMDUpYCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tdGV4dC1jb2xvcmAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgZG8gdGV4dG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWRhcmstOTApYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWNsZWFyYCAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIHByaW5jaXBhbCBkbyBpY29uZSBjbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWRlZmF1bHQpYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkljb24qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItaWNvbmAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIGRvIGljb25lIHBlc3F1aXNhciAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZGVmYXVsdClgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqSG92ZXIqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1ob3ZlcmAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1ob3ZlcilgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1ob3ZlcmAgICAgICAgICAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gaG92ZXIgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1icmFuZC0wMS1saWdodGVzdClgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRm9jdXNlZCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1mb2N1c2VkYCAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGRlIGZvY3VzICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1kZWZhdWx0KWAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tb3V0bGluZS1jb2xvci1mb2N1c2VkYCAgICAgICAgICAgICAgfCBDb3IgZG8gb3V0bGluZSBkbyBlc3RhZG8gZGUgZm9jdXMgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZm9jdXMpYCAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRGlzYWJsZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1kaXNhYmxlZGAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgbm8gZXN0YWRvIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1kaXNhYmxlZClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZC1kaXNhYmxlZGAgICAgICAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCBubyBlc3RhZG8gZGlzYWJsZWQgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWxpZ2h0LTIwKWAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLXRleHQtY29sb3ItZGlzYWJsZWRgICAgICAgICAgICAgICAgIHwgQ29yIGRvIHRleHRvIHF1YW5kbyBjYW1wbyBlc3TDoSBkZXNhYmlsaXRhZG8gICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1kaXNhYmxlZClgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipFcnJvcioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWVycm9yYCAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgbm8gZXN0YWRvIGRlIHJlcXVlcmlkbyAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItZmVlZGJhY2stbmVnYXRpdmUtYmFzZSlgICAgICAgICAgICAgfFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWxvb2t1cC1iYXNpY1wiIHRpdGxlPVwiUE8gTG9va3VwIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtYmFzaWMvc2FtcGxlLXBvLWxvb2t1cC1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtYmFzaWMvc2FtcGxlLXBvLWxvb2t1cC1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1sb29rdXAtbGFic1wiIHRpdGxlPVwiUE8gTG9va3VwIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1sYWJzL3NhbXBsZS1wby1sb29rdXAtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtbGFicy9zYW1wbGUtcG8tbG9va3VwLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbG9va3VwLWhlcm9cIiB0aXRsZT1cIlBPIExvb2t1cCAtIEhlcm9cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1oZXJvL3NhbXBsZS1wby1sb29rdXAtaGVyby5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtaGVyby9zYW1wbGUtcG8tbG9va3VwLWhlcm8uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbG9va3VwLWhlcm8tcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gTG9va3VwIC0gSGVybyBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtaGVyby1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1sb29rdXAtaGVyby1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1oZXJvLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWxvb2t1cC1oZXJvLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbG9va3VwLXN3LWZpbG1zXCIgdGl0bGU9XCJQTyBMb29rdXAgLSBTdGFyIFdhcnMgZmlsbXNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1zdy1maWxtcy9zYW1wbGUtcG8tbG9va3VwLXN3LWZpbG1zLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1zdy1maWxtcy9zYW1wbGUtcG8tbG9va3VwLXN3LWZpbG1zLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtc3ctZmlsbXMvc2FtcGxlLXBvLWxvb2t1cC1zdy1maWxtcy5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbG9va3VwLW11bHRpcGxlXCIgdGl0bGU9XCJQTyBMb29rdXAgLSBNdWx0aXBsZVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLW11bHRpcGxlL3NhbXBsZS1wby1sb29rdXAtbXVsdGlwbGUuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLW11bHRpcGxlL3NhbXBsZS1wby1sb29rdXAtbXVsdGlwbGUuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1tdWx0aXBsZS9zYW1wbGUtcG8tbG9va3VwLW11bHRpcGxlLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1sb29rdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tbG9va3VwLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyc1xufSlcbmV4cG9ydCBjbGFzcyBQb0xvb2t1cENvbXBvbmVudCBleHRlbmRzIFBvTG9va3VwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBEb0NoZWNrIHtcbiAgQFZpZXdDaGlsZCgnaW5wJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XG5cbiAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgdGltZW91dFJlc2l6ZTtcbiAgdmlzaWJsZUVsZW1lbnQgPSBmYWxzZTtcbiAgaGVpZ2h0R3JvdXBCdXR0b25zID0gNDQ7XG5cbiAgZGlzY2xhaW1lcnMgPSBbXTtcbiAgdmlzaWJsZURpc2NsYWltZXJzID0gW107XG5cbiAgaWQgPSBgcG8tbG9va3VwWyR7dXVpZCgpfV1gO1xuXG4gIHByaXZhdGUgbW9kYWxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBpc0NhbGN1bGF0ZVZpc2libGVJdGVtczogYm9vbGVhbiA9IHRydWU7XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHBvTG9va3VwRmlsdGVyU2VydmljZTogUG9Mb29rdXBGaWx0ZXJTZXJ2aWNlLFxuICAgIHBvTG9va3VwTW9kYWxTZXJ2aWNlOiBQb0xvb2t1cE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICBzdXBlcihwb0xvb2t1cEZpbHRlclNlcnZpY2UsIGluamVjdG9yLCBwb0xvb2t1cE1vZGFsU2VydmljZSwgbGFuZ3VhZ2VTZXJ2aWNlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGNvbnN0IGlucHV0V2lkdGggPSB0aGlzLmlucHV0RWw/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgLy8gUGVybWl0ZSBxdWUgb3MgZGlzY2xhaW1lcnMgc2VqYW0gY2FsY3VsYWRvcyBuYSBwcmltZWlyYSB2ZXogcXVlIG8gY29tcG9uZW50ZSB0b3JuYS1zZSB2aXPDrXZlbCxcbiAgICAvLyBldml0YW5kbyBjb20gaXNzbywgcHJvYmxlbWFzIGNvbSBUYWJzIG91IERpdnMgcXVlIGluaWNpZW0gZXNjb25kaWRhcy5cbiAgICBpZiAoKGlucHV0V2lkdGggJiYgIXRoaXMudmlzaWJsZUVsZW1lbnQgJiYgdGhpcy5pbml0aWFsaXplZCkgfHwgKGlucHV0V2lkdGggJiYgdGhpcy5pc0NhbGN1bGF0ZVZpc2libGVJdGVtcykpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VSZXNpemUoKTtcbiAgICAgIHRoaXMudmlzaWJsZUVsZW1lbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubW9kYWxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubW9kYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb0xvb2t1cENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9Mb29rdXBDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGxvb2t1cDogUG9Mb29rdXBDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzTG9va3VwKCkge1xuICAgKiAgIHRoaXMubG9va3VwLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb3Blbkxvb2t1cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0FsbG93ZWRPcGVuTW9kYWwoKSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhZHZhbmNlZEZpbHRlcnMsXG4gICAgICAgIHNlcnZpY2UsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgaGlkZUNvbHVtbnNNYW5hZ2VyLFxuICAgICAgICBsaXRlcmFscyxcbiAgICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICAgIG11bHRpcGxlLFxuICAgICAgICBmaWVsZExhYmVsLFxuICAgICAgICBmaWVsZFZhbHVlLFxuICAgICAgICBzcGFjaW5nLFxuICAgICAgICB0ZXh0V3JhcCxcbiAgICAgICAgdmlydHVhbFNjcm9sbCxcbiAgICAgICAgY2hhbmdlVmlzaWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbHVtblJlc3RvcmVNYW5hZ2VyXG4gICAgICB9ID0gdGhpcztcblxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY2hlY2tTZWxlY3RlZEl0ZW1zKCk7XG5cbiAgICAgIHRoaXMucG9Mb29rdXBNb2RhbFNlcnZpY2Uub3Blbk1vZGFsKHtcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJzLFxuICAgICAgICBzZXJ2aWNlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgIGhpZGVDb2x1bW5zTWFuYWdlcixcbiAgICAgICAgdGl0bGU6IHRoaXMubGFiZWwsXG4gICAgICAgIGxpdGVyYWxzLFxuICAgICAgICBpbmZpbml0ZVNjcm9sbCxcbiAgICAgICAgbXVsdGlwbGUsXG4gICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgIGZpZWxkTGFiZWwsXG4gICAgICAgIGZpZWxkVmFsdWUsXG4gICAgICAgIHNwYWNpbmcsXG4gICAgICAgIHRleHRXcmFwLFxuICAgICAgICB2aXJ0dWFsU2Nyb2xsLFxuICAgICAgICBjaGFuZ2VWaXNpYmxlQ29sdW1ucyxcbiAgICAgICAgY29sdW1uUmVzdG9yZU1hbmFnZXJcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMubW9kYWxTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5tb2RhbFN1YnNjcmlwdGlvbiA9IHRoaXMucG9Mb29rdXBNb2RhbFNlcnZpY2Uuc2VsZWN0VmFsdWVFdmVudC5zdWJzY3JpYmUoc2VsZWN0ZWRPcHRpb25zID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEgfHwgdGhpcy5kaXNjbGFpbWVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzY2xhaW1lcnMoc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbChzZWxlY3RlZE9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGVja1NlbGVjdGVkSXRlbXMoKSB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5kaXNjbGFpbWVycy5sZW5ndGggJiYgdGhpcy52YWx1ZVRvTW9kZWw/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW3sgdmFsdWU6IHRoaXMudmFsdWVUb01vZGVsWzBdLCBsYWJlbDogdGhpcy5vbGRWYWx1ZSwgLi4udGhpcy5zZWxlY3RlZE9wdGlvbnNbMF0gfV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmRpc2NsYWltZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZVRvTW9kZWw7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzY2xhaW1lcnMoc2VsZWN0ZWRPcHRpb25zOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5kaXNjbGFpbWVycyA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoc2VsZWN0ZWRPcHRpb24gPT4gKHtcbiAgICAgIHZhbHVlOiBzZWxlY3RlZE9wdGlvblt0aGlzLmZpZWxkVmFsdWVdLFxuICAgICAgbGFiZWw6IHNlbGVjdGVkT3B0aW9uW3RoaXMuZmllbGRMYWJlbF0sXG4gICAgICAuLi5zZWxlY3RlZE9wdGlvblxuICAgIH0pKTtcblxuICAgIHRoaXMudmlzaWJsZURpc2NsYWltZXJzID0gWy4uLnRoaXMuZGlzY2xhaW1lcnNdO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzZXRWaWV3VmFsdWUodmFsdWU6IGFueSwgb2JqZWN0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dEVsICYmIHRoaXMuZmllbGRGb3JtYXQpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZVdpcG9pZWxkRm9ybWF0KG9iamVjdCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlucHV0RWwpIHtcbiAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZVRvTW9kZWwgfHwgdGhpcy52YWx1ZVRvTW9kZWwgPT09IDAgPyB2YWx1ZSA6ICcnO1xuICAgIH1cbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0Vmlld1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgZ2V0RXJyb3JQYXR0ZXJuKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlIDogJyc7XG4gIH1cblxuICBoYXNJbnZhbGlkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaEV2ZW50KCkge1xuICAgIHRoaXMub25Ub3VjaGVkPy4oKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Vmlld1ZhbHVlKCk7XG5cbiAgICBpZiAodGhpcy5vbGRWYWx1ZT8udG9TdHJpbmcoKSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuc2VhcmNoQnlJZCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VEaXNjbGFpbWVyKHZhbHVlKSB7XG4gICAgdGhpcy5kaXNjbGFpbWVycyA9IHRoaXMuZGlzY2xhaW1lcnMuZmlsdGVyKGRpc2NsYWltZXIgPT4gZGlzY2xhaW1lci52YWx1ZSAhPT0gdmFsdWUpO1xuICAgIHRoaXMudmFsdWVUb01vZGVsID0gdGhpcy52YWx1ZVRvTW9kZWwuZmlsdGVyKG1vZGVsID0+IG1vZGVsICE9PSB2YWx1ZSk7XG5cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMudmFsdWVUb01vZGVsLmxlbmd0aCA/IHRoaXMudmFsdWVUb01vZGVsIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHVwZGF0ZVZpc2libGVJdGVtcygpIHtcbiAgICBpZiAodGhpcy5kaXNjbGFpbWVycyAmJiB0aGlzLmRpc2NsYWltZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudmlzaWJsZURpc2NsYWltZXJzID0gW10uY29uY2F0KHRoaXMuZGlzY2xhaW1lcnMpO1xuICAgIH1cblxuICAgIHRoaXMuZGVib3VuY2VSZXNpemUoKTtcblxuICAgIGlmICghdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpIHtcbiAgICAgIHRoaXMuaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGRlYm91bmNlUmVzaXplKCkge1xuICAgIGlmICghdGhpcy5hdXRvSGVpZ2h0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0UmVzaXplKTtcbiAgICAgIHRoaXMuZGVib3VuY2UodGhpcy5jYWxjdWxhdGVWaXNpYmxlSXRlbXMuYmluZCh0aGlzKSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBkZWJvdW5jZShmdW5jOiAoKSA9PiB2b2lkLCBkZWxheTogbnVtYmVyKSB7XG4gICAgdGhpcy50aW1lb3V0UmVzaXplID0gc2V0VGltZW91dChmdW5jLCBkZWxheSk7XG4gIH1cblxuICBnZXRJbnB1dFdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAtICh0aGlzLmNsZWFuID8gODAgOiA0MCk7XG4gIH1cblxuICBnZXREaXNjbGFpbWVyc1dpZHRoKCkge1xuICAgIGNvbnN0IGRpc2NsYWltZXJzID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncG8tZGlzY2xhaW1lcicpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGRpc2NsYWltZXJzKS5tYXAoZGlzY2xhaW1lciA9PiBkaXNjbGFpbWVyWydvZmZzZXRXaWR0aCddKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVZpc2libGVJdGVtcygpIHtcbiAgICBjb25zdCBkaXNjbGFpbWVyc1dpZHRoID0gdGhpcy5nZXREaXNjbGFpbWVyc1dpZHRoKCk7XG4gICAgY29uc3QgaW5wdXRXaWR0aCA9IHRoaXMuZ2V0SW5wdXRXaWR0aCgpO1xuICAgIGNvbnN0IGV4dHJhRGlzY2xhaW1lclNpemUgPSAzODtcbiAgICBjb25zdCBkaXNjbGFpbWVyc1Zpc2libGUgPSBkaXNjbGFpbWVyc1dpZHRoWzBdO1xuXG4gICAgY29uc3QgbmV3RGlzY2xhaW1lcnMgPSBbXTtcbiAgICBjb25zdCBkaXNjbGFpbWVycyA9IHRoaXMuZGlzY2xhaW1lcnM7XG5cbiAgICBpZiAoaW5wdXRXaWR0aCA+IDApIHtcbiAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpc2NsYWltZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN1bSArPSBkaXNjbGFpbWVyc1dpZHRoW2ldO1xuICAgICAgICBuZXdEaXNjbGFpbWVycy5wdXNoKGRpc2NsYWltZXJzW2ldKTtcblxuICAgICAgICBpZiAoc3VtID4gaW5wdXRXaWR0aCkge1xuICAgICAgICAgIHN1bSAtPSBkaXNjbGFpbWVyc1dpZHRoW2ldO1xuICAgICAgICAgIHRoaXMuaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGlzY2xhaW1lcnNWaXNpYmxlIHx8ICFkaXNjbGFpbWVycy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGkgPT09IGRpc2NsYWltZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VtICsgZXh0cmFEaXNjbGFpbWVyU2l6ZSA+IGlucHV0V2lkdGgpIHtcbiAgICAgICAgICBuZXdEaXNjbGFpbWVycy5zcGxpY2UoLTIsIDIpO1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gJysnICsgKGRpc2NsYWltZXJzLmxlbmd0aCArIDEgLSBpKS50b1N0cmluZygpO1xuICAgICAgICAgIG5ld0Rpc2NsYWltZXJzLnB1c2goeyB2YWx1ZTogJycsIGxhYmVsOiBsYWJlbCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdEaXNjbGFpbWVycy5zcGxpY2UoLTEsIDEpO1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gJysnICsgKGRpc2NsYWltZXJzLmxlbmd0aCAtIGkpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgbmV3RGlzY2xhaW1lcnMucHVzaCh7IHZhbHVlOiAnJywgbGFiZWw6IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52aXNpYmxlRGlzY2xhaW1lcnMgPSBbLi4ubmV3RGlzY2xhaW1lcnNdO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsbG93ZWRPcGVuTW9kYWwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gc2VydmljZSBpbmZvcm1lZCcpO1xuICAgIH1cblxuICAgIHJldHVybiAhISh0aGlzLnNlcnZpY2UgJiYgIXRoaXMuZGlzYWJsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRGaWVsZHMob2JqZWN0U2VsZWN0ZWQsIHByb3BlcnRpZXMpIHtcbiAgICBsZXQgZm9ybWF0ZWRGaWVsZDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSkge1xuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChvYmplY3RTZWxlY3RlZCAmJiBvYmplY3RTZWxlY3RlZFtwcm9wZXJ0eV0pIHtcbiAgICAgICAgICBpZiAoIWZvcm1hdGVkRmllbGQpIHtcbiAgICAgICAgICAgIGZvcm1hdGVkRmllbGQgPSBvYmplY3RTZWxlY3RlZFtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdGVkRmllbGQgPSBmb3JtYXRlZEZpZWxkICsgJyAtICcgKyBvYmplY3RTZWxlY3RlZFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFmb3JtYXRlZEZpZWxkKSB7XG4gICAgICBmb3JtYXRlZEZpZWxkID0gb2JqZWN0U2VsZWN0ZWRbdGhpcy5maWVsZFZhbHVlXTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdGVkRmllbGQ7XG4gIH1cblxuICBwcml2YXRlIHNldElucHV0VmFsdWVXaXBvaWVsZEZvcm1hdChvYmplY3RTZWxlY3RlZDogYW55KSB7XG4gICAgY29uc3QgaXNFbXB0eSA9IE9iamVjdC5rZXlzKG9iamVjdFNlbGVjdGVkKS5sZW5ndGggPT09IDA7XG4gICAgbGV0IGZpZWxkRm9ybWF0ZWQ7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZpZWxkRm9ybWF0KSkge1xuICAgICAgZmllbGRGb3JtYXRlZCA9IHRoaXMuZm9ybWF0RmllbGRzKG9iamVjdFNlbGVjdGVkLCB0aGlzLmZpZWxkRm9ybWF0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGRGb3JtYXRlZCA9IHRoaXMuZmllbGRGb3JtYXQob2JqZWN0U2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHRoaXMub2xkVmFsdWUgPSBpc0VtcHR5ID8gJycgOiBmaWVsZEZvcm1hdGVkO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gaXNFbXB0eSA/ICcnIDogZmllbGRGb3JtYXRlZDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cG8tZmllbGQtY29udGFpbmVyXG4gIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtaWRdPVwiaWRcIlxuICBbcC1sYWJlbF09XCJsYWJlbFwiXG4gIFtwLW9wdGlvbmFsXT1cIm9wdGlvbmFsXCJcbiAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbcC1zaG93LXJlcXVpcmVkXT1cInNob3dSZXF1aXJlZFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50IHBvLWxvb2t1cFwiXG4gICAgW2NsYXNzLnBvLWxvb2t1cC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKm5nSWY9XCIhZGlzY2xhaW1lcnMubGVuZ3RoOyBlbHNlIGRpc2NsYWltZXJzVGVtcGxhdGVcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInBvLXNlYXJjaC1jb250YWluZXItd3JhcHBlclwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNpbnBcbiAgICAgICAgY2xhc3M9XCJwby1sb29rdXAtaW5wdXQgcG8tbG9va3VwLWlucHV0LXRyaWdnZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJjbGVhbiAmJiBpbnAudmFsdWUgPyAncG8taW5wdXQtZG91YmxlLWljb24tcmlnaHQnIDogJ3BvLWlucHV0LWljb24tcmlnaHQnXCJcbiAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIChibHVyKT1cInNlYXJjaEV2ZW50KClcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0IHBvLWxvb2t1cC1idXR0b25zXCI+XG4gICAgICAgIDxwby1jbGVhblxuICAgICAgICAgICpuZ0lmPVwiY2xlYW4gJiYgIWRpc2FibGVkICYmICEhaW5wLnZhbHVlXCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGl0ZXJhbHMuY2xlYW5cIlxuICAgICAgICAgIGNsYXNzPVwicG8taWNvbi1pbnB1dCBwby1sb29rdXAtYnV0dG9uIHBvLWxvb2t1cC1idXR0b24tY2xlYW5cIlxuICAgICAgICAgIGNsYXNzPVwicG8tbG9va3VwLWJ1dHRvbiBwby1sb29rdXAtYnV0dG9uLWNsZWFuXCJcbiAgICAgICAgICBbcC1lbGVtZW50LXJlZl09XCJpbnBcIlxuICAgICAgICAgIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhbk1vZGVsKClcIlxuICAgICAgICAgIChjbGljayk9XCJjbGVhbk1vZGVsKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbGVhbk1vZGVsKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3BvLWNsZWFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgI2ljb25Mb29rdXBcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwicG8tbG9va3VwLWJ1dHRvbiBwby1sb29rdXAtYnV0dG9uLXRyaWdnZXIgcG8tZmllbGQtaWNvblwiXG4gICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwibGl0ZXJhbHMuc2VhcmNoXCJcbiAgICAgICAgICAocC1jaGFuZ2UtZXZlbnQpPVwib3Blbkxvb2t1cCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3Blbkxvb2t1cCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cG8taWNvbiBwLWljb249XCJJQ09OX1NFQVJDSFwiIFtjbGFzcy5wby1maWVsZC1pY29uXT1cIiFkaXNhYmxlZFwiPjwvcG8taWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tXG4gICAgW3AtaGVscF09XCJoZWxwXCJcbiAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3AtZXJyb3ItcGF0dGVybl09XCJnZXRFcnJvclBhdHRlcm4oKVwiXG4gID48L3BvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+XG48L3BvLWZpZWxkLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkaXNjbGFpbWVyc1RlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicG8tbG9va3VwXCIgW2NsYXNzLnBvLWxvb2t1cC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxkaXZcbiAgICAgICNpbnBcbiAgICAgIFt0YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICBjbGFzcz1cInBvLWxvb2t1cC1pbnB1dCBwby1pbnB1dC1pY29uLXJpZ2h0IHBvLWxvb2t1cC1pbnB1dCBwby1pY29uLWlucHV0XCJcbiAgICAgIFtuZ0NsYXNzXT1cImNsZWFuICYmIGlucC52YWx1ZSA/ICdwby1pbnB1dC1kb3VibGUtaWNvbi1yaWdodCcgOiAncG8taW5wdXQtaWNvbi1yaWdodCdcIlxuICAgICAgW2NsYXNzLnBvLWxvb2t1cC1pbnB1dC1hdXRvXT1cImF1dG9IZWlnaHRcIlxuICAgICAgW2NsYXNzLnBvLWxvb2t1cC1pbnB1dC1zdGF0aWNdPVwiIWF1dG9IZWlnaHRcIlxuICAgICAgW2NsYXNzLnBvLWxvb2t1cC1pbnB1dC1wYWRkaW5nLWJ1dHRvbi1jbGVhbl09XCJjbGVhblwiXG4gICAgICBbY2xhc3MucG8tbG9va3VwLWlucHV0LWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICA+XG4gICAgICA8c3BhbiAqbmdJZj1cInBsYWNlaG9sZGVyICYmICFkaXNjbGFpbWVycz8ubGVuZ3RoXCIgY2xhc3M9XCJwby1sb29rdXAtaW5wdXQtcGxhY2Vob2xkZXJcIj5cbiAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPHBvLWRpc2NsYWltZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRpc2NsYWltZXIgb2YgdmlzaWJsZURpc2NsYWltZXJzXCJcbiAgICAgICAgY2xhc3M9XCJwby1sb29rdXAtaW5wdXQtZGlzY2xhaW1lclwiXG4gICAgICAgIFtwLWxhYmVsXT1cImRpc2NsYWltZXIubGFiZWxcIlxuICAgICAgICBbcC12YWx1ZV09XCJkaXNjbGFpbWVyLnZhbHVlXCJcbiAgICAgICAgW3AtaGlkZS1jbG9zZV09XCJkaXNjbGFpbWVyLnZhbHVlID09PSAnJyB8fCBkaXNhYmxlZFwiXG4gICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiZGlzY2xhaW1lci52YWx1ZSA9PT0gJycgJiYgIWRpc2FibGVkXCJcbiAgICAgICAgKHAtY2xvc2UtYWN0aW9uKT1cImNsb3NlRGlzY2xhaW1lcihkaXNjbGFpbWVyLnZhbHVlKVwiXG4gICAgICA+XG4gICAgICA8L3BvLWRpc2NsYWltZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0IHBvLWxvb2t1cC1idXR0b25zXCI+XG4gICAgICA8cG8tY2xlYW5cbiAgICAgICAgKm5nSWY9XCJjbGVhbiAmJiAhZGlzYWJsZWQgJiYgISFpbnAudmFsdWVcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaXRlcmFscy5jbGVhblwiXG4gICAgICAgIGNsYXNzPVwicG8tbG9va3VwLWJ1dHRvbiBwby1sb29rdXAtYnV0dG9uLWNsZWFuXCJcbiAgICAgICAgW3AtZWxlbWVudC1yZWZdPVwiaW5wXCJcbiAgICAgICAgKHAtY2hhbmdlLWV2ZW50KT1cImNsZWFuTW9kZWwoKVwiXG4gICAgICAgIChjbGljayk9XCJjbGVhbk1vZGVsKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xlYW5Nb2RlbCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICA+XG4gICAgICA8L3BvLWNsZWFuPlxuICAgICAgPGRpdlxuICAgICAgICAjaWNvbkxvb2t1cFxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJwby1sb29rdXAtYnV0dG9uIHBvLWxvb2t1cC1idXR0b24tdHJpZ2dlciBwby1maWVsZC1pY29uXCJcbiAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbYXJpYUxhYmVsXT1cImxpdGVyYWxzLnNlYXJjaFwiXG4gICAgICAgIChwLWNoYW5nZS1ldmVudCk9XCJvcGVuTG9va3VwKClcIlxuICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5Mb29rdXAoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgPlxuICAgICAgICA8cG8taWNvbiBwLWljb249XCJJQ09OX1NFQVJDSFwiIFtjbGFzcy5wby1maWVsZC1pY29uXT1cIiFkaXNhYmxlZFwiPjwvcG8taWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
518
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9va3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1sb29rdXAvcG8tbG9va3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1sb29rdXAvcG8tbG9va3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixVQUFVLEVBS1YsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0UsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7OztJQ01sRSxvQ0FXQztJQURDLEFBREEsQUFEQSw2TUFBa0IsbUJBQVksS0FBQyw4SkFDdEIsbUJBQVksd0JBQUUsdUJBQXVCLEtBQUMsOEtBQzlCLG1CQUFZLHdCQUFFLHVCQUF1QixLQUFDO0lBRXpELGlCQUFXOzs7OztJQUxULHNDQUFxQjs7Ozs7SUFyQnpCLEFBREYsQUFMRiw4QkFJQyxhQUMwQyxrQkFZckM7SUFEQSwwS0FBUSxvQkFBYSxLQUFDO0lBVnhCLGlCQVdFO0lBRUYsOEJBQTZEO0lBQzNELG1GQVdDO0lBRUQsa0NBVUM7SUFEQyxBQURBLEFBREEsNExBQWtCLG1CQUFZ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bEUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzJFQXZVVSxpQkFBaUI7NkRBQWpCLGlCQUFpQjttQ0FDRixVQUFVOzs7OzhDQUhwQyxTQUFTO1lDNUlYLDZDQU9DO1lBQ0MsbUVBSUM7WUE2Q0QsK0NBTTZCO1lBQy9CLGlCQUFxQjtZQUVyQixxSEFBa0M7OztZQTVEaEMsQUFEQSxBQURBLEFBREEsQUFEQSxBQURBLHlDQUF1QixnQkFDWixzQkFDTSw0QkFDTSw0QkFDQSxxQ0FDUztZQUs3QixjQUEyQjtZQUFBLEFBQTNCLDhDQUEyQixxQ0FBd0I7WUErQ3BELGNBQWU7WUFJZixBQURBLEFBREEsQUFEQSxBQURBLGlDQUFlLDRCQUNRLDBDQUNjLGlDQUNULHdDQUNPOzs7aUZEZ0YxQixpQkFBaUI7Y0FON0IsU0FBUzsyQkFDRSxXQUFXLG1CQUVKLHVCQUF1QixDQUFDLE1BQU0sYUFDL0MsU0FBUztpT0FHOEMsT0FBTztrQkFBN0QsU0FBUzttQkFBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O2tGQUQxQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9Mb29rdXBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9wby1sb29rdXAtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9Mb29rdXBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1sb29rdXAtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9Mb29rdXBNb2RhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLWxvb2t1cC1tb2RhbC5zZXJ2aWNlJztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IHByb3ZpZGVycyA9IFtcbiAgUG9Mb29rdXBGaWx0ZXJTZXJ2aWNlLFxuICBQb0xvb2t1cE1vZGFsU2VydmljZSxcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvTG9va3VwQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9LFxuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0xvb2t1cENvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfSxcbiAge1xuICAgIHByb3ZpZGU6IE5nQ29udHJvbCxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0xvb2t1cENvbXBvbmVudCksXG4gICAgbXVsdGk6IGZhbHNlXG4gIH1cbl07XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvTG9va3VwQmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIFF1YW5kbyBleGlzdGUgbXVpdG9zIGRhZG9zIG8gcG8tbG9va3VwIHBvciBwYWRyw6NvIHRyYXogYXBlbmFzIDEwIGl0ZW5zIG5hIHRhYmVsYSBlIG9zIGRlbWFpcyBzw6NvIGNhcnJlZ2Fkb3MgcG9yIGRlbWFuZGEgYXRyYXbDqXMgZG9cbiAqIGJvdMOjbyAnQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zJy4gUGFyYSBxdWUgZnVuY2lvbmUgY29ycmV0YW1lbnRlLCDDqSBpbXBvcnRhbnRlIHF1ZSBvIHNlcnZpw6dvIHNpZ2Egb1xuICogW0d1aWEgZGUgaW1wbGVtZW50YcOnw6NvIGRhcyBBUElzIFRPVFZTXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpLlxuICpcbiAqIEltcG9ydGFudGU6XG4gKlxuICogLSBDYXNvIG8gcG8tbG9va3VwIGNvbnRlbmhhIG8gWyhuZ01vZGVsKV0gc2VtIG8gYXRyaWJ1dG8gbmFtZSwgb2NvcnJlcsOhIHVtIGVycm8gZGUgYW5ndWxhci5cbiAqIEVudMOjbyBzZXLDoSBuZWNlc3PDoXJpbyBpbmZvcm1hciBvIGF0cmlidXRvIG5hbWUgb3UgbyBhdHJpYnV0byBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIuXG4gKiBgYGBcbiAqIDxwby1sb29rdXBcbiAqICAgWyhuZ01vZGVsKV09XCJwZXNzb2Eubm9tZVwiXG4gKiAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAqIDwvcG8tbG9va3VwPlxuICogYGBgXG4gKlxuICogIyMjIyBUb2tlbnMgY3VzdG9taXrDoXZlaXNcbiAqXG4gKiDDiSBwb3Nzw612ZWwgYWx0ZXJhciBvIGVzdGlsbyBkbyBjb21wb25lbnRlIHVzYW5kbyBvcyBzZWd1aW50ZXMgdG9rZW5zIChDU1MpOlxuICpcbiAqID4gUGFyYSBtYWlvcmVzIGluZm9ybWHDp8O1ZXMsIGFjZXNzZSBvIGd1aWEgW1BlcnNvbmFsaXphbmRvIG8gVGVtYSBQYWRyw6NvIGNvbSBUb2tlbnMgQ1NTXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy90aGVtZS1jdXN0b21pemF0aW9uKS5cbiAqXG4gKiB8IFByb3ByaWVkYWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIERlc2NyacOnw6NvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFZhbG9yIFBhZHLDo28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgKipEZWZhdWx0IFZhbHVlcyoqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWZvbnQtZmFtaWx5YCAgICAgICAgICAgICAgICAgICAgICAgIHwgRmFtw61saWEgdGlwb2dyw6FmaWNhIHVzYWRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1mb250LWZhbWlseS10aGVtZSlgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWZvbnQtc2l6ZWAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGFtYW5obyBkYSBmb250ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tZm9udC1zaXplLWRlZmF1bHQpYCAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS10ZXh0LWNvbG9yLXBsYWNlaG9sZGVyYCAgICAgICAgICAgICB8IENvciBkbyB0ZXh0byBubyBwbGFjZWhvbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLW5ldXRyYWwtbGlnaHQtMzApYCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIGRvIGxvb2t1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWRhcmstNzApYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJvcmRlci1yYWRpdXNgICAgICAgICAgICAgICAgICAgICAgIHwgQ29udMOpbSBvIHZhbG9yIGRvIHJhaW8gZG9zIGNhbnRvcyBkbyBlbGVtZW50byZuYnNwOyAgIHwgYHZhcigtLWJvcmRlci1yYWRpdXMtbWQpYCAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tYmFja2dyb3VuZGAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgZGUgYmFja2dyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1uZXV0cmFsLWxpZ2h0LTA1KWAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLXRleHQtY29sb3JgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRvIHRleHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1kYXJrLTkwKWAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1jbGVhcmAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBwcmluY2lwYWwgZG8gaWNvbmUgY2xlYXIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWFjdGlvbi1kZWZhdWx0KWAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgKipJY29uKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWNvbG9yLWljb25gICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yIHByaW5jaXBhbCBkbyBpY29uZSBwZXNxdWlzYXIgICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWRlZmF1bHQpYCAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkhvdmVyKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItaG92ZXJgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBob3ZlciAgICAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24taG92ZXIpYCAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtaG92ZXJgICAgICAgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgbm8gZXN0YWRvIGhvdmVyICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYnJhbmQtMDEtbGlnaHRlc3QpYCAgICAgICAgICAgICAgICAgfFxuICogfCAqKkZvY3VzZWQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItZm9jdXNlZGAgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBkZSBmb2N1cyAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZGVmYXVsdClgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLW91dGxpbmUtY29sb3ItZm9jdXNlZGAgICAgICAgICAgICAgIHwgQ29yIGRvIG91dGxpbmUgZG8gZXN0YWRvIGRlIGZvY3VzICAgICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItYWN0aW9uLWZvY3VzKWAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAqKkRpc2FibGVkKiogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYC0tY29sb3ItZGlzYWJsZWRgICAgICAgICAgICAgICAgICAgICAgfCBDb3IgcHJpbmNpcGFsIG5vIGVzdGFkbyBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZGlzYWJsZWQpYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8IGAtLWJhY2tncm91bmQtZGlzYWJsZWRgICAgICAgICAgICAgICAgIHwgQ29yIGRlIGJhY2tncm91bmQgbm8gZXN0YWRvIGRpc2FibGVkICAgICAgICAgICAgICAgICAgfCBgdmFyKC0tY29sb3ItbmV1dHJhbC1saWdodC0yMClgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS10ZXh0LWNvbG9yLWRpc2FibGVkYCAgICAgICAgICAgICAgICB8IENvciBkbyB0ZXh0byBxdWFuZG8gY2FtcG8gZXN0w6EgZGVzYWJpbGl0YWRvICAgICAgICAgICB8IGB2YXIoLS1jb2xvci1hY3Rpb24tZGlzYWJsZWQpYCAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICoqRXJyb3IqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgLS1jb2xvci1lcnJvcmAgICAgICAgICAgICAgICAgICAgICAgICB8IENvciBkZSBiYWNrZ3JvdW5kIG5vIGVzdGFkbyBkZSByZXF1ZXJpZG8gICAgICAgICAgICAgIHwgYHZhcigtLWNvbG9yLWZlZWRiYWNrLW5lZ2F0aXZlLWJhc2UpYCAgICAgICAgICAgIHxcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1sb29rdXAtYmFzaWNcIiB0aXRsZT1cIlBPIExvb2t1cCBCYXNpY1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLWJhc2ljL3NhbXBsZS1wby1sb29rdXAtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLWJhc2ljL3NhbXBsZS1wby1sb29rdXAtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbG9va3VwLWxhYnNcIiB0aXRsZT1cIlBPIExvb2t1cCBMYWJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtbGFicy9zYW1wbGUtcG8tbG9va3VwLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLWxhYnMvc2FtcGxlLXBvLWxvb2t1cC1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWxvb2t1cC1oZXJvXCIgdGl0bGU9XCJQTyBMb29rdXAgLSBIZXJvXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtaGVyby9zYW1wbGUtcG8tbG9va3VwLWhlcm8uY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLWhlcm8vc2FtcGxlLXBvLWxvb2t1cC1oZXJvLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWxvb2t1cC1oZXJvLXJlYWN0aXZlLWZvcm1cIiB0aXRsZT1cIlBPIExvb2t1cCAtIEhlcm8gUmVhY3RpdmUgRm9ybVwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLWhlcm8tcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tbG9va3VwLWhlcm8tcmVhY3RpdmUtZm9ybS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtaGVyby1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1sb29rdXAtaGVyby1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWxvb2t1cC1zdy1maWxtc1wiIHRpdGxlPVwiUE8gTG9va3VwIC0gU3RhciBXYXJzIGZpbG1zXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtc3ctZmlsbXMvc2FtcGxlLXBvLWxvb2t1cC1zdy1maWxtcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtc3ctZmlsbXMvc2FtcGxlLXBvLWxvb2t1cC1zdy1maWxtcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbG9va3VwLXN3LWZpbG1zL3NhbXBsZS1wby1sb29rdXAtc3ctZmlsbXMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWxvb2t1cC1tdWx0aXBsZVwiIHRpdGxlPVwiUE8gTG9va3VwIC0gTXVsdGlwbGVcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1tdWx0aXBsZS9zYW1wbGUtcG8tbG9va3VwLW11bHRpcGxlLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWxvb2t1cC1tdWx0aXBsZS9zYW1wbGUtcG8tbG9va3VwLW11bHRpcGxlLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1sb29rdXAtbXVsdGlwbGUvc2FtcGxlLXBvLWxvb2t1cC1tdWx0aXBsZS5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tbG9va3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWxvb2t1cC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnNcbn0pXG5leHBvcnQgY2xhc3MgUG9Mb29rdXBDb21wb25lbnQgZXh0ZW5kcyBQb0xvb2t1cEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgRG9DaGVjayB7XG4gIEBWaWV3Q2hpbGQoJ2lucCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xuXG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG4gIHRpbWVvdXRSZXNpemU7XG4gIHZpc2libGVFbGVtZW50ID0gZmFsc2U7XG4gIGhlaWdodEdyb3VwQnV0dG9ucyA9IDQ0O1xuXG4gIGRpc2NsYWltZXJzID0gW107XG4gIHZpc2libGVEaXNjbGFpbWVycyA9IFtdO1xuXG4gIGlkID0gYHBvLWxvb2t1cFske3V1aWQoKX1dYDtcblxuICBwcml2YXRlIG1vZGFsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGdldCBhdXRvY29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9BdXRvY29tcGxldGUgPyAnb2ZmJyA6ICdvbic7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwb0xvb2t1cEZpbHRlclNlcnZpY2U6IFBvTG9va3VwRmlsdGVyU2VydmljZSxcbiAgICBwb0xvb2t1cE1vZGFsU2VydmljZTogUG9Mb29rdXBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIocG9Mb29rdXBGaWx0ZXJTZXJ2aWNlLCBpbmplY3RvciwgcG9Mb29rdXBNb2RhbFNlcnZpY2UsIGxhbmd1YWdlU2VydmljZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBjb25zdCBpbnB1dFdpZHRoID0gdGhpcy5pbnB1dEVsPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIC8vIFBlcm1pdGUgcXVlIG9zIGRpc2NsYWltZXJzIHNlamFtIGNhbGN1bGFkb3MgbmEgcHJpbWVpcmEgdmV6IHF1ZSBvIGNvbXBvbmVudGUgdG9ybmEtc2Ugdmlzw612ZWwsXG4gICAgLy8gZXZpdGFuZG8gY29tIGlzc28sIHByb2JsZW1hcyBjb20gVGFicyBvdSBEaXZzIHF1ZSBpbmljaWVtIGVzY29uZGlkYXMuXG4gICAgaWYgKChpbnB1dFdpZHRoICYmICF0aGlzLnZpc2libGVFbGVtZW50ICYmIHRoaXMuaW5pdGlhbGl6ZWQpIHx8IChpbnB1dFdpZHRoICYmIHRoaXMuaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXMpKSB7XG4gICAgICB0aGlzLmRlYm91bmNlUmVzaXplKCk7XG4gICAgICB0aGlzLnZpc2libGVFbGVtZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm1vZGFsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm1vZGFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9Mb29rdXBDb21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvTG9va3VwQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBsb29rdXA6IFBvTG9va3VwQ29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0xvb2t1cCgpIHtcbiAgICogICB0aGlzLmxvb2t1cC5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Mb29rdXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBbGxvd2VkT3Blbk1vZGFsKCkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJzLFxuICAgICAgICBzZXJ2aWNlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgIGhpZGVDb2x1bW5zTWFuYWdlcixcbiAgICAgICAgbGl0ZXJhbHMsXG4gICAgICAgIGluZmluaXRlU2Nyb2xsLFxuICAgICAgICBtdWx0aXBsZSxcbiAgICAgICAgZmllbGRMYWJlbCxcbiAgICAgICAgZmllbGRWYWx1ZSxcbiAgICAgICAgc3BhY2luZyxcbiAgICAgICAgdGV4dFdyYXAsXG4gICAgICAgIHZpcnR1YWxTY3JvbGwsXG4gICAgICAgIGNoYW5nZVZpc2libGVDb2x1bW5zLFxuICAgICAgICBjb2x1bW5SZXN0b3JlTWFuYWdlclxuICAgICAgfSA9IHRoaXM7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmNoZWNrU2VsZWN0ZWRJdGVtcygpO1xuXG4gICAgICB0aGlzLnBvTG9va3VwTW9kYWxTZXJ2aWNlLm9wZW5Nb2RhbCh7XG4gICAgICAgIGFkdmFuY2VkRmlsdGVycyxcbiAgICAgICAgc2VydmljZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICBoaWRlQ29sdW1uc01hbmFnZXIsXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhYmVsLFxuICAgICAgICBsaXRlcmFscyxcbiAgICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICAgIG11bHRpcGxlLFxuICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICBmaWVsZExhYmVsLFxuICAgICAgICBmaWVsZFZhbHVlLFxuICAgICAgICBzcGFjaW5nLFxuICAgICAgICB0ZXh0V3JhcCxcbiAgICAgICAgdmlydHVhbFNjcm9sbCxcbiAgICAgICAgY2hhbmdlVmlzaWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbHVtblJlc3RvcmVNYW5hZ2VyXG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLm1vZGFsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMubW9kYWxTdWJzY3JpcHRpb24gPSB0aGlzLnBvTG9va3VwTW9kYWxTZXJ2aWNlLnNlbGVjdFZhbHVlRXZlbnQuc3Vic2NyaWJlKHNlbGVjdGVkT3B0aW9ucyA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxIHx8IHRoaXMuZGlzY2xhaW1lcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNldERpc2NsYWltZXJzKHNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwoc2VsZWN0ZWRPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tTZWxlY3RlZEl0ZW1zKCkge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzY2xhaW1lcnMubGVuZ3RoICYmIHRoaXMudmFsdWVUb01vZGVsPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFt7IHZhbHVlOiB0aGlzLnZhbHVlVG9Nb2RlbFswXSwgbGFiZWw6IHRoaXMub2xkVmFsdWUsIC4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zWzBdIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5kaXNjbGFpbWVycztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVUb01vZGVsO1xuICAgIH1cbiAgfVxuXG4gIHNldERpc2NsYWltZXJzKHNlbGVjdGVkT3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuZGlzY2xhaW1lcnMgPSBzZWxlY3RlZE9wdGlvbnMubWFwKHNlbGVjdGVkT3B0aW9uID0+ICh7XG4gICAgICB2YWx1ZTogc2VsZWN0ZWRPcHRpb25bdGhpcy5maWVsZFZhbHVlXSxcbiAgICAgIGxhYmVsOiBzZWxlY3RlZE9wdGlvblt0aGlzLmZpZWxkTGFiZWxdLFxuICAgICAgLi4uc2VsZWN0ZWRPcHRpb25cbiAgICB9KSk7XG5cbiAgICB0aGlzLnZpc2libGVEaXNjbGFpbWVycyA9IFsuLi50aGlzLmRpc2NsYWltZXJzXTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0Vmlld1ZhbHVlKHZhbHVlOiBhbnksIG9iamVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbCAmJiB0aGlzLmZpZWxkRm9ybWF0KSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWVXaXBvaWVsZEZvcm1hdChvYmplY3QpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dEVsKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWVUb01vZGVsIHx8IHRoaXMudmFsdWVUb01vZGVsID09PSAwID8gdmFsdWUgOiAnJztcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldFZpZXdWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGdldEVycm9yUGF0dGVybigpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZEVycm9yTWVzc2FnZSAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5maWVsZEVycm9yTWVzc2FnZSA6ICcnO1xuICB9XG5cbiAgaGFzSW52YWxpZENsYXNzKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJykgJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctZGlydHknKVxuICAgICk7XG4gIH1cblxuICBzZWFyY2hFdmVudCgpIHtcbiAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZpZXdWYWx1ZSgpO1xuXG4gICAgaWYgKHRoaXMub2xkVmFsdWU/LnRvU3RyaW5nKCkgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLnNlYXJjaEJ5SWQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlRGlzY2xhaW1lcih2YWx1ZSkge1xuICAgIHRoaXMuZGlzY2xhaW1lcnMgPSB0aGlzLmRpc2NsYWltZXJzLmZpbHRlcihkaXNjbGFpbWVyID0+IGRpc2NsYWltZXIudmFsdWUgIT09IHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlVG9Nb2RlbCA9IHRoaXMudmFsdWVUb01vZGVsLmZpbHRlcihtb2RlbCA9PiBtb2RlbCAhPT0gdmFsdWUpO1xuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLnZhbHVlVG9Nb2RlbC5sZW5ndGggPyB0aGlzLnZhbHVlVG9Nb2RlbCA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICB1cGRhdGVWaXNpYmxlSXRlbXMoKSB7XG4gICAgaWYgKHRoaXMuZGlzY2xhaW1lcnMgJiYgdGhpcy5kaXNjbGFpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnZpc2libGVEaXNjbGFpbWVycyA9IFtdLmNvbmNhdCh0aGlzLmRpc2NsYWltZXJzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlYm91bmNlUmVzaXplKCk7XG5cbiAgICBpZiAoIXRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSB7XG4gICAgICB0aGlzLmlzQ2FsY3VsYXRlVmlzaWJsZUl0ZW1zID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBkZWJvdW5jZVJlc2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMuYXV0b0hlaWdodCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFJlc2l6ZSk7XG4gICAgICB0aGlzLmRlYm91bmNlKHRoaXMuY2FsY3VsYXRlVmlzaWJsZUl0ZW1zLmJpbmQodGhpcyksIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgZGVib3VuY2UoZnVuYzogKCkgPT4gdm9pZCwgZGVsYXk6IG51bWJlcikge1xuICAgIHRoaXMudGltZW91dFJlc2l6ZSA9IHNldFRpbWVvdXQoZnVuYywgZGVsYXkpO1xuICB9XG5cbiAgZ2V0SW5wdXRXaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSAodGhpcy5jbGVhbiA/IDgwIDogNDApO1xuICB9XG5cbiAgZ2V0RGlzY2xhaW1lcnNXaWR0aCgpIHtcbiAgICBjb25zdCBkaXNjbGFpbWVycyA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3BvLWRpc2NsYWltZXInKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShkaXNjbGFpbWVycykubWFwKGRpc2NsYWltZXIgPT4gZGlzY2xhaW1lclsnb2Zmc2V0V2lkdGgnXSk7XG4gIH1cblxuICBjYWxjdWxhdGVWaXNpYmxlSXRlbXMoKSB7XG4gICAgY29uc3QgZGlzY2xhaW1lcnNXaWR0aCA9IHRoaXMuZ2V0RGlzY2xhaW1lcnNXaWR0aCgpO1xuICAgIGNvbnN0IGlucHV0V2lkdGggPSB0aGlzLmdldElucHV0V2lkdGgoKTtcbiAgICBjb25zdCBleHRyYURpc2NsYWltZXJTaXplID0gMzg7XG4gICAgY29uc3QgZGlzY2xhaW1lcnNWaXNpYmxlID0gZGlzY2xhaW1lcnNXaWR0aFswXTtcblxuICAgIGNvbnN0IG5ld0Rpc2NsYWltZXJzID0gW107XG4gICAgY29uc3QgZGlzY2xhaW1lcnMgPSB0aGlzLmRpc2NsYWltZXJzO1xuXG4gICAgaWYgKGlucHV0V2lkdGggPiAwKSB7XG4gICAgICBsZXQgc3VtID0gMDtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaXNjbGFpbWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdW0gKz0gZGlzY2xhaW1lcnNXaWR0aFtpXTtcbiAgICAgICAgbmV3RGlzY2xhaW1lcnMucHVzaChkaXNjbGFpbWVyc1tpXSk7XG5cbiAgICAgICAgaWYgKHN1bSA+IGlucHV0V2lkdGgpIHtcbiAgICAgICAgICBzdW0gLT0gZGlzY2xhaW1lcnNXaWR0aFtpXTtcbiAgICAgICAgICB0aGlzLmlzQ2FsY3VsYXRlVmlzaWJsZUl0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRpc2NsYWltZXJzVmlzaWJsZSB8fCAhZGlzY2xhaW1lcnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpID09PSBkaXNjbGFpbWVycy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmlzQ2FsY3VsYXRlVmlzaWJsZUl0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1bSArIGV4dHJhRGlzY2xhaW1lclNpemUgPiBpbnB1dFdpZHRoKSB7XG4gICAgICAgICAgbmV3RGlzY2xhaW1lcnMuc3BsaWNlKC0yLCAyKTtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9ICcrJyArIChkaXNjbGFpbWVycy5sZW5ndGggKyAxIC0gaSkudG9TdHJpbmcoKTtcbiAgICAgICAgICBuZXdEaXNjbGFpbWVycy5wdXNoKHsgdmFsdWU6ICcnLCBsYWJlbDogbGFiZWwgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3RGlzY2xhaW1lcnMuc3BsaWNlKC0xLCAxKTtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9ICcrJyArIChkaXNjbGFpbWVycy5sZW5ndGggLSBpKS50b1N0cmluZygpO1xuICAgICAgICAgIG5ld0Rpc2NsYWltZXJzLnB1c2goeyB2YWx1ZTogJycsIGxhYmVsOiBsYWJlbCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmlzaWJsZURpc2NsYWltZXJzID0gWy4uLm5ld0Rpc2NsYWltZXJzXTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbGxvd2VkT3Blbk1vZGFsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHNlcnZpY2UgaW5mb3JtZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gISEodGhpcy5zZXJ2aWNlICYmICF0aGlzLmRpc2FibGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RmllbGRzKG9iamVjdFNlbGVjdGVkLCBwcm9wZXJ0aWVzKSB7XG4gICAgbGV0IGZvcm1hdGVkRmllbGQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydGllcykpIHtcbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICBpZiAob2JqZWN0U2VsZWN0ZWQgJiYgb2JqZWN0U2VsZWN0ZWRbcHJvcGVydHldKSB7XG4gICAgICAgICAgaWYgKCFmb3JtYXRlZEZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtYXRlZEZpZWxkID0gb2JqZWN0U2VsZWN0ZWRbcHJvcGVydHldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXRlZEZpZWxkID0gZm9ybWF0ZWRGaWVsZCArICcgLSAnICsgb2JqZWN0U2VsZWN0ZWRbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9ybWF0ZWRGaWVsZCkge1xuICAgICAgZm9ybWF0ZWRGaWVsZCA9IG9iamVjdFNlbGVjdGVkW3RoaXMuZmllbGRWYWx1ZV07XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRlZEZpZWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbnB1dFZhbHVlV2lwb2llbGRGb3JtYXQob2JqZWN0U2VsZWN0ZWQ6IGFueSkge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBPYmplY3Qua2V5cyhvYmplY3RTZWxlY3RlZCkubGVuZ3RoID09PSAwO1xuICAgIGxldCBmaWVsZEZvcm1hdGVkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5maWVsZEZvcm1hdCkpIHtcbiAgICAgIGZpZWxkRm9ybWF0ZWQgPSB0aGlzLmZvcm1hdEZpZWxkcyhvYmplY3RTZWxlY3RlZCwgdGhpcy5maWVsZEZvcm1hdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkRm9ybWF0ZWQgPSB0aGlzLmZpZWxkRm9ybWF0KG9iamVjdFNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICB0aGlzLm9sZFZhbHVlID0gaXNFbXB0eSA/ICcnIDogZmllbGRGb3JtYXRlZDtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IGlzRW1wdHkgPyAnJyA6IGZpZWxkRm9ybWF0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lclxuICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtwLWlkXT1cImlkXCJcbiAgW3AtbGFiZWxdPVwibGFiZWxcIlxuICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gIFtwLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgW3Atc2hvdy1yZXF1aXJlZF09XCJzaG93UmVxdWlyZWRcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJwby1maWVsZC1jb250YWluZXItY29udGVudCBwby1sb29rdXBcIlxuICAgIFtjbGFzcy5wby1sb29rdXAtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICpuZ0lmPVwiIWRpc2NsYWltZXJzLmxlbmd0aDsgZWxzZSBkaXNjbGFpbWVyc1RlbXBsYXRlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJwby1zZWFyY2gtY29udGFpbmVyLXdyYXBwZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjaW5wXG4gICAgICAgIGNsYXNzPVwicG8tbG9va3VwLWlucHV0IHBvLWxvb2t1cC1pbnB1dC10cmlnZ2VyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY2xlYW4gJiYgaW5wLnZhbHVlID8gJ3BvLWlucHV0LWRvdWJsZS1pY29uLXJpZ2h0JyA6ICdwby1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2F1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAoYmx1cik9XCJzZWFyY2hFdmVudCgpXCJcbiAgICAgIC8+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1yaWdodCBwby1sb29rdXAtYnV0dG9uc1wiPlxuICAgICAgICA8cG8tY2xlYW5cbiAgICAgICAgICAqbmdJZj1cImNsZWFuICYmICFkaXNhYmxlZCAmJiAhIWlucC52YWx1ZVwiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxpdGVyYWxzLmNsZWFuXCJcbiAgICAgICAgICBjbGFzcz1cInBvLWljb24taW5wdXQgcG8tbG9va3VwLWJ1dHRvbiBwby1sb29rdXAtYnV0dG9uLWNsZWFuXCJcbiAgICAgICAgICBjbGFzcz1cInBvLWxvb2t1cC1idXR0b24gcG8tbG9va3VwLWJ1dHRvbi1jbGVhblwiXG4gICAgICAgICAgW3AtZWxlbWVudC1yZWZdPVwiaW5wXCJcbiAgICAgICAgICAocC1jaGFuZ2UtZXZlbnQpPVwiY2xlYW5Nb2RlbCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYW5Nb2RlbCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xlYW5Nb2RlbCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9wby1jbGVhbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICNpY29uTG9va3VwXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInBvLWxvb2t1cC1idXR0b24gcG8tbG9va3VwLWJ1dHRvbi10cmlnZ2VyIHBvLWZpZWxkLWljb25cIlxuICAgICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbYXJpYUxhYmVsXT1cImxpdGVyYWxzLnNlYXJjaFwiXG4gICAgICAgICAgKHAtY2hhbmdlLWV2ZW50KT1cIm9wZW5Mb29rdXAoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5Mb29rdXAoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5Mb29rdXAoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHBvLWljb24gcC1pY29uPVwiSUNPTl9TRUFSQ0hcIiBbY2xhc3MucG8tZmllbGQtaWNvbl09XCIhZGlzYWJsZWRcIj48L3BvLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbVxuICAgIFtwLWhlbHBdPVwiaGVscFwiXG4gICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtwLWVycm9yLXBhdHRlcm5dPVwiZ2V0RXJyb3JQYXR0ZXJuKClcIlxuICAgIFtwLWVycm9yLWxpbWl0XT1cImVycm9yTGltaXRcIlxuICAgIFtwLWFwcGVuZC1pbi1ib2R5XT1cImVycm9yQXBwZW5kQm94XCJcbiAgPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2Rpc2NsYWltZXJzVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwby1sb29rdXBcIiBbY2xhc3MucG8tbG9va3VwLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPGRpdlxuICAgICAgI2lucFxuICAgICAgW3RhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgIGNsYXNzPVwicG8tbG9va3VwLWlucHV0IHBvLWlucHV0LWljb24tcmlnaHQgcG8tbG9va3VwLWlucHV0IHBvLWljb24taW5wdXRcIlxuICAgICAgW25nQ2xhc3NdPVwiY2xlYW4gJiYgaW5wLnZhbHVlID8gJ3BvLWlucHV0LWRvdWJsZS1pY29uLXJpZ2h0JyA6ICdwby1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICBbY2xhc3MucG8tbG9va3VwLWlucHV0LWF1dG9dPVwiYXV0b0hlaWdodFwiXG4gICAgICBbY2xhc3MucG8tbG9va3VwLWlucHV0LXN0YXRpY109XCIhYXV0b0hlaWdodFwiXG4gICAgICBbY2xhc3MucG8tbG9va3VwLWlucHV0LXBhZGRpbmctYnV0dG9uLWNsZWFuXT1cImNsZWFuXCJcbiAgICAgIFtjbGFzcy5wby1sb29rdXAtaW5wdXQtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgID5cbiAgICAgIDxzcGFuICpuZ0lmPVwicGxhY2Vob2xkZXIgJiYgIWRpc2NsYWltZXJzPy5sZW5ndGhcIiBjbGFzcz1cInBvLWxvb2t1cC1pbnB1dC1wbGFjZWhvbGRlclwiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8cG8tZGlzY2xhaW1lclxuICAgICAgICAqbmdGb3I9XCJsZXQgZGlzY2xhaW1lciBvZiB2aXNpYmxlRGlzY2xhaW1lcnNcIlxuICAgICAgICBjbGFzcz1cInBvLWxvb2t1cC1pbnB1dC1kaXNjbGFpbWVyXCJcbiAgICAgICAgW3AtbGFiZWxdPVwiZGlzY2xhaW1lci5sYWJlbFwiXG4gICAgICAgIFtwLXZhbHVlXT1cImRpc2NsYWltZXIudmFsdWVcIlxuICAgICAgICBbcC1oaWRlLWNsb3NlXT1cImRpc2NsYWltZXIudmFsdWUgPT09ICcnIHx8IGRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLnBvLWNsaWNrYWJsZV09XCJkaXNjbGFpbWVyLnZhbHVlID09PSAnJyAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAocC1jbG9zZS1hY3Rpb24pPVwiY2xvc2VEaXNjbGFpbWVyKGRpc2NsYWltZXIudmFsdWUpXCJcbiAgICAgID5cbiAgICAgIDwvcG8tZGlzY2xhaW1lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtaWNvbi1jb250YWluZXItcmlnaHQgcG8tbG9va3VwLWJ1dHRvbnNcIj5cbiAgICAgIDxwby1jbGVhblxuICAgICAgICAqbmdJZj1cImNsZWFuICYmICFkaXNhYmxlZCAmJiAhIWlucC52YWx1ZVwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxpdGVyYWxzLmNsZWFuXCJcbiAgICAgICAgY2xhc3M9XCJwby1sb29rdXAtYnV0dG9uIHBvLWxvb2t1cC1idXR0b24tY2xlYW5cIlxuICAgICAgICBbcC1lbGVtZW50LXJlZl09XCJpbnBcIlxuICAgICAgICAocC1jaGFuZ2UtZXZlbnQpPVwiY2xlYW5Nb2RlbCgpXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFuTW9kZWwoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbGVhbk1vZGVsKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgID5cbiAgICAgIDwvcG8tY2xlYW4+XG4gICAgICA8ZGl2XG4gICAgICAgICNpY29uTG9va3VwXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInBvLWxvb2t1cC1idXR0b24gcG8tbG9va3VwLWJ1dHRvbi10cmlnZ2VyIHBvLWZpZWxkLWljb25cIlxuICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbi1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFthcmlhTGFiZWxdPVwibGl0ZXJhbHMuc2VhcmNoXCJcbiAgICAgICAgKHAtY2hhbmdlLWV2ZW50KT1cIm9wZW5Mb29rdXAoKVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuTG9va3VwKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3Blbkxvb2t1cCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICA+XG4gICAgICAgIDxwby1pY29uIHAtaWNvbj1cIklDT05fU0VBUkNIXCIgW2NsYXNzLnBvLWZpZWxkLWljb25dPVwiIWRpc2FibGVkXCI+PC9wby1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==