@po-ui/ng-templates 17.26.3 → 17.26.4

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.
@@ -289,6 +289,17 @@ export class PoPageLoginBaseComponent {
289
289
  * @default `true`
290
290
  */
291
291
  noAutocompletePassword = true;
292
+ /**
293
+ * @optional
294
+ *
295
+ * @description
296
+ *
297
+ * Indica se o status do `model` do switch de lembrar o usuário será escondido visualmente.
298
+ *
299
+ * > Por padrão será atribuído `false`.
300
+ * @default `false`
301
+ */
302
+ hideLabelStatus = false;
292
303
  /**
293
304
  * @optional
294
305
  *
@@ -987,7 +998,7 @@ export class PoPageLoginBaseComponent {
987
998
  }
988
999
  }
989
1000
  static ɵfac = function PoPageLoginBaseComponent_Factory(t) { return new (t || PoPageLoginBaseComponent)(i0.ɵɵdirectiveInject(i1.PoPageLoginService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i3.PoLanguageService)); };
990
- static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoPageLoginBaseComponent, inputs: { background: [i0.ɵɵInputFlags.None, "p-background", "background"], logo: [i0.ɵɵInputFlags.None, "p-logo", "logo"], loginPattern: [i0.ɵɵInputFlags.None, "p-login-pattern", "loginPattern"], passwordPattern: [i0.ɵɵInputFlags.None, "p-password-pattern", "passwordPattern"], secondaryLogo: [i0.ɵɵInputFlags.None, "p-secondary-logo", "secondaryLogo"], noAutocompleteLogin: [i0.ɵɵInputFlags.None, "p-no-autocomplete-login", "noAutocompleteLogin"], noAutocompletePassword: [i0.ɵɵInputFlags.None, "p-no-autocomplete-password", "noAutocompletePassword"], hidePasswordPeek: [i0.ɵɵInputFlags.None, "p-hide-password-peek", "hidePasswordPeek"], customField: [i0.ɵɵInputFlags.None, "p-custom-field", "customField"], contactEmail: [i0.ɵɵInputFlags.None, "p-contact-email", "contactEmail"], productName: [i0.ɵɵInputFlags.None, "p-product-name", "productName"], environment: [i0.ɵɵInputFlags.None, "p-environment", "environment"], exceededAttemptsWarning: [i0.ɵɵInputFlags.None, "p-exceeded-attempts-warning", "exceededAttemptsWarning"], hideRememberUser: [i0.ɵɵInputFlags.None, "p-hide-remember-user", "hideRememberUser"], literals: [i0.ɵɵInputFlags.None, "p-literals", "literals"], loading: [i0.ɵɵInputFlags.None, "p-loading", "loading"], login: [i0.ɵɵInputFlags.None, "p-login", "login"], loginErrors: [i0.ɵɵInputFlags.None, "p-login-errors", "loginErrors"], passwordErrors: [i0.ɵɵInputFlags.None, "p-password-errors", "passwordErrors"], recovery: [i0.ɵɵInputFlags.None, "p-recovery", "recovery"], registerUrl: [i0.ɵɵInputFlags.None, "p-register-url", "registerUrl"], authenticationType: [i0.ɵɵInputFlags.None, "p-authentication-type", "authenticationType"], authenticationUrl: [i0.ɵɵInputFlags.None, "p-authentication-url", "authenticationUrl"], blockedUrl: [i0.ɵɵInputFlags.None, "p-blocked-url", "blockedUrl"], support: [i0.ɵɵInputFlags.None, "p-support", "support"], languagesList: [i0.ɵɵInputFlags.None, "p-languages", "languagesList"] }, outputs: { loginChange: "p-login-change", loginSubmit: "p-login-submit", passwordChange: "p-password-change", languageChange: "p-language-change" } });
1001
+ static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoPageLoginBaseComponent, inputs: { background: [i0.ɵɵInputFlags.None, "p-background", "background"], logo: [i0.ɵɵInputFlags.None, "p-logo", "logo"], loginPattern: [i0.ɵɵInputFlags.None, "p-login-pattern", "loginPattern"], passwordPattern: [i0.ɵɵInputFlags.None, "p-password-pattern", "passwordPattern"], secondaryLogo: [i0.ɵɵInputFlags.None, "p-secondary-logo", "secondaryLogo"], noAutocompleteLogin: [i0.ɵɵInputFlags.None, "p-no-autocomplete-login", "noAutocompleteLogin"], noAutocompletePassword: [i0.ɵɵInputFlags.None, "p-no-autocomplete-password", "noAutocompletePassword"], hideLabelStatus: [i0.ɵɵInputFlags.HasDecoratorInputTransform, "p-hide-label-status", "hideLabelStatus", convertToBoolean], hidePasswordPeek: [i0.ɵɵInputFlags.None, "p-hide-password-peek", "hidePasswordPeek"], customField: [i0.ɵɵInputFlags.None, "p-custom-field", "customField"], contactEmail: [i0.ɵɵInputFlags.None, "p-contact-email", "contactEmail"], productName: [i0.ɵɵInputFlags.None, "p-product-name", "productName"], environment: [i0.ɵɵInputFlags.None, "p-environment", "environment"], exceededAttemptsWarning: [i0.ɵɵInputFlags.None, "p-exceeded-attempts-warning", "exceededAttemptsWarning"], hideRememberUser: [i0.ɵɵInputFlags.None, "p-hide-remember-user", "hideRememberUser"], literals: [i0.ɵɵInputFlags.None, "p-literals", "literals"], loading: [i0.ɵɵInputFlags.None, "p-loading", "loading"], login: [i0.ɵɵInputFlags.None, "p-login", "login"], loginErrors: [i0.ɵɵInputFlags.None, "p-login-errors", "loginErrors"], passwordErrors: [i0.ɵɵInputFlags.None, "p-password-errors", "passwordErrors"], recovery: [i0.ɵɵInputFlags.None, "p-recovery", "recovery"], registerUrl: [i0.ɵɵInputFlags.None, "p-register-url", "registerUrl"], authenticationType: [i0.ɵɵInputFlags.None, "p-authentication-type", "authenticationType"], authenticationUrl: [i0.ɵɵInputFlags.None, "p-authentication-url", "authenticationUrl"], blockedUrl: [i0.ɵɵInputFlags.None, "p-blocked-url", "blockedUrl"], support: [i0.ɵɵInputFlags.None, "p-support", "support"], languagesList: [i0.ɵɵInputFlags.None, "p-languages", "languagesList"] }, outputs: { loginChange: "p-login-change", loginSubmit: "p-login-submit", passwordChange: "p-password-change", languageChange: "p-language-change" }, features: [i0.ɵɵInputTransformsFeature] });
991
1002
  }
992
1003
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageLoginBaseComponent, [{
993
1004
  type: Directive
@@ -1024,6 +1035,9 @@ export class PoPageLoginBaseComponent {
1024
1035
  }], noAutocompletePassword: [{
1025
1036
  type: Input,
1026
1037
  args: ['p-no-autocomplete-password']
1038
+ }], hideLabelStatus: [{
1039
+ type: Input,
1040
+ args: [{ alias: 'p-hide-label-status', transform: convertToBoolean }]
1027
1041
  }], hidePasswordPeek: [{
1028
1042
  type: Input,
1029
1043
  args: ['p-hide-password-peek']
@@ -1082,4 +1096,4 @@ export class PoPageLoginBaseComponent {
1082
1096
  type: Input,
1083
1097
  args: ['p-languages']
1084
1098
  }] }); })();
1085
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1sb2dpbi1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1sb2dpbi9wby1wYWdlLWxvZ2luLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkgsT0FBTyxFQUFxQixlQUFlLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUd6RyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7QUFNL0YsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUc7SUFDeEMsRUFBRSxFQUF1QjtRQUN2QixLQUFLLEVBQUUsU0FBUztRQUNoQixpQkFBaUIsRUFBRSxlQUFlO1FBQ2xDLFNBQVMsRUFBRTt1REFDd0M7UUFDbkQsZ0JBQWdCLEVBQUUsb0JBQW9CO1FBQ3RDLG9CQUFvQixFQUFFLGtCQUFrQjtRQUN4QyxtQkFBbUIsRUFBRSxzQkFBc0I7UUFDM0MsdUJBQXVCLEVBQUUsZUFBZTtRQUN4QyxzQkFBc0IsRUFBRSxzQkFBc0I7UUFDOUMsWUFBWSxFQUFFLGlCQUFpQjtRQUMvQixnQkFBZ0IsRUFBRSxxREFBcUQ7UUFDdkUsV0FBVyxFQUFFLE9BQU87UUFDcEIsY0FBYyxFQUFFLFlBQVk7UUFDNUIsY0FBYyxFQUFFLHVCQUF1QjtRQUN2QyxhQUFhLEVBQUUsRUFBRTtRQUNqQixXQUFXLEVBQUUsY0FBYztR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QUMsU0FBUztZQW1CYSxXQUFXO2tCQUF2QyxLQUFLO21CQUFDLGdCQUFnQjtZQWVTLGNBQWM7a0JBQTdDLEtBQUs7bUJBQUMsbUJBQW1CO1lBNkJELFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQXNCVSxXQUFXO2tCQUF2QyxLQUFLO21CQUFDLGdCQUFnQjtZQXVDYSxrQkFBa0I7a0JBQXJELEtBQUs7bUJBQUMsdUJBQXVCO1lBMkhLLGlCQUFpQjtrQkFBbkQsS0FBSzttQkFBQyxzQkFBc0I7WUFnQkQsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBMEJFLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXlCUSxhQUFhO2tCQUF0QyxLQUFLO21CQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4sIGNvbnZlcnRUb0ludCwgZ2V0U2hvcnRCcm93c2VyTGFuZ3VhZ2UsIGlzRXh0ZXJuYWxMaW5rLCBpc1R5cGVvZiB9IGZyb20gJy4vLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlLCBwb0xvY2FsZURlZmF1bHQsIFBvTGFuZ3VhZ2UsIHBvTGFuZ3VhZ2VEZWZhdWx0IH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQgeyBQb1BhZ2VMb2dpbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWxvZ2luLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VMb2dpbkF1dGhlbnRpY2F0aW9uVHlwZSB9IGZyb20gJy4vZW51bXMvcG8tcGFnZS1sb2dpbi1hdXRoZW50aWNhdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgUG9QYWdlTG9naW5DdXN0b21GaWVsZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWxvZ2luLWN1c3RvbS1maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlTG9naW5MaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWxvZ2luLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VMb2dpblJlY292ZXJ5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtbG9naW4tcmVjb3ZlcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUxvZ2luU2VydmljZSB9IGZyb20gJy4vcG8tcGFnZS1sb2dpbi5zZXJ2aWNlJztcblxuY29uc3QgcG9QYWdlTG9naW5Db250ZW50TWF4TGVuZ3RoID0gNDA7XG5cbmV4cG9ydCBjb25zdCBwb1BhZ2VMb2dpbkxpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IDxQb1BhZ2VMb2dpbkxpdGVyYWxzPntcbiAgICB0aXRsZTogJ1dlbGNvbWUnLFxuICAgIGxvZ2luRXJyb3JQYXR0ZXJuOiAnSW52YWxpZCBMb2dpbicsXG4gICAgbG9naW5IaW50OiBgWW91ciBsb2dpbiB1c2VyIHdhcyBnaXZlbiB0byB5b3UgYXQgeW91ciBmaXJzdCBkYXkuXG4gICAgSWYgeW91IGRvbid0IGhhdmUgdGhpcyBpbmZvcm1hdGlvbiBjb250YWN0IHN1cHBvcnRgLFxuICAgIGxvZ2luUGxhY2Vob2xkZXI6ICdJbnNlcnQgeW91ciBlLW1haWwnLFxuICAgIHBhc3N3b3JkRXJyb3JQYXR0ZXJuOiAnSW52YWxpZCBQYXNzd29yZCcsXG4gICAgcGFzc3dvcmRQbGFjZWhvbGRlcjogJ0luc2VydCB5b3VyIHBhc3N3b3JkJyxcbiAgICBjdXN0b21GaWVsZEVycm9yUGF0dGVybjogJ0ludmFsaWQgdmFsdWUnLFxuICAgIGN1c3RvbUZpZWxkUGxhY2Vob2xkZXI6ICdQbGVhc2UgZW50ZXIgYSB2YWx1ZScsXG4gICAgcmVtZW1iZXJVc2VyOiAnQXV0b21hdGljIGxvZ2luJyxcbiAgICByZW1lbWJlclVzZXJIaW50OiAnWW91IGNhbiBkaXNhYmxlIHRoaXMgb3B0aW9uIGluIHN5c3RlbSBjb25maWd1cmF0aW9uJyxcbiAgICBzdWJtaXRMYWJlbDogJ0VudGVyJyxcbiAgICBzdWJtaXR0ZWRMYWJlbDogJ0xvYWRpbmcuLi4nLFxuICAgIGZvcmdvdFBhc3N3b3JkOiAnRm9yZ290IHlvdXIgUGFzc3dvcmQ/JyxcbiAgICBoaWdobGlnaHRJbmZvOiAnJyxcbiAgICByZWdpc3RlclVybDogJ05ldyByZWdpc3RlcicsXG4gICAgdGl0bGVQb3BvdmVyOiAnT29wcyEnLFxuICAgIGZvcmdvdFlvdXJQYXNzd29yZDogJ0ZvcmdvdCB5b3VyIHBhc3N3b3JkPycsXG4gICAgaWZZb3VUcnlIYXJkZXI6ICdJZiB5b3UgdHJ5ICcsXG4gICAgYXR0ZW1wdHM6ICd7MH0gbW9yZSB0aW1lKHMpICcsXG4gICAgeW91clVzZXJXaWxsQmVCbG9ja2VkOlxuICAgICAgJ3dpdGhvdXQgc3VjY2VzcyB5b3VyIHVzZXIgd2lsbCBiZSBibG9ja2VkIGFuZCB5b3Ugd2lsbCBiZSBsZWZ0IDI0IGhvdXJzIHdpdGhvdXQgYmVpbmcgYWJsZSB0byBhY2Nlc3MgOignLFxuICAgIGNyZWF0ZUFOZXdQYXNzd29yZE5vdzogJ0JldHRlciBjcmVhdGUgYSBuZXcgcGFzc3dvcmQgbm93ISBZb3Ugd2lsbCBiZSBhYmxlIHRvIGxvZyBpbnRvIHRoZSBzeXN0ZW0gcmlnaHQgYXdheS4nLFxuICAgIGlGb3Jnb3RNeVBhc3N3b3JkOiAnSSBmb3Jnb3QgbXkgcGFzc3dvcmQnLFxuICAgIHdlbGNvbWU6ICdXZWxjb21lJyxcbiAgICBzdXBwb3J0OiAnU3VwcG9ydCdcbiAgfSxcbiAgZXM6IDxQb1BhZ2VMb2dpbkxpdGVyYWxzPntcbiAgICB0aXRsZTogJ0JpZW52ZW5pZG8nLFxuICAgIGxvZ2luRXJyb3JQYXR0ZXJuOiAnTG9naW4gaW52w6FsaWRvJyxcbiAgICBsb2dpbkhpbnQ6IGBTdSB1c3VhcmlvIGhhIHNpZG8gZW50cmVnYWRvIHBhcmEgdXN0ZWQgZW4gc3UgcHJpbWVyIGTDrWEuXG4gICAgU2kgbm8gdGllbmUgZXN0YSBpbmZvcm1hY2nDs24sIHDDs25nYXNlIGVuIGNvbnRhY3RvIGNvbiBlbCBzb3BvcnRlIHTDqWNuaWNvYCxcbiAgICBsb2dpblBsYWNlaG9sZGVyOiAnSW5zZXJ0ZSBzdSBlLW1haWwnLFxuICAgIHBhc3N3b3JkRXJyb3JQYXR0ZXJuOiAnQ29udHJhc2XDsWEgaW52w6FsaWRhJyxcbiAgICBwYXNzd29yZFBsYWNlaG9sZGVyOiAnSW5zZXJ0ZSBzdSBjb250cmFzZcOxYScsXG4gICAgY3VzdG9tRmllbGRFcnJvclBhdHRlcm46ICdWYWxvciBubyB2w6FsaWRvLicsXG4gICAgY3VzdG9tRmllbGRQbGFjZWhvbGRlcjogJ1BvciBmYXZvciBpbnRyb2R1emNhIHVuIHZhbG9yJyxcbiAgICByZW1lbWJlclVzZXI6ICdJbmljaW8gZGUgc2VzacOzbiBhdXRvbcOhdGljYW1lbnRlJyxcbiAgICByZW1lbWJlclVzZXJIaW50OiAnUHVlZGUgZGVzaGFiaWxpdGFyIGVzdGEgb3BjacOzbiBlbiBlbCBtZW7DuiBkZWwgc2lzdGVtYS4nLFxuICAgIHN1Ym1pdExhYmVsOiAnRW50cmFyJyxcbiAgICBzdWJtaXR0ZWRMYWJlbDogJ0NhcmdhbmRvLi4uJyxcbiAgICBmb3Jnb3RQYXNzd29yZDogJ09sdmlkYXN0ZSB0dSBjb250cmFzZcOxYT8nLFxuICAgIGhpZ2hsaWdodEluZm86ICcnLFxuICAgIHJlZ2lzdGVyVXJsOiAnTnVldm8gcmVnaXN0cm8nLFxuICAgIHRpdGxlUG9wb3ZlcjogJ09wYSEnLFxuICAgIGZvcmdvdFlvdXJQYXNzd29yZDogJ09sdmlkYXN0ZSB0dSBjb250cmFzZcOxYT8nLFxuICAgIGlmWW91VHJ5SGFyZGVyOiAnU2kgaW50ZW50YSBtw6FzICcsXG4gICAgYXR0ZW1wdHM6ICd7MH0gdmV6L3ZlY2VzICcsXG4gICAgeW91clVzZXJXaWxsQmVCbG9ja2VkOiAnc2luIMOpeGl0byBzdSB1c3VhcmlvIHNlcmEgYmxvcXVlYWRvIHkgdXN0ZWQgdsOhcyBwZXJtYW5lY2VyIDI0IGhvcmFzIHNpbiBwb2RlciBhY2NlZGVyIGEgOignLFxuICAgIGNyZWF0ZUFOZXdQYXNzd29yZE5vdzpcbiAgICAgICfCoU1lam9yIGNyZWFyIHVuYSBudWV2YSBjb250cmFzZcOxYSBhaG9yYSEgVXN0ZWQgcG9kcsOhIGVudHJhciBlbiBlbCBzaXN0ZW1hIGlubWVkaWF0YW1lbnRlIGRlc3B1w6lzLicsXG4gICAgaUZvcmdvdE15UGFzc3dvcmQ6ICdPbHZpZGUgbWkgY29udHJhc2XDsWEnLFxuICAgIHdlbGNvbWU6ICdCaWVudmVuaWRvJyxcbiAgICBzdXBwb3J0OiAnU29wb3J0ZSdcbiAgfSxcbiAgcHQ6IDxQb1BhZ2VMb2dpbkxpdGVyYWxzPntcbiAgICB0aXRsZTogJ0JlbS12aW5kbycsXG4gICAgbG9naW5FcnJvclBhdHRlcm46ICdMb2dpbiBpbnbDoWxpZG8nLFxuICAgIGxvZ2luSGludDogYFNldSB1c3XDoXJpbyBmb2kgZW50cmVndWUgYSB2b2PDqiBubyBzZXUgcHJpbWVpcm8gZGlhLlxuICAgIENhc28gbsOjbyB0ZW5oYSBtYWlzIGVzc2EgaW5mb3JtYcOnw6NvIGNvbnRhY3RlIG8gc3Vwb3J0ZWAsXG4gICAgbG9naW5QbGFjZWhvbGRlcjogJ0luc2lyYSBzZXUgZS1tYWlsJyxcbiAgICBwYXNzd29yZEVycm9yUGF0dGVybjogJ1NlbmhhIGludsOhbGlkYScsXG4gICAgcGFzc3dvcmRQbGFjZWhvbGRlcjogJ0luc2lyYSBzdWEgc2VuaGEnLFxuICAgIGN1c3RvbUZpZWxkRXJyb3JQYXR0ZXJuOiAnVmFsb3IgaW52w6FsaWRvLicsXG4gICAgY3VzdG9tRmllbGRQbGFjZWhvbGRlcjogJ1BvciBmYXZvciBpbnNpcmEgdW0gdmFsb3InLFxuICAgIHJlbWVtYmVyVXNlcjogJ0xvZ2FyIGF1dG9tYXRpY2FtZW50ZScsXG4gICAgcmVtZW1iZXJVc2VySGludDogJ1ZvY8OqIHBvZGUgZGVzYWJpbGl0YXIgZXNzYSBvcMOnw6NvIG5vIG1lbnUgZG8gc2lzdGVtYScsXG4gICAgc3VibWl0TGFiZWw6ICdFbnRyYXInLFxuICAgIHN1Ym1pdHRlZExhYmVsOiAnQ2FycmVnYW5kby4uLicsXG4gICAgZm9yZ290UGFzc3dvcmQ6ICdFc3F1ZWNldSBzdWEgc2VuaGE/JyxcbiAgICBoaWdobGlnaHRJbmZvOiAnJyxcbiAgICByZWdpc3RlclVybDogJ05vdm8gcmVnaXN0cm8nLFxuICAgIHRpdGxlUG9wb3ZlcjogJ09wYSEnLFxuICAgIGZvcmdvdFlvdXJQYXNzd29yZDogJ0VzcXVlY2V1IHN1YSBzZW5oYT8nLFxuICAgIGlmWW91VHJ5SGFyZGVyOiAnU2UgdGVudGFyIG1haXMgJyxcbiAgICBhdHRlbXB0czogJ3swfSB2ZXooZXMpICcsXG4gICAgeW91clVzZXJXaWxsQmVCbG9ja2VkOiAnc2VtIHN1Y2Vzc28gc2V1IHVzdcOhcmlvIHNlcsOhIGJsb3F1ZWFkbyBlIHZvY8OqIGZpY2EgMjQgaG9yYXMgc2VtIHBvZGVyIGFjZXNzYXIgOignLFxuICAgIGNyZWF0ZUFOZXdQYXNzd29yZE5vdzogJ01lbGhvciBjcmlhciB1bWEgc2VuaGEgbm92YSBhZ29yYSEgVm9jw6ogdmFpIHBvZGVyIGVudHJhciBubyBzaXN0ZW1hIGxvZ28gZW0gc2VndWlkYS4nLFxuICAgIGlGb3Jnb3RNeVBhc3N3b3JkOiAnRXNxdWVjaSBtaW5oYSBzZW5oYScsXG4gICAgd2VsY29tZTogJ0JvYXMtdmluZGFzJyxcbiAgICBzdXBwb3J0OiAnU3Vwb3J0ZSdcbiAgfSxcbiAgcnU6IDxQb1BhZ2VMb2dpbkxpdGVyYWxzPntcbiAgICB0aXRsZTogJ9CU0L7QsdGA0L4g0L/QvtC20LDQu9C+0LLQsNGC0YwhJyxcbiAgICBsb2dpbkVycm9yUGF0dGVybjogJ9Cd0LXQstC10YDQvdGL0Lkg0LvQvtCz0LjQvScsXG4gICAgbG9naW5IaW50OiBg0JLQsNGIINC70L7Qs9C40L0g0LHRi9C7INC/0YDQtdC00L7RgdGC0LDQstC70LXQvSDQstCw0Lwg0LIg0L/QtdGA0LLRi9C5INC00LXQvdGMLlxuICAgINCV0YHQu9C4INGDINCy0LDRgSDQvdC10YIg0Y3RgtC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40LgsINC+0LHRgNCw0YLQuNGC0LXRgdGMINCyINGB0LvRg9C20LHRgyDQv9C+0LTQtNC10YDQttC60LhgLFxuICAgIGxvZ2luUGxhY2Vob2xkZXI6ICfQktGB0YLQsNCy0YzRgtC1INGB0LLQvtC5INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLJyxcbiAgICBwYXNzd29yZEVycm9yUGF0dGVybjogJ9Cd0LXQstC10YDQvdGL0Lkg0L/QsNGA0L7Qu9GMJyxcbiAgICBwYXNzd29yZFBsYWNlaG9sZGVyOiAn0JLQstC10LTQuNGC0LUg0YHQstC+0Lkg0L/QsNGA0L7Qu9GMJyxcbiAgICBjdXN0b21GaWVsZEVycm9yUGF0dGVybjogJ9Cd0LXQstC10YDQvdC+0LUg0LfQvdCw0YfQtdC90LjQtS4nLFxuICAgIGN1c3RvbUZpZWxkUGxhY2Vob2xkZXI6ICfQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LfQvdCw0YfQtdC90LjQtScsXG4gICAgcmVtZW1iZXJVc2VyOiAn0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LjQuSDQstGF0L7QtCcsXG4gICAgcmVtZW1iZXJVc2VySGludDogJ9CS0Ysg0LzQvtC20LXRgtC1INC+0YLQutC70Y7Rh9C40YLRjCDRjdGC0YMg0L7Qv9GG0LjRjiDQsiDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0YHQuNGB0YLQtdC80YsnLFxuICAgIHN1Ym1pdExhYmVsOiAn0JLQvtC50YLQuCcsXG4gICAgc3VibWl0dGVkTGFiZWw6ICcz0LDQs9GA0YPQt9C60LAuLi4nLFxuICAgIGZvcmdvdFBhc3N3b3JkOiAn0JfQsNCx0YvQu9C4INC/0LDRgNC+0LvRjD8nLFxuICAgIGhpZ2hsaWdodEluZm86ICcnLFxuICAgIHJlZ2lzdGVyVXJsOiAn0J3QvtCy0YvQuSDRgNC10LPQuNGB0YLRgCcsXG4gICAgdGl0bGVQb3BvdmVyOiAn0J7QuSEnLFxuICAgIGZvcmdvdFlvdXJQYXNzd29yZDogJ9CX0LDQsdGL0LvQuCDQv9Cw0YDQvtC70Yw/JyxcbiAgICBpZllvdVRyeUhhcmRlcjogJ9CV0YHQu9C4INCy0Ysg0LHQtdC30YPRgdC/0LXRiNC90L4g0L/QvtC/0YvRgtCw0LXRgtC10YHRjCDQstC+0LnRgtC4INC10YnQtSAnLFxuICAgIGF0dGVtcHRzOiAnezB9INGA0LDQtyjQsCkgJyxcbiAgICB5b3VyVXNlcldpbGxCZUJsb2NrZWQ6ICfQktCw0Ygg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINCx0YPQtNC10YIg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC9LCDQuCDQktGLINC+0YHRgtCw0L3QtdGC0LXRgdGMINC90LAgMjQg0YfQsNGB0LAg0LHQtdC3INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0LTQvtGB0YLRg9C/0LAgOignLFxuICAgIGNyZWF0ZUFOZXdQYXNzd29yZE5vdzogJ9Cb0YPRh9GI0LUg0YHQvtC30LTQsNC50YLQtSDQvdC+0LLRi9C5INC/0LDRgNC+0LvRjCDRgdC10LnRh9Cw0YEhwqDQktGLINGB0LzQvtC20LXRgtC1INGB0YDQsNC30YMg0LLQvtC50YLQuCDQsiDRgdC40YHRgtC10LzRgy4nLFxuICAgIGlGb3Jnb3RNeVBhc3N3b3JkOiAn0K8g0LfQsNCx0YvQuyDRgdCy0L7QuSDQv9Cw0YDQvtC70YwnLFxuICAgIHdlbGNvbWU6ICfQtNC+0LHRgNC+INC/0L7QttCw0LvQvtCy0LDRgtGMJyxcbiAgICBzdXBwb3J0OiAn0J/QvtC00LTQtdGA0LbQutCwJ1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9QYWdlTG9naW5MaXRlcmFsSW4gPSB7XG4gIGVuOiAnaW4nLFxuICBlczogJ2VuJyxcbiAgcHQ6ICdlbScsXG4gIHJ1OiAn0LInXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBgcG8tcGFnZS1sb2dpbmAgw6kgdXRpbGl6YWRvIGNvbW8gdGVtcGxhdGUgcGFyYSB0ZWxhIGRlIGxvZ2luLlxuICogQ29tIGVsZSDDqSBwb3Nzw612ZWwgZGVmaW5pcm1vcyB2YWxvcmVzIHBhcmEgdXN1w6FyaW8sIHNlbmhhIGUgZGVmaW5pciBhw6fDtWVzIHBhcmEgcmVjdXBlcmHDp8OjbyBkZSBzZW5oYSBlIGdyYXZhw6fDo28gZGUgZGFkb3MgZG8gdXN1w6FyaW8uXG4gKiBUYW1iw6ltIMOpIHBvc3PDrXZlbCBpbnNlcmlyIHVtYSBpbWFnZW0gZW0gY29uanVudG8gY29tIHVtIHRleHRvIGRlIGRlc3RhcXVlLlxuICpcbiAqXG4gKiBBIHByb3ByaWVkYWRlIGBwLWF1dGhlbnRpY2F0aW9uLXVybGAgYXV0b21hdGl6YSBhIHJvdGluYSBkbyBjb21wb25lbnRlIGUgc2ltcGxpZmljYSBvIHByb2Nlc3NvIHBhcmEgYXV0ZW50aWNhw6fDo28gZG8gdXN1w6FyaW8sIGJhc3RhbmRvXG4gKiBkZWZpbmlyIHVtYSB1cmwgcGFyYSByZXF1aXNpw6fDo28gZGEgYXV0ZW50aWNhw6fDo28uIEEgZmxleGliaWxpZGFkZSBlIHByYXRpY2lkYWRlIHBvZGVtIGNoZWdhciBhIHVtIG7DrXZlbCBlbSBxdWUgbyBkZXNlbnZvbHZpbWVudG9cbiAqIGRhIGFwbGljYcOnw6NvIG5vICpjbGllbnQgc2lkZSogw6kgZGVzcHJvdmlkYSBkZSBxdWFscXVlciBjw7NkaWdvLWZvbnRlIHJlbGFjaW9uYWRvIMOgIHJvdGluYSBkZSBsb2dpbiBkZSB1c3XDoXJpby5cbiAqIFNldSBkZXRhbGhhbWVudG8gcGFyYSB1c28gcG9kZSBzZXIgdmlzdG8gbG9nbyBhYmFpeG8gZW0gKnByb3ByaWVkYWRlcyouXG4gKiBDYXNvIGp1bGd1ZSBuZWNlc3PDoXJpbywgcG9kZS1zZSB0YW1iw6ltIGRlZmluaXIgbWFudWFsbWVudGUgYSByb3RpbmEgZG8gY29tcG9uZW50ZS5cbiAqXG4gKlxuICogUGFyYSBxdWUgYXMgaW1hZ2VucyBzZWphbSBleGliaWRhcyBjb3JyZXRhbWVudGUsIMOpIG5lY2Vzc8OhcmlvIGluY2x1aXIgbyBjYW1pbmhvIGRlbGFzIGFvIHByb2pldG8uIFBhcmEgaXNzbywgZWRpdGVcbiAqIG8gKmFzc2V0cyogbm8gYXJxdWl2byAqKmFuZ3VsYXIuanNvbioqIGRhIGFwbGljYcOnw6NvIG5hIHNlZ3VpbnRlIG9yZGVtOlxuICogYGBgXG4gKiAgIFwiYXNzZXRzXCI6IFtcbiAqICAgICBcInNyYy9hc3NldHNcIixcbiAqICAgICBcInNyYy9mYXZpY29uLmljb1wiLFxuICogICAgIHtcbiAqICAgICAgIFwiZ2xvYlwiOiBcIioqXFwvKlwiLFxuICogICAgICAgXCJpbnB1dFwiOiBcIm5vZGVfbW9kdWxlcy9AcG8tdWkvc3R5bGUvaW1hZ2VzXCIsXG4gKiAgICAgICBcIm91dHB1dFwiOiBcImFzc2V0cy9pbWFnZXNcIlxuICogICAgIH1cbiAqICAgXVxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvUGFnZUxvZ2luQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBPIGBwLWJhY2tncm91bmRgIHBlcm1pdGUgaW5zZXJpciB1bWEgaW1hZ2VtIGRlIGRlc3RhcXVlIGFvIGxhZG8gZGlyZWl0byBkbyBmb3JtdWzDoXJpbyBkZSBsb2dpbiwgY2FzbyBhIHByb3ByaWVkYWRlXG4gICAqIG7Do28gc2VqYSBwcmVlbmNoaWRhIG8gZm9ybXVsw6FyaW8gc2Vyw6EgY2VudHJhbGl6YWRvIG5vIGVzcGHDp28gZGlzcG9uw612ZWwuXG4gICAqXG4gICAqIEEgZm9udGUgZGEgaW1hZ2VtIHBvZGUgc2VyIGRlIHVtIGNhbWluaG8gbG9jYWwgb3UgdW1hIHVybCBkZSB1bSBzZXJ2aWRvciBleHRlcm5vLlxuICAgKlxuICAgKiBBbMOpbSBkYSBpbWFnZW0sIMOpIHBvc3PDrXZlbCBhZGljaW9uYXIgdW0gdGV4dG8gaW5mb3JtYXRpdm8gcG9yIGNpbWEgZGEgaW1hZ2VtIGRhIGltYWdlbSBkZSBkZXN0YXF1ZSwgcGFyYSBpc3NvIGluZm9ybWVcbiAgICogdW0gdmFsb3IgcGFyYSBhIGxpdGVyYWwgYGhpZ2hsaWdodEluZm9gLlxuICAgKlxuICAgKiA+IFZlamEgbWFpcyBzb2JyZSBhcyBsaXRlcmFpcyBuYSBwcm9wcmllZGFkZSBgcC1saXRlcmFsc2AuXG4gICAqXG4gICAqIEV4ZW1wbG9zIGRlIHZhbG9yZXMgdsOhbGlkb3M6XG4gICAqIC0gKipsb2NhbCoqOiBgLi9hc3NldHMvaW1hZ2VzL2xvZ2luLWJhY2tncm91bmQucG5nYFxuICAgKiAtICoqdXJsIGV4dGVybmEqKjogYGh0dHBzOi8vcG8tdWkuaW8vYXNzZXRzL2ltYWdlcy9sb2dpbi1iYWNrZ3JvdW5kLnBuZ2BcbiAgICpcbiAgICogPiBFc3NhIHByb3ByaWVkYWRlIMOpIGlnbm9yYWRhIHBhcmEgYXBsaWNhw6fDtWVzIG1vYmlsZS5cbiAgICovXG4gIEBJbnB1dCgncC1iYWNrZ3JvdW5kJykgYmFja2dyb3VuZD86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDYW1pbmhvIHBhcmEgYSBsb2dvbWFyY2EgbG9jYWxpemFkYSBuYSBwYXJ0ZSBzdXBlcmlvci5cbiAgICpcbiAgICogPiBDYXNvIHNlamEgaW5kZWZpbmlkYSBvIGVzcGHDp28gc2UgbWFudMOpbSBwcmVzZXJ2YWRvIHBvcsOpbSB2YXppby5cbiAgICovXG4gIEBJbnB1dCgncC1sb2dvJykgbG9nbz86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeHByZXNzw6NvIHJlZ3VsYXIgcGFyYSB2YWxpZGFyIG8gY2FtcG8gZGUgbG9naW4sIGNhc28gYSBleHByZXNzw6NvIG7Do28gc2VqYSBhdGVudGlkYSwgYSBsaXRlcmFsIGBsb2dpbkVycm9yUGF0dGVybmBcbiAgICogc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogRXhlbXBsb3MgZGUgdmFsb3JlcyB2w6FsaWRvczpcbiAgICogLSBlbWFpbDogYFtleHByZXNzYW8tcmVndWxhci1lbWFpbF1gXG4gICAqIC0gY3BmOiBgW2V4cHJlc3Nhby1yZWd1bGFyLWNwZl1gXG4gICAqXG4gICAqID4gVmVqYSBhIHByb3ByaWVkYWRlIGBwLWxpdGVyYWxzYCBwYXJhIGN1c3RvbWl6YXIgYSBsaXRlcmFsIGBsb2dpbkVycm9yUGF0dGVybmAuXG4gICAqL1xuICBASW5wdXQoJ3AtbG9naW4tcGF0dGVybicpIGxvZ2luUGF0dGVybj86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeHByZXNzw6NvIHJlZ3VsYXIgcGFyYSB2YWxpZGFyIG8gY2FtcG8gZGUgcGFzc3dvcmQsIGNhc28gYSBleHByZXNzw6NvIG7Do28gc2VqYSBhdGVudGlkYSwgYSBsaXRlcmFsIGBwYXNzd29yZEVycm9yUGF0dGVybmBcbiAgICogc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogRXhlbXBsb3MgZGUgdmFsb3JlcyB2w6FsaWRvczpcbiAgICogLSBBcGVuYXMgbsO6bWVyb3M6IGBcXGQ/YFxuICAgKiAtIExldHJhcyBtw61udXNjdWxhczogYFxcej9gXG4gICAqXG4gICAqID4gVmVqYSBhIHByb3ByaWVkYWRlIGBwLWxpdGVyYWxzYCBwYXJhIGN1c3RvbWl6YXIgYSBsaXRlcmFsIGBwYXNzd29yZEVycm9yUGF0dGVybmAuXG4gICAqL1xuICBASW5wdXQoJ3AtcGFzc3dvcmQtcGF0dGVybicpIHBhc3N3b3JkUGF0dGVybj86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDYW1pbmhvIHBhcmEgYSBsb2dvbWFyY2EgbG9jYWxpemFkYSBubyByb2RhcMOpLlxuICAgKi9cbiAgQElucHV0KCdwLXNlY29uZGFyeS1sb2dvJykgc2Vjb25kYXJ5TG9nbz86IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZGlzcGFyYWRvIHF1YW5kbyBvIHVzdcOhcmlvIGFsdGVyYXIgbyBpbnB1dCBkbyBjYW1wbyBsb2dpbi5cbiAgICpcbiAgICogRXNzZSBldmVudG8gcmVjZWJlcsOhIGNvbW8gcGFyw6JtZXRybyB1bWEgdmFyacOhdmVsIGRvIHRpcG8gYHN0cmluZ2AgY29tIG8gdGV4dG8gaW5mb3JtYWRvIG5vIGNhbXBvLlxuICAgKlxuICAgKiA+IEVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgaWdub3JhZGEgc2UgZm9yIGRlZmluaWRvIHZhbG9yIHBhcmEgYSBwcm9wcmllZGFkZSBgcC1hdXRoZW50aWNhdGlvbi11cmxgLlxuICAgKi9cbiAgQE91dHB1dCgncC1sb2dpbi1jaGFuZ2UnKSBsb2dpbkNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRXZlbnRvIGRpc3BhcmFkbyBhbyBzdWJtZXRlciBvIGZvcm11bMOhcmlvIGRlIGxvZ2luIChhcGVydGFuZG8gYEVudGVyYCBkZW50cm8gZG9zIGNhbXBvcyBvdSBwcmVzc2lvbmFuZG8gbyBib3TDo28gZGUgY29uZmlybWHDp8OjbykuXG4gICAqXG4gICAqIEVzc2UgZXZlbnRvIHJlY2ViZXLDoSBjb21vIHBhcsOibWV0cm8gdW0gb2JqZXRvIGRvIHRpcG8gYFBvUGFnZUxvZ2luYCBjb20gb3MgZGFkb3MgaW5mb3JtYWRvcyBubyBmb3JtdWzDoXJpby5cbiAgICpcbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIHNlcsOhIGlnbm9yYWRhIHNlIGZvciBkZWZpbmlkbyB2YWxvciBwYXJhIGEgcHJvcHJpZWRhZGUgYHAtdXJsLXJlY292ZXJ5YC5cbiAgICpcbiAgICogPiBQYXJhIG1haXMgZGV0YWxoZXMgY29uc3VsdGUgYSBkb2N1bWVudGHDp8OjbyBzb2JyZSBhIGludGVyZmFjZSBgUG9QYWdlTG9naW5gIG1haXMgYWJhaXhvLlxuICAgKi9cbiAgQE91dHB1dCgncC1sb2dpbi1zdWJtaXQnKSBsb2dpblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8UG9QYWdlTG9naW4+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGRpc3BhcmFkbyBxdWFuZG8gbyB1c3XDoXJpbyBhbHRlcmFyIG8gaW5wdXQgZG8gY2FtcG8gcGFzc3dvcmQuXG4gICAqXG4gICAqIEVzc2UgZXZlbnRvIHJlY2ViZXLDoSBjb21vIHBhcsOibWV0cm8gdW1hIHZhcmnDoXZlbCBkbyB0aXBvIGBzdHJpbmdgIGNvbSBvIHRleHRvIGluZm9ybWFkbyBubyBjYW1wby5cbiAgICpcbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIHNlcsOhIGlnbm9yYWRhIHNlIGZvciBkZWZpbmlkbyB2YWxvciBwYXJhIGEgcHJvcHJpZWRhZGUgYHAtYXV0aGVudGljYXRpb24tdXJsYC5cbiAgICovXG4gIEBPdXRwdXQoJ3AtcGFzc3dvcmQtY2hhbmdlJykgcGFzc3dvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGRpc3BhcmFkbyBxdWFuZG8gbyB1c3XDoXJpbyBhbHRlcmFyIG8gaWRpb21hIGRhIHDDoWdpbmEuXG4gICAqXG4gICAqIEVzc2UgZXZlbnRvIHJlY2ViZXLDoSBjb21vIHBhcsOibWV0cm8gdW0gb2JqZXRvIGRvIHRpcG8gYFBvTGFuZ3VhZ2VgIGNvbSBhIGxpbmd1YWdlbSBzZWxlY2lvbmFkYS5cbiAgICpcbiAgICovXG4gIEBPdXRwdXQoJ3AtbGFuZ3VhZ2UtY2hhbmdlJykgbGFuZ3VhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQb0xhbmd1YWdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9MYW5ndWFnZT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBwcm9wcmllZGFkZSBuYXRpdmEgYGF1dG9jb21wbGV0ZWAgZG8gY2FtcG8gY29tbyBgb2ZmYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoJ3Atbm8tYXV0b2NvbXBsZXRlLWxvZ2luJykgbm9BdXRvY29tcGxldGVMb2dpbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgcHJvcHJpZWRhZGUgbmF0aXZhIGBhdXRvY29tcGxldGVgIGRvIGNhbXBvIGNvbW8gYG9mZmAuXG4gICAqXG4gICAqID4gTm8gY29tcG9uZW50ZSBgcG8tcGFzc3dvcmRgIHNlcsOhIGRlZmluaWRvIGNvbW8gYG5ldy1wYXNzd29yZGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgQElucHV0KCdwLW5vLWF1dG9jb21wbGV0ZS1wYXNzd29yZCcpIG5vQXV0b2NvbXBsZXRlUGFzc3dvcmQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgZXNjb25kZXIgYSBmdW7Dp8OjbyBkZSBlc3BpYXIgYSBzZW5oYSBkaWdpdGFkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtcGFzc3dvcmQtcGVlaycpIGhpZGVQYXNzd29yZFBlZWs6IGJvb2xlYW47XG5cbiAgYWxsTG9naW5FcnJvcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgYWxsUGFzc3dvcmRFcnJvcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgY3VzdG9tRmllbGRPYmplY3Q6IFBvUGFnZUxvZ2luQ3VzdG9tRmllbGQ7XG4gIGN1c3RvbUZpZWxkVHlwZTogc3RyaW5nO1xuICBsb2dpblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICByZW1lbWJlclVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nO1xuICBzaG93RXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIF9hdXRoZW50aWNhdGlvblR5cGU6IFBvUGFnZUxvZ2luQXV0aGVudGljYXRpb25UeXBlID0gUG9QYWdlTG9naW5BdXRoZW50aWNhdGlvblR5cGUuQmFzaWM7XG4gIHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Jsb2NrZWRVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBfY29udGFjdEVtYWlsOiBzdHJpbmc7XG4gIHByaXZhdGUgX2N1c3RvbUZpZWxkOiBzdHJpbmcgfCBQb1BhZ2VMb2dpbkN1c3RvbUZpZWxkO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudD86IHN0cmluZztcbiAgcHJpdmF0ZSBfZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmc/OiBudW1iZXI7XG4gIHByaXZhdGUgX2hpZGVSZW1lbWJlclVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM6IFBvUGFnZUxvZ2luTGl0ZXJhbHM7XG4gIHByaXZhdGUgX2xvYWRpbmc/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2xvZ2luOiBzdHJpbmc7XG4gIHByaXZhdGUgX2xvZ2luRXJyb3JzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHByaXZhdGUgX3Bhc3N3b3JkRXJyb3JzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHByaXZhdGUgX3Byb2R1Y3ROYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3JlY292ZXJ5OiBzdHJpbmcgfCBQb1BhZ2VMb2dpblJlY292ZXJ5IHwgRnVuY3Rpb247XG4gIHByaXZhdGUgX3JlZ2lzdGVyVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgX3N1cHBvcnQ6IHN0cmluZyB8IEZ1bmN0aW9uO1xuICBwcml2YXRlIF9sYW5ndWFnZXNMaXN0OiBBcnJheTxQb0xhbmd1YWdlPjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBbyBpbmZvcm1hciB1bSB2YWxvciBkbyB0aXBvIGBzdHJpbmdgLCBvIG1lc21vIHNlcsOhIGFwbGljYWRvIGNvbW8gYSBjaGF2ZSBkbyBjYW1wbyBjdXN0b21pemFkbyBlIHV0aWxpemFyw6FcbiAgICogb3MgdmFsb3JlcyBwYWRyw7VlcyBjb250aWRvcyBuYSBwcm9wcmllZGFkZSBgbGl0ZXJhbHNgIGNvbW8gYGN1c3RvbUZpZWxkRXJyb3JQYXR0ZXJuYCBlIGBjdXN0b21GaWVsZFBsYWNlaG9sZGVyYC5cbiAgICpcbiAgICogRXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSBpbmZvcm1hciB1bSBvYmpldG8gcXVlIHNlZ3VlIGEgZGVmaW5pw6fDo28gZGEgaW50ZXJmYWNlIGBQb1BhZ2VMb2dpbkN1c3RvbUZpZWxkYCwgb25kZVxuICAgKiBhdHJhdsOpcyBkb3MgcGFyw6JtZXRyb3MgZW52aWFkb3MgcG9kZSBnZXJhciB1bSBgcG8taW5wdXRgLCBgcG8tY29tYm9gIGVzcGVjaWZpY2FtZW50ZSBwYXJhIHNlcnZpw6dvc1xuICAgKiBvdSBgcG8tc2VsZWN0YCBwYXJhIHZhbG9yZXMgZml4b3MuXG4gICAqXG4gICAqIEFiYWl4byBzZWd1ZW0gb3MgZXhlbXBsb3MgZGUgY2FkYSB0aXBvIGRlIGNhbXBvLlxuICAgKlxuICAgKiBgcG8taW5wdXRgOlxuICAgKlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgIHByb3BlcnR5OiAnZG9tYWluJyxcbiAgICogICB2YWx1ZTogJ2p2MDEnLFxuICAgKiAgIHBsYWNlaG9sZGVyOiAnRW50ZXIgeW91ciBkb21haW4nLFxuICAgKiAgIHBhdHRlcm46ICdbYS16XScsXG4gICAqICAgZXJyb3JQYXR0ZXJuOiAnSW52YWxpZCB2YWx1ZSdcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogYHBvLWNvbWJvYDpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBwcm9wZXJ0eTogJ2RvbWFpbicsXG4gICAqICAgdmFsdWU6ICdqdjAxJyxcbiAgICogICBwbGFjZWhvbGRlcjogJ0VudGVyIHlvdXIgZG9tYWluJyxcbiAgICogICB1cmw6ICdodHRwczovL3BvLXVpLmlvL3NhbXBsZS9hcGkvY29tYm9PcHRpb24vZG9tYWlucycsXG4gICAqICAgZmllbGRWYWx1ZTogJ25pY2tuYW1lJ1xuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBgcG8tc2VsZWN0YDpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBwcm9wZXJ0eTogJ2RvbWFpbicsXG4gICAqICAgdmFsdWU6ICdqdjAxJyxcbiAgICogICBwbGFjZWhvbGRlcjogJ0VudGVyIHlvdXIgZG9tYWluJyxcbiAgICogICBvcHRpb25zOiBbe2xhYmVsOiAnRG9tYWluIDEnLCB2YWx1ZTogJzEnfSwge2xhYmVsOiAnRG9tYWluIDInLCB2YWx1ZTogJzInfV1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyBvIGN1c3RvbUZpZWxkIHBvc3N1YSBvcHRpb25zLCB1cmwgZSBmaWVsZFZhbHVlIHByZWVuY2hpZG9zLCBzZXLDoSBwcmlvcml6YWRvIG8gcG8tc2VsZWN0XG4gICAqIHV0aWxpemFuZG8gbyBvcHRpb25zLlxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWN1c3RvbS1maWVsZCcpIHNldCBjdXN0b21GaWVsZCh2YWx1ZTogc3RyaW5nIHwgUG9QYWdlTG9naW5DdXN0b21GaWVsZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKGlzVHlwZW9mKHZhbHVlLCAnc3RyaW5nJykpIHtcbiAgICAgICAgdGhpcy5jdXN0b21GaWVsZFR5cGUgPSAnaW5wdXQnO1xuICAgICAgICB0aGlzLl9jdXN0b21GaWVsZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmN1c3RvbUZpZWxkT2JqZWN0ID0gdGhpcy5nZXREZWZhdWx0Q3VzdG9tRmllbGRPYmplY3QodmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1R5cGVvZih2YWx1ZSwgJ29iamVjdCcpICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVsncHJvcGVydHknXSkge1xuICAgICAgICB0aGlzLl9jdXN0b21GaWVsZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmN1c3RvbUZpZWxkT2JqZWN0ID0gPFBvUGFnZUxvZ2luQ3VzdG9tRmllbGQ+dmFsdWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbUZpZWxkT2JqZWN0Lm9wdGlvbnMgJiYgIXRoaXMuY3VzdG9tRmllbGRPYmplY3QudXJsKSB7XG4gICAgICAgICAgdGhpcy5jdXN0b21GaWVsZFR5cGUgPSAnaW5wdXQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRUeXBlID0gdGhpcy5jdXN0b21GaWVsZE9iamVjdC5vcHRpb25zID8gJ3NlbGVjdCcgOiAnY29tYm8nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2N1c3RvbUZpZWxkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VzdG9tRmllbGRPYmplY3QgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgY3VzdG9tRmllbGQoKTogc3RyaW5nIHwgUG9QYWdlTG9naW5DdXN0b21GaWVsZCB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbUZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVyc29uYWxpemEgbyBlLW1haWwgcXVlIMOpIGV4aWJpZG8gbmEgbWVuc2FnZW0gZGUgZGljYSBkZSBsb2dpbiBwYWRyw6NvIHBhcmEgY29udGF0byBkZSBzdXBvcnRlLlxuICAgKi9cbiAgQElucHV0KCdwLWNvbnRhY3QtZW1haWwnKSBzZXQgY29udGFjdEVtYWlsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb250YWN0RW1haWwgPSB2YWx1ZTtcbiAgfVxuICBnZXQgY29udGFjdEVtYWlsKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250YWN0RW1haWw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBUZXh0byBjdXN0b21pemFkbyBxdWUgZmljYSBlbnRyZSBhIGxvZ28gZSBhIG1lbnNhZ2VtIGRlIGJvYXMtdmluZGFzLlxuICAgKi9cbiAgQElucHV0KCdwLXByb2R1Y3QtbmFtZScpIHNldCBwcm9kdWN0TmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJvZHVjdE5hbWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcHJvZHVjdE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb2R1Y3ROYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRpY2lvbmEgdW1hIGB0YWdgIGFiYWl4byBkbyB0w610dWxvIHF1ZSBlc3BlY2lmaWNhIG8gYW1iaWVudGUgcXVlIG8gdXN1w6FyaW8gZXN0w6EgZmF6ZW5kbyBvIGxvZ2luLlxuICAgKlxuICAgKiA+IEVzc2EgcHJvcHJpZWRhZGUgbGltaXRhIG8gdGV4dG8gZW0gNDAgY2FyYWN0ZXJlcy5cbiAgICovXG4gIEBJbnB1dCgncC1lbnZpcm9ubWVudCcpIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50Lmxlbmd0aCA+IHBvUGFnZUxvZ2luQ29udGVudE1heExlbmd0aCkge1xuICAgICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudC5zdWJzdHJpbmcoMCwgcG9QYWdlTG9naW5Db250ZW50TWF4TGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9XG4gIH1cbiAgZ2V0IGVudmlyb25tZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV4aWJlIHVtIGF2aXNvIGRlIGJsb3F1ZWlvIGRlIGFjb3JkbyBjb20gYSBxdWFudGlkYWRlIHJlc3RhbnRlIGRlIHRlbnRhdGl2YXMuXG4gICAqIE8gYXZpc28gc2Vyw6EgZXhpYmlkbyBzb21lbnRlIHNlIGEgcXVhbnRpZGFkZSBmb3IgbWFpb3IgcXVlIHplcm8uXG4gICAqXG4gICAqID4gQ2FzbyB0ZW5oYSBhbGd1bSB2YWxvciBhdHJpYnXDrWRvIHBhcmEgbyBhdHJpYnV0byBgcC1hdXRoZW50aWNhdGlvbi11cmxgIGUgbyByZXRvcm5vIGRhIHJlcXVpc2nDp8OjbyBlc3RpdmVyIGF0cmlidWluZG8gdmFsb3JcbiAgICogcGFyYSBvIGBwLWV4Y2VlZGVkLWF0dGVtcHRzLXdhcm5pbmdgLCBvIHZhbG9yIGNvbnNpZGVyYWRvIHNlcsOhIG8gZG8gcmV0b3JubyBkYSByZXF1aXNpw6fDo28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAwYFxuICAgKi9cbiAgQElucHV0KCdwLWV4Y2VlZGVkLWF0dGVtcHRzLXdhcm5pbmcnKSBzZXQgZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2V4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nID0gY29udmVydFRvSW50KHZhbHVlKTtcbiAgICB0aGlzLnNob3dFeGNlZWRlZEF0dGVtcHRzV2FybmluZyA9IHRoaXMuZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcgPiAwO1xuICB9XG5cbiAgZ2V0IGV4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2V4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXNjb25kZSBhIGZ1bsOnw6NvIFwiTGVtYnJhciB1c3XDoXJpb1wiIGRvIGZvcm11bMOhcmlvIGRlIGxvZ2luLlxuICAgKlxuICAgKiBRdWFuZG8gZXNzYSBwcm9wcmllZGFkZSDDqSBzZXRhZGEgY29tIGB0cnVlYCBhIHByb3ByaWVkYWRlIGByZW1lbWJlclVzZXJgIGVudmlhZGEgbm8gZXZlbnRvIGBwLWxvZ2luLXN1Ym1pdGAgc2Vyw6Egc2VtcHJlXG4gICAqIGBmYWxzZWAuXG4gICAqXG4gICAqID4gVmVqYSBhIHByb3ByaWVkYWRlIGBwLWxpdGVyYWxzYCBwYXJhIGN1c3RvbWl6YXIgYSBsaXRlcmFsIGByZW1lbWJlclVzZXJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1yZW1lbWJlci11c2VyJykgc2V0IGhpZGVSZW1lbWJlclVzZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlUmVtZW1iZXJVc2VyID0gPGFueT52YWx1ZSA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5faGlkZVJlbWVtYmVyVXNlcikge1xuICAgICAgdGhpcy5yZW1lbWJlclVzZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IGhpZGVSZW1lbWJlclVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVSZW1lbWJlclVzZXI7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tcGFnZS1sb2dpbmAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvUGFnZUxvZ2luTGl0ZXJhbHMgPSB7XG4gICAqICAgIGF0dGVtcHRzOiAnezB9IHZleihlcykgJyxcbiAgICogICAgY3JlYXRlQU5ld1Bhc3N3b3JkTm93OiAnTWVsaG9yIGNyaWFyIHVtYSBzZW5oYSBub3ZhIGFnb3JhISBWb2PDqiB2YWkgcG9kZXIgZW50cmFyIG5vIHNpc3RlbWEgbG9nbyBlbSBzZWd1aWRhLicsXG4gICAqICAgIGZvcmdvdFBhc3N3b3JkOiAnRXNxdWVjZXUgc3VhIHNlbmhhPycsXG4gICAqICAgIGZvcmdvdFlvdXJQYXNzd29yZDogJ0VzcXVlY2V1IHN1YSBzZW5oYT8nLFxuICAgKiAgICBoaWdobGlnaHRJbmZvOiAnJyxcbiAgICogICAgaUZvcmdvdE15UGFzc3dvcmQ6ICdFc3F1ZWNpIG1pbmhhIHNlbmhhJyxcbiAgICogICAgaWZZb3VUcnlIYXJkZXI6ICdTZSB0ZW50YXIgbWFpcyAnLFxuICAgKiAgICB3ZWxjb21lOiAnQm9hcy12aW5kYXMnLFxuICAgKiAgICBsb2dpbkVycm9yUGF0dGVybjogJ0xvZ2luIG9icmlnYXTDs3JpbycsXG4gICAqICAgIGxvZ2luSGludDogJ0Nhc28gbsOjbyBwb3NzdWEgdXN1w6FyaW8gZW50cmUgZW0gY29udGF0byBjb20gbyBzdXBvcnRlJyxcbiAgICogICAgbG9naW5MYWJlbDogJ0luc2lyYSBzZXUgdXN1w6FyaW8nLFxuICAgKiAgICBsb2dpblBsYWNlaG9sZGVyOiAnSW5zaXJhIHNldSB1c3XDoXJpbyBkZSBhY2Vzc28nLFxuICAgKiAgICBwYXNzd29yZEVycm9yUGF0dGVybjogJ1NlbmhhIG9icmlnYXTDs3JpYScsXG4gICAqICAgIHBhc3N3b3JkTGFiZWw6ICdJbnNpcmEgc3VhIHNlbmhhJyxcbiAgICogICAgcGFzc3dvcmRQbGFjZWhvbGRlcjogJ0luc2lyYSBzdWEgc2VuaGEgZGUgYWNlc3NvJyxcbiAgICogICAgY3VzdG9tRmllbGRFcnJvclBhdHRlcm46ICdDYW1wbyBjdXN0b21pemFkbyBpbnbDoWxpZG8nLFxuICAgKiAgICBjdXN0b21GaWVsZFBsYWNlaG9sZGVyOiAnUG9yIGZhdm9yIGluc2lyYSB1bSB2YWxvcicsXG4gICAqICAgIHJlZ2lzdGVyVXJsOiAnTm92byByZWdpc3RybycsXG4gICAqICAgIHJlbWVtYmVyVXNlcjogJ0xlbWJyYXIgdXN1w6FyaW8nLFxuICAgKiAgICByZW1lbWJlclVzZXJIaW50OiAnRXN0YSBvcMOnw6NvIHBvZGUgc2VyIGRlc2FiaWxpdGFkYSBuYXMgY29uZmlndXJhw6fDtWVzIGRvIHNpc3RlbWEnLFxuICAgKiAgICBzdWJtaXRMYWJlbDogJ0FjZXNzYXIgc2lzdGVtYScsXG4gICAqICAgIHN1Ym1pdHRlZExhYmVsOiAnQ2FycmVnYW5kby4uLicsXG4gICAqICAgIHRpdGxlUG9wb3ZlcjogJ09wYSEnLFxuICAgKiAgICB5b3VyVXNlcldpbGxCZUJsb2NrZWQ6ICdzZW0gc3VjZXNzbyBzZXUgdXN1w6FyaW8gc2Vyw6EgYmxvcXVlYWRvIGUgdm9jw6ogZmljYSAyNCBob3JhcyBzZW0gcG9kZXIgYWNlc3NhciA6KCdcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBPdSBwYXNzYW5kbyBhcGVuYXMgYXMgbGl0ZXJhaXMgcXVlIGRlc2VqYSBjdXN0b21pemFyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb1BhZ2VMb2dpbkxpdGVyYWxzID0ge1xuICAgKiAgICBsb2dpblBsYWNlaG9sZGVyOiAnSW5zaXJhIHNldSB1c3XDoXJpbyBkZSBhY2Vzc28nLFxuICAgKiAgICBwYXNzd29yZFBsYWNlaG9sZGVyOiAnSW5zaXJhIHN1YSBzZW5oYSBkZSBhY2Vzc28nLFxuICAgKiAgICBzdWJtaXRMYWJlbDogJ0FjZXNzYXIgc2lzdGVtYSdcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLXBhZ2UtbG9naW5cbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLXBhZ2UtbG9naW4+XG4gICAqIGBgYFxuICAgKlxuICAgKiAgPiBPIG9iamV0byBwYWRyw6NvIGRlIGxpdGVyYWlzIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGRvIGJyb3dzZXIgKHB0LCBlbiwgZXMpLlxuICAgKiAgPiDDiSB0YW1iw6ltIHBvc3PDrXZlbCBhbHRlcm5hciBvIG9iamV0byBwYWRyw6NvIGRlIGxpdGVyYWlzIGF0cmF2w6lzIGRvIHNlbGV0b3IgZGUgaWRpb21hcyBsb2NhbGl6YWRvIG5hIHBhcnRlIGluZmVyaW9yIGRvIHRlbXBsYXRlLFxuICAgKiBuZXNzZSBjYXNvLCBow6EgdGFtYsOpbSBhIG9ww6fDo28gZG8gaWRpb21hIHJ1c3NvLlxuICAgKi9cbiAgQElucHV0KCdwLWxpdGVyYWxzJykgc2V0IGxpdGVyYWxzKHZhbHVlOiBQb1BhZ2VMb2dpbkxpdGVyYWxzKSB7XG4gICAgdGhpcy5fbGl0ZXJhbHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSB1bSBlc3RhZG8gZGUgY2FycmVnYW1lbnRvIGFvIGJvdMOjbyBkZSAqbG9naW4qLlxuICAgKlxuICAgKiA+IMOJIG5lY2Vzc8OhcmlvIGF0cmlidWlyIGB0cnVlYCDDoCBlc3RhIHByb3ByaWVkYWRlIG5hIGZ1bsOnw6NvIGRlZmluaWRhIGVtIGBwLWxvZ2luLXN1Ym1pdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1sb2FkaW5nJykgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFZhbG9yIGRvIG1vZGVsbyBkbyBjYW1wbyBkZSBsb2dpbi5cbiAgICovXG4gIEBJbnB1dCgncC1sb2dpbicpIHNldCBsb2dpbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG9naW4gPSB2YWx1ZTtcblxuICAgIGlmICghdGhpcy5hdXRoZW50aWNhdGlvblVybCkge1xuICAgICAgdGhpcy5sb2dpbkNoYW5nZS5lbWl0KHRoaXMuX2xvZ2luKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbG9naW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9naW47XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBdHJpYnV0byBxdWUgcmVjZWJlIHVtYSBsaXN0YSBkZSBlcnJvcyBlIGV4aWJlIGFiYWl4byBkbyBjYW1wbyBkZSBsb2dpbi5cbiAgICovXG4gIEBJbnB1dCgncC1sb2dpbi1lcnJvcnMnKSBzZXQgbG9naW5FcnJvcnModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLl9sb2dpbkVycm9ycyA9IHZhbHVlIHx8IFtdO1xuICAgIHRoaXMuc2V0TG9naW5FcnJvcnModGhpcy5fbG9naW5FcnJvcnMpO1xuICB9XG4gIGdldCBsb2dpbkVycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9naW5FcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBdHJpYnV0byBxdWUgcmVjZWJlIHVtYSBsaXN0YSBkZSBlcnJvcyBlIGV4aWJlIGFiYWl4byBkbyBjYW1wbyBkZSBwYXNzd29yZC5cbiAgICovXG4gIEBJbnB1dCgncC1wYXNzd29yZC1lcnJvcnMnKSBzZXQgcGFzc3dvcmRFcnJvcnModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLl9wYXNzd29yZEVycm9ycyA9IHZhbHVlIHx8IFtdO1xuICAgIHRoaXMuc2V0UGFzc3dvcmRFcnJvcnModGhpcy5fcGFzc3dvcmRFcnJvcnMpO1xuICB9XG4gIGdldCBwYXNzd29yZEVycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFzc3dvcmRFcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeGliZSB1bSBsaW5rIGFiYWl4byBkbyBmb3JtdWzDoXJpbyBkZSBsb2dpbiBwYXJhIHF1ZSBvcyB1c3XDoXJpb3MgZGEgYXBsaWNhw6fDo28gZmHDp2FtIGEgcmVjdXBlcmHDp8OjbyBkb3MgZGFkb3MgZGUgYXV0ZW50aWNhw6fDo28uXG4gICAqXG4gICAqIEEgcHJvcHJpZWRhZGUgYWNlaXRhIG9zIHNlZ3VpbnRlcyB0aXBvczpcbiAgICpcbiAgICogLSAqKlN0cmluZyoqOiBpbmZvcm1lIHVtYSB1cmwgZXh0ZXJuYSBvdSB1bWEgcm90YSB2w6FsaWRhO1xuICAgKiAtICoqRnVuY3Rpb24qKjogcG9kZS1zZSBjdXN0b21pemFyIGEgYcOnw6NvLiBQYXJhIGVzdGEgcG9zc2lsaWRhZGUgYmFzdGEgYXRyaWJ1aXI6XG4gICAqIGBgYFxuICAgKiA8cG8tcGFnZS1sb2dpbj5cbiAgICogICBbcmVjb3ZlcnldPVwidGhpcy5teVJlY292ZXJ5LmJpbmQodGhpcylcIj5cbiAgICogPC9wby1wYWdlLWxvZ2luPlxuICAgKiBgYGBcbiAgICpcbiAgICogLSAqKlBvUGFnZUxvZ2luUmVjb3ZlcnkqKjogY3JpYS1zZSB2w61uY3VsbyBhdXRvbcOhdGljbyBjb20gbyB0ZW1wbGF0ZSAqKnBvLW1vZGFsLXBhc3N3b3JkLXJlY292ZXJ5KiouXG4gICAqICAgTyBvYmpldG8gZGV2ZSBjb250ZXIgYSAqKnVybCoqIHBhcmEgcmVxdWlzacOnw6NvIGRvcyByZWN1cnNvcyBlIHBvZGUtc2UgZGVmaW5pciBvICoqdGlwbyoqIGRlIG1vZGFsIHBhcmEgcmVjdXBlcmHDp8OjbyBkZSBzZW5oYSxcbiAgICogICAqKmVtYWlsKiogcGFyYSBjb250YXRvIGUgKiptw6FzY2FyYSoqIGRvIGNhbXBvIGRlIHRlbGVmb25lLlxuICAgKi9cbiAgQElucHV0KCdwLXJlY292ZXJ5Jykgc2V0IHJlY292ZXJ5KHZhbHVlOiBzdHJpbmcgfCBGdW5jdGlvbiB8IFBvUGFnZUxvZ2luUmVjb3ZlcnkpIHtcbiAgICB0aGlzLl9yZWNvdmVyeSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlY292ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWNvdmVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENhc28gYSBhcGxpY2HDp8OjbyB0ZW5oYSB1bSBsaW5rIHBhcmEgbm92b3MgY2FkYXN0cm9zLCBpbmZvcm1lIHVtYSB1cmwgZXh0ZXJuYSBvdSB1bWEgcm90YSB2w6FsaWRhLCBkZXNzYVxuICAgKiBmb3JtYSBzZXLDoSBleGliaWRvIHVtIGxpbmsgYWJhaXhvIGRvIGZvcm11bMOhcmlvIGRlIGxvZ2luIHBhcmEgb3MgdXN1w6FyaW9zIGRhIGFwbGljYcOnw6NvLlxuICAgKlxuICAgKiBFeGVtcGxvcyBkZSB2YWxvcmVzIHbDoWxpZG9zOlxuICAgKiAtICoqbG9jYWwqKjogYC9ob21lYFxuICAgKiAtICoqdXJsIGV4dGVybmEqKjogYGh0dHBzOi8vcG8tdWkuaW9gXG4gICAqXG4gICAqID4gVmVqYSBhIHByb3ByaWVkYWRlIGBwLWxpdGVyYWxzYCBwYXJhIGN1c3RvbWl6YXIgYSBsaXRlcmFsIGByZWdpc3RlclVybGAuXG4gICAqL1xuICBASW5wdXQoJ3AtcmVnaXN0ZXItdXJsJykgc2V0IHJlZ2lzdGVyVXJsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZWdpc3RlclVybCA9IGlzVHlwZW9mKHZhbHVlLCAnc3RyaW5nJykgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCByZWdpc3RlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RlclVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEF0cmlidXRvIHF1ZSByZWNlYmUgbyB0aXBvIGRlIGVzcXVlbWEgZGEgYXV0ZW50aWNhw6fDo28sIHNlbmRvIHN1cG9ydGFkb3MgYXBlbmFzIG9zIHZhbG9yZXMgYEJhc2ljYCBlIGBCZWFyZXJgLlxuICAgKlxuICAgKiA+IENhc28gbyB0aXBvIGRlZmluaWRvIHNlamEgYEJhc2ljYCwgbyBjb21wb25lbnRlIGZhcsOhIHVtYSByZXF1aXNpw6fDo28gYFBPU1RgIGNvbnRlbmRvOlxuICAgKlxuICAgKiBgYGBcbiAgICogaGVhZGVycyB7XG4gICAqICBBdXRob3JpemF0aW9uOiBCYXNpYyBiYXNlNjQobG9naW46cGFzc3dvcmQpXG4gICAqIH1cbiAgICpcbiAgICogYm9keSB7XG4gICAqICByZW1lbWJlclVzZXI6IHJlbWVtYmVyVXNlclxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IENhc28gbyB0aXBvIGRlZmluaWRvIHNlamEgYEJlYXJlcmAsIG8gY29tcG9uZW50ZSBmYXLDoSB1bWEgcmVxdWlzacOnw6NvIGBQT1NUYCBjb250ZW5kbzpcbiAgICpcbiAgICogYGBgXG4gICAqIGJvZHkge1xuICAgKiAgbG9naW46IGxvZ2luLFxuICAgKiAgcGFzc3dvcmQ6IGJhc2U2NChwYXNzd29yZCksXG4gICAqICByZW1lbWJlclVzZXI6IHJlbWVtYmVyVXNlclxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZGVmYXVsdCBgUG9QYWdlTG9naW5BdXRoZW50aWNhdGlvblR5cGUuQmFzaWNgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0aGVudGljYXRpb24tdHlwZScpIHNldCBhdXRoZW50aWNhdGlvblR5cGUodmFsdWU6IFBvUGFnZUxvZ2luQXV0aGVudGljYXRpb25UeXBlKSB7XG4gICAgdGhpcy5fYXV0aGVudGljYXRpb25UeXBlID0gKDxhbnk+T2JqZWN0KS52YWx1ZXMoUG9QYWdlTG9naW5BdXRoZW50aWNhdGlvblR5cGUpLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiBQb1BhZ2VMb2dpbkF1dGhlbnRpY2F0aW9uVHlwZS5CYXNpYztcbiAgfVxuXG4gIGdldCBhdXRoZW50aWNhdGlvblR5cGUoKTogUG9QYWdlTG9naW5BdXRoZW50aWNhdGlvblR5cGUge1xuICAgIHJldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFbmRwb2ludCB1c2FkbyBwZWxvIHRlbXBsYXRlIHBhcmEgcmVxdWlzacOnw6NvIGRvIHJlY3Vyc28uIFF1YW5kbyBwcmVlbmNoaWRvLCBvIG3DqXRvZG8gYHAtbG9naW4tc3VibWl0YCBzZXLDoSBpZ25vcmFkbyBlIG9cbiAgICogY29tcG9uZW50ZSBhZHF1aXJpcsOhIGF1dG9tYXRpemHDp8OjbyBwYXJhIG8gcHJvY2Vzc28gZGUgYXV0ZW50aWNhw6fDo28uXG4gICAqXG4gICAqICMjIyBQcm9jZXNzb3NcbiAgICogQW8gZGlnaXRhciB1bSB2YWxvciB2w6FsaWRvIG5vIGNhbXBvIGRlIGxvZ2luL3Bhc3N3b3JkIGUgcHJlc3Npb25hciAqKkVudGVyKiosIG8gY29tcG9uZW50ZSBmYXLDoSB1bWEgcmVxdWlzacOnw6NvIGBQT1NUYFxuICAgKiBuYSB1cmwgZXNwZWNpZmljYWRhIG5lc3RhIHByb3ByaWVkYWRlIHBhc3NhbmRvIG8gb2JqZXRvIGNvbnRlbmRvIG8gdmFsb3IgZGVmaW5pZG8gcGVsbyB1c3XDoXJpbzpcbiAgICpcbiAgICogYGBgXG4gICAqIGhlYWRlcnMge1xuICAgKiAgQXV0aG9yaXphdGlvbjogQmFzaWMgYmFzZTY0KGxvZ2luOnBhc3N3b3JkKVxuICAgKiB9XG4gICAqXG4gICAqIGJvZHkge1xuICAgKiAgcmVtZW1iZXJVc2VyOiByZW1lbWJlclVzZXJcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogRW0gY2FzbyBkZSAqKnN1Y2Vzc28qKiwgbyBvYmpldG8gZGUgcmV0b3JubyDDqSBhcm1hemVuYWRvIG5vIGBzZXNzaW9uU3RvcmFnZWAgZSBvIHVzdcOhcmlvIMOpIHJlZGlyZWNpb25hZG8gcGFyYSBhIHDDoWdpbmEgaW5pY2lhbCBkYVxuICAgKiBhcGxpY2HDp8OjbyBgL2AuXG4gICAqXG4gICAqIGBgYFxuICAgKiAyMDA6XG4gICAqICB7XG4gICAqICAgIHVzZXI6IHVzZXJcbiAgICogIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEVtIGNhc28gZGUgKiplcnJvKiogbmEgYXV0ZW50aWNhw6fDo28sIGVzcGVyYS1zZSBvIHNlZ3VpbnRlIHJldG9ybm86XG4gICAqXG4gICAqIGBgYFxuICAgKiA0MDAvNDAxXG4gICAqICB7XG4gICAqICAgIGNvZGU6IDQwMC80MDEsXG4gICAqICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAqICAgIGRldGFpbGVkTWVzc2FnZTogZGV0YWlsZWRNZXNzYWdlLFxuICAgKiAgICBoZWxwVXJsPzogaGVscFVybFxuICAgKiAgfVxuICAgKiBgYGBcbiAgICpcbiAgICogPiBQb2RlLXNlIGF0cmlidWlyIHVtYSBxdWFudGlkYWRlIG3DoXhpbWEgZGUgdGVudGF0aXZhcyByZXN0YW50ZXMgKG1heEF0dGVtcHRzUmVtYWluaW5nKSBwYXJhIG8gYXRyaWJ1dG8gYHAtZXhjZWVkZWQtYXR0ZW1wdHMtd2FybmluZ2AsXG4gICAqIGFzc2ltIGNvbW8gb3MgYXZpc29zIHJlbGFjaW9uYWRvcyBhb3MgY2FtcG9zIGxvZ2luIGUgcGFzc3dvcmQgKGxvZ2luV2FybmluZ3MsIHBhc3N3b3JkV2FybmluZ3MpIHBhcmEgb3MgYXRyaWJ1dG9zIGBwLWxvZ2luLWVycm9yc2AgZVxuICAgKiBgcC1wYXNzd29yZC1lcnJvcnNgIGNvbmZvcm1lIHJldG9ybm8gYWJhaXhvOlxuICAgKlxuICAgKiBgYGBcbiAgICogNDAwXG4gICAqICB7XG4gICAqICAgIGNvZGU6IDQwMC80MDEsXG4gICAqICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAqICAgIGRldGFpbGVkTWVzc2FnZTogZGV0YWlsZWRNZXNzYWdlLFxuICAgKiAgICBoZWxwVXJsPzogaGVscFVybCxcbiAgICogICAgbWF4QXR0ZW1wdHNSZW1haW5pbmc/OiBtYXhBdHRlbXB0c1JlbWFpbmluZyxcbiAgICogICAgbG9naW5XYXJuaW5ncz86IFtsb2dpbldhcm5pbmdzXSxcbiAgICogICAgcGFzc3dvcmRXYXJuaW5ncz86IFtwYXNzd29yZFdhcm5pbmdzXVxuICAgKiAgfVxuICAgKiBgYGBcbiAgICpcbiAgICogPiBDYXNvIG8gdmFsb3IgYXRyaWJ1w61kbyBwYXJhIGBwLWV4Y2VlZGVkLWF0dGVtcHRzLXdhcm5pbmdgIHNlamEgaWd1YWwgYSAwKHplcm8pLCBwb2RlcsOhIHNlciBwYXNzYWRvIHVtIHZhbG9yIHBhcmEgb1xuICAgKiBhdHJpYnV0byBgcC1ibG9ja2VkLXVybGAgZSBvIHVzdcOhcmlvIHNlcsOhIHJlZGlyZWNpb25hZG8gcGFyYSB1bWEgdGVsYSBkZSBibG9xdWVpby5cbiAgICpcbiAgICogKlByb2Nlc3NvIGZpbmFsaXphZG8uKlxuICAgKlxuICAgKiBfX19fX19fX19fX19fX19cbiAgICpcbiAgICogIyMjIyBQcmF0aWNpZGFkZVxuICAgKiBBcyBpbmZvcm1hw6fDtWVzIGRvIHNlcnZpw6dvIGRlIGF1dGVudGljYcOnw6NvIHRhbWLDqW0gcG9kZW0gc2VyIHRyYW5zbWl0aWRhcyBkaXJldGFtZW50ZSBwZWxhcyBjb25maWd1cmHDp8Ojb3MgZGUgcm90YSBlLCBkZXN0YSBtYW5laXJhLFxuICAgKiBkaXNwZW5zYS1zZSBxdWFscXVlciBtZW7Dp8OjbyBlL291IGltcG9ydGHDp8OjbyBkbyBjb21wb25lbnRlIGBwby1wYWdlLWxvZ2luYCBubyByZXN0YW50ZSBkYSBhcGxpY2HDp8Ojby4gTyBleGVtcGxvIGFiYWl4byBleGVtcGxpZmljYVxuICAgKiBhIGZvcm1hIGRpbsOibWljYSBjb20gYSBxdWFsIG8gdGVtcGxhdGUgZGUgdGVsYSBkZSBsb2dpbiBwb2RlIHNlciBnZXJhZG8gYW8gbmF2ZWdhciBwYXJhIHJvdGEgYC9sb2dpbmAsIGUgdGFtYsOpbSBjb21vIGVsZSBzZSBjb211bmljYVxuICAgKiBjb20gbyBzZXJ2acOnbyBwYXJhIGVmZXR1YcOnw6NvIGRvIHByb2Nlc3NvIGRlIGF1dGVudGljYcOnw6NvIGRvIHVzdcOhcmlvIGUgc29saWNpdGHDp8OjbyBkZSBub3ZhIHNlbmhhLlxuICAgKiBCYXN0YSBkZWZpbmlyIG5hcyBjb25maWd1cmHDp8O1ZXMgZGUgcm90YTpcbiAgICpcbiAgICpcbiAgICogYGBgXG4gICAqICAgaW1wb3J0IHsgUG9QYWdlTG9naW5Db21wb25lbnQsIFBvUGFnZUxvZ2luQXRoZW50aWNhdGlvblR5cGUgfSBmcm9tICdAcG8tdWkvbmctdGVtcGxhdGVzJztcbiAgICpcbiAgICogICAuLi5cbiAgICogICBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAgICogICAgIHtcbiAgICogICAgICAgcGF0aDogJ2xvZ2luJywgY29tcG9uZW50OiBQb1BhZ2VMb2dpbkNvbXBvbmVudCwgZGF0YToge1xuICAgKiAgICAgICAgIHNlcnZpY2VBcGk6ICdodHRwczovL3BvLXVpLmlvL3NhbXBsZS9hcGkvdXNlcnMvYXV0aGVudGljYXRpb24nLFxuICAgKiAgICAgICAgIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnLFxuICAgKiAgICAgICAgIHJlY292ZXJ5OiB7XG4gICAqICAgICAgICAgICB1cmw6ICdodHRwczovL3BvLXVpLmlvL3NhbXBsZS9hcGkvdXNlcnMnLFxuICAgKiAgICAgICAgICAgdHlwZTogUG9Nb2RhbFBhc3N3b3JkUmVjb3ZlcnlUeXBlLkFsbCxcbiAgICogICAgICAgICAgIGNvbnRhY3RNYWlsOiAnZGV2LnBvQHBvLXVpLmNvbScsXG4gICAqICAgICAgICAgICBwaG9uZU1hc2s6ICc5LTk5OS05OTktOTk5OSdcbiAgICogICAgICAgICB9LFxuICAgKiAgICAgICAgIHJlZ2lzdGVyVXJsOiAnL25ldy1wYXNzd29yZCcsXG4gICAqICAgICAgICAgYXV0aGVudGljYXRpb25UeXBlOiBQb1BhZ2VMb2dpbkF0aGVudGljYXRpb25UeXBlLkJhc2ljXG4gICAqICAgICAgIH1cbiAgICogICAgIH1cbiAgICogICAgIC4uLlxuICAgKiAgIF07XG4gICAqXG4gICAqICAgQE5nTW9kdWxlKHtcbiAgICogICAgIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yUm9vdChyb3V0ZXMpXSxcbiAgICogICAgIGV4cG9ydHM6IFtSb3V0ZXJNb2R1bGVdXG4gICAqICAgfSlcbiAgICogICBleHBvcnQgY2xhc3MgQXBwUm91dGluZ01vZHVsZSB7IH1cbiAgICogYGBgXG4gICAqXG4gICAqXG4gICAqIE8gbWV0YWRhZG8gYHNlcnZpY2VBcGlgIGRldmUgc2VyIGEgKip1cmwqKiBwYXJhIHJlcXVpc2nDp8OjbyBkb3MgcmVjdXJzb3MgZGUgYXV0ZW50aWNhw6fDo28sIG8gYGVudmlyb25tZW50YCBhbGltZW50YSBhIHByb3ByaWVkYWRlXG4gICAqIGBwLWVudmlyb25tZW50YCwgYHJlY292ZXJ5YCDDqSBhIGludGVyZmFjZSBgUG9QYWdlTG9naW5SZWNvdmVyeWAgcmVzcG9uc8OhdmVsIHBlbGFzIGVzcGVjaWZpY2HDp8O1ZXMgY29udGlkYXMgbmEgbW9kYWwgZGUgcmVjdXBlcmHDp8OjbyBkZVxuICAgKiBzZW5oYSwgYHJlZ2lzdGVyVXJsYCBhbGltZW50YSBhIHByb3ByaWVkYWRlIGBwLXJlZ2lzdGVyLXVybGAgZSBgYXV0aGVudGljYXRpb25UeXBlYCBxdWUgZGVmaW5lIGEgcHJvcHJpZWRhZGUgYHAtYXV0aGVudGljYXRpb24tdHlwZWAuXG4gICAqXG4gICAqID4gw4kgZXNzZW5jaWFsIHF1ZSBzaWdhIGEgbm9tZW5jbGF0dXJhIGRvcyBhdHJpYnV0b3MgZXhlbXBsaWZpY2Fkb3MgYWNpbWEgcGFyYSBzdWEgZWZldGl2YSBmdW5jaW9uYWxpZGFkZS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1hdXRoZW50aWNhdGlvbi11cmwnKSBzZXQgYXV0aGVudGljYXRpb25VcmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uVXJsID0gaXNUeXBlb2YodmFsdWUsICdzdHJpbmcnKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGF1dGhlbnRpY2F0aW9uVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQ2FzbyBvIHZhbG9yIGF0cmlidcOtZG8gcGFyYSBgcC1leGNlZWRlZC1hdHRlbXB0cy13YXJuaW5nYCBzZWphIGlndWFsIGEgMCh6ZXJvKSBlIGEgYXBsaWNhw6fDo28gdGVuaGEgdW0gbGluayBkZSBibG9xdWVpbyBkZSB1c3XDoXJpbyxcbiAgICogaW5mb3JtZSB1bWEgdXJsIGV4dGVybmEgb3UgdW1hIHJvdGEgdsOhbGlkYSwgZGVzc2EgZm9ybWEgZW0gY2FzbyBkZSBibG9xdWVpbyBvIHVzdcOhcmlvIHNlcsOhIHJlZGlyZWNpb25hZG8uXG4gICAqL1xuICBASW5wdXQoJ3AtYmxvY2tlZC11cmwnKSBzZXQgYmxvY2tlZFVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYmxvY2tlZFVybCA9IGlzVHlwZW9mKHZhbHVlLCAnc3RyaW5nJykgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBibG9ja2VkVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jsb2NrZWRVcmw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeGliZSB1bSBib3TDo28gcGFyYSBzdXBvcnRlLlxuICAgKlxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XG4gICAqXG4gICAqIC0gKipTdHJpbmcqKjogVVJMIGV4dGVybmEgb3UgdW1hIHJvdGEgdsOhbGlkYTtcbiAgICogLSAqKkZ1bmN0aW9uKio6IEZ1bsOnw6NvIGEgc2VyIGRpc3BhcmFkYSBhbyBjbGljYXIgbm8gYm90w6NvIGRlIHN1cG9ydGU7XG4gICAqIGBgYFxuICAgKiA8cG8tcGFnZS1sb2dpbj5cbiAgICogICBbcC1zdXBwb3J0XT1cInRoaXMubXlTdXBwb3J0LmJpbmQodGhpcylcIj5cbiAgICogPC9wby1wYWdlLWxvZ2luPlxuICAgKiBgYGBcbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1zdXBwb3J0Jykgc2V0IHN1cHBvcnQodmFsdWU6IHN0cmluZyB8IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy5fc3VwcG9ydCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1cHBvcnQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDb2xlw6fDo28gZGUgaWRpb21hcyBxdWUgbyBjb21wb25lbnRlIGlyw6EgdHJhdGFyIGUgZGlzcG9uaWJpbGl6YXLDoSBwYXJhIG8gdXN1w6FyaW8gZXNjb2xoZXIuXG4gICAqXG4gICAqIENhc28gZXNzYSBwcm9wcmllZGFkZSBuw6NvIHNlamEgdXRpbGl6YWRhIG8gY29tcG9uZW50ZSBtb3N0cmFyw6Egbm8gY29tYm8gb3MgaWRpb21hcyBxdWUgZWxlIHN1cG9ydGEgcG9yIHBhZHLDo28uXG4gICAqXG4gICAqIENhc28gYSBjb2xlw6fDo28gdGVuaGEgdW0gaWRpb21hLCBhIHDDoWdpbmEgZXN0YXLDoSBuZXNzZSBpZGlvbWEgZSBuw6NvIG1vc3RyYXLDoSBvIGNvbWJvLlxuICAgKlxuICAgKiBDYXNvIHNlamEgcGFzc2FkbyB1bSBhcnJheSB2YXppbywgYSBww6FnaW5hIHRlcsOhIG8gaWRpb21hIGNvbmZpZ3VyYWRvIG5vIGBpMThuYCBlIG7Do28gbW9zdHJhcsOhIG8gY29tYm8gZGUgc2VsZcOnw6NvLlxuICAgKlxuICAgKiA+IFNlIGZvciBwYXNzYWRvIHVtIGlkaW9tYSBuw6NvIHN1cG9ydGFkbywgc2Vyw6EgcHJlY2lzbyBwYXNzYXIgYXMgbGl0ZXJhaXMgcGVsYSBwcm9wcmllZGFkZSBgcC1saXRlcmFsc2AuXG4gICAqXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtbGFuZ3VhZ2VzJykgc2V0IGxhbmd1YWdlc0xpc3QobGFuZ3VhZ2VzTGlzdDogQXJyYXk8UG9MYW5ndWFnZT4pIHtcbiAgICBpZiAobGFuZ3VhZ2VzTGlzdCkge1xuICAgICAgaWYgKGxhbmd1YWdlc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlc0xpc3QgPSBsYW5ndWFnZXNMaXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2VzTGlzdCA9IHBvTGFuZ3VhZ2VEZWZhdWx0LmZpbHRlcihsYW5ndWFnZSA9PiBsYW5ndWFnZS5sYW5ndWFnZSA9PT0gdGhpcy5sYW5ndWFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxhbmd1YWdlc0xpc3QoKTogQXJyYXk8UG9MYW5ndWFnZT4ge1xuICAgIGlmICh0aGlzLl9sYW5ndWFnZXNMaXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VzTGlzdDtcbiAgICB9XG4gICAgcmV0dXJuIHBvTGFuZ3VhZ2VEZWZhdWx0O1xuICB9XG5cbiAgZ2V0IHNob3dMYW5ndWFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZXNMaXN0Lmxlbmd0aCA+IDE7XG4gIH1cblxuICBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExhbmd1YWdlIHx8IGdldFNob3J0QnJvd3Nlckxhbmd1YWdlKCk7XG4gIH1cblxuICBnZXQgcGFnZUxvZ2luTGl0ZXJhbHMoKTogUG9QYWdlTG9naW5MaXRlcmFscyB7XG4gICAgY29uc3QgbG9naW5IaW50V2l0aENvbnRhY3RFbWFpbCA9IHRoaXMuY29udGFjdEVtYWlsXG4gICAgICA/IHRoaXMuY29uY2F0ZW5hdGVMb2dpbkhpbnRXaXRoQ29udGFjdEVtYWlsKHRoaXMuY29udGFjdEVtYWlsKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucG9QYWdlTG9naW5MaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgIC4uLnBvUGFnZUxvZ2luTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuICAgICAgLi4ubG9naW5IaW50V2l0aENvbnRhY3RFbWFpbCxcbiAgICAgIC4uLnRoaXMubGl0ZXJhbHNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IFBvUGFnZUxvZ2luU2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHVibGljIHBvTGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgPSB0aGlzLnBvTGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmxvZ2luU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmxvZ2luU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VQb3BvdmVyKCkge1xuICAgIHRoaXMuc2hvd0V4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkxvZ2luU3VibWl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ2luRm9ybTogUG9QYWdlTG9naW4gPSB7XG4gICAgICBsb2dpbjogdGhpcy5sb2dpbixcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgcmVtZW1iZXJVc2VyOiB0aGlzLnJlbWVtYmVyVXNlclxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jdXN0b21GaWVsZCkge1xuICAgICAgbG9naW5Gb3JtW3RoaXMuY3VzdG9tRmllbGRPYmplY3QucHJvcGVydHldID0gdGhpcy5jdXN0b21GaWVsZE9iamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdXRoZW50aWNhdGlvblVybCkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9naW5TdWJzY3JpcHRpb24gPSB0aGlzLmxvZ2luU2VydmljZVxuICAgICAgICAub25Mb2dpbih0aGlzLmF1dGhlbnRpY2F0aW9uVXJsLCB0aGlzLmF1dGhlbnRpY2F0aW9uVHlwZSwgbG9naW5Gb3JtKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXNUb1Byb3BlcnRpZXMoKTtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ1BPX1VTRVJfTE9HSU4nLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgICAgICB0aGlzLm9wZW5JbnRlcm5hbExpbmsoJy8nKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLmNvZGUgPT09ICc0MDAnIHx8IGVycm9yLmVycm9yLmNvZGUgPT09ICc0MDEnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVzVG9Qcm9wZXJ0aWVzKGVycm9yKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdEJsb2NrZWRVcmwodGhpcy5leGNlZWRlZEF0dGVtcHRzV2FybmluZywgdGhpcy5ibG9ja2VkVXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dpblN1Ym1pdC5lbWl0KGxvZ2luRm9ybSk7XG4gICAgICB0aGlzLnNob3dFeGNlZWRlZEF0dGVtcHRzV2FybmluZyA9IHRoaXMuZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcgPiAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEN1c3RvbUZpZWxkT2JqZWN0KHByb3BlcnR5KTogUG9QYWdlTG9naW5DdXN0b21GaWVsZCB7XG4gICAgcmV0dXJuIHsgcHJvcGVydHkgfTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkV4dGVybmFsTGluayh1cmw6IHN0cmluZykge1xuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuSW50ZXJuYWxMaW5rKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdEJsb2NrZWRVcmwoYXR0ZW1wdHM6IG51bWJlciwgYmxvY2tlZFVybDogc3RyaW5nKSB7XG4gICAgaWYgKGF0dGVtcHRzID09PSAwICYmIGJsb2NrZWRVcmwpIHtcbiAgICAgIHRoaXMuc2hvd0V4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nID0gZmFsc2U7XG4gICAgICBpc0V4dGVybmFsTGluayhibG9ja2VkVXJsKSA/IHRoaXMub3BlbkV4dGVybmFsTGluayhibG9ja2VkVXJsKSA6IHRoaXMub3BlbkludGVybmFsTGluayhibG9ja2VkVXJsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlc1RvUHJvcGVydGllcyhyZXN1bHQ/KSB7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgdGhpcy5leGNlZWRlZEF0dGVtcHRzV2FybmluZyA9IHJlc3VsdC5lcnJvci5tYXhBdHRlbXB0c1JlbWFpbmluZztcbiAgICAgIHRoaXMubG9naW5FcnJvcnMgPSByZXN1bHQuZXJyb3IubG9naW5XYXJuaW5ncztcbiAgICAgIHRoaXMucGFzc3dvcmRFcnJvcnMgPSByZXN1bHQuZXJyb3IucGFzc3dvcmRXYXJuaW5ncztcbiAgICAgIHRoaXMuYmxvY2tlZFVybCA9IHJlc3VsdC5lcnJvci5ibG9ja2VkVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nID0gMDtcbiAgICAgIHRoaXMubG9naW5FcnJvcnMgPSBbXTtcbiAgICAgIHRoaXMucGFzc3dvcmRFcnJvcnMgPSBbXTtcbiAgICAgIHRoaXMuYmxvY2tlZFVybCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb25jYXRlbmF0ZUxvZ2luSGludFdpdGhDb250YWN0RW1haWwoY29udGFjdEVtYWlsOiBzdHJpbmcpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRMb2dpbkVycm9ycyh2YWx1ZTogQXJyYXk8c3RyaW5nPik6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFBhc3N3b3JkRXJyb3JzKHZhbHVlOiBBcnJheTxzdHJpbmc+KTogdm9pZDtcbn1cbiJdfQ==
1099
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1sb2dpbi1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1sb2dpbi9wby1wYWdlLWxvZ2luLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkgsT0FBTyxFQUFxQixlQUFlLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUd6RyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7QUFNL0YsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUc7SUFDeEMsRUFBRSxFQUF1QjtRQUN2QixLQUFLLEVBQUUsU0FBUztRQUNoQixpQkFBaUIsRUFBRSxlQUFlO1FBQ2xDLFNBQVMsRUFBRTt1REFDd0M7UUFDbkQsZ0JBQWdCLEVBQUUsb0JBQW9CO1FBQ3RDLG9CQUFvQixFQUFFLGtCQUFrQjtRQUN4QyxtQkFBbUIsRUFBRSxzQkFBc0I7UUFDM0MsdUJBQXVCLEVBQUUsZUFBZTtRQUN4QyxzQkFBc0IsRUFBRSxzQkFBc0I7UUFDOUMsWUFBWSxFQUFFLGlCQUFpQjtRQUMvQixnQkFBZ0IsRUFBRSxxREFBcUQ7UUFDdkUsV0FBVyxFQUFFLE9BQU87UUFDcEIsY0FBYyxFQUFFLFlBQVk7UUFDNUIsY0FBYyxFQUFFLHVCQUF1QjtRQUN2QyxhQUFhLEVBQUUsRUFBRTtRQUNqQixXQUFXLEVBQUUsY0FBYztR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Qyw2QkFBNkI7WUF1QkQsZ0JBQWdCO2tCQUFsRCxLQUFLO21CQUFDLHNCQUFzQjtZQXVFSixRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFtQkssT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBZUksS0FBSztrQkFBMUIsS0FBSzttQkFBQyxTQUFTO1lBbUJhLFdBQVc7a0JBQXZDLEtBQUs7bUJBQUMsZ0JBQWdCO1lBZVMsY0FBYztrQkFBN0MsS0FBSzttQkFBQyxtQkFBbUI7WUE2QkQsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBc0JVLFdBQVc7a0JBQXZDLEtBQUs7bUJBQUMsZ0JBQWdCO1lBdUNhLGtCQUFrQjtrQkFBckQsS0FBSzttQkFBQyx1QkFBdUI7WUEySEssaUJBQWlCO2tCQUFuRCxLQUFLO21CQUFDLHNCQUFzQjtZQWdCRCxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUEwQkUsT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBeUJRLGFBQWE7a0JBQXRDLEtBQUs7bUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgY29udmVydFRvSW50LCBnZXRTaG9ydEJyb3dzZXJMYW5ndWFnZSwgaXNFeHRlcm5hbExpbmssIGlzVHlwZW9mIH0gZnJvbSAnLi8uLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UsIHBvTG9jYWxlRGVmYXVsdCwgUG9MYW5ndWFnZSwgcG9MYW5ndWFnZURlZmF1bHQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IFBvUGFnZUxvZ2luIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtbG9naW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUxvZ2luQXV0aGVudGljYXRpb25UeXBlIH0gZnJvbSAnLi9lbnVtcy9wby1wYWdlLWxvZ2luLWF1dGhlbnRpY2F0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQb1BhZ2VMb2dpbkN1c3RvbUZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtbG9naW4tY3VzdG9tLWZpZWxkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VMb2dpbkxpdGVyYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtbG9naW4tbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUxvZ2luUmVjb3ZlcnkgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1sb2dpbi1yZWNvdmVyeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9wby1wYWdlLWxvZ2luLnNlcnZpY2UnO1xuXG5jb25zdCBwb1BhZ2VMb2dpbkNvbnRlbnRNYXhMZW5ndGggPSA0MDtcblxuZXhwb3J0IGNvbnN0IHBvUGFnZUxvZ2luTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvUGFnZUxvZ2luTGl0ZXJhbHM+e1xuICAgIHRpdGxlOiAnV2VsY29tZScsXG4gICAgbG9naW5FcnJvclBhdHRlcm46ICdJbnZhbGlkIExvZ2luJyxcbiAgICBsb2dpbkhpbnQ6IGBZb3VyIGxvZ2luIHVzZXIgd2FzIGdpdmVuIHRvIHlvdSBhdCB5b3VyIGZpcnN0IGRheS5cbiAgICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGlzIGluZm9ybWF0aW9uIGNvbnRhY3Qgc3VwcG9ydGAsXG4gICAgbG9naW5QbGFjZWhvbGRlcjogJ0luc2VydCB5b3VyIGUtbWFpbCcsXG4gICAgcGFzc3dvcmRFcnJvclBhdHRlcm46ICdJbnZhbGlkIFBhc3N3b3JkJyxcbiAgICBwYXNzd29yZFBsYWNlaG9sZGVyOiAnSW5zZXJ0IHlvdXIgcGFzc3dvcmQnLFxuICAgIGN1c3RvbUZpZWxkRXJyb3JQYXR0ZXJuOiAnSW52YWxpZCB2YWx1ZScsXG4gICAgY3VzdG9tRmllbGRQbGFjZWhvbGRlcjogJ1BsZWFzZSBlbnRlciBhIHZhbHVlJyxcbiAgICByZW1lbWJlclVzZXI6ICdBdXRvbWF0aWMgbG9naW4nLFxuICAgIHJlbWVtYmVyVXNlckhpbnQ6ICdZb3UgY2FuIGRpc2FibGUgdGhpcyBvcHRpb24gaW4gc3lzdGVtIGNvbmZpZ3VyYXRpb24nLFxuICAgIHN1Ym1pdExhYmVsOiAnRW50ZXInLFxuICAgIHN1Ym1pdHRlZExhYmVsOiAnTG9hZGluZy4uLicsXG4gICAgZm9yZ290UGFzc3dvcmQ6ICdGb3Jnb3QgeW91ciBQYXNzd29yZD8nLFxuICAgIGhpZ2hsaWdodEluZm86ICcnLFxuICAgIHJlZ2lzdGVyVXJsOiAnTmV3IHJlZ2lzdGVyJyxcbiAgICB0aXRsZVBvcG92ZXI6ICdPb3BzIScsXG4gICAgZm9yZ290WW91clBhc3N3b3JkOiAnRm9yZ290IHlvdXIgcGFzc3dvcmQ/JyxcbiAgICBpZllvdVRyeUhhcmRlcjogJ0lmIHlvdSB0cnkgJyxcbiAgICBhdHRlbXB0czogJ3swfSBtb3JlIHRpbWUocykgJyxcbiAgICB5b3VyVXNlcldpbGxCZUJsb2NrZWQ6XG4gICAgICAnd2l0aG91dCBzdWNjZXNzIHlvdXIgdXNlciB3aWxsIGJlIGJsb2NrZWQgYW5kIHlvdSB3aWxsIGJlIGxlZnQgMjQgaG91cnMgd2l0aG91dCBiZWluZyBhYmxlIHRvIGFjY2VzcyA6KCcsXG4gICAgY3JlYXRlQU5ld1Bhc3N3b3JkTm93OiAnQmV0dGVyIGNyZWF0ZSBhIG5ldyBwYXNzd29yZCBub3chIFlvdSB3aWxsIGJlIGFibGUgdG8gbG9nIGludG8gdGhlIHN5c3RlbSByaWdodCBhd2F5LicsXG4gICAgaUZvcmdvdE15UGFzc3dvcmQ6ICdJIGZvcmdvdCBteSBwYXNzd29yZCcsXG4gICAgd2VsY29tZTogJ1dlbGNvbWUnLFxuICAgIHN1cHBvcnQ6ICdTdXBwb3J0J1xuICB9LFxuICBlczogPFBvUGFnZUxvZ2luTGl0ZXJhbHM+e1xuICAgIHRpdGxlOiAnQmllbnZlbmlkbycsXG4gICAgbG9naW5FcnJvclBhdHRlcm46ICdMb2dpbiBpbnbDoWxpZG8nLFxuICAgIGxvZ2luSGludDogYFN1IHVzdWFyaW8gaGEgc2lkbyBlbnRyZWdhZG8gcGFyYSB1c3RlZCBlbiBzdSBwcmltZXIgZMOtYS5cbiAgICBTaSBubyB0aWVuZSBlc3RhIGluZm9ybWFjacOzbiwgcMOzbmdhc2UgZW4gY29udGFjdG8gY29uIGVsIHNvcG9ydGUgdMOpY25pY29gLFxuICAgIGxvZ2luUGxhY2Vob2xkZXI6ICdJbnNlcnRlIHN1IGUtbWFpbCcsXG4gICAgcGFzc3dvcmRFcnJvclBhdHRlcm46ICdDb250cmFzZcOxYSBpbnbDoWxpZGEnLFxuICAgIHBhc3N3b3JkUGxhY2Vob2xkZXI6ICdJbnNlcnRlIHN1IGNvbnRyYXNlw7FhJyxcbiAgICBjdXN0b21GaWVsZEVycm9yUGF0dGVybjogJ1ZhbG9yIG5vIHbDoWxpZG8uJyxcbiAgICBjdXN0b21GaWVsZFBsYWNlaG9sZGVyOiAnUG9yIGZhdm9yIGludHJvZHV6Y2EgdW4gdmFsb3InLFxuICAgIHJlbWVtYmVyVXNlcjogJ0luaWNpbyBkZSBzZXNpw7NuIGF1dG9tw6F0aWNhbWVudGUnLFxuICAgIHJlbWVtYmVyVXNlckhpbnQ6ICdQdWVkZSBkZXNoYWJpbGl0YXIgZXN0YSBvcGNpw7NuIGVuIGVsIG1lbsO6IGRlbCBzaXN0ZW1hLicsXG4gICAgc3VibWl0TGFiZWw6ICdFbnRyYXInLFxuICAgIHN1Ym1pdHRlZExhYmVsOiAnQ2FyZ2FuZG8uLi4nLFxuICAgIGZvcmdvdFBhc3N3b3JkOiAnT2x2aWRhc3RlIHR1IGNvbnRyYXNlw7FhPycsXG4gICAgaGlnaGxpZ2h0SW5mbzogJycsXG4gICAgcmVnaXN0ZXJVcmw6ICdOdWV2byByZWdpc3RybycsXG4gICAgdGl0bGVQb3BvdmVyOiAnT3BhIScsXG4gICAgZm9yZ290WW91clBhc3N3b3JkOiAnT2x2aWRhc3RlIHR1IGNvbnRyYXNlw7FhPycsXG4gICAgaWZZb3VUcnlIYXJkZXI6ICdTaSBpbnRlbnRhIG3DoXMgJyxcbiAgICBhdHRlbXB0czogJ3swfSB2ZXovdmVjZXMgJyxcbiAgICB5b3VyVXNlcldpbGxCZUJsb2NrZWQ6ICdzaW4gw6l4aXRvIHN1IHVzdWFyaW8gc2VyYSBibG9xdWVhZG8geSB1c3RlZCB2w6FzIHBlcm1hbmVjZXIgMjQgaG9yYXMgc2luIHBvZGVyIGFjY2VkZXIgYSA6KCcsXG4gICAgY3JlYXRlQU5ld1Bhc3N3b3JkTm93OlxuICAgICAgJ8KhTWVqb3IgY3JlYXIgdW5hIG51ZXZhIGNvbnRyYXNlw7FhIGFob3JhISBVc3RlZCBwb2Ryw6EgZW50cmFyIGVuIGVsIHNpc3RlbWEgaW5tZWRpYXRhbWVudGUgZGVzcHXDqXMuJyxcbiAgICBpRm9yZ290TXlQYXNzd29yZDogJ09sdmlkZSBtaSBjb250cmFzZcOxYScsXG4gICAgd2VsY29tZTogJ0JpZW52ZW5pZG8nLFxuICAgIHN1cHBvcnQ6ICdTb3BvcnRlJ1xuICB9LFxuICBwdDogPFBvUGFnZUxvZ2luTGl0ZXJhbHM+e1xuICAgIHRpdGxlOiAnQmVtLXZpbmRvJyxcbiAgICBsb2dpbkVycm9yUGF0dGVybjogJ0xvZ2luIGludsOhbGlkbycsXG4gICAgbG9naW5IaW50OiBgU2V1IHVzdcOhcmlvIGZvaSBlbnRyZWd1ZSBhIHZvY8OqIG5vIHNldSBwcmltZWlybyBkaWEuXG4gICAgQ2FzbyBuw6NvIHRlbmhhIG1haXMgZXNzYSBpbmZvcm1hw6fDo28gY29udGFjdGUgbyBzdXBvcnRlYCxcbiAgICBsb2dpblBsYWNlaG9sZGVyOiAnSW5zaXJhIHNldSBlLW1haWwnLFxuICAgIHBhc3N3b3JkRXJyb3JQYXR0ZXJuOiAnU2VuaGEgaW52w6FsaWRhJyxcbiAgICBwYXNzd29yZFBsYWNlaG9sZGVyOiAnSW5zaXJhIHN1YSBzZW5oYScsXG4gICAgY3VzdG9tRmllbGRFcnJvclBhdHRlcm46ICdWYWxvciBpbnbDoWxpZG8uJyxcbiAgICBjdXN0b21GaWVsZFBsYWNlaG9sZGVyOiAnUG9yIGZhdm9yIGluc2lyYSB1bSB2YWxvcicsXG4gICAgcmVtZW1iZXJVc2VyOiAnTG9nYXIgYXV0b21hdGljYW1lbnRlJyxcbiAgICByZW1lbWJlclVzZXJIaW50OiAnVm9jw6ogcG9kZSBkZXNhYmlsaXRhciBlc3NhIG9ww6fDo28gbm8gbWVudSBkbyBzaXN0ZW1hJyxcbiAgICBzdWJtaXRMYWJlbDogJ0VudHJhcicsXG4gICAgc3VibWl0dGVkTGFiZWw6ICdDYXJyZWdhbmRvLi4uJyxcbiAgICBmb3Jnb3RQYXNzd29yZDogJ0VzcXVlY2V1IHN1YSBzZW5oYT8nLFxuICAgIGhpZ2hsaWdodEluZm86ICcnLFxuICAgIHJlZ2lzdGVyVXJsOiAnTm92byByZWdpc3RybycsXG4gICAgdGl0bGVQb3BvdmVyOiAnT3BhIScsXG4gICAgZm9yZ290WW91clBhc3N3b3JkOiAnRXNxdWVjZXUgc3VhIHNlbmhhPycsXG4gICAgaWZZb3VUcnlIYXJkZXI6ICdTZSB0ZW50YXIgbWFpcyAnLFxuICAgIGF0dGVtcHRzOiAnezB9IHZleihlcykgJyxcbiAgICB5b3VyVXNlcldpbGxCZUJsb2NrZWQ6ICdzZW0gc3VjZXNzbyBzZXUgdXN1w6FyaW8gc2Vyw6EgYmxvcXVlYWRvIGUgdm9jw6ogZmljYSAyNCBob3JhcyBzZW0gcG9kZXIgYWNlc3NhciA6KCcsXG4gICAgY3JlYXRlQU5ld1Bhc3N3b3JkTm93OiAnTWVsaG9yIGNyaWFyIHVtYSBzZW5oYSBub3ZhIGFnb3JhISBWb2PDqiB2YWkgcG9kZXIgZW50cmFyIG5vIHNpc3RlbWEgbG9nbyBlbSBzZWd1aWRhLicsXG4gICAgaUZvcmdvdE15UGFzc3dvcmQ6ICdFc3F1ZWNpIG1pbmhhIHNlbmhhJyxcbiAgICB3ZWxjb21lOiAnQm9hcy12aW5kYXMnLFxuICAgIHN1cHBvcnQ6ICdTdXBvcnRlJ1xuICB9LFxuICBydTogPFBvUGFnZUxvZ2luTGl0ZXJhbHM+e1xuICAgIHRpdGxlOiAn0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCEnLFxuICAgIGxvZ2luRXJyb3JQYXR0ZXJuOiAn0J3QtdCy0LXRgNC90YvQuSDQu9C+0LPQuNC9JyxcbiAgICBsb2dpbkhpbnQ6IGDQktCw0Ygg0LvQvtCz0LjQvSDQsdGL0Lsg0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC9INCy0LDQvCDQsiDQv9C10YDQstGL0Lkg0LTQtdC90YwuXG4gICAg0JXRgdC70Lgg0YMg0LLQsNGBINC90LXRgiDRjdGC0L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCwg0L7QsdGA0LDRgtC40YLQtdGB0Ywg0LIg0YHQu9GD0LbQsdGDINC/0L7QtNC00LXRgNC20LrQuGAsXG4gICAgbG9naW5QbGFjZWhvbGRlcjogJ9CS0YHRgtCw0LLRjNGC0LUg0YHQstC+0Lkg0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsnLFxuICAgIHBhc3N3b3JkRXJyb3JQYXR0ZXJuOiAn0J3QtdCy0LXRgNC90YvQuSDQv9Cw0YDQvtC70YwnLFxuICAgIHBhc3N3b3JkUGxhY2Vob2xkZXI6ICfQktCy0LXQtNC40YLQtSDRgdCy0L7QuSDQv9Cw0YDQvtC70YwnLFxuICAgIGN1c3RvbUZpZWxkRXJyb3JQYXR0ZXJuOiAn0J3QtdCy0LXRgNC90L7QtSDQt9C90LDRh9C10L3QuNC1LicsXG4gICAgY3VzdG9tRmllbGRQbGFjZWhvbGRlcjogJ9Cf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDQt9C90LDRh9C10L3QuNC1JyxcbiAgICByZW1lbWJlclVzZXI6ICfQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuNC5INCy0YXQvtC0JyxcbiAgICByZW1lbWJlclVzZXJIaW50OiAn0JLRiyDQvNC+0LbQtdGC0LUg0L7RgtC60LvRjtGH0LjRgtGMINGN0YLRgyDQvtC/0YbQuNGOINCyINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgdC40YHRgtC10LzRiycsXG4gICAgc3VibWl0TGFiZWw6ICfQktC+0LnRgtC4JyxcbiAgICBzdWJtaXR0ZWRMYWJlbDogJzPQsNCz0YDRg9C30LrQsC4uLicsXG4gICAgZm9yZ290UGFzc3dvcmQ6ICfQl9Cw0LHRi9C70Lgg0L/QsNGA0L7Qu9GMPycsXG4gICAgaGlnaGxpZ2h0SW5mbzogJycsXG4gICAgcmVnaXN0ZXJVcmw6ICfQndC+0LLRi9C5INGA0LXQs9C40YHRgtGAJyxcbiAgICB0aXRsZVBvcG92ZXI6ICfQntC5IScsXG4gICAgZm9yZ290WW91clBhc3N3b3JkOiAn0JfQsNCx0YvQu9C4INC/0LDRgNC+0LvRjD8nLFxuICAgIGlmWW91VHJ5SGFyZGVyOiAn0JXRgdC70Lgg0LLRiyDQsdC10LfRg9GB0L/QtdGI0L3QviDQv9C+0L/Ri9GC0LDQtdGC0LXRgdGMINCy0L7QudGC0Lgg0LXRidC1ICcsXG4gICAgYXR0ZW1wdHM6ICd7MH0g0YDQsNC3KNCwKSAnLFxuICAgIHlvdXJVc2VyV2lsbEJlQmxvY2tlZDogJ9CS0LDRiCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0LHRg9C00LXRgiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L0sINC4INCS0Ysg0L7RgdGC0LDQvdC10YLQtdGB0Ywg0L3QsCAyNCDRh9Cw0YHQsCDQsdC10Lcg0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQtNC+0YHRgtGD0L/QsCA6KCcsXG4gICAgY3JlYXRlQU5ld1Bhc3N3b3JkTm93OiAn0JvRg9GH0YjQtSDRgdC+0LfQtNCw0LnRgtC1INC90L7QstGL0Lkg0L/QsNGA0L7Qu9GMINGB0LXQudGH0LDRgSHCoNCS0Ysg0YHQvNC+0LbQtdGC0LUg0YHRgNCw0LfRgyDQstC+0LnRgtC4INCyINGB0LjRgdGC0LXQvNGDLicsXG4gICAgaUZvcmdvdE15UGFzc3dvcmQ6ICfQryDQt9Cw0LHRi9C7INGB0LLQvtC5INC/0LDRgNC+0LvRjCcsXG4gICAgd2VsY29tZTogJ9C00L7QsdGA0L4g0L/QvtC20LDQu9C+0LLQsNGC0YwnLFxuICAgIHN1cHBvcnQ6ICfQn9C+0LTQtNC10YDQttC60LAnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwb1BhZ2VMb2dpbkxpdGVyYWxJbiA9IHtcbiAgZW46ICdpbicsXG4gIGVzOiAnZW4nLFxuICBwdDogJ2VtJyxcbiAgcnU6ICfQsidcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBjb21wb25lbnRlIGBwby1wYWdlLWxvZ2luYCDDqSB1dGlsaXphZG8gY29tbyB0ZW1wbGF0ZSBwYXJhIHRlbGEgZGUgbG9naW4uXG4gKiBDb20gZWxlIMOpIHBvc3PDrXZlbCBkZWZpbmlybW9zIHZhbG9yZXMgcGFyYSB1c3XDoXJpbywgc2VuaGEgZSBkZWZpbmlyIGHDp8O1ZXMgcGFyYSByZWN1cGVyYcOnw6NvIGRlIHNlbmhhIGUgZ3JhdmHDp8OjbyBkZSBkYWRvcyBkbyB1c3XDoXJpby5cbiAqIFRhbWLDqW0gw6kgcG9zc8OtdmVsIGluc2VyaXIgdW1hIGltYWdlbSBlbSBjb25qdW50byBjb20gdW0gdGV4dG8gZGUgZGVzdGFxdWUuXG4gKlxuICpcbiAqIEEgcHJvcHJpZWRhZGUgYHAtYXV0aGVudGljYXRpb24tdXJsYCBhdXRvbWF0aXphIGEgcm90aW5hIGRvIGNvbXBvbmVudGUgZSBzaW1wbGlmaWNhIG8gcHJvY2Vzc28gcGFyYSBhdXRlbnRpY2HDp8OjbyBkbyB1c3XDoXJpbywgYmFzdGFuZG9cbiAqIGRlZmluaXIgdW1hIHVybCBwYXJhIHJlcXVpc2nDp8OjbyBkYSBhdXRlbnRpY2HDp8Ojby4gQSBmbGV4aWJpbGlkYWRlIGUgcHJhdGljaWRhZGUgcG9kZW0gY2hlZ2FyIGEgdW0gbsOtdmVsIGVtIHF1ZSBvIGRlc2Vudm9sdmltZW50b1xuICogZGEgYXBsaWNhw6fDo28gbm8gKmNsaWVudCBzaWRlKiDDqSBkZXNwcm92aWRhIGRlIHF1YWxxdWVyIGPDs2RpZ28tZm9udGUgcmVsYWNpb25hZG8gw6Agcm90aW5hIGRlIGxvZ2luIGRlIHVzdcOhcmlvLlxuICogU2V1IGRldGFsaGFtZW50byBwYXJhIHVzbyBwb2RlIHNlciB2aXN0byBsb2dvIGFiYWl4byBlbSAqcHJvcHJpZWRhZGVzKi5cbiAqIENhc28ganVsZ3VlIG5lY2Vzc8OhcmlvLCBwb2RlLXNlIHRhbWLDqW0gZGVmaW5pciBtYW51YWxtZW50ZSBhIHJvdGluYSBkbyBjb21wb25lbnRlLlxuICpcbiAqXG4gKiBQYXJhIHF1ZSBhcyBpbWFnZW5zIHNlamFtIGV4aWJpZGFzIGNvcnJldGFtZW50ZSwgw6kgbmVjZXNzw6FyaW8gaW5jbHVpciBvIGNhbWluaG8gZGVsYXMgYW8gcHJvamV0by4gUGFyYSBpc3NvLCBlZGl0ZVxuICogbyAqYXNzZXRzKiBubyBhcnF1aXZvICoqYW5ndWxhci5qc29uKiogZGEgYXBsaWNhw6fDo28gbmEgc2VndWludGUgb3JkZW06XG4gKiBgYGBcbiAqICAgXCJhc3NldHNcIjogW1xuICogICAgIFwic3JjL2Fzc2V0c1wiLFxuICogICAgIFwic3JjL2Zhdmljb24uaWNvXCIsXG4gKiAgICAge1xuICogICAgICAgXCJnbG9iXCI6IFwiKipcXC8qXCIsXG4gKiAgICAgICBcImlucHV0XCI6IFwibm9kZV9tb2R1bGVzL0Bwby11aS9zdHlsZS9pbWFnZXNcIixcbiAqICAgICAgIFwib3V0cHV0XCI6IFwiYXNzZXRzL2ltYWdlc1wiXG4gKiAgICAgfVxuICogICBdXG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9QYWdlTG9naW5CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIE8gYHAtYmFja2dyb3VuZGAgcGVybWl0ZSBpbnNlcmlyIHVtYSBpbWFnZW0gZGUgZGVzdGFxdWUgYW8gbGFkbyBkaXJlaXRvIGRvIGZvcm11bMOhcmlvIGRlIGxvZ2luLCBjYXNvIGEgcHJvcHJpZWRhZGVcbiAgICogbsOjbyBzZWphIHByZWVuY2hpZGEgbyBmb3JtdWzDoXJpbyBzZXLDoSBjZW50cmFsaXphZG8gbm8gZXNwYcOnbyBkaXNwb27DrXZlbC5cbiAgICpcbiAgICogQSBmb250ZSBkYSBpbWFnZW0gcG9kZSBzZXIgZGUgdW0gY2FtaW5obyBsb2NhbCBvdSB1bWEgdXJsIGRlIHVtIHNlcnZpZG9yIGV4dGVybm8uXG4gICAqXG4gICAqIEFsw6ltIGRhIGltYWdlbSwgw6kgcG9zc8OtdmVsIGFkaWNpb25hciB1bSB0ZXh0byBpbmZvcm1hdGl2byBwb3IgY2ltYSBkYSBpbWFnZW0gZGEgaW1hZ2VtIGRlIGRlc3RhcXVlLCBwYXJhIGlzc28gaW5mb3JtZVxuICAgKiB1bSB2YWxvciBwYXJhIGEgbGl0ZXJhbCBgaGlnaGxpZ2h0SW5mb2AuXG4gICAqXG4gICAqID4gVmVqYSBtYWlzIHNvYnJlIGFzIGxpdGVyYWlzIG5hIHByb3ByaWVkYWRlIGBwLWxpdGVyYWxzYC5cbiAgICpcbiAgICogRXhlbXBsb3MgZGUgdmFsb3JlcyB2w6FsaWRvczpcbiAgICogLSAqKmxvY2FsKio6IGAuL2Fzc2V0cy9pbWFnZXMvbG9naW4tYmFja2dyb3VuZC5wbmdgXG4gICAqIC0gKip1cmwgZXh0ZXJuYSoqOiBgaHR0cHM6Ly9wby11aS5pby9hc3NldHMvaW1hZ2VzL2xvZ2luLWJhY2tncm91bmQucG5nYFxuICAgKlxuICAgKiA+IEVzc2EgcHJvcHJpZWRhZGUgw6kgaWdub3JhZGEgcGFyYSBhcGxpY2HDp8O1ZXMgbW9iaWxlLlxuICAgKi9cbiAgQElucHV0KCdwLWJhY2tncm91bmQnKSBiYWNrZ3JvdW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENhbWluaG8gcGFyYSBhIGxvZ29tYXJjYSBsb2NhbGl6YWRhIG5hIHBhcnRlIHN1cGVyaW9yLlxuICAgKlxuICAgKiA+IENhc28gc2VqYSBpbmRlZmluaWRhIG8gZXNwYcOnbyBzZSBtYW50w6ltIHByZXNlcnZhZG8gcG9yw6ltIHZhemlvLlxuICAgKi9cbiAgQElucHV0KCdwLWxvZ28nKSBsb2dvPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV4cHJlc3PDo28gcmVndWxhciBwYXJhIHZhbGlkYXIgbyBjYW1wbyBkZSBsb2dpbiwgY2FzbyBhIGV4cHJlc3PDo28gbsOjbyBzZWphIGF0ZW50aWRhLCBhIGxpdGVyYWwgYGxvZ2luRXJyb3JQYXR0ZXJuYFxuICAgKiBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKiBFeGVtcGxvcyBkZSB2YWxvcmVzIHbDoWxpZG9zOlxuICAgKiAtIGVtYWlsOiBgW2V4cHJlc3Nhby1yZWd1bGFyLWVtYWlsXWBcbiAgICogLSBjcGY6IGBbZXhwcmVzc2FvLXJlZ3VsYXItY3BmXWBcbiAgICpcbiAgICogPiBWZWphIGEgcHJvcHJpZWRhZGUgYHAtbGl0ZXJhbHNgIHBhcmEgY3VzdG9taXphciBhIGxpdGVyYWwgYGxvZ2luRXJyb3JQYXR0ZXJuYC5cbiAgICovXG4gIEBJbnB1dCgncC1sb2dpbi1wYXR0ZXJuJykgbG9naW5QYXR0ZXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV4cHJlc3PDo28gcmVndWxhciBwYXJhIHZhbGlkYXIgbyBjYW1wbyBkZSBwYXNzd29yZCwgY2FzbyBhIGV4cHJlc3PDo28gbsOjbyBzZWphIGF0ZW50aWRhLCBhIGxpdGVyYWwgYHBhc3N3b3JkRXJyb3JQYXR0ZXJuYFxuICAgKiBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKiBFeGVtcGxvcyBkZSB2YWxvcmVzIHbDoWxpZG9zOlxuICAgKiAtIEFwZW5hcyBuw7ptZXJvczogYFxcZD9gXG4gICAqIC0gTGV0cmFzIG3DrW51c2N1bGFzOiBgXFx6P2BcbiAgICpcbiAgICogPiBWZWphIGEgcHJvcHJpZWRhZGUgYHAtbGl0ZXJhbHNgIHBhcmEgY3VzdG9taXphciBhIGxpdGVyYWwgYHBhc3N3b3JkRXJyb3JQYXR0ZXJuYC5cbiAgICovXG4gIEBJbnB1dCgncC1wYXNzd29yZC1wYXR0ZXJuJykgcGFzc3dvcmRQYXR0ZXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENhbWluaG8gcGFyYSBhIGxvZ29tYXJjYSBsb2NhbGl6YWRhIG5vIHJvZGFww6kuXG4gICAqL1xuICBASW5wdXQoJ3Atc2Vjb25kYXJ5LWxvZ28nKSBzZWNvbmRhcnlMb2dvPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gcXVhbmRvIG8gdXN1w6FyaW8gYWx0ZXJhciBvIGlucHV0IGRvIGNhbXBvIGxvZ2luLlxuICAgKlxuICAgKiBFc3NlIGV2ZW50byByZWNlYmVyw6EgY29tbyBwYXLDom1ldHJvIHVtYSB2YXJpw6F2ZWwgZG8gdGlwbyBgc3RyaW5nYCBjb20gbyB0ZXh0byBpbmZvcm1hZG8gbm8gY2FtcG8uXG4gICAqXG4gICAqID4gRXN0YSBwcm9wcmllZGFkZSBzZXLDoSBpZ25vcmFkYSBzZSBmb3IgZGVmaW5pZG8gdmFsb3IgcGFyYSBhIHByb3ByaWVkYWRlIGBwLWF1dGhlbnRpY2F0aW9uLXVybGAuXG4gICAqL1xuICBAT3V0cHV0KCdwLWxvZ2luLWNoYW5nZScpIGxvZ2luQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIHN1Ym1ldGVyIG8gZm9ybXVsw6FyaW8gZGUgbG9naW4gKGFwZXJ0YW5kbyBgRW50ZXJgIGRlbnRybyBkb3MgY2FtcG9zIG91IHByZXNzaW9uYW5kbyBvIGJvdMOjbyBkZSBjb25maXJtYcOnw6NvKS5cbiAgICpcbiAgICogRXNzZSBldmVudG8gcmVjZWJlcsOhIGNvbW8gcGFyw6JtZXRybyB1bSBvYmpldG8gZG8gdGlwbyBgUG9QYWdlTG9naW5gIGNvbSBvcyBkYWRvcyBpbmZvcm1hZG9zIG5vIGZvcm11bMOhcmlvLlxuICAgKlxuICAgKiA+IEVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgaWdub3JhZGEgc2UgZm9yIGRlZmluaWRvIHZhbG9yIHBhcmEgYSBwcm9wcmllZGFkZSBgcC11cmwtcmVjb3ZlcnlgLlxuICAgKlxuICAgKiA+IFBhcmEgbWFpcyBkZXRhbGhlcyBjb25zdWx0ZSBhIGRvY3VtZW50YcOnw6NvIHNvYnJlIGEgaW50ZXJmYWNlIGBQb1BhZ2VMb2dpbmAgbWFpcyBhYmFpeG8uXG4gICAqL1xuICBAT3V0cHV0KCdwLWxvZ2luLXN1Ym1pdCcpIGxvZ2luU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxQb1BhZ2VMb2dpbj4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZGlzcGFyYWRvIHF1YW5kbyBvIHVzdcOhcmlvIGFsdGVyYXIgbyBpbnB1dCBkbyBjYW1wbyBwYXNzd29yZC5cbiAgICpcbiAgICogRXNzZSBldmVudG8gcmVjZWJlcsOhIGNvbW8gcGFyw6JtZXRybyB1bWEgdmFyacOhdmVsIGRvIHRpcG8gYHN0cmluZ2AgY29tIG8gdGV4dG8gaW5mb3JtYWRvIG5vIGNhbXBvLlxuICAgKlxuICAgKiA+IEVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgaWdub3JhZGEgc2UgZm9yIGRlZmluaWRvIHZhbG9yIHBhcmEgYSBwcm9wcmllZGFkZSBgcC1hdXRoZW50aWNhdGlvbi11cmxgLlxuICAgKi9cbiAgQE91dHB1dCgncC1wYXNzd29yZC1jaGFuZ2UnKSBwYXNzd29yZENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZGlzcGFyYWRvIHF1YW5kbyBvIHVzdcOhcmlvIGFsdGVyYXIgbyBpZGlvbWEgZGEgcMOhZ2luYS5cbiAgICpcbiAgICogRXNzZSBldmVudG8gcmVjZWJlcsOhIGNvbW8gcGFyw6JtZXRybyB1bSBvYmpldG8gZG8gdGlwbyBgUG9MYW5ndWFnZWAgY29tIGEgbGluZ3VhZ2VtIHNlbGVjaW9uYWRhLlxuICAgKlxuICAgKi9cbiAgQE91dHB1dCgncC1sYW5ndWFnZS1jaGFuZ2UnKSBsYW5ndWFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPFBvTGFuZ3VhZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb0xhbmd1YWdlPigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBhIHByb3ByaWVkYWRlIG5hdGl2YSBgYXV0b2NvbXBsZXRlYCBkbyBjYW1wbyBjb21vIGBvZmZgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCgncC1uby1hdXRvY29tcGxldGUtbG9naW4nKSBub0F1dG9jb21wbGV0ZUxvZ2luOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBwcm9wcmllZGFkZSBuYXRpdmEgYGF1dG9jb21wbGV0ZWAgZG8gY2FtcG8gY29tbyBgb2ZmYC5cbiAgICpcbiAgICogPiBObyBjb21wb25lbnRlIGBwby1wYXNzd29yZGAgc2Vyw6EgZGVmaW5pZG8gY29tbyBgbmV3LXBhc3N3b3JkYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICBASW5wdXQoJ3Atbm8tYXV0b2NvbXBsZXRlLXBhc3N3b3JkJykgbm9BdXRvY29tcGxldGVQYXNzd29yZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIHNlIG8gc3RhdHVzIGRvIGBtb2RlbGAgZG8gc3dpdGNoIGRlIGxlbWJyYXIgbyB1c3XDoXJpbyBzZXLDoSBlc2NvbmRpZG8gdmlzdWFsbWVudGUuXG4gICAqXG4gICAqID4gUG9yIHBhZHLDo28gc2Vyw6EgYXRyaWJ1w61kbyBgZmFsc2VgLlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtaGlkZS1sYWJlbC1zdGF0dXMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgaGlkZUxhYmVsU3RhdHVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBlc2NvbmRlciBhIGZ1bsOnw6NvIGRlIGVzcGlhciBhIHNlbmhhIGRpZ2l0YWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1wYXNzd29yZC1wZWVrJykgaGlkZVBhc3N3b3JkUGVlazogYm9vbGVhbjtcblxuICBhbGxMb2dpbkVycm9yczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBhbGxQYXNzd29yZEVycm9yczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBjdXN0b21GaWVsZE9iamVjdDogUG9QYWdlTG9naW5DdXN0b21GaWVsZDtcbiAgY3VzdG9tRmllbGRUeXBlOiBzdHJpbmc7XG4gIGxvZ2luU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlbWVtYmVyVXNlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmc7XG4gIHNob3dFeGNlZWRlZEF0dGVtcHRzV2FybmluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uVHlwZTogUG9QYWdlTG9naW5BdXRoZW50aWNhdGlvblR5cGUgPSBQb1BhZ2VMb2dpbkF1dGhlbnRpY2F0aW9uVHlwZS5CYXNpYztcbiAgcHJpdmF0ZSBfYXV0aGVudGljYXRpb25Vcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBfYmxvY2tlZFVybDogc3RyaW5nO1xuICBwcml2YXRlIF9jb250YWN0RW1haWw6IHN0cmluZztcbiAgcHJpdmF0ZSBfY3VzdG9tRmllbGQ6IHN0cmluZyB8IFBvUGFnZUxvZ2luQ3VzdG9tRmllbGQ7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50Pzogc3RyaW5nO1xuICBwcml2YXRlIF9leGNlZWRlZEF0dGVtcHRzV2FybmluZz86IG51bWJlcjtcbiAgcHJpdmF0ZSBfaGlkZVJlbWVtYmVyVXNlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9saXRlcmFsczogUG9QYWdlTG9naW5MaXRlcmFscztcbiAgcHJpdmF0ZSBfbG9hZGluZz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbG9naW46IHN0cmluZztcbiAgcHJpdmF0ZSBfbG9naW5FcnJvcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHJpdmF0ZSBfcGFzc3dvcmRFcnJvcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHJpdmF0ZSBfcHJvZHVjdE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVjb3Zlcnk6IHN0cmluZyB8IFBvUGFnZUxvZ2luUmVjb3ZlcnkgfCBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBfc3VwcG9ydDogc3RyaW5nIHwgRnVuY3Rpb247XG4gIHByaXZhdGUgX2xhbmd1YWdlc0xpc3Q6IEFycmF5PFBvTGFuZ3VhZ2U+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEFvIGluZm9ybWFyIHVtIHZhbG9yIGRvIHRpcG8gYHN0cmluZ2AsIG8gbWVzbW8gc2Vyw6EgYXBsaWNhZG8gY29tbyBhIGNoYXZlIGRvIGNhbXBvIGN1c3RvbWl6YWRvIGUgdXRpbGl6YXLDoVxuICAgKiBvcyB2YWxvcmVzIHBhZHLDtWVzIGNvbnRpZG9zIG5hIHByb3ByaWVkYWRlIGBsaXRlcmFsc2AgY29tbyBgY3VzdG9tRmllbGRFcnJvclBhdHRlcm5gIGUgYGN1c3RvbUZpZWxkUGxhY2Vob2xkZXJgLlxuICAgKlxuICAgKiBFeGlzdGUgYSBwb3NzaWJpbGlkYWRlIGRlIGluZm9ybWFyIHVtIG9iamV0byBxdWUgc2VndWUgYSBkZWZpbmnDp8OjbyBkYSBpbnRlcmZhY2UgYFBvUGFnZUxvZ2luQ3VzdG9tRmllbGRgLCBvbmRlXG4gICAqIGF0cmF2w6lzIGRvcyBwYXLDom1ldHJvcyBlbnZpYWRvcyBwb2RlIGdlcmFyIHVtIGBwby1pbnB1dGAsIGBwby1jb21ib2AgZXNwZWNpZmljYW1lbnRlIHBhcmEgc2VydmnDp29zXG4gICAqIG91IGBwby1zZWxlY3RgIHBhcmEgdmFsb3JlcyBmaXhvcy5cbiAgICpcbiAgICogQWJhaXhvIHNlZ3VlbSBvcyBleGVtcGxvcyBkZSBjYWRhIHRpcG8gZGUgY2FtcG8uXG4gICAqXG4gICAqIGBwby1pbnB1dGA6XG4gICAqXG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgcHJvcGVydHk6ICdkb21haW4nLFxuICAgKiAgIHZhbHVlOiAnanYwMScsXG4gICAqICAgcGxhY2Vob2xkZXI6ICdFbnRlciB5b3VyIGRvbWFpbicsXG4gICAqICAgcGF0dGVybjogJ1thLXpdJyxcbiAgICogICBlcnJvclBhdHRlcm46ICdJbnZhbGlkIHZhbHVlJ1xuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBgcG8tY29tYm9gOlxuICAgKlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgIHByb3BlcnR5OiAnZG9tYWluJyxcbiAgICogICB2YWx1ZTogJ2p2MDEnLFxuICAgKiAgIHBsYWNlaG9sZGVyOiAnRW50ZXIgeW91ciBkb21haW4nLFxuICAgKiAgIHVybDogJ2h0dHBzOi8vcG8tdWkuaW8vc2FtcGxlL2FwaS9jb21ib09wdGlvbi9kb21haW5zJyxcbiAgICogICBmaWVsZFZhbHVlOiAnbmlja25hbWUnXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIGBwby1zZWxlY3RgOlxuICAgKlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgIHByb3BlcnR5OiAnZG9tYWluJyxcbiAgICogICB2YWx1ZTogJ2p2MDEnLFxuICAgKiAgIHBsYWNlaG9sZGVyOiAnRW50ZXIgeW91ciBkb21haW4nLFxuICAgKiAgIG9wdGlvbnM6IFt7bGFiZWw6ICdEb21haW4gMScsIHZhbHVlOiAnMSd9LCB7bGFiZWw6ICdEb21haW4gMicsIHZhbHVlOiAnMid9XVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBDYXNvIG8gY3VzdG9tRmllbGQgcG9zc3VhIG9wdGlvbnMsIHVybCBlIGZpZWxkVmFsdWUgcHJlZW5jaGlkb3MsIHNlcsOhIHByaW9yaXphZG8gbyBwby1zZWxlY3RcbiAgICogdXRpbGl6YW5kbyBvIG9wdGlvbnMuXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtY3VzdG9tLWZpZWxkJykgc2V0IGN1c3RvbUZpZWxkKHZhbHVlOiBzdHJpbmcgfCBQb1BhZ2VMb2dpbkN1c3RvbUZpZWxkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoaXNUeXBlb2YodmFsdWUsICdzdHJpbmcnKSkge1xuICAgICAgICB0aGlzLmN1c3RvbUZpZWxkVHlwZSA9ICdpbnB1dCc7XG4gICAgICAgIHRoaXMuX2N1c3RvbUZpZWxkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY3VzdG9tRmllbGRPYmplY3QgPSB0aGlzLmdldERlZmF1bHRDdXN0b21GaWVsZE9iamVjdCh2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzVHlwZW9mKHZhbHVlLCAnb2JqZWN0JykgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlWydwcm9wZXJ0eSddKSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbUZpZWxkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY3VzdG9tRmllbGRPYmplY3QgPSA8UG9QYWdlTG9naW5DdXN0b21GaWVsZD52YWx1ZTtcblxuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tRmllbGRPYmplY3Qub3B0aW9ucyAmJiAhdGhpcy5jdXN0b21GaWVsZE9iamVjdC51cmwpIHtcbiAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkVHlwZSA9ICdpbnB1dCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXN0b21GaWVsZFR5cGUgPSB0aGlzLmN1c3RvbUZpZWxkT2JqZWN0Lm9wdGlvbnMgPyAnc2VsZWN0JyA6ICdjb21ibyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fY3VzdG9tRmllbGQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXN0b21GaWVsZE9iamVjdCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBjdXN0b21GaWVsZCgpOiBzdHJpbmcgfCBQb1BhZ2VMb2dpbkN1c3RvbUZpZWxkIHtcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tRmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJzb25hbGl6YSBvIGUtbWFpbCBxdWUgw6kgZXhpYmlkbyBuYSBtZW5zYWdlbSBkZSBkaWNhIGRlIGxvZ2luIHBhZHLDo28gcGFyYSBjb250YXRvIGRlIHN1cG9ydGUuXG4gICAqL1xuICBASW5wdXQoJ3AtY29udGFjdC1lbWFpbCcpIHNldCBjb250YWN0RW1haWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRhY3RFbWFpbCA9IHZhbHVlO1xuICB9XG4gIGdldCBjb250YWN0RW1haWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRhY3RFbWFpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFRleHRvIGN1c3RvbWl6YWRvIHF1ZSBmaWNhIGVudHJlIGEgbG9nbyBlIGEgbWVuc2FnZW0gZGUgYm9hcy12aW5kYXMuXG4gICAqL1xuICBASW5wdXQoJ3AtcHJvZHVjdC1uYW1lJykgc2V0IHByb2R1Y3ROYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wcm9kdWN0TmFtZSA9IHZhbHVlO1xuICB9XG4gIGdldCBwcm9kdWN0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvZHVjdE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGljaW9uYSB1bWEgYHRhZ2AgYWJhaXhvIGRvIHTDrXR1bG8gcXVlIGVzcGVjaWZpY2EgbyBhbWJpZW50ZSBxdWUgbyB1c3XDoXJpbyBlc3TDoSBmYXplbmRvIG8gbG9naW4uXG4gICAqXG4gICAqID4gRXNzYSBwcm9wcmllZGFkZSBsaW1pdGEgbyB0ZXh0byBlbSA0MCBjYXJhY3RlcmVzLlxuICAgKi9cbiAgQElucHV0KCdwLWVudmlyb25tZW50Jykgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQubGVuZ3RoID4gcG9QYWdlTG9naW5Db250ZW50TWF4TGVuZ3RoKSB7XG4gICAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50LnN1YnN0cmluZygwLCBwb1BhZ2VMb2dpbkNvbnRlbnRNYXhMZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH1cbiAgfVxuICBnZXQgZW52aXJvbm1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXhpYmUgdW0gYXZpc28gZGUgYmxvcXVlaW8gZGUgYWNvcmRvIGNvbSBhIHF1YW50aWRhZGUgcmVzdGFudGUgZGUgdGVudGF0aXZhcy5cbiAgICogTyBhdmlzbyBzZXLDoSBleGliaWRvIHNvbWVudGUgc2UgYSBxdWFudGlkYWRlIGZvciBtYWlvciBxdWUgemVyby5cbiAgICpcbiAgICogPiBDYXNvIHRlbmhhIGFsZ3VtIHZhbG9yIGF0cmlidcOtZG8gcGFyYSBvIGF0cmlidXRvIGBwLWF1dGhlbnRpY2F0aW9uLXVybGAgZSBvIHJldG9ybm8gZGEgcmVxdWlzacOnw6NvIGVzdGl2ZXIgYXRyaWJ1aW5kbyB2YWxvclxuICAgKiBwYXJhIG8gYHAtZXhjZWVkZWQtYXR0ZW1wdHMtd2FybmluZ2AsIG8gdmFsb3IgY29uc2lkZXJhZG8gc2Vyw6EgbyBkbyByZXRvcm5vIGRhIHJlcXVpc2nDp8Ojby5cbiAgICpcbiAgICogQGRlZmF1bHQgYDBgXG4gICAqL1xuICBASW5wdXQoJ3AtZXhjZWVkZWQtYXR0ZW1wdHMtd2FybmluZycpIHNldCBleGNlZWRlZEF0dGVtcHRzV2FybmluZyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcgPSBjb252ZXJ0VG9JbnQodmFsdWUpO1xuICAgIHRoaXMuc2hvd0V4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nID0gdGhpcy5leGNlZWRlZEF0dGVtcHRzV2FybmluZyA+IDA7XG4gIH1cblxuICBnZXQgZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmc7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFc2NvbmRlIGEgZnVuw6fDo28gXCJMZW1icmFyIHVzdcOhcmlvXCIgZG8gZm9ybXVsw6FyaW8gZGUgbG9naW4uXG4gICAqXG4gICAqIFF1YW5kbyBlc3NhIHByb3ByaWVkYWRlIMOpIHNldGFkYSBjb20gYHRydWVgIGEgcHJvcHJpZWRhZGUgYHJlbWVtYmVyVXNlcmAgZW52aWFkYSBubyBldmVudG8gYHAtbG9naW4tc3VibWl0YCBzZXLDoSBzZW1wcmVcbiAgICogYGZhbHNlYC5cbiAgICpcbiAgICogPiBWZWphIGEgcHJvcHJpZWRhZGUgYHAtbGl0ZXJhbHNgIHBhcmEgY3VzdG9taXphciBhIGxpdGVyYWwgYHJlbWVtYmVyVXNlcmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1oaWRlLXJlbWVtYmVyLXVzZXInKSBzZXQgaGlkZVJlbWVtYmVyVXNlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpZGVSZW1lbWJlclVzZXIgPSA8YW55PnZhbHVlID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcblxuICAgIGlmICh0aGlzLl9oaWRlUmVtZW1iZXJVc2VyKSB7XG4gICAgICB0aGlzLnJlbWVtYmVyVXNlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBnZXQgaGlkZVJlbWVtYmVyVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZVJlbWVtYmVyVXNlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1wYWdlLWxvZ2luYC5cbiAgICpcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlLCBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpczpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9QYWdlTG9naW5MaXRlcmFscyA9IHtcbiAgICogICAgYXR0ZW1wdHM6ICd7MH0gdmV6KGVzKSAnLFxuICAgKiAgICBjcmVhdGVBTmV3UGFzc3dvcmROb3c6ICdNZWxob3IgY3JpYXIgdW1hIHNlbmhhIG5vdmEgYWdvcmEhIFZvY8OqIHZhaSBwb2RlciBlbnRyYXIgbm8gc2lzdGVtYSBsb2dvIGVtIHNlZ3VpZGEuJyxcbiAgICogICAgZm9yZ290UGFzc3dvcmQ6ICdFc3F1ZWNldSBzdWEgc2VuaGE/JyxcbiAgICogICAgZm9yZ290WW91clBhc3N3b3JkOiAnRXNxdWVjZXUgc3VhIHNlbmhhPycsXG4gICAqICAgIGhpZ2hsaWdodEluZm86ICcnLFxuICAgKiAgICBpRm9yZ290TXlQYXNzd29yZDogJ0VzcXVlY2kgbWluaGEgc2VuaGEnLFxuICAgKiAgICBpZllvdVRyeUhhcmRlcjogJ1NlIHRlbnRhciBtYWlzICcsXG4gICAqICAgIHdlbGNvbWU6ICdCb2FzLXZpbmRhcycsXG4gICAqICAgIGxvZ2luRXJyb3JQYXR0ZXJuOiAnTG9naW4gb2JyaWdhdMOzcmlvJyxcbiAgICogICAgbG9naW5IaW50OiAnQ2FzbyBuw6NvIHBvc3N1YSB1c3XDoXJpbyBlbnRyZSBlbSBjb250YXRvIGNvbSBvIHN1cG9ydGUnLFxuICAgKiAgICBsb2dpbkxhYmVsOiAnSW5zaXJhIHNldSB1c3XDoXJpbycsXG4gICAqICAgIGxvZ2luUGxhY2Vob2xkZXI6ICdJbnNpcmEgc2V1IHVzdcOhcmlvIGRlIGFjZXNzbycsXG4gICAqICAgIHBhc3N3b3JkRXJyb3JQYXR0ZXJuOiAnU2VuaGEgb2JyaWdhdMOzcmlhJyxcbiAgICogICAgcGFzc3dvcmRMYWJlbDogJ0luc2lyYSBzdWEgc2VuaGEnLFxuICAgKiAgICBwYXNzd29yZFBsYWNlaG9sZGVyOiAnSW5zaXJhIHN1YSBzZW5oYSBkZSBhY2Vzc28nLFxuICAgKiAgICBjdXN0b21GaWVsZEVycm9yUGF0dGVybjogJ0NhbXBvIGN1c3RvbWl6YWRvIGludsOhbGlkbycsXG4gICAqICAgIGN1c3RvbUZpZWxkUGxhY2Vob2xkZXI6ICdQb3IgZmF2b3IgaW5zaXJhIHVtIHZhbG9yJyxcbiAgICogICAgcmVnaXN0ZXJVcmw6ICdOb3ZvIHJlZ2lzdHJvJyxcbiAgICogICAgcmVtZW1iZXJVc2VyOiAnTGVtYnJhciB1c3XDoXJpbycsXG4gICAqICAgIHJlbWVtYmVyVXNlckhpbnQ6ICdFc3RhIG9ww6fDo28gcG9kZSBzZXIgZGVzYWJpbGl0YWRhIG5hcyBjb25maWd1cmHDp8O1ZXMgZG8gc2lzdGVtYScsXG4gICAqICAgIHN1Ym1pdExhYmVsOiAnQWNlc3NhciBzaXN0ZW1hJyxcbiAgICogICAgc3VibWl0dGVkTGFiZWw6ICdDYXJyZWdhbmRvLi4uJyxcbiAgICogICAgdGl0bGVQb3BvdmVyOiAnT3BhIScsXG4gICAqICAgIHlvdXJVc2VyV2lsbEJlQmxvY2tlZDogJ3NlbSBzdWNlc3NvIHNldSB1c3XDoXJpbyBzZXLDoSBibG9xdWVhZG8gZSB2b2PDqiBmaWNhIDI0IGhvcmFzIHNlbSBwb2RlciBhY2Vzc2FyIDooJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvUGFnZUxvZ2luTGl0ZXJhbHMgPSB7XG4gICAqICAgIGxvZ2luUGxhY2Vob2xkZXI6ICdJbnNpcmEgc2V1IHVzdcOhcmlvIGRlIGFjZXNzbycsXG4gICAqICAgIHBhc3N3b3JkUGxhY2Vob2xkZXI6ICdJbnNpcmEgc3VhIHNlbmhhIGRlIGFjZXNzbycsXG4gICAqICAgIHN1Ym1pdExhYmVsOiAnQWNlc3NhciBzaXN0ZW1hJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tcGFnZS1sb2dpblxuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tcGFnZS1sb2dpbj5cbiAgICogYGBgXG4gICAqXG4gICAqICA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG8gYnJvd3NlciAocHQsIGVuLCBlcykuXG4gICAqICA+IMOJIHRhbWLDqW0gcG9zc8OtdmVsIGFsdGVybmFyIG8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgYXRyYXbDqXMgZG8gc2VsZXRvciBkZSBpZGlvbWFzIGxvY2FsaXphZG8gbmEgcGFydGUgaW5mZXJpb3IgZG8gdGVtcGxhdGUsXG4gICAqIG5lc3NlIGNhc28sIGjDoSB0YW1iw6ltIGEgb3DDp8OjbyBkbyBpZGlvbWEgcnVzc28uXG4gICAqL1xuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZXQgbGl0ZXJhbHModmFsdWU6IFBvUGFnZUxvZ2luTGl0ZXJhbHMpIHtcbiAgICB0aGlzLl9saXRlcmFscyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIHVtIGVzdGFkbyBkZSBjYXJyZWdhbWVudG8gYW8gYm90w6NvIGRlICpsb2dpbiouXG4gICAqXG4gICAqID4gw4kgbmVjZXNzw6FyaW8gYXRyaWJ1aXIgYHRydWVgIMOgIGVzdGEgcHJvcHJpZWRhZGUgbmEgZnVuw6fDo28gZGVmaW5pZGEgZW0gYHAtbG9naW4tc3VibWl0YC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWRpbmcnKSBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVmFsb3IgZG8gbW9kZWxvIGRvIGNhbXBvIGRlIGxvZ2luLlxuICAgKi9cbiAgQElucHV0KCdwLWxvZ2luJykgc2V0IGxvZ2luKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2dpbiA9IHZhbHVlO1xuXG4gICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0aW9uVXJsKSB7XG4gICAgICB0aGlzLmxvZ2luQ2hhbmdlLmVtaXQodGhpcy5fbG9naW4pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsb2dpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2dpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEF0cmlidXRvIHF1ZSByZWNlYmUgdW1hIGxpc3RhIGRlIGVycm9zIGUgZXhpYmUgYWJhaXhvIGRvIGNhbXBvIGRlIGxvZ2luLlxuICAgKi9cbiAgQElucHV0KCdwLWxvZ2luLWVycm9ycycpIHNldCBsb2dpbkVycm9ycyh2YWx1ZTogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuX2xvZ2luRXJyb3JzID0gdmFsdWUgfHwgW107XG4gICAgdGhpcy5zZXRMb2dpbkVycm9ycyh0aGlzLl9sb2dpbkVycm9ycyk7XG4gIH1cbiAgZ2V0IGxvZ2luRXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2dpbkVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEF0cmlidXRvIHF1ZSByZWNlYmUgdW1hIGxpc3RhIGRlIGVycm9zIGUgZXhpYmUgYWJhaXhvIGRvIGNhbXBvIGRlIHBhc3N3b3JkLlxuICAgKi9cbiAgQElucHV0KCdwLXBhc3N3b3JkLWVycm9ycycpIHNldCBwYXNzd29yZEVycm9ycyh2YWx1ZTogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuX3Bhc3N3b3JkRXJyb3JzID0gdmFsdWUgfHwgW107XG4gICAgdGhpcy5zZXRQYXNzd29yZEVycm9ycyh0aGlzLl9wYXNzd29yZEVycm9ycyk7XG4gIH1cbiAgZ2V0IHBhc3N3b3JkRXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXNzd29yZEVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV4aWJlIHVtIGxpbmsgYWJhaXhvIGRvIGZvcm11bMOhcmlvIGRlIGxvZ2luIHBhcmEgcXVlIG9zIHVzdcOhcmlvcyBkYSBhcGxpY2HDp8OjbyBmYcOnYW0gYSByZWN1cGVyYcOnw6NvIGRvcyBkYWRvcyBkZSBhdXRlbnRpY2HDp8Ojby5cbiAgICpcbiAgICogQSBwcm9wcmllZGFkZSBhY2VpdGEgb3Mgc2VndWludGVzIHRpcG9zOlxuICAgKlxuICAgKiAtICoqU3RyaW5nKio6IGluZm9ybWUgdW1hIHVybCBleHRlcm5hIG91IHVtYSByb3RhIHbDoWxpZGE7XG4gICAqIC0gKipGdW5jdGlvbioqOiBwb2RlLXNlIGN1c3RvbWl6YXIgYSBhw6fDo28uIFBhcmEgZXN0YSBwb3NzaWxpZGFkZSBiYXN0YSBhdHJpYnVpcjpcbiAgICogYGBgXG4gICAqIDxwby1wYWdlLWxvZ2luPlxuICAgKiAgIFtyZWNvdmVyeV09XCJ0aGlzLm15UmVjb3ZlcnkuYmluZCh0aGlzKVwiPlxuICAgKiA8L3BvLXBhZ2UtbG9naW4+XG4gICAqIGBgYFxuICAgKlxuICAgKiAtICoqUG9QYWdlTG9naW5SZWNvdmVyeSoqOiBjcmlhLXNlIHbDrW5jdWxvIGF1dG9tw6F0aWNvIGNvbSBvIHRlbXBsYXRlICoqcG8tbW9kYWwtcGFzc3dvcmQtcmVjb3ZlcnkqKi5cbiAgICogICBPIG9iamV0byBkZXZlIGNvbnRlciBhICoqdXJsKiogcGFyYSByZXF1aXNpw6fDo28gZG9zIHJlY3Vyc29zIGUgcG9kZS1zZSBkZWZpbmlyIG8gKip0aXBvKiogZGUgbW9kYWwgcGFyYSByZWN1cGVyYcOnw6NvIGRlIHNlbmhhLFxuICAgKiAgICoqZW1haWwqKiBwYXJhIGNvbnRhdG8gZSAqKm3DoXNjYXJhKiogZG8gY2FtcG8gZGUgdGVsZWZvbmUuXG4gICAqL1xuICBASW5wdXQoJ3AtcmVjb3ZlcnknKSBzZXQgcmVjb3ZlcnkodmFsdWU6IHN0cmluZyB8IEZ1bmN0aW9uIHwgUG9QYWdlTG9naW5SZWNvdmVyeSkge1xuICAgIHRoaXMuX3JlY292ZXJ5ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcmVjb3ZlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY292ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQ2FzbyBhIGFwbGljYcOnw6NvIHRlbmhhIHVtIGxpbmsgcGFyYSBub3ZvcyBjYWRhc3Ryb3MsIGluZm9ybWUgdW1hIHVybCBleHRlcm5hIG91IHVtYSByb3RhIHbDoWxpZGEsIGRlc3NhXG4gICAqIGZvcm1hIHNlcsOhIGV4aWJpZG8gdW0gbGluayBhYmFpeG8gZG8gZm9ybXVsw6FyaW8gZGUgbG9naW4gcGFyYSBvcyB1c3XDoXJpb3MgZGEgYXBsaWNhw6fDo28uXG4gICAqXG4gICAqIEV4ZW1wbG9zIGRlIHZhbG9yZXMgdsOhbGlkb3M6XG4gICAqIC0gKipsb2NhbCoqOiBgL2hvbWVgXG4gICAqIC0gKip1cmwgZXh0ZXJuYSoqOiBgaHR0cHM6Ly9wby11aS5pb2BcbiAgICpcbiAgICogPiBWZWphIGEgcHJvcHJpZWRhZGUgYHAtbGl0ZXJhbHNgIHBhcmEgY3VzdG9taXphciBhIGxpdGVyYWwgYHJlZ2lzdGVyVXJsYC5cbiAgICovXG4gIEBJbnB1dCgncC1yZWdpc3Rlci11cmwnKSBzZXQgcmVnaXN0ZXJVcmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3JlZ2lzdGVyVXJsID0gaXNUeXBlb2YodmFsdWUsICdzdHJpbmcnKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IHJlZ2lzdGVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXRyaWJ1dG8gcXVlIHJlY2ViZSBvIHRpcG8gZGUgZXNxdWVtYSBkYSBhdXRlbnRpY2HDp8Ojbywgc2VuZG8gc3Vwb3J0YWRvcyBhcGVuYXMgb3MgdmFsb3JlcyBgQmFzaWNgIGUgYEJlYXJlcmAuXG4gICAqXG4gICAqID4gQ2FzbyBvIHRpcG8gZGVmaW5pZG8gc2VqYSBgQmFzaWNgLCBvIGNvbXBvbmVudGUgZmFyw6EgdW1hIHJlcXVpc2nDp8OjbyBgUE9TVGAgY29udGVuZG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBoZWFkZXJzIHtcbiAgICogIEF1dGhvcml6YXRpb246IEJhc2ljIGJhc2U2NChsb2dpbjpwYXNzd29yZClcbiAgICogfVxuICAgKlxuICAgKiBib2R5IHtcbiAgICogIHJlbWVtYmVyVXNlcjogcmVtZW1iZXJVc2VyXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqID4gQ2FzbyBvIHRpcG8gZGVmaW5pZG8gc2VqYSBgQmVhcmVyYCwgbyBjb21wb25lbnRlIGZhcsOhIHVtYSByZXF1aXNpw6fDo28gYFBPU1RgIGNvbnRlbmRvOlxuICAgKlxuICAgKiBgYGBcbiAgICogYm9keSB7XG4gICAqICBsb2dpbjogbG9naW4sXG4gICAqICBwYXNzd29yZDogYmFzZTY0KHBhc3N3b3JkKSxcbiAgICogIHJlbWVtYmVyVXNlcjogcmVtZW1iZXJVc2VyXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBkZWZhdWx0IGBQb1BhZ2VMb2dpbkF1dGhlbnRpY2F0aW9uVHlwZS5CYXNpY2BcbiAgICovXG4gIEBJbnB1dCgncC1hdXRoZW50aWNhdGlvbi10eXBlJykgc2V0IGF1dGhlbnRpY2F0aW9uVHlwZSh2YWx1ZTogUG9QYWdlTG9naW5BdXRoZW50aWNhdGlvblR5cGUpIHtcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvblR5cGUgPSAoPGFueT5PYmplY3QpLnZhbHVlcyhQb1BhZ2VMb2dpbkF1dGhlbnRpY2F0aW9uVHlwZSkuaW5jbHVkZXModmFsdWUpXG4gICAgICA/IHZhbHVlXG4gICAgICA6IFBvUGFnZUxvZ2luQXV0aGVudGljYXRpb25UeXBlLkJhc2ljO1xuICB9XG5cbiAgZ2V0IGF1dGhlbnRpY2F0aW9uVHlwZSgpOiBQb1BhZ2VMb2dpbkF1dGhlbnRpY2F0aW9uVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEVuZHBvaW50IHVzYWRvIHBlbG8gdGVtcGxhdGUgcGFyYSByZXF1aXNpw6fDo28gZG8gcmVjdXJzby4gUXVhbmRvIHByZWVuY2hpZG8sIG8gbcOpdG9kbyBgcC1sb2dpbi1zdWJtaXRgIHNlcsOhIGlnbm9yYWRvIGUgb1xuICAgKiBjb21wb25lbnRlIGFkcXVpcmlyw6EgYXV0b21hdGl6YcOnw6NvIHBhcmEgbyBwcm9jZXNzbyBkZSBhdXRlbnRpY2HDp8Ojby5cbiAgICpcbiAgICogIyMjIFByb2Nlc3Nvc1xuICAgKiBBbyBkaWdpdGFyIHVtIHZhbG9yIHbDoWxpZG8gbm8gY2FtcG8gZGUgbG9naW4vcGFzc3dvcmQgZSBwcmVzc2lvbmFyICoqRW50ZXIqKiwgbyBjb21wb25lbnRlIGZhcsOhIHVtYSByZXF1aXNpw6fDo28gYFBPU1RgXG4gICAqIG5hIHVybCBlc3BlY2lmaWNhZGEgbmVzdGEgcHJvcHJpZWRhZGUgcGFzc2FuZG8gbyBvYmpldG8gY29udGVuZG8gbyB2YWxvciBkZWZpbmlkbyBwZWxvIHVzdcOhcmlvOlxuICAgKlxuICAgKiBgYGBcbiAgICogaGVhZGVycyB7XG4gICAqICBBdXRob3JpemF0aW9uOiBCYXNpYyBiYXNlNjQobG9naW46cGFzc3dvcmQpXG4gICAqIH1cbiAgICpcbiAgICogYm9keSB7XG4gICAqICByZW1lbWJlclVzZXI6IHJlbWVtYmVyVXNlclxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBFbSBjYXNvIGRlICoqc3VjZXNzbyoqLCBvIG9iamV0byBkZSByZXRvcm5vIMOpIGFybWF6ZW5hZG8gbm8gYHNlc3Npb25TdG9yYWdlYCBlIG8gdXN1w6FyaW8gw6kgcmVkaXJlY2lvbmFkbyBwYXJhIGEgcMOhZ2luYSBpbmljaWFsIGRhXG4gICAqIGFwbGljYcOnw6NvIGAvYC5cbiAgICpcbiAgICogYGBgXG4gICAqIDIwMDpcbiAgICogIHtcbiAgICogICAgdXNlcjogdXNlclxuICAgKiAgfVxuICAgKiBgYGBcbiAgICpcbiAgICogRW0gY2FzbyBkZSAqKmVycm8qKiBuYSBhdXRlbnRpY2HDp8OjbywgZXNwZXJhLXNlIG8gc2VndWludGUgcmV0b3JubzpcbiAgICpcbiAgICogYGBgXG4gICAqIDQwMC80MDFcbiAgICogIHtcbiAgICogICAgY29kZTogNDAwLzQwMSxcbiAgICogICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICogICAgZGV0YWlsZWRNZXNzYWdlOiBkZXRhaWxlZE1lc3NhZ2UsXG4gICAqICAgIGhlbHBVcmw/OiBoZWxwVXJsXG4gICAqICB9XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IFBvZGUtc2UgYXRyaWJ1aXIgdW1hIHF1YW50aWRhZGUgbcOheGltYSBkZSB0ZW50YXRpdmFzIHJlc3RhbnRlcyAobWF4QXR0ZW1wdHNSZW1haW5pbmcpIHBhcmEgbyBhdHJpYnV0byBgcC1leGNlZWRlZC1hdHRlbXB0cy13YXJuaW5nYCxcbiAgICogYXNzaW0gY29tbyBvcyBhdmlzb3MgcmVsYWNpb25hZG9zIGFvcyBjYW1wb3MgbG9naW4gZSBwYXNzd29yZCAobG9naW5XYXJuaW5ncywgcGFzc3dvcmRXYXJuaW5ncykgcGFyYSBvcyBhdHJpYnV0b3MgYHAtbG9naW4tZXJyb3JzYCBlXG4gICAqIGBwLXBhc3N3b3JkLWVycm9yc2AgY29uZm9ybWUgcmV0b3JubyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiA0MDBcbiAgICogIHtcbiAgICogICAgY29kZTogNDAwLzQwMSxcbiAgICogICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICogICAgZGV0YWlsZWRNZXNzYWdlOiBkZXRhaWxlZE1lc3NhZ2UsXG4gICAqICAgIGhlbHBVcmw/OiBoZWxwVXJsLFxuICAgKiAgICBtYXhBdHRlbXB0c1JlbWFpbmluZz86IG1heEF0dGVtcHRzUmVtYWluaW5nLFxuICAgKiAgICBsb2dpbldhcm5pbmdzPzogW2xvZ2luV2FybmluZ3NdLFxuICAgKiAgICBwYXNzd29yZFdhcm5pbmdzPzogW3Bhc3N3b3JkV2FybmluZ3NdXG4gICAqICB9XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IENhc28gbyB2YWxvciBhdHJpYnXDrWRvIHBhcmEgYHAtZXhjZWVkZWQtYXR0ZW1wdHMtd2FybmluZ2Agc2VqYSBpZ3VhbCBhIDAoemVybyksIHBvZGVyw6Egc2VyIHBhc3NhZG8gdW0gdmFsb3IgcGFyYSBvXG4gICAqIGF0cmlidXRvIGBwLWJsb2NrZWQtdXJsYCBlIG8gdXN1w6FyaW8gc2Vyw6EgcmVkaXJlY2lvbmFkbyBwYXJhIHVtYSB0ZWxhIGRlIGJsb3F1ZWlvLlxuICAgKlxuICAgKiAqUHJvY2Vzc28gZmluYWxpemFkby4qXG4gICAqXG4gICAqIF9fX19fX19fX19fX19fX1xuICAgKlxuICAgKiAjIyMjIFByYXRpY2lkYWRlXG4gICAqIEFzIGluZm9ybWHDp8O1ZXMgZG8gc2VydmnDp28gZGUgYXV0ZW50aWNhw6fDo28gdGFtYsOpbSBwb2RlbSBzZXIgdHJhbnNtaXRpZGFzIGRpcmV0YW1lbnRlIHBlbGFzIGNvbmZpZ3VyYcOnw6NvcyBkZSByb3RhIGUsIGRlc3RhIG1hbmVpcmEsXG4gICAqIGRpc3BlbnNhLXNlIHF1YWxxdWVyIG1lbsOnw6NvIGUvb3UgaW1wb3J0YcOnw6NvIGRvIGNvbXBvbmVudGUgYHBvLXBhZ2UtbG9naW5gIG5vIHJlc3RhbnRlIGRhIGFwbGljYcOnw6NvLiBPIGV4ZW1wbG8gYWJhaXhvIGV4ZW1wbGlmaWNhXG4gICAqIGEgZm9ybWEgZGluw6JtaWNhIGNvbSBhIHF1YWwgbyB0ZW1wbGF0ZSBkZSB0ZWxhIGRlIGxvZ2luIHBvZGUgc2VyIGdlcmFkbyBhbyBuYXZlZ2FyIHBhcmEgcm90YSBgL2xvZ2luYCwgZSB0YW1iw6ltIGNvbW8gZWxlIHNlIGNvbXVuaWNhXG4gICAqIGNvbSBvIHNlcnZpw6dvIHBhcmEgZWZldHVhw6fDo28gZG8gcHJvY2Vzc28gZGUgYXV0ZW50aWNhw6fDo28gZG8gdXN1w6FyaW8gZSBzb2xpY2l0YcOnw6NvIGRlIG5vdmEgc2VuaGEuXG4gICAqIEJhc3RhIGRlZmluaXIgbmFzIGNvbmZpZ3VyYcOnw7VlcyBkZSByb3RhOlxuICAgKlxuICAgKlxuICAgKiBgYGBcbiAgICogICBpbXBvcnQgeyBQb1BhZ2VMb2dpbkNvbXBvbmVudCwgUG9QYWdlTG9naW5BdGhlbnRpY2F0aW9uVHlwZSB9IGZyb20gJ0Bwby11aS9uZy10ZW1wbGF0ZXMnO1xuICAgKlxuICAgKiAgIC4uLlxuICAgKiAgIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgKiAgICAge1xuICAgKiAgICAgICBwYXRoOiAnbG9naW4nLCBjb21wb25lbnQ6IFBvUGFnZUxvZ2luQ29tcG9uZW50LCBkYXRhOiB7XG4gICAqICAgICAgICAgc2VydmljZUFwaTogJ2h0dHBzOi8vcG8tdWkuaW8vc2FtcGxlL2FwaS91c2Vycy9hdXRoZW50aWNhdGlvbicsXG4gICAqICAgICAgICAgZW52aXJvbm1lbnQ6ICdkZXZlbG9wbWVudCcsXG4gICAqICAgICAgICAgcmVjb3Zlcnk6IHtcbiAgICogICAgICAgICAgIHVybDogJ2h0dHBzOi8vcG8tdWkuaW8vc2FtcGxlL2FwaS91c2VycycsXG4gICAqICAgICAgICAgICB0eXBlOiBQb01vZGFsUGFzc3dvcmRSZWNvdmVyeVR5cGUuQWxsLFxuICAgKiAgICAgICAgICAgY29udGFjdE1haWw6ICdkZXYucG9AcG8tdWkuY29tJyxcbiAgICogICAgICAgICAgIHBob25lTWFzazogJzktOTk5LTk5OS05OTk5J1xuICAgKiAgICAgICAgIH0sXG4gICAqICAgICAgICAgcmVnaXN0ZXJVcmw6ICcvbmV3LXBhc3N3b3JkJyxcbiAgICogICAgICAgICBhdXRoZW50aWNhdGlvblR5cGU6IFBvUGFnZUxvZ2luQXRoZW50aWNhdGlvblR5cGUuQmFzaWNcbiAgICogICAgICAgfVxuICAgKiAgICAgfVxuICAgKiAgICAgLi4uXG4gICAqICAgXTtcbiAgICpcbiAgICogICBATmdNb2R1bGUoe1xuICAgKiAgICAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JSb290KHJvdXRlcyldLFxuICAgKiAgICAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cbiAgICogICB9KVxuICAgKiAgIGV4cG9ydCBjbGFzcyBBcHBSb3V0aW5nTW9kdWxlIHsgfVxuICAgKiBgYGBcbiAgICpcbiAgICpcbiAgICogTyBtZXRhZGFkbyBgc2VydmljZUFwaWAgZGV2ZSBzZXIgYSAqKnVybCoqIHBhcmEgcmVxdWlzacOnw6NvIGRvcyByZWN1cnNvcyBkZSBhdXRlbnRpY2HDp8OjbywgbyBgZW52aXJvbm1lbnRgIGFsaW1lbnRhIGEgcHJvcHJpZWRhZGVcbiAgICogYHAtZW52aXJvbm1lbnRgLCBgcmVjb3ZlcnlgIMOpIGEgaW50ZXJmYWNlIGBQb1BhZ2VMb2dpblJlY292ZXJ5YCByZXNwb25zw6F2ZWwgcGVsYXMgZXNwZWNpZmljYcOnw7VlcyBjb250aWRhcyBuYSBtb2RhbCBkZSByZWN1cGVyYcOnw6NvIGRlXG4gICAqIHNlbmhhLCBgcmVnaXN0ZXJVcmxgIGFsaW1lbnRhIGEgcHJvcHJpZWRhZGUgYHAtcmVnaXN0ZXItdXJsYCBlIGBhdXRoZW50aWNhdGlvblR5cGVgIHF1ZSBkZWZpbmUgYSBwcm9wcmllZGFkZSBgcC1hdXRoZW50aWNhdGlvbi10eXBlYC5cbiAgICpcbiAgICogPiDDiSBlc3NlbmNpYWwgcXVlIHNpZ2EgYSBub21lbmNsYXR1cmEgZG9zIGF0cmlidXRvcyBleGVtcGxpZmljYWRvcyBhY2ltYSBwYXJhIHN1YSBlZmV0aXZhIGZ1bmNpb25hbGlkYWRlLlxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWF1dGhlbnRpY2F0aW9uLXVybCcpIHNldCBhdXRoZW50aWNhdGlvblVybCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYXV0aGVudGljYXRpb25VcmwgPSBpc1R5cGVvZih2YWx1ZSwgJ3N0cmluZycpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgYXV0aGVudGljYXRpb25VcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Vcmw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDYXNvIG8gdmFsb3IgYXRyaWJ1w61kbyBwYXJhIGBwLWV4Y2VlZGVkLWF0dGVtcHRzLXdhcm5pbmdgIHNlamEgaWd1YWwgYSAwKHplcm8pIGUgYSBhcGxpY2HDp8OjbyB0ZW5oYSB1bSBsaW5rIGRlIGJsb3F1ZWlvIGRlIHVzdcOhcmlvLFxuICAgKiBpbmZvcm1lIHVtYSB1cmwgZXh0ZXJuYSBvdSB1bWEgcm90YSB2w6FsaWRhLCBkZXNzYSBmb3JtYSBlbSBjYXNvIGRlIGJsb3F1ZWlvIG8gdXN1w6FyaW8gc2Vyw6EgcmVkaXJlY2lvbmFkby5cbiAgICovXG4gIEBJbnB1dCgncC1ibG9ja2VkLXVybCcpIHNldCBibG9ja2VkVXJsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9ibG9ja2VkVXJsID0gaXNUeXBlb2YodmFsdWUsICdzdHJpbmcnKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGJsb2NrZWRVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYmxvY2tlZFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV4aWJlIHVtIGJvdMOjbyBwYXJhIHN1cG9ydGUuXG4gICAqXG4gICAqIEEgcHJvcHJpZWRhZGUgYWNlaXRhIG9zIHNlZ3VpbnRlcyB0aXBvczpcbiAgICpcbiAgICogLSAqKlN0cmluZyoqOiBVUkwgZXh0ZXJuYSBvdSB1bWEgcm90YSB2w6FsaWRhO1xuICAgKiAtICoqRnVuY3Rpb24qKjogRnVuw6fDo28gYSBzZXIgZGlzcGFyYWRhIGFvIGNsaWNhciBubyBib3TDo28gZGUgc3Vwb3J0ZTtcbiAgICogYGBgXG4gICAqIDxwby1wYWdlLWxvZ2luPlxuICAgKiAgIFtwLXN1cHBvcnRdPVwidGhpcy5teVN1cHBvcnQuYmluZCh0aGlzKVwiPlxuICAgKiA8L3BvLXBhZ2UtbG9naW4+XG4gICAqIGBgYFxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLXN1cHBvcnQnKSBzZXQgc3VwcG9ydCh2YWx1ZTogc3RyaW5nIHwgRnVuY3Rpb24pIHtcbiAgICB0aGlzLl9zdXBwb3J0ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc3VwcG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3VwcG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENvbGXDp8OjbyBkZSBpZGlvbWFzIHF1ZSBvIGNvbXBvbmVudGUgaXLDoSB0cmF0YXIgZSBkaXNwb25pYmlsaXphcsOhIHBhcmEgbyB1c3XDoXJpbyBlc2NvbGhlci5cbiAgICpcbiAgICogQ2FzbyBlc3NhIHByb3ByaWVkYWRlIG7Do28gc2VqYSB1dGlsaXphZGEgbyBjb21wb25lbnRlIG1vc3RyYXLDoSBubyBjb21ibyBvcyBpZGlvbWFzIHF1ZSBlbGUgc3Vwb3J0YSBwb3IgcGFkcsOjby5cbiAgICpcbiAgICogQ2FzbyBhIGNvbGXDp8OjbyB0ZW5oYSB1bSBpZGlvbWEsIGEgcMOhZ2luYSBlc3RhcsOhIG5lc3NlIGlkaW9tYSBlIG7Do28gbW9zdHJhcsOhIG8gY29tYm8uXG4gICAqXG4gICAqIENhc28gc2VqYSBwYXNzYWRvIHVtIGFycmF5IHZhemlvLCBhIHDDoWdpbmEgdGVyw6EgbyBpZGlvbWEgY29uZmlndXJhZG8gbm8gYGkxOG5gIGUgbsOjbyBtb3N0cmFyw6EgbyBjb21ibyBkZSBzZWxlw6fDo28uXG4gICAqXG4gICAqID4gU2UgZm9yIHBhc3NhZG8gdW0gaWRpb21hIG7Do28gc3Vwb3J0YWRvLCBzZXLDoSBwcmVjaXNvIHBhc3NhciBhcyBsaXRlcmFpcyBwZWxhIHByb3ByaWVkYWRlIGBwLWxpdGVyYWxzYC5cbiAgICpcbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1sYW5ndWFnZXMnKSBzZXQgbGFuZ3VhZ2VzTGlzdChsYW5ndWFnZXNMaXN0OiBBcnJheTxQb0xhbmd1YWdlPikge1xuICAgIGlmIChsYW5ndWFnZXNMaXN0KSB7XG4gICAgICBpZiAobGFuZ3VhZ2VzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2VzTGlzdCA9IGxhbmd1YWdlc0xpc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9sYW5ndWFnZXNMaXN0ID0gcG9MYW5ndWFnZURlZmF1bHQuZmlsdGVyKGxhbmd1YWdlID0+IGxhbmd1YWdlLmxhbmd1YWdlID09PSB0aGlzLmxhbmd1YWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbGFuZ3VhZ2VzTGlzdCgpOiBBcnJheTxQb0xhbmd1YWdlPiB7XG4gICAgaWYgKHRoaXMuX2xhbmd1YWdlc0xpc3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZXNMaXN0O1xuICAgIH1cbiAgICByZXR1cm4gcG9MYW5ndWFnZURlZmF1bHQ7XG4gIH1cblxuICBnZXQgc2hvd0xhbmd1YWdlKCkge1xuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlc0xpc3QubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgfHwgZ2V0U2hvcnRCcm93c2VyTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIGdldCBwYWdlTG9naW5MaXRlcmFscygpOiBQb1BhZ2VMb2dpbkxpdGVyYWxzIHtcbiAgICBjb25zdCBsb2dpbkhpbnRXaXRoQ29udGFjdEVtYWlsID0gdGhpcy5jb250YWN0RW1haWxcbiAgICAgID8gdGhpcy5jb25jYXRlbmF0ZUxvZ2luSGludFdpdGhDb250YWN0RW1haWwodGhpcy5jb250YWN0RW1haWwpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wb1BhZ2VMb2dpbkxpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ucG9QYWdlTG9naW5MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAuLi5sb2dpbkhpbnRXaXRoQ29udGFjdEVtYWlsLFxuICAgICAgLi4udGhpcy5saXRlcmFsc1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxvZ2luU2VydmljZTogUG9QYWdlTG9naW5TZXJ2aWNlLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgcG9MYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IHRoaXMucG9MYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubG9naW5TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubG9naW5TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVBvcG92ZXIoKSB7XG4gICAgdGhpcy5zaG93RXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uTG9naW5TdWJtaXQoKTogdm9pZCB7XG4gICAgY29uc3QgbG9naW5Gb3JtOiBQb1BhZ2VMb2dpbiA9IHtcbiAgICAgIGxvZ2luOiB0aGlzLmxvZ2luLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICByZW1lbWJlclVzZXI6IHRoaXMucmVtZW1iZXJVc2VyXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkKSB7XG4gICAgICBsb2dpbkZvcm1bdGhpcy5jdXN0b21GaWVsZE9iamVjdC5wcm9wZXJ0eV0gPSB0aGlzLmN1c3RvbUZpZWxkT2JqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmF1dGhlbnRpY2F0aW9uVXJsKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2dpblN1YnNjcmlwdGlvbiA9IHRoaXMubG9naW5TZXJ2aWNlXG4gICAgICAgIC5vbkxvZ2luKHRoaXMuYXV0aGVudGljYXRpb25VcmwsIHRoaXMuYXV0aGVudGljYXRpb25UeXBlLCBsb2dpbkZvcm0pXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlc1RvUHJvcGVydGllcygpO1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnUE9fVVNFUl9MT0dJTicsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIHRoaXMub3BlbkludGVybmFsTGluaygnLycpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IuY29kZSA9PT0gJzQwMCcgfHwgZXJyb3IuZXJyb3IuY29kZSA9PT0gJzQwMScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZXNUb1Byb3BlcnRpZXMoZXJyb3IpO1xuICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0QmxvY2tlZFVybCh0aGlzLmV4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nLCB0aGlzLmJsb2NrZWRVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2luU3VibWl0LmVtaXQobG9naW5Gb3JtKTtcbiAgICAgIHRoaXMuc2hvd0V4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nID0gdGhpcy5leGNlZWRlZEF0dGVtcHRzV2FybmluZyA+IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q3VzdG9tRmllbGRPYmplY3QocHJvcGVydHkpOiBQb1BhZ2VMb2dpbkN1c3RvbUZpZWxkIHtcbiAgICByZXR1cm4geyBwcm9wZXJ0eSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRXh0ZXJuYWxMaW5rKHVybDogc3RyaW5nKSB7XG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5JbnRlcm5hbExpbmsodXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XG4gIH1cblxuICBwcml2YXRlIHJlZGlyZWN0QmxvY2tlZFVybChhdHRlbXB0czogbnVtYmVyLCBibG9ja2VkVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAoYXR0ZW1wdHMgPT09IDAgJiYgYmxvY2tlZFVybCkge1xuICAgICAgdGhpcy5zaG93RXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcgPSBmYWxzZTtcbiAgICAgIGlzRXh0ZXJuYWxMaW5rKGJsb2NrZWRVcmwpID8gdGhpcy5vcGVuRXh0ZXJuYWxMaW5rKGJsb2NrZWRVcmwpIDogdGhpcy5vcGVuSW50ZXJuYWxMaW5rKGJsb2NrZWRVcmwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFsdWVzVG9Qcm9wZXJ0aWVzKHJlc3VsdD8pIHtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICB0aGlzLmV4Y2VlZGVkQXR0ZW1wdHNXYXJuaW5nID0gcmVzdWx0LmVycm9yLm1heEF0dGVtcHRzUmVtYWluaW5nO1xuICAgICAgdGhpcy5sb2dpbkVycm9ycyA9IHJlc3VsdC5lcnJvci5sb2dpbldhcm5pbmdzO1xuICAgICAgdGhpcy5wYXNzd29yZEVycm9ycyA9IHJlc3VsdC5lcnJvci5wYXNzd29yZFdhcm5pbmdzO1xuICAgICAgdGhpcy5ibG9ja2VkVXJsID0gcmVzdWx0LmVycm9yLmJsb2NrZWRVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhjZWVkZWRBdHRlbXB0c1dhcm5pbmcgPSAwO1xuICAgICAgdGhpcy5sb2dpbkVycm9ycyA9IFtdO1xuICAgICAgdGhpcy5wYXNzd29yZEVycm9ycyA9IFtdO1xuICAgICAgdGhpcy5ibG9ja2VkVXJsID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbmNhdGVuYXRlTG9naW5IaW50V2l0aENvbnRhY3RFbWFpbChjb250YWN0RW1haWw6IHN0cmluZyk7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldExvZ2luRXJyb3JzKHZhbHVlOiBBcnJheTxzdHJpbmc+KTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0UGFzc3dvcmRFcnJvcnModmFsdWU6IEFycmF5PHN0cmluZz4pOiB2b2lkO1xufVxuIl19