@decaf-ts/for-angular 0.0.9 → 0.0.11

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 (28) hide show
  1. package/dist/lib/components/empty-state/empty-state.component.d.ts +3 -3
  2. package/dist/lib/components/fieldset/fieldset.component.d.ts +1 -1
  3. package/dist/lib/components/filter/filter.component.d.ts +2 -2
  4. package/dist/lib/components/layout/layout.component.d.ts +2 -2
  5. package/dist/lib/components/list/list.component.d.ts +3 -3
  6. package/dist/lib/components/list-item/list-item.component.d.ts +3 -3
  7. package/dist/lib/components/model-renderer/model-renderer.component.d.ts +1 -1
  8. package/dist/lib/components/pagination/constants.d.ts +1 -1
  9. package/dist/lib/components/pagination/pagination.component.d.ts +2 -2
  10. package/dist/lib/components/searchbar/searchbar.component.d.ts +2 -2
  11. package/dist/lib/engine/NgxBaseComponent.d.ts +1 -1
  12. package/dist/lib/esm2022/components/component-renderer/component-renderer.component.mjs +3 -3
  13. package/dist/lib/esm2022/components/crud-field/crud-field.component.mjs +2 -2
  14. package/dist/lib/esm2022/components/crud-form/crud-form.component.mjs +2 -2
  15. package/dist/lib/esm2022/components/empty-state/empty-state.component.mjs +5 -5
  16. package/dist/lib/esm2022/components/fieldset/fieldset.component.mjs +4 -4
  17. package/dist/lib/esm2022/components/filter/filter.component.mjs +5 -5
  18. package/dist/lib/esm2022/components/layout/layout.component.mjs +3 -3
  19. package/dist/lib/esm2022/components/list/list.component.mjs +5 -5
  20. package/dist/lib/esm2022/components/list-item/list-item.component.mjs +6 -6
  21. package/dist/lib/esm2022/components/model-renderer/model-renderer.component.mjs +2 -2
  22. package/dist/lib/esm2022/components/pagination/constants.mjs +1 -1
  23. package/dist/lib/esm2022/components/pagination/pagination.component.mjs +4 -4
  24. package/dist/lib/esm2022/components/searchbar/searchbar.component.mjs +5 -5
  25. package/dist/lib/esm2022/engine/NgxBaseComponent.mjs +2 -3
  26. package/dist/lib/fesm2022/decaf-ts-for-angular.mjs +3029 -3036
  27. package/dist/lib/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
  28. package/package.json +4 -2
@@ -3,10 +3,10 @@ import { Component, inject, Input } from '@angular/core';
3
3
  import { IonCard, IonCardContent, IonIcon, IonTitle, NavController } from '@ionic/angular/standalone';
4
4
  import * as allIcons from 'ionicons/icons';
5
5
  import { addIcons } from 'ionicons';
6
- import { ForAngularModule } from 'src/lib/for-angular.module';
7
- import { Dynamic } from 'src/lib/engine';
8
- import { stringToBoolean } from 'src/lib/helpers';
9
- import { NgxBaseComponent } from 'src/lib/engine/NgxBaseComponent';
6
+ import { ForAngularModule } from '../../for-angular.module';
7
+ import { Dynamic } from '../../engine';
8
+ import { stringToBoolean } from '../../helpers';
9
+ import { NgxBaseComponent } from '../../engine/NgxBaseComponent';
10
10
  import { DomSanitizer } from '@angular/platform-browser';
11
11
  import { TranslateService } from '@ngx-translate/core';
12
12
  import * as i0 from "@angular/core";
@@ -345,4 +345,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
345
345
  }], searchValue: [{
346
346
  type: Input
347
347
  }] } });
348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sRUFDUCxRQUFRLEVBQ1IsYUFBYSxFQUNkLE1BQ0ksMkJBQTJCLENBQUM7QUFDakMsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUl2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQWdCSSxJQUFNLG1CQUFtQixHQUF6QixNQUFNLG1CQUFvQixTQUFRLGdCQUFnQjtJQWtNdkQ7Ozs7Ozs7T0FPRztJQUNIO1FBQ0UsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUF6TS9COzs7Ozs7Ozs7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QW1DQSxrYUQ0QkksZ0JBQWdCLDZYQUNoQixPQUFPLHlMQUNQLGNBQWMsK0VBRWQsT0FBTzs7QUFJRSxtQkFBbUI7SUFmL0IsT0FBTyxFQUFFOztHQWVHLG1CQUFtQixDQW9VL0I7OzRGQXBVWSxtQkFBbUI7a0JBZC9CLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUDt3QkFDUCxnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxRQUFRO3dCQUNSLE9BQU87cUJBQ1I7d0RBZ0JELEtBQUs7c0JBREosS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWNOLGFBQWE7c0JBRFosS0FBSztnQkFjTixRQUFRO3NCQURQLEtBQUs7Z0JBY04sSUFBSTtzQkFESCxLQUFLO2dCQWFOLFFBQVE7c0JBRFAsS0FBSztnQkFhTixTQUFTO3NCQURSLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sV0FBVztzQkFEVixLQUFLO2dCQWFOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbG9yLCBQcmVkZWZpbmVkQ29sb3JzIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtcbiAgSW9uQ2FyZCxcbiAgSW9uQ2FyZENvbnRlbnQsXG4gIElvbkljb24sXG4gIElvblRpdGxlLFxuICBOYXZDb250cm9sbGVyXG59XG5mcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCAqIGFzIGFsbEljb25zIGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSB9IGZyb20gJ3NyYy9saWIvZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJ3NyYy9saWIvZW5naW5lJztcbmltcG9ydCB7IHN0cmluZ1RvQm9vbGVhbiB9IGZyb20gJ3NyYy9saWIvaGVscGVycyc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnc3JjL2xpYi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICdzcmMvbGliL2VuZ2luZS90eXBlcyc7XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgYWN0aW9ucy5cbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzXG4gKiB3aGVuIG5vIGRhdGEgaXMgYXZhaWxhYmxlIG9yIHdoZW4gYSB1c2VyIG5lZWRzIHRvIHRha2UgYW4gYWN0aW9uIHRvIHBvcHVsYXRlIGNvbnRlbnQuXG4gKiBJdCBpbmNsdWRlcyBjdXN0b21pemFibGUgdGl0bGUsIHN1YnRpdGxlLCBpY29uLCBhbmQgYWN0aW9uIGJ1dHRvbiBlbGVtZW50cyB0aGF0IGNhbiBiZVxuICogc3R5bGVkIGFuZCBjb25maWd1cmVkIHRocm91Z2ggaW5wdXQgcHJvcGVydGllcy4gVGhlIGNvbXBvbmVudCBzdXBwb3J0cyBsb2NhbGl6YXRpb25cbiAqIGFuZCBjYW4gdHJpZ2dlciBuYXZpZ2F0aW9uIG9yIGN1c3RvbSBhY3Rpb25zIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuICpcbiAqIEBtZXJtYWlkXG4gKiBjbGFzc0RpYWdyYW1cbiAqICAgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCB7XG4gKiAgICAgK3N0cmluZyB0aXRsZVxuICogICAgICtzdHJpbmcgdGl0bGVDb2xvclxuICogICAgICtzdHJpbmcgc3VidGl0bGVcbiAqICAgICArc3RyaW5nIHN1YnRpdGxlQ29sb3JcbiAqICAgICArU3RyaW5nT3JCb29sZWFuIHNob3dJY29uXG4gKiAgICAgK3N0cmluZyBpY29uXG4gKiAgICAgK3N0cmluZyBpY29uU2l6ZVxuICogICAgICtQcmVkZWZpbmVkQ29sb3JzIGljb25Db2xvclxuICogICAgICtzdHJpbmd8RnVuY3Rpb24gYnV0dG9uTGlua1xuICogICAgICtzdHJpbmcgYnV0dG9uVGV4dFxuICogICAgICtzdHJpbmcgYnV0dG9uRmlsbFxuICogICAgICtDb2xvciBidXR0b25Db2xvclxuICogICAgICtzdHJpbmcgYnV0dG9uU2l6ZVxuICogICAgICtzdHJpbmcgc2VhcmNoVmFsdWVcbiAqICAgICAtTmF2Q29udHJvbGxlciBuYXZDb250cm9sbGVyXG4gKiAgICAgK25nT25Jbml0KClcbiAqICAgICAraGFuZGxlQ2xpY2soKVxuICogICB9XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBOZ3hCYXNlQ29tcG9uZW50XG4gKiAgIEVtcHR5U3RhdGVDb21wb25lbnQgLS18PiBPbkluaXRcbiAqXG4gKiBAZXh0ZW5kcyB7Tmd4QmFzZUNvbXBvbmVudH1cbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1lbXB0eS1zdGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkNhcmQsXG4gICAgSW9uQ2FyZENvbnRlbnQsXG4gICAgSW9uVGl0bGUsXG4gICAgSW9uSWNvblxuICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1haW4gdGl0bGUgZGlzcGxheWVkIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBwcmltYXJ5IG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgZW1wdHkgc3RhdGUgY29tcG9uZW50LlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHdoeSB0aGV5J3JlIHNlZWluZyBhbiBlbXB0eSB2aWV3LlxuICAgKiBJZiB0cmFuc2xhdGFibGUgaXMgdHJ1ZSwgdGhpcyB3aWxsIGJlIHByb2Nlc3NlZCB0aHJvdWdoIHRoZSBsb2NhbGl6YXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBcInRpdGxlXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmcgPSBcInRpdGxlXCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIHRpdGxlIHRleHQuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSB0aXRsZSB0ZXh0IHVzaW5nIHRoZSBhcHBsaWNhdGlvbidzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhlIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgY29sb3IgdmFyaWFibGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24ncyB0aGVtZS5cbiAgICogVGhlIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IHRoaXMgd2l0aCBcImNvbG9yLVwiIHRvIGNyZWF0ZSB0aGUgQ1NTIGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnZ3JheS02J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGl0bGVDb2xvciA9ICdncmF5LTYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlY29uZGFyeSBtZXNzYWdlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBvciBpbnN0cnVjdGlvbnMgYmVsb3cgdGhlIG1haW4gdGl0bGUuXG4gICAqIFRoaXMgdGV4dCBpcyB0eXBpY2FsbHkgdXNlZCB0byBndWlkZSB0aGUgdXNlciBvbiB3aGF0IGFjdGlvbnMgdGhleSBjYW4gdGFrZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBzdWJ0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgc3VidGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHN1YnRpdGxlQ29sb3I6IHN0cmluZyA9ICdncmF5LTQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaWNvbiBpcyBkaXNwbGF5ZWQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgdGhlIHZpc3VhbCBpY29uIHNob3VsZCBiZSBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIFRoaXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEgYm9vbGVhbiBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbi5cbiAgICogSWNvbnMgaGVscCB2aXN1YWxseSBjb21tdW5pY2F0ZSB0aGUgZW1wdHkgc3RhdGUgY29udGV4dCB0byB1c2Vycy5cbiAgICpcbiAgICogQHR5cGUge1N0cmluZ09yQm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd0ljb246IFN0cmluZ09yQm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggaWNvbiB0byBzaG93IHdoZW4gc2hvd0ljb24gaXMgdHJ1ZS5cbiAgICogVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBpY29uIHN5c3RlbSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbixcbiAgICogYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYW4gYXZhaWxhYmxlIGljb24gbmFtZS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aS1pbmZvLXNxdWFyZS1yb3VuZGVkXCJcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb246IHN0cmluZyA9IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBzaG93biBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIENhbiBiZSBlaXRoZXIgJ2xhcmdlJyBvciAnc21hbGwnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ2xhcmdlJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvblNpemU/OiAnbGFyZ2UnIHwgJ3NtYWxsJyA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGRpc3BsYXllZCBpY29uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgaWNvbiB1c2luZyBJb25pYydzIHByZWRlZmluZWQgY29sb3Igc3lzdGVtLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgaWNvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtQcmVkZWZpbmVkQ29sb3JzIHwgdW5kZWZpbmVkfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgaWNvbkNvbG9yPzogUHJlZGVmaW5lZENvbG9ycyA9ICdtZWRpdW0nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG5hdmlnYXRpb24gdGFyZ2V0IG9yIGFjdGlvbiBmb3IgdGhlIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoZXJlIHRoZSBidXR0b24gc2hvdWxkIG5hdmlnYXRlIHRvIHdoZW4gY2xpY2tlZCBvciB3aGF0IGZ1bmN0aW9uXG4gICAqIGl0IHNob3VsZCBleGVjdXRlLiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBVUkwgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIG5hdmlnYXRpb24uXG4gICAqIFdoZW4gbm90IHByb3ZpZGVkLCB0aGUgYnV0dG9uIHdpbGwgbm90IHBlcmZvcm0gYW55IGFjdGlvbi5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IEZ1bmN0aW9uTGlrZSB8IHVuZGVmaW5lZH1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkxpbms/OiBzdHJpbmcgfCBGdW5jdGlvbkxpa2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdGV4dCBkaXNwbGF5ZWQgb24gdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgbGFiZWwgZm9yIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgYnV0dG9uIHdpbGwgbm90IGRpc3BsYXkgYW55IHRleHQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGZpbGwgc3R5bGUgb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIGJ1dHRvbiB1c2luZyBJb25pYydzIGJ1dHRvbiBmaWxsIG9wdGlvbnMuXG4gICAqICdzb2xpZCcgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoIGEgc29saWQgYmFja2dyb3VuZCwgJ291dGxpbmUnIGNyZWF0ZXMgYSBidXR0b24gd2l0aFxuICAgKiBqdXN0IGEgYm9yZGVyLCBhbmQgJ2NsZWFyJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGggbm8gYmFja2dyb3VuZCBvciBib3JkZXIuXG4gICAqXG4gICAqIEB0eXBlIHsnY2xlYXInIHwgJ3NvbGlkJyB8ICdvdXRsaW5lJ31cbiAgICogQGRlZmF1bHQgJ3NvbGlkJ1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uRmlsbDogJ2NsZWFyJyB8ICdzb2xpZCcgfCAnb3V0bGluZScgPSAgJ3NvbGlkJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3IgdGhlIGJ1dHRvbiB1c2luZyBJb25pYydzIGNvbG9yIHN5c3RlbS5cbiAgICogVGhpcyBhbGxvd3MgdGhlIGJ1dHRvbiB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzY2hlbWUuXG4gICAqXG4gICAqIEB0eXBlIHtDb2xvcn1cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25Db2xvcjogQ29sb3IgPSAgJ3ByaW1hcnknO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpemUgb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IENvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidXR0b24gc2hvd24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBDYW4gYmUgJ2xhcmdlJywgJ3NtYWxsJywgb3IgJ2RlZmF1bHQnIHRvIGFjY29tbW9kYXRlIGRpZmZlcmVudCBsYXlvdXQgbmVlZHMuXG4gICAqXG4gICAqIEB0eXBlIHsnbGFyZ2UnIHwgJ3NtYWxsJyB8ICdkZWZhdWx0J31cbiAgICogQGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25TaXplOiAnbGFyZ2UnIHwgJ3NtYWxsJyB8ICdkZWZhdWx0JyA9ICAnZGVmYXVsdCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VhcmNoIHZhbHVlIHRoYXQgcmVzdWx0ZWQgaW4gbm8gcmVzdWx0cy5cbiAgICogQHN1bW1hcnkgV2hlbiB0aGUgZW1wdHkgc3RhdGUgaXMgc2hvd24gZHVlIHRvIGEgc2VhcmNoIHdpdGggbm8gcmVzdWx0cyxcbiAgICogdGhpcyBwcm9wZXJ0eSBjYW4gaG9sZCB0aGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZC4gVGhpcyBjYW4gYmUgZGlzcGxheWVkXG4gICAqIGluIHRoZSBlbXB0eSBzdGF0ZSBtZXNzYWdlIHRvIHByb3ZpZGUgY29udGV4dCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFZhbHVlITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2VydmljZSBmb3IgaGFuZGxpbmcgbmF2aWdhdGlvbiBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBJbmplY3RlZCBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgbmF2aWdhdGluZyBiZXR3ZWVuIHJvdXRlcy5cbiAgICogVGhpcyBzZXJ2aWNlIGlzIHVzZWQgd2hlbiB0aGUgYnV0dG9uTGluayBpcyBhIHN0cmluZyBVUkwgdG8gbmF2aWdhdGUgdG8gdGhhdCBsb2NhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge05hdkNvbnRyb2xsZXJ9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIgPSBpbmplY3QoTmF2Q29udHJvbGxlcik7XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIHNlYXJjaFN1YnRpdGxlITogU2FmZUh0bWxcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBFbXB0eVN0YXRlQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBFbXB0eVN0YXRlQ29tcG9uZW50IGJ5IGNhbGxpbmcgdGhlIHBhcmVudCBjbGFzcyBjb25zdHJ1Y3RvclxuICAgKiB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgbG9nZ2luZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzXG4gICAqIGEgc3RhbmRhcmRpemVkIHdheSB0byBkaXNwbGF5IGVtcHR5IHN0YXRlIG1lc3NhZ2VzIHdpdGggb3B0aW9uYWwgaWNvbnMgYW5kIGFjdGlvbiBidXR0b25zLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFbXB0eVN0YXRlQ29tcG9uZW50XCIpO1xuICAgIGFkZEljb25zKGFsbEljb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBwcm9jZXNzaW5nIGJvb2xlYW4gaW5wdXRzLCBhcHBseWluZyBsb2NhbGl6YXRpb24gdG8gdGV4dFxuICAgKiBlbGVtZW50cyBpZiB0cmFuc2xhdGlvbiBpcyBlbmFibGVkLCBhbmQgZm9ybWF0dGluZyBDU1MgY2xhc3NlcyBmb3IgdGl0bGUgYW5kIHN1YnRpdGxlIGNvbG9ycy5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBieSBlbnN1cmluZyBhbGwgcHJvcGVydGllcyBhcmVcbiAgICogcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGxvY2FsaXplZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKlxuICAgKiAgIEEtPj5FOiBuZ09uSW5pdCgpXG4gICAqICAgRS0+PkU6IFByb2Nlc3MgdHJhbnNsYXRhYmxlIGZsYWdcbiAgICogICBFLT4+RTogUHJvY2VzcyBzaG93SWNvbiBmbGFnXG4gICAqICAgRS0+PkU6IEdldCBsb2NhbGUgc2V0dGluZ3NcbiAgICogICBhbHQgdHJhbnNsYXRhYmxlIGlzIHRydWVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSB0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIHN1YnRpdGxlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgYnV0dG9uVGV4dFxuICAgKiAgIGVuZFxuICAgKiAgIEUtPj5FOiBGb3JtYXQgdGl0bGUgQ1NTIGNsYXNzXG4gICAqICAgRS0+PkU6IEZvcm1hdCBzdWJ0aXRsZSBDU1MgY2xhc3NcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucGFyc2VQcm9wcyh0aGlzKTtcbiAgICB0aGlzLnRyYW5zbGF0YWJsZSA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnRyYW5zbGF0YWJsZSk7XG4gICAgdGhpcy5zaG93SWNvbiA9IHN0cmluZ1RvQm9vbGVhbih0aGlzLnNob3dJY29uKTtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKHRoaXMudHJhbnNsYXRhYmxlKTtcblxuICAgIC8vIGlmKHRoaXMudHJhbnNsYXRhYmxlKSB7XG4gICAgLy8gICB0aGlzLnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuc3VidGl0bGUgPSBnZW5lcmF0ZUxvY2FsZUZyb21TdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMuc3VidGl0bGUpO1xuICAgIC8vICAgdGhpcy5idXR0b25UZXh0ID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLmJ1dHRvblRleHQpO1xuICAgIC8vIH1cblxuICAgIHRoaXMudGl0bGVDb2xvciA9IGBkY2YtdGl0bGUgY29sb3ItJHt0aGlzLnRpdGxlQ29sb3J9YDtcbiAgICB0aGlzLnN1YnRpdGxlQ29sb3IgPSBgZGNmLXN1YnRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG5cbiAgICBpZih0aGlzLnNlYXJjaFZhbHVlICYmIHRoaXMudHJhbnNsYXRhYmxlKVxuICAgICAgdGhpcy5zZWFyY2hTdWJ0aXRsZSA9IGF3YWl0IHRoaXMuZ2V0U2VhcmNoU3VidGl0bGUodGhpcy5zdWJ0aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYWN0aW9uIGJ1dHRvbi5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBhY3Rpb24gYnV0dG9uIGluIHRoZSBlbXB0eSBzdGF0ZVxuICAgKiBjb21wb25lbnQuIEl0IHN1cHBvcnRzIHRocmVlIG5hdmlnYXRpb24gcGF0dGVybnM6IDEpIG5vIGFjdGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkLFxuICAgKiAyKSBjdXN0b20gZnVuY3Rpb24gZXhlY3V0aW9uIHdoZW4gYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uLCBhbmQgMykgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIFVSTFxuICAgKiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcuIFRoaXMgZmxleGliaWxpdHkgYWxsb3dzIHRoZSBlbXB0eSBzdGF0ZSB0byB0cmlnZ2VyIHZhcmlvdXMgYWN0aW9uc1xuICAgKiBiYXNlZCBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIHVzZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IE4gYXMgTmF2Q29udHJvbGxlclxuICAgKlxuICAgKiAgIFUtPj5FOiBDbGljayBhY3Rpb24gYnV0dG9uXG4gICAqICAgRS0+PkU6IGhhbmRsZUNsaWNrKClcbiAgICogICBhbHQgYnV0dG9uTGluayBpcyBub3QgcHJvdmlkZWRcbiAgICogICAgIEUtLT4+VTogUmV0dXJuIGZhbHNlIChubyBhY3Rpb24pXG4gICAqICAgZWxzZSBidXR0b25MaW5rIGlzIGEgZnVuY3Rpb25cbiAgICogICAgIEUtPj5FOiBFeGVjdXRlIGJ1dHRvbkxpbmsgZnVuY3Rpb25cbiAgICogICAgIEUtLT4+VTogUmV0dXJuIGZ1bmN0aW9uIHJlc3VsdFxuICAgKiAgIGVsc2UgYnV0dG9uTGluayBpcyBhIFVSTCBzdHJpbmdcbiAgICogICAgIEUtPj5OOiBuYXZpZ2F0ZUZvcndhcmQoYnV0dG9uTGluaylcbiAgICogICAgIE4tLT4+RTogUmV0dXJuIG5hdmlnYXRpb24gcmVzdWx0XG4gICAqICAgICBFLS0+PlU6IFJldHVybiBuYXZpZ2F0aW9uIHJlc3VsdFxuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbj59XG4gICAqICAgLSBmYWxzZSBpZiBubyBhY3Rpb24gaXMgdGFrZW5cbiAgICogICAtIFRoZSByZXN1bHQgb2YgdGhlIGJ1dHRvbkxpbmsgZnVuY3Rpb24gaWYgaXQncyBhIGZ1bmN0aW9uXG4gICAqICAgLSBBIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBuYXZpZ2F0aW9uIHJlc3VsdCBpZiBidXR0b25MaW5rIGlzIGEgVVJMXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDbGljaygpOiBib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGZuID0gdGhpcy5idXR0b25MaW5rO1xuICAgIGlmKCFmbilcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihmbiBpbnN0YW5jZW9mIEZ1bmN0aW9uKVxuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgcmV0dXJuIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZUZvcndhcmQoZm4gYXMgc3RyaW5nKTtcbiAgfVxuXG5cbiAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGxvY2FsaXplZCBhbmQgc2FuaXRpemVkIHN1YnRpdGxlIGZvciBzZWFyY2ggcmVzdWx0cy5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgdGFrZXMgYSBjb250ZW50IHN0cmluZywgdHlwaWNhbGx5IHRoZSBzdWJ0aXRsZSwgYW5kIHByb2Nlc3NlcyBpdFxuICAgKiB0aHJvdWdoIHRoZSB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBJdCByZXBsYWNlcyBhIHBsYWNlaG9sZGVyICgndmFsdWUwJykgd2l0aCB0aGUgYWN0dWFsXG4gICAqIHNlYXJjaCB2YWx1ZSwgdGhlbiBzYW5pdGl6ZXMgdGhlIHJlc3VsdCB0byBzYWZlbHkgdXNlIGFzIEhUTUwuIFRoaXMgaXMgcGFydGljdWxhcmx5XG4gICAqIHVzZWZ1bCBmb3IgZGlzcGxheWluZyBkeW5hbWljLCBsb2NhbGl6ZWQgbWVzc2FnZXMgaW4gdGhlIGVtcHR5IHN0YXRlIHdoZW4gYSBzZWFyY2hcbiAgICogeWllbGRzIG5vIHJlc3VsdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgc3RyaW5nIHRvIGJlIHRyYW5zbGF0ZWQgYW5kIHByb2Nlc3NlZFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFNhZmVIdG1sPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBzYW5pdGl6ZWQgSFRNTCBzdHJpbmdcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgRSBhcyBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgVCBhcyBUcmFuc2xhdGVTZXJ2aWNlXG4gICAqICAgcGFydGljaXBhbnQgUyBhcyBEb21TYW5pdGl6ZXJcbiAgICpcbiAgICogICBFLT4+VDogaW5zdGFudChjb250ZW50LCB7J3ZhbHVlMCc6IHNlYXJjaFZhbHVlfSlcbiAgICogICBULS0+PkU6IFJldHVybiB0cmFuc2xhdGVkIHN0cmluZ1xuICAgKiAgIEUtPj5TOiBieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0cmFuc2xhdGVkU3RyaW5nKVxuICAgKiAgIFMtLT4+RTogUmV0dXJuIHNhbml0aXplZCBTYWZlSHRtbFxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgYXN5bmMgZ2V0U2VhcmNoU3VidGl0bGUoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxTYWZlSHRtbD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiB0aGlzLnNlYXJjaFZhbHVlfSk7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHJlc3VsdCk7XG4gIH1cbn1cbiIsIlxuPGlvbi1jYXJkIGlkPVwiZGNmLWNhcmQtZW1wdHktc3RhdGVcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgQGlmKGljb24gJiYgc2hvd0ljb24pIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgPGlvbi1pY29uXG4gICAgICAgICAgbmFtZT1cImFsZXJ0LWNpcmNsZS1vdXRsaW5lXCJcbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZih0aXRsZSkge1xuICAgICAgPGg1IFtjbGFzc109XCJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvaDU+XG4gICAgfVxuICAgIEBpZihzdWJ0aXRsZSkge1xuICAgICAgQGlmKCFzZWFyY2hWYWx1ZSkge1xuICAgICAgICA8cCBbY2xhc3NdPVwic3VidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwic3VidGl0bGVcIj48L3A+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cInN1YnRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInNlYXJjaFN1YnRpdGxlXCI+PC9wPlxuICAgICAgfVxuICAgIH1cbiAgICBAaWYoYnV0dG9uTGluayAmJiBidXR0b25UZXh0KSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIFtzaXplXT1cImJ1dHRvblNpemVcIlxuICAgICAgICAgIFtmaWxsXT1cImJ1dHRvbkZpbGxcIlxuICAgICAgICAgIFtjb2xvcl09XCJidXR0b25Db2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKClcIj5cbiAgICAgICAgICB7eyAgYnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvaW9uLWNhcmQtY29udGVudD5cbjwvaW9uLWNhcmQ+XG4iXX0=
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLE9BQU8sRUFDUCxRQUFRLEVBQ1IsYUFBYSxFQUNkLE1BQ0ksMkJBQTJCLENBQUM7QUFDakMsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQW1CLE1BQU0sY0FBYyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBSXZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBZ0JJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBa012RDs7Ozs7OztPQU9HO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQXpNL0I7Ozs7Ozs7OztXQVNH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LGthRDRCSSxnQkFBZ0IsNlhBQ2hCLE9BQU8seUxBQ1AsY0FBYywrRUFFZCxPQUFPOztBQUlFLG1CQUFtQjtJQWYvQixPQUFPLEVBQUU7O0dBZUcsbUJBQW1CLENBb1UvQjs7NEZBcFVZLG1CQUFtQjtrQkFkL0IsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLFFBQVE7d0JBQ1IsT0FBTztxQkFDUjt3REFnQkQsS0FBSztzQkFESixLQUFLO2dCQWNOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixRQUFRO3NCQURQLEtBQUs7Z0JBY04sYUFBYTtzQkFEWixLQUFLO2dCQWNOLFFBQVE7c0JBRFAsS0FBSztnQkFjTixJQUFJO3NCQURILEtBQUs7Z0JBYU4sUUFBUTtzQkFEUCxLQUFLO2dCQWFOLFNBQVM7c0JBRFIsS0FBSztnQkFhTixVQUFVO3NCQURULEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWNOLFVBQVU7c0JBRFQsS0FBSztnQkFhTixXQUFXO3NCQURWLEtBQUs7Z0JBYU4sVUFBVTtzQkFEVCxLQUFLO2dCQWFOLFdBQVc7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0ICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sb3IsIFByZWRlZmluZWRDb2xvcnMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge1xuICBJb25DYXJkLFxuICBJb25DYXJkQ29udGVudCxcbiAgSW9uSWNvbixcbiAgSW9uVGl0bGUsXG4gIE5hdkNvbnRyb2xsZXJcbn1cbmZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0ICogYXMgYWxsSWNvbnMgZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWMsIFN0cmluZ09yQm9vbGVhbiB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBzdHJpbmdUb0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGdW5jdGlvbkxpa2UgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnO1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBlbXB0eSBzdGF0ZSBtZXNzYWdlcyB3aXRoIG9wdGlvbmFsIGFjdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIHN0YW5kYXJkaXplZCB3YXkgdG8gZGlzcGxheSBlbXB0eSBzdGF0ZSBtZXNzYWdlc1xuICogd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZSBvciB3aGVuIGEgdXNlciBuZWVkcyB0byB0YWtlIGFuIGFjdGlvbiB0byBwb3B1bGF0ZSBjb250ZW50LlxuICogSXQgaW5jbHVkZXMgY3VzdG9taXphYmxlIHRpdGxlLCBzdWJ0aXRsZSwgaWNvbiwgYW5kIGFjdGlvbiBidXR0b24gZWxlbWVudHMgdGhhdCBjYW4gYmVcbiAqIHN0eWxlZCBhbmQgY29uZmlndXJlZCB0aHJvdWdoIGlucHV0IHByb3BlcnRpZXMuIFRoZSBjb21wb25lbnQgc3VwcG9ydHMgbG9jYWxpemF0aW9uXG4gKiBhbmQgY2FuIHRyaWdnZXIgbmF2aWdhdGlvbiBvciBjdXN0b20gYWN0aW9ucyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAbWVybWFpZFxuICogY2xhc3NEaWFncmFtXG4gKiAgIGNsYXNzIEVtcHR5U3RhdGVDb21wb25lbnQge1xuICogICAgICtzdHJpbmcgdGl0bGVcbiAqICAgICArc3RyaW5nIHRpdGxlQ29sb3JcbiAqICAgICArc3RyaW5nIHN1YnRpdGxlXG4gKiAgICAgK3N0cmluZyBzdWJ0aXRsZUNvbG9yXG4gKiAgICAgK1N0cmluZ09yQm9vbGVhbiBzaG93SWNvblxuICogICAgICtzdHJpbmcgaWNvblxuICogICAgICtzdHJpbmcgaWNvblNpemVcbiAqICAgICArUHJlZGVmaW5lZENvbG9ycyBpY29uQ29sb3JcbiAqICAgICArc3RyaW5nfEZ1bmN0aW9uIGJ1dHRvbkxpbmtcbiAqICAgICArc3RyaW5nIGJ1dHRvblRleHRcbiAqICAgICArc3RyaW5nIGJ1dHRvbkZpbGxcbiAqICAgICArQ29sb3IgYnV0dG9uQ29sb3JcbiAqICAgICArc3RyaW5nIGJ1dHRvblNpemVcbiAqICAgICArc3RyaW5nIHNlYXJjaFZhbHVlXG4gKiAgICAgLU5hdkNvbnRyb2xsZXIgbmF2Q29udHJvbGxlclxuICogICAgICtuZ09uSW5pdCgpXG4gKiAgICAgK2hhbmRsZUNsaWNrKClcbiAqICAgfVxuICogICBFbXB0eVN0YXRlQ29tcG9uZW50IC0tfD4gTmd4QmFzZUNvbXBvbmVudFxuICogICBFbXB0eVN0YXRlQ29tcG9uZW50IC0tfD4gT25Jbml0XG4gKlxuICogQGV4dGVuZHMge05neEJhc2VDb21wb25lbnR9XG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtZW1wdHktc3RhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZW1wdHktc3RhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9yQW5ndWxhck1vZHVsZSxcbiAgICBJb25DYXJkLFxuICAgIElvbkNhcmRDb250ZW50LFxuICAgIElvblRpdGxlLFxuICAgIElvbkljb25cbiAgXVxuXG59KVxuZXhwb3J0IGNsYXNzIEVtcHR5U3RhdGVDb21wb25lbnQgZXh0ZW5kcyBOZ3hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYWluIHRpdGxlIGRpc3BsYXllZCBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgcHJpbWFyeSBtZXNzYWdlIHRvIHNob3cgaW4gdGhlIGVtcHR5IHN0YXRlIGNvbXBvbmVudC5cbiAgICogVGhpcyB0ZXh0IGlzIHR5cGljYWxseSB1c2VkIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dCB3aHkgdGhleSdyZSBzZWVpbmcgYW4gZW1wdHkgdmlldy5cbiAgICogSWYgdHJhbnNsYXRhYmxlIGlzIHRydWUsIHRoaXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGUgbG9jYWxpemF0aW9uIHN5c3RlbS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgXCJ0aXRsZVwiXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nID0gXCJ0aXRsZVwiO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSB0aXRsZSB0ZXh0LlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGNvbG9yIGZvciB0aGUgdGl0bGUgdGV4dCB1c2luZyB0aGUgYXBwbGljYXRpb24ncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB0byBhIGNvbG9yIHZhcmlhYmxlIGRlZmluZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgdGhlbWUuXG4gICAqIFRoZSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggXCJjb2xvci1cIiB0byBjcmVhdGUgdGhlIENTUyBjbGFzcy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2dyYXktNidcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlQ29sb3IgPSAnZ3JheS02JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzZWNvbmRhcnkgbWVzc2FnZSBkaXNwbGF5ZWQgaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBhZGRpdGlvbmFsIGNvbnRleHQgb3IgaW5zdHJ1Y3Rpb25zIGJlbG93IHRoZSBtYWluIHRpdGxlLlxuICAgKiBUaGlzIHRleHQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZ3VpZGUgdGhlIHVzZXIgb24gd2hhdCBhY3Rpb25zIHRoZXkgY2FuIHRha2UuXG4gICAqIElmIHRyYW5zbGF0YWJsZSBpcyB0cnVlLCB0aGlzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGxvY2FsaXphdGlvbiBzeXN0ZW0uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzdWJ0aXRsZTogc3RyaW5nID0gXCJcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjb2xvciBvZiB0aGUgc3VidGl0bGUgdGV4dC5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3IgdGhlIHN1YnRpdGxlIHRleHQgdXNpbmcgdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc3lzdGVtLlxuICAgKiBUaGUgdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBjb2xvciB2YXJpYWJsZSBkZWZpbmVkIGluIHRoZSBhcHBsaWNhdGlvbidzIHRoZW1lLlxuICAgKiBUaGUgY29tcG9uZW50IHdpbGwgYXV0b21hdGljYWxseSBwcmVmaXggdGhpcyB3aXRoIFwiY29sb3ItXCIgdG8gY3JlYXRlIHRoZSBDU1MgY2xhc3MuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdncmF5LTQnXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzdWJ0aXRsZUNvbG9yOiBzdHJpbmcgPSAnZ3JheS00JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgdGhlIGljb24gaXMgZGlzcGxheWVkLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIHRoZSB2aXN1YWwgaWNvbiBzaG91bGQgYmUgc2hvd24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBUaGlzIGNhbiBiZSBwcm92aWRlZCBhcyBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4uXG4gICAqIEljb25zIGhlbHAgdmlzdWFsbHkgY29tbXVuaWNhdGUgdGhlIGVtcHR5IHN0YXRlIGNvbnRleHQgdG8gdXNlcnMuXG4gICAqXG4gICAqIEB0eXBlIHtTdHJpbmdPckJvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3dJY29uOiBTdHJpbmdPckJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG5hbWUgb2YgdGhlIGljb24gdG8gZGlzcGxheS5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHdoaWNoIGljb24gdG8gc2hvdyB3aGVuIHNob3dJY29uIGlzIHRydWUuXG4gICAqIFRoZSBjb21wb25lbnQgdXNlcyB0aGUgaWNvbiBzeXN0ZW0gZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24sXG4gICAqIGFuZCB0aGlzIHZhbHVlIHNob3VsZCBjb3JyZXNwb25kIHRvIGFuIGF2YWlsYWJsZSBpY29uIG5hbWUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IFwidGktaW5mby1zcXVhcmUtcm91bmRlZFwiXG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uOiBzdHJpbmcgPSBcInRpLWluZm8tc3F1YXJlLXJvdW5kZWRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBkaXNwbGF5ZWQgaWNvbi5cbiAgICogQHN1bW1hcnkgQ29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGljb24gc2hvd24gaW4gdGhlIGVtcHR5IHN0YXRlLlxuICAgKiBDYW4gYmUgZWl0aGVyICdsYXJnZScgb3IgJ3NtYWxsJyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCB1bmRlZmluZWR9XG4gICAqIEBkZWZhdWx0ICdsYXJnZSdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb25TaXplPzogJ2xhcmdlJyB8ICdzbWFsbCcgPSAnbGFyZ2UnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbG9yIG9mIHRoZSBkaXNwbGF5ZWQgaWNvbi5cbiAgICogQHN1bW1hcnkgU3BlY2lmaWVzIHRoZSBjb2xvciBmb3IgdGhlIGljb24gdXNpbmcgSW9uaWMncyBwcmVkZWZpbmVkIGNvbG9yIHN5c3RlbS5cbiAgICogVGhpcyBhbGxvd3MgdGhlIGljb24gdG8gbWF0Y2ggdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc2NoZW1lLlxuICAgKlxuICAgKiBAdHlwZSB7UHJlZGVmaW5lZENvbG9ycyB8IHVuZGVmaW5lZH1cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGljb25Db2xvcj86IFByZWRlZmluZWRDb2xvcnMgPSAnbWVkaXVtJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCBvciBhY3Rpb24gZm9yIHRoZSBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGVyZSB0aGUgYnV0dG9uIHNob3VsZCBuYXZpZ2F0ZSB0byB3aGVuIGNsaWNrZWQgb3Igd2hhdCBmdW5jdGlvblxuICAgKiBpdCBzaG91bGQgZXhlY3V0ZS4gVGhpcyBjYW4gYmUgZWl0aGVyIGEgVVJMIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBuYXZpZ2F0aW9uLlxuICAgKiBXaGVuIG5vdCBwcm92aWRlZCwgdGhlIGJ1dHRvbiB3aWxsIG5vdCBwZXJmb3JtIGFueSBhY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBGdW5jdGlvbkxpa2UgfCB1bmRlZmluZWR9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBidXR0b25MaW5rPzogc3RyaW5nIHwgRnVuY3Rpb25MaWtlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHRleHQgZGlzcGxheWVkIG9uIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgYWN0aW9uIGJ1dHRvbiBpbiB0aGUgZW1wdHkgc3RhdGUuXG4gICAqIElmIHRyYW5zbGF0YWJsZSBpcyB0cnVlLCB0aGlzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhlIGxvY2FsaXphdGlvbiBzeXN0ZW0uXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGJ1dHRvbiB3aWxsIG5vdCBkaXNwbGF5IGFueSB0ZXh0LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBmaWxsIHN0eWxlIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgdmlzdWFsIHN0eWxlIG9mIHRoZSBidXR0b24gdXNpbmcgSW9uaWMncyBidXR0b24gZmlsbCBvcHRpb25zLlxuICAgKiAnc29saWQnIGNyZWF0ZXMgYSBidXR0b24gd2l0aCBhIHNvbGlkIGJhY2tncm91bmQsICdvdXRsaW5lJyBjcmVhdGVzIGEgYnV0dG9uIHdpdGhcbiAgICoganVzdCBhIGJvcmRlciwgYW5kICdjbGVhcicgY3JlYXRlcyBhIGJ1dHRvbiB3aXRoIG5vIGJhY2tncm91bmQgb3IgYm9yZGVyLlxuICAgKlxuICAgKiBAdHlwZSB7J2NsZWFyJyB8ICdzb2xpZCcgfCAnb3V0bGluZSd9XG4gICAqIEBkZWZhdWx0ICdzb2xpZCdcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkZpbGw6ICdjbGVhcicgfCAnc29saWQnIHwgJ291dGxpbmUnID0gICdzb2xpZCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY29sb3Igb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sb3IgZm9yIHRoZSBidXR0b24gdXNpbmcgSW9uaWMncyBjb2xvciBzeXN0ZW0uXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBidXR0b24gdG8gbWF0Y2ggdGhlIGFwcGxpY2F0aW9uJ3MgY29sb3Igc2NoZW1lLlxuICAgKlxuICAgKiBAdHlwZSB7Q29sb3J9XG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uQ29sb3I6IENvbG9yID0gICdwcmltYXJ5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaXplIG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICAgKiBAc3VtbWFyeSBDb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnV0dG9uIHNob3duIGluIHRoZSBlbXB0eSBzdGF0ZS5cbiAgICogQ2FuIGJlICdsYXJnZScsICdzbWFsbCcsIG9yICdkZWZhdWx0JyB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgbGF5b3V0IG5lZWRzLlxuICAgKlxuICAgKiBAdHlwZSB7J2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCd9XG4gICAqIEBkZWZhdWx0ICdkZWZhdWx0J1xuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgYnV0dG9uU2l6ZTogJ2xhcmdlJyB8ICdzbWFsbCcgfCAnZGVmYXVsdCcgPSAgJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlYXJjaCB2YWx1ZSB0aGF0IHJlc3VsdGVkIGluIG5vIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFdoZW4gdGhlIGVtcHR5IHN0YXRlIGlzIHNob3duIGR1ZSB0byBhIHNlYXJjaCB3aXRoIG5vIHJlc3VsdHMsXG4gICAqIHRoaXMgcHJvcGVydHkgY2FuIGhvbGQgdGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWQuIFRoaXMgY2FuIGJlIGRpc3BsYXllZFxuICAgKiBpbiB0aGUgZW1wdHkgc3RhdGUgbWVzc2FnZSB0byBwcm92aWRlIGNvbnRleHQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hWYWx1ZSE6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgZm9yIGhhbmRsaW5nIG5hdmlnYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgSW5qZWN0ZWQgc2VydmljZSB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIG5hdmlnYXRpbmcgYmV0d2VlbiByb3V0ZXMuXG4gICAqIFRoaXMgc2VydmljZSBpcyB1c2VkIHdoZW4gdGhlIGJ1dHRvbkxpbmsgaXMgYSBzdHJpbmcgVVJMIHRvIG5hdmlnYXRlIHRvIHRoYXQgbG9jYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtOYXZDb250cm9sbGVyfVxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBuYXZDb250cm9sbGVyOiBOYXZDb250cm9sbGVyID0gaW5qZWN0KE5hdkNvbnRyb2xsZXIpO1xuXG4gIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcblxuICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBzZWFyY2hTdWJ0aXRsZSE6IFNhZmVIdG1sXG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRW1wdHlTdGF0ZUNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgRW1wdHlTdGF0ZUNvbXBvbmVudCBieSBjYWxsaW5nIHRoZSBwYXJlbnQgY2xhc3MgY29uc3RydWN0b3JcbiAgICogd2l0aCB0aGUgY29tcG9uZW50IG5hbWUgZm9yIGxvZ2dpbmcgYW5kIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzLiBUaGlzIGNvbXBvbmVudCBwcm92aWRlc1xuICAgKiBhIHN0YW5kYXJkaXplZCB3YXkgdG8gZGlzcGxheSBlbXB0eSBzdGF0ZSBtZXNzYWdlcyB3aXRoIG9wdGlvbmFsIGljb25zIGFuZCBhY3Rpb24gYnV0dG9ucy5cbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRW1wdHlTdGF0ZUNvbXBvbmVudFwiKTtcbiAgICBhZGRJY29ucyhhbGxJY29ucyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBmaXJzdCBkaXNwbGF5cyB0aGUgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBjb21wb25lbnQgYnkgcHJvY2Vzc2luZyBib29sZWFuIGlucHV0cywgYXBwbHlpbmcgbG9jYWxpemF0aW9uIHRvIHRleHRcbiAgICogZWxlbWVudHMgaWYgdHJhbnNsYXRpb24gaXMgZW5hYmxlZCwgYW5kIGZvcm1hdHRpbmcgQ1NTIGNsYXNzZXMgZm9yIHRpdGxlIGFuZCBzdWJ0aXRsZSBjb2xvcnMuXG4gICAqIFRoaXMgbWV0aG9kIHByZXBhcmVzIHRoZSBjb21wb25lbnQgZm9yIHVzZXIgaW50ZXJhY3Rpb24gYnkgZW5zdXJpbmcgYWxsIHByb3BlcnRpZXMgYXJlXG4gICAqIHByb3Blcmx5IGluaXRpYWxpemVkIGFuZCBsb2NhbGl6ZWQuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICpcbiAgICogICBBLT4+RTogbmdPbkluaXQoKVxuICAgKiAgIEUtPj5FOiBQcm9jZXNzIHRyYW5zbGF0YWJsZSBmbGFnXG4gICAqICAgRS0+PkU6IFByb2Nlc3Mgc2hvd0ljb24gZmxhZ1xuICAgKiAgIEUtPj5FOiBHZXQgbG9jYWxlIHNldHRpbmdzXG4gICAqICAgYWx0IHRyYW5zbGF0YWJsZSBpcyB0cnVlXG4gICAqICAgICBFLT4+RTogTG9jYWxpemUgdGl0bGVcbiAgICogICAgIEUtPj5FOiBMb2NhbGl6ZSBzdWJ0aXRsZVxuICAgKiAgICAgRS0+PkU6IExvY2FsaXplIGJ1dHRvblRleHRcbiAgICogICBlbmRcbiAgICogICBFLT4+RTogRm9ybWF0IHRpdGxlIENTUyBjbGFzc1xuICAgKiAgIEUtPj5FOiBGb3JtYXQgc3VidGl0bGUgQ1NTIGNsYXNzXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBFbXB0eVN0YXRlQ29tcG9uZW50XG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnBhcnNlUHJvcHModGhpcyk7XG4gICAgdGhpcy50cmFuc2xhdGFibGUgPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy50cmFuc2xhdGFibGUpO1xuICAgIHRoaXMuc2hvd0ljb24gPSBzdHJpbmdUb0Jvb2xlYW4odGhpcy5zaG93SWNvbik7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsZSh0aGlzLnRyYW5zbGF0YWJsZSk7XG5cbiAgICAvLyBpZih0aGlzLnRyYW5zbGF0YWJsZSkge1xuICAgIC8vICAgdGhpcy50aXRsZSA9IGdlbmVyYXRlTG9jYWxlRnJvbVN0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy50aXRsZSk7XG4gICAgLy8gICB0aGlzLnN1YnRpdGxlID0gZ2VuZXJhdGVMb2NhbGVGcm9tU3RyaW5nKHRoaXMubG9jYWxlLCB0aGlzLnN1YnRpdGxlKTtcbiAgICAvLyAgIHRoaXMuYnV0dG9uVGV4dCA9IGdlbmVyYXRlTG9jYWxlRnJvbVN0cmluZyh0aGlzLmxvY2FsZSwgdGhpcy5idXR0b25UZXh0KTtcbiAgICAvLyB9XG5cbiAgICB0aGlzLnRpdGxlQ29sb3IgPSBgZGNmLXRpdGxlIGNvbG9yLSR7dGhpcy50aXRsZUNvbG9yfWA7XG4gICAgdGhpcy5zdWJ0aXRsZUNvbG9yID0gYGRjZi1zdWJ0aXRsZSBjb2xvci0ke3RoaXMudGl0bGVDb2xvcn1gO1xuXG4gICAgaWYodGhpcy5zZWFyY2hWYWx1ZSAmJiB0aGlzLnRyYW5zbGF0YWJsZSlcbiAgICAgIHRoaXMuc2VhcmNoU3VidGl0bGUgPSBhd2FpdCB0aGlzLmdldFNlYXJjaFN1YnRpdGxlKHRoaXMuc3VidGl0bGUgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIGFjdGlvbiBidXR0b24uXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgYWN0aW9uIGJ1dHRvbiBpbiB0aGUgZW1wdHkgc3RhdGVcbiAgICogY29tcG9uZW50LiBJdCBzdXBwb3J0cyB0aHJlZSBuYXZpZ2F0aW9uIHBhdHRlcm5zOiAxKSBubyBhY3Rpb24gd2hlbiBidXR0b25MaW5rIGlzIG5vdCBwcm92aWRlZCxcbiAgICogMikgY3VzdG9tIGZ1bmN0aW9uIGV4ZWN1dGlvbiB3aGVuIGJ1dHRvbkxpbmsgaXMgYSBmdW5jdGlvbiwgYW5kIDMpIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpYyBVUkxcbiAgICogd2hlbiBidXR0b25MaW5rIGlzIGEgc3RyaW5nLiBUaGlzIGZsZXhpYmlsaXR5IGFsbG93cyB0aGUgZW1wdHkgc3RhdGUgdG8gdHJpZ2dlciB2YXJpb3VzIGFjdGlvbnNcbiAgICogYmFzZWQgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBFIGFzIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBOIGFzIE5hdkNvbnRyb2xsZXJcbiAgICpcbiAgICogICBVLT4+RTogQ2xpY2sgYWN0aW9uIGJ1dHRvblxuICAgKiAgIEUtPj5FOiBoYW5kbGVDbGljaygpXG4gICAqICAgYWx0IGJ1dHRvbkxpbmsgaXMgbm90IHByb3ZpZGVkXG4gICAqICAgICBFLS0+PlU6IFJldHVybiBmYWxzZSAobm8gYWN0aW9uKVxuICAgKiAgIGVsc2UgYnV0dG9uTGluayBpcyBhIGZ1bmN0aW9uXG4gICAqICAgICBFLT4+RTogRXhlY3V0ZSBidXR0b25MaW5rIGZ1bmN0aW9uXG4gICAqICAgICBFLS0+PlU6IFJldHVybiBmdW5jdGlvbiByZXN1bHRcbiAgICogICBlbHNlIGJ1dHRvbkxpbmsgaXMgYSBVUkwgc3RyaW5nXG4gICAqICAgICBFLT4+TjogbmF2aWdhdGVGb3J3YXJkKGJ1dHRvbkxpbmspXG4gICAqICAgICBOLS0+PkU6IFJldHVybiBuYXZpZ2F0aW9uIHJlc3VsdFxuICAgKiAgICAgRS0tPj5VOiBSZXR1cm4gbmF2aWdhdGlvbiByZXN1bHRcbiAgICogICBlbmRcbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+fVxuICAgKiAgIC0gZmFsc2UgaWYgbm8gYWN0aW9uIGlzIHRha2VuXG4gICAqICAgLSBUaGUgcmVzdWx0IG9mIHRoZSBidXR0b25MaW5rIGZ1bmN0aW9uIGlmIGl0J3MgYSBmdW5jdGlvblxuICAgKiAgIC0gQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbmF2aWdhdGlvbiByZXN1bHQgaWYgYnV0dG9uTGluayBpcyBhIFVSTFxuICAgKiBAbWVtYmVyT2YgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlQ2xpY2soKTogYm9vbGVhbiB8IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBmbiA9IHRoaXMuYnV0dG9uTGluaztcbiAgICBpZighZm4pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbilcbiAgICAgIHJldHVybiBmbigpO1xuICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKGZuIGFzIHN0cmluZyk7XG4gIH1cblxuXG4gLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBsb2NhbGl6ZWQgYW5kIHNhbml0aXplZCBzdWJ0aXRsZSBmb3Igc2VhcmNoIHJlc3VsdHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgY29udGVudCBzdHJpbmcsIHR5cGljYWxseSB0aGUgc3VidGl0bGUsIGFuZCBwcm9jZXNzZXMgaXRcbiAgICogdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gc2VydmljZS4gSXQgcmVwbGFjZXMgYSBwbGFjZWhvbGRlciAoJ3ZhbHVlMCcpIHdpdGggdGhlIGFjdHVhbFxuICAgKiBzZWFyY2ggdmFsdWUsIHRoZW4gc2FuaXRpemVzIHRoZSByZXN1bHQgdG8gc2FmZWx5IHVzZSBhcyBIVE1MLiBUaGlzIGlzIHBhcnRpY3VsYXJseVxuICAgKiB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgZHluYW1pYywgbG9jYWxpemVkIG1lc3NhZ2VzIGluIHRoZSBlbXB0eSBzdGF0ZSB3aGVuIGEgc2VhcmNoXG4gICAqIHlpZWxkcyBubyByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IHN0cmluZyB0byBiZSB0cmFuc2xhdGVkIGFuZCBwcm9jZXNzZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxTYWZlSHRtbD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgc2FuaXRpemVkIEhUTUwgc3RyaW5nXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEUgYXMgRW1wdHlTdGF0ZUNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVHJhbnNsYXRlU2VydmljZVxuICAgKiAgIHBhcnRpY2lwYW50IFMgYXMgRG9tU2FuaXRpemVyXG4gICAqXG4gICAqICAgRS0+PlQ6IGluc3RhbnQoY29udGVudCwgeyd2YWx1ZTAnOiBzZWFyY2hWYWx1ZX0pXG4gICAqICAgVC0tPj5FOiBSZXR1cm4gdHJhbnNsYXRlZCBzdHJpbmdcbiAgICogICBFLT4+UzogYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodHJhbnNsYXRlZFN0cmluZylcbiAgICogICBTLS0+PkU6IFJldHVybiBzYW5pdGl6ZWQgU2FmZUh0bWxcbiAgICpcbiAgICogQG1lbWJlck9mIEVtcHR5U3RhdGVDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIGdldFNlYXJjaFN1YnRpdGxlKGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8U2FmZUh0bWw+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbnRlbnQsIHsndmFsdWUwJzogdGhpcy5zZWFyY2hWYWx1ZX0pO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChyZXN1bHQpO1xuICB9XG59XG4iLCJcbjxpb24tY2FyZCBpZD1cImRjZi1jYXJkLWVtcHR5LXN0YXRlXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxpb24tY2FyZC1jb250ZW50PlxuICAgIEBpZihpY29uICYmIHNob3dJY29uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tY29udGFpbmVyXCI+XG4gICAgICAgIDxpb24taWNvblxuICAgICAgICAgIG5hbWU9XCJhbGVydC1jaXJjbGUtb3V0bGluZVwiXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYodGl0bGUpIHtcbiAgICAgIDxoNSBbY2xhc3NdPVwidGl0bGVDb2xvclwiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2g1PlxuICAgIH1cbiAgICBAaWYoc3VidGl0bGUpIHtcbiAgICAgIEBpZighc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgPHAgW2NsYXNzXT1cInN1YnRpdGxlQ29sb3JcIiBbaW5uZXJIVE1MXT1cInN1YnRpdGxlXCI+PC9wPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxwIFtjbGFzc109XCJzdWJ0aXRsZUNvbG9yXCIgW2lubmVySFRNTF09XCJzZWFyY2hTdWJ0aXRsZVwiPjwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmKGJ1dHRvbkxpbmsgJiYgYnV0dG9uVGV4dCkge1xuICAgICAgPGRpdj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBbc2l6ZV09XCJidXR0b25TaXplXCJcbiAgICAgICAgICBbZmlsbF09XCJidXR0b25GaWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uQ29sb3JcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygpXCI+XG4gICAgICAgICAge3sgIGJ1dHRvblRleHQgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG48L2lvbi1jYXJkPlxuIl19
@@ -1,9 +1,9 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, Input, ViewChild } from '@angular/core';
3
- import { Dynamic } from 'src/lib/engine';
3
+ import { Dynamic } from '../../engine';
4
4
  import { OperationKeys } from '@decaf-ts/db-decorators';
5
- import { ForAngularModule } from 'src/lib/for-angular.module';
6
- import { CollapsableDirective } from 'src/lib/directives/collapsable.directive';
5
+ import { ForAngularModule } from '../../for-angular.module';
6
+ import { CollapsableDirective } from '../../directives/collapsable.directive';
7
7
  import { IonAccordion, IonAccordionGroup, IonItem } from '@ionic/angular/standalone';
8
8
  import * as i0 from "@angular/core";
9
9
  /**
@@ -222,4 +222,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
222
222
  }], target: [{
223
223
  type: Input
224
224
  }] } });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkc2V0L2ZpZWxkc2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHNldC9maWVsZHNldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUVyRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQVVJLElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWlCO0lBQXZCO1FBZUw7Ozs7Ozs7Ozs7V0FVRztRQUVILFNBQUksR0FBVyxPQUFPLENBQUM7UUFFdkI7Ozs7Ozs7Ozs7V0FVRztRQUVILGNBQVMsR0FBa0IsYUFBYSxDQUFDLElBQUksQ0FBQztRQUU5Qzs7Ozs7Ozs7OztXQVVHO1FBRUgsV0FBTSxHQUFtQixPQUFPLENBQUM7UUFFakM7Ozs7Ozs7Ozs7V0FVRztRQUNILFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEI7Ozs7Ozs7Ozs7V0FVRztRQUNnQixrQkFBYSxHQUFtQixhQUFhLENBQUMsTUFBTSxDQUFDO1FBRXhFOzs7Ozs7Ozs7O1dBVUc7UUFDSyxzQkFBaUIsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0EwRTFFO0lBeEVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNEJHO0lBQ0gsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDNUYsSUFBRyxnQkFBZ0I7Z0JBQ2pCLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMEJHO0lBQ0gsWUFBWSxDQUFDLEtBQWtCO1FBQzdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSyxNQUF1QyxDQUFDLE9BQU8sS0FBSyxxQkFBcUI7WUFDNUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7K0dBdktVLGlCQUFpQjttR0FBakIsaUJBQWlCLHFPQVltQixVQUFVLDZCQy9FM0QsMGJBWUEsb3dCRHFEWSxnQkFBZ0IsK0JBQUUsaUJBQWlCLHFKQUFFLFlBQVksNklBQUUsT0FBTywwTkFBRSxvQkFBb0I7O0FBRS9FLGlCQUFpQjtJQVQ3QixPQUFPLEVBQUU7R0FTRyxpQkFBaUIsQ0F3SzdCOzs0RkF4S1ksaUJBQWlCO2tCQVI3QixTQUFTO2lDQUNJLElBQUksWUFDTixvQkFBb0IsV0FHckIsQ0FBQyxzQkFBc0IsQ0FBQyxXQUN4QixDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsb0JBQW9CLENBQUM7OEJBZTNGLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBZTNELElBQUk7c0JBREgsS0FBSztnQkFlTixTQUFTO3NCQURSLEtBQUs7Z0JBZU4sTUFBTTtzQkFETCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWMsIEhUTUxGb3JtVGFyZ2V0IH0gZnJvbSAnc3JjL2xpYi9lbmdpbmUnO1xuaW1wb3J0IHsgQ3J1ZE9wZXJhdGlvbnMsIE9wZXJhdGlvbktleXMgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBGb3JBbmd1bGFyTW9kdWxlIH0gZnJvbSAnc3JjL2xpYi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgQ29sbGFwc2FibGVEaXJlY3RpdmUgfSBmcm9tICdzcmMvbGliL2RpcmVjdGl2ZXMvY29sbGFwc2FibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElvbkFjY29yZGlvbiwgSW9uQWNjb3JkaW9uR3JvdXAsIElvbkl0ZW0gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRHluYW1pYyBmaWVsZHNldCBjb21wb25lbnQgd2l0aCBjb2xsYXBzaWJsZSBhY2NvcmRpb24gZnVuY3Rpb25hbGl0eS5cbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgc29waGlzdGljYXRlZCBmaWVsZHNldCBjb250YWluZXIgdGhhdCBhdXRvbWF0aWNhbGx5XG4gKiBhZGFwdHMgaXRzIGJlaGF2aW9yIGJhc2VkIG9uIENSVUQgb3BlcmF0aW9ucy4gSXQgaW50ZWdyYXRlcyBzZWFtbGVzc2x5IHdpdGggSW9uaWMnc1xuICogYWNjb3JkaW9uIGNvbXBvbmVudHMgdG8gY3JlYXRlIGV4cGFuZGFibGUvY29sbGFwc2libGUgc2VjdGlvbnMgZm9yIG9yZ2FuaXppbmcgZm9ybVxuICogY29udGVudCBhbmQgcmVsYXRlZCBpbmZvcm1hdGlvbi4gVGhlIGNvbXBvbmVudCBpbnRlbGxpZ2VudGx5IGRldGVybWluZXMgaXRzIGluaXRpYWxcbiAqIHN0YXRlIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24gdHlwZSwgb3BlbmluZyBhdXRvbWF0aWNhbGx5IGZvciBSRUFEIGFuZCBERUxFVEUgb3BlcmF0aW9uc1xuICogd2hpbGUgcmVtYWluaW5nIGNsb3NlZCBmb3IgQ1JFQVRFIGFuZCBVUERBVEUgb3BlcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPCEtLSBCYXNpYyB1c2FnZSB3aXRoIGF1dG9tYXRpYyBzdGF0ZSBtYW5hZ2VtZW50IC0tPlxuICogPG5neC1kZWNhZi1maWVsZHNldFxuICogICBuYW1lPVwiUGVyc29uYWwgSW5mb3JtYXRpb25cIlxuICogICBbb3BlcmF0aW9uXT1cIk9wZXJhdGlvbktleXMuUkVBRFwiXG4gKiAgIHRhcmdldD1cIl9zZWxmXCI+XG4gKiAgIDxpb24taW5wdXQgbGFiZWw9XCJOYW1lXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBuYW1lXCI+PC9pb24taW5wdXQ+XG4gKiAgIDxpb24taW5wdXQgbGFiZWw9XCJFbWFpbFwiIHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1haWxcIj48L2lvbi1pbnB1dD5cbiAqIDwvbmd4LWRlY2FmLWZpZWxkc2V0PlxuICpcbiAqIDwhLS0gQWR2YW5jZWQgdXNhZ2Ugd2l0aCBjdXN0b20gb3BlcmF0aW9uIC0tPlxuICogPG5neC1kZWNhZi1maWVsZHNldFxuICogICBuYW1lPVwiQ29udGFjdCBEZXRhaWxzXCJcbiAqICAgW29wZXJhdGlvbl09XCJjdXJyZW50T3BlcmF0aW9uXCJcbiAqICAgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gKiAgIDwhLS0gQ29tcGxleCBmb3JtIGZpZWxkcyAtLT5cbiAqIDwvbmd4LWRlY2FmLWZpZWxkc2V0PlxuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAqICAgcGFydGljaXBhbnQgRiBhcyBGaWVsZHNldENvbXBvbmVudFxuICogICBwYXJ0aWNpcGFudCBJIGFzIElvbmljIEFjY29yZGlvblxuICogICBwYXJ0aWNpcGFudCBEIGFzIERPTVxuICpcbiAqICAgRi0+PkY6IG5nQWZ0ZXJWaWV3SW5pdCgpXG4gKiAgIGFsdCBvcGVyYXRpb24gaXMgUkVBRCBvciBERUxFVEVcbiAqICAgICBGLT4+RjogU2V0IGlzT3BlbiA9IHRydWVcbiAqICAgICBGLT4+RDogUXVlcnkgYWNjb3JkaW9uIGVsZW1lbnRcbiAqICAgICBGLT4+STogU2V0IHZhbHVlIGF0dHJpYnV0ZSB0byAnb3BlbidcbiAqICAgICBGLT4+RjogVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gKiAgIGVuZFxuICogICBVLT4+STogQ2xpY2sgYWNjb3JkaW9uIGhlYWRlclxuICogICBJLT4+RjogaGFuZGxlQ2hhbmdlKGV2ZW50KVxuICogICBGLT4+RjogVXBkYXRlIGlzT3BlbiBzdGF0ZVxuICogICBGLT4+STogUmVmbGVjdCBuZXcgc3RhdGVcbiAqXG4gKiBAbWVtYmVyT2YgRm9yQW5ndWxhck1vZHVsZVxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtZmllbGRzZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmllbGRzZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZHNldC5jb21wb25lbnQuc2NzcyddLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIGltcG9ydHM6IFtGb3JBbmd1bGFyTW9kdWxlLCBJb25BY2NvcmRpb25Hcm91cCwgSW9uQWNjb3JkaW9uLCBJb25JdGVtLCBDb2xsYXBzYWJsZURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkc2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gdGhlIGNvbXBvbmVudCdzIG5hdGl2ZSBET00gZWxlbWVudC5cbiAgICogQHN1bW1hcnkgVmlld0NoaWxkIHJlZmVyZW5jZSB0aGF0IHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGNvbXBvbmVudCdzIHJvb3QgRE9NIGVsZW1lbnQuXG4gICAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciBtYW5pcHVsYXRpbmcgdGhlIElvbmljIGFjY29yZGlvbiBncm91cCBhZnRlciB2aWV3IGluaXRpYWxpemF0aW9uLFxuICAgKiBwYXJ0aWN1bGFybHkgZm9yIHNldHRpbmcgdGhlIGluaXRpYWwgb3BlbiBzdGF0ZSBwcm9ncmFtbWF0aWNhbGx5LiBUaGUgcmVmZXJlbmNlIGlzIHVzZWRcbiAgICogdG8gcXVlcnkgYW5kIG1vZGlmeSBhY2NvcmRpb24gYXR0cmlidXRlcyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBvbmVudCdzIGV4cGFuZGVkIHN0YXRlLlxuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBAVmlld0NoaWxkKCdjb21wb25lbnQnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY29tcG9uZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBkaXNwbGF5IG5hbWUgb3IgdGl0bGUgb2YgdGhlIGZpZWxkc2V0IHNlY3Rpb24uXG4gICAqIEBzdW1tYXJ5IFNldHMgdGhlIGxlZ2VuZCBvciBoZWFkZXIgdGV4dCB0aGF0IGFwcGVhcnMgaW4gdGhlIGFjY29yZGlvbiBoZWFkZXIuIFRoaXMgdGV4dFxuICAgKiBwcm92aWRlcyBhIGNsZWFyIGxhYmVsIGZvciB0aGUgY29sbGFwc2libGUgc2VjdGlvbiwgaGVscGluZyB1c2VycyB1bmRlcnN0YW5kIHdoYXQgY29udGVudFxuICAgKiBpcyBjb250YWluZWQgd2l0aGluLiBUaGUgbmFtZSBpcyBkaXNwbGF5ZWQgcHJvbWluZW50bHkgYW5kIHNlcnZlcyBhcyB0aGUgY2xpY2thYmxlIGFyZWFcbiAgICogZm9yIGV4cGFuZGluZy9jb2xsYXBzaW5nIHRoZSBmaWVsZHNldC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ0NoaWxkJ1xuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG5hbWU6IHN0cmluZyA9ICdDaGlsZCc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudCBDUlVEIG9wZXJhdGlvbiBjb250ZXh0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBjb21wb25lbnQncyBpbml0aWFsIGJlaGF2aW9yIGFuZCBzdGF0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBvcGVyYXRpb24uXG4gICAqIFRoaXMgaW5wdXQgaXMgY3J1Y2lhbCBmb3IgYXV0by1zdGF0ZSBtYW5hZ2VtZW50OiBSRUFEIGFuZCBERUxFVEUgb3BlcmF0aW9ucyBhdXRvbWF0aWNhbGx5XG4gICAqIG9wZW4gdGhlIGZpZWxkc2V0IHRvIHNob3cgY29udGVudCwgd2hpbGUgQ1JFQVRFIGFuZCBVUERBVEUgb3BlcmF0aW9ucyBrZWVwIGl0IGNsb3NlZFxuICAgKiBpbml0aWFsbHkuIFRoaXMgcHJvdmlkZXMgYW4gaW50dWl0aXZlIHVzZXIgZXhwZXJpZW5jZSBhbGlnbmVkIHdpdGggb3BlcmF0aW9uIHNlbWFudGljcy5cbiAgICpcbiAgICogQHR5cGUge09wZXJhdGlvbktleXN9XG4gICAqIEBkZWZhdWx0IE9wZXJhdGlvbktleXMuUkVBRFxuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIG9wZXJhdGlvbjogT3BlcmF0aW9uS2V5cyA9IE9wZXJhdGlvbktleXMuUkVBRDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZvcm0gdGFyZ2V0IGF0dHJpYnV0ZSBmb3IgbmVzdGVkIGZvcm0gc3VibWlzc2lvbnMuXG4gICAqIEBzdW1tYXJ5IFNwZWNpZmllcyB3aGVyZSB0byBkaXNwbGF5IHRoZSByZXNwb25zZSBhZnRlciBzdWJtaXR0aW5nIGZvcm1zIGNvbnRhaW5lZCB3aXRoaW5cbiAgICogdGhlIGZpZWxkc2V0LiBUaGlzIGF0dHJpYnV0ZSBtaXJyb3JzIHRoZSBIVE1MIGZvcm0gdGFyZ2V0IGJlaGF2aW9yLCBhbGxvd2luZyBjb250cm9sIG92ZXJcbiAgICogd2hldGhlciBmb3JtIHN1Ym1pc3Npb25zIG9wZW4gaW4gdGhlIHNhbWUgd2luZG93LCBuZXcgd2luZG93LCBvciBzcGVjaWZpYyBmcmFtZS4gVXNlZnVsXG4gICAqIGZvciBjb21wbGV4IGZvcm0gd29ya2Zsb3dzIGFuZCBtdWx0aS1zdGVwIHByb2Nlc3Nlcy5cbiAgICpcbiAgICogQHR5cGUge0hUTUxGb3JtVGFyZ2V0fVxuICAgKiBAZGVmYXVsdCAnX3NlbGYnXG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgdGFyZ2V0OiBIVE1MRm9ybVRhcmdldCA9ICdfc2VsZic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHN0YXRlIG9mIHRoZSBhY2NvcmRpb24gKGV4cGFuZGVkIG9yIGNvbGxhcHNlZCkuXG4gICAqIEBzdW1tYXJ5IEJvb2xlYW4gZmxhZyB0aGF0IHRyYWNrcyB3aGV0aGVyIHRoZSBmaWVsZHNldCBhY2NvcmRpb24gaXMgY3VycmVudGx5IG9wZW4gb3IgY2xvc2VkLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBiYXNlZCBvbiB1c2VyIGludGVyYWN0aW9ucyBhbmQgaW5pdGlhbCBvcGVyYXRpb24gc3RhdGUuXG4gICAqIEl0IHNlcnZlcyBhcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNvbXBvbmVudCdzIHZpc2liaWxpdHkgc3RhdGUgYW5kIGlzIHVzZWRcbiAgICogdG8gY29vcmRpbmF0ZSBiZXR3ZWVuIHVzZXIgYWN0aW9ucyBhbmQgcHJvZ3JhbW1hdGljIHN0YXRlIGNoYW5nZXMuXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIENSVUQgb3BlcmF0aW9uIGNvbnN0YW50cyBmb3IgdGVtcGxhdGUgdXNhZ2UuXG4gICAqIEBzdW1tYXJ5IEV4cG9zZXMgdGhlIE9wZXJhdGlvbktleXMgZW51bSB0byB0aGUgY29tcG9uZW50IHRlbXBsYXRlLCBlbmFibGluZyBjb25kaXRpb25hbFxuICAgKiByZW5kZXJpbmcgYW5kIGJlaGF2aW9yIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlcy4gVGhpcyBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvcGVydHkgZW5zdXJlc1xuICAgKiB0aGF0IHRlbXBsYXRlIGxvZ2ljIGNhbiBhY2Nlc3Mgb3BlcmF0aW9uIGNvbnN0YW50cyB3aGlsZSBtYWludGFpbmluZyBlbmNhcHN1bGF0aW9uIGFuZFxuICAgKiBwcmV2ZW50aW5nIGFjY2lkZW50YWwgbW9kaWZpY2F0aW9uIG9mIHRoZSBlbnVtIHZhbHVlcy5cbiAgICpcbiAgICogQHR5cGUge0NydWRPcGVyYXRpb25zfVxuICAgKiBAZGVmYXVsdCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBPcGVyYXRpb25LZXlzOiBDcnVkT3BlcmF0aW9ucyA9IE9wZXJhdGlvbktleXMuQ1JFQVRFO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIHNlcnZpY2UuXG4gICAqIEBzdW1tYXJ5IEluamVjdGVkIHNlcnZpY2UgdGhhdCBwcm92aWRlcyBtYW51YWwgY29udHJvbCBvdmVyIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGVzLlxuICAgKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCBwcm9ncmFtbWF0aWMgRE9NIGNoYW5nZXMgKGxpa2Ugc2V0dGluZyBhY2NvcmRpb25cbiAgICogYXR0cmlidXRlcykgYXJlIHByb3Blcmx5IHJlZmxlY3RlZCBpbiB0aGUgY29tcG9uZW50J3Mgc3RhdGUgYW5kIHRyaWdnZXIgYXBwcm9wcmlhdGVcbiAgICogdmlldyB1cGRhdGVzIHdoZW4gbW9kaWZpY2F0aW9ucyBvY2N1ciBvdXRzaWRlIHRoZSBub3JtYWwgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIGZsb3cuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtDaGFuZ2VEZXRlY3RvclJlZn1cbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IHN0YXRlIGFmdGVyIHZpZXcgYW5kIGNoaWxkIGNvbXBvbmVudHMgYXJlIHJlbmRlcmVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIGxpZmVjeWNsZSBob29rIGltcGxlbWVudHMgaW50ZWxsaWdlbnQgYXV0by1zdGF0ZSBtYW5hZ2VtZW50IGJhc2VkIG9uIHRoZSBjdXJyZW50XG4gICAqIENSVUQgb3BlcmF0aW9uLiBGb3IgUkVBRCBhbmQgREVMRVRFIG9wZXJhdGlvbnMsIHRoZSBmaWVsZHNldCBhdXRvbWF0aWNhbGx5IG9wZW5zIHRvIHByb3ZpZGVcbiAgICogaW1tZWRpYXRlIGFjY2VzcyB0byBpbmZvcm1hdGlvbiwgd2hpbGUgQ1JFQVRFIGFuZCBVUERBVEUgb3BlcmF0aW9ucyBrZWVwIGl0IGNsb3NlZCB0byBtYWludGFpblxuICAgKiBhIGNsZWFuIGluaXRpYWwgaW50ZXJmYWNlLiBUaGUgbWV0aG9kIGRpcmVjdGx5IG1hbmlwdWxhdGVzIHRoZSBET00gdG8gZW5zdXJlIHByb3BlciBhY2NvcmRpb25cbiAgICogc3luY2hyb25pemF0aW9uIGFuZCB0cmlnZ2VycyBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHJlZmxlY3QgdGhlIHByb2dyYW1tYXRpYyBzdGF0ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFuZ3VsYXIgTGlmZWN5Y2xlXG4gICAqICAgcGFydGljaXBhbnQgRiBhcyBGaWVsZHNldENvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRE9NXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDaGFuZ2VEZXRlY3RvclxuICAgKlxuICAgKiAgIEEtPj5GOiBuZ0FmdGVyVmlld0luaXQoKVxuICAgKiAgIGFsdCBvcGVyYXRpb24gaXMgUkVBRCBvciBERUxFVEVcbiAgICogICAgIEYtPj5GOiBTZXQgaXNPcGVuID0gdHJ1ZVxuICAgKiAgICAgRi0+PkQ6IFF1ZXJ5IGlvbi1hY2NvcmRpb24tZ3JvdXAgZWxlbWVudFxuICAgKiAgICAgYWx0IGFjY29yZGlvbiBlbGVtZW50IGV4aXN0c1xuICAgKiAgICAgICBGLT4+RDogU2V0IHZhbHVlIGF0dHJpYnV0ZSB0byAnb3BlbidcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKiAgIEYtPj5DOiBkZXRlY3RDaGFuZ2VzKClcbiAgICogICBDLT4+RjogVXBkYXRlIHZpZXcgd2l0aCBuZXcgc3RhdGVcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5SRUFEIHx8IHRoaXMub3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLkRFTEVURSkge1xuICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgY29uc3QgYWNjb3JkaW9uRWxlbWVudCA9IHRoaXMuY29tcG9uZW50Py5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lvbi1hY2NvcmRpb24tZ3JvdXAnKTtcbiAgICAgIGlmKGFjY29yZGlvbkVsZW1lbnQpXG4gICAgICAgIGFjY29yZGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsICdvcGVuJyk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGFjY29yZGlvbiBzdGF0ZSBjaGFuZ2UgZXZlbnRzIGZyb20gdXNlciBpbnRlcmFjdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBDdXN0b21FdmVudCBvYmplY3RzIHRyaWdnZXJlZCB3aGVuIHVzZXJzIGV4cGFuZCBvciBjb2xsYXBzZSB0aGUgYWNjb3JkaW9uLlxuICAgKiBUaGlzIG1ldGhvZCBleHRyYWN0cyB0aGUgbmV3IHN0YXRlIGZyb20gdGhlIGV2ZW50IGRldGFpbHMgYW5kIHVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzXG4gICAqIGludGVybmFsIHN0YXRlIGFjY29yZGluZ2x5LiBJdCBzcGVjaWZpY2FsbHkgbGlzdGVucyBmb3IgSU9OLUFDQ09SRElPTi1HUk9VUCBldmVudHMgdG9cbiAgICogZW5zdXJlIHByb3BlciBldmVudCBzb3VyY2UgdmFsaWRhdGlvbiBhbmQgcHJldmVudCBoYW5kbGluZyBvZiB1bnJlbGF0ZWQgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyBhY2NvcmRpb24gc3RhdGUgY2hhbmdlIGRldGFpbHNcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEkgYXMgSW9uLUFjY29yZGlvblxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmllbGRzZXRDb21wb25lbnRcbiAgICpcbiAgICogICBVLT4+STogQ2xpY2sgYWNjb3JkaW9uIGhlYWRlclxuICAgKiAgIEktPj5GOiBoYW5kbGVDaGFuZ2UoQ3VzdG9tRXZlbnQpXG4gICAqICAgRi0+PkY6IEV4dHJhY3QgdGFyZ2V0IGFuZCBkZXRhaWwgZnJvbSBldmVudFxuICAgKiAgIEYtPj5GOiBWYWxpZGF0ZSB0YXJnZXQgaXMgSU9OLUFDQ09SRElPTi1HUk9VUFxuICAgKiAgIGFsdCB2YWxpZCB0YXJnZXRcbiAgICogICAgIEYtPj5GOiBVcGRhdGUgaXNPcGVuID0gISF2YWx1ZVxuICAgKiAgIGVuZFxuICAgKiAgIEYtPj5JOiBSZWZsZWN0IHVwZGF0ZWQgc3RhdGVcbiAgICpcbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgeyB0YXJnZXQsIGRldGFpbCB9ID0gZXZlbnQ7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gZGV0YWlsO1xuICAgIGlmICgodGFyZ2V0IGFzIEhUTUxJb25BY2NvcmRpb25Hcm91cEVsZW1lbnQpLnRhZ05hbWUgPT09ICdJT04tQUNDT1JESU9OLUdST1VQJylcbiAgICAgIHRoaXMuaXNPcGVuID0gISF2YWx1ZTtcbiAgfVxufVxuIiwiPGZpZWxkc2V0IFtjbGFzc109XCInZGNmLWZpZWxkc2V0ICcgKyBvcGVyYXRpb25cIiAjY29tcG9uZW50PlxuICA8aW9uLWFjY29yZGlvbi1ncm91cCAoaW9uQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPGlvbi1hY2NvcmRpb24gdmFsdWU9XCJvcGVuXCI+XG4gICAgICA8aW9uLWl0ZW0gc2xvdD1cImhlYWRlclwiID5cbiAgICAgICAgPGxlZ2VuZD57eyBuYW1lIH19PC9sZWdlbmQ+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgICAgPGRpdiBzbG90PVwiY29udGVudFwiIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFpc09wZW5cIiBkZWNhZkNvbGxhcHNhYmxlPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi1hY2NvcmRpb24+XG4gIDwvaW9uLWFjY29yZGlvbi1ncm91cD5cbjwvZmllbGRzZXQ+XG4iXX0=
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkc2V0L2ZpZWxkc2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHNldC9maWVsZHNldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFJLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFFckY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7QUFVSSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUF2QjtRQWVMOzs7Ozs7Ozs7O1dBVUc7UUFFSCxTQUFJLEdBQVcsT0FBTyxDQUFDO1FBRXZCOzs7Ozs7Ozs7O1dBVUc7UUFFSCxjQUFTLEdBQWtCLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFFOUM7Ozs7Ozs7Ozs7V0FVRztRQUVILFdBQU0sR0FBbUIsT0FBTyxDQUFDO1FBRWpDOzs7Ozs7Ozs7O1dBVUc7UUFDSCxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXhCOzs7Ozs7Ozs7O1dBVUc7UUFDZ0Isa0JBQWEsR0FBbUIsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUV4RTs7Ozs7Ozs7OztXQVVHO1FBQ0ssc0JBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBMEUxRTtJQXhFQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTRCRztJQUNILGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzVGLElBQUcsZ0JBQWdCO2dCQUNqQixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNILFlBQVksQ0FBQyxLQUFrQjtRQUM3QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNqQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUssTUFBdUMsQ0FBQyxPQUFPLEtBQUsscUJBQXFCO1lBQzVFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDOytHQXZLVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixxT0FZbUIsVUFBVSw2QkMvRTNELDBiQVlBLG93QkRxRFksZ0JBQWdCLCtCQUFFLGlCQUFpQixxSkFBRSxZQUFZLDZJQUFFLE9BQU8sME5BQUUsb0JBQW9COztBQUUvRSxpQkFBaUI7SUFUN0IsT0FBTyxFQUFFO0dBU0csaUJBQWlCLENBd0s3Qjs7NEZBeEtZLGlCQUFpQjtrQkFSN0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sb0JBQW9CLFdBR3JCLENBQUMsc0JBQXNCLENBQUMsV0FDeEIsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixDQUFDOzhCQWUzRixTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQWUzRCxJQUFJO3NCQURILEtBQUs7Z0JBZU4sU0FBUztzQkFEUixLQUFLO2dCQWVOLE1BQU07c0JBREwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljLCBIVE1MRm9ybVRhcmdldCB9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDcnVkT3BlcmF0aW9ucywgT3BlcmF0aW9uS2V5cyB9IGZyb20gJ0BkZWNhZi10cy9kYi1kZWNvcmF0b3JzJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgQ29sbGFwc2FibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NvbGxhcHNhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJb25BY2NvcmRpb24sIElvbkFjY29yZGlvbkdyb3VwLCBJb25JdGVtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIER5bmFtaWMgZmllbGRzZXQgY29tcG9uZW50IHdpdGggY29sbGFwc2libGUgYWNjb3JkaW9uIGZ1bmN0aW9uYWxpdHkuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIHNvcGhpc3RpY2F0ZWQgZmllbGRzZXQgY29udGFpbmVyIHRoYXQgYXV0b21hdGljYWxseVxuICogYWRhcHRzIGl0cyBiZWhhdmlvciBiYXNlZCBvbiBDUlVEIG9wZXJhdGlvbnMuIEl0IGludGVncmF0ZXMgc2VhbWxlc3NseSB3aXRoIElvbmljJ3NcbiAqIGFjY29yZGlvbiBjb21wb25lbnRzIHRvIGNyZWF0ZSBleHBhbmRhYmxlL2NvbGxhcHNpYmxlIHNlY3Rpb25zIGZvciBvcmdhbml6aW5nIGZvcm1cbiAqIGNvbnRlbnQgYW5kIHJlbGF0ZWQgaW5mb3JtYXRpb24uIFRoZSBjb21wb25lbnQgaW50ZWxsaWdlbnRseSBkZXRlcm1pbmVzIGl0cyBpbml0aWFsXG4gKiBzdGF0ZSBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHR5cGUsIG9wZW5pbmcgYXV0b21hdGljYWxseSBmb3IgUkVBRCBhbmQgREVMRVRFIG9wZXJhdGlvbnNcbiAqIHdoaWxlIHJlbWFpbmluZyBjbG9zZWQgZm9yIENSRUFURSBhbmQgVVBEQVRFIG9wZXJhdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDwhLS0gQmFzaWMgdXNhZ2Ugd2l0aCBhdXRvbWF0aWMgc3RhdGUgbWFuYWdlbWVudCAtLT5cbiAqIDxuZ3gtZGVjYWYtZmllbGRzZXRcbiAqICAgbmFtZT1cIlBlcnNvbmFsIEluZm9ybWF0aW9uXCJcbiAqICAgW29wZXJhdGlvbl09XCJPcGVyYXRpb25LZXlzLlJFQURcIlxuICogICB0YXJnZXQ9XCJfc2VsZlwiPlxuICogICA8aW9uLWlucHV0IGxhYmVsPVwiTmFtZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbmFtZVwiPjwvaW9uLWlucHV0PlxuICogICA8aW9uLWlucHV0IGxhYmVsPVwiRW1haWxcIiB0eXBlPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGVtYWlsXCI+PC9pb24taW5wdXQ+XG4gKiA8L25neC1kZWNhZi1maWVsZHNldD5cbiAqXG4gKiA8IS0tIEFkdmFuY2VkIHVzYWdlIHdpdGggY3VzdG9tIG9wZXJhdGlvbiAtLT5cbiAqIDxuZ3gtZGVjYWYtZmllbGRzZXRcbiAqICAgbmFtZT1cIkNvbnRhY3QgRGV0YWlsc1wiXG4gKiAgIFtvcGVyYXRpb25dPVwiY3VycmVudE9wZXJhdGlvblwiXG4gKiAgIHRhcmdldD1cIl9ibGFua1wiPlxuICogICA8IS0tIENvbXBsZXggZm9ybSBmaWVsZHMgLS0+XG4gKiA8L25neC1kZWNhZi1maWVsZHNldD5cbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gKiAgIHBhcnRpY2lwYW50IEYgYXMgRmllbGRzZXRDb21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgSSBhcyBJb25pYyBBY2NvcmRpb25cbiAqICAgcGFydGljaXBhbnQgRCBhcyBET01cbiAqXG4gKiAgIEYtPj5GOiBuZ0FmdGVyVmlld0luaXQoKVxuICogICBhbHQgb3BlcmF0aW9uIGlzIFJFQUQgb3IgREVMRVRFXG4gKiAgICAgRi0+PkY6IFNldCBpc09wZW4gPSB0cnVlXG4gKiAgICAgRi0+PkQ6IFF1ZXJ5IGFjY29yZGlvbiBlbGVtZW50XG4gKiAgICAgRi0+Pkk6IFNldCB2YWx1ZSBhdHRyaWJ1dGUgdG8gJ29wZW4nXG4gKiAgICAgRi0+PkY6IFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICogICBlbmRcbiAqICAgVS0+Pkk6IENsaWNrIGFjY29yZGlvbiBoZWFkZXJcbiAqICAgSS0+PkY6IGhhbmRsZUNoYW5nZShldmVudClcbiAqICAgRi0+PkY6IFVwZGF0ZSBpc09wZW4gc3RhdGVcbiAqICAgRi0+Pkk6IFJlZmxlY3QgbmV3IHN0YXRlXG4gKlxuICogQG1lbWJlck9mIEZvckFuZ3VsYXJNb2R1bGVcbiAqL1xuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLWZpZWxkc2V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkc2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmllbGRzZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZSwgSW9uQWNjb3JkaW9uR3JvdXAsIElvbkFjY29yZGlvbiwgSW9uSXRlbSwgQ29sbGFwc2FibGVEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZHNldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQncyBuYXRpdmUgRE9NIGVsZW1lbnQuXG4gICAqIEBzdW1tYXJ5IFZpZXdDaGlsZCByZWZlcmVuY2UgdGhhdCBwcm92aWRlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBjb21wb25lbnQncyByb290IERPTSBlbGVtZW50LlxuICAgKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBJb25pYyBhY2NvcmRpb24gZ3JvdXAgYWZ0ZXIgdmlldyBpbml0aWFsaXphdGlvbixcbiAgICogcGFydGljdWxhcmx5IGZvciBzZXR0aW5nIHRoZSBpbml0aWFsIG9wZW4gc3RhdGUgcHJvZ3JhbW1hdGljYWxseS4gVGhlIHJlZmVyZW5jZSBpcyB1c2VkXG4gICAqIHRvIHF1ZXJ5IGFuZCBtb2RpZnkgYWNjb3JkaW9uIGF0dHJpYnV0ZXMgdGhhdCBjb250cm9sIHRoZSBjb21wb25lbnQncyBleHBhbmRlZCBzdGF0ZS5cbiAgICpcbiAgICogQHR5cGUge0VsZW1lbnRSZWZ9XG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50JywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNvbXBvbmVudCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZGlzcGxheSBuYW1lIG9yIHRpdGxlIG9mIHRoZSBmaWVsZHNldCBzZWN0aW9uLlxuICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBsZWdlbmQgb3IgaGVhZGVyIHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBhY2NvcmRpb24gaGVhZGVyLiBUaGlzIHRleHRcbiAgICogcHJvdmlkZXMgYSBjbGVhciBsYWJlbCBmb3IgdGhlIGNvbGxhcHNpYmxlIHNlY3Rpb24sIGhlbHBpbmcgdXNlcnMgdW5kZXJzdGFuZCB3aGF0IGNvbnRlbnRcbiAgICogaXMgY29udGFpbmVkIHdpdGhpbi4gVGhlIG5hbWUgaXMgZGlzcGxheWVkIHByb21pbmVudGx5IGFuZCBzZXJ2ZXMgYXMgdGhlIGNsaWNrYWJsZSBhcmVhXG4gICAqIGZvciBleHBhbmRpbmcvY29sbGFwc2luZyB0aGUgZmllbGRzZXQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdDaGlsZCdcbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmcgPSAnQ2hpbGQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnQgQ1JVRCBvcGVyYXRpb24gY29udGV4dC5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgY29tcG9uZW50J3MgaW5pdGlhbCBiZWhhdmlvciBhbmQgc3RhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgb3BlcmF0aW9uLlxuICAgKiBUaGlzIGlucHV0IGlzIGNydWNpYWwgZm9yIGF1dG8tc3RhdGUgbWFuYWdlbWVudDogUkVBRCBhbmQgREVMRVRFIG9wZXJhdGlvbnMgYXV0b21hdGljYWxseVxuICAgKiBvcGVuIHRoZSBmaWVsZHNldCB0byBzaG93IGNvbnRlbnQsIHdoaWxlIENSRUFURSBhbmQgVVBEQVRFIG9wZXJhdGlvbnMga2VlcCBpdCBjbG9zZWRcbiAgICogaW5pdGlhbGx5LiBUaGlzIHByb3ZpZGVzIGFuIGludHVpdGl2ZSB1c2VyIGV4cGVyaWVuY2UgYWxpZ25lZCB3aXRoIG9wZXJhdGlvbiBzZW1hbnRpY3MuXG4gICAqXG4gICAqIEB0eXBlIHtPcGVyYXRpb25LZXlzfVxuICAgKiBAZGVmYXVsdCBPcGVyYXRpb25LZXlzLlJFQURcbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMgPSBPcGVyYXRpb25LZXlzLlJFQUQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGb3JtIHRhcmdldCBhdHRyaWJ1dGUgZm9yIG5lc3RlZCBmb3JtIHN1Ym1pc3Npb25zLlxuICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hlcmUgdG8gZGlzcGxheSB0aGUgcmVzcG9uc2UgYWZ0ZXIgc3VibWl0dGluZyBmb3JtcyBjb250YWluZWQgd2l0aGluXG4gICAqIHRoZSBmaWVsZHNldC4gVGhpcyBhdHRyaWJ1dGUgbWlycm9ycyB0aGUgSFRNTCBmb3JtIHRhcmdldCBiZWhhdmlvciwgYWxsb3dpbmcgY29udHJvbCBvdmVyXG4gICAqIHdoZXRoZXIgZm9ybSBzdWJtaXNzaW9ucyBvcGVuIGluIHRoZSBzYW1lIHdpbmRvdywgbmV3IHdpbmRvdywgb3Igc3BlY2lmaWMgZnJhbWUuIFVzZWZ1bFxuICAgKiBmb3IgY29tcGxleCBmb3JtIHdvcmtmbG93cyBhbmQgbXVsdGktc3RlcCBwcm9jZXNzZXMuXG4gICAqXG4gICAqIEB0eXBlIHtIVE1MRm9ybVRhcmdldH1cbiAgICogQGRlZmF1bHQgJ19zZWxmJ1xuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHRhcmdldDogSFRNTEZvcm1UYXJnZXQgPSAnX3NlbGYnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBzdGF0ZSBvZiB0aGUgYWNjb3JkaW9uIChleHBhbmRlZCBvciBjb2xsYXBzZWQpLlxuICAgKiBAc3VtbWFyeSBCb29sZWFuIGZsYWcgdGhhdCB0cmFja3Mgd2hldGhlciB0aGUgZmllbGRzZXQgYWNjb3JkaW9uIGlzIGN1cnJlbnRseSBvcGVuIG9yIGNsb3NlZC5cbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgYmFzZWQgb24gdXNlciBpbnRlcmFjdGlvbnMgYW5kIGluaXRpYWwgb3BlcmF0aW9uIHN0YXRlLlxuICAgKiBJdCBzZXJ2ZXMgYXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBjb21wb25lbnQncyB2aXNpYmlsaXR5IHN0YXRlIGFuZCBpcyB1c2VkXG4gICAqIHRvIGNvb3JkaW5hdGUgYmV0d2VlbiB1c2VyIGFjdGlvbnMgYW5kIHByb2dyYW1tYXRpYyBzdGF0ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byBDUlVEIG9wZXJhdGlvbiBjb25zdGFudHMgZm9yIHRlbXBsYXRlIHVzYWdlLlxuICAgKiBAc3VtbWFyeSBFeHBvc2VzIHRoZSBPcGVyYXRpb25LZXlzIGVudW0gdG8gdGhlIGNvbXBvbmVudCB0ZW1wbGF0ZSwgZW5hYmxpbmcgY29uZGl0aW9uYWxcbiAgICogcmVuZGVyaW5nIGFuZCBiZWhhdmlvciBiYXNlZCBvbiBvcGVyYXRpb24gdHlwZXMuIFRoaXMgcHJvdGVjdGVkIHJlYWRvbmx5IHByb3BlcnR5IGVuc3VyZXNcbiAgICogdGhhdCB0ZW1wbGF0ZSBsb2dpYyBjYW4gYWNjZXNzIG9wZXJhdGlvbiBjb25zdGFudHMgd2hpbGUgbWFpbnRhaW5pbmcgZW5jYXBzdWxhdGlvbiBhbmRcbiAgICogcHJldmVudGluZyBhY2NpZGVudGFsIG1vZGlmaWNhdGlvbiBvZiB0aGUgZW51bSB2YWx1ZXMuXG4gICAqXG4gICAqIEB0eXBlIHtDcnVkT3BlcmF0aW9uc31cbiAgICogQGRlZmF1bHQgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgICogQG1lbWJlck9mIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgT3BlcmF0aW9uS2V5czogQ3J1ZE9wZXJhdGlvbnMgPSBPcGVyYXRpb25LZXlzLkNSRUFURTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiBzZXJ2aWNlLlxuICAgKiBAc3VtbWFyeSBJbmplY3RlZCBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgbWFudWFsIGNvbnRyb2wgb3ZlciBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlcy5cbiAgICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgcHJvZ3JhbW1hdGljIERPTSBjaGFuZ2VzIChsaWtlIHNldHRpbmcgYWNjb3JkaW9uXG4gICAqIGF0dHJpYnV0ZXMpIGFyZSBwcm9wZXJseSByZWZsZWN0ZWQgaW4gdGhlIGNvbXBvbmVudCdzIHN0YXRlIGFuZCB0cmlnZ2VyIGFwcHJvcHJpYXRlXG4gICAqIHZpZXcgdXBkYXRlcyB3aGVuIG1vZGlmaWNhdGlvbnMgb2NjdXIgb3V0c2lkZSB0aGUgbm9ybWFsIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiBmbG93LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Q2hhbmdlRGV0ZWN0b3JSZWZ9XG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBzdGF0ZSBhZnRlciB2aWV3IGFuZCBjaGlsZCBjb21wb25lbnRzIGFyZSByZW5kZXJlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBsaWZlY3ljbGUgaG9vayBpbXBsZW1lbnRzIGludGVsbGlnZW50IGF1dG8tc3RhdGUgbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgY3VycmVudFxuICAgKiBDUlVEIG9wZXJhdGlvbi4gRm9yIFJFQUQgYW5kIERFTEVURSBvcGVyYXRpb25zLCB0aGUgZmllbGRzZXQgYXV0b21hdGljYWxseSBvcGVucyB0byBwcm92aWRlXG4gICAqIGltbWVkaWF0ZSBhY2Nlc3MgdG8gaW5mb3JtYXRpb24sIHdoaWxlIENSRUFURSBhbmQgVVBEQVRFIG9wZXJhdGlvbnMga2VlcCBpdCBjbG9zZWQgdG8gbWFpbnRhaW5cbiAgICogYSBjbGVhbiBpbml0aWFsIGludGVyZmFjZS4gVGhlIG1ldGhvZCBkaXJlY3RseSBtYW5pcHVsYXRlcyB0aGUgRE9NIHRvIGVuc3VyZSBwcm9wZXIgYWNjb3JkaW9uXG4gICAqIHN5bmNocm9uaXphdGlvbiBhbmQgdHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiB0byByZWZsZWN0IHRoZSBwcm9ncmFtbWF0aWMgc3RhdGUgY2hhbmdlcy5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmllbGRzZXRDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBEIGFzIERPTVxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2hhbmdlRGV0ZWN0b3JcbiAgICpcbiAgICogICBBLT4+RjogbmdBZnRlclZpZXdJbml0KClcbiAgICogICBhbHQgb3BlcmF0aW9uIGlzIFJFQUQgb3IgREVMRVRFXG4gICAqICAgICBGLT4+RjogU2V0IGlzT3BlbiA9IHRydWVcbiAgICogICAgIEYtPj5EOiBRdWVyeSBpb24tYWNjb3JkaW9uLWdyb3VwIGVsZW1lbnRcbiAgICogICAgIGFsdCBhY2NvcmRpb24gZWxlbWVudCBleGlzdHNcbiAgICogICAgICAgRi0+PkQ6IFNldCB2YWx1ZSBhdHRyaWJ1dGUgdG8gJ29wZW4nXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICogICBGLT4+QzogZGV0ZWN0Q2hhbmdlcygpXG4gICAqICAgQy0+PkY6IFVwZGF0ZSB2aWV3IHdpdGggbmV3IHN0YXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmllbGRzZXRDb21wb25lbnRcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09IE9wZXJhdGlvbktleXMuUkVBRCB8fCB0aGlzLm9wZXJhdGlvbiA9PT0gT3BlcmF0aW9uS2V5cy5ERUxFVEUpIHtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGFjY29yZGlvbkVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudD8ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpb24tYWNjb3JkaW9uLWdyb3VwJyk7XG4gICAgICBpZihhY2NvcmRpb25FbGVtZW50KVxuICAgICAgICBhY2NvcmRpb25FbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnb3BlbicpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBhY2NvcmRpb24gc3RhdGUgY2hhbmdlIGV2ZW50cyBmcm9tIHVzZXIgaW50ZXJhY3Rpb25zLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgQ3VzdG9tRXZlbnQgb2JqZWN0cyB0cmlnZ2VyZWQgd2hlbiB1c2VycyBleHBhbmQgb3IgY29sbGFwc2UgdGhlIGFjY29yZGlvbi5cbiAgICogVGhpcyBtZXRob2QgZXh0cmFjdHMgdGhlIG5ldyBzdGF0ZSBmcm9tIHRoZSBldmVudCBkZXRhaWxzIGFuZCB1cGRhdGVzIHRoZSBjb21wb25lbnQnc1xuICAgKiBpbnRlcm5hbCBzdGF0ZSBhY2NvcmRpbmdseS4gSXQgc3BlY2lmaWNhbGx5IGxpc3RlbnMgZm9yIElPTi1BQ0NPUkRJT04tR1JPVVAgZXZlbnRzIHRvXG4gICAqIGVuc3VyZSBwcm9wZXIgZXZlbnQgc291cmNlIHZhbGlkYXRpb24gYW5kIHByZXZlbnQgaGFuZGxpbmcgb2YgdW5yZWxhdGVkIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgYWNjb3JkaW9uIHN0YXRlIGNoYW5nZSBkZXRhaWxzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBJIGFzIElvbi1BY2NvcmRpb25cbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpZWxkc2V0Q29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+Pkk6IENsaWNrIGFjY29yZGlvbiBoZWFkZXJcbiAgICogICBJLT4+RjogaGFuZGxlQ2hhbmdlKEN1c3RvbUV2ZW50KVxuICAgKiAgIEYtPj5GOiBFeHRyYWN0IHRhcmdldCBhbmQgZGV0YWlsIGZyb20gZXZlbnRcbiAgICogICBGLT4+RjogVmFsaWRhdGUgdGFyZ2V0IGlzIElPTi1BQ0NPUkRJT04tR1JPVVBcbiAgICogICBhbHQgdmFsaWQgdGFyZ2V0XG4gICAqICAgICBGLT4+RjogVXBkYXRlIGlzT3BlbiA9ICEhdmFsdWVcbiAgICogICBlbmRcbiAgICogICBGLT4+STogUmVmbGVjdCB1cGRhdGVkIHN0YXRlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBGaWVsZHNldENvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlQ2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCBkZXRhaWwgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGRldGFpbDtcbiAgICBpZiAoKHRhcmdldCBhcyBIVE1MSW9uQWNjb3JkaW9uR3JvdXBFbGVtZW50KS50YWdOYW1lID09PSAnSU9OLUFDQ09SRElPTi1HUk9VUCcpXG4gICAgICB0aGlzLmlzT3BlbiA9ICEhdmFsdWU7XG4gIH1cbn1cbiIsIjxmaWVsZHNldCBbY2xhc3NdPVwiJ2RjZi1maWVsZHNldCAnICsgb3BlcmF0aW9uXCIgI2NvbXBvbmVudD5cbiAgPGlvbi1hY2NvcmRpb24tZ3JvdXAgKGlvbkNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDxpb24tYWNjb3JkaW9uIHZhbHVlPVwib3BlblwiPlxuICAgICAgPGlvbi1pdGVtIHNsb3Q9XCJoZWFkZXJcIiA+XG4gICAgICAgIDxsZWdlbmQ+e3sgbmFtZSB9fTwvbGVnZW5kPlxuICAgICAgPC9pb24taXRlbT5cbiAgICAgIDxkaXYgc2xvdD1cImNvbnRlbnRcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCIgZGVjYWZDb2xsYXBzYWJsZT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tYWNjb3JkaW9uPlxuICA8L2lvbi1hY2NvcmRpb24tZ3JvdXA+XG48L2ZpZWxkc2V0PlxuIl19
@@ -1,10 +1,10 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
- import { ForAngularModule } from 'src/lib/for-angular.module';
4
- import { NgxBaseComponent } from 'src/lib/engine/NgxBaseComponent';
3
+ import { ForAngularModule } from '../../for-angular.module';
4
+ import { NgxBaseComponent } from '../../engine/NgxBaseComponent';
5
5
  import { IonChip, IonIcon, IonItem, IonLabel, IonSelect } from '@ionic/angular/standalone';
6
- import { Dynamic } from 'src/lib/engine';
7
- import { getWindowWidth } from 'src/lib/helpers/utils';
6
+ import { Dynamic } from '../../engine';
7
+ import { getWindowWidth } from '../../helpers/utils';
8
8
  import { debounceTime, fromEvent } from 'rxjs';
9
9
  import { OrderDirection, Repository } from '@decaf-ts/core';
10
10
  import { SearchbarComponent } from '../searchbar/searchbar.component';
@@ -686,4 +686,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
686
686
  }], searchEvent: [{
687
687
  type: Output
688
688
  }] } });
689
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBRXRFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBa0JJLElBQU0sZUFBZSxHQUFyQixN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Q0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBWSxDQUFDLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxDQUFDLEtBQXlCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBM3BCVSxlQUFlO21HQUFmLGVBQWUsa1dBV2lCLFVBQVUsb0RDbEZ2RCx5a0tBc0lBLGlyR0QxRUksZ0JBQWdCLDBnQ0FHaEIsT0FBTyx1R0FDUCxPQUFPLDJKQUNQLFNBQVMsa1ZBRVQsa0JBQWtCOztBQUlULGVBQWU7SUFqQjNCLE9BQU8sRUFBRTs7R0FpQkcsZUFBZSxDQTZwQjNCOzs0RkE3cEJZLGVBQWU7a0JBaEIzQixTQUFTOytCQUNFLGtCQUFrQixXQUduQjt3QkFDUCxnQkFBZ0I7d0JBQ2hCLFFBQVE7d0JBQ1IsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLGtCQUFrQjtxQkFDbkIsY0FDVyxJQUFJO3dEQWNoQixvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBY3RFLE9BQU87c0JBRE4sS0FBSztnQkFjTixVQUFVO3NCQURULEtBQUs7Z0JBY04sTUFBTTtzQkFETCxLQUFLO2dCQWNOLFdBQVc7c0JBRFYsS0FBSztnQkF5SU4sV0FBVztzQkFEVixNQUFNO2dCQVVQLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9yQW5ndWxhck1vZHVsZSB9IGZyb20gJ3NyYy9saWIvZm9yLWFuZ3VsYXIubW9kdWxlJztcbmltcG9ydCB7IE5neEJhc2VDb21wb25lbnQgfSBmcm9tICdzcmMvbGliL2VuZ2luZS9OZ3hCYXNlQ29tcG9uZW50JztcbmltcG9ydCB7IElvbkNoaXAsIElvbkljb24sIElvbkl0ZW0sIElvbkxhYmVsLCBJb25TZWxlY3R9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgRHluYW1pYywgSUZpbHRlclF1ZXJ5LCBJRmlsdGVyUXVlcnlJdGVtIH0gZnJvbSAnc3JjL2xpYi9lbmdpbmUnO1xuaW1wb3J0IHsgZ2V0V2luZG93V2lkdGggfSBmcm9tICdzcmMvbGliL2hlbHBlcnMvdXRpbHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3JkZXJEaXJlY3Rpb24sIFJlcG9zaXRvcnkgfSBmcm9tICdAZGVjYWYtdHMvY29yZSc7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBTZWFyY2hiYXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZXZyb25Eb3duT3V0bGluZSwgY2hldnJvblVwT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQWR2YW5jZWQgZmlsdGVyIGNvbXBvbmVudCBmb3IgY3JlYXRpbmcgZHluYW1pYyBzZWFyY2ggZmlsdGVycyB3aXRoIHN0ZXAtYnktc3RlcCBjb25zdHJ1Y3Rpb24uXG4gKiBAc3VtbWFyeSBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgZmlsdGVyaW5nIGludGVyZmFjZSB0aGF0IGFsbG93cyB1c2VycyB0byBidWlsZFxuICogY29tcGxleCBzZWFyY2ggY3JpdGVyaWEgdXNpbmcgYSB0aHJlZS1zdGVwIGFwcHJvYWNoOiBzZWxlY3QgaW5kZXgg4oaSIHNlbGVjdCBjb25kaXRpb24g4oaSIGVudGVyIHZhbHVlLlxuICogSXQgc3VwcG9ydHMgZmlsdGVyaW5nIGJ5IG11bHRpcGxlIGZpZWxkIGluZGV4ZXMsIGNvbXBhcmlzb24gY29uZGl0aW9ucywgYW5kIHZhbHVlcywgZGlzcGxheWluZ1xuICogc2VsZWN0ZWQgZmlsdGVycyBhcyByZW1vdmFibGUgY2hpcHMuIFRoZSBjb21wb25lbnQgaXMgcmVzcG9uc2l2ZSBhbmQgaW5jbHVkZXMgYXV0by1zdWdnZXN0aW9uc1xuICogd2l0aCBrZXlib2FyZCBuYXZpZ2F0aW9uIHN1cHBvcnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxuZ3gtZGVjYWYtZmlsdGVyXG4gKiAgIFtpbmRleGVzXT1cIlsnbmFtZScsICdlbWFpbCcsICdkZXBhcnRtZW50JywgJ3N0YXR1cyddXCJcbiAqICAgW2NvbmRpdGlvbnNdPVwiWydFcXVhbCcsICdDb250YWlucycsICdHcmVhdGVyIFRoYW4nLCAnTGVzcyBUaGFuJ11cIlxuICogICBbc29ydF09XCJbJ2NyZWF0ZWRBdCcsICd1cGRhdGVkQXQnXVwiXG4gKiAgIFtkaXNhYmxlU29ydF09XCJmYWxzZVwiXG4gKiAgIChmaWx0ZXJFdmVudCk9XCJvbkZpbHRlcnNDaGFuZ2VkKCRldmVudClcIj5cbiAqIDwvbmd4LWRlY2FmLWZpbHRlcj5cbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gKiAgIHBhcnRpY2lwYW50IFAgYXMgUGFyZW50IENvbXBvbmVudFxuICpcbiAqICAgVS0+PkY6IEZvY3VzIGlucHV0IGZpZWxkXG4gKiAgIEYtPj5GOiBoYW5kbGVGb2N1cygpIC0gU2hvdyBhdmFpbGFibGUgaW5kZXhlc1xuICogICBVLT4+RjogU2VsZWN0IGluZGV4IChlLmcuLCBcIm5hbWVcIilcbiAqICAgRi0+PkY6IGFkZEZpbHRlcigpIC0gU3RlcCAxIGNvbXBsZXRlZFxuICogICBGLT4+RjogU2hvdyBhdmFpbGFibGUgY29uZGl0aW9uc1xuICogICBVLT4+RjogU2VsZWN0IGNvbmRpdGlvbiAoZS5nLiwgXCJDb250YWluc1wiKVxuICogICBGLT4+RjogYWRkRmlsdGVyKCkgLSBTdGVwIDIgY29tcGxldGVkXG4gKiAgIEYtPj5GOiBTaG93IHZhbHVlIGlucHV0IHByb21wdFxuICogICBVLT4+RjogRW50ZXIgdmFsdWUgYW5kIHByZXNzIEVudGVyXG4gKiAgIEYtPj5GOiBhZGRGaWx0ZXIoKSAtIFN0ZXAgMyBjb21wbGV0ZWRcbiAqICAgRi0+PkY6IENyZWF0ZSBjb21wbGV0ZSBmaWx0ZXIgb2JqZWN0XG4gKiAgIEYtPj5QOiBFbWl0IGZpbHRlckV2ZW50IHdpdGggbmV3IGZpbHRlciBhcnJheVxuICogICBGLT4+RjogUmVzZXQgdG8gc3RlcCAxIGZvciBuZXh0IGZpbHRlclxuICpcbiAqIEBtZW1iZXJPZiBGb3JBbmd1bGFyTW9kdWxlXG4gKi9cbkBEeW5hbWljKClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kZWNhZi1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtcbiAgICBGb3JBbmd1bGFyTW9kdWxlLFxuICAgIElvbkxhYmVsLFxuICAgIElvbkl0ZW0sXG4gICAgSW9uQ2hpcCxcbiAgICBJb25JY29uLFxuICAgIElvblNlbGVjdCxcbiAgICBJb25JY29uLFxuICAgIFNlYXJjaGJhckNvbXBvbmVudFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgZXh0ZW5kcyBOZ3hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBkcm9wZG93biBvcHRpb25zIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBWaWV3Q2hpbGQgcmVmZXJlbmNlIHVzZWQgdG8gYWNjZXNzIGFuZCBtYW5pcHVsYXRlIHRoZSBkcm9wZG93biBvcHRpb25zIGVsZW1lbnRcbiAgICogZm9yIGhpZ2hsaWdodGluZyBmaWx0ZXJlZCBpdGVtcyBhbmQgbWFuYWdpbmcgdmlzdWFsIGZlZWRiYWNrIGR1cmluZyBvcHRpb24gc2VsZWN0aW9uLlxuICAgKiBUaGlzIGVsZW1lbnQgY29udGFpbnMgdGhlIGZpbHRlcmFibGUgc3VnZ2VzdGlvbnMgdGhhdCB1c2VycyBjYW4gaW50ZXJhY3Qgd2l0aC5cbiAgICpcbiAgICogQHR5cGUge0VsZW1lbnRSZWZ9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNGaWx0ZXJFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIG9wdGlvbnNGaWx0ZXJFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEF2YWlsYWJsZSBmaWVsZCBpbmRleGVzIGZvciBmaWx0ZXJpbmcgb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbGlzdCBvZiBmaWVsZCBuYW1lcyB0aGF0IHVzZXJzIGNhbiBmaWx0ZXIgYnkuIFRoZXNlIHJlcHJlc2VudFxuICAgKiB0aGUgZGF0YSBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBmb3IgZmlsdGVyaW5nIG9wZXJhdGlvbnMuIEVhY2ggaW5kZXggY29ycmVzcG9uZHMgdG9cbiAgICogYSBmaWVsZCBpbiB0aGUgZGF0YSBtb2RlbCB0aGF0IHN1cHBvcnRzIGNvbXBhcmlzb24gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpbmRleGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXZhaWxhYmxlIGNvbXBhcmlzb24gY29uZGl0aW9ucyBmb3IgZmlsdGVycy5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbGlzdCBvZiBjb21wYXJpc29uIG9wZXJhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgZmlsdGVycy5cbiAgICogVGhlc2UgY29uZGl0aW9ucyBkZXRlcm1pbmUgaG93IHRoZSBmaWx0ZXIgdmFsdWUgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZmllbGQgdmFsdWUuXG4gICAqIENvbW1vbiBjb25kaXRpb25zIGluY2x1ZGUgZXF1YWxpdHksIGNvbnRhaW5tZW50LCBhbmQgbnVtZXJpY2FsIGNvbXBhcmlzb24gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjb25kaXRpb25zOiBzdHJpbmdbXSA9IFsnRXF1YWwnLCAnQ29udGFpbnMnLCAnTm90IENvbnRhaW5zJywgJ0dyZWF0ZXIgVGhhbicsICdMZXNzIFRoYW4nLCAnTm90IEVxdWFsJ107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBdmFpbGFibGUgc29ydGluZyBvcHRpb25zIGZvciB0aGUgZmlsdGVyZWQgZGF0YS5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbGlzdCBvZiBmaWVsZCBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGZvciBzb3J0aW5nIHRoZSBmaWx0ZXJlZCByZXN1bHRzLlxuICAgKiBXaGVuIGRpc2FibGVTb3J0IGlzIGZhbHNlLCB0aGlzIGFycmF5IGlzIGF1dG9tYXRpY2FsbHkgbWVyZ2VkIHdpdGggdGhlIGluZGV4ZXMgYXJyYXlcbiAgICogdG8gcHJvdmlkZSBjb21wcmVoZW5zaXZlIHNvcnRpbmcgY2FwYWJpbGl0aWVzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNvcnRCeTogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgc29ydGluZyBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLlxuICAgKiBAc3VtbWFyeSBXaGVuIHNldCB0byB0cnVlLCBwcmV2ZW50cyB0aGUgYXV0b21hdGljIG1lcmdpbmcgb2Ygc29ydCBhbmQgaW5kZXhlcyBhcnJheXMsXG4gICAqIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBzb3J0aW5nIGNhcGFiaWxpdGllcy4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBwcm92aWRlXG4gICAqIGZpbHRlcmluZyB3aXRob3V0IHNvcnRpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVTb3J0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHdpbmRvdyB3aWR0aCBmb3IgcmVzcG9uc2l2ZSBiZWhhdmlvci5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93IHdpZHRoIGluIHBpeGVscy4gVGhpcyB2YWx1ZSBpcyB1cGRhdGVkXG4gICAqIG9uIHdpbmRvdyByZXNpemUgZXZlbnRzIHRvIGVuYWJsZSByZXNwb25zaXZlIGZpbHRlcmluZyBiZWhhdmlvciBhbmQgbGF5b3V0IGFkanVzdG1lbnRzXG4gICAqIGJhc2VkIG9uIGF2YWlsYWJsZSBzY3JlZW4gc3BhY2UuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHdpbmRvd1dpZHRoITogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXZhaWxhYmxlIG9wdGlvbnMgZm9yIHRoZSBjdXJyZW50IGZpbHRlciBzdGVwLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgbGlzdCBvZiBvcHRpb25zIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uIGluIHRoZSBjdXJyZW50IHN0ZXAuXG4gICAqIFRoaXMgYXJyYXkgY2hhbmdlcyBkeW5hbWljYWxseSBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGVwOiBpbmRleGVzIOKGkiBjb25kaXRpb25zIOKGkiBlbXB0eSBmb3IgdmFsdWUgaW5wdXQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZpbHRlcmVkIG9wdGlvbnMgYmFzZWQgb24gdXNlciBpbnB1dC5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgdGhlIHN1YnNldCBvZiBvcHRpb25zIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgdXNlciBpbnB1dCBmb3IgcmVhbC10aW1lXG4gICAqIGZpbHRlcmluZy4gVGhpcyBhcnJheSBpcyB1cGRhdGVkIGFzIHRoZSB1c2VyIHR5cGVzIHRvIHNob3cgb25seSByZWxldmFudCBzdWdnZXN0aW9uc1xuICAgKiBpbiB0aGUgZHJvcGRvd24gbWVudS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBmaWx0ZXJlZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb21wbGV0ZSBmaWx0ZXIgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBBcnJheSBvZiBjb21wbGV0ZSBmaWx0ZXIgb2JqZWN0cywgZWFjaCBjb250YWluaW5nIGluZGV4LCBjb25kaXRpb24sIGFuZCB2YWx1ZSBwcm9wZXJ0aWVzLlxuICAgKiBUaGVzZSByZXByZXNlbnQgdGhlIGFjdGl2ZSBmaWx0ZXJzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gZGF0YSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWVbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZmlsdGVyVmFsdWU6IElGaWx0ZXJRdWVyeUl0ZW1bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBmaWx0ZXIgYmVpbmcgY29uc3RydWN0ZWQuXG4gICAqIEBzdW1tYXJ5IFRlbXBvcmFyeSBvYmplY3QgdGhhdCBhY2N1bXVsYXRlcyBmaWx0ZXIgcHJvcGVydGllcyAoaW5kZXgsIGNvbmRpdGlvbiwgdmFsdWUpXG4gICAqIGR1cmluZyB0aGUgdGhyZWUtc3RlcCBmaWx0ZXIgY3JlYXRpb24gcHJvY2Vzcy4gR2V0cyBhZGRlZCB0byBmaWx0ZXJWYWx1ZSB3aGVuIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWV9XG4gICAqIEBkZWZhdWx0IHt9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGxhc3RGaWx0ZXI6IElGaWx0ZXJRdWVyeUl0ZW0gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc3RlcCBpbiB0aGUgZmlsdGVyIGNyZWF0aW9uIHByb2Nlc3MuXG4gICAqIEBzdW1tYXJ5IFRyYWNrcyB0aGUgY3VycmVudCBzdGVwIG9mIGZpbHRlciBjcmVhdGlvbjogMSA9IGluZGV4IHNlbGVjdGlvbiwgMiA9IGNvbmRpdGlvbiBzZWxlY3Rpb24sXG4gICAqIDMgPSB2YWx1ZSBpbnB1dC4gQXV0b21hdGljYWxseSByZXNldHMgdG8gMSBhZnRlciBjb21wbGV0aW5nIGEgZmlsdGVyLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHN0ZXA6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb250cm9scyBkcm9wZG93biB2aXNpYmlsaXR5IHN0YXRlLlxuICAgKiBAc3VtbWFyeSBCb29sZWFuIGZsYWcgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG9wdGlvbnMgZHJvcGRvd24gaXMgY3VycmVudGx5IHZpc2libGUuXG4gICAqIFVzZWQgdG8gbWFuYWdlIHRoZSBkcm9wZG93bidzIG9wZW4vY2xvc2Ugc3RhdGUgYW5kIGNvb3JkaW5hdGUgd2l0aCBmb2N1cy9ibHVyIGV2ZW50cy5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBpbnB1dCBmaWVsZCB2YWx1ZS5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBjdXJyZW50IHRleHQgaW5wdXQgdmFsdWUgdGhhdCB0aGUgdXNlciBpcyB0eXBpbmcuIFRoaXMgdmFsdWUgaXNcbiAgICogYm91bmQgdG8gdGhlIGlucHV0IGZpZWxkIGFuZCBpcyBjbGVhcmVkIGFmdGVyIGVhY2ggc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RlcCBjb21wbGV0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICB2YWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHNvcnRpbmcgZmllbGQgdmFsdWUuXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgZmllbGQgbmFtZSBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHNvcnRpbmcgb3BlcmF0aW9ucy5cbiAgICogVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIHdoaWNoIGZpZWxkIGlzIHVzZWQgdG8gb3JkZXIgdGhlIGZpbHRlcmVkIHJlc3VsdHMuXG4gICAqIERlZmF1bHRzIHRvICdpZCcgYW5kIGNhbiBiZSBjaGFuZ2VkIHRocm91Z2ggdGhlIHNvcnQgZHJvcGRvd24gc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnaWQnXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHNvcnRWYWx1ZTogc3RyaW5nID0gJ2lkJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc29ydGluZyBkaXJlY3Rpb24uXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydCBvcGVyYXRpb24gLSBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZy5cbiAgICogVGhpcyB2YWx1ZSB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHNvcnRWYWx1ZSB0byBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlXG4gICAqIHNvcnRpbmcgY29uZmlndXJhdGlvbiBmb3IgZmlsdGVyZWQgcmVzdWx0cy5cbiAgICpcbiAgICogQHR5cGUge09yZGVyRGlyZWN0aW9ufVxuICAgKiBAZGVmYXVsdCBPcmRlckRpcmVjdGlvbi5EU0NcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc29ydERpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb24gPSBPcmRlckRpcmVjdGlvbi5EU0M7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdWJzY3JpcHRpb24gZm9yIHdpbmRvdyByZXNpemUgZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBSeEpTIHN1YnNjcmlwdGlvbiB0aGF0IGxpc3RlbnMgZm9yIHdpbmRvdyByZXNpemUgZXZlbnRzIHdpdGggZGVib3VuY2luZ1xuICAgKiB0byB1cGRhdGUgdGhlIHdpbmRvd1dpZHRoIHByb3BlcnR5LiBUaGlzIGVuYWJsZXMgcmVzcG9uc2l2ZSBiZWhhdmlvciBhbmQgcHJldmVudHNcbiAgICogZXhjZXNzaXZlIHVwZGF0ZXMgZHVyaW5nIHJlc2l6ZSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7U3Vic2NyaXB0aW9ufVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICB3aW5kb3dSZXNpemVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBmaWx0ZXIgY2hhbmdlcy5cbiAgICogQHN1bW1hcnkgRW1pdHMgZmlsdGVyIGV2ZW50cyB3aGVuIHRoZSB1c2VyIGNyZWF0ZXMsIG1vZGlmaWVzLCBvciBjbGVhcnMgZmlsdGVycy5cbiAgICogVGhlIGVtaXR0ZWQgdmFsdWUgY29udGFpbnMgYW4gYXJyYXkgb2YgY29tcGxldGUgZmlsdGVyIG9iamVjdHMgb3IgdW5kZWZpbmVkIHdoZW5cbiAgICogZmlsdGVycyBhcmUgY2xlYXJlZC4gUGFyZW50IGNvbXBvbmVudHMgbGlzdGVuIHRvIHRoaXMgZXZlbnQgdG8gdXBkYXRlIHRoZWlyIGRhdGEgZGlzcGxheS5cbiAgICpcbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxLZXlWYWx1ZVtdIHwgdW5kZWZpbmVkPn1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGZpbHRlckV2ZW50OiBFdmVudEVtaXR0ZXI8SUZpbHRlclF1ZXJ5IHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUZpbHRlclF1ZXJ5IHwgdW5kZWZpbmVkPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZW1pdHRlciBmb3Igc2VhcmNoIGV2ZW50cy5cbiAgICogQHN1bW1hcnkgRW1pdHMgc2VhcmNoIGV2ZW50cyB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzZWFyY2hiYXIuXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nPn1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHNlYXJjaEV2ZW50OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvciBmb3IgRmlsdGVyQ29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgRmlsdGVyQ29tcG9uZW50LlxuICAgKiBDYWxscyB0aGUgcGFyZW50IGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lIHRvIGVzdGFibGlzaCBiYXNlIGxvY2FsZSBzdHJpbmcgZ2VuZXJhdGlvblxuICAgKiBhbmQgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydC5cbiAgICpcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJGaWx0ZXJDb21wb25lbnRcIik7XG4gICAgYWRkSWNvbnMoe2NoZXZyb25Eb3duT3V0bGluZSwgY2hldnJvblVwT3V0bGluZX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGFmdGVyIEFuZ3VsYXIgZmlyc3QgZGlzcGxheXMgdGhlIGRhdGEtYm91bmQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgY29tcG9uZW50IGJ5IGluaXRpYWxpemluZyB3aW5kb3cgd2lkdGggdHJhY2tpbmcsIHNldHRpbmcgdXAgcmVzaXplIGV2ZW50XG4gICAqIHN1YnNjcmlwdGlvbnMgd2l0aCBkZWJvdW5jaW5nLCBjb25maWd1cmluZyBzb3J0aW5nIG9wdGlvbnMsIGFuZCBjYWxsaW5nIHRoZSBiYXNlIGluaXRpYWxpemF0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCBwcmVwYXJlcyB0aGUgY29tcG9uZW50IGZvciB1c2VyIGludGVyYWN0aW9uIGFuZCByZXNwb25zaXZlIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFuZ3VsYXIgTGlmZWN5Y2xlXG4gICAqICAgcGFydGljaXBhbnQgRiBhcyBGaWx0ZXJDb21wb25lbnRcbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIFdpbmRvd1xuICAgKiAgIHBhcnRpY2lwYW50IFIgYXMgUnhKU1xuICAgKlxuICAgKiAgIEEtPj5GOiBuZ09uSW5pdCgpXG4gICAqICAgRi0+Plc6IGdldFdpbmRvd1dpZHRoKClcbiAgICogICBXLS0+PkY6IFJldHVybiBjdXJyZW50IHdpZHRoXG4gICAqICAgRi0+PlI6IFNldHVwIHJlc2l6ZSBzdWJzY3JpcHRpb24gd2l0aCBkZWJvdW5jZVxuICAgKiAgIFItLT4+RjogU3Vic2NyaXB0aW9uIGNyZWF0ZWRcbiAgICogICBhbHQgZGlzYWJsZVNvcnQgaXMgZmFsc2VcbiAgICogICAgIEYtPj5GOiBNZXJnZSBzb3J0IGFuZCBpbmRleGVzIGFycmF5c1xuICAgKiAgIGVuZFxuICAgKiAgIEYtPj5GOiBDYWxsIGluaXRpYWxpemUoKVxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IGdldFdpbmRvd1dpZHRoKCkgYXMgbnVtYmVyO1xuICAgIHRoaXMud2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgIHRoaXMud2luZG93V2lkdGggPSBnZXRXaW5kb3dXaWR0aCgpIGFzIG51bWJlcjtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2V0SW5kZXhlcygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYW5kIGNvbmZpZ3VyZXMgYXZhaWxhYmxlIGluZGV4ZXMgZm9yIGZpbHRlcmluZyBhbmQgc29ydGluZy5cbiAgICogQHN1bW1hcnkgRXh0cmFjdHMgZmllbGQgaW5kZXhlcyBmcm9tIHRoZSBtb2RlbCBpZiBhdmFpbGFibGUgYW5kIG1lcmdlcyB0aGVtIHdpdGhcbiAgICogc29ydGluZyBvcHRpb25zIHdoZW4gc29ydGluZyBpcyBlbmFibGVkLiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSBhdmFpbGFibGUgZmllbGRcbiAgICogb3B0aW9ucyBmb3IgYm90aCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGUgbW9kZWwgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZ2V0SW5kZXhlcygpOiB2b2lkIHtcbiAgICBpZih0aGlzLm1vZGVsKVxuICAgICAgdGhpcy5pbmRleGVzID0gT2JqZWN0LmtleXMoUmVwb3NpdG9yeS5pbmRleGVzKHRoaXMubW9kZWwgYXMgTW9kZWwpIHx8IHt9KTtcbiAgICBpZighdGhpcy5kaXNhYmxlU29ydClcbiAgICAgIHRoaXMuc29ydEJ5ID0gWy4uLiB0aGlzLnNvcnRCeSwgLi4udGhpcy5pbmRleGVzXTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhbnVwIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICogQHN1bW1hcnkgVW5zdWJzY3JpYmVzIGZyb20gd2luZG93IHJlc2l6ZSBldmVudHMgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXG4gICAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciBwcm9wZXIgY2xlYW51cCBvZiBSeEpTIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50XG4gICAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgaW5wdXQgZXZlbnRzIGZyb20gdGhlIHRleHQgZmllbGQuXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyB1c2VyIGlucHV0IGFuZCBmaWx0ZXJzIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgdHlwZWQgdmFsdWUuXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHJlYWwtdGltZSBmaWx0ZXJpbmcgb2Ygc3VnZ2VzdGlvbnMgYXMgdGhlIHVzZXIgdHlwZXMgaW4gdGhlIGlucHV0IGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0ge0lucHV0RXZlbnR9IGV2ZW50IC0gVGhlIGlucHV0IGV2ZW50IGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlSW5wdXQoZXZlbnQ6IElucHV0RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7dmFsdWV9ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZm9jdXMgZXZlbnRzIG9uIHRoZSBpbnB1dCBmaWVsZC5cbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgd2hlbiB0aGUgaW5wdXQgZmllbGQgcmVjZWl2ZXMgZm9jdXMgYW5kIG9wZW5zIHRoZSBkcm9wZG93bi5cbiAgICogSWYgbm8gb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lcyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IHN0ZXAuXG4gICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBkcm9wZG93biB3aXRoIGNvbnRleHR1YWxseSByZWxldmFudCBzdWdnZXN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gb3B0aW9ucyAtIE9wdGlvbmFsIGFycmF5IG9mIG9wdGlvbnMgdG8gZGlzcGxheVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlRm9jdXMob3B0aW9uczogc3RyaW5nW10gID0gW10pOiB2b2lkIHtcbiAgICBpZighb3B0aW9ucy5sZW5ndGgpXG4gICAgIG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGJsdXIgZXZlbnRzIG9uIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGRlbGF5ZWQgY2xvc2luZy5cbiAgICogQHN1bW1hcnkgTWFuYWdlcyB0aGUgZHJvcGRvd24gY2xvc2luZyBiZWhhdmlvciB3aXRoIGEgZGVsYXkgdG8gYWxsb3cgZm9yIG9wdGlvbiBzZWxlY3Rpb24uXG4gICAqIFVzZXMgYSB0d28tcGhhc2UgYXBwcm9hY2ggdG8gcHJldmVudCBwcmVtYXR1cmUgY2xvc2luZyB3aGVuIHVzZXJzIGNsaWNrIG9uIGRyb3Bkb3duIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvc2UgLSBJbnRlcm5hbCBmbGFnIHRvIGNvbnRyb2wgdGhlIGNsb3NpbmcgcGhhc2VcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUJsdXIoY2xvc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmKCFjbG9zZSkge1xuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUJsdXIodHJ1ZSk7XG4gICAgICB9LCAxMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZighdGhpcy5kcm9wZG93bk9wZW4gJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpbHRlciBzdGVwLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBjb250ZXh0dWFsbHkgcmVsZXZhbnQgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc3RlcCBpbiB0aGUgZmlsdGVyIGNyZWF0aW9uIHByb2Nlc3MuXG4gICAqIFN0ZXAgMSBzaG93cyBpbmRleGVzLCBTdGVwIDIgc2hvd3MgY29uZGl0aW9ucywgU3RlcCAzIHNob3dzIG5vIG9wdGlvbnMgKHZhbHVlIGlucHV0KS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBBcnJheSBvZiBvcHRpb25zIGFwcHJvcHJpYXRlIGZvciB0aGUgY3VycmVudCBzdGVwXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGdldE9wdGlvbnMoKTogc3RyaW5nW10ge1xuICAgc3dpdGNoICh0aGlzLnN0ZXApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5pbmRleGVzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5jb25kaXRpb25zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSBmaWx0ZXIgc3RlcCBvciBjb21wbGV0ZXMgZmlsdGVyIGNyZWF0aW9uIHRocm91Z2ggYSB0aHJlZS1zdGVwIHByb2Nlc3MuXG4gICAqIEBzdW1tYXJ5IENvcmUgbWV0aG9kIGZvciBidWlsZGluZyBmaWx0ZXJzIHN0ZXAgYnkgc3RlcDogU3RlcCAxIChJbmRleCkg4oaSIFN0ZXAgMiAoQ29uZGl0aW9uKSDihpIgU3RlcCAzIChWYWx1ZSkuXG4gICAqIFdoZW4gYWxsIHN0ZXBzIGFyZSBjb21wbGV0ZSwgY3JlYXRlcyBhIGNvbXBsZXRlIGZpbHRlciBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIGZpbHRlciBjb2xsZWN0aW9uLlxuICAgKiBIYW5kbGVzIGJvdGgga2V5Ym9hcmQgZXZlbnRzIChFbnRlciB0byBzdWJtaXQpIGFuZCBwcm9ncmFtbWF0aWMgY2FsbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhZGQgZm9yIHRoZSBjdXJyZW50IHN0ZXBcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgLSBPcHRpb25hbCBldmVudCAoS2V5Ym9hcmRFdmVudCB0cmlnZ2VycyBzdWJtaXNzaW9uIHdoZW4gdmFsdWUgaXMgZW1wdHkpXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpbHRlckNvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5GOiBhZGRGaWx0ZXIodmFsdWUsIGV2ZW50KVxuICAgKiAgIEYtPj5GOiBUcmltIGFuZCB2YWxpZGF0ZSB2YWx1ZVxuICAgKiAgIGFsdCBLZXlib2FyZEV2ZW50ICYmIGVtcHR5IHZhbHVlXG4gICAqICAgICBGLT4+Rjogc3VibWl0KCkgLSBTZW5kIGN1cnJlbnQgZmlsdGVyc1xuICAgKiAgIGVsc2UgVmFsaWQgdmFsdWUgb3Igc3RlcCAzXG4gICAqICAgICBhbHQgU3RlcCAxIChJbmRleClcbiAgICogICAgICAgRi0+PkY6IGxhc3RGaWx0ZXIuaW5kZXggPSB2YWx1ZVxuICAgKiAgICAgICBGLT4+Rjogb3B0aW9ucyA9IGNvbmRpdGlvbnNcbiAgICogICAgIGVsc2UgU3RlcCAyIChDb25kaXRpb24pXG4gICAqICAgICAgIEYtPj5GOiBsYXN0RmlsdGVyLmNvbmRpdGlvbiA9IHZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBvcHRpb25zID0gW11cbiAgICogICAgIGVsc2UgU3RlcCAzIChWYWx1ZSlcbiAgICogICAgICAgRi0+PkY6IGxhc3RGaWx0ZXIudmFsdWUgPSB2YWx1ZVxuICAgKiAgICAgICBGLT4+RjogQWRkIGNvbXBsZXRlIGZpbHRlciB0byBmaWx0ZXJWYWx1ZVxuICAgKiAgICAgICBGLT4+RjogUmVzZXQgc3RlcCB0byAxXG4gICAqICAgICBlbmRcbiAgICogICAgIEYtPj5GOiBJbmNyZW1lbnQgc3RlcFxuICAgKiAgICAgRi0+PkY6IENsZWFyIGlucHV0ICYgZm9jdXNcbiAgICogICAgIEYtPj5GOiBTaG93IG5leHQgb3B0aW9uc1xuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBhZGRGaWx0ZXIodmFsdWU6IHN0cmluZywgZXZlbnQ/OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgIGlmKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiAhdmFsdWUpIHtcbiAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICBpZigodmFsdWUgJiYgKCEoZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KSkgfHwgdGhpcy5zdGVwID09PSAzKSkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmxhc3RGaWx0ZXI7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zdGVwKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgZmlsdGVyWydpbmRleCddID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNvbmRpdGlvbnM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBmaWx0ZXJbJ2NvbmRpdGlvbiddID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGZpbHRlclsndmFsdWUnXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5pbmRleGVzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIXRoaXMuZmlsdGVyVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZS5wdXNoKGZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYodGhpcy5zdGVwID09PSAxKVxuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZS5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5zdGVwID09PSAzKSB7XG4gICAgICAgICAgdGhpcy5zdGVwID0gMDtcbiAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlW3RoaXMuZmlsdGVyVmFsdWUubGVuZ3RoIC0gMV0gPSBmaWx0ZXI7XG4gICAgICAgICAgdGhpcy5sYXN0RmlsdGVyID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGVwKys7XG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmxlbmd0aClcbiAgICAgICAgICB0aGlzLmhhbmRsZUZvY3VzKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlbGVjdHMgYW4gb3B0aW9uIGZyb20gdGhlIGRyb3Bkb3duIHN1Z2dlc3Rpb25zLlxuICAgKiBAc3VtbWFyeSBIYW5kbGVzIG9wdGlvbiBzZWxlY3Rpb24gd2hlbiBhIHVzZXIgY2xpY2tzIG9uIGEgc3VnZ2VzdGlvbiBpbiB0aGUgZHJvcGRvd24uXG4gICAqIFRoaXMgbWV0aG9kIGFjdHMgYXMgYSBicmlkZ2UgYmV0d2VlbiBkcm9wZG93biBjbGlja3MgYW5kIHRoZSBtYWluIGFkZEZpbHRlciBsb2dpYy5cbiAgICpcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgLSBUaGUgY2xpY2sgZXZlbnQgZnJvbSB0aGUgZHJvcGRvd24gb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBzZWxlY3RlZCBvcHRpb24gdmFsdWVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHNlbGVjdE9wdGlvbih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hZGRGaWx0ZXIodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIGlmIGEgZmlsdGVyIG9wdGlvbiBjYW4gYmUgaW5kaXZpZHVhbGx5IHJlbW92ZWQuXG4gICAqIEBzdW1tYXJ5IENoZWNrcyB3aGV0aGVyIGEgZmlsdGVyIGNvbXBvbmVudCBzaG91bGQgZGlzcGxheSBhIGNsb3NlIGljb24gZm9yIHJlbW92YWwuXG4gICAqIE9ubHkgdmFsdWUgb3B0aW9ucyBjYW4gYmUgcmVtb3ZlZCBpbmRpdmlkdWFsbHk7IGluZGV4IGFuZCBjb25kaXRpb24gb3B0aW9ucyBhcmUgcGFydFxuICAgKiBvZiB0aGUgY29tcGxldGUgZmlsdGVyIHN0cnVjdHVyZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQgc2VwYXJhdGVseS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbiAtIFRoZSBmaWx0ZXIgb3B0aW9uIHRleHQgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9wdGlvbiBjYW4gYmUgY2xlYXJlZCBpbmRpdmlkdWFsbHksIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBhbGxvd0NsZWFyKG9wdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXhlcy5pbmRleE9mKG9wdGlvbikgPT09IC0xICYmIHRoaXMuY29uZGl0aW9ucy5pbmRleE9mKG9wdGlvbikgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGEgY29tcGxldGUgZmlsdGVyIGZyb20gdGhlIGNvbGxlY3Rpb24gYmFzZWQgb24gZmlsdGVyIHZhbHVlLlxuICAgKiBAc3VtbWFyeSBSZW1vdmVzIGEgY29tcGxldGUgZmlsdGVyIGJ5IG1hdGNoaW5nIHRoZSBwcm92aWRlZCB2YWx1ZSBhZ2FpbnN0IGZpbHRlciB2YWx1ZXNcbiAgICogaW4gdGhlIGNvbGxlY3Rpb24uIFVzZXMgc3RyaW5nIG5vcm1hbGl6YXRpb24gdG8gaGFuZGxlIGFjY2VudHMgYW5kIGNhc2UgZGlmZmVyZW5jZXMuXG4gICAqIEFmdGVyIHJlbW92YWwsIHJlc2V0cyB0aGUgaW50ZXJmYWNlIHRvIHNob3cgYXZhaWxhYmxlIGluZGV4ZXMgZm9yIG5ldyBmaWx0ZXIgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHZhbHVlIHRvIHJlbW92ZSAobWF0Y2hlcyBhZ2FpbnN0IGZpbHRlci52YWx1ZSBwcm9wZXJ0eSlcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PkY6IHJlbW92ZUZpbHRlcihmaWx0ZXJWYWx1ZSlcbiAgICogICBGLT4+RjogY2xlYW5TdHJpbmcoZmlsdGVyVmFsdWUpXG4gICAqICAgRi0+PkY6IEZpbHRlciBvdXQgbWF0Y2hpbmcgZmlsdGVyIG9iamVjdHNcbiAgICogICBGLT4+RjogQ2xlYXIgaW5wdXQgdmFsdWVcbiAgICogICBGLT4+RjogaGFuZGxlRm9jdXMoaW5kZXhlcykgLSBSZXNldCB0byBpbmRleCBzZWxlY3Rpb25cbiAgICogICBOb3RlIG92ZXIgRjogRmlsdGVyIHJlbW92ZWQgYW5kIFVJIHJlc2V0XG4gICAqXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHJlbW92ZUZpbHRlcihmaWx0ZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGZ1bmN0aW9uIGNsZWFuU3RyaW5nKGZpbHRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBmaWx0ZXJcbiAgICAgICAgLnRvTG93ZXJDYXNlKCkgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgYWxsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlXG4gICAgICAgIC5ub3JtYWxpemUoXCJORkRcIikgICAgICAgICAgICAgIC8vIHNlcGFyYXRlIGFjY2VudCBtYXJrcyBmcm9tIGNoYXJhY3RlcnNcbiAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpIC8vIHJlbW92ZSBhY2NlbnQgbWFya3NcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7ICAgICAgICAgIC8vIHJlbW92ZSBhbGwgd2hpdGVzcGFjZVxuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0/LlsndmFsdWUnXSAmJiBjbGVhblN0cmluZyhpdGVtPy5bJ3ZhbHVlJ10pICE9PSBjbGVhblN0cmluZyhmaWx0ZXIpKTtcbiAgICBpZih0aGlzLmZpbHRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgIHRoaXMubGFzdEZpbHRlciA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUZvY3VzKHRoaXMuaW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlc2V0cyB0aGUgY29tcG9uZW50IHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuICAgKiBAc3VtbWFyeSBDbGVhcnMgYWxsIGZpbHRlciBkYXRhLCBvcHRpb25zLCBhbmQgcmVzZXRzIHRoZSBzdGVwIGNvdW50ZXIgdG8gMS5cbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBjbGVhbiBzbGF0ZSBmb3IgbmV3IGZpbHRlciBjcmVhdGlvbiB3aXRob3V0IGVtaXR0aW5nIGV2ZW50cy5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJWYWx1ZSA9IFtdO1xuICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgdGhpcy5sYXN0RmlsdGVyID0ge307XG4gICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBmaWx0ZXJzIGFuZCBub3RpZmllcyBwYXJlbnQgY29tcG9uZW50cy5cbiAgICogQHN1bW1hcnkgUmVzZXRzIHRoZSBjb21wb25lbnQgc3RhdGUgYW5kIGVtaXRzIHVuZGVmaW5lZCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHNcbiAgICogdGhhdCBhbGwgZmlsdGVycyBoYXZlIGJlZW4gY2xlYXJlZC4gVGhpcyB0cmlnZ2VycyBhbnkgY29ubmVjdGVkIGRhdGEgcmVmcmVzaCBsb2dpYy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIChjdXJyZW50bHkgdW51c2VkKVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgY2xlYXIodmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZighdmFsdWUpXG4gICAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN1Ym1pdHMgdGhlIGN1cnJlbnQgZmlsdGVyIGNvbGxlY3Rpb24gdG8gcGFyZW50IGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIHRoZSBjdXJyZW50IGZpbHRlciBhcnJheSB0byBwYXJlbnQgY29tcG9uZW50cyB3aGVuIGZpbHRlcnMgYXJlIHJlYWR5XG4gICAqIHRvIGJlIGFwcGxpZWQuIE9ubHkgZW1pdHMgaWYgdGhlcmUgYXJlIGFjdGl2ZSBmaWx0ZXJzLiBDbGVhcnMgb3B0aW9ucyBhZnRlciBzdWJtaXNzaW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRXZlbnQuZW1pdCh7XG4gICAgICBxdWVyeTogdGhpcy5maWx0ZXJWYWx1ZS5sZW5ndGggPiAwID8gdGhpcy5maWx0ZXJWYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgIHNvcnQ6IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc29ydFZhbHVlLFxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvblxuICAgICAgfVxuICAgIH0gYXMgSUZpbHRlclF1ZXJ5KTtcbiAgICBpZih0aGlzLmZpbHRlclZhbHVlLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUb2dnbGVzIHRoZSBzb3J0IGRpcmVjdGlvbiBiZXR3ZWVuIGFzY2VuZGluZyBhbmQgZGVzY2VuZGluZy5cbiAgICogQHN1bW1hcnkgSGFuZGxlcyBzb3J0IGRpcmVjdGlvbiBjaGFuZ2VzIGJ5IHRvZ2dsaW5nIGJldHdlZW4gQVNDIGFuZCBEU0MgdmFsdWVzLlxuICAgKiBXaGVuIHRoZSBkaXJlY3Rpb24gY2hhbmdlcywgYXV0b21hdGljYWxseSB0cmlnZ2VycyBhIHN1Ym1pdCB0byBhcHBseSB0aGUgbmV3XG4gICAqIHNvcnRpbmcgY29uZmlndXJhdGlvbiB0byB0aGUgZmlsdGVyZWQgcmVzdWx0cy5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gICBoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gIE9yZGVyRGlyZWN0aW9uLkFTQyA/IE9yZGVyRGlyZWN0aW9uLkRTQyA6IE9yZGVyRGlyZWN0aW9uLkFTQztcbiAgICBpZihkaXJlY3Rpb24gIT09IHRoaXMuc29ydERpcmVjdGlvbikge1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgc29ydCBmaWVsZCBzZWxlY3Rpb24gY2hhbmdlcyBmcm9tIHRoZSBkcm9wZG93bi5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIHNvcnQgZmllbGQgY2hhbmdlcyB3aGVuIHVzZXJzIHNlbGVjdCBhIGRpZmZlcmVudCBmaWVsZFxuICAgKiBmcm9tIHRoZSBzb3J0IGRyb3Bkb3duLiBVcGRhdGVzIHRoZSBzb3J0VmFsdWUgcHJvcGVydHkgYW5kIHRyaWdnZXJzXG4gICAqIGEgc3VibWl0IHRvIGFwcGx5IHRoZSBuZXcgc29ydGluZyBjb25maWd1cmF0aW9uIGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgLSBUaGUgc2VsZWN0IGNoYW5nZSBldmVudCBjb250YWluaW5nIHRoZSBuZXcgc29ydCBmaWVsZCB2YWx1ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlU29ydENoYW5nZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElvblNlbGVjdEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWU7XG4gICAgaWYodmFsdWUgIT09IHRoaXMuc29ydFZhbHVlKSB7XG4gICAgICB0aGlzLnNvcnRWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaWx0ZXJzIGF2YWlsYWJsZSBvcHRpb25zIGJhc2VkIG9uIHVzZXIgaW5wdXQgd2l0aCB2aXN1YWwgaGlnaGxpZ2h0aW5nLlxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyByZWFsLXRpbWUgZmlsdGVyaW5nIG9mIGF2YWlsYWJsZSBvcHRpb25zIGJhc2VkIG9uIHVzZXIgaW5wdXQuXG4gICAqIEFsc28gaGFuZGxlcyB2aXN1YWwgaGlnaGxpZ2h0aW5nIG9mIG1hdGNoaW5nIG9wdGlvbnMgaW4gdGhlIGRyb3Bkb3duLiBSZXR1cm5zIGFsbFxuICAgKiBvcHRpb25zIGlmIGlucHV0IGlzIGxlc3MgdGhhbiAyIGNoYXJhY3RlcnMgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIFRoZSBzZWFyY2ggdmFsdWUgdG8gZmlsdGVyIGJ5XG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQXJyYXkgb2YgZmlsdGVyZWQgb3B0aW9ucyB0aGF0IG1hdGNoIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpbHRlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRE9NXG4gICAqXG4gICAqICAgVS0+PkY6IGZpbHRlck9wdGlvbnMoaW5wdXRWYWx1ZSlcbiAgICogICBhbHQgaW5wdXRWYWx1ZSA8IDIgY2hhcmFjdGVyc1xuICAgKiAgICAgRi0+PkQ6IFJlbW92ZSBleGlzdGluZyBoaWdobGlnaHRzXG4gICAqICAgICBGLS0+PlU6IFJldHVybiBhbGwgb3B0aW9uc1xuICAgKiAgIGVsc2UgaW5wdXRWYWx1ZSA+PSAyIGNoYXJhY3RlcnNcbiAgICogICAgIEYtPj5EOiBRdWVyeSBhbGwgb3B0aW9uIGVsZW1lbnRzXG4gICAqICAgICBGLT4+RDogQWRkIGhpZ2hsaWdodCB0byBmaXJzdCBtYXRjaGluZyBvcHRpb25cbiAgICogICAgIEYtPj5GOiBGaWx0ZXIgb3B0aW9ucyBieSBzdWJzdHJpbmcgbWF0Y2hcbiAgICogICAgIEYtLT4+VTogUmV0dXJuIGZpbHRlcmVkIG9wdGlvbnNcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZmlsdGVyT3B0aW9ucyh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8ICB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgb3B0aW9uc0VsZW1lbnQgPSB0aGlzLm9wdGlvbnNGaWx0ZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYoIXZhbHVlPy5sZW5ndGggfHwgIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uID0gb3B0aW9uc0VsZW1lbnQucXVlcnlTZWxlY3RvcignLmRjZi1maWx0ZXJpbmctaXRlbScpO1xuICAgICAgaWYoZmlsdGVyZWRPcHRpb24pXG4gICAgICAgIGZpbHRlcmVkT3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2RjZi1maWx0ZXJpbmctaXRlbScpO1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kY2YtaXRlbScpO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gb3B0aW9uLnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYoaXNBY3RpdmUpIHtcbiAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ2RjZi1maWx0ZXJpbmctaXRlbScpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogc3RyaW5nKSA9PiBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpIGFzIHN0cmluZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHNlYXJjaCBldmVudHMgZnJvbSB0aGUgaW50ZWdyYXRlZCBzZWFyY2hiYXIgY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgc2VhcmNoIGlucHV0IGZyb20gdGhlIHNlYXJjaGJhciBhbmQgZW1pdHMgc2VhcmNoIGV2ZW50c1xuICAgKiB0byBwYXJlbnQgY29tcG9uZW50cy4gVGhpcyBtZXRob2QgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIHRoZSBpbnRlcm5hbFxuICAgKiBzZWFyY2hiYXIgY29tcG9uZW50IGFuZCBleHRlcm5hbCBzZWFyY2ggZXZlbnQgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gdmFsdWUgLSBUaGUgc2VhcmNoIHZhbHVlIGVudGVyZWQgYnkgdGhlIHVzZXJcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZVNlYXJjaCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHZhbHVlKTtcbiAgfVxuXG59XG4iLCJcbkBpZighaW5kZXhlcy5sZW5ndGgpIHtcbiAgPG5neC1kZWNhZi1zZWFyY2hiYXIgW2VtaXRFdmVudFRvV2luZG93XT1cImZhbHNlXCIgW2RlYm91bmNlXT1cIjUwMFwiIChzZWFyY2hFdmVudCk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiIC8+XG59XG5cbjxkaXYgY2xhc3M9XCJkY2YtZ3JpZCBkY2YtZ3JpZC1zbWFsbCBkY2YtZ3JpZC1tYXRjaCBkY2YtZmlsdGVyLWdyaWRcIiBbbmdDbGFzc109XCJ7J2RjZi1oaWRkZW4nOiAhaW5kZXhlcy5sZW5ndGh9XCI+XG4gIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtZXhwYW5kXCI+XG4gICAgPGRpdiBjbGFzcz1cImRjZi1maWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaW5wdXRcIj5cbiAgICAgICAgQGZvcihmaWx0ZXIgb2YgZmlsdGVyVmFsdWU7IHRyYWNrIHRyYWNrSXRlbUZuKCRpbmRleCwgZmlsdGVyPy5bJ2luZGV4J10pKSB7XG4gICAgICAgICAgQGlmKGZpbHRlcj8uWydpbmRleCddKSB7XG4gICAgICAgICAgICA8aW9uLWNoaXAgW291dGxpbmVdPVwidHJ1ZVwiPnt7IGZpbHRlcj8uWydpbmRleCddIH19PC9pb24tY2hpcD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmKGZpbHRlcj8uWydjb25kaXRpb24nXSkge1xuICAgICAgICAgICAgPGlvbi1jaGlwIFtvdXRsaW5lXT1cInRydWVcIj57eyBmaWx0ZXI/LlsnY29uZGl0aW9uJ10gfX08L2lvbi1jaGlwPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYoZmlsdGVyPy5bJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgIDxpb24tY2hpcCBbb3V0bGluZV09XCJ0cnVlXCIgY2xhc3M9XCJkY2YtZmlsdGVyLXZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7IGZpbHRlcj8uWyd2YWx1ZSddIH19XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGZpbHRlcj8uWyd2YWx1ZSddKVwiIHNpemU9XCJzbWFsbFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1jaGlwPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMVwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZGRGaWx0ZXIodmFsdWUsICRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cImNsZWFyKHZhbHVlKVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVCbHVyKClcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInN0ZXAgIT09IDNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBsb2NhbGUgKyAoc3RlcCA9PT0gMyA/ICcudHlwZScgOiAnLnNlbGVjdCcpIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICNjb21wb25lbnRcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBpZih3aW5kb3dXaWR0aCA+PSA3NjgpIHtcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZHJvcGRvd24gJyArIChvcHRpb25zLmxlbmd0aCA+IDAgPyAnIGRjZi1hY3RpdmUnIDogJycpXCIgI29wdGlvbnNGaWx0ZXJFbGVtZW50PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIEBpZihmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgQGZvcihrZXkgb2YgZmlsdGVyZWRPcHRpb25zOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGNmLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0T3B0aW9uKGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24oa2V5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtZW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyZWRPcHRpb25zID0gb3B0aW9uczsgdmFsdWUgPSAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnbm9fc3VnZ2VzdGlvbnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmKGZpbHRlclZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImRjZi1pY29uLWNsZWFyXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImNsZWFyKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tc2VhcmNoXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJzdWJtaXQoKVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2VhcmNoLW91dGxpbmVcIiBjb2xvcj1cImRhcmtcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmKHdpbmRvd1dpZHRoIDwgNzY4KSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCInZGNmLWRyb3Bkb3duICcgKyAob3B0aW9ucy5sZW5ndGggPiAwID8gJyBkY2YtYWN0aXZlJyA6ICcnKVwiICNvcHRpb25zRmlsdGVyRWxlbWVudD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBAaWYoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIEBmb3Ioa2V5IG9mIGZpbHRlcmVkT3B0aW9uczsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRjZi1pdGVtXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdE9wdGlvbihrZXkpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3B0aW9uKGtleSlcIj5cbiAgICAgICAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLWVtcHR5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zOyB2YWx1ZSA9ICcnXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJmaWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zOyB2YWx1ZSA9ICcnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ25vX3N1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZighZGlzYWJsZVNvcnQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtNUBtIGRjZi13aWR0aC0xLTEgZGNmLXNvcnQtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWdyaWQgZGNmLWdyaWQtY29sbGFwc2UgZGNmLWZsZXggZGNmLWZsZXgtbWlkZGxlIGRjZi1ncmlkLW1hdGNoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtZXhwYW5kXCI+XG4gICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgICAgdG9nZ2xlSWNvbj1cImNoZXZyb24tZG93bi1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgZXhwYW5kZWRJY29uPVwiY2hldnJvbi11cC1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkY2Ytc29ydC1zZWxlY3RcIlxuICAgICAgICAgICAgICAoaW9uQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic29ydFZhbHVlXCJcbiAgICAgICAgICAgICAgbGFiZWwtcGxhY2VtZW50PVwiZmxvYXRpbmdcIlxuICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yKHNvcnQgb2Ygc29ydEJ5OyB0cmFjayBzb3J0KSB7XG4gICAgICAgICAgICAgIGFhXG4gICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwic29ydFwiPnt7IHNvcnQgfCB0cmFuc2xhdGUgfX08L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtYXV0b1wiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlKClcIiBmaWxsPVwiY2xlYXJcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgW25hbWVdPVwic29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Fycm93LWRvd24tb3V0bGluZScgOiAnYXJyb3ctdXAtb3V0bGluZSdcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cblxuIl19
689
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBa0MsTUFBTSxjQUFjLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUV0RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdDRztBQWtCSSxJQUFNLGVBQWUsR0FBckIsTUFB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QUMsTUFBTSxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQVksQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksQ0FBQyxLQUF5QjtRQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDOytHQTNwQlUsZUFBZTttR0FBZixlQUFlLGtXQVdpQixVQUFVLG9EQ2xGdkQseWtLQXNJQSxpckdEMUVJLGdCQUFnQiwwZ0NBR2hCLE9BQU8sdUdBQ1AsT0FBTywySkFDUCxTQUFTLGtWQUVULGtCQUFrQjs7QUFJVCxlQUFlO0lBakIzQixPQUFPLEVBQUU7O0dBaUJHLGVBQWUsQ0E2cEIzQjs7NEZBN3BCWSxlQUFlO2tCQWhCM0IsU0FBUzsrQkFDRSxrQkFBa0IsV0FHbkI7d0JBQ1AsZ0JBQWdCO3dCQUNoQixRQUFRO3dCQUNSLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsT0FBTzt3QkFDUCxrQkFBa0I7cUJBQ25CLGNBQ1csSUFBSTt3REFjaEIsb0JBQW9CO3NCQURuQixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWN0RSxPQUFPO3NCQUROLEtBQUs7Z0JBY04sVUFBVTtzQkFEVCxLQUFLO2dCQWNOLE1BQU07c0JBREwsS0FBSztnQkFjTixXQUFXO3NCQURWLEtBQUs7Z0JBeUlOLFdBQVc7c0JBRFYsTUFBTTtnQkFVUCxXQUFXO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgTmd4QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hCYXNlQ29tcG9uZW50JztcbmltcG9ydCB7IElvbkNoaXAsIElvbkljb24sIElvbkl0ZW0sIElvbkxhYmVsLCBJb25TZWxlY3R9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgRHluYW1pYywgSUZpbHRlclF1ZXJ5LCBJRmlsdGVyUXVlcnlJdGVtIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IGdldFdpbmRvd1dpZHRoIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPcmRlckRpcmVjdGlvbiwgUmVwb3NpdG9yeSB9IGZyb20gJ0BkZWNhZi10cy9jb3JlJztcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IFNlYXJjaGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJhci9zZWFyY2hiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hldnJvbkRvd25PdXRsaW5lLCBjaGV2cm9uVXBPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBZHZhbmNlZCBmaWx0ZXIgY29tcG9uZW50IGZvciBjcmVhdGluZyBkeW5hbWljIHNlYXJjaCBmaWx0ZXJzIHdpdGggc3RlcC1ieS1zdGVwIGNvbnN0cnVjdGlvbi5cbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBmaWx0ZXJpbmcgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHVzZXJzIHRvIGJ1aWxkXG4gKiBjb21wbGV4IHNlYXJjaCBjcml0ZXJpYSB1c2luZyBhIHRocmVlLXN0ZXAgYXBwcm9hY2g6IHNlbGVjdCBpbmRleCDihpIgc2VsZWN0IGNvbmRpdGlvbiDihpIgZW50ZXIgdmFsdWUuXG4gKiBJdCBzdXBwb3J0cyBmaWx0ZXJpbmcgYnkgbXVsdGlwbGUgZmllbGQgaW5kZXhlcywgY29tcGFyaXNvbiBjb25kaXRpb25zLCBhbmQgdmFsdWVzLCBkaXNwbGF5aW5nXG4gKiBzZWxlY3RlZCBmaWx0ZXJzIGFzIHJlbW92YWJsZSBjaGlwcy4gVGhlIGNvbXBvbmVudCBpcyByZXNwb25zaXZlIGFuZCBpbmNsdWRlcyBhdXRvLXN1Z2dlc3Rpb25zXG4gKiB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24gc3VwcG9ydC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPG5neC1kZWNhZi1maWx0ZXJcbiAqICAgW2luZGV4ZXNdPVwiWyduYW1lJywgJ2VtYWlsJywgJ2RlcGFydG1lbnQnLCAnc3RhdHVzJ11cIlxuICogICBbY29uZGl0aW9uc109XCJbJ0VxdWFsJywgJ0NvbnRhaW5zJywgJ0dyZWF0ZXIgVGhhbicsICdMZXNzIFRoYW4nXVwiXG4gKiAgIFtzb3J0XT1cIlsnY3JlYXRlZEF0JywgJ3VwZGF0ZWRBdCddXCJcbiAqICAgW2Rpc2FibGVTb3J0XT1cImZhbHNlXCJcbiAqICAgKGZpbHRlckV2ZW50KT1cIm9uRmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtZmlsdGVyPlxuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAqICAgcGFydGljaXBhbnQgRiBhcyBGaWx0ZXJDb21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgUCBhcyBQYXJlbnQgQ29tcG9uZW50XG4gKlxuICogICBVLT4+RjogRm9jdXMgaW5wdXQgZmllbGRcbiAqICAgRi0+PkY6IGhhbmRsZUZvY3VzKCkgLSBTaG93IGF2YWlsYWJsZSBpbmRleGVzXG4gKiAgIFUtPj5GOiBTZWxlY3QgaW5kZXggKGUuZy4sIFwibmFtZVwiKVxuICogICBGLT4+RjogYWRkRmlsdGVyKCkgLSBTdGVwIDEgY29tcGxldGVkXG4gKiAgIEYtPj5GOiBTaG93IGF2YWlsYWJsZSBjb25kaXRpb25zXG4gKiAgIFUtPj5GOiBTZWxlY3QgY29uZGl0aW9uIChlLmcuLCBcIkNvbnRhaW5zXCIpXG4gKiAgIEYtPj5GOiBhZGRGaWx0ZXIoKSAtIFN0ZXAgMiBjb21wbGV0ZWRcbiAqICAgRi0+PkY6IFNob3cgdmFsdWUgaW5wdXQgcHJvbXB0XG4gKiAgIFUtPj5GOiBFbnRlciB2YWx1ZSBhbmQgcHJlc3MgRW50ZXJcbiAqICAgRi0+PkY6IGFkZEZpbHRlcigpIC0gU3RlcCAzIGNvbXBsZXRlZFxuICogICBGLT4+RjogQ3JlYXRlIGNvbXBsZXRlIGZpbHRlciBvYmplY3RcbiAqICAgRi0+PlA6IEVtaXQgZmlsdGVyRXZlbnQgd2l0aCBuZXcgZmlsdGVyIGFycmF5XG4gKiAgIEYtPj5GOiBSZXNldCB0byBzdGVwIDEgZm9yIG5leHQgZmlsdGVyXG4gKlxuICogQG1lbWJlck9mIEZvckFuZ3VsYXJNb2R1bGVcbiAqL1xuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIEZvckFuZ3VsYXJNb2R1bGUsXG4gICAgSW9uTGFiZWwsXG4gICAgSW9uSXRlbSxcbiAgICBJb25DaGlwLFxuICAgIElvbkljb24sXG4gICAgSW9uU2VsZWN0LFxuICAgIElvbkljb24sXG4gICAgU2VhcmNoYmFyQ29tcG9uZW50XG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gdGhlIGRyb3Bkb3duIG9wdGlvbnMgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqIEBzdW1tYXJ5IFZpZXdDaGlsZCByZWZlcmVuY2UgdXNlZCB0byBhY2Nlc3MgYW5kIG1hbmlwdWxhdGUgdGhlIGRyb3Bkb3duIG9wdGlvbnMgZWxlbWVudFxuICAgKiBmb3IgaGlnaGxpZ2h0aW5nIGZpbHRlcmVkIGl0ZW1zIGFuZCBtYW5hZ2luZyB2aXN1YWwgZmVlZGJhY2sgZHVyaW5nIG9wdGlvbiBzZWxlY3Rpb24uXG4gICAqIFRoaXMgZWxlbWVudCBjb250YWlucyB0aGUgZmlsdGVyYWJsZSBzdWdnZXN0aW9ucyB0aGF0IHVzZXJzIGNhbiBpbnRlcmFjdCB3aXRoLlxuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnb3B0aW9uc0ZpbHRlckVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgb3B0aW9uc0ZpbHRlckVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXZhaWxhYmxlIGZpZWxkIGluZGV4ZXMgZm9yIGZpbHRlcmluZyBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgdXNlcnMgY2FuIGZpbHRlciBieS4gVGhlc2UgcmVwcmVzZW50XG4gICAqIHRoZSBkYXRhIHByb3BlcnRpZXMgYXZhaWxhYmxlIGZvciBmaWx0ZXJpbmcgb3BlcmF0aW9ucy4gRWFjaCBpbmRleCBjb3JyZXNwb25kcyB0b1xuICAgKiBhIGZpZWxkIGluIHRoZSBkYXRhIG1vZGVsIHRoYXQgc3VwcG9ydHMgY29tcGFyaXNvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGluZGV4ZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBdmFpbGFibGUgY29tcGFyaXNvbiBjb25kaXRpb25zIGZvciBmaWx0ZXJzLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBsaXN0IG9mIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRoYXQgY2FuIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBmaWx0ZXJzLlxuICAgKiBUaGVzZSBjb25kaXRpb25zIGRldGVybWluZSBob3cgdGhlIGZpbHRlciB2YWx1ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBmaWVsZCB2YWx1ZS5cbiAgICogQ29tbW9uIGNvbmRpdGlvbnMgaW5jbHVkZSBlcXVhbGl0eSwgY29udGFpbm1lbnQsIGFuZCBudW1lcmljYWwgY29tcGFyaXNvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gWydFcXVhbCcsICdDb250YWlucycsICdOb3QgQ29udGFpbnMnLCAnR3JlYXRlciBUaGFuJywgJ0xlc3MgVGhhbicsICdOb3QgRXF1YWwnXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEF2YWlsYWJsZSBzb3J0aW5nIG9wdGlvbnMgZm9yIHRoZSBmaWx0ZXJlZCBkYXRhLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNvcnRpbmcgdGhlIGZpbHRlcmVkIHJlc3VsdHMuXG4gICAqIFdoZW4gZGlzYWJsZVNvcnQgaXMgZmFsc2UsIHRoaXMgYXJyYXkgaXMgYXV0b21hdGljYWxseSBtZXJnZWQgd2l0aCB0aGUgaW5kZXhlcyBhcnJheVxuICAgKiB0byBwcm92aWRlIGNvbXByZWhlbnNpdmUgc29ydGluZyBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciBzb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuXG4gICAqIEBzdW1tYXJ5IFdoZW4gc2V0IHRvIHRydWUsIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgbWVyZ2luZyBvZiBzb3J0IGFuZCBpbmRleGVzIGFycmF5cyxcbiAgICogZWZmZWN0aXZlbHkgZGlzYWJsaW5nIHNvcnRpbmcgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHByb3ZpZGVcbiAgICogZmlsdGVyaW5nIHdpdGhvdXQgc29ydGluZyBvcHRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgZGlzYWJsZVNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgd2luZG93IHdpZHRoIGZvciByZXNwb25zaXZlIGJlaGF2aW9yLlxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3cgd2lkdGggaW4gcGl4ZWxzLiBUaGlzIHZhbHVlIGlzIHVwZGF0ZWRcbiAgICogb24gd2luZG93IHJlc2l6ZSBldmVudHMgdG8gZW5hYmxlIHJlc3BvbnNpdmUgZmlsdGVyaW5nIGJlaGF2aW9yIGFuZCBsYXlvdXQgYWRqdXN0bWVudHNcbiAgICogYmFzZWQgb24gYXZhaWxhYmxlIHNjcmVlbiBzcGFjZS5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgd2luZG93V2lkdGghOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBdmFpbGFibGUgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgZmlsdGVyIHN0ZXAuXG4gICAqIEBzdW1tYXJ5IENvbnRhaW5zIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gaW4gdGhlIGN1cnJlbnQgc3RlcC5cbiAgICogVGhpcyBhcnJheSBjaGFuZ2VzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0ZXA6IGluZGV4ZXMg4oaSIGNvbmRpdGlvbnMg4oaSIGVtcHR5IGZvciB2YWx1ZSBpbnB1dC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmlsdGVyZWQgb3B0aW9ucyBiYXNlZCBvbiB1c2VyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgc3Vic2V0IG9mIG9wdGlvbnMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCB1c2VyIGlucHV0IGZvciByZWFsLXRpbWVcbiAgICogZmlsdGVyaW5nLiBUaGlzIGFycmF5IGlzIHVwZGF0ZWQgYXMgdGhlIHVzZXIgdHlwZXMgdG8gc2hvdyBvbmx5IHJlbGV2YW50IHN1Z2dlc3Rpb25zXG4gICAqIGluIHRoZSBkcm9wZG93biBtZW51LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGZpbHRlcmVkT3B0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBsZXRlIGZpbHRlciBvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IEFycmF5IG9mIGNvbXBsZXRlIGZpbHRlciBvYmplY3RzLCBlYWNoIGNvbnRhaW5pbmcgaW5kZXgsIGNvbmRpdGlvbiwgYW5kIHZhbHVlIHByb3BlcnRpZXMuXG4gICAqIFRoZXNlIHJlcHJlc2VudCB0aGUgYWN0aXZlIGZpbHRlcnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBkYXRhIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZVtdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBmaWx0ZXJWYWx1ZTogSUZpbHRlclF1ZXJ5SXRlbVtdID0gW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IGZpbHRlciBiZWluZyBjb25zdHJ1Y3RlZC5cbiAgICogQHN1bW1hcnkgVGVtcG9yYXJ5IG9iamVjdCB0aGF0IGFjY3VtdWxhdGVzIGZpbHRlciBwcm9wZXJ0aWVzIChpbmRleCwgY29uZGl0aW9uLCB2YWx1ZSlcbiAgICogZHVyaW5nIHRoZSB0aHJlZS1zdGVwIGZpbHRlciBjcmVhdGlvbiBwcm9jZXNzLiBHZXRzIGFkZGVkIHRvIGZpbHRlclZhbHVlIHdoZW4gY29tcGxldGUuXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZX1cbiAgICogQGRlZmF1bHQge31cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgbGFzdEZpbHRlcjogSUZpbHRlclF1ZXJ5SXRlbSA9IHt9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBzdGVwIGluIHRoZSBmaWx0ZXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAgICogQHN1bW1hcnkgVHJhY2tzIHRoZSBjdXJyZW50IHN0ZXAgb2YgZmlsdGVyIGNyZWF0aW9uOiAxID0gaW5kZXggc2VsZWN0aW9uLCAyID0gY29uZGl0aW9uIHNlbGVjdGlvbixcbiAgICogMyA9IHZhbHVlIGlucHV0LiBBdXRvbWF0aWNhbGx5IHJlc2V0cyB0byAxIGFmdGVyIGNvbXBsZXRpbmcgYSBmaWx0ZXIuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDFcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc3RlcDogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIGRyb3Bkb3duIHZpc2liaWxpdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IEJvb2xlYW4gZmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgb3B0aW9ucyBkcm9wZG93biBpcyBjdXJyZW50bHkgdmlzaWJsZS5cbiAgICogVXNlZCB0byBtYW5hZ2UgdGhlIGRyb3Bkb3duJ3Mgb3Blbi9jbG9zZSBzdGF0ZSBhbmQgY29vcmRpbmF0ZSB3aXRoIGZvY3VzL2JsdXIgZXZlbnRzLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IGlucHV0IGZpZWxkIHZhbHVlLlxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGN1cnJlbnQgdGV4dCBpbnB1dCB2YWx1ZSB0aGF0IHRoZSB1c2VyIGlzIHR5cGluZy4gVGhpcyB2YWx1ZSBpc1xuICAgKiBib3VuZCB0byB0aGUgaW5wdXQgZmllbGQgYW5kIGlzIGNsZWFyZWQgYWZ0ZXIgZWFjaCBzdWNjZXNzZnVsIGZpbHRlciBzdGVwIGNvbXBsZXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc29ydGluZyBmaWVsZCB2YWx1ZS5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBmaWVsZCBuYW1lIGN1cnJlbnRseSBzZWxlY3RlZCBmb3Igc29ydGluZyBvcGVyYXRpb25zLlxuICAgKiBUaGlzIHZhbHVlIGRldGVybWluZXMgd2hpY2ggZmllbGQgaXMgdXNlZCB0byBvcmRlciB0aGUgZmlsdGVyZWQgcmVzdWx0cy5cbiAgICogRGVmYXVsdHMgdG8gJ2lkJyBhbmQgY2FuIGJlIGNoYW5nZWQgdGhyb3VnaCB0aGUgc29ydCBkcm9wZG93biBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdpZCdcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc29ydFZhbHVlOiBzdHJpbmcgPSAnaWQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBzb3J0aW5nIGRpcmVjdGlvbi5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzb3J0IG9wZXJhdGlvbiAtIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nLlxuICAgKiBUaGlzIHZhbHVlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggc29ydFZhbHVlIHRvIGRldGVybWluZSB0aGUgY29tcGxldGVcbiAgICogc29ydGluZyBjb25maWd1cmF0aW9uIGZvciBmaWx0ZXJlZCByZXN1bHRzLlxuICAgKlxuICAgKiBAdHlwZSB7T3JkZXJEaXJlY3Rpb259XG4gICAqIEBkZWZhdWx0IE9yZGVyRGlyZWN0aW9uLkRTQ1xuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBzb3J0RGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbiA9IE9yZGVyRGlyZWN0aW9uLkRTQztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN1YnNjcmlwdGlvbiBmb3Igd2luZG93IHJlc2l6ZSBldmVudHMuXG4gICAqIEBzdW1tYXJ5IFJ4SlMgc3Vic2NyaXB0aW9uIHRoYXQgbGlzdGVucyBmb3Igd2luZG93IHJlc2l6ZSBldmVudHMgd2l0aCBkZWJvdW5jaW5nXG4gICAqIHRvIHVwZGF0ZSB0aGUgd2luZG93V2lkdGggcHJvcGVydHkuIFRoaXMgZW5hYmxlcyByZXNwb25zaXZlIGJlaGF2aW9yIGFuZCBwcmV2ZW50c1xuICAgKiBleGNlc3NpdmUgdXBkYXRlcyBkdXJpbmcgcmVzaXplIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtTdWJzY3JpcHRpb259XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHdpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGVtaXR0ZXIgZm9yIGZpbHRlciBjaGFuZ2VzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBmaWx0ZXIgZXZlbnRzIHdoZW4gdGhlIHVzZXIgY3JlYXRlcywgbW9kaWZpZXMsIG9yIGNsZWFycyBmaWx0ZXJzLlxuICAgKiBUaGUgZW1pdHRlZCB2YWx1ZSBjb250YWlucyBhbiBhcnJheSBvZiBjb21wbGV0ZSBmaWx0ZXIgb2JqZWN0cyBvciB1bmRlZmluZWQgd2hlblxuICAgKiBmaWx0ZXJzIGFyZSBjbGVhcmVkLiBQYXJlbnQgY29tcG9uZW50cyBsaXN0ZW4gdG8gdGhpcyBldmVudCB0byB1cGRhdGUgdGhlaXIgZGF0YSBkaXNwbGF5LlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPEtleVZhbHVlW10gfCB1bmRlZmluZWQ+fVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgZmlsdGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxJRmlsdGVyUXVlcnkgfCB1bmRlZmluZWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJRmlsdGVyUXVlcnkgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBzZWFyY2ggZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBzZWFyY2ggZXZlbnRzIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIHNlYXJjaGJhci5cbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxzdHJpbmc+fVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VhcmNoRXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yIGZvciBGaWx0ZXJDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBGaWx0ZXJDb21wb25lbnQuXG4gICAqIENhbGxzIHRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgY29tcG9uZW50IG5hbWUgdG8gZXN0YWJsaXNoIGJhc2UgbG9jYWxlIHN0cmluZyBnZW5lcmF0aW9uXG4gICAqIGFuZCBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkZpbHRlckNvbXBvbmVudFwiKTtcbiAgICBhZGRJY29ucyh7Y2hldnJvbkRvd25PdXRsaW5lLCBjaGV2cm9uVXBPdXRsaW5lfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBmaXJzdCBkaXNwbGF5cyB0aGUgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBjb21wb25lbnQgYnkgaW5pdGlhbGl6aW5nIHdpbmRvdyB3aWR0aCB0cmFja2luZywgc2V0dGluZyB1cCByZXNpemUgZXZlbnRcbiAgICogc3Vic2NyaXB0aW9ucyB3aXRoIGRlYm91bmNpbmcsIGNvbmZpZ3VyaW5nIHNvcnRpbmcgb3B0aW9ucywgYW5kIGNhbGxpbmcgdGhlIGJhc2UgaW5pdGlhbGl6YXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIHByZXBhcmVzIHRoZSBjb21wb25lbnQgZm9yIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpbHRlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFcgYXMgV2luZG93XG4gICAqICAgcGFydGljaXBhbnQgUiBhcyBSeEpTXG4gICAqXG4gICAqICAgQS0+PkY6IG5nT25Jbml0KClcbiAgICogICBGLT4+VzogZ2V0V2luZG93V2lkdGgoKVxuICAgKiAgIFctLT4+RjogUmV0dXJuIGN1cnJlbnQgd2lkdGhcbiAgICogICBGLT4+UjogU2V0dXAgcmVzaXplIHN1YnNjcmlwdGlvbiB3aXRoIGRlYm91bmNlXG4gICAqICAgUi0tPj5GOiBTdWJzY3JpcHRpb24gY3JlYXRlZFxuICAgKiAgIGFsdCBkaXNhYmxlU29ydCBpcyBmYWxzZVxuICAgKiAgICAgRi0+PkY6IE1lcmdlIHNvcnQgYW5kIGluZGV4ZXMgYXJyYXlzXG4gICAqICAgZW5kXG4gICAqICAgRi0+PkY6IENhbGwgaW5pdGlhbGl6ZSgpXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gZ2V0V2luZG93V2lkdGgoKSBhcyBudW1iZXI7XG4gICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgdGhpcy53aW5kb3dXaWR0aCA9IGdldFdpbmRvd1dpZHRoKCkgYXMgbnVtYmVyO1xuICAgIH0pO1xuXG4gICAgdGhpcy5nZXRJbmRleGVzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbmQgY29uZmlndXJlcyBhdmFpbGFibGUgaW5kZXhlcyBmb3IgZmlsdGVyaW5nIGFuZCBzb3J0aW5nLlxuICAgKiBAc3VtbWFyeSBFeHRyYWN0cyBmaWVsZCBpbmRleGVzIGZyb20gdGhlIG1vZGVsIGlmIGF2YWlsYWJsZSBhbmQgbWVyZ2VzIHRoZW0gd2l0aFxuICAgKiBzb3J0aW5nIG9wdGlvbnMgd2hlbiBzb3J0aW5nIGlzIGVuYWJsZWQuIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGF2YWlsYWJsZSBmaWVsZFxuICAgKiBvcHRpb25zIGZvciBib3RoIGZpbHRlcmluZyBhbmQgc29ydGluZyBvcGVyYXRpb25zIGJhc2VkIG9uIHRoZSBtb2RlbCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBnZXRJbmRleGVzKCk6IHZvaWQge1xuICAgIGlmKHRoaXMubW9kZWwpXG4gICAgICB0aGlzLmluZGV4ZXMgPSBPYmplY3Qua2V5cyhSZXBvc2l0b3J5LmluZGV4ZXModGhpcy5tb2RlbCBhcyBNb2RlbCkgfHwge30pO1xuICAgIGlmKCF0aGlzLmRpc2FibGVTb3J0KVxuICAgICAgdGhpcy5zb3J0QnkgPSBbLi4uIHRoaXMuc29ydEJ5LCAuLi50aGlzLmluZGV4ZXNdO1xuICB9XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENsZWFudXAgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKiBAc3VtbWFyeSBVbnN1YnNjcmliZXMgZnJvbSB3aW5kb3cgcmVzaXplIGV2ZW50cyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cbiAgICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBjbGVhbnVwIG9mIFJ4SlMgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnRcbiAgICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLndpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBpbnB1dCBldmVudHMgZnJvbSB0aGUgdGV4dCBmaWVsZC5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIHVzZXIgaW5wdXQgYW5kIGZpbHRlcnMgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGJhc2VkIG9uIHRoZSB0eXBlZCB2YWx1ZS5cbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgcmVhbC10aW1lIGZpbHRlcmluZyBvZiBzdWdnZXN0aW9ucyBhcyB0aGUgdXNlciB0eXBlcyBpbiB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSB7SW5wdXRFdmVudH0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnQgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVJbnB1dChldmVudDogSW5wdXRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJPcHRpb25zKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBmb2N1cyBldmVudHMgb24gdGhlIGlucHV0IGZpZWxkLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB3aGVuIHRoZSBpbnB1dCBmaWVsZCByZWNlaXZlcyBmb2N1cyBhbmQgb3BlbnMgdGhlIGRyb3Bkb3duLlxuICAgKiBJZiBubyBvcHRpb25zIGFyZSBwcm92aWRlZCwgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgc3RlcC5cbiAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIGRyb3Bkb3duIHdpdGggY29udGV4dHVhbGx5IHJlbGV2YW50IHN1Z2dlc3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBvcHRpb25zIC0gT3B0aW9uYWwgYXJyYXkgb2Ygb3B0aW9ucyB0byBkaXNwbGF5XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVGb2N1cyhvcHRpb25zOiBzdHJpbmdbXSAgPSBbXSk6IHZvaWQge1xuICAgIGlmKCFvcHRpb25zLmxlbmd0aClcbiAgICAgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgYmx1ciBldmVudHMgb24gdGhlIGlucHV0IGZpZWxkIHdpdGggZGVsYXllZCBjbG9zaW5nLlxuICAgKiBAc3VtbWFyeSBNYW5hZ2VzIHRoZSBkcm9wZG93biBjbG9zaW5nIGJlaGF2aW9yIHdpdGggYSBkZWxheSB0byBhbGxvdyBmb3Igb3B0aW9uIHNlbGVjdGlvbi5cbiAgICogVXNlcyBhIHR3by1waGFzZSBhcHByb2FjaCB0byBwcmV2ZW50IHByZW1hdHVyZSBjbG9zaW5nIHdoZW4gdXNlcnMgY2xpY2sgb24gZHJvcGRvd24gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBjbG9zZSAtIEludGVybmFsIGZsYWcgdG8gY29udHJvbCB0aGUgY2xvc2luZyBwaGFzZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlQmx1cihjbG9zZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYoIWNsb3NlKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQmx1cih0cnVlKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKCF0aGlzLmRyb3Bkb3duT3BlbiAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgZmlsdGVyIHN0ZXAuXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvbnRleHR1YWxseSByZWxldmFudCBvcHRpb25zIGZvciB0aGUgY3VycmVudCBzdGVwIGluIHRoZSBmaWx0ZXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAgICogU3RlcCAxIHNob3dzIGluZGV4ZXMsIFN0ZXAgMiBzaG93cyBjb25kaXRpb25zLCBTdGVwIDMgc2hvd3Mgbm8gb3B0aW9ucyAodmFsdWUgaW5wdXQpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFycmF5IG9mIG9wdGlvbnMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHN0ZXBcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZ2V0T3B0aW9ucygpOiBzdHJpbmdbXSB7XG4gICBzd2l0Y2ggKHRoaXMuc3RlcCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmluZGV4ZXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNvbmRpdGlvbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGZpbHRlciBzdGVwIG9yIGNvbXBsZXRlcyBmaWx0ZXIgY3JlYXRpb24gdGhyb3VnaCBhIHRocmVlLXN0ZXAgcHJvY2Vzcy5cbiAgICogQHN1bW1hcnkgQ29yZSBtZXRob2QgZm9yIGJ1aWxkaW5nIGZpbHRlcnMgc3RlcCBieSBzdGVwOiBTdGVwIDEgKEluZGV4KSDihpIgU3RlcCAyIChDb25kaXRpb24pIOKGkiBTdGVwIDMgKFZhbHVlKS5cbiAgICogV2hlbiBhbGwgc3RlcHMgYXJlIGNvbXBsZXRlLCBjcmVhdGVzIGEgY29tcGxldGUgZmlsdGVyIG9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgZmlsdGVyIGNvbGxlY3Rpb24uXG4gICAqIEhhbmRsZXMgYm90aCBrZXlib2FyZCBldmVudHMgKEVudGVyIHRvIHN1Ym1pdCkgYW5kIHByb2dyYW1tYXRpYyBjYWxscy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZCBmb3IgdGhlIGN1cnJlbnQgc3RlcFxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIE9wdGlvbmFsIGV2ZW50IChLZXlib2FyZEV2ZW50IHRyaWdnZXJzIHN1Ym1pc3Npb24gd2hlbiB2YWx1ZSBpcyBlbXB0eSlcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PkY6IGFkZEZpbHRlcih2YWx1ZSwgZXZlbnQpXG4gICAqICAgRi0+PkY6IFRyaW0gYW5kIHZhbGlkYXRlIHZhbHVlXG4gICAqICAgYWx0IEtleWJvYXJkRXZlbnQgJiYgZW1wdHkgdmFsdWVcbiAgICogICAgIEYtPj5GOiBzdWJtaXQoKSAtIFNlbmQgY3VycmVudCBmaWx0ZXJzXG4gICAqICAgZWxzZSBWYWxpZCB2YWx1ZSBvciBzdGVwIDNcbiAgICogICAgIGFsdCBTdGVwIDEgKEluZGV4KVxuICAgKiAgICAgICBGLT4+RjogbGFzdEZpbHRlci5pbmRleCA9IHZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBvcHRpb25zID0gY29uZGl0aW9uc1xuICAgKiAgICAgZWxzZSBTdGVwIDIgKENvbmRpdGlvbilcbiAgICogICAgICAgRi0+PkY6IGxhc3RGaWx0ZXIuY29uZGl0aW9uID0gdmFsdWVcbiAgICogICAgICAgRi0+PkY6IG9wdGlvbnMgPSBbXVxuICAgKiAgICAgZWxzZSBTdGVwIDMgKFZhbHVlKVxuICAgKiAgICAgICBGLT4+RjogbGFzdEZpbHRlci52YWx1ZSA9IHZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBBZGQgY29tcGxldGUgZmlsdGVyIHRvIGZpbHRlclZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBSZXNldCBzdGVwIHRvIDFcbiAgICogICAgIGVuZFxuICAgKiAgICAgRi0+PkY6IEluY3JlbWVudCBzdGVwXG4gICAqICAgICBGLT4+RjogQ2xlYXIgaW5wdXQgJiBmb2N1c1xuICAgKiAgICAgRi0+PkY6IFNob3cgbmV4dCBvcHRpb25zXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGFkZEZpbHRlcih2YWx1ZTogc3RyaW5nLCBldmVudD86IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgaWYoZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50ICYmICF2YWx1ZSkge1xuICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgIGlmKCh2YWx1ZSAmJiAoIShldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpKSB8fCB0aGlzLnN0ZXAgPT09IDMpKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMubGFzdEZpbHRlcjtcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0ZXApIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBmaWx0ZXJbJ2luZGV4J10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY29uZGl0aW9ucztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGZpbHRlclsnY29uZGl0aW9uJ10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgZmlsdGVyWyd2YWx1ZSddID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmluZGV4ZXM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5maWx0ZXJWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZih0aGlzLnN0ZXAgPT09IDEpXG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnN0ZXAgPT09IDMpIHtcbiAgICAgICAgICB0aGlzLnN0ZXAgPSAwO1xuICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVbdGhpcy5maWx0ZXJWYWx1ZS5sZW5ndGggLSAxXSA9IGZpbHRlcjtcbiAgICAgICAgICB0aGlzLmxhc3RGaWx0ZXIgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0ZXArKztcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMuaGFuZGxlRm9jdXModGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2VsZWN0cyBhbiBvcHRpb24gZnJvbSB0aGUgZHJvcGRvd24gc3VnZ2VzdGlvbnMuXG4gICAqIEBzdW1tYXJ5IEhhbmRsZXMgb3B0aW9uIHNlbGVjdGlvbiB3aGVuIGEgdXNlciBjbGlja3Mgb24gYSBzdWdnZXN0aW9uIGluIHRoZSBkcm9wZG93bi5cbiAgICogVGhpcyBtZXRob2QgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIGRyb3Bkb3duIGNsaWNrcyBhbmQgdGhlIG1haW4gYWRkRmlsdGVyIGxvZ2ljLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBjbGljayBldmVudCBmcm9tIHRoZSBkcm9wZG93biBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVGhlIHNlbGVjdGVkIG9wdGlvbiB2YWx1ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc2VsZWN0T3B0aW9uKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgYSBmaWx0ZXIgb3B0aW9uIGNhbiBiZSBpbmRpdmlkdWFsbHkgcmVtb3ZlZC5cbiAgICogQHN1bW1hcnkgQ2hlY2tzIHdoZXRoZXIgYSBmaWx0ZXIgY29tcG9uZW50IHNob3VsZCBkaXNwbGF5IGEgY2xvc2UgaWNvbiBmb3IgcmVtb3ZhbC5cbiAgICogT25seSB2YWx1ZSBvcHRpb25zIGNhbiBiZSByZW1vdmVkIGluZGl2aWR1YWxseTsgaW5kZXggYW5kIGNvbmRpdGlvbiBvcHRpb25zIGFyZSBwYXJ0XG4gICAqIG9mIHRoZSBjb21wbGV0ZSBmaWx0ZXIgc3RydWN0dXJlIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uIC0gVGhlIGZpbHRlciBvcHRpb24gdGV4dCB0byBjaGVja1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb3B0aW9uIGNhbiBiZSBjbGVhcmVkIGluZGl2aWR1YWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGFsbG93Q2xlYXIob3B0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleGVzLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEgJiYgdGhpcy5jb25kaXRpb25zLmluZGV4T2Yob3B0aW9uKSA9PT0gLTE7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBjb21wbGV0ZSBmaWx0ZXIgZnJvbSB0aGUgY29sbGVjdGlvbiBiYXNlZCBvbiBmaWx0ZXIgdmFsdWUuXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBjb21wbGV0ZSBmaWx0ZXIgYnkgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIHZhbHVlIGFnYWluc3QgZmlsdGVyIHZhbHVlc1xuICAgKiBpbiB0aGUgY29sbGVjdGlvbi4gVXNlcyBzdHJpbmcgbm9ybWFsaXphdGlvbiB0byBoYW5kbGUgYWNjZW50cyBhbmQgY2FzZSBkaWZmZXJlbmNlcy5cbiAgICogQWZ0ZXIgcmVtb3ZhbCwgcmVzZXRzIHRoZSBpbnRlcmZhY2UgdG8gc2hvdyBhdmFpbGFibGUgaW5kZXhlcyBmb3IgbmV3IGZpbHRlciBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdmFsdWUgdG8gcmVtb3ZlIChtYXRjaGVzIGFnYWluc3QgZmlsdGVyLnZhbHVlIHByb3BlcnR5KVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgRiBhcyBGaWx0ZXJDb21wb25lbnRcbiAgICpcbiAgICogICBVLT4+RjogcmVtb3ZlRmlsdGVyKGZpbHRlclZhbHVlKVxuICAgKiAgIEYtPj5GOiBjbGVhblN0cmluZyhmaWx0ZXJWYWx1ZSlcbiAgICogICBGLT4+RjogRmlsdGVyIG91dCBtYXRjaGluZyBmaWx0ZXIgb2JqZWN0c1xuICAgKiAgIEYtPj5GOiBDbGVhciBpbnB1dCB2YWx1ZVxuICAgKiAgIEYtPj5GOiBoYW5kbGVGb2N1cyhpbmRleGVzKSAtIFJlc2V0IHRvIGluZGV4IHNlbGVjdGlvblxuICAgKiAgIE5vdGUgb3ZlciBGOiBGaWx0ZXIgcmVtb3ZlZCBhbmQgVUkgcmVzZXRcbiAgICpcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgZnVuY3Rpb24gY2xlYW5TdHJpbmcoZmlsdGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGZpbHRlclxuICAgICAgICAudG9Mb3dlckNhc2UoKSAgICAgICAgICAgICAgICAgLy8gY29udmVydCBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2VcbiAgICAgICAgLm5vcm1hbGl6ZShcIk5GRFwiKSAgICAgICAgICAgICAgLy8gc2VwYXJhdGUgYWNjZW50IG1hcmtzIGZyb20gY2hhcmFjdGVyc1xuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIikgLy8gcmVtb3ZlIGFjY2VudCBtYXJrc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTsgICAgICAgICAgLy8gcmVtb3ZlIGFsbCB3aGl0ZXNwYWNlXG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLmZpbHRlclZhbHVlLmZpbHRlcigoaXRlbSkgPT4gaXRlbT8uWyd2YWx1ZSddICYmIGNsZWFuU3RyaW5nKGl0ZW0/LlsndmFsdWUnXSkgIT09IGNsZWFuU3RyaW5nKGZpbHRlcikpO1xuICAgIGlmKHRoaXMuZmlsdGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgdGhpcy5sYXN0RmlsdGVyID0ge307XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRm9jdXModGhpcy5pbmRleGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzZXRzIHRoZSBjb21wb25lbnQgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IENsZWFycyBhbGwgZmlsdGVyIGRhdGEsIG9wdGlvbnMsIGFuZCByZXNldHMgdGhlIHN0ZXAgY291bnRlciB0byAxLlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIGNsZWFuIHNsYXRlIGZvciBuZXcgZmlsdGVyIGNyZWF0aW9uIHdpdGhvdXQgZW1pdHRpbmcgZXZlbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlclZhbHVlID0gW107XG4gICAgdGhpcy5zdGVwID0gMTtcbiAgICB0aGlzLmxhc3RGaWx0ZXIgPSB7fTtcbiAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIGZpbHRlcnMgYW5kIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnRzLlxuICAgKiBAc3VtbWFyeSBSZXNldHMgdGhlIGNvbXBvbmVudCBzdGF0ZSBhbmQgZW1pdHMgdW5kZWZpbmVkIHRvIG5vdGlmeSBwYXJlbnQgY29tcG9uZW50c1xuICAgKiB0aGF0IGFsbCBmaWx0ZXJzIGhhdmUgYmVlbiBjbGVhcmVkLiBUaGlzIHRyaWdnZXJzIGFueSBjb25uZWN0ZWQgZGF0YSByZWZyZXNoIGxvZ2ljLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBPcHRpb25hbCBwYXJhbWV0ZXIgKGN1cnJlbnRseSB1bnVzZWQpXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBjbGVhcih2YWx1ZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmKCF2YWx1ZSlcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3VibWl0cyB0aGUgY3VycmVudCBmaWx0ZXIgY29sbGVjdGlvbiB0byBwYXJlbnQgY29tcG9uZW50cy5cbiAgICogQHN1bW1hcnkgRW1pdHMgdGhlIGN1cnJlbnQgZmlsdGVyIGFycmF5IHRvIHBhcmVudCBjb21wb25lbnRzIHdoZW4gZmlsdGVycyBhcmUgcmVhZHlcbiAgICogdG8gYmUgYXBwbGllZC4gT25seSBlbWl0cyBpZiB0aGVyZSBhcmUgYWN0aXZlIGZpbHRlcnMuIENsZWFycyBvcHRpb25zIGFmdGVyIHN1Ym1pc3Npb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBzdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJFdmVudC5lbWl0KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLmZpbHRlclZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLmZpbHRlclZhbHVlIDogdW5kZWZpbmVkLFxuICAgICAgc29ydDoge1xuICAgICAgICB2YWx1ZTogdGhpcy5zb3J0VmFsdWUsXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5zb3J0RGlyZWN0aW9uXG4gICAgICB9XG4gICAgfSBhcyBJRmlsdGVyUXVlcnkpO1xuICAgIGlmKHRoaXMuZmlsdGVyVmFsdWUubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRvZ2dsZXMgdGhlIHNvcnQgZGlyZWN0aW9uIGJldHdlZW4gYXNjZW5kaW5nIGFuZCBkZXNjZW5kaW5nLlxuICAgKiBAc3VtbWFyeSBIYW5kbGVzIHNvcnQgZGlyZWN0aW9uIGNoYW5nZXMgYnkgdG9nZ2xpbmcgYmV0d2VlbiBBU0MgYW5kIERTQyB2YWx1ZXMuXG4gICAqIFdoZW4gdGhlIGRpcmVjdGlvbiBjaGFuZ2VzLCBhdXRvbWF0aWNhbGx5IHRyaWdnZXJzIGEgc3VibWl0IHRvIGFwcGx5IHRoZSBuZXdcbiAgICogc29ydGluZyBjb25maWd1cmF0aW9uIHRvIHRoZSBmaWx0ZXJlZCByZXN1bHRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAgT3JkZXJEaXJlY3Rpb24uQVNDID8gT3JkZXJEaXJlY3Rpb24uRFNDIDogT3JkZXJEaXJlY3Rpb24uQVNDO1xuICAgIGlmKGRpcmVjdGlvbiAhPT0gdGhpcy5zb3J0RGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBzb3J0IGZpZWxkIHNlbGVjdGlvbiBjaGFuZ2VzIGZyb20gdGhlIGRyb3Bkb3duLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgc29ydCBmaWVsZCBjaGFuZ2VzIHdoZW4gdXNlcnMgc2VsZWN0IGEgZGlmZmVyZW50IGZpZWxkXG4gICAqIGZyb20gdGhlIHNvcnQgZHJvcGRvd24uIFVwZGF0ZXMgdGhlIHNvcnRWYWx1ZSBwcm9wZXJ0eSBhbmQgdHJpZ2dlcnNcbiAgICogYSBzdWJtaXQgdG8gYXBwbHkgdGhlIG5ldyBzb3J0aW5nIGNvbmZpZ3VyYXRpb24gaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBzZWxlY3QgY2hhbmdlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG5ldyBzb3J0IGZpZWxkIHZhbHVlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW9uU2VsZWN0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICBpZih2YWx1ZSAhPT0gdGhpcy5zb3J0VmFsdWUpIHtcbiAgICAgIHRoaXMuc29ydFZhbHVlID0gdmFsdWUgYXMgc3RyaW5nO1xuICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZpbHRlcnMgYXZhaWxhYmxlIG9wdGlvbnMgYmFzZWQgb24gdXNlciBpbnB1dCB3aXRoIHZpc3VhbCBoaWdobGlnaHRpbmcuXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIHJlYWwtdGltZSBmaWx0ZXJpbmcgb2YgYXZhaWxhYmxlIG9wdGlvbnMgYmFzZWQgb24gdXNlciBpbnB1dC5cbiAgICogQWxzbyBoYW5kbGVzIHZpc3VhbCBoaWdobGlnaHRpbmcgb2YgbWF0Y2hpbmcgb3B0aW9ucyBpbiB0aGUgZHJvcGRvd24uIFJldHVybnMgYWxsXG4gICAqIG9wdGlvbnMgaWYgaW5wdXQgaXMgbGVzcyB0aGFuIDIgY2hhcmFjdGVycyBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlIC0gVGhlIHNlYXJjaCB2YWx1ZSB0byBmaWx0ZXIgYnlcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBBcnJheSBvZiBmaWx0ZXJlZCBvcHRpb25zIHRoYXQgbWF0Y2ggdGhlIGlucHV0XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgRCBhcyBET01cbiAgICpcbiAgICogICBVLT4+RjogZmlsdGVyT3B0aW9ucyhpbnB1dFZhbHVlKVxuICAgKiAgIGFsdCBpbnB1dFZhbHVlIDwgMiBjaGFyYWN0ZXJzXG4gICAqICAgICBGLT4+RDogUmVtb3ZlIGV4aXN0aW5nIGhpZ2hsaWdodHNcbiAgICogICAgIEYtLT4+VTogUmV0dXJuIGFsbCBvcHRpb25zXG4gICAqICAgZWxzZSBpbnB1dFZhbHVlID49IDIgY2hhcmFjdGVyc1xuICAgKiAgICAgRi0+PkQ6IFF1ZXJ5IGFsbCBvcHRpb24gZWxlbWVudHNcbiAgICogICAgIEYtPj5EOiBBZGQgaGlnaGxpZ2h0IHRvIGZpcnN0IG1hdGNoaW5nIG9wdGlvblxuICAgKiAgICAgRi0+PkY6IEZpbHRlciBvcHRpb25zIGJ5IHN1YnN0cmluZyBtYXRjaFxuICAgKiAgICAgRi0tPj5VOiBSZXR1cm4gZmlsdGVyZWQgb3B0aW9uc1xuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBmaWx0ZXJPcHRpb25zKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgIHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBvcHRpb25zRWxlbWVudCA9IHRoaXMub3B0aW9uc0ZpbHRlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBpZighdmFsdWU/Lmxlbmd0aCB8fCAhdmFsdWUgfHwgdmFsdWUubGVuZ3RoIDwgMikge1xuICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb24gPSBvcHRpb25zRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGNmLWZpbHRlcmluZy1pdGVtJyk7XG4gICAgICBpZihmaWx0ZXJlZE9wdGlvbilcbiAgICAgICAgZmlsdGVyZWRPcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnZGNmLWZpbHRlcmluZy1pdGVtJyk7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gb3B0aW9uc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRjZi1pdGVtJyk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSBvcHRpb24udGV4dENvbnRlbnQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZihpc0FjdGl2ZSkge1xuICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnZGNmLWZpbHRlcmluZy1pdGVtJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uOiBzdHJpbmcpID0+IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkgYXMgc3RyaW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgc2VhcmNoIGV2ZW50cyBmcm9tIHRoZSBpbnRlZ3JhdGVkIHNlYXJjaGJhciBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBzZWFyY2ggaW5wdXQgZnJvbSB0aGUgc2VhcmNoYmFyIGFuZCBlbWl0cyBzZWFyY2ggZXZlbnRzXG4gICAqIHRvIHBhcmVudCBjb21wb25lbnRzLiBUaGlzIG1ldGhvZCBhY3RzIGFzIGEgYnJpZGdlIGJldHdlZW4gdGhlIGludGVybmFsXG4gICAqIHNlYXJjaGJhciBjb21wb25lbnQgYW5kIGV4dGVybmFsIHNlYXJjaCBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIFRoZSBzZWFyY2ggdmFsdWUgZW50ZXJlZCBieSB0aGUgdXNlclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlU2VhcmNoKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQodmFsdWUpO1xuICB9XG5cbn1cbiIsIlxuQGlmKCFpbmRleGVzLmxlbmd0aCkge1xuICA8bmd4LWRlY2FmLXNlYXJjaGJhciBbZW1pdEV2ZW50VG9XaW5kb3ddPVwiZmFsc2VcIiBbZGVib3VuY2VdPVwiNTAwXCIgKHNlYXJjaEV2ZW50KT1cImhhbmRsZVNlYXJjaCgkZXZlbnQpXCIgLz5cbn1cblxuPGRpdiBjbGFzcz1cImRjZi1ncmlkIGRjZi1ncmlkLXNtYWxsIGRjZi1ncmlkLW1hdGNoIGRjZi1maWx0ZXItZ3JpZFwiIFtuZ0NsYXNzXT1cInsnZGNmLWhpZGRlbic6ICFpbmRleGVzLmxlbmd0aH1cIj5cbiAgPGRpdiBjbGFzcz1cImRjZi13aWR0aC1leHBhbmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGNmLWZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRjZi1pbnB1dFwiPlxuICAgICAgICBAZm9yKGZpbHRlciBvZiBmaWx0ZXJWYWx1ZTsgdHJhY2sgdHJhY2tJdGVtRm4oJGluZGV4LCBmaWx0ZXI/LlsnaW5kZXgnXSkpIHtcbiAgICAgICAgICBAaWYoZmlsdGVyPy5bJ2luZGV4J10pIHtcbiAgICAgICAgICAgIDxpb24tY2hpcCBbb3V0bGluZV09XCJ0cnVlXCI+e3sgZmlsdGVyPy5bJ2luZGV4J10gfX08L2lvbi1jaGlwPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYoZmlsdGVyPy5bJ2NvbmRpdGlvbiddKSB7XG4gICAgICAgICAgICA8aW9uLWNoaXAgW291dGxpbmVdPVwidHJ1ZVwiPnt7IGZpbHRlcj8uWydjb25kaXRpb24nXSB9fTwvaW9uLWNoaXA+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZihmaWx0ZXI/LlsndmFsdWUnXSkge1xuICAgICAgICAgICAgPGlvbi1jaGlwIFtvdXRsaW5lXT1cInRydWVcIiBjbGFzcz1cImRjZi1maWx0ZXItdmFsdWVcIj5cbiAgICAgICAgICAgICAge3sgZmlsdGVyPy5bJ3ZhbHVlJ10gfX1cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoZmlsdGVyPy5bJ3ZhbHVlJ10pXCIgc2l6ZT1cInNtYWxsXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWNoaXA+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtMS0xXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFkZEZpbHRlcih2YWx1ZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiY2xlYXIodmFsdWUpXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJoYW5kbGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVGb2N1cygpXCJcbiAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwic3RlcCAhPT0gM1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IGxvY2FsZSArIChzdGVwID09PSAzID8gJy50eXBlJyA6ICcuc2VsZWN0JykgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgI2NvbXBvbmVudFxuICAgICAgICAgIC8+XG4gICAgICAgICAgQGlmKHdpbmRvd1dpZHRoID49IDc2OCkge1xuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2RjZi1kcm9wZG93biAnICsgKG9wdGlvbnMubGVuZ3RoID4gMCA/ICcgZGNmLWFjdGl2ZScgOiAnJylcIiAjb3B0aW9uc0ZpbHRlckVsZW1lbnQ+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgQGlmKGZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBAZm9yKGtleSBvZiBmaWx0ZXJlZE9wdGlvbnM7IHRyYWNrIGtleSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkY2YtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWxlY3RPcHRpb24oa2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihrZXkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sga2V5IH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRjZi1lbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zOyB2YWx1ZSA9ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZmlsdGVyZWRPcHRpb25zID0gb3B0aW9uczsgdmFsdWUgPSAnJ1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdub19zdWdnZXN0aW9ucycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYoZmlsdGVyVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tY2xlYXJcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwiY2xlYXIoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaWNvbi1zZWFyY2hcIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cInN1Ym1pdCgpXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzZWFyY2gtb3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBAaWYod2luZG93V2lkdGggPCA3NjgpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZHJvcGRvd24gJyArIChvcHRpb25zLmxlbmd0aCA+IDAgPyAnIGRjZi1hY3RpdmUnIDogJycpXCIgI29wdGlvbnNGaWx0ZXJFbGVtZW50PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIEBpZihmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgQGZvcihrZXkgb2YgZmlsdGVyZWRPcHRpb25zOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGNmLWl0ZW1cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0T3B0aW9uKGtleSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24oa2V5KVwiPlxuICAgICAgICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtZW1wdHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnbm9fc3VnZ2VzdGlvbnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmKCFkaXNhYmxlU29ydCkge1xuICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtMS01QG0gZGNmLXdpZHRoLTEtMSBkY2Ytc29ydC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtZ3JpZCBkY2YtZ3JpZC1jb2xsYXBzZSBkY2YtZmxleCBkY2YtZmxleC1taWRkbGUgZGNmLWdyaWQtbWF0Y2hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRjZi13aWR0aC1leHBhbmRcIj5cbiAgICAgICAgICA8aW9uLXNlbGVjdFxuICAgICAgICAgICAgICB0b2dnbGVJY29uPVwiY2hldnJvbi1kb3duLW91dGxpbmVcIlxuICAgICAgICAgICAgICBleHBhbmRlZEljb249XCJjaGV2cm9uLXVwLW91dGxpbmVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRjZi1zb3J0LXNlbGVjdFwiXG4gICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwiaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaW50ZXJmYWNlPVwicG9wb3ZlclwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzb3J0VmFsdWVcIlxuICAgICAgICAgICAgICBsYWJlbC1wbGFjZW1lbnQ9XCJmbG9hdGluZ1wiXG4gICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3Ioc29ydCBvZiBzb3J0Qnk7IHRyYWNrIHNvcnQpIHtcbiAgICAgICAgICAgICAgYWFcbiAgICAgICAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCJzb3J0XCI+e3sgc29ydCB8IHRyYW5zbGF0ZSB9fTwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRjZi13aWR0aC1hdXRvXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2UoKVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJzb3J0RGlyZWN0aW9uID09PSAnZGVzYycgPyAnYXJyb3ctZG93bi1vdXRsaW5lJyA6ICdhcnJvdy11cC1vdXRsaW5lJ1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuXG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { Component, Input } from '@angular/core';
2
- import { ForAngularModule } from 'src/lib/for-angular.module';
3
- import { NgxBaseComponent } from 'src/lib/engine/NgxBaseComponent';
2
+ import { ForAngularModule } from '../../for-angular.module';
3
+ import { NgxBaseComponent } from '../../engine/NgxBaseComponent';
4
4
  import { ComponentRendererComponent } from '../component-renderer/component-renderer.component';
5
5
  import { ModelRendererComponent } from '../model-renderer/model-renderer.component';
6
6
  import * as i0 from "@angular/core";
@@ -173,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
173
173
  }], children: [{
174
174
  type: Input
175
175
  }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7QUFHcEY7Ozs7Ozs7Ozs7O0dBV0c7QUFTSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBZ0I7SUF5RG5EOzs7Ozs7O09BT0c7SUFDSDtRQUNFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBaEUxQjs7Ozs7Ozs7OztXQVVHO1FBRUgsU0FBSSxHQUFzQixDQUFDLENBQUM7UUFFNUI7Ozs7Ozs7OztXQVNHO1FBRUgsU0FBSSxHQUFtQyxDQUFDLENBQUM7UUFFekM7Ozs7Ozs7Ozs7V0FVRztRQUVILGVBQVUsR0FBdUIsUUFBUSxDQUFDO1FBRTFDOzs7Ozs7Ozs7O1dBVUc7UUFFSCxhQUFRLEdBQWUsRUFBRSxDQUFDO0lBWTFCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyQixJQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDekIsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEVBQUUsR0FBRyxFQUFFLENBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQUksS0FBSztRQUNQLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRO1lBQ3pCLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM3QixPQUFPO2dCQUNMLEtBQUssRUFBRyxHQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pDLElBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO3dCQUMzQixPQUFPLEtBQUssQ0FBQztnQkFDakIsQ0FBQyxDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ00sVUFBVTtRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBd0IsQ0FBQztRQUNsRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7K0dBekpVLGVBQWU7bUdBQWYsZUFBZSwyTEM1QjVCLDQzQ0FvQ0EsNHBCRFpZLGdCQUFnQiw0RkFBRSxzQkFBc0IsMklBQUUsMEJBQTBCOzs0RkFJbkUsZUFBZTtrQkFSM0IsU0FBUzsrQkFDRSxrQkFBa0IsV0FHbkIsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsQ0FBQyxjQUNuRSxJQUFJO3dEQWlCaEIsSUFBSTtzQkFESCxLQUFLO2dCQWNOLElBQUk7c0JBREgsS0FBSztnQkFlTixVQUFVO3NCQURULEtBQUs7Z0JBZU4sUUFBUTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICdzcmMvbGliL2Zvci1hbmd1bGFyLm1vZHVsZSc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnc3JjL2xpYi9lbmdpbmUvTmd4QmFzZUNvbXBvbmVudCc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJ3NyYy9saWIvZW5naW5lJztcbmltcG9ydCB7IENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50LXJlbmRlcmVyL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kZWxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL21vZGVsLXJlbmRlcmVyL21vZGVsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVSU1lZGlhQnJlYWtQb2ludHMgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIExheW91dCBjb21wb25lbnQgZm9yIGNyZWF0aW5nIHJlc3BvbnNpdmUgZ3JpZCBsYXlvdXRzIGluIEFuZ3VsYXIgYXBwbGljYXRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBmbGV4aWJsZSBncmlkIHN5c3RlbSB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHdpdGggZHluYW1pY1xuICogcm93cyBhbmQgY29sdW1ucy4gSXQgc3VwcG9ydHMgcmVzcG9uc2l2ZSBicmVha3BvaW50cyBhbmQgY2FuIHJlbmRlciBjaGlsZCBjb21wb25lbnRzIHdpdGhpblxuICogdGhlIGdyaWQgc3RydWN0dXJlLiBUaGUgY29tcG9uZW50IGV4dGVuZHMgTmd4QmFzZUNvbXBvbmVudCB0byBpbmhlcml0IGNvbW1vbiBmdW5jdGlvbmFsaXR5XG4gKiBhbmQgaW50ZWdyYXRlcyB3aXRoIHRoZSBtb2RlbCBhbmQgY29tcG9uZW50IHJlbmRlcmVyIHN5c3RlbXMuXG4gKlxuICogQGNsYXNzIExheW91dENvbXBvbmVudFxuICogQGV4dGVuZHMge05neEJhc2VDb21wb25lbnR9XG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxuICogQG1lbWJlck9mIExheW91dENvbXBvbmVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtbGF5b3V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xheW91dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xheW91dC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZSwgTW9kZWxSZW5kZXJlckNvbXBvbmVudCwgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuXG59KVxuZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTnVtYmVyIG9mIGNvbHVtbnMgb3IgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zIGZvciB0aGUgZ3JpZCBsYXlvdXQuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbHVtbiBzdHJ1Y3R1cmUgb2YgdGhlIGdyaWQuIFdoZW4gYSBudW1iZXIgaXMgcHJvdmlkZWQsIGl0IGNyZWF0ZXNcbiAgICogdGhhdCBtYW55IGVxdWFsLXdpZHRoIGNvbHVtbnMuIFdoZW4gYW4gYXJyYXkgaXMgcHJvdmlkZWQsIGVhY2ggZWxlbWVudCBjYW4gZGVmaW5lIHNwZWNpZmljXG4gICAqIGNvbHVtbiBwcm9wZXJ0aWVzIG9yIHNpemluZy4gVGhpcyBhbGxvd3MgZm9yIGZsZXhpYmxlIGdyaWQgbGF5b3V0cyB0aGF0IGNhbiBhZGFwdCB0b1xuICAgKiBkaWZmZXJlbnQgY29udGVudCByZXF1aXJlbWVudHMuXG4gICAqXG4gICAqIEB0eXBlIHsobnVtYmVyIHwgc3RyaW5nW10pfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbHM6IG51bWJlciB8IHN0cmluZ1tdID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE51bWJlciBvZiByb3dzIG9yIGFycmF5IG9mIHJvdyBkZWZpbml0aW9ucyBmb3IgdGhlIGdyaWQgbGF5b3V0LlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSByb3cgc3RydWN0dXJlIG9mIHRoZSBncmlkLiBXaGVuIGEgbnVtYmVyIGlzIHByb3ZpZGVkLCBpdCBjcmVhdGVzXG4gICAqIHRoYXQgbWFueSBlcXVhbC1oZWlnaHQgcm93cy4gV2hlbiBhbiBhcnJheSBpcyBwcm92aWRlZCwgZWFjaCBlbGVtZW50IGNhbiBkZWZpbmUgc3BlY2lmaWNcbiAgICogcm93IHByb3BlcnRpZXMgb3Igc2l6aW5nLiBUaGlzIHByb3ZpZGVzIGNvbnRyb2wgb3ZlciB2ZXJ0aWNhbCBzcGFjaW5nIGFuZCBjb250ZW50IG9yZ2FuaXphdGlvbi5cbiAgICpcbiAgICogQHR5cGUgeyhudW1iZXIgfCBzdHJpbmdbXSl9XG4gICAqIEBkZWZhdWx0IDFcbiAgICogQG1lbWJlck9mIExheW91dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcm93czogbnVtYmVyIHwgS2V5VmFsdWVbXSB8IHN0cmluZ1tdID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE1lZGlhIGJyZWFrcG9pbnQgZm9yIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludCBhdCB3aGljaCB0aGUgbGF5b3V0IHNob3VsZCBhZGFwdC5cbiAgICogVGhpcyBhZmZlY3RzIGhvdyB0aGUgZ3JpZCBiZWhhdmVzIG9uIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMsIGFsbG93aW5nIGZvclxuICAgKiBtb2JpbGUtZmlyc3Qgb3IgZGVza3RvcC1maXJzdCByZXNwb25zaXZlIGRlc2lnbiBwYXR0ZXJucy4gVGhlIGJyZWFrcG9pbnRcbiAgICogaXMgYXV0b21hdGljYWxseSBwcm9jZXNzZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgVUkgZnJhbWV3b3JrLlxuICAgKlxuICAgKiBAdHlwZSB7VUlNZWRpYUJyZWFrUG9pbnRzfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgTGF5b3V0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBicmVha3BvaW50OiBVSU1lZGlhQnJlYWtQb2ludHMgPSAnbWVkaXVtJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIGNoaWxkIGNvbXBvbmVudHMgb3IgZGF0YSB0byByZW5kZXIgd2l0aGluIHRoZSBncmlkLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgY2hpbGQgZWxlbWVudHMgdGhhdCB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgZ3JpZCBsYXlvdXQuXG4gICAqIEVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgcmVwcmVzZW50cyBjb250ZW50IHRoYXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyB0aGUgYXBwcm9wcmlhdGVcbiAgICogcmVuZGVyZXIgY29tcG9uZW50IChNb2RlbFJlbmRlcmVyIG9yIENvbXBvbmVudFJlbmRlcmVyKS4gVGhpcyBhbGxvd3MgZm9yIG1peGVkIGNvbnRlbnRcbiAgICogdHlwZXMgd2l0aGluIGEgc2luZ2xlIGxheW91dCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZVtdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgTGF5b3V0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjaGlsZHJlbjogS2V5VmFsdWVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMYXlvdXRDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IExheW91dENvbXBvbmVudCB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBcIkxheW91dENvbXBvbmVudFwiLlxuICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNhbGxzIHRoZSBwYXJlbnQgTmd4QmFzZUNvbXBvbmVudCBjb25zdHJ1Y3RvciB0byBzZXQgdXAgYmFzZVxuICAgKiBmdW5jdGlvbmFsaXR5IGFuZCBjb21wb25lbnQgaWRlbnRpZmljYXRpb24uXG4gICAqXG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiTGF5b3V0Q29tcG9uZW50XCIpXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHRlciB0aGF0IGNvbnZlcnRzIGNvbHVtbnMgaW5wdXQgdG8gYW4gYXJyYXkgZm9ybWF0LlxuICAgKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBjb2xzIGlucHV0IHByb3BlcnR5IGludG8gYSBzdGFuZGFyZGl6ZWQgc3RyaW5nIGFycmF5IGZvcm1hdC5cbiAgICogV2hlbiBjb2xzIGlzIGEgbnVtYmVyLCBpdCBjcmVhdGVzIGFuIGFycmF5IHdpdGggdGhhdCBtYW55IGVtcHR5IHN0cmluZyBlbGVtZW50cy5cbiAgICogV2hlbiBjb2xzIGlzIGFscmVhZHkgYW4gYXJyYXksIGl0IHJldHVybnMgdGhlIGFycmF5IGFzLWlzLiBUaGlzIG5vcm1hbGl6YXRpb25cbiAgICogZW5zdXJlcyBjb25zaXN0ZW50IGhhbmRsaW5nIG9mIGNvbHVtbiBkZWZpbml0aW9ucyBpbiB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIGdldCBfY29scygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvbHMgPSB0aGlzLmNvbHM7XG4gICAgaWYodHlwZW9mIGNvbHMgPT09IFwibnVtYmVyXCIpXG4gICAgICBjb2xzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBOdW1iZXIoY29scyl9LCAoKSA9PiAgYGApO1xuICAgIHJldHVybiBjb2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXR0ZXIgdGhhdCBjb252ZXJ0cyByb3dzIGlucHV0IHRvIGFuIGFycmF5IGZvcm1hdC5cbiAgICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgcm93cyBpbnB1dCBwcm9wZXJ0eSBpbnRvIGEgc3RhbmRhcmRpemVkIHN0cmluZyBhcnJheSBmb3JtYXQuXG4gICAqIFdoZW4gcm93cyBpcyBhIG51bWJlciwgaXQgY3JlYXRlcyBhbiBhcnJheSB3aXRoIHRoYXQgbWFueSBlbXB0eSBzdHJpbmcgZWxlbWVudHMuXG4gICAqIFdoZW4gcm93cyBpcyBhbHJlYWR5IGFuIGFycmF5LCBpdCByZXR1cm5zIHRoZSBhcnJheSBhcy1pcy4gVGhpcyBub3JtYWxpemF0aW9uXG4gICAqIGVuc3VyZXMgY29uc2lzdGVudCBoYW5kbGluZyBvZiByb3cgZGVmaW5pdGlvbnMgaW4gdGhlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWVbXX1cbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIGdldCBfcm93cygpOiBLZXlWYWx1ZVtdIHtcbiAgICBsZXQgcm93cyA9IHRoaXMucm93cztcbiAgICBpZih0eXBlb2Ygcm93cyA9PT0gXCJudW1iZXJcIilcbiAgICAgIHJvd3MgPSBBcnJheS5mcm9tKHtsZW5ndGg6IE51bWJlcihyb3dzKX0sICgpID0+ICh7dGl0bGU6ICcnfSkpO1xuICAgIHJldHVybiByb3dzLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IChyb3cgYXMgS2V5VmFsdWUpPy5bJ3RpdGxlJ10sXG4gICAgICAgIGNvbHM6IHRoaXMuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IHtcbiAgICAgICAgICBpZihjaGlsZFsncm93J10gPT09IGluZGV4ICsgMSlcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgdGhhdCBydW5zIGFmdGVyIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbi5cbiAgICogQHN1bW1hcnkgQ2FsbGVkIG9uY2UsIGFmdGVyIHRoZSBmaXJzdCBuZ09uQ2hhbmdlcygpLiBUaGlzIG1ldGhvZCB0cmlnZ2VycyB0aGVcbiAgICogY29tcG9uZW50J3MgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgd2hpY2ggaW5jbHVkZXMgcHJvcGVydHkgcGFyc2luZyBhbmQgZ3JpZFxuICAgKiBzZXR1cC4gSXQgZW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIHJlbmRlcmluZy5cbiAgICpcbiAgICogQG1lbWJlck9mIExheW91dENvbXBvbmVudFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBsYXlvdXQgY29tcG9uZW50IHdpdGggcHJvY2Vzc2VkIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlcyB0aGUgYmFzZSBjb21wb25lbnQncyBpbml0aWFsaXplIG1ldGhvZCB0byBzZXQgdXAgdGhlIGdyaWQgbGF5b3V0LlxuICAgKiBUaGlzIG1ldGhvZCBwcm9jZXNzZXMgaW5wdXQgcHJvcGVydGllcywgbm9ybWFsaXplcyB0aGUgYnJlYWtwb2ludCB2YWx1ZSwgY29udmVydHNcbiAgICogcm93cyBhbmQgY29sdW1ucyB0byB0aGVpciBhcnJheSByZXByZXNlbnRhdGlvbnMsIGFuZCBtYXJrcyB0aGUgY29tcG9uZW50IGFzIGluaXRpYWxpemVkLlxuICAgKiBUaGUgaW5pdGlhbGl6YXRpb24gZW5zdXJlcyBhbGwgcHJvcGVydGllcyBhcmUgaW4gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciByZW5kZXJpbmcuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgTGF5b3V0Q29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgQiBhcyBOZ3hCYXNlQ29tcG9uZW50XG4gICAqXG4gICAqICAgTC0+PkI6IHBhcnNlUHJvcHModGhpcylcbiAgICogICBOb3RlIG92ZXIgTDogUHJvY2VzcyBjb21wb25lbnQgcHJvcGVydGllc1xuICAgKiAgIEwtPj5MOiBOb3JtYWxpemUgYnJlYWtwb2ludCB0byBsb3dlcmNhc2VcbiAgICogICBMLT4+TDogQ29udmVydCByb3dzIHRvIGFycmF5IGZvcm1hdFxuICAgKiAgIEwtPj5MOiBDb252ZXJ0IGNvbHMgdG8gYXJyYXkgZm9ybWF0XG4gICAqICAgTC0+Pkw6IFNldCBpbml0aWFsaXplZCA9IHRydWVcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5wYXJzZVByb3BzKHRoaXMpO1xuICAgIHRoaXMuYnJlYWtwb2ludCA9IHRoaXMuYnJlYWtwb2ludC5zbGljZSgwLCAyKS50b0xvd2VyQ2FzZSgpIGFzIFVJTWVkaWFCcmVha1BvaW50cztcbiAgICB0aGlzLmNvbHMgPSB0aGlzLl9jb2xzO1xuICAgIHRoaXMucm93cyA9IHRoaXMuX3Jvd3M7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cbn1cbiIsIlxuQGlmKGluaXRpYWxpemVkKSB7XG4gIEBmb3IgKHJvdyBvZiByb3dzOyB0cmFjayB0cmFja0l0ZW1GbigkaW5kZXgsIHJvdyk7IGxldCByb3dJbmRleCA9ICRpbmRleCkge1xuICAgIDxkaXYgY2xhc3M9XCJkY2YtZ3JpZCBkY2YtZ3JpZC1jb2xsYXBzZSBkY2YtZ3JpZC1tYXRjaFwiPlxuICAgICAgQGlmKHJvdykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMSBkY2YtZ3JpZC10aXRsZVwiPlxuICAgICAgICAgIDxpb24tY2FyZCBjbGFzcz1cImRjZi1ncmlkLXRpdGxlXCI+XG4gICAgICAgICAgICB7e3Jvdy50aXRsZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAZm9yIChjaGlsZCBvZiByb3cuY29sczsgdHJhY2sgdHJhY2tJdGVtRm4oJGluZGV4LCBjaGlsZC5jb2wpOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiKGNoaWxkLmNvbCA9PT0gY29scy5sZW5ndGggPyAnZGNmLXdpZHRoLTEtMScgOiAnZGNmLXdpZHRoLScrY2hpbGQuY29sKyctJytjb2xzLmxlbmd0aCsnQCcrYnJlYWtwb2ludClcIj5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZ3JpZC1jaGlsZCAnK2NoaWxkLmNvbCBcIj5cbiAgICAgICAgICAgICAgQGlmKGNoaWxkLnRhZyA9PT0gJ25neC1kZWNhZi1jcnVkLWZvcm0nKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkIFtjbGFzc109XCInZGNmLWhlaWdodC0xLTEgJyArIGNsYXNzTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtZGVjYWYtbW9kZWwtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiY2hpbGQucHJvcHMubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGxpc3RlbkV2ZW50KT1cImhhbmRsZUV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxuZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICBbdGFnXT1cImNoaWxkLnRhZ1wiXG4gICAgICAgICAgICAgICAgICAobGlzdGVuRXZlbnQpPVwiaGFuZGxlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZ2xvYmFsc109XCJ7cHJvcHM6IGNoaWxkLnByb3BzfVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG59XG4iXX0=
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWpFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7QUFHcEY7Ozs7Ozs7Ozs7O0dBV0c7QUFTSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBZ0I7SUF5RG5EOzs7Ozs7O09BT0c7SUFDSDtRQUNFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBaEUxQjs7Ozs7Ozs7OztXQVVHO1FBRUgsU0FBSSxHQUFzQixDQUFDLENBQUM7UUFFNUI7Ozs7Ozs7OztXQVNHO1FBRUgsU0FBSSxHQUFtQyxDQUFDLENBQUM7UUFFekM7Ozs7Ozs7Ozs7V0FVRztRQUVILGVBQVUsR0FBdUIsUUFBUSxDQUFDO1FBRTFDOzs7Ozs7Ozs7O1dBVUc7UUFFSCxhQUFRLEdBQWUsRUFBRSxDQUFDO0lBWTFCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyQixJQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDekIsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEVBQUUsR0FBRyxFQUFFLENBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQUksS0FBSztRQUNQLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRO1lBQ3pCLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM3QixPQUFPO2dCQUNMLEtBQUssRUFBRyxHQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pDLElBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO3dCQUMzQixPQUFPLEtBQUssQ0FBQztnQkFDakIsQ0FBQyxDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ00sVUFBVTtRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBd0IsQ0FBQztRQUNsRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7K0dBekpVLGVBQWU7bUdBQWYsZUFBZSwyTEM1QjVCLDQzQ0FvQ0EsNHBCRFpZLGdCQUFnQiw0RkFBRSxzQkFBc0IsMklBQUUsMEJBQTBCOzs0RkFJbkUsZUFBZTtrQkFSM0IsU0FBUzsrQkFDRSxrQkFBa0IsV0FHbkIsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsQ0FBQyxjQUNuRSxJQUFJO3dEQWlCaEIsSUFBSTtzQkFESCxLQUFLO2dCQWNOLElBQUk7c0JBREgsS0FBSztnQkFlTixVQUFVO3NCQURULEtBQUs7Z0JBZU4sUUFBUTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgTmd4QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hCYXNlQ29tcG9uZW50JztcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50LXJlbmRlcmVyL2NvbXBvbmVudC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kZWxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL21vZGVsLXJlbmRlcmVyL21vZGVsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVSU1lZGlhQnJlYWtQb2ludHMgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIExheW91dCBjb21wb25lbnQgZm9yIGNyZWF0aW5nIHJlc3BvbnNpdmUgZ3JpZCBsYXlvdXRzIGluIEFuZ3VsYXIgYXBwbGljYXRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBmbGV4aWJsZSBncmlkIHN5c3RlbSB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHdpdGggZHluYW1pY1xuICogcm93cyBhbmQgY29sdW1ucy4gSXQgc3VwcG9ydHMgcmVzcG9uc2l2ZSBicmVha3BvaW50cyBhbmQgY2FuIHJlbmRlciBjaGlsZCBjb21wb25lbnRzIHdpdGhpblxuICogdGhlIGdyaWQgc3RydWN0dXJlLiBUaGUgY29tcG9uZW50IGV4dGVuZHMgTmd4QmFzZUNvbXBvbmVudCB0byBpbmhlcml0IGNvbW1vbiBmdW5jdGlvbmFsaXR5XG4gKiBhbmQgaW50ZWdyYXRlcyB3aXRoIHRoZSBtb2RlbCBhbmQgY29tcG9uZW50IHJlbmRlcmVyIHN5c3RlbXMuXG4gKlxuICogQGNsYXNzIExheW91dENvbXBvbmVudFxuICogQGV4dGVuZHMge05neEJhc2VDb21wb25lbnR9XG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxuICogQG1lbWJlck9mIExheW91dENvbXBvbmVudFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtbGF5b3V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xheW91dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xheW91dC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbRm9yQW5ndWxhck1vZHVsZSwgTW9kZWxSZW5kZXJlckNvbXBvbmVudCwgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnRdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuXG59KVxuZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTnVtYmVyIG9mIGNvbHVtbnMgb3IgYXJyYXkgb2YgY29sdW1uIGRlZmluaXRpb25zIGZvciB0aGUgZ3JpZCBsYXlvdXQuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbHVtbiBzdHJ1Y3R1cmUgb2YgdGhlIGdyaWQuIFdoZW4gYSBudW1iZXIgaXMgcHJvdmlkZWQsIGl0IGNyZWF0ZXNcbiAgICogdGhhdCBtYW55IGVxdWFsLXdpZHRoIGNvbHVtbnMuIFdoZW4gYW4gYXJyYXkgaXMgcHJvdmlkZWQsIGVhY2ggZWxlbWVudCBjYW4gZGVmaW5lIHNwZWNpZmljXG4gICAqIGNvbHVtbiBwcm9wZXJ0aWVzIG9yIHNpemluZy4gVGhpcyBhbGxvd3MgZm9yIGZsZXhpYmxlIGdyaWQgbGF5b3V0cyB0aGF0IGNhbiBhZGFwdCB0b1xuICAgKiBkaWZmZXJlbnQgY29udGVudCByZXF1aXJlbWVudHMuXG4gICAqXG4gICAqIEB0eXBlIHsobnVtYmVyIHwgc3RyaW5nW10pfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbHM6IG51bWJlciB8IHN0cmluZ1tdID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE51bWJlciBvZiByb3dzIG9yIGFycmF5IG9mIHJvdyBkZWZpbml0aW9ucyBmb3IgdGhlIGdyaWQgbGF5b3V0LlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSByb3cgc3RydWN0dXJlIG9mIHRoZSBncmlkLiBXaGVuIGEgbnVtYmVyIGlzIHByb3ZpZGVkLCBpdCBjcmVhdGVzXG4gICAqIHRoYXQgbWFueSBlcXVhbC1oZWlnaHQgcm93cy4gV2hlbiBhbiBhcnJheSBpcyBwcm92aWRlZCwgZWFjaCBlbGVtZW50IGNhbiBkZWZpbmUgc3BlY2lmaWNcbiAgICogcm93IHByb3BlcnRpZXMgb3Igc2l6aW5nLiBUaGlzIHByb3ZpZGVzIGNvbnRyb2wgb3ZlciB2ZXJ0aWNhbCBzcGFjaW5nIGFuZCBjb250ZW50IG9yZ2FuaXphdGlvbi5cbiAgICpcbiAgICogQHR5cGUgeyhudW1iZXIgfCBzdHJpbmdbXSl9XG4gICAqIEBkZWZhdWx0IDFcbiAgICogQG1lbWJlck9mIExheW91dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcm93czogbnVtYmVyIHwgS2V5VmFsdWVbXSB8IHN0cmluZ1tdID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE1lZGlhIGJyZWFrcG9pbnQgZm9yIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludCBhdCB3aGljaCB0aGUgbGF5b3V0IHNob3VsZCBhZGFwdC5cbiAgICogVGhpcyBhZmZlY3RzIGhvdyB0aGUgZ3JpZCBiZWhhdmVzIG9uIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMsIGFsbG93aW5nIGZvclxuICAgKiBtb2JpbGUtZmlyc3Qgb3IgZGVza3RvcC1maXJzdCByZXNwb25zaXZlIGRlc2lnbiBwYXR0ZXJucy4gVGhlIGJyZWFrcG9pbnRcbiAgICogaXMgYXV0b21hdGljYWxseSBwcm9jZXNzZWQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgVUkgZnJhbWV3b3JrLlxuICAgKlxuICAgKiBAdHlwZSB7VUlNZWRpYUJyZWFrUG9pbnRzfVxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKiBAbWVtYmVyT2YgTGF5b3V0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBicmVha3BvaW50OiBVSU1lZGlhQnJlYWtQb2ludHMgPSAnbWVkaXVtJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIGNoaWxkIGNvbXBvbmVudHMgb3IgZGF0YSB0byByZW5kZXIgd2l0aGluIHRoZSBncmlkLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgY2hpbGQgZWxlbWVudHMgdGhhdCB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgZ3JpZCBsYXlvdXQuXG4gICAqIEVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgcmVwcmVzZW50cyBjb250ZW50IHRoYXQgd2lsbCBiZSByZW5kZXJlZCB1c2luZyB0aGUgYXBwcm9wcmlhdGVcbiAgICogcmVuZGVyZXIgY29tcG9uZW50IChNb2RlbFJlbmRlcmVyIG9yIENvbXBvbmVudFJlbmRlcmVyKS4gVGhpcyBhbGxvd3MgZm9yIG1peGVkIGNvbnRlbnRcbiAgICogdHlwZXMgd2l0aGluIGEgc2luZ2xlIGxheW91dCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZVtdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgTGF5b3V0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjaGlsZHJlbjogS2V5VmFsdWVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMYXlvdXRDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IExheW91dENvbXBvbmVudCB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSBcIkxheW91dENvbXBvbmVudFwiLlxuICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNhbGxzIHRoZSBwYXJlbnQgTmd4QmFzZUNvbXBvbmVudCBjb25zdHJ1Y3RvciB0byBzZXQgdXAgYmFzZVxuICAgKiBmdW5jdGlvbmFsaXR5IGFuZCBjb21wb25lbnQgaWRlbnRpZmljYXRpb24uXG4gICAqXG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiTGF5b3V0Q29tcG9uZW50XCIpXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHRlciB0aGF0IGNvbnZlcnRzIGNvbHVtbnMgaW5wdXQgdG8gYW4gYXJyYXkgZm9ybWF0LlxuICAgKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBjb2xzIGlucHV0IHByb3BlcnR5IGludG8gYSBzdGFuZGFyZGl6ZWQgc3RyaW5nIGFycmF5IGZvcm1hdC5cbiAgICogV2hlbiBjb2xzIGlzIGEgbnVtYmVyLCBpdCBjcmVhdGVzIGFuIGFycmF5IHdpdGggdGhhdCBtYW55IGVtcHR5IHN0cmluZyBlbGVtZW50cy5cbiAgICogV2hlbiBjb2xzIGlzIGFscmVhZHkgYW4gYXJyYXksIGl0IHJldHVybnMgdGhlIGFycmF5IGFzLWlzLiBUaGlzIG5vcm1hbGl6YXRpb25cbiAgICogZW5zdXJlcyBjb25zaXN0ZW50IGhhbmRsaW5nIG9mIGNvbHVtbiBkZWZpbml0aW9ucyBpbiB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIGdldCBfY29scygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvbHMgPSB0aGlzLmNvbHM7XG4gICAgaWYodHlwZW9mIGNvbHMgPT09IFwibnVtYmVyXCIpXG4gICAgICBjb2xzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBOdW1iZXIoY29scyl9LCAoKSA9PiAgYGApO1xuICAgIHJldHVybiBjb2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXR0ZXIgdGhhdCBjb252ZXJ0cyByb3dzIGlucHV0IHRvIGFuIGFycmF5IGZvcm1hdC5cbiAgICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgcm93cyBpbnB1dCBwcm9wZXJ0eSBpbnRvIGEgc3RhbmRhcmRpemVkIHN0cmluZyBhcnJheSBmb3JtYXQuXG4gICAqIFdoZW4gcm93cyBpcyBhIG51bWJlciwgaXQgY3JlYXRlcyBhbiBhcnJheSB3aXRoIHRoYXQgbWFueSBlbXB0eSBzdHJpbmcgZWxlbWVudHMuXG4gICAqIFdoZW4gcm93cyBpcyBhbHJlYWR5IGFuIGFycmF5LCBpdCByZXR1cm5zIHRoZSBhcnJheSBhcy1pcy4gVGhpcyBub3JtYWxpemF0aW9uXG4gICAqIGVuc3VyZXMgY29uc2lzdGVudCBoYW5kbGluZyBvZiByb3cgZGVmaW5pdGlvbnMgaW4gdGhlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWVbXX1cbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIGdldCBfcm93cygpOiBLZXlWYWx1ZVtdIHtcbiAgICBsZXQgcm93cyA9IHRoaXMucm93cztcbiAgICBpZih0eXBlb2Ygcm93cyA9PT0gXCJudW1iZXJcIilcbiAgICAgIHJvd3MgPSBBcnJheS5mcm9tKHtsZW5ndGg6IE51bWJlcihyb3dzKX0sICgpID0+ICh7dGl0bGU6ICcnfSkpO1xuICAgIHJldHVybiByb3dzLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IChyb3cgYXMgS2V5VmFsdWUpPy5bJ3RpdGxlJ10sXG4gICAgICAgIGNvbHM6IHRoaXMuY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IHtcbiAgICAgICAgICBpZihjaGlsZFsncm93J10gPT09IGluZGV4ICsgMSlcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgdGhhdCBydW5zIGFmdGVyIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbi5cbiAgICogQHN1bW1hcnkgQ2FsbGVkIG9uY2UsIGFmdGVyIHRoZSBmaXJzdCBuZ09uQ2hhbmdlcygpLiBUaGlzIG1ldGhvZCB0cmlnZ2VycyB0aGVcbiAgICogY29tcG9uZW50J3MgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgd2hpY2ggaW5jbHVkZXMgcHJvcGVydHkgcGFyc2luZyBhbmQgZ3JpZFxuICAgKiBzZXR1cC4gSXQgZW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIHJlbmRlcmluZy5cbiAgICpcbiAgICogQG1lbWJlck9mIExheW91dENvbXBvbmVudFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBsYXlvdXQgY29tcG9uZW50IHdpdGggcHJvY2Vzc2VkIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlcyB0aGUgYmFzZSBjb21wb25lbnQncyBpbml0aWFsaXplIG1ldGhvZCB0byBzZXQgdXAgdGhlIGdyaWQgbGF5b3V0LlxuICAgKiBUaGlzIG1ldGhvZCBwcm9jZXNzZXMgaW5wdXQgcHJvcGVydGllcywgbm9ybWFsaXplcyB0aGUgYnJlYWtwb2ludCB2YWx1ZSwgY29udmVydHNcbiAgICogcm93cyBhbmQgY29sdW1ucyB0byB0aGVpciBhcnJheSByZXByZXNlbnRhdGlvbnMsIGFuZCBtYXJrcyB0aGUgY29tcG9uZW50IGFzIGluaXRpYWxpemVkLlxuICAgKiBUaGUgaW5pdGlhbGl6YXRpb24gZW5zdXJlcyBhbGwgcHJvcGVydGllcyBhcmUgaW4gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciByZW5kZXJpbmcuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgTGF5b3V0Q29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgQiBhcyBOZ3hCYXNlQ29tcG9uZW50XG4gICAqXG4gICAqICAgTC0+PkI6IHBhcnNlUHJvcHModGhpcylcbiAgICogICBOb3RlIG92ZXIgTDogUHJvY2VzcyBjb21wb25lbnQgcHJvcGVydGllc1xuICAgKiAgIEwtPj5MOiBOb3JtYWxpemUgYnJlYWtwb2ludCB0byBsb3dlcmNhc2VcbiAgICogICBMLT4+TDogQ29udmVydCByb3dzIHRvIGFycmF5IGZvcm1hdFxuICAgKiAgIEwtPj5MOiBDb252ZXJ0IGNvbHMgdG8gYXJyYXkgZm9ybWF0XG4gICAqICAgTC0+Pkw6IFNldCBpbml0aWFsaXplZCA9IHRydWVcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqIEBtZW1iZXJPZiBMYXlvdXRDb21wb25lbnRcbiAgICovXG4gIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5wYXJzZVByb3BzKHRoaXMpO1xuICAgIHRoaXMuYnJlYWtwb2ludCA9IHRoaXMuYnJlYWtwb2ludC5zbGljZSgwLCAyKS50b0xvd2VyQ2FzZSgpIGFzIFVJTWVkaWFCcmVha1BvaW50cztcbiAgICB0aGlzLmNvbHMgPSB0aGlzLl9jb2xzO1xuICAgIHRoaXMucm93cyA9IHRoaXMuX3Jvd3M7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cbn1cbiIsIlxuQGlmKGluaXRpYWxpemVkKSB7XG4gIEBmb3IgKHJvdyBvZiByb3dzOyB0cmFjayB0cmFja0l0ZW1GbigkaW5kZXgsIHJvdyk7IGxldCByb3dJbmRleCA9ICRpbmRleCkge1xuICAgIDxkaXYgY2xhc3M9XCJkY2YtZ3JpZCBkY2YtZ3JpZC1jb2xsYXBzZSBkY2YtZ3JpZC1tYXRjaFwiPlxuICAgICAgQGlmKHJvdykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMSBkY2YtZ3JpZC10aXRsZVwiPlxuICAgICAgICAgIDxpb24tY2FyZCBjbGFzcz1cImRjZi1ncmlkLXRpdGxlXCI+XG4gICAgICAgICAgICB7e3Jvdy50aXRsZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAZm9yIChjaGlsZCBvZiByb3cuY29sczsgdHJhY2sgdHJhY2tJdGVtRm4oJGluZGV4LCBjaGlsZC5jb2wpOyBsZXQgY29sSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiKGNoaWxkLmNvbCA9PT0gY29scy5sZW5ndGggPyAnZGNmLXdpZHRoLTEtMScgOiAnZGNmLXdpZHRoLScrY2hpbGQuY29sKyctJytjb2xzLmxlbmd0aCsnQCcrYnJlYWtwb2ludClcIj5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZ3JpZC1jaGlsZCAnK2NoaWxkLmNvbCBcIj5cbiAgICAgICAgICAgICAgQGlmKGNoaWxkLnRhZyA9PT0gJ25neC1kZWNhZi1jcnVkLWZvcm0nKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkIFtjbGFzc109XCInZGNmLWhlaWdodC0xLTEgJyArIGNsYXNzTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtZGVjYWYtbW9kZWwtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwiY2hpbGQucHJvcHMubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGxpc3RlbkV2ZW50KT1cImhhbmRsZUV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxuZ3gtZGVjYWYtY29tcG9uZW50LXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICBbdGFnXT1cImNoaWxkLnRhZ1wiXG4gICAgICAgICAgICAgICAgICAobGlzdGVuRXZlbnQpPVwiaGFuZGxlRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZ2xvYmFsc109XCJ7cHJvcHM6IGNoaWxkLnByb3BzfVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG59XG4iXX0=